Compare commits
	
		
			3 Commits
		
	
	
		
			7c2bf711c7
			...
			a98bc3ae4a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a98bc3ae4a | |||
| 93d4365d36 | |||
| 33e10d00bf | 
							
								
								
									
										60
									
								
								Elwig/Dialogs/DeliveryExtractionDialog.xaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								Elwig/Dialogs/DeliveryExtractionDialog.xaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
| <Window x:Class="Elwig.Dialogs.DeliveryExtractionDialog" | ||||
|         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" | ||||
|         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" | ||||
|         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" | ||||
|         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" | ||||
|         xmlns:local="clr-namespace:Elwig.Dialogs" | ||||
|         mc:Ignorable="d" | ||||
|         ResizeMode="NoResize" | ||||
|         ShowInTaskbar="False" | ||||
|         Topmost="True" | ||||
|         WindowStartupLocation="CenterOwner" | ||||
|         FocusManager.FocusedElement="{Binding ElementName=WeightInput}" | ||||
|         Title="Teillieferung extrahieren" Height="210" Width="380"> | ||||
|     <Window.Resources> | ||||
|         <Style TargetType="Label"> | ||||
|             <Setter Property="HorizontalAlignment" Value="Left"/> | ||||
|             <Setter Property="VerticalAlignment" Value="Top"/> | ||||
|             <Setter Property="Padding" Value="2,4,2,4"/> | ||||
|             <Setter Property="Height" Value="25"/> | ||||
|         </Style> | ||||
|         <Style TargetType="TextBox"> | ||||
|             <Setter Property="HorizontalAlignment" Value="Stretch"/> | ||||
|             <Setter Property="VerticalAlignment" Value="Top"/> | ||||
|             <Setter Property="FontSize" Value="14"/> | ||||
|             <Setter Property="Padding" Value="2"/> | ||||
|             <Setter Property="Height" Value="25"/> | ||||
|             <Setter Property="TextWrapping" Value="NoWrap"/> | ||||
|         </Style> | ||||
|         <Style TargetType="Button"> | ||||
|             <Setter Property="HorizontalAlignment" Value="Right"/> | ||||
|             <Setter Property="VerticalAlignment" Value="Bottom"/> | ||||
|             <Setter Property="Width" Value="100"/> | ||||
|             <Setter Property="Height" Value="25"/> | ||||
|         </Style> | ||||
|     </Window.Resources> | ||||
|     <Grid> | ||||
|         <Grid.ColumnDefinitions> | ||||
|             <ColumnDefinition Width="200"/> | ||||
|             <ColumnDefinition/> | ||||
|         </Grid.ColumnDefinitions> | ||||
|  | ||||
|         <TextBlock Margin="10,10,0,10" TextWrapping="Wrap"> | ||||
|             Was soll mit der Teillieferung <Run x:Name="TextLsNr" FontWeight="Bold" Text="20201010A000/1"/><LineBreak/> | ||||
|             von <Run x:Name="TextMember" FontWeight="Bold" Text="Max Mustermann"/> geschehen? | ||||
|         </TextBlock> | ||||
|         <RadioButton x:Name="NewDeliveryButton" Content="Neue Lieferung erstellen" | ||||
|                      Margin="10,80,0,10" HorizontalAlignment="Left" VerticalAlignment="Top" | ||||
|                      Checked="Selection_Changed" Unchecked="Selection_Changed"/> | ||||
|         <RadioButton x:Name="AddToDeliveryButton" Content="Zu Lieferung hinzufügen" | ||||
|                      Margin="10,100,0,10" HorizontalAlignment="Left" VerticalAlignment="Top" | ||||
|                      Checked="Selection_Changed" Unchecked="Selection_Changed"/> | ||||
|  | ||||
|         <ListBox x:Name="DeliveryList" Grid.Column="1" Margin="10,10,10,45" | ||||
|                  SelectionChanged="DeliveryList_SelectionChanged"/> | ||||
|  | ||||
|         <Button x:Name="ConfirmButton" Content="Bestätigen" Margin="10,10,115,10" Grid.ColumnSpan="2" IsEnabled="False" IsDefault="True" | ||||
|                 Click="ConfirmButton_Click"/> | ||||
|         <Button x:Name="CancelButton" Content="Abbrechen" Margin="10,10,10,10" Grid.ColumnSpan="2" IsCancel="True"/> | ||||
|     </Grid> | ||||
| </Window> | ||||
							
								
								
									
										37
									
								
								Elwig/Dialogs/DeliveryExtractionDialog.xaml.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								Elwig/Dialogs/DeliveryExtractionDialog.xaml.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| using System.Collections.Generic; | ||||
| using System.Windows; | ||||
|  | ||||
| namespace Elwig.Dialogs { | ||||
|     public partial class DeliveryExtractionDialog : Window { | ||||
|  | ||||
|         public string? AddTo; | ||||
|  | ||||
|         public DeliveryExtractionDialog(string lsnr, string name, bool single, IEnumerable<string> lsnrs) { | ||||
|             InitializeComponent(); | ||||
|             TextLsNr.Text = lsnr; | ||||
|             TextMember.Text = name; | ||||
|             NewDeliveryButton.IsEnabled = !single; | ||||
|             DeliveryList.IsEnabled = false; | ||||
|             DeliveryList.ItemsSource = lsnrs; | ||||
|         } | ||||
|  | ||||
|         private void ConfirmButton_Click(object sender, RoutedEventArgs evt) { | ||||
|             DialogResult = true; | ||||
|             AddTo = NewDeliveryButton.IsChecked == true ? "new" : DeliveryList.SelectedItem as string; | ||||
|             Close(); | ||||
|         } | ||||
|  | ||||
|         private void UpdateButtons() { | ||||
|             ConfirmButton.IsEnabled = NewDeliveryButton.IsChecked == true || (AddToDeliveryButton.IsChecked == true && DeliveryList.SelectedItem != null); | ||||
|             DeliveryList.IsEnabled = AddToDeliveryButton.IsChecked == true; | ||||
|         } | ||||
|  | ||||
|         private void Selection_Changed(object sender, RoutedEventArgs evt) { | ||||
|             UpdateButtons(); | ||||
|         } | ||||
|  | ||||
|         private void DeliveryList_SelectionChanged(object sender, RoutedEventArgs evt) { | ||||
|             UpdateButtons(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -223,6 +223,11 @@ namespace Elwig.Helpers { | ||||
|             return d.ShowDialog() == true ? d.Weight : null; | ||||
|         } | ||||
|  | ||||
|         public static string? ShowDeliveryExtractionDialog(string lsnr, string name, bool single, IEnumerable<string> lsnrs) { | ||||
|             var d = new DeliveryExtractionDialog(lsnr, name, single, lsnrs); | ||||
|             return d.ShowDialog() == true ? d.AddTo : null; | ||||
|         } | ||||
|  | ||||
|         public static Footer GenerateFooter(string lineBreak, string seperator) { | ||||
|             return new Footer(lineBreak, seperator); | ||||
|         } | ||||
| @@ -278,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"/> | ||||
|   | ||||
| @@ -551,8 +551,8 @@ namespace Elwig.Windows { | ||||
|                     pEntry = partNew ? await Context.AddAsync(p) : Context.Update(p); | ||||
|                 } | ||||
|  | ||||
|                 await Context.UpdateDeliveryPartAttributes(p, AttributesInput.ItemsSource.Cast<WineAttr>()); | ||||
|                 await Context.UpdateDeliveryPartModifiers(p, ModifiersInput.ItemsSource.Cast<Modifier>()); | ||||
|                 await Context.UpdateDeliveryPartAttributes(p, AttributesInput.SelectedItems.Cast<WineAttr>()); | ||||
|                 await Context.UpdateDeliveryPartModifiers(p, ModifiersInput.SelectedItems.Cast<Modifier>()); | ||||
|  | ||||
|                 if (originalMgNr != null && originalMgNr.Value != d.MgNr) { | ||||
|                     // update origin (KgNr), if default is selected | ||||
| @@ -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