Add AbwertenDialog
This commit is contained in:
56
Elwig/Dialogs/AbwertenDialog.xaml
Normal file
56
Elwig/Dialogs/AbwertenDialog.xaml
Normal file
@ -0,0 +1,56 @@
|
||||
<Window x:Class="Elwig.Dialogs.AbwertenDialog"
|
||||
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="Abwerten" Height="190" Width="400">
|
||||
<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="70"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock x:Name="Text" Margin="10,10,10,10" Grid.ColumnSpan="2" TextWrapping="Wrap" TextAlignment="Center"
|
||||
Text="Welche Menge der Lieferung soll abgewertet werden?"/>
|
||||
|
||||
<Label Content="Gewicht:" Margin="10,70,10,10"/>
|
||||
<Grid Grid.Column="1" Width="70" Height="25" Margin="0,70,10,10" HorizontalAlignment="Left" VerticalAlignment="Top">
|
||||
<TextBox x:Name="WeightInput" TextAlignment="Right" Padding="2,2,17,2"
|
||||
TextChanged="WeightInput_TextChanged"/>
|
||||
<Label Content="kg" Margin="0,4,3,0" HorizontalAlignment="Right" FontSize="10" Padding="2,4,2,4"/>
|
||||
</Grid>
|
||||
|
||||
<Button x:Name="ConfirmButton" Content="Bestätigen" Margin="10,10,115,10" Grid.Column="1" IsEnabled="False" IsDefault="True"
|
||||
Click="ConfirmButton_Click"/>
|
||||
<Button x:Name="CancelButton" Content="Abbrechen" Margin="10,10,10,10" Grid.Column="1" IsCancel="True"/>
|
||||
</Grid>
|
||||
</Window>
|
40
Elwig/Dialogs/AbwertenDialog.xaml.cs
Normal file
40
Elwig/Dialogs/AbwertenDialog.xaml.cs
Normal file
@ -0,0 +1,40 @@
|
||||
using Elwig.Helpers;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Documents;
|
||||
|
||||
namespace Elwig.Dialogs {
|
||||
public partial class AbwertenDialog : Window {
|
||||
|
||||
public int Weight;
|
||||
|
||||
public AbwertenDialog(string lsnr, string name, int weight) {
|
||||
Weight = weight;
|
||||
InitializeComponent();
|
||||
Text.Inlines.Clear();
|
||||
Text.Inlines.Add("Welche Menge der Teillieferung ");
|
||||
Text.Inlines.Add(new Run(lsnr) { FontWeight = FontWeights.Bold });
|
||||
Text.Inlines.Add("\nvon ");
|
||||
Text.Inlines.Add(new Run(name) { FontWeight = FontWeights.Bold });
|
||||
Text.Inlines.Add("\nmit ");
|
||||
Text.Inlines.Add(new Run($"{weight:N0}\u202fkg") { FontWeight = FontWeights.Bold });
|
||||
Text.Inlines.Add(" soll abgewertet werden?");
|
||||
}
|
||||
|
||||
private void ConfirmButton_Click(object sender, RoutedEventArgs evt) {
|
||||
DialogResult = true;
|
||||
Weight = int.Parse(WeightInput.Text);
|
||||
Close();
|
||||
}
|
||||
|
||||
private void UpdateButtons() {
|
||||
ConfirmButton.IsEnabled = int.TryParse(WeightInput.Text, out var w) && w > 0 && w <= Weight;
|
||||
}
|
||||
|
||||
private void WeightInput_TextChanged(object sender, TextChangedEventArgs evt) {
|
||||
Validator.CheckInteger(WeightInput, true, 5);
|
||||
UpdateButtons();
|
||||
}
|
||||
}
|
||||
}
|
@ -15,7 +15,7 @@ namespace Elwig.Dialogs {
|
||||
|
||||
private void ConfirmButton_Click(object sender, RoutedEventArgs evt) {
|
||||
DialogResult = true;
|
||||
Weight = int.Parse(WeightInput.Text.Replace("\u202f", ""));
|
||||
Weight = int.Parse(WeightInput.Text);
|
||||
Reason = Regex.Replace(ReasonInput.Text, @"\s+", "").Trim();
|
||||
if (Reason == "") {
|
||||
Reason = null;
|
||||
|
@ -8,6 +8,7 @@ using System.Windows;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Data.Sqlite;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Elwig.Helpers {
|
||||
public class AppDbContext : DbContext {
|
||||
@ -157,5 +158,49 @@ namespace Elwig.Helpers {
|
||||
.OrderBy(q => q.MinKmw)
|
||||
.LastOrDefaultAsync();
|
||||
}
|
||||
|
||||
public async Task UpdateDeliveryPartAttributes(DeliveryPart part, IEnumerable<WineAttr> attributes) {
|
||||
foreach (var a in attributes) {
|
||||
var attr = part.PartAttributes.Where(pa => pa.AttrId == a.AttrId).FirstOrDefault();
|
||||
if (attributes.Contains(a)) {
|
||||
DeliveryPartAttr dpa = attr ?? this.CreateProxy<DeliveryPartAttr>();
|
||||
dpa.Year = part.Year;
|
||||
dpa.DId = part.DId;
|
||||
dpa.DPNr = part.DPNr;
|
||||
dpa.AttrId = a.AttrId;
|
||||
if (attr == null) {
|
||||
await AddAsync(dpa);
|
||||
} else {
|
||||
Update(dpa);
|
||||
}
|
||||
} else {
|
||||
if (attr != null) {
|
||||
Remove(attr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async Task UpdateDeliveryPartModifiers(DeliveryPart part, IEnumerable<Modifier> modifiers) {
|
||||
foreach (var m in modifiers) {
|
||||
var mod = part.PartModifiers.Where(pa => pa.ModId == m.ModId).FirstOrDefault();
|
||||
if (modifiers.Contains(m)) {
|
||||
DeliveryPartModifier dpm = mod ?? this.CreateProxy<DeliveryPartModifier>();
|
||||
dpm.Year = part.Year;
|
||||
dpm.DId = part.DId;
|
||||
dpm.DPNr = part.DPNr;
|
||||
dpm.ModId = m.ModId;
|
||||
if (mod == null) {
|
||||
await AddAsync(dpm);
|
||||
} else {
|
||||
Update(dpm);
|
||||
}
|
||||
} else {
|
||||
if (mod != null) {
|
||||
Remove(mod);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -106,6 +106,7 @@ namespace Elwig.Helpers {
|
||||
var selectedIds = selector.SelectedItems.Cast<object>().Select(i => getId(i)).ToList();
|
||||
selector.ItemsSource = source;
|
||||
if (source != null) {
|
||||
selector.SelectedItems.Clear();
|
||||
foreach (var i in source.Cast<object>().Where(i => selectedIds.Contains(getId(i))))
|
||||
selector.SelectedItems.Add(i);
|
||||
}
|
||||
|
@ -213,6 +213,11 @@ namespace Elwig.Helpers {
|
||||
return d.ShowDialog() == true ? (d.Weight, d.Reason) : null;
|
||||
}
|
||||
|
||||
public static int? ShowAbwertenDialog(string lsnr, string name, int weight) {
|
||||
var d = new AbwertenDialog(lsnr, name, weight);
|
||||
return d.ShowDialog() == true ? d.Weight : null;
|
||||
}
|
||||
|
||||
public static Footer GenerateFooter(string lineBreak, string seperator) {
|
||||
return new Footer(lineBreak, seperator);
|
||||
}
|
||||
|
@ -396,8 +396,9 @@ namespace Elwig.Windows {
|
||||
kgList.Insert(0, new NullItem());
|
||||
ControlUtils.RenewItemsSource(WineKgInput, kgList, i => (i as AT_Kg)?.KgNr);
|
||||
UpdateRdInput();
|
||||
|
||||
if (IsCreating) await UpdateLsNr();
|
||||
|
||||
await RefreshDeliveryParts();
|
||||
}
|
||||
|
||||
private void FocusSearchInput(object sender, RoutedEventArgs evt) {
|
||||
@ -407,12 +408,12 @@ namespace Elwig.Windows {
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshDeliveryParts() {
|
||||
private async Task RefreshDeliveryParts() {
|
||||
if (DeliveryList.SelectedItem is Delivery d) {
|
||||
ControlUtils.RenewItemsSource(ModifiersInput, Context.Modifiers.Where(m => m.Year == d.Year).OrderBy(m => m.Ordering).ToList(), i => (i as Modifier)?.ModId);
|
||||
ControlUtils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Year == d.Year).OrderBy(m => m.Ordering).ToListAsync(), i => (i as Modifier)?.ModId);
|
||||
ControlUtils.RenewItemsSource(DeliveryPartList, d.Parts.OrderBy(p => p.DPNr).ToList(), i => ((i as DeliveryPart)?.Year, (i as DeliveryPart)?.DId, (i as DeliveryPart)?.DPNr), DeliveryPartList_SelectionChanged, ControlUtils.RenewSourceDefault.First);
|
||||
} else {
|
||||
ControlUtils.RenewItemsSource(ModifiersInput, Context.Modifiers.Where(m => m.Year == Utils.CurrentLastSeason).OrderBy(m => m.Ordering).ToList(), i => (i as Modifier)?.ModId);
|
||||
ControlUtils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Year == Utils.CurrentLastSeason).OrderBy(m => m.Ordering).ToListAsync(), i => (i as Modifier)?.ModId);
|
||||
DeliveryPartList.ItemsSource = null;
|
||||
}
|
||||
}
|
||||
@ -550,45 +551,8 @@ namespace Elwig.Windows {
|
||||
pEntry = partNew ? await Context.AddAsync(p) : Context.Update(p);
|
||||
}
|
||||
|
||||
foreach (var a in AttributesInput.ItemsSource.Cast<WineAttr>()) {
|
||||
var attr = p.PartAttributes.Where(pa => pa.AttrId == a.AttrId).FirstOrDefault();
|
||||
if (AttributesInput.SelectedItems.Contains(a)) {
|
||||
DeliveryPartAttr dpa = attr ?? Context.CreateProxy<DeliveryPartAttr>();
|
||||
dpa.Year = year;
|
||||
dpa.DId = did;
|
||||
dpa.DPNr = dpnr;
|
||||
dpa.AttrId = a.AttrId;
|
||||
if (attr == null) {
|
||||
await Context.AddAsync(dpa);
|
||||
} else {
|
||||
Context.Update(dpa);
|
||||
}
|
||||
} else {
|
||||
if (attr != null) {
|
||||
Context.Remove(attr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var m in ModifiersInput.ItemsSource.Cast<Modifier>()) {
|
||||
var mod = p.PartModifiers.Where(pa => pa.ModId == m.ModId).FirstOrDefault();
|
||||
if (ModifiersInput.SelectedItems.Contains(m)) {
|
||||
DeliveryPartModifier dpm = mod ?? Context.CreateProxy<DeliveryPartModifier>();
|
||||
dpm.Year = year;
|
||||
dpm.DId = did;
|
||||
dpm.DPNr = dpnr;
|
||||
dpm.ModId = m.ModId;
|
||||
if (mod == null) {
|
||||
await Context.AddAsync(dpm);
|
||||
} else {
|
||||
Context.Update(dpm);
|
||||
}
|
||||
} else {
|
||||
if (mod != null) {
|
||||
Context.Remove(mod);
|
||||
}
|
||||
}
|
||||
}
|
||||
await Context.UpdateDeliveryPartAttributes(p, AttributesInput.ItemsSource.Cast<WineAttr>());
|
||||
await Context.UpdateDeliveryPartModifiers(p, ModifiersInput.ItemsSource.Cast<Modifier>());
|
||||
|
||||
await Context.SaveChangesAsync();
|
||||
} catch (Exception exc) {
|
||||
@ -674,8 +638,8 @@ namespace Elwig.Windows {
|
||||
await RefreshDeliveryListQuery();
|
||||
}
|
||||
|
||||
private void DeliveryList_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
|
||||
RefreshDeliveryParts();
|
||||
private async void DeliveryList_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
|
||||
await RefreshDeliveryParts();
|
||||
if (DeliveryList.SelectedItem != null) {
|
||||
DeleteDeliveryButton.IsEnabled = true;
|
||||
Menu_Print_ShowDeliveryNote.IsEnabled = !IsEditing && !IsCreating;
|
||||
@ -689,8 +653,8 @@ namespace Elwig.Windows {
|
||||
|
||||
private void DeliveryPartList_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) {
|
||||
RefreshInputs();
|
||||
if (DeliveryPartList.SelectedItem != null) {
|
||||
AbwertenButton.IsEnabled = true;
|
||||
if (DeliveryPartList.SelectedItem is DeliveryPart p) {
|
||||
AbwertenButton.IsEnabled = p.QualId != "WEI";
|
||||
EditDeliveryButton.IsEnabled = true;
|
||||
ExtractDeliveryPartButton.IsEnabled = !IsCreating;
|
||||
DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating;
|
||||
@ -729,7 +693,7 @@ namespace Elwig.Windows {
|
||||
DeliveryPartList.IsEnabled = false;
|
||||
var p = await UpdateDeliveryPart(DeliveryList.SelectedItem as Delivery, DeliveryPartList.SelectedItem as DeliveryPart);
|
||||
await RefreshDeliveryList();
|
||||
RefreshDeliveryParts();
|
||||
await RefreshDeliveryParts();
|
||||
DeliveryList.SelectedItem = p?.Delivery;
|
||||
DeliveryPartList.SelectedItem = null;
|
||||
InitialInputs();
|
||||
@ -739,7 +703,7 @@ namespace Elwig.Windows {
|
||||
DeliveryPartList.IsEnabled = false;
|
||||
var p = await UpdateDeliveryPart(DeliveryList.SelectedItem as Delivery, DeliveryPartList.SelectedItem as DeliveryPart);
|
||||
await RefreshDeliveryList();
|
||||
RefreshDeliveryParts();
|
||||
await RefreshDeliveryParts();
|
||||
if (p?.Delivery != null) {
|
||||
using var doc = new DeliveryNote(p.Delivery);
|
||||
await doc.Generate();
|
||||
@ -786,8 +750,52 @@ namespace Elwig.Windows {
|
||||
LockSearchInputs();
|
||||
}
|
||||
|
||||
private void AbwertenButton_Click(object sender, RoutedEventArgs evt) {
|
||||
// TODO abwerten dialog
|
||||
private async void AbwertenButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (DeliveryPartList.SelectedItem is not DeliveryPart p) return;
|
||||
var res = Utils.ShowAbwertenDialog($"{p.Delivery.LsNr}/{p.DPNr}", p.Delivery.Member.AdministrativeName, p.Weight);
|
||||
EntityEntry<DeliveryPart>? entry1 = null, entry2 = null;
|
||||
try {
|
||||
if (res == null || res <= 0)
|
||||
return;
|
||||
ClearOriginalValues();
|
||||
if (res >= p.Weight) {
|
||||
ControlUtils.SelectComboBoxItem(WineQualityLevelInput, q => (q as WineQualLevel)?.QualId, "WEI");
|
||||
ControlUtils.SelectComboBoxItem(WineOriginInput, o => (o as WineOrigin)?.HkId, "OEST");
|
||||
p.QualId = "WEI";
|
||||
p.HkId = "OEST";
|
||||
entry1 = Context.Update(p);
|
||||
} else {
|
||||
var w = p.Weight - res.Value;
|
||||
WeightInput.Text = $"{w:N0}";
|
||||
p.Weight = w;
|
||||
entry1 = Context.Update(p);
|
||||
|
||||
var d = p.Delivery;
|
||||
var p2 = Context.CreateProxy<DeliveryPart>();
|
||||
var values = Context.Entry(p).CurrentValues;
|
||||
Context.Entry(p2).CurrentValues.SetValues(values);
|
||||
p2.DPNr = await Context.NextDPNr(d.Year, d.DId);
|
||||
p2.Weight = res.Value;
|
||||
p2.QualId = "WEI";
|
||||
p2.HkId = "OEST";
|
||||
entry2 = await Context.AddAsync(p2);
|
||||
|
||||
await Context.UpdateDeliveryPartAttributes(p2, p.Attributes);
|
||||
await Context.UpdateDeliveryPartModifiers(p2, p.Modifiers);
|
||||
}
|
||||
await Context.SaveChangesAsync();
|
||||
await RefreshDeliveryParts();
|
||||
FinishInputFilling();
|
||||
} catch (Exception exc) {
|
||||
if (entry1 != null) await entry1.ReloadAsync();
|
||||
if (entry2 != null) {
|
||||
await entry2.ReloadAsync();
|
||||
entry2.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;
|
||||
MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private void WeighingManualButton_Click(object sender, RoutedEventArgs evt) {
|
||||
@ -829,7 +837,7 @@ namespace Elwig.Windows {
|
||||
Context.Remove(d);
|
||||
await Context.SaveChangesAsync();
|
||||
await RefreshDeliveryList();
|
||||
RefreshDeliveryParts();
|
||||
await RefreshDeliveryParts();
|
||||
}
|
||||
}
|
||||
|
||||
@ -847,10 +855,10 @@ namespace Elwig.Windows {
|
||||
UnlockSearchInputs();
|
||||
FinishInputFilling();
|
||||
await RefreshDeliveryList();
|
||||
RefreshDeliveryParts();
|
||||
await RefreshDeliveryParts();
|
||||
RefreshInputs();
|
||||
|
||||
AbwertenButton.IsEnabled = true;
|
||||
AbwertenButton.IsEnabled = p.QualId != "WEI";
|
||||
ExtractDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null && !IsCreating;
|
||||
DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating;
|
||||
}
|
||||
@ -877,7 +885,7 @@ namespace Elwig.Windows {
|
||||
LockInputs();
|
||||
UnlockSearchInputs();
|
||||
|
||||
AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem != null;
|
||||
AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem is DeliveryPart p && p.QualId != "WEI";
|
||||
ExtractDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null && !IsCreating;
|
||||
DeleteDeliveryPartButton.IsEnabled = DeliveryList.SelectedItem is Delivery { Parts.Count: > 1 } && !IsCreating;
|
||||
}
|
||||
@ -896,7 +904,7 @@ namespace Elwig.Windows {
|
||||
if (r == MessageBoxResult.Yes) {
|
||||
Context.Remove(p);
|
||||
await Context.SaveChangesAsync();
|
||||
RefreshDeliveryParts();
|
||||
await RefreshDeliveryParts();
|
||||
}
|
||||
}
|
||||
|
||||
@ -920,7 +928,7 @@ namespace Elwig.Windows {
|
||||
|
||||
private void ShowNewEditDeleteButtons() {
|
||||
NewDeliveryButton.IsEnabled = IsReceipt;
|
||||
AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem != null;
|
||||
AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem is DeliveryPart p && p.QualId == "WEI";
|
||||
EditDeliveryButton.IsEnabled = DeliveryPartList.SelectedItem != null;
|
||||
DeleteDeliveryButton.IsEnabled = DeliveryList.SelectedItem != null;
|
||||
NewDeliveryButton.Visibility = IsReceipt ? Visibility.Visible : Visibility.Hidden;
|
||||
|
Reference in New Issue
Block a user