Compare commits

..

3 Commits

Author SHA1 Message Date
lorenz.stechauner b4d7068023 [WIP] Models/Entities: Remove EF proxies
Test / Run tests (push) Successful in 2m37s
2026-04-02 22:36:29 +02:00
lorenz.stechauner bf7c9532d1 [WIP] Entities: Add AreaComContract to group area commitments together 2026-04-02 21:02:25 +02:00
lorenz.stechauner f96ebdcf60 DeliveryAdminWindow: Fix creation of new deliveries
Test / Run tests (push) Successful in 2m2s
2026-04-02 20:58:01 +02:00
32 changed files with 91 additions and 211 deletions
+2 -1
View File
@@ -221,7 +221,8 @@ namespace Elwig {
MainDispatcher.Invoke(() => { MainDispatcher.Invoke(() => {
foreach (Window w in CurrentApp.Windows) { foreach (Window w in CurrentApp.Windows) {
if (w is not ContextWindow c) continue; if (w is not ContextWindow c) continue;
MainDispatcher.BeginInvoke(c.HintContextChange); MainDispatcher.Invoke(c.HintContextChange);
MainDispatcher.BeginInvoke(c.TryContextReload);
} }
}); });
} }
@@ -52,7 +52,6 @@ namespace Elwig.Dialogs {
ControlUtils.RenewItemsSource(DeliveryInput, await ctx.Deliveries ControlUtils.RenewItemsSource(DeliveryInput, await ctx.Deliveries
.Where(d => d.DateString == $"{_delivery.Date:yyyy-MM-dd}" && d.ZwstId == _delivery.ZwstId) .Where(d => d.DateString == $"{_delivery.Date:yyyy-MM-dd}" && d.ZwstId == _delivery.ZwstId)
.OrderBy(d => d.LsNr) .OrderBy(d => d.LsNr)
.Include(d => d.Member)
.Include(d => d.Parts) .Include(d => d.Parts)
.ToListAsync()); .ToListAsync());
if (DeliveryInput.SelectedItem == null) if (DeliveryInput.SelectedItem == null)
+5 -1
View File
@@ -29,7 +29,11 @@ namespace Elwig.Documents {
public static async Task<MemberDataSheet> Initialize(int mgnr) { public static async Task<MemberDataSheet> Initialize(int mgnr) {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
return new MemberDataSheet(await ctx.Members.Include(m => m.EmailAddresses).Include(m => m.TelephoneNumbers).Where(m => m.MgNr == mgnr).SingleAsync()); return new MemberDataSheet(await ctx.Members
.Include(m => m.EmailAddresses)
.Include(m => m.TelephoneNumbers)
.Where(m => m.MgNr == mgnr)
.SingleAsync());
} }
protected override async Task LoadData(AppDbContext ctx) { protected override async Task LoadData(AppDbContext ctx) {
+4
View File
@@ -162,6 +162,10 @@ namespace Elwig.Helpers {
modelBuilder.Entity<PaymentMember>().Navigation(c => c.Credit).AutoInclude(); modelBuilder.Entity<PaymentMember>().Navigation(c => c.Credit).AutoInclude();
modelBuilder.Entity<PaymentMember>().Navigation(c => c.Member).AutoInclude(); modelBuilder.Entity<PaymentMember>().Navigation(c => c.Member).AutoInclude();
modelBuilder.Entity<PaymentMember>().Navigation(c => c.Variant).AutoInclude(); modelBuilder.Entity<PaymentMember>().Navigation(c => c.Variant).AutoInclude();
modelBuilder.Entity<DeliveryAncmt>().Navigation(a => a.Member).AutoInclude();
modelBuilder.Entity<DeliveryAncmt>().Navigation(a => a.Schedule).AutoInclude();
modelBuilder.Entity<DeliveryAncmt>().Navigation(a => a.Variety).AutoInclude();
modelBuilder.Entity<DeliverySchedule>().Navigation(s => s.Branch).AutoInclude();
} }
public override void Dispose() { public override void Dispose() {
+1 -1
View File
@@ -21,7 +21,7 @@ namespace Elwig.Helpers.Billing {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
Season = ctx.Seasons.Find(Year)!; Season = ctx.Seasons.Find(Year)!;
Attributes = ctx.WineAttributes.ToDictionary(a => a.AttrId, a => a.Name); Attributes = ctx.WineAttributes.ToDictionary(a => a.AttrId, a => a.Name);
Modifiers = ctx.Modifiers.Where(m => m.Year == Year).Include(m => m.Season).ToDictionary(m => m.ModId, m => (m.Abs, m.Rel)); Modifiers = ctx.Modifiers.Where(m => m.Year == Year).ToDictionary(m => m.ModId, m => (m.Abs, m.Rel));
AreaComTypes = ctx.AreaCommitmentTypes.ToDictionary(v => v.VtrgId, v => (v.SortId, v.AttrId, v.Discriminator, v.MinKgPerHa, v.PenaltyAmount)); AreaComTypes = ctx.AreaCommitmentTypes.ToDictionary(v => v.VtrgId, v => (v.SortId, v.AttrId, v.Discriminator, v.MinKgPerHa, v.PenaltyAmount));
} }
+1 -1
View File
@@ -16,7 +16,7 @@ namespace Elwig.Helpers.Billing {
public BillingVariant(int year, int avnr) : base(year) { public BillingVariant(int year, int avnr) : base(year) {
AvNr = avnr; AvNr = avnr;
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
PaymentVariant = ctx.PaymentVariants.Include(v => v.Season).Where(v => v.Year == Year && v.AvNr == AvNr).Single() ?? throw new ArgumentException("PaymentVar not found"); PaymentVariant = ctx.PaymentVariants.Where(v => v.Year == Year && v.AvNr == AvNr).Single();
Data = PaymentBillingData.FromJson(PaymentVariant.Data, Utils.GetVaributes(ctx, Year, onlyDelivered: false)); Data = PaymentBillingData.FromJson(PaymentVariant.Data, Utils.GetVaributes(ctx, Year, onlyDelivered: false));
} }
+1 -1
View File
@@ -860,7 +860,7 @@ namespace Elwig.Helpers.Export {
["ried"] = p.Rd?.Name, ["ried"] = p.Rd?.Name,
["net_weight"] = p.IsNetWeight, ["net_weight"] = p.IsNetWeight,
["manual_weighing"] = p.IsManualWeighing, ["manual_weighing"] = p.IsManualWeighing,
["modids"] = new JsonArray(p.Modifiers.Select(m => (JsonNode)m.ModId).ToArray()), ["modids"] = new JsonArray(p.PartModifiers.Select(m => (JsonNode)m.ModId).ToArray()),
["comment"] = p.Comment, ["comment"] = p.Comment,
["created_at"] = $"{p.CreatedAt:yyyy-MM-ddTHH:mm:ssK}", ["created_at"] = $"{p.CreatedAt:yyyy-MM-ddTHH:mm:ssK}",
["modified_at"] = $"{p.ModifiedAt:yyyy-MM-ddTHH:mm:ssK}", ["modified_at"] = $"{p.ModifiedAt:yyyy-MM-ddTHH:mm:ssK}",
+1 -6
View File
@@ -28,12 +28,7 @@ namespace Elwig.Models.Dtos {
} }
public static async Task<DeliveryAncmtListData> FromQuery(IQueryable<DeliveryAncmt> query, List<string> filterNames) { public static async Task<DeliveryAncmtListData> FromQuery(IQueryable<DeliveryAncmt> query, List<string> filterNames) {
return new((await query return new((await query.ToListAsync()).Select(d => new DeliveryAncmtListRow(d)), filterNames);
.Include(a => a.Schedule.Branch)
.Include(a => a.Member)
.Include(a => a.Variety)
.AsSplitQuery()
.ToListAsync()).Select(d => new DeliveryAncmtListRow(d)), filterNames);
} }
} }
@@ -52,12 +52,8 @@ namespace Elwig.Models.Dtos {
if (mgnr != null) q = q.Where(p => p.Delivery.MgNr == mgnr); if (mgnr != null) q = q.Where(p => p.Delivery.MgNr == mgnr);
await q await q
.Include(p => p.Delivery) .Include(p => p.Delivery)
.Include(p => p.Variety)
.Include(p => p.Attribute)
.Include(p => p.Quality)
.Include(p => p.Buckets) .Include(p => p.Buckets)
.Include(p => p.PartModifiers) .Include(p => p.PartModifiers).ThenInclude(m => m.Modifier)
.ThenInclude(m => m.Modifier)
.LoadAsync(); .LoadAsync();
return await table.FromSqlRaw($""" return await table.FromSqlRaw($"""
SELECT p.* SELECT p.*
-5
View File
@@ -40,12 +40,7 @@ namespace Elwig.Models.Dtos {
.Include(p => p.Delivery.Member.Branch) .Include(p => p.Delivery.Member.Branch)
.Include(p => p.Delivery.Branch) .Include(p => p.Delivery.Branch)
.Include(p => p.PartModifiers).ThenInclude(m => m.Modifier) .Include(p => p.PartModifiers).ThenInclude(m => m.Modifier)
.Include(p => p.Variety)
.Include(p => p.Attribute)
.Include(p => p.Cultivation)
.Include(p => p.Origin) .Include(p => p.Origin)
.Include(p => p.Quality)
.AsSplitQuery()
.ToListAsync()).Select(d => new DeliveryJournalRow(d)), filterNames); .ToListAsync()).Select(d => new DeliveryJournalRow(d)), filterNames);
} }
} }
-4
View File
@@ -49,13 +49,9 @@ namespace Elwig.Models.Dtos {
public static async Task<MemberListData> FromQuery(IQueryable<Member> query, List<string> filterNames, IEnumerable<string> filterAreaCom) { public static async Task<MemberListData> FromQuery(IQueryable<Member> query, List<string> filterNames, IEnumerable<string> filterAreaCom) {
var areaComs = await query.Include(m => m.AreaCommitments).ToDictionaryAsync(m => m.MgNr, m => Utils.ActiveAreaCommitments(m.AreaCommitments)); var areaComs = await query.Include(m => m.AreaCommitments).ToDictionaryAsync(m => m.MgNr, m => Utils.ActiveAreaCommitments(m.AreaCommitments));
return new((await query return new((await query
.Include(m => m.DefaultWbKg!.AtKg)
.Include(m => m.Branch) .Include(m => m.Branch)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.AsSplitQuery()
.ToListAsync()).Select(m => new MemberListRow(m, .ToListAsync()).Select(m => new MemberListRow(m,
areaComs[m.MgNr].Sum(c => c.Area), areaComs[m.MgNr].Sum(c => c.Area),
areaComs[m.MgNr].Where(c => filterAreaCom.Contains(c.VtrgId)).GroupBy(c => c.VtrgId).ToDictionary(g => g.Key, g => g.Sum(c => c.Area)))), areaComs[m.MgNr].Where(c => filterAreaCom.Contains(c.VtrgId)).GroupBy(c => c.VtrgId).ToDictionary(g => g.Key, g => g.Sum(c => c.Area)))),
+4 -1
View File
@@ -106,7 +106,10 @@ namespace Elwig.Models.Entities {
[InverseProperty(nameof(DeliveryPart.Delivery))] [InverseProperty(nameof(DeliveryPart.Delivery))]
public virtual ICollection<DeliveryPart> Parts { get; private set; } = null!; public virtual ICollection<DeliveryPart> Parts { get; private set; } = null!;
[NotMapped] [NotMapped]
public IEnumerable<DeliveryPart> FilteredParts { get; set; } = []; public IEnumerable<DeliveryPart> FilteredParts => PartFilter == null ? Parts : Parts.Where(p => PartFilter(p));
[NotMapped]
public Predicate<DeliveryPart>? PartFilter { get; set; }
public int Weight => Parts.Sum(p => p.Weight); public int Weight => Parts.Sum(p => p.Weight);
public int FilteredWeight => FilteredParts.Sum(p => p.Weight); public int FilteredWeight => FilteredParts.Sum(p => p.Weight);
+3 -1
View File
@@ -27,7 +27,9 @@ namespace Elwig.Models.Entities {
public virtual ICollection<WbGem> Gems { get; private set; } = null!; public virtual ICollection<WbGem> Gems { get; private set; } = null!;
[InverseProperty(nameof(Parent))] [InverseProperty(nameof(Parent))]
public virtual ICollection<WineOrigin> Children { get; private set; } = null!; public virtual ICollection<WineOrigin> RealChildren { get; private set; } = null!;
[NotMapped]
public List<WineOrigin> Children { get; private set; } = [];
public int Level => (Parent?.Level + 1) ?? 0; public int Level => (Parent?.Level + 1) ?? 0;
+2 -8
View File
@@ -27,10 +27,7 @@ namespace Elwig.Services {
public static async Task<Member?> GetMemberAsync(int mgnr) { public static async Task<Member?> GetMemberAsync(int mgnr) {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
return await ctx.Members return await ctx.Members.FirstOrDefaultAsync(m => m.MgNr == mgnr);
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.FirstOrDefaultAsync(m => m.MgNr == mgnr);
} }
public static Member? GetMember(int mgnr) { public static Member? GetMember(int mgnr) {
@@ -71,7 +68,7 @@ namespace Elwig.Services {
vm.IsNetWeight = p.IsNetWeight; vm.IsNetWeight = p.IsNetWeight;
vm.Modifiers.Clear(); vm.Modifiers.Clear();
foreach (var m in p.Modifiers) { foreach (var m in p.PartModifiers) {
vm.Modifiers.Add((Modifier)ControlUtils.GetItemFromSourceWithPk(vm.ModifiersSource, m.Year, m.ModId)!); vm.Modifiers.Add((Modifier)ControlUtils.GetItemFromSourceWithPk(vm.ModifiersSource, m.Year, m.ModId)!);
} }
@@ -812,9 +809,6 @@ namespace Elwig.Services {
.Select(p => p.Delivery) .Select(p => p.Delivery)
.Distinct() .Distinct()
.Include(d => d.Parts).ThenInclude(p => p.PartModifiers) .Include(d => d.Parts).ThenInclude(p => p.PartModifiers)
.Include(d => d.Parts).ThenInclude(p => p.Rd)
.Include(d => d.Parts).ThenInclude(p => p.Kg!.Gl)
.AsSplitQuery()
.ToListAsync(); .ToListAsync();
var wbKgs = list var wbKgs = list
.SelectMany(d => d.Parts) .SelectMany(d => d.Parts)
-7
View File
@@ -509,10 +509,8 @@ namespace Elwig.Services {
try { try {
var members = await query var members = await query
.OrderBy(m => m.MgNr) .OrderBy(m => m.MgNr)
.Include(m => m.BillingAddress)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.AsSplitQuery()
.ToListAsync(); .ToListAsync();
using var exporter = new VCard(d.FileName); using var exporter = new VCard(d.FileName);
await exporter.ExportAsync(members); await exporter.ExportAsync(members);
@@ -537,17 +535,12 @@ namespace Elwig.Services {
try { try {
var members = await query var members = await query
.OrderBy(m => m.MgNr) .OrderBy(m => m.MgNr)
.Include(m => m.BillingAddress)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.Include(m => m.DefaultWbKg!.Gl)
.AsSplitQuery()
.ToListAsync(); .ToListAsync();
var areaComs = await query var areaComs = await query
.SelectMany(m => m.AreaCommitments) .SelectMany(m => m.AreaCommitments)
.Select(c => c.Contract).Distinct() .Select(c => c.Contract).Distinct()
.Include(c => c.Rd)
.Include(c => c.Kg.Gl)
.Include(c => c.Revisions) .Include(c => c.Revisions)
.ToListAsync(); .ToListAsync();
var wbKgs = members var wbKgs = members
+3 -22
View File
@@ -25,18 +25,13 @@ namespace Elwig.Services {
var path = Path.Combine(App.TempPath, filename); var path = Path.Combine(App.TempPath, filename);
var members = await query var members = await query
.OrderBy(m => m.MgNr) .OrderBy(m => m.MgNr)
.Include(m => m.BillingAddress)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.Include(m => m.DefaultWbKg!.Gl)
.AsSplitQuery()
.ToListAsync(); .ToListAsync();
var areaComs = await query var areaComs = await query
.SelectMany(m => m.AreaCommitments) .SelectMany(m => m.AreaCommitments)
.Select(c => c.Contract).Distinct() .Select(c => c.Contract).Distinct()
.OrderBy(c => c.FbNr) .OrderBy(c => c.FbNr)
.Include(c => c.Rd)
.Include(c => c.Kg.Gl)
.Include(c => c.Revisions) .Include(c => c.Revisions)
.ToListAsync(); .ToListAsync();
var wbKgs = members var wbKgs = members
@@ -73,10 +68,7 @@ namespace Elwig.Services {
var list = await query var list = await query
.Select(p => p.Delivery) .Select(p => p.Delivery)
.Distinct() .Distinct()
.Include(d => d.Parts).ThenInclude(p => p.PartModifiers).ThenInclude(m => m.Modifier) .Include(d => d.Parts).ThenInclude(p => p.PartModifiers)
.Include(d => d.Parts).ThenInclude(p => p.Rd)
.Include(d => d.Parts).ThenInclude(p => p.Kg!.Gl)
.AsSplitQuery()
.ToListAsync(); .ToListAsync();
var wbKgs = list var wbKgs = list
.SelectMany(d => d.Parts) .SelectMany(d => d.Parts)
@@ -114,27 +106,19 @@ namespace Elwig.Services {
using (var ctx = new AppDbContext()) { using (var ctx = new AppDbContext()) {
members = await ctx.Members members = await ctx.Members
.Where(ChangedMembers) .Where(ChangedMembers)
.Include(m => m.BillingAddress)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.Include(m => m.DefaultWbKg!.Gl)
.OrderBy(m => m.MgNr) .OrderBy(m => m.MgNr)
.AsSplitQuery()
.ToListAsync(); .ToListAsync();
areaComs = await ctx.AreaCommitmentContracts areaComs = await ctx.AreaCommitmentContracts
.Where(ChangedAreaComContracts) .Where(ChangedAreaComContracts)
.Include(c => c.Rd)
.Include(c => c.Kg.Gl)
.Include(c => c.Revisions) .Include(c => c.Revisions)
.OrderBy(c => c.FbNr) .OrderBy(c => c.FbNr)
.ToListAsync(); .ToListAsync();
deliveries = await ctx.Deliveries deliveries = await ctx.Deliveries
.Where(ChangedDeliveries) .Where(ChangedDeliveries)
.Include(d => d.Parts).ThenInclude(p => p.PartModifiers).ThenInclude(m => m.Modifier) .Include(d => d.Parts).ThenInclude(p => p.PartModifiers)
.Include(d => d.Parts).ThenInclude(p => p.Rd)
.Include(d => d.Parts).ThenInclude(p => p.Kg).ThenInclude(k => k!.Gl)
.OrderBy(d => d.DateString).ThenBy(d => d.TimeString).ThenBy(d => d.LsNr) .OrderBy(d => d.DateString).ThenBy(d => d.TimeString).ThenBy(d => d.LsNr)
.AsSplitQuery()
.ToListAsync(); .ToListAsync();
} }
var wbKgs = members var wbKgs = members
@@ -179,11 +163,8 @@ namespace Elwig.Services {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
var deliveries = await ctx.Deliveries var deliveries = await ctx.Deliveries
.Where(d => d.Year == year && d.ZwstId == App.ZwstId) .Where(d => d.Year == year && d.ZwstId == App.ZwstId)
.Include(d => d.Parts).ThenInclude(p => p.PartModifiers).ThenInclude(m => m.Modifier) .Include(d => d.Parts).ThenInclude(p => p.PartModifiers)
.Include(d => d.Parts).ThenInclude(p => p.Rd)
.Include(d => d.Parts).ThenInclude(p => p.Kg).ThenInclude(k => k!.Gl)
.OrderBy(d => d.DateString).ThenBy(d => d.TimeString).ThenBy(d => d.LsNr) .OrderBy(d => d.DateString).ThenBy(d => d.TimeString).ThenBy(d => d.LsNr)
.AsSplitQuery()
.ToListAsync(); .ToListAsync();
var wbKgs = deliveries var wbKgs = deliveries
.SelectMany(d => d.Parts) .SelectMany(d => d.Parts)
-1
View File
@@ -349,7 +349,6 @@ namespace Elwig.Windows {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
list = await ctx.PlzDestinations list = await ctx.PlzDestinations
.Where(p => p.Plz == plz) .Where(p => p.Plz == plz)
.Include(p => p.Ort)
.ToListAsync(); .ToListAsync();
} }
+1 -12
View File
@@ -59,20 +59,9 @@ namespace Elwig.Windows {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
var (_, contractQuery, areaComQuery, filter) = await vm.GetFilters(ctx); var (_, contractQuery, areaComQuery, filter) = await vm.GetFilters(ctx);
var contracts = await contractQuery var contracts = await contractQuery
.Include(c => c.Kg.AtKg)
.Include(c => c.Rd!.Kg.AtKg)
.Include(c => c.Revisions).ThenInclude(a => a.WineCult)
.Include(c => c.Revisions).ThenInclude(a => a.AreaComType.WineAttr)
.Include(c => c.Revisions).ThenInclude(a => a.AreaComType.WineVar)
.Include(c => c.Revisions).ThenInclude(a => a.Member) .Include(c => c.Revisions).ThenInclude(a => a.Member)
.ToListAsync(); .ToListAsync();
var areaComs = await areaComQuery var areaComs = await areaComQuery.ToListAsync();
.Include(c => c.Contract.Kg.AtKg)
.Include(c => c.Contract.Rd!.Kg.AtKg)
.Include(a => a.WineCult)
.Include(a => a.AreaComType.WineAttr)
.Include(a => a.AreaComType.WineVar)
.ToListAsync();
if (filter.Count > 0 && contracts.Count > 0) { if (filter.Count > 0 && contracts.Count > 0) {
var dict = contracts.AsParallel() var dict = contracts.AsParallel()
@@ -21,8 +21,6 @@ namespace Elwig.Windows {
private async Task AreaCommitmentTypesInitEditing(AppDbContext ctx) { private async Task AreaCommitmentTypesInitEditing(AppDbContext ctx) {
_actList = new(await ctx.AreaCommitmentTypes _actList = new(await ctx.AreaCommitmentTypes
.OrderBy(v => v.VtrgId) .OrderBy(v => v.VtrgId)
.Include(t => t.WineVar)
.Include(t => t.WineAttr)
.ToListAsync()); .ToListAsync());
_acts = _actList.ToDictionary(v => v.VtrgId, v => (string?)v.VtrgId); _acts = _actList.ToDictionary(v => v.VtrgId, v => (string?)v.VtrgId);
_actIds = _actList.ToDictionary(v => v, v => v.VtrgId); _actIds = _actList.ToDictionary(v => v, v => v.VtrgId);
+2 -2
View File
@@ -21,7 +21,7 @@ namespace Elwig.Windows {
private async Task BranchesInitEditing(AppDbContext ctx) { private async Task BranchesInitEditing(AppDbContext ctx) {
_branchList = new(await ctx.Branches _branchList = new(await ctx.Branches
.OrderBy(b => b.Name) .OrderBy(b => b.Name)
.Include(b => b.PostalDest!.AtPlz) .Include(b => b.PostalDest)
.ToListAsync()); .ToListAsync());
_branches = _branchList.ToDictionary(b => b.ZwstId, b => (string?)b.ZwstId); _branches = _branchList.ToDictionary(b => b.ZwstId, b => (string?)b.ZwstId);
_branchIds = _branchList.ToDictionary(b => b, b => b.ZwstId); _branchIds = _branchList.ToDictionary(b => b, b => b.ZwstId);
@@ -32,7 +32,7 @@ namespace Elwig.Windows {
private async Task BranchesFinishEditing(AppDbContext ctx) { private async Task BranchesFinishEditing(AppDbContext ctx) {
ControlUtils.RenewItemsSource(BranchList, await ctx.Branches ControlUtils.RenewItemsSource(BranchList, await ctx.Branches
.OrderBy(b => b.Name) .OrderBy(b => b.Name)
.Include(b => b.PostalDest!.AtPlz) .Include(b => b.PostalDest)
.ToListAsync()); .ToListAsync());
_branchList = null; _branchList = null;
_branches = null; _branches = null;
@@ -22,7 +22,6 @@ namespace Elwig.Windows {
ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons
.OrderByDescending(s => s.Year) .OrderByDescending(s => s.Year)
.Include(s => s.Modifiers) .Include(s => s.Modifiers)
.Include(s => s.Currency)
.ToListAsync()); .ToListAsync());
SeasonList_SelectionChanged(null, null); SeasonList_SelectionChanged(null, null);
} }
@@ -33,7 +32,6 @@ namespace Elwig.Windows {
ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons
.OrderByDescending(s => s.Year) .OrderByDescending(s => s.Year)
.Include(s => s.Modifiers) .Include(s => s.Modifiers)
.Include(s => s.Currency)
.ToListAsync()); .ToListAsync());
_seasonChanged = false; _seasonChanged = false;
} }
+1 -4
View File
@@ -163,12 +163,11 @@ namespace Elwig.Windows {
ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons
.OrderByDescending(s => s.Year) .OrderByDescending(s => s.Year)
.Include(s => s.Modifiers) .Include(s => s.Modifiers)
.Include(s => s.Currency)
.ToListAsync(), null, ControlUtils.RenewSourceDefault.First); .ToListAsync(), null, ControlUtils.RenewSourceDefault.First);
var year = (SeasonList.SelectedItem as Season)?.Year; var year = (SeasonList.SelectedItem as Season)?.Year;
ControlUtils.RenewItemsSource(BranchList, await ctx.Branches ControlUtils.RenewItemsSource(BranchList, await ctx.Branches
.OrderBy(b => b.Name) .OrderBy(b => b.Name)
.Include(b => b.PostalDest!.AtPlz) .Include(b => b.PostalDest)
.ToListAsync(), null, ControlUtils.RenewSourceDefault.First); .ToListAsync(), null, ControlUtils.RenewSourceDefault.First);
ControlUtils.RenewItemsSource(WineAttributeList, await ctx.WineAttributes ControlUtils.RenewItemsSource(WineAttributeList, await ctx.WineAttributes
.OrderBy(a => a.Name) .OrderBy(a => a.Name)
@@ -181,8 +180,6 @@ namespace Elwig.Windows {
ControlUtils.RenewItemsSource(AreaCommitmentTypeWineAttributeInput, attrList); ControlUtils.RenewItemsSource(AreaCommitmentTypeWineAttributeInput, attrList);
ControlUtils.RenewItemsSource(AreaCommitmentTypeList, await ctx.AreaCommitmentTypes ControlUtils.RenewItemsSource(AreaCommitmentTypeList, await ctx.AreaCommitmentTypes
.OrderBy(t => t.VtrgId) .OrderBy(t => t.VtrgId)
.Include(t => t.WineVar)
.Include(t => t.WineAttr)
.ToListAsync(), null, ControlUtils.RenewSourceDefault.First); .ToListAsync(), null, ControlUtils.RenewSourceDefault.First);
ControlUtils.RenewItemsSource(WineCultivationList, await ctx.WineCultivations ControlUtils.RenewItemsSource(WineCultivationList, await ctx.WineCultivations
.OrderBy(c => c.Name) .OrderBy(c => c.Name)
+11 -3
View File
@@ -30,11 +30,19 @@ namespace Elwig.Windows {
} }
public async void ForceContextReload(object sender, EventArgs evt) { public async void ForceContextReload(object sender, EventArgs evt) {
await HintContextChange(); await ForceContextReload();
} }
public async Task HintContextChange() { public async Task ForceContextReload() {
HintContextChange();
await TryContextReload();
}
public void HintContextChange() {
_renewPending = true; _renewPending = true;
}
public async Task TryContextReload() {
if (LockContext) return; if (LockContext) return;
await EnsureContextRenewed(); await EnsureContextRenewed();
} }
@@ -49,9 +57,9 @@ namespace Elwig.Windows {
protected async Task EnsureContextRenewed() { protected async Task EnsureContextRenewed() {
if (!_renewPending) return; if (!_renewPending) return;
_renewPending = false;
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
await OnRenewContext(ctx); await OnRenewContext(ctx);
_renewPending = false;
} }
virtual protected async Task OnInit(AppDbContext ctx) { } virtual protected async Task OnInit(AppDbContext ctx) { }
+25 -40
View File
@@ -428,7 +428,10 @@ namespace Elwig.Windows {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
var (_, deliveryQuery, deliveryPartsQuery, predicate, filter) = await vm.GetFilters(ctx); var (_, deliveryQuery, deliveryPartsQuery, predicate, filter) = await vm.GetFilters(ctx);
var deliveries = await deliveryQuery var deliveries = await deliveryQuery
.Include(d => d.Parts).ThenInclude(p => p.PartModifiers).ThenInclude(m => m.Modifier)
.Include(d => d.Member.EmailAddresses) .Include(d => d.Member.EmailAddresses)
.IgnoreAutoIncludes()
.AsSplitQuery()
.ToListAsync(); .ToListAsync();
deliveries.Reverse(); deliveries.Reverse();
@@ -443,11 +446,7 @@ namespace Elwig.Windows {
.Select(a => a.Key)]; .Select(a => a.Key)];
} }
var filteredParts = await deliveryPartsQuery deliveries.ForEach(d => { d.PartFilter = predicate; });
.Include(p => p.PartModifiers).ThenInclude(p => p.Modifier)
.GroupBy(p => new { p.Year, p.DId })
.ToDictionaryAsync(g => (g.Key.Year, g.Key.DId), g => g.ToList());
deliveries.ForEach(d => { d.FilteredParts = filteredParts.GetValueOrDefault((d.Year, d.DId)) ?? []; });
var deliveryPartsNum = await deliveryPartsQuery.CountAsync(); var deliveryPartsNum = await deliveryPartsQuery.CountAsync();
var varieties = await deliveryPartsQuery.Select(d => d.SortId).Distinct().ToListAsync(); var varieties = await deliveryPartsQuery.Select(d => d.SortId).Distinct().ToListAsync();
@@ -542,8 +541,6 @@ namespace Elwig.Windows {
var y = d?.Year ?? ViewModel.FilterSeason; var y = d?.Year ?? ViewModel.FilterSeason;
ControlUtils.RenewItemsSource(MemberInput, await ctx.Members ControlUtils.RenewItemsSource(MemberInput, await ctx.Members
.Where(m => m.IsActive || !IsCreating) .Where(m => m.IsActive || !IsCreating)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.OrderBy(m => m.Name) .OrderBy(m => m.Name)
.ThenBy(m => m.GivenName) .ThenBy(m => m.GivenName)
.ToListAsync()); .ToListAsync());
@@ -560,22 +557,22 @@ namespace Elwig.Windows {
ControlUtils.RenewItemsSource(ModifiersInput, await ctx.Modifiers ControlUtils.RenewItemsSource(ModifiersInput, await ctx.Modifiers
.Where(m => m.Year == y && (!IsCreating || m.IsActive)) .Where(m => m.Year == y && (!IsCreating || m.IsActive))
.OrderBy(m => m.Ordering) .OrderBy(m => m.Ordering)
.Include(m => m.Season.Currency)
.ToListAsync()); .ToListAsync());
ControlUtils.RenewItemsSource(WineOriginInput, (await ctx.WineOrigins.Include(o => o.Parent).Include(o => o.Children).ToListAsync()).OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId)); var origins = await ctx.WineOrigins.ToListAsync();
origins.ForEach(o => { origins.FirstOrDefault(p => p.HkId == o.ParentHkId)?.Children.Add(o); });
origins = [.. origins.OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId)];
ControlUtils.RenewItemsSource(WineOriginInput, origins);
var kgList = (await ctx.Katastralgemeinden var kgList = (await ctx.Katastralgemeinden
.Where(k => k.WbKg != null) .Where(k => k.WbKg != null)
.Include(k => k.WbKg) .Include(k => k.WbKg)
.Include(k => k.Gem.WbGem) .Include(k => k.Gem.WbGem)
.OrderBy(k => k.Name) .OrderBy(k => k.Name)
.AsSplitQuery()
.ToListAsync()).Cast<object>().ToList(); .ToListAsync()).Cast<object>().ToList();
kgList.Insert(0, new NullItem()); kgList.Insert(0, new NullItem());
ControlUtils.RenewItemsSource(WineKgInput, kgList); ControlUtils.RenewItemsSource(WineKgInput, kgList);
UpdateRdInput(); UpdateRdInput();
if (IsCreating) await UpdateLsNr(); if (IsCreating) await UpdateLsNr();
await RefreshDeliveryParts();
RefreshInputs(); RefreshInputs();
} }
@@ -593,11 +590,7 @@ namespace Elwig.Windows {
.Where(m => m.Year == d.Year && (!IsCreating || m.IsActive)) .Where(m => m.Year == d.Year && (!IsCreating || m.IsActive))
.OrderBy(m => m.Ordering) .OrderBy(m => m.Ordering)
.ToListAsync()); .ToListAsync());
ControlUtils.RenewItemsSource(DeliveryPartList, await ctx.DeliveryParts ControlUtils.RenewItemsSource(DeliveryPartList, d.Parts, DeliveryPartList_SelectionChanged, ControlUtils.RenewSourceDefault.First);
.Where(p => p.Year == d.Year && p.DId == d.DId)
.OrderBy(p => p.DPNr)
.Include(p => p.PartModifiers)
.ToListAsync(), DeliveryPartList_SelectionChanged, ControlUtils.RenewSourceDefault.First);
} else { } else {
ControlUtils.RenewItemsSource(ModifiersInput, await ctx.Modifiers ControlUtils.RenewItemsSource(ModifiersInput, await ctx.Modifiers
.Where(m => m.Year == ViewModel.FilterSeason && (!IsCreating || m.IsActive)) .Where(m => m.Year == ViewModel.FilterSeason && (!IsCreating || m.IsActive))
@@ -825,11 +818,12 @@ namespace Elwig.Windows {
} }
EmptyScale(); EmptyScale();
await EnsureContextRenewed(); await EnsureContextRenewed();
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
ControlUtils.SelectItem(DeliveryList, p?.Delivery); ControlUtils.SelectItemWithPk(DeliveryList, p?.Year, p?.DId);
DeliveryPartList.SelectedItem = null; DeliveryPartList.SelectedItem = null;
DeliveryPartList.ScrollIntoView(DeliveryPartList.ItemsSource.Cast<object>().Last()); DeliveryPartList.ScrollIntoView(DeliveryPartList.ItemsSource.Cast<object>().LastOrDefault());
InitialInputs(); InitialInputs();
} }
@@ -862,26 +856,22 @@ namespace Elwig.Windows {
} }
EmptyScale(); EmptyScale();
await EnsureContextRenewed();
if (p?.Delivery != null) {
try {
using var doc = await DeliveryNote.Initialize(p.Year, p.DId);
using (var ctx = new AppDbContext()) {
await doc.Generate(ctx);
}
if (App.Config.Debug) {
doc.Show();
} else {
await doc.Print(2);
}
} catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
Utils.RunBackground("Lieferschein drucken", async () => {
using var doc = await DeliveryNote.Initialize(p.Year, p.DId);
using (var ctx = new AppDbContext()) {
await doc.Generate(ctx);
}
if (App.Config.Debug) {
doc.Show();
} else {
await doc.Print(2);
}
});
await EnsureContextRenewed();
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
DeliveryList.SelectedItem = null; DeliveryList.SelectedItem = null;
await EnsureContextRenewed();
InitInputs(); InitInputs();
} }
@@ -898,8 +888,6 @@ namespace Elwig.Windows {
ControlUtils.RenewItemsSource(AttributeInput, attrList, null, ControlUtils.RenewSourceDefault.First); ControlUtils.RenewItemsSource(AttributeInput, attrList, null, ControlUtils.RenewSourceDefault.First);
ControlUtils.RenewItemsSource(MemberInput, await ctx.Members ControlUtils.RenewItemsSource(MemberInput, await ctx.Members
.Where(m => m.IsActive || !ViewModel.IsReceipt) .Where(m => m.IsActive || !ViewModel.IsReceipt)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.OrderBy(m => m.Name) .OrderBy(m => m.Name)
.ThenBy(m => m.GivenName) .ThenBy(m => m.GivenName)
.ToListAsync()); .ToListAsync());
@@ -940,12 +928,9 @@ namespace Elwig.Windows {
ControlUtils.RenewItemsSource(ModifiersInput, await ctx.Modifiers ControlUtils.RenewItemsSource(ModifiersInput, await ctx.Modifiers
.Where(m => m.Year == ViewModel.FilterSeason && m.IsActive) .Where(m => m.Year == ViewModel.FilterSeason && m.IsActive)
.OrderBy(m => m.Ordering) .OrderBy(m => m.Ordering)
.Include(m => m.Season.Currency)
.ToListAsync()); .ToListAsync());
ControlUtils.RenewItemsSource(MemberInput, await ctx.Members ControlUtils.RenewItemsSource(MemberInput, await ctx.Members
.Where(m => m.IsActive || !ViewModel.IsReceipt) .Where(m => m.IsActive || !ViewModel.IsReceipt)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.OrderBy(m => m.Name) .OrderBy(m => m.Name)
.ThenBy(m => m.GivenName) .ThenBy(m => m.GivenName)
.ToListAsync()); .ToListAsync());
+1 -13
View File
@@ -85,7 +85,6 @@ namespace Elwig.Windows {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
var list = await ctx.DeliverySchedules var list = await ctx.DeliverySchedules
.Where(s => s.Year == ViewModel.FilterSeason) .Where(s => s.Year == ViewModel.FilterSeason)
.Include(s => s.Branch)
.OrderBy(s => s.DateString) .OrderBy(s => s.DateString)
.ThenBy(s => s.Branch.Name) .ThenBy(s => s.Branch.Name)
.ThenBy(s => s.Description) .ThenBy(s => s.Description)
@@ -110,12 +109,7 @@ namespace Elwig.Windows {
var (filter, deliveryAncmts, stat) = await Task.Run(async () => { var (filter, deliveryAncmts, stat) = await Task.Run(async () => {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
var (_, deliveryAncmtQuery, filter) = await vm.GetFilters(ctx); var (_, deliveryAncmtQuery, filter) = await vm.GetFilters(ctx);
var deliveryAncmts = await deliveryAncmtQuery var deliveryAncmts = await deliveryAncmtQuery.ToListAsync();
.Include(a => a.Member.BillingAddress)
.Include(a => a.Schedule)
.Include(a => a.Variety)
.AsSplitQuery()
.ToListAsync();
if (filter.Count > 0 && deliveryAncmts.Count > 0) { if (filter.Count > 0 && deliveryAncmts.Count > 0) {
var dict = deliveryAncmts.AsParallel() var dict = deliveryAncmts.AsParallel()
@@ -189,8 +183,6 @@ namespace Elwig.Windows {
ControlUtils.RenewItemsSource(MemberInput, await ctx.Members ControlUtils.RenewItemsSource(MemberInput, await ctx.Members
.Where(m => m.IsActive || !IsCreating) .Where(m => m.IsActive || !IsCreating)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.OrderBy(m => m.Name) .OrderBy(m => m.Name)
.ThenBy(m => m.GivenName) .ThenBy(m => m.GivenName)
.ThenBy(m => m.MgNr) .ThenBy(m => m.MgNr)
@@ -286,8 +278,6 @@ namespace Elwig.Windows {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
ControlUtils.RenewItemsSource(MemberInput, await ctx.Members ControlUtils.RenewItemsSource(MemberInput, await ctx.Members
.Where(m => m.IsActive || !IsCreating) .Where(m => m.IsActive || !IsCreating)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.OrderBy(m => m.Name) .OrderBy(m => m.Name)
.ThenBy(m => m.GivenName) .ThenBy(m => m.GivenName)
.ThenBy(m => m.MgNr) .ThenBy(m => m.MgNr)
@@ -415,8 +405,6 @@ namespace Elwig.Windows {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
ControlUtils.RenewItemsSource(MemberInput, await ctx.Members ControlUtils.RenewItemsSource(MemberInput, await ctx.Members
.Where(m => m.IsActive || !IsCreating) .Where(m => m.IsActive || !IsCreating)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.OrderBy(m => m.Name) .OrderBy(m => m.Name)
.ThenBy(m => m.GivenName) .ThenBy(m => m.GivenName)
.ThenBy(m => m.MgNr) .ThenBy(m => m.MgNr)
@@ -47,8 +47,6 @@ namespace Elwig.Windows {
var (_, deliveryScheduleQuery, filter) = await vm.GetFilters(ctx); var (_, deliveryScheduleQuery, filter) = await vm.GetFilters(ctx);
var deliverySchedules = await deliveryScheduleQuery var deliverySchedules = await deliveryScheduleQuery
.Include(s => s.Varieties) .Include(s => s.Varieties)
.Include(s => s.Branch)
.AsSplitQuery()
.ToListAsync(); .ToListAsync();
if (filter.Count > 0 && deliverySchedules.Count > 0) { if (filter.Count > 0 && deliverySchedules.Count > 0) {
-10
View File
@@ -207,13 +207,8 @@ namespace Elwig.Windows {
.OrderBy(m => m.Name) .OrderBy(m => m.Name)
.ThenBy(m => m.GivenName) .ThenBy(m => m.GivenName)
.Include(m => m.Branch) .Include(m => m.Branch)
.Include(m => m.DefaultWbKg!.AtKg)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.PostalDest.AtPlz!.Country)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Country)
.ToListAsync(), MemberInput_SelectionChanged); .ToListAsync(), MemberInput_SelectionChanged);
if (MemberCustomInput.SelectedItems.Count == 0) { if (MemberCustomInput.SelectedItems.Count == 0) {
MemberCustomInput.SelectionChanged -= MemberInput_SelectionChanged; MemberCustomInput.SelectionChanged -= MemberInput_SelectionChanged;
@@ -492,13 +487,8 @@ namespace Elwig.Windows {
} }
Recipients = await query Recipients = await query
.Include(m => m.Branch) .Include(m => m.Branch)
.Include(m => m.DefaultWbKg!.AtKg)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.PostalDest.AtPlz!.Country)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Country)
.ToListAsync(); .ToListAsync();
} }
UpdatePostalEmailRecipients(); UpdatePostalEmailRecipients();
+1 -6
View File
@@ -121,14 +121,9 @@ namespace Elwig.Windows {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
var (_, memberQuery, filter) = await vm.GetFilters(ctx); var (_, memberQuery, filter) = await vm.GetFilters(ctx);
var members = await memberQuery var members = await memberQuery
.Include(m => m.Branch)
.Include(m => m.DefaultWbKg!.AtKg)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.Include(m => m.PostalDest.AtPlz!.Ort) .AsSplitQuery()
.Include(m => m.PostalDest.AtPlz!.Country)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Country)
.ToListAsync(); .ToListAsync();
if (filter.Count > 0 && members.Count > 0) { if (filter.Count > 0 && members.Count > 0) {
+7 -9
View File
@@ -21,12 +21,11 @@ namespace Elwig.Windows {
} }
protected override async Task OnRenewContext(AppDbContext ctx) { protected override async Task OnRenewContext(AppDbContext ctx) {
var origins = (await ctx.WineOrigins var origins = await ctx.WineOrigins
.Include("Gems.AtGem.Kgs.WbKg.Gl") .Include(o => o.Gems).ThenInclude(g => g.AtGem.Kgs).ThenInclude(k => k.WbKg!.Gl)
.AsSplitQuery() .ToListAsync();
.ToListAsync()) origins.ForEach(o => { origins.FirstOrDefault(p => p.HkId == o.ParentHkId)?.Children.Add(o); });
.OrderByDescending(o => o.SortKey) origins = [.. origins.OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId)];
.ThenBy(o => o.HkId);
ControlUtils.RenewItemsSource(WineOrigins, origins, WineOrigins_SelectionChanged); ControlUtils.RenewItemsSource(WineOrigins, origins, WineOrigins_SelectionChanged);
if (WineOrigins.SelectedItem == null) { if (WineOrigins.SelectedItem == null) {
var hkid = await ctx.WbKgs var hkid = await ctx.WbKgs
@@ -39,8 +38,7 @@ namespace Elwig.Windows {
} }
var gls = await ctx.WbGls var gls = await ctx.WbGls
.OrderBy(g => g.GlNr) .OrderBy(g => g.GlNr)
.Include("Kgs.Rds") .Include(g => g.Kgs).ThenInclude(k => k.Rds)
.AsSplitQuery()
.ToListAsync(); .ToListAsync();
ControlUtils.RenewItemsSource(WbGls, gls, WbGls_SelectionChanged, ControlUtils.RenewSourceDefault.First); ControlUtils.RenewItemsSource(WbGls, gls, WbGls_SelectionChanged, ControlUtils.RenewSourceDefault.First);
UpdateWbGems(); UpdateWbGems();
@@ -214,7 +212,7 @@ namespace Elwig.Windows {
App.HintContextChange(); App.HintContextChange();
ControlUtils.SelectItemWithPk(WbKgs, k.KgNr); ControlUtils.SelectItemWithPk(WbKgs, k.KgNr);
} catch (Exception exc) { } catch (Exception exc) {
await HintContextChange(); await ForceContextReload();
var str = "Der Eintrag konnte nicht aus der Datenbank gelöscht werden!\n\n" + exc.Message; var str = "Der Eintrag konnte nicht aus der Datenbank gelöscht werden!\n\n" + exc.Message;
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Katastralgemeinde deaktivieren", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(str, "Katastralgemeinde deaktivieren", MessageBoxButton.OK, MessageBoxImage.Error);
+2 -3
View File
@@ -48,7 +48,6 @@ namespace Elwig.Windows {
ControlUtils.RenewItemsSource(PaymentVariantList, await ctx.PaymentVariants ControlUtils.RenewItemsSource(PaymentVariantList, await ctx.PaymentVariants
.Where(v => v.Year == Year) .Where(v => v.Year == Year)
.OrderBy(v => v.AvNr) .OrderBy(v => v.AvNr)
.Include(v => v.Season.Currency)
.ToListAsync()); .ToListAsync());
if (PaymentVariantList.SelectedItem == null && PaymentVariantList.Items.Count > 0) { if (PaymentVariantList.SelectedItem == null && PaymentVariantList.Items.Count > 0) {
PaymentVariantList.SelectedIndex = PaymentVariantList.Items.Count - 1; PaymentVariantList.SelectedIndex = PaymentVariantList.Items.Count - 1;
@@ -256,13 +255,13 @@ namespace Elwig.Windows {
await ViewModel.UpdatePaymentVariant(v.Year, v.AvNr); await ViewModel.UpdatePaymentVariant(v.Year, v.AvNr);
App.HintContextChange(); App.HintContextChange();
} catch (Exception exc) { } catch (Exception exc) {
await HintContextChange(); await ForceContextReload();
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message; var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Auszahlungsvariante aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(str, "Auszahlungsvariante aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
} }
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
await HintContextChange(); await EnsureContextRenewed();
CommentInput_TextChanged(null, null); CommentInput_TextChanged(null, null);
DateInput_TextChanged(null, null); DateInput_TextChanged(null, null);
TransferDateInput_TextChanged(null, null); TransferDateInput_TextChanged(null, null);
@@ -32,7 +32,6 @@ namespace Tests.UnitTests.ServiceTests {
.Include(d => d.Parts) .Include(d => d.Parts)
.ThenInclude(p => p.PartModifiers) .ThenInclude(p => p.PartModifiers)
.ThenInclude(m => m.Modifier) .ThenInclude(m => m.Modifier)
.AsSplitQuery()
.FirstOrDefaultAsync(); .FirstOrDefaultAsync();
} }
@@ -12,8 +12,8 @@ namespace Tests.UnitTests.ServiceTests {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
vm.BranchSource = await ctx.Branches.ToListAsync(); vm.BranchSource = await ctx.Branches.ToListAsync();
vm.DefaultKgSource = await ctx.Katastralgemeinden.ToListAsync(); vm.DefaultKgSource = await ctx.Katastralgemeinden.ToListAsync();
vm.OrtSource = await ctx.PlzDestinations.Include(p => p.Ort).ToListAsync(); vm.OrtSource = await ctx.PlzDestinations.ToListAsync();
vm.BillingOrtSource = await ctx.PlzDestinations.Include(p => p.Ort).ToListAsync(); vm.BillingOrtSource = await ctx.PlzDestinations.ToListAsync();
} }
[Test] [Test]
@@ -36,17 +36,13 @@ namespace Tests.UnitTests.ServiceTests {
Assert.DoesNotThrowAsync(async () => await vm.UpdateMember(null)); Assert.DoesNotThrowAsync(async () => await vm.UpdateMember(null));
Member? m; Member m;
using (var ctx = new AppDbContext()) { using (var ctx = new AppDbContext()) {
m = await ctx.Members m = await ctx.Members
.Where(m => m.MgNr == vm.MgNr) .Where(m => m.MgNr == vm.MgNr)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.AsSplitQuery() .SingleAsync();
.FirstOrDefaultAsync();
} }
Assert.That(m, Is.Not.Null); Assert.That(m, Is.Not.Null);
@@ -124,17 +120,13 @@ namespace Tests.UnitTests.ServiceTests {
Assert.DoesNotThrowAsync(async () => await vm.UpdateMember(null)); Assert.DoesNotThrowAsync(async () => await vm.UpdateMember(null));
Member? m; Member m;
using (var ctx = new AppDbContext()) { using (var ctx = new AppDbContext()) {
m = await ctx.Members m = await ctx.Members
.Where(m => m.MgNr == vm.MgNr) .Where(m => m.MgNr == vm.MgNr)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.AsSplitQuery() .SingleAsync();
.FirstOrDefaultAsync();
} }
Assert.That(m, Is.Not.Null); Assert.That(m, Is.Not.Null);
@@ -236,13 +228,9 @@ namespace Tests.UnitTests.ServiceTests {
using (var ctx = new AppDbContext()) { using (var ctx = new AppDbContext()) {
vm.FillInputs(await ctx.Members vm.FillInputs(await ctx.Members
.Where(m => m.MgNr == 202) .Where(m => m.MgNr == 202)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.AsSplitQuery() .SingleAsync());
.FirstAsync());
} }
Assert.That(vm.IsActive, Is.True); Assert.That(vm.IsActive, Is.True);
@@ -253,17 +241,13 @@ namespace Tests.UnitTests.ServiceTests {
Assert.DoesNotThrowAsync(async () => await vm.UpdateMember(202)); Assert.DoesNotThrowAsync(async () => await vm.UpdateMember(202));
Member? m; Member m;
using (var ctx = new AppDbContext()) { using (var ctx = new AppDbContext()) {
m = await ctx.Members m = await ctx.Members
.Where(m => m.MgNr == 202) .Where(m => m.MgNr == 202)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.AsSplitQuery() .SingleAsync();
.FirstOrDefaultAsync();
} }
Assert.That(m, Is.Not.Null); Assert.That(m, Is.Not.Null);
@@ -288,13 +272,9 @@ namespace Tests.UnitTests.ServiceTests {
using (var ctx = new AppDbContext()) { using (var ctx = new AppDbContext()) {
vm.FillInputs(await ctx.Members vm.FillInputs(await ctx.Members
.Where(m => m.MgNr == 203) .Where(m => m.MgNr == 203)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.AsSplitQuery() .SingleAsync());
.FirstAsync());
} }
Assert.Multiple(() => { Assert.Multiple(() => {
@@ -306,17 +286,13 @@ namespace Tests.UnitTests.ServiceTests {
vm.MgNr = 210; vm.MgNr = 210;
Assert.DoesNotThrowAsync(async () => await vm.UpdateMember(203)); Assert.DoesNotThrowAsync(async () => await vm.UpdateMember(203));
Member? m; Member m;
using (var ctx = new AppDbContext()) { using (var ctx = new AppDbContext()) {
m = await ctx.Members m = await ctx.Members
.Where(m => m.MgNr == 210) .Where(m => m.MgNr == 210)
.Include(m => m.BillingAddress!.PostalDest.AtPlz!.Ort)
.Include(m => m.PostalDest.AtPlz!.Ort)
.Include(m => m.DefaultWbKg!.AtKg)
.Include(m => m.EmailAddresses) .Include(m => m.EmailAddresses)
.Include(m => m.TelephoneNumbers) .Include(m => m.TelephoneNumbers)
.AsSplitQuery() .SingleAsync();
.FirstOrDefaultAsync();
} }
Assert.That(m, Is.Not.Null); Assert.That(m, Is.Not.Null);