DeliveryAdminWindow is now able to look at deliveries
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user