DeliveryAdminWindow is now able to look at deliveries

This commit is contained in:
2023-07-13 21:10:48 +02:00
parent e8919cc629
commit fd26ee4f52
7 changed files with 390 additions and 55 deletions

View File

@ -1,7 +1,9 @@
using Elwig.Helpers;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
namespace Elwig.Models {
[Table("delivery"), PrimaryKey("Year", "DId"), Index("DateString", "ZwstId", "LNr", IsUnique = true), Index("LsNr", IsUnique = true)]
@ -72,5 +74,25 @@ namespace Elwig.Models {
[InverseProperty("Delivery")]
public virtual ISet<DeliveryPart> Parts { get; private set; }
public int Weight => Parts.Select(p => p.Weight).Sum();
public IEnumerable<string> SortIds => Parts
.GroupBy(p => p.SortId)
.OrderByDescending(g => g.Select(p => p.Weight).Sum())
.Select(g => g.Select(p => p.SortId).First());
public string SortIdString => string.Join(", ", SortIds);
public int SearchScore(IEnumerable<string> keywords) {
var list = new string?[] {
LsNr, Year.ToString(), Date.ToString("dd.MM.yyyy"), Time.ToString("HH:ss"),
MgNr.ToString(), Member.FamilyName, Member.MiddleName, Member.GivenName, Member.BillingAddress?.Name,
Comment
}.ToList();
list.AddRange(Parts.Select(p => p.SortId).Distinct());
list.AddRange(Parts.Select(p => p.Comment).Distinct());
return Utils.GetSearchScore(list, keywords);
}
}
}

View File

@ -160,7 +160,7 @@ namespace Elwig.Models {
[NotMapped]
public IEnumerable<AreaCom> ActiveAreaCommitments => AreaCommitments
.Where(c => c.YearFrom <= Utils.CurrentSeason && (c.YearTo ?? int.MaxValue) >= Utils.CurrentSeason);
.Where(c => c.YearFrom <= Utils.CurrentNextSeason && (c.YearTo ?? int.MaxValue) >= Utils.CurrentNextSeason);
[InverseProperty("Member")]
public virtual BillingAddr? BillingAddress { get; private set; }
@ -174,32 +174,12 @@ namespace Elwig.Models {
public string FullAddress => $"{Address}, {PostalDest.AtPlz.Plz} {PostalDest.AtPlz.Ort.Name}";
public int SearchScore(IEnumerable<string> keywords) {
keywords = keywords.Where(s => s.Length >= 2 || (s.Length > 0 && s.All(c => char.IsAsciiDigit(c))));
if (!keywords.Any())
return 0;
string?[] check = new string?[] {
return Utils.GetSearchScore(new string?[] {
MgNr.ToString(),
FamilyName.ToLower(), MiddleName?.ToLower(), GivenName.ToLower(),
BillingAddress?.Name.ToLower(),
Comment?.ToLower(),
};
int i = 0;
foreach (string? c in check) {
if (c == null) continue;
var parts = c.Split(" ");
if (keywords.Any(f => c == f)) {
i += 100;
} else if (keywords.Any(f => parts.Any(a => a == f))) {
i += 90;
} else if (keywords.Any(f => parts.Any(a => a.StartsWith(f)))) {
i += 50;
} else if (keywords.Any(f => f != null && c.Contains(f))) {
i += 1;
}
}
return i;
FamilyName, MiddleName, GivenName,
BillingAddress?.Name,
Comment,
}, keywords);
}
}
}