DeliveryAdminWindow: Implement using of DeliveryExtractionDialog
This commit is contained in:
		| @@ -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}"; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -353,7 +353,7 @@ | ||||
|                     </ListBox.ItemTemplate> | ||||
|                 </ListBox> | ||||
|  | ||||
|                 <Button x:Name="ExtractDeliveryPartButton" Content="Herausheben" IsEnabled="False" | ||||
|                 <Button x:Name="ExtractDeliveryPartButton" Content="Extrahieren" IsEnabled="False" | ||||
|                         ToolTip="Ausgewählte Teillieferung aus aktueller Lieferung entfernen und entweder anderer oder neuer Lieferung zuordnen" | ||||
|                         HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,10,2.5,5" Grid.Column="0" Grid.Row="2" | ||||
|                         Click="ExtractDeliveryPartButton_Click"/> | ||||
|   | ||||
| @@ -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<Delivery>? entry = null; | ||||
|             try { | ||||
|                 Delivery? d = null; | ||||
|                 if (res == null) { | ||||
|                     return; | ||||
|                 } else if (res == "new") { | ||||
|                     d = Context.CreateProxy<Delivery>(); | ||||
|                     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); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user