diff --git a/Elwig/Helpers/Utils.cs b/Elwig/Helpers/Utils.cs
index 024ceeb..e374648 100644
--- a/Elwig/Helpers/Utils.cs
+++ b/Elwig/Helpers/Utils.cs
@@ -283,5 +283,9 @@ namespace Elwig.Helpers {
),
sum => sum.Kmw
);
+
+ public static string GenerateLsNr(Delivery d) => GenerateLsNr(d.Date, d.ZwstId, d.LNr);
+
+ public static string GenerateLsNr(DateOnly date, string zwstid, int lnr) => $"{date:yyyyMMdd}{zwstid}{lnr:000}";
}
}
diff --git a/Elwig/Windows/AreaComAdminWindow.xaml.cs b/Elwig/Windows/AreaComAdminWindow.xaml.cs
index bf9d368..60e4068 100644
--- a/Elwig/Windows/AreaComAdminWindow.xaml.cs
+++ b/Elwig/Windows/AreaComAdminWindow.xaml.cs
@@ -152,18 +152,25 @@ namespace Elwig.Windows {
} else if (IsCreating) {
a.FbNr = newFbNr;
tr = (await Context.AddAsync(a));
+ } else {
+ throw new Exception();
}
await Context.SaveChangesAsync();
if (newFbNr != a.FbNr) {
await Context.Database.ExecuteSqlAsync($"UPDATE area_commitment SET fbnr = {newFbNr} WHERE fbnr = {a.FbNr}");
- await Context.Members.LoadAsync();
+ tr.State = EntityState.Detached;
+ await Context.SaveChangesAsync();
+ await tr.ReloadAsync();
a = await Context.AreaCommitments.FindAsync(newFbNr);
}
} catch (Exception exc) {
- if (tr != null) await tr.ReloadAsync();
+ if (tr != null) {
+ tr.State = EntityState.Detached;
+ await tr.ReloadAsync();
+ }
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;
MessageBox.Show(str, "Flächenbindung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml b/Elwig/Windows/DeliveryAdminWindow.xaml
index 4f64ab8..f206f3d 100644
--- a/Elwig/Windows/DeliveryAdminWindow.xaml
+++ b/Elwig/Windows/DeliveryAdminWindow.xaml
@@ -353,7 +353,7 @@
-
diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs
index 5fb4daa..f6ca088 100644
--- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs
+++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs
@@ -566,12 +566,12 @@ namespace Elwig.Windows {
await Context.SaveChangesAsync();
} catch (Exception exc) {
if (dEntry != null) {
+ dEntry.State = EntityState.Detached;
await dEntry.ReloadAsync();
- if (deliveryNew) dEntry.State = EntityState.Detached;
}
if (pEntry != null) {
+ pEntry.State = EntityState.Detached;
await pEntry.ReloadAsync();
- if (partNew) pEntry.State = EntityState.Detached;
}
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;
@@ -796,10 +796,13 @@ namespace Elwig.Windows {
await RefreshDeliveryParts();
FinishInputFilling();
} catch (Exception exc) {
- if (entry1 != null) await entry1.ReloadAsync();
+ if (entry1 != null) {
+ entry1.State = EntityState.Detached;
+ await entry1.ReloadAsync();
+ }
if (entry2 != null) {
- await entry2.ReloadAsync();
entry2.State = EntityState.Detached;
+ await entry2.ReloadAsync();
}
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;
@@ -899,8 +902,70 @@ namespace Elwig.Windows {
DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating;
}
- private void ExtractDeliveryPartButton_Click(object sender, RoutedEventArgs evt) {
- // TODO extract delivery part
+ private async void ExtractDeliveryPartButton_Click(object sender, RoutedEventArgs evt) {
+ if (DeliveryPartList.SelectedItem is not DeliveryPart p)
+ return;
+
+ var delivery = p.Delivery;
+ var day = delivery.Date;
+ var count = delivery.Parts.Count;
+
+ if (delivery.Time <= new TimeOnly(3, 0))
+ day = day.AddDays(-1);
+ var lsnrs = await Context.Deliveries
+ .Where(d => d.ZwstId == delivery.ZwstId)
+ .Where(d => (d.DateString == day.ToString("yyyy-MM-dd") && d.TimeString.CompareTo("03:00:00") > 0) ||
+ (d.DateString == day.AddDays(1).ToString("yyyy-MM-dd") && d.TimeString.CompareTo("03:00:00") <= 0))
+ .Where(d => d.LsNr != delivery.LsNr)
+ .OrderBy(d => d.LsNr)
+ .Select(d => d.LsNr)
+ .ToListAsync();
+
+ var res = Utils.ShowDeliveryExtractionDialog($"{delivery.LsNr}/{p.DPNr}", delivery.Member.AdministrativeName, count == 1, lsnrs);
+ EntityEntry? entry = null;
+ try {
+ Delivery? d = null;
+ if (res == null) {
+ return;
+ } else if (res == "new") {
+ d = Context.CreateProxy();
+ d.Date = delivery.Date;
+ d.Time = delivery.Time;
+ d.Year = p.Year;
+ d.DId = await Context.NextDId(d.Year);
+ d.LNr = await Context.NextLNr(d.Date);
+ d.ZwstId = delivery.ZwstId;
+ d.MgNr = delivery.MgNr;
+ d.Comment = delivery.Comment;
+ d.LsNr = Utils.GenerateLsNr(d);
+ entry = await Context.AddAsync(d);
+ await Context.SaveChangesAsync();
+ } else {
+ d = await Context.Deliveries.Where(d => d.LsNr == res).FirstOrDefaultAsync();
+ }
+ if (d == null) return;
+
+ await Context.Database.ExecuteSqlAsync($"UPDATE delivery_part SET year = {d.Year}, did = {d.DId}, dpnr = {await Context.NextDPNr(d.Year, d.DId)} WHERE (year, did, dpnr) = ({p.Year}, {p.DId}, {p.DPNr})");
+ Context.Entry(p).State = EntityState.Detached;
+ if (count == 1) {
+ await Context.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({delivery.Year}, {delivery.DId})");
+ Context.Entry(delivery).State = EntityState.Detached;
+ }
+ await Context.SaveChangesAsync();
+ await Context.Entry(p).ReloadAsync();
+ await Context.Entry(delivery).ReloadAsync();
+
+ await RefreshDeliveryList();
+ DeliveryList.SelectedItem = d;
+ } catch (Exception exc) {
+ if (entry != null) {
+ entry.State = EntityState.Detached;
+ await entry.ReloadAsync();
+ }
+ 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;
+ MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
}
private async void DeleteDeliveryPartButton_Click(object sender, RoutedEventArgs evt) {
@@ -1027,7 +1092,7 @@ namespace Elwig.Windows {
var branch = (Branch)BranchInput.SelectedItem;
var date = DateOnly.ParseExact(DateInput.Text, "dd.MM.yyyy");
var lnr = await Context.NextLNr(date);
- LsNrInput.Text = $"{date:yyyyMMdd}{branch.ZwstId}{lnr:000}";
+ LsNrInput.Text = Utils.GenerateLsNr(date, branch.ZwstId, lnr);
}
}
diff --git a/Elwig/Windows/MemberAdminWindow.xaml.cs b/Elwig/Windows/MemberAdminWindow.xaml.cs
index 46a3e7e..90f6946 100644
--- a/Elwig/Windows/MemberAdminWindow.xaml.cs
+++ b/Elwig/Windows/MemberAdminWindow.xaml.cs
@@ -368,6 +368,8 @@ namespace Elwig.Windows {
} else if (IsCreating) {
m.MgNr = newMgNr;
tr = (await Context.AddAsync(m));
+ } else {
+ throw new Exception();
}
if (BillingOrtInput.SelectedItem == null) {
@@ -416,13 +418,15 @@ namespace Elwig.Windows {
if (newMgNr != m.MgNr) {
await Context.Database.ExecuteSqlAsync($"UPDATE member SET mgnr = {newMgNr} WHERE mgnr = {m.MgNr}");
- await Context.Members.LoadAsync();
+ tr.State = EntityState.Detached;
+ await Context.SaveChangesAsync();
+ await tr.ReloadAsync();
m = await Context.Members.FindAsync(newMgNr);
}
} catch (Exception exc) {
if (tr != null) {
+ tr.State = EntityState.Detached;
await tr.ReloadAsync();
- if (memberNew) tr.State = EntityState.Detached;
}
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;