diff --git a/Elwig/Helpers/Export/ElwigData.cs b/Elwig/Helpers/Export/ElwigData.cs index e6659b3..d8766b7 100644 --- a/Elwig/Helpers/Export/ElwigData.cs +++ b/Elwig/Helpers/Export/ElwigData.cs @@ -136,6 +136,7 @@ namespace Elwig.Helpers.Export { } var importedMembers = new List<(string FileName, string ZwstId, string Device, int New, int Overwritten, int NotImported, string Filters)>(); + var importedAreaComs = new List<(string FileName, string ZwstId, string Device, int Imported, int NotImported, string Filters)>(); var importedDeliveries = new List<(string FileName, string ZwstId, string Device, int New, int Overwritten, int NotImported, string Filters)>(); foreach (var ((members, billingAddresses, telephoneNumbers, emailAddresses, areaCommitments, riede, deliveries, deliveryParts, modifiers), meta) in data.Zip(metaData)) { @@ -159,6 +160,12 @@ namespace Elwig.Helpers.Export { if (duplicateMgNrs.Count > 0) importDuplicateMembers = ImportQuestion(branch.Name, device, "Mitglieder", true, duplicateMgNrs.Count); + var fbnrs = areaCommitments.Select(c => c.FbNr).ToList(); + var duplicateFbNrs = await ctx.AreaCommitments + .Where(c => fbnrs.Contains(c.FbNr)) + .Select(c => c.FbNr) + .ToListAsync(); + var lsnrs = deliveries.Select(d => d.LsNr).ToList(); var duplicateLsNrs = await ctx.Deliveries .Where(d => lsnrs.Contains(d.LsNr)) @@ -199,18 +206,26 @@ namespace Elwig.Helpers.Export { ctx.AddRange(billingAddresses.Where(a => duplicateMgNrs.Contains(a.MgNr))); ctx.AddRange(telephoneNumbers.Where(n => duplicateMgNrs.Contains(n.MgNr))); ctx.AddRange(emailAddresses.Where(a => duplicateMgNrs.Contains(a.MgNr))); + ctx.UpdateRange(areaCommitments.Where(c => duplicateMgNrs.Contains(c.MgNr) && duplicateFbNrs.Contains(c.FbNr))); + ctx.AddRange(areaCommitments.Where(c => duplicateMgNrs.Contains(c.MgNr) && !duplicateFbNrs.Contains(c.FbNr))); } if (importNewMembers) { ctx.AddRange(members.Where(m => !duplicateMgNrs.Contains(m.MgNr))); ctx.AddRange(billingAddresses.Where(a => !duplicateMgNrs.Contains(a.MgNr))); ctx.AddRange(telephoneNumbers.Where(n => !duplicateMgNrs.Contains(n.MgNr))); ctx.AddRange(emailAddresses.Where(a => !duplicateMgNrs.Contains(a.MgNr))); + ctx.UpdateRange(areaCommitments.Where(c => !duplicateMgNrs.Contains(c.MgNr) && duplicateFbNrs.Contains(c.FbNr))); + ctx.AddRange(areaCommitments.Where(c => !duplicateMgNrs.Contains(c.MgNr) && !duplicateFbNrs.Contains(c.FbNr))); } if (members.Count > 0) { var n = importNewMembers ? members.Count - duplicateMgNrs.Count : 0; var o = importDuplicateMembers ? duplicateMgNrs.Count : 0; importedMembers.Add((meta.FileName, meta.ZwstId, meta.Device, n, o, members.Count - n - o, meta.MemberFilters)); } + if (areaCommitments.Count > 0) { + var imported = areaCommitments.Where(c => (importNewMembers && !duplicateMgNrs.Contains(c.MgNr)) || (importDuplicateMembers && duplicateMgNrs.Contains(c.MgNr))).ToList(); + importedAreaComs.Add((meta.FileName, meta.ZwstId, meta.Device, imported.Count, areaCommitments.Count - imported.Count, meta.AreaComFilters)); + } if (allowedDuplicateLsNrs.Count > 0) { var dids = deliveries @@ -265,6 +280,12 @@ namespace Elwig.Helpers.Export { $" ({d.New} neu, {d.Overwritten} überschrieben, {d.NotImported} nicht importiert)\n" + $" Zweigstelle: {branches[d.ZwstId].Name} (Gerät {d.Device})\n" + $" Filter: {d.Filters}"), + $"Flächenbindungen: {importedAreaComs.Sum(d => d.Imported)}", + ..importedAreaComs.Select(d => + $" {d.FileName} ({d.Imported})\n" + + $" ({d.Imported} importiert, {d.NotImported} nicht importiert)\n" + + $" Zweigstelle: {branches[d.ZwstId].Name} (Gerät {d.Device})\n" + + $" Filter: {d.Filters}"), $"Lieferungen: {importedDeliveries.Sum(d => d.New + d.Overwritten)}", ..importedDeliveries.Select(d => $" {d.FileName} ({d.New + d.Overwritten})\n" + @@ -298,6 +319,13 @@ namespace Elwig.Helpers.Export { }.Export(filename); } + public static Task Export(string filename, IEnumerable members, IEnumerable areaComs, IEnumerable filters) { + return new ElwigExport { + Members = (members, filters), + AreaComs = (areaComs, ["von exportierten Mitgliedern"]), + }.Export(filename); + } + public static Task Export(string filename, IEnumerable deliveries, IEnumerable filters) { return new ElwigExport { Deliveries = (deliveries, filters) diff --git a/Elwig/Services/MemberService.cs b/Elwig/Services/MemberService.cs index a2712de..424b36b 100644 --- a/Elwig/Services/MemberService.cs +++ b/Elwig/Services/MemberService.cs @@ -432,13 +432,18 @@ namespace Elwig.Services { if (d.ShowDialog() == true) { Mouse.OverrideCursor = Cursors.AppStarting; try { - await ElwigData.Export(d.FileName, await query + var members = await query .OrderBy(m => m.MgNr) .Include(m => m.BillingAddress) .Include(m => m.TelephoneNumbers) .Include(m => m.EmailAddresses) .AsSplitQuery() - .ToListAsync(), filterNames); + .ToListAsync(); + var areaComs = await query + .SelectMany(m => m.AreaCommitments) + .Include(c => c.Rd) + .ToListAsync(); + await ElwigData.Export(d.FileName, members, areaComs, filterNames); } catch (Exception exc) { MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); }