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