Update DeliveryAdminWindow

This commit is contained in:
2023-05-25 20:48:48 +02:00
parent ad47aa2a79
commit 577a3a0a63
4 changed files with 76 additions and 22 deletions

View File

@ -1,10 +1,13 @@
using Elwig.Helpers; using Elwig.Helpers;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Configuration;
using System.Security.Cryptography.Pkcs;
namespace Elwig.Models { namespace Elwig.Models {
[Table("wine_quality_level"), PrimaryKey("QualId")] [Table("wine_quality_level"), PrimaryKey("QualId")]
public class WineQualLevel { public class WineQualLevel : IEquatable<WineQualLevel> {
[Column("qualid")] [Column("qualid")]
public string QualId { get; private set; } public string QualId { get; private set; }
@ -24,5 +27,21 @@ namespace Elwig.Models {
public string Name { get; private set; } public string Name { get; private set; }
public string MinKmwStr => (MinKmw == null) ? "" : $"(mind. {MinKmw:#.0}°)"; public string MinKmwStr => (MinKmw == null) ? "" : $"(mind. {MinKmw:#.0}°)";
public override bool Equals(object? obj) {
return Equals(obj as WineQualLevel);
}
public bool Equals(WineQualLevel? obj) {
return QualId == obj?.QualId;
}
public static bool operator ==(WineQualLevel? q1, WineQualLevel? q2) {
return q1?.Equals(q2) ?? Equals(q1, q2);
}
public static bool operator !=(WineQualLevel? q1, WineQualLevel? q2) {
return !(q1?.Equals(q2) ?? Equals(q1, q2));
}
} }
} }

View File

@ -153,6 +153,14 @@ namespace Elwig.Windows {
OriginalValues[rb] = (rb.IsChecked ?? false) ? bool.TrueString : null; OriginalValues[rb] = (rb.IsChecked ?? false) ? bool.TrueString : null;
} }
protected void SetOriginalValue(Control input, object? value) {
OriginalValues[input] = value;
}
protected void UnsetOriginalValue(Control input) {
OriginalValues.Remove(input);
}
protected void ClearInputs() { protected void ClearInputs() {
foreach (var tb in TextBoxInputs) foreach (var tb in TextBoxInputs)
tb.Text = ""; tb.Text = "";

View File

@ -84,7 +84,8 @@
SelectionChanged="MemberInput_SelectionChanged"/> SelectionChanged="MemberInput_SelectionChanged"/>
<Label Content="Wohnort:" Margin="10,38,0,0" Grid.Column="0"/> <Label Content="Wohnort:" Margin="10,38,0,0" Grid.Column="0"/>
<TextBox x:Name="MemberAddressField" Grid.Row="1" Grid.Column="1" Margin="0,40,10,10" FontSize="12" Height="22" IsReadOnly="True"/> <TextBox x:Name="MemberAddressField" Grid.Row="1" Grid.Column="1" Margin="0,40,10,10" FontSize="12" Height="22"
IsReadOnly="True" IsTabStop="False"/>
</Grid> </Grid>
</GroupBox> </GroupBox>
@ -97,14 +98,14 @@
<Label Content="LieferscheinNr.:" Margin="10,10,0,0" Grid.Column="0"/> <Label Content="LieferscheinNr.:" Margin="10,10,0,0" Grid.Column="0"/>
<TextBox x:Name="LsNrInput" Width="126" Grid.Column="1" HorizontalAlignment="Left" Margin="0,10,0,0" <TextBox x:Name="LsNrInput" Width="126" Grid.Column="1" HorizontalAlignment="Left" Margin="0,10,0,0"
IsReadOnly="True"/> IsReadOnly="True" IsTabStop="False"/>
<Label Content="Datum/Uhrzeit:" Margin="10,40,0,0" Grid.Column="0"/> <Label Content="Datum/Uhrzeit:" Margin="10,40,0,0" Grid.Column="0"/>
<TextBox x:Name="DateInput" Width="77" Grid.Column="1" HorizontalAlignment="Left" Margin="0,40,0,0" <TextBox x:Name="DateInput" Width="77" Grid.Column="1" HorizontalAlignment="Left" Margin="0,40,0,0"
IsReadOnly="True" IsReadOnly="True" IsTabStop="False"
TextChanged="DateInput_TextChanged"/> TextChanged="DateInput_TextChanged"/>
<TextBox x:Name="TimeInput" Width="44" Grid.Column="1" HorizontalAlignment="Left" Margin="82,40,0,0" <TextBox x:Name="TimeInput" Width="44" Grid.Column="1" HorizontalAlignment="Left" Margin="82,40,0,0"
IsReadOnly="True"/> IsReadOnly="True" IsTabStop="False"/>
<Label Content="Zweigstelle:" Margin="10,70,0,0" Grid.Column="0"/> <Label Content="Zweigstelle:" Margin="10,70,0,0" Grid.Column="0"/>
<ComboBox x:Name="BranchInput" Width="126" Margin="0,70,10,0" Grid.Column="1" HorizontalAlignment="Left" <ComboBox x:Name="BranchInput" Width="126" Margin="0,70,10,0" Grid.Column="1" HorizontalAlignment="Left"

View File

@ -14,8 +14,7 @@ namespace Elwig.Windows {
public partial class DeliveryAdminWindow : AdministrationWindow { public partial class DeliveryAdminWindow : AdministrationWindow {
private bool IsUpdatingGradation = false; private bool IsUpdatingGradation = false;
private readonly DispatcherTimer Timer;
private DispatcherTimer dispatcherTimer;
public DeliveryAdminWindow() { public DeliveryAdminWindow() {
InitializeComponent(); InitializeComponent();
@ -31,10 +30,10 @@ namespace Elwig.Windows {
MemberAddressField MemberAddressField
}; };
dispatcherTimer = new DispatcherTimer(); Timer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(OnSecondPassed); Timer.Tick += new EventHandler(OnSecondPassed);
dispatcherTimer.Interval = new TimeSpan(0, 0, 1); Timer.Interval = new TimeSpan(0, 0, 1);
dispatcherTimer.Start(); Timer.Start();
} }
private void Window_Loaded(object sender, RoutedEventArgs evt) { private void Window_Loaded(object sender, RoutedEventArgs evt) {
@ -61,7 +60,10 @@ namespace Elwig.Windows {
Utils.RenewItemsSource(WineQualityLevelInput, await Context.WineQualityLevels.ToListAsync(), i => (i as WineQualLevel)?.QualId); Utils.RenewItemsSource(WineQualityLevelInput, await Context.WineQualityLevels.ToListAsync(), i => (i as WineQualLevel)?.QualId);
Utils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Season.Year == 2022).OrderBy(m => m.Name).ToListAsync(), i => (i as Modifier)?.ModId); Utils.RenewItemsSource(ModifiersInput, await Context.Modifiers.Where(m => m.Season.Year == 2022).OrderBy(m => m.Name).ToListAsync(), i => (i as Modifier)?.ModId);
Utils.RenewItemsSource(WineOriginInput, (await Context.WineOrigins.ToListAsync()).OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId), i => (i as WineOrigin)?.HkId); Utils.RenewItemsSource(WineOriginInput, (await Context.WineOrigins.ToListAsync()).OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId), i => (i as WineOrigin)?.HkId);
Utils.RenewItemsSource(WineKgInput, await Context.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).ToListAsync(), i => (i as AT_Kg)?.KgNr); var kgList = await Context.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).Cast<object>().ToListAsync();
kgList.Insert(0, new NullItem());
Utils.RenewItemsSource(WineKgInput, kgList, i => (i as AT_Kg)?.KgNr);
if (WineKgInput.SelectedItem == null) WineKgInput.SelectedIndex = 0;
UpdateWineQualityLevels(); UpdateWineQualityLevels();
UpdateRdInput(); UpdateRdInput();
} }
@ -80,14 +82,20 @@ namespace Elwig.Windows {
var m = MemberInput.SelectedItem as Member; var m = MemberInput.SelectedItem as Member;
if (m != null) MgNrInput.Text = m.MgNr.ToString(); if (m != null) MgNrInput.Text = m.MgNr.ToString();
MemberAddressField.Text = m?.FullAddress; MemberAddressField.Text = m?.FullAddress;
WineKgInput.SelectedItem = m?.DefaultKg; if (m == null) {
UnsetOriginalValue(WineKgInput);
WineKgInput.SelectedIndex = 0;
} else {
SetOriginalValue(WineKgInput, m.DefaultKg);
WineKgInput.SelectedItem = m.DefaultKg;
}
} }
private void DateInput_TextChanged(object sender, TextChangedEventArgs evt) { private void DateInput_TextChanged(object sender, TextChangedEventArgs evt) {
var branch = (Branch)BranchInput.SelectedItem; var branch = (Branch)BranchInput.SelectedItem;
var date = DateOnly.ParseExact(DateInput.Text, "dd.MM.yyyy"); var date = DateOnly.ParseExact(DateInput.Text, "dd.MM.yyyy");
var lnr = Context.NextLNr(date).GetAwaiter().GetResult(); var lnr = Context.NextLNr(date).GetAwaiter().GetResult();
LsNrInput.Text = $"{date.ToString("yyyyMMdd")}{branch.ZwstId}{lnr:000}"; LsNrInput.Text = $"{date:yyyyMMdd}{branch.ZwstId}{lnr:000}";
} }
private void UpdateWineVariety(bool valid) { private void UpdateWineVariety(bool valid) {
@ -119,10 +127,16 @@ namespace Elwig.Windows {
} }
private void UpdateWineQualityLevels() { private void UpdateWineQualityLevels() {
if (!GetInputValid(GradationKmwInput)) {
UnsetOriginalValue(WineQualityLevelInput);
WineQualityLevelInput.ItemsSource = null;
return;
}
var kmw = double.Parse(GradationKmwInput.Text); var kmw = double.Parse(GradationKmwInput.Text);
WineQualityLevelInput.ItemsSource = Context.WineQualityLevels.Where(q => q.MinKmw == null || q.MinKmw <= kmw).ToList(); WineQualityLevelInput.ItemsSource = Context.WineQualityLevels.Where(q => q.MinKmw == null || q.MinKmw <= kmw).ToList();
var qual = Context.WineQualityLevels.Where(q => !q.IsPredicate && (q.MinKmw == null || q.MinKmw <= kmw)).OrderBy(q => q.MinKmw).LastOrDefault();
SetOriginalValue(WineQualityLevelInput, qual);
if (WineQualityLevelInput.SelectedItem == null || (WineQualityLevelInput.SelectedItem is WineQualLevel selected && !selected.IsPredicate)) { if (WineQualityLevelInput.SelectedItem == null || (WineQualityLevelInput.SelectedItem is WineQualLevel selected && !selected.IsPredicate)) {
var qual = Context.WineQualityLevels.Where(q => !q.IsPredicate && (q.MinKmw == null || q.MinKmw <= kmw)).OrderBy(q => q.MinKmw).LastOrDefault();
WineQualityLevelInput.SelectedItem = qual; WineQualityLevelInput.SelectedItem = qual;
} }
} }
@ -133,7 +147,6 @@ namespace Elwig.Windows {
GradationKmwInput.Text = $"{Utils.OeToKmw(double.Parse(GradationOeInput.Text)):#.0}"; GradationKmwInput.Text = $"{Utils.OeToKmw(double.Parse(GradationOeInput.Text)):#.0}";
GradationKmwInput.CaretIndex = caret; GradationKmwInput.CaretIndex = caret;
IsUpdatingGradation = false; IsUpdatingGradation = false;
UpdateWineQualityLevels();
} }
private void UpdateGradationOe() { private void UpdateGradationOe() {
@ -142,12 +155,15 @@ namespace Elwig.Windows {
GradationOeInput.Text = $"{Utils.KmwToOe(double.Parse(GradationKmwInput.Text)):#}"; GradationOeInput.Text = $"{Utils.KmwToOe(double.Parse(GradationKmwInput.Text)):#}";
GradationOeInput.CaretIndex = caret; GradationOeInput.CaretIndex = caret;
IsUpdatingGradation = false; IsUpdatingGradation = false;
UpdateWineQualityLevels();
} }
private void GradationOeInput_TextChanged(object sender, TextChangedEventArgs evt) { private void GradationOeInput_TextChanged(object sender, TextChangedEventArgs evt) {
var valid = InputTextChanged((TextBox)sender, Validator.CheckGradatoinOe); var valid = InputTextChanged((TextBox)sender, Validator.CheckGradatoinOe);
if (valid && !IsUpdatingGradation) UpdateGradationKmw(); if (!IsUpdatingGradation) {
if (valid) UpdateGradationKmw();
else if (GradationOeInput.Text.Length == 0) GradationKmwInput.Text = "";
UpdateWineQualityLevels();
}
} }
private void GradationOeInput_LostFocus(object sender, RoutedEventArgs evt) { private void GradationOeInput_LostFocus(object sender, RoutedEventArgs evt) {
@ -156,7 +172,11 @@ namespace Elwig.Windows {
private void GradationKmwInput_TextChanged(object sender, TextChangedEventArgs evt) { private void GradationKmwInput_TextChanged(object sender, TextChangedEventArgs evt) {
var valid = InputTextChanged((TextBox)sender, Validator.CheckGradationKmw); var valid = InputTextChanged((TextBox)sender, Validator.CheckGradationKmw);
if (valid && !IsUpdatingGradation) UpdateGradationOe(); if (!IsUpdatingGradation) {
if (valid) UpdateGradationOe();
else if (GradationKmwInput.Text.Length == 0) GradationOeInput.Text = "";
UpdateWineQualityLevels();
}
} }
private void GradationKmwInput_LostFocus(object sender, RoutedEventArgs evt) { private void GradationKmwInput_LostFocus(object sender, RoutedEventArgs evt) {
@ -173,9 +193,13 @@ namespace Elwig.Windows {
} }
private void UpdateWineOrigin() { private void UpdateWineOrigin() {
var qual = (WineQualLevel)WineQualityLevelInput.SelectedItem; var qual = WineQualityLevelInput.SelectedItem as WineQualLevel;
var kg = ((AT_Kg)WineKgInput.SelectedItem)?.WbKg; var kg = (WineKgInput.SelectedItem as AT_Kg)?.WbKg;
if (qual == null || kg == null) return; if (qual == null || kg == null) {
WineOriginInput.IsEnabled = true;
return;
}
WineOriginInput.IsEnabled = false;
var o = kg.Origin; var o = kg.Origin;
while (o != null && o.Level > qual.OriginLevel) o = o.Parent; while (o != null && o.Level > qual.OriginLevel) o = o.Parent;
WineOriginInput.SelectedItem = o; WineOriginInput.SelectedItem = o;
@ -191,8 +215,10 @@ namespace Elwig.Windows {
list.Insert(0, new NullItem()); list.Insert(0, new NullItem());
Utils.RenewItemsSource(WineRdInput, list, i => ((i as WbRd)?.KgNr, (i as WbRd)?.RdNr)); Utils.RenewItemsSource(WineRdInput, list, i => ((i as WbRd)?.KgNr, (i as WbRd)?.RdNr));
if (WineRdInput.SelectedItem == null) WineRdInput.SelectedIndex = 0; if (WineRdInput.SelectedItem == null) WineRdInput.SelectedIndex = 0;
WineRdInput.IsEnabled = list.Count > 1;
} else { } else {
WineRdInput.ItemsSource = null; WineRdInput.ItemsSource = null;
WineRdInput.IsEnabled = false;
} }
} }