Changes in DeliveryAdminWindow

This commit is contained in:
2023-07-21 18:21:47 +02:00
parent 75322da405
commit 5cee928978
6 changed files with 299 additions and 89 deletions

View File

@ -137,27 +137,54 @@ namespace Elwig.Helpers {
return null; return null;
} }
public static void RenewItemsSource(Selector selector, IEnumerable? source, Func<object?, object?> getId) { public enum RenewSourceDefault {
None,
IfOnly,
First
}
public static void RenewItemsSource(Selector selector, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) {
if (selector.ItemsSource == source)
return;
var selectedId = getId(selector.SelectedItem); var selectedId = getId(selector.SelectedItem);
if (handler != null) selector.SelectionChanged -= handler;
selector.ItemsSource = source; selector.ItemsSource = source;
if (selectedId != null && source != null) if (selectedId != null && source != null)
selector.SelectedItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i))); selector.SelectedItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
if (source != null && selector.SelectedItem == null) {
if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
selector.SelectedItem = source.Cast<object>().First();
}
}
if (handler != null) selector.SelectionChanged += handler;
} }
public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Func<object?, object?> getId) { public static void RenewItemsSource(Xceed.Wpf.Toolkit.Primitives.Selector selector, IEnumerable? source, Func<object?, object?> getId, Xceed.Wpf.Toolkit.Primitives.ItemSelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) {
if (selector.ItemsSource == source)
return;
var selectedIds = selector.SelectedItems.Cast<object>().Select(i => getId(i)).ToList(); var selectedIds = selector.SelectedItems.Cast<object>().Select(i => getId(i)).ToList();
if (handler != null) selector.ItemSelectionChanged -= handler;
selector.ItemsSource = source; selector.ItemsSource = source;
if (source != null) { if (source != null) {
foreach (var i in source.Cast<object>().Where(i => selectedIds.Contains(getId(i)))) foreach (var i in source.Cast<object>().Where(i => selectedIds.Contains(getId(i))))
selector.SelectedItems.Add(i); selector.SelectedItems.Add(i);
} }
if (source != null && selector.SelectedItem == null) {
if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
selector.SelectedItem = source.Cast<object>().First();
}
}
if (handler != null) selector.ItemSelectionChanged += handler;
} }
public static void RenewItemsSource(DataGrid dataGrid, IEnumerable? source, Func<object?, object?> getId, bool keepSort = true) { public static void RenewItemsSource(DataGrid dataGrid, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None, bool keepSort = true) {
if (dataGrid.ItemsSource == source)
return;
var column = dataGrid.CurrentCell.Column; var column = dataGrid.CurrentCell.Column;
var sortColumns = dataGrid.Columns.Select(c => c.SortDirection).ToList(); var sortColumns = dataGrid.Columns.Select(c => c.SortDirection).ToList();
var sort = dataGrid.Items.SortDescriptions.ToList(); var sort = dataGrid.Items.SortDescriptions.ToList();
var selectedId = getId(dataGrid.SelectedItem); var selectedId = getId(dataGrid.SelectedItem);
if (handler != null) dataGrid.SelectionChanged -= handler;
dataGrid.ItemsSource = source; dataGrid.ItemsSource = source;
if (keepSort) { if (keepSort) {
for (int i = 0; i < dataGrid.Columns.Count; i++) for (int i = 0; i < dataGrid.Columns.Count; i++)
@ -169,13 +196,28 @@ namespace Elwig.Helpers {
dataGrid.SelectedItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i))); dataGrid.SelectedItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
if (dataGrid.SelectedItem != null && column != null) if (dataGrid.SelectedItem != null && column != null)
dataGrid.CurrentCell = new(dataGrid.SelectedItem, column); dataGrid.CurrentCell = new(dataGrid.SelectedItem, column);
if (source != null && dataGrid.SelectedItem == null) {
if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
dataGrid.SelectedItem = source.Cast<object>().First();
}
}
if (handler != null) dataGrid.SelectionChanged += handler;
} }
public static void RenewItemsSource(ListBox listBox, IEnumerable? source, Func<object?, object?> getId) { public static void RenewItemsSource(ListBox listBox, IEnumerable? source, Func<object?, object?> getId, SelectionChangedEventHandler? handler = null, RenewSourceDefault def = RenewSourceDefault.None) {
if (listBox.ItemsSource == source)
return;
var selectedId = getId(listBox.SelectedItem); var selectedId = getId(listBox.SelectedItem);
if (handler != null) listBox.SelectionChanged -= handler;
listBox.ItemsSource = source; listBox.ItemsSource = source;
if (selectedId != null && source != null) if (selectedId != null && source != null)
listBox.SelectedItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i))); listBox.SelectedItem = source.Cast<object>().FirstOrDefault(i => selectedId.Equals(getId(i)));
if (source != null && listBox.SelectedItem == null) {
if ((def == RenewSourceDefault.IfOnly && source.Cast<object>().Count() == 1) || def == RenewSourceDefault.First) {
listBox.SelectedItem = source.Cast<object>().First();
}
}
if (handler != null) listBox.SelectionChanged += handler;
} }
public static int Modulo(string a, int b) { public static int Modulo(string a, int b) {

View File

@ -181,7 +181,7 @@ namespace Elwig.Windows {
OriginalValues.Remove(input); OriginalValues.Remove(input);
} }
protected void ClearInputs() { protected void ClearInputs(bool validate = true) {
foreach (var tb in TextBoxInputs) foreach (var tb in TextBoxInputs)
tb.Text = ""; tb.Text = "";
foreach (var cb in ComboBoxInputs) foreach (var cb in ComboBoxInputs)
@ -192,7 +192,7 @@ namespace Elwig.Windows {
cb.IsChecked = false; cb.IsChecked = false;
foreach (var rb in RadioButtonInputs) foreach (var rb in RadioButtonInputs)
rb.IsChecked = false; rb.IsChecked = false;
ValidateRequiredInputs(); if (validate) ValidateRequiredInputs();
} }
protected bool IsValid => Valid.All(kv => kv.Value); protected bool IsValid => Valid.All(kv => kv.Value);

View File

@ -26,11 +26,11 @@ namespace Elwig.Windows {
if (LockContext || !Context.HasBackendChanged) return; if (LockContext || !Context.HasBackendChanged) return;
Context.Dispose(); Context.Dispose();
Context = new(); Context = new();
RenewContext(); RenewContext().GetAwaiter().GetResult();
} }
private void OnLoaded(object sender, RoutedEventArgs evt) { private void OnLoaded(object sender, RoutedEventArgs evt) {
RenewContext(); RenewContext().GetAwaiter().GetResult();
} }
protected override void OnClosed(EventArgs evt) { protected override void OnClosed(EventArgs evt) {

View File

@ -104,19 +104,29 @@
</DataGrid.Columns> </DataGrid.Columns>
</DataGrid> </DataGrid>
<Button x:Name="NewMemberButton" Content="Neu" <Button x:Name="NewDeliveryButton" Content="Neu" IsEnabled="False" Visibility="Hidden"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0" Grid.Row="2"/> HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0" Grid.Row="2"
<Button x:Name="EditMemberButton" Content="Bearbeiten" IsEnabled="False" Click="NewDeliveryButton_Click"/>
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,2.5,10" Grid.Column="1" Grid.Row="2"/> <Button x:Name="AbwertenButton" Content="Abwerten" IsEnabled="False"
<Button x:Name="DeleteMemberButton" Content="Löschen" IsEnabled="False" ToolTip="Ausgewählte Teillieferung vollständig oder teilweise abwerten"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,5,10" Grid.Column="2" Grid.Row="2"/> HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0" Grid.Row="2"
Click="AbwertenButton_Click"/>
<Button x:Name="EditDeliveryButton" Content="Bearbeiten" IsEnabled="False"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,2.5,10" Grid.Column="1" Grid.Row="2"
Click="EditDeliveryButton_Click"/>
<Button x:Name="DeleteDeliveryButton" Content="Löschen" IsEnabled="False"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,5,10" Grid.Column="2" Grid.Row="2"
Click="DeleteDeliveryButton_Click"/>
<Button x:Name="SaveButton" Content="Speichern" IsEnabled="False" Visibility="Hidden" <Button x:Name="SaveButton" Content="Speichern" IsEnabled="False" Visibility="Hidden"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0"/> HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,5,2.5,10" Grid.Column="0" Grid.Row="2"
Click="SaveButton_Click"/>
<Button x:Name="ResetButton" Content="Zurücksetzen" IsEnabled="False" Visibility="Hidden" <Button x:Name="ResetButton" Content="Zurücksetzen" IsEnabled="False" Visibility="Hidden"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,2.5,10" Grid.Column="1"/> HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,2.5,10" Grid.Column="1" Grid.Row="2"
Click="ResetButton_Click"/>
<Button x:Name="CancelButton" Content="Abbrechen" IsEnabled="False" Visibility="Hidden" IsCancel="True" <Button x:Name="CancelButton" Content="Abbrechen" IsEnabled="False" Visibility="Hidden" IsCancel="True"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,5,10" Grid.Column="2"/> HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,5,5,10" Grid.Column="2" Grid.Row="2"
Click="CancelButton_Click"/>
</Grid> </Grid>
<GroupBox Header="Mitglied" Grid.Column="1" Grid.Row="1" Margin="5,5,5,5"> <GroupBox Header="Mitglied" Grid.Column="1" Grid.Row="1" Margin="5,5,5,5">
@ -212,7 +222,7 @@
ItemTemplate="{StaticResource WineQualityLevelTemplate}" ItemTemplate="{StaticResource WineQualityLevelTemplate}"
SelectionChanged="WineQualityLevelInput_SelectionChanged"/> SelectionChanged="WineQualityLevelInput_SelectionChanged"/>
<CheckBox x:Name="AbgewertetInput" Content="Abgewertet" <CheckBox x:Name="AbgewertetInput" Content="Abgewertet" IsEnabled="False"
VerticalAlignment="Top" HorizontalAlignment="Left" Margin="0,75,10,10" Grid.Column="1"/> VerticalAlignment="Top" HorizontalAlignment="Left" Margin="0,75,10,10" Grid.Column="1"/>
</Grid> </Grid>
</GroupBox> </GroupBox>
@ -231,7 +241,7 @@
<Label Content="kg" Margin="0,4,3,0" HorizontalAlignment="Right" FontSize="10"/> <Label Content="kg" Margin="0,4,3,0" HorizontalAlignment="Right" FontSize="10"/>
</Grid> </Grid>
<CheckBox x:Name="ManualWeighingInput" Content="Handwiegung" <CheckBox x:Name="ManualWeighingInput" Content="Handwiegung" IsEnabled="False"
VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,45,10,10" Grid.Column="0" Grid.ColumnSpan="2"/> VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,45,10,10" Grid.Column="0" Grid.ColumnSpan="2"/>
<CheckBox x:Name="GerebeltGewogenInput" Content="Gerebelt gewogen" <CheckBox x:Name="GerebeltGewogenInput" Content="Gerebelt gewogen"
@ -308,9 +318,12 @@
</ListBox> </ListBox>
<Button x:Name="ExtractDeliveryPartButton" Content="Herausheben" IsEnabled="False" <Button x:Name="ExtractDeliveryPartButton" Content="Herausheben" IsEnabled="False"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="5,10,2.5,5" Grid.Column="0" Grid.Row="2"/> 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"/>
<Button x:Name="DeleteDeliveryPartButton" Content="Löschen" IsEnabled="False" <Button x:Name="DeleteDeliveryPartButton" Content="Löschen" IsEnabled="False"
HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,10,5,5" Grid.Column="1" Grid.Row="2"/> HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Margin="2.5,10,5,5" Grid.Column="1" Grid.Row="2"
Click="DeleteDeliveryPartButton_Click"/>
</Grid> </Grid>
</GroupBox> </GroupBox>

View File

@ -15,22 +15,21 @@ namespace Elwig.Windows {
public partial class DeliveryAdminWindow : AdministrationWindow { public partial class DeliveryAdminWindow : AdministrationWindow {
private bool IsUpdatingGradation = false; private bool IsUpdatingGradation = false;
private bool IsRefreshingInputs = false;
private readonly bool IsReceipt = false; private readonly bool IsReceipt = false;
private readonly Member? Member = null; private Member? Member = null;
private readonly DispatcherTimer Timer; private readonly DispatcherTimer Timer;
private List<string> TextFilter = new(); private List<string> TextFilter = new();
private readonly RoutedCommand CtrlF = new(); private readonly RoutedCommand CtrlF = new();
public DeliveryAdminWindow() { public DeliveryAdminWindow(bool receipt = false) {
InitializeComponent(); InitializeComponent();
CtrlF.InputGestures.Add(new KeyGesture(Key.F, ModifierKeys.Control)); CtrlF.InputGestures.Add(new KeyGesture(Key.F, ModifierKeys.Control));
CommandBindings.Add(new CommandBinding(CtrlF, FocusSearchInput)); CommandBindings.Add(new CommandBinding(CtrlF, FocusSearchInput));
RequiredInputs = new Control[] { RequiredInputs = new Control[] {
MgNrInput, MemberInput, MgNrInput, MemberInput,
LsNrInput, DateInput, BranchInput,
SortIdInput, WineVarietyInput, SortIdInput, WineVarietyInput,
GradationOeInput, GradationKmwInput, GradationOeInput, GradationKmwInput, WineQualityLevelInput,
WineQualityLevelInput,
WineOriginInput, WineKgInput, WineOriginInput, WineKgInput,
WeightInput WeightInput
}; };
@ -38,8 +37,8 @@ namespace Elwig.Windows {
SearchInput, TodayOnlyInput, SeasonOnlyInput, SearchInput, TodayOnlyInput, SeasonOnlyInput,
DeliveryList, DeliveryPartList, DeliveryList, DeliveryPartList,
MemberAddressField, MemberAddressField,
LsNrInput, DateInput, TimeInput, BranchInput,
}; };
IsReceipt = receipt;
Timer = new DispatcherTimer(); Timer = new DispatcherTimer();
Timer.Tick += new EventHandler(OnSecondPassed); Timer.Tick += new EventHandler(OnSecondPassed);
@ -47,12 +46,23 @@ namespace Elwig.Windows {
InitializeDelayTimer(SearchInput, SearchInput_TextChanged); InitializeDelayTimer(SearchInput, SearchInput_TextChanged);
SearchInput.TextChanged -= SearchInput_TextChanged; SearchInput.TextChanged -= SearchInput_TextChanged;
}
public DeliveryAdminWindow(bool receipt) : this() { if (IsReceipt) {
IsReceipt = receipt; Title = "Übernahme - Elwig";
Title = "Übernahme - Elwig"; TodayOnlyInput.IsChecked = true;
TodayOnlyInput.IsChecked = true; var n = App.Scales.Count();
if (n < 1) WeighingAButton.Visibility = Visibility.Hidden;
if (n < 2) WeighingBButton.Visibility = Visibility.Hidden;
if (n < 3) WeighingCButton.Visibility = Visibility.Hidden;
if (n < 4) WeighingDButton.Visibility = Visibility.Hidden;
if (n == 1) WeighingAButton.Content = "Wiegen";
} else {
WeighingManualButton.Visibility = Visibility.Hidden;
WeighingAButton.Visibility = Visibility.Hidden;
WeighingBButton.Visibility = Visibility.Hidden;
WeighingCButton.Visibility = Visibility.Hidden;
WeighingDButton.Visibility = Visibility.Hidden;
}
} }
public DeliveryAdminWindow(int mgnr) : this() { public DeliveryAdminWindow(int mgnr) : this() {
@ -75,10 +85,12 @@ namespace Elwig.Windows {
} }
protected override void UpdateButtons() { protected override void UpdateButtons() {
if (!IsEditing && !IsCreating) return;
bool ch = HasChanged, v = IsValid;
ResetButton.IsEnabled = (ch);
SaveButton.IsEnabled = (v && ch);
} }
private async Task RefreshDeliveryList() { private async Task RefreshDeliveryList() {
await RefreshDeliveryListQuery(); await RefreshDeliveryListQuery();
} }
@ -98,44 +110,37 @@ namespace Elwig.Windows {
List<Delivery> deliveries = await deliveryQuery.OrderByDescending(d => d.DateString).ThenByDescending(d => d.TimeString).ToListAsync(); List<Delivery> deliveries = await deliveryQuery.OrderByDescending(d => d.DateString).ThenByDescending(d => d.TimeString).ToListAsync();
if (TextFilter.Count > 0) { if (TextFilter.Count > 0) {
deliveries = deliveries var dict = deliveries
.ToDictionary(d => d, d => d.SearchScore(TextFilter)) .ToDictionary(d => d, d => d.SearchScore(TextFilter))
.OrderByDescending(a => a.Value) .OrderByDescending(a => a.Value)
.ThenBy(a => a.Key.DateTime) .ThenBy(a => a.Key.DateTime);
.Where(a => a.Value > 0) var threshold = dict.Select(a => a.Value).Max() * 3 / 4;
deliveries = dict
.Where(a => a.Value > threshold)
.Select(a => a.Key) .Select(a => a.Key)
.ToList(); .ToList();
} }
Utils.RenewItemsSource(DeliveryList, deliveries, d => ((d as Delivery)?.Year, (d as Delivery)?.DId), !updateSort); Utils.RenewItemsSource(DeliveryList, deliveries, d => ((d as Delivery)?.Year, (d as Delivery)?.DId), DeliveryList_SelectionChanged, Utils.RenewSourceDefault.IfOnly, !updateSort);
if (deliveries.Count == 1)
DeliveryList.SelectedIndex = 0;
RefreshInputs();
}
private void RefreshDeliveryPartList(bool updateSort = false) {
if (DeliveryList.SelectedItem is not Delivery d) {
DeliveryPartList.ItemsSource = null;
return;
}
Utils.RenewItemsSource(DeliveryPartList, d.Parts.OrderBy(p => p.DPNr), i => ((i as DeliveryPart)?.Year, (i as DeliveryPart)?.DId, (i as DeliveryPart)?.DPNr));
if (d.Parts.Count == 1)
DeliveryPartList.SelectedIndex = 0;
RefreshInputs();
} }
protected override async Task RenewContext() { protected override async Task RenewContext() {
await base.RenewContext(); await base.RenewContext();
if (Member != null) {
if (Context.Members.Find(Member.MgNr) is not Member m) {
Close();
return;
}
Member = m;
Title = $"Lieferungen - {Member.AdministrativeName} - Elwig";
}
await RefreshDeliveryList(); await RefreshDeliveryList();
RefreshDeliveryPartList();
var d = DeliveryList.SelectedItem as Delivery; var d = DeliveryList.SelectedItem as Delivery;
var y = (d?.Year ?? Utils.CurrentLastSeason); var y = d?.Year ?? Utils.CurrentLastSeason;
Utils.RenewItemsSource(MemberInput, await Context.Members.OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync(), i => (i as Member)?.MgNr); Utils.RenewItemsSource(MemberInput, await Context.Members.OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToListAsync(), i => (i as Member)?.MgNr);
Utils.RenewItemsSource(BranchInput, await Context.Branches.OrderBy(b => b.Name).ToListAsync(), i => (i as Branch)?.ZwstId); Utils.RenewItemsSource(BranchInput, await Context.Branches.OrderBy(b => b.Name).ToListAsync(), i => (i as Branch)?.ZwstId);
Utils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, App.ZwstId);
Utils.RenewItemsSource(WineVarietyInput, await Context.WineVarieties.OrderBy(v => v.Name).ToListAsync(), i => (i as WineVar)?.SortId); Utils.RenewItemsSource(WineVarietyInput, await Context.WineVarieties.OrderBy(v => v.Name).ToListAsync(), i => (i as WineVar)?.SortId);
Utils.RenewItemsSource(AttributesInput, await Context.WineAttributes.OrderBy(a => a.Name).ToListAsync(), i => (i as WineAttr)?.AttrId); Utils.RenewItemsSource(AttributesInput, await Context.WineAttributes.OrderBy(a => a.Name).ToListAsync(), i => (i as WineAttr)?.AttrId);
Utils.RenewItemsSource(WineQualityLevelInput, await Context.WineQualityLevels.ToListAsync(), i => (i as WineQualLevel)?.QualId); Utils.RenewItemsSource(WineQualityLevelInput, await Context.WineQualityLevels.ToListAsync(), i => (i as WineQualLevel)?.QualId);
@ -144,10 +149,9 @@ namespace Elwig.Windows {
var kgList = await Context.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).Cast<object>().ToListAsync(); var kgList = await Context.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).Cast<object>().ToListAsync();
kgList.Insert(0, new NullItem()); kgList.Insert(0, new NullItem());
Utils.RenewItemsSource(WineKgInput, kgList, i => (i as AT_Kg)?.KgNr); Utils.RenewItemsSource(WineKgInput, kgList, i => (i as AT_Kg)?.KgNr);
if (WineKgInput.SelectedItem == null) WineKgInput.SelectedIndex = 0;
UpdateWineQualityLevels();
UpdateRdInput(); UpdateRdInput();
await UpdateLsNr();
if (IsCreating) await UpdateLsNr();
} }
private void FocusSearchInput(object sender, RoutedEventArgs evt) { private void FocusSearchInput(object sender, RoutedEventArgs evt) {
@ -157,35 +161,38 @@ namespace Elwig.Windows {
} }
} }
private void RefreshInputs() { private void RefreshDeliveryParts() {
IsRefreshingInputs = true;
ClearInputStates();
if (DeliveryList.SelectedItem is Delivery d) { if (DeliveryList.SelectedItem is Delivery d) {
Utils.RenewItemsSource(ModifiersInput, Context.Modifiers.Where(m => m.Year == d.Year).OrderBy(m => m.Name).ToList(), i => (i as Modifier)?.ModId); Utils.RenewItemsSource(ModifiersInput, Context.Modifiers.Where(m => m.Year == d.Year).OrderBy(m => m.Name).ToList(), i => (i as Modifier)?.ModId);
FillInputs(d); Utils.RenewItemsSource(DeliveryPartList, d.Parts.OrderBy(p => p.DPNr).ToList(), i => ((i as DeliveryPart)?.Year, (i as DeliveryPart)?.DId, (i as DeliveryPart)?.DPNr), DeliveryPartList_SelectionChanged, Utils.RenewSourceDefault.First);
} else { } else {
Utils.RenewItemsSource(ModifiersInput, Context.Modifiers.Where(m => m.Year == Utils.CurrentLastSeason).OrderBy(m => m.Name).ToList(), i => (i as Modifier)?.ModId); Utils.RenewItemsSource(ModifiersInput, Context.Modifiers.Where(m => m.Year == Utils.CurrentLastSeason).OrderBy(m => m.Name).ToList(), i => (i as Modifier)?.ModId);
ClearOriginalValues(); DeliveryPartList.ItemsSource = null;
ClearInputs(); }
}
private void RefreshInputs(bool validate = false) {
ClearInputStates();
if (DeliveryPartList.SelectedItem is DeliveryPart p) {
FillInputs(p);
} else {
ClearOriginalValues();
ClearInputs(validate);
} }
IsRefreshingInputs = false;
GC.Collect(); GC.Collect();
} }
private void FillInputs(Delivery d) { private void FillInputs(DeliveryPart p) {
ClearOriginalValues(); ClearOriginalValues();
var d = p.Delivery;
MgNrInput.Text = d.MgNr.ToString(); MgNrInput.Text = d.MgNr.ToString();
Utils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, d.ZwstId);
LsNrInput.Text = d.LsNr; LsNrInput.Text = d.LsNr;
DateInput.Text = d.Date.ToString("dd.MM.yyyy"); DateInput.Text = d.Date.ToString("dd.MM.yyyy");
TimeInput.Text = d.Time?.ToString("HH:mm") ?? ""; TimeInput.Text = d.Time?.ToString("HH:mm") ?? "";
CommentInput.Text = d.Comment ?? ""; CommentInput.Text = d.Comment ?? "";
Utils.RenewItemsSource(DeliveryPartList, d.Parts, i => ((i as DeliveryPart)?.Year, (i as DeliveryPart)?.DId, (i as DeliveryPart)?.DPNr));
if (DeliveryPartList.SelectedItem == null && DeliveryPartList.ItemsSource != null) {
DeliveryPartList.SelectedIndex = 0;
}
var p = DeliveryPartList.SelectedItem as DeliveryPart;
SortIdInput.Text = p?.SortId ?? ""; SortIdInput.Text = p?.SortId ?? "";
Utils.SelectCheckComboBoxItems(AttributesInput, p?.Attributes, i => (i as WineAttr)?.AttrId); Utils.SelectCheckComboBoxItems(AttributesInput, p?.Attributes, i => (i as WineAttr)?.AttrId);
GradationKmwInput.Text = (p != null) ? $"{p.Kmw:N1}" : ""; GradationKmwInput.Text = (p != null) ? $"{p.Kmw:N1}" : "";
@ -223,11 +230,27 @@ namespace Elwig.Windows {
} }
private void DeliveryList_SelectionChanged(object sender, SelectionChangedEventArgs evt) { private void DeliveryList_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
RefreshInputs(); RefreshDeliveryParts();
if (DeliveryList.SelectedItem != null) {
DeleteDeliveryButton.IsEnabled = true;
} else {
DeleteDeliveryButton.IsEnabled = false;
}
} }
private void DeliveryPartList_SelectionChanged(object sender, SelectionChangedEventArgs evt) { private void DeliveryPartList_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) {
if (!IsRefreshingInputs) RefreshInputs(); RefreshInputs();
if (DeliveryPartList.SelectedItem != null) {
AbwertenButton.IsEnabled = true;
EditDeliveryButton.IsEnabled = true;
ExtractDeliveryPartButton.IsEnabled = true;
DeleteDeliveryPartButton.IsEnabled = true;
} else {
AbwertenButton.IsEnabled = false;
EditDeliveryButton.IsEnabled = false;
ExtractDeliveryPartButton.IsEnabled = false;
DeleteDeliveryPartButton.IsEnabled = false;
}
} }
private void MgNrInput_TextChanged(object sender, TextChangedEventArgs evt) { private void MgNrInput_TextChanged(object sender, TextChangedEventArgs evt) {
@ -253,6 +276,144 @@ namespace Elwig.Windows {
} }
} }
private void NewDeliveryButton_Click(object sender, RoutedEventArgs evt) {
}
private void AbwertenButton_Click(object sender, RoutedEventArgs evt) {
}
private void EditDeliveryButton_Click(object sender, RoutedEventArgs evt) {
if (DeliveryPartList.SelectedItem == null)
return;
IsEditing = true;
DeliveryList.IsEnabled = false;
DeliveryPartList.IsEnabled = false;
HideNewEditDeleteButtons();
ShowSaveResetCancelButtons();
UnlockInputs();
LockSearchInputs();
AbwertenButton.IsEnabled = false;
ExtractDeliveryPartButton.IsEnabled = false;
DeleteDeliveryPartButton.IsEnabled = false;
}
private void DeleteDeliveryButton_Click(object sender, RoutedEventArgs evt) {
}
private void SaveButton_Click(object sender, RoutedEventArgs evt) {
}
private void ResetButton_Click(object sender, RoutedEventArgs evt) {
if (IsEditing) {
RefreshInputs();
} else if (IsCreating) {
ClearInputs();
//InitInputs(); TODO
}
UpdateButtons();
}
private void CancelButton_Click(object sender, RoutedEventArgs evt) {
IsEditing = false;
IsCreating = false;
DeliveryList.IsEnabled = true;
DeliveryPartList.IsEnabled = true;
HideSaveResetCancelButtons();
ShowNewEditDeleteButtons();
RefreshInputs();
ClearInputStates();
LockInputs();
UnlockSearchInputs();
AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem != null;
ExtractDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null;
DeleteDeliveryPartButton.IsEnabled = DeliveryPartList.SelectedItem != null;
}
private void ExtractDeliveryPartButton_Click(object sender, RoutedEventArgs evt) {
}
private void DeleteDeliveryPartButton_Click(object sender, RoutedEventArgs evt) {
}
private void ShowSaveResetCancelButtons() {
SaveButton.IsEnabled = false;
ResetButton.IsEnabled = false;
CancelButton.IsEnabled = true;
SaveButton.Visibility = Visibility.Visible;
ResetButton.Visibility = Visibility.Visible;
CancelButton.Visibility = Visibility.Visible;
}
private void HideSaveResetCancelButtons() {
SaveButton.IsEnabled = false;
ResetButton.IsEnabled = false;
CancelButton.IsEnabled = false;
SaveButton.Visibility = Visibility.Hidden;
ResetButton.Visibility = Visibility.Hidden;
CancelButton.Visibility = Visibility.Hidden;
}
private void ShowNewEditDeleteButtons() {
NewDeliveryButton.IsEnabled = IsReceipt;
AbwertenButton.IsEnabled = DeliveryPartList.SelectedItem != null;
EditDeliveryButton.IsEnabled = DeliveryPartList.SelectedItem != null;
DeleteDeliveryButton.IsEnabled = DeliveryList.SelectedItem != null;
NewDeliveryButton.Visibility = IsReceipt ? Visibility.Visible : Visibility.Hidden;
AbwertenButton.Visibility = !IsReceipt ? Visibility.Visible : Visibility.Hidden;
EditDeliveryButton.Visibility = Visibility.Visible;
DeleteDeliveryButton.Visibility = Visibility.Visible;
}
private void HideNewEditDeleteButtons() {
NewDeliveryButton.IsEnabled = false;
AbwertenButton.IsEnabled = false;
EditDeliveryButton.IsEnabled = false;
DeleteDeliveryButton.IsEnabled = false;
NewDeliveryButton.Visibility = Visibility.Hidden;
AbwertenButton.Visibility = Visibility.Hidden;
EditDeliveryButton.Visibility = Visibility.Hidden;
DeleteDeliveryButton.Visibility = Visibility.Hidden;
}
private void LockSearchInputs() {
SearchInput.IsEnabled = false;
TodayOnlyInput.IsEnabled = false;
SeasonOnlyInput.IsEnabled = false;
}
private void UnlockSearchInputs() {
SearchInput.IsEnabled = true;
TodayOnlyInput.IsEnabled = true;
SeasonOnlyInput.IsEnabled = true;
}
new protected void UnlockInputs() {
base.UnlockInputs();
if (WineQualityLevelInput.SelectedItem != null && WineKgInput.SelectedItem != null)
WineOriginInput.IsEnabled = false;
if (WineKgInput.SelectedItem == null)
WineRdInput.IsEnabled = false;
WeightInput.IsReadOnly = true;
AbgewertetInput.IsEnabled = false;
ManualWeighingInput.IsEnabled = false;
LsNrInput.IsReadOnly = true;
DateInput.IsReadOnly = true;
TimeInput.IsReadOnly = true;
BranchInput.IsEnabled = false;
}
private async Task UpdateLsNr() { private async Task UpdateLsNr() {
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");
@ -261,7 +422,7 @@ namespace Elwig.Windows {
} }
private void DateInput_TextChanged(object sender, TextChangedEventArgs evt) { private void DateInput_TextChanged(object sender, TextChangedEventArgs evt) {
UpdateLsNr().GetAwaiter().GetResult(); if (IsCreating) UpdateLsNr().GetAwaiter().GetResult();
} }
private void UpdateWineVariety(bool valid) { private void UpdateWineVariety(bool valid) {
@ -288,8 +449,8 @@ namespace Elwig.Windows {
} }
private void WineVarietyInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) { private void WineVarietyInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
var s = WineVarietyInput.SelectedItem as WineVar; if (WineVarietyInput.SelectedItem is WineVar s)
if (s != null) SortIdInput.Text = s.SortId; SortIdInput.Text = s.SortId;
} }
private void UpdateWineQualityLevels() { private void UpdateWineQualityLevels() {

View File

@ -89,17 +89,12 @@ namespace Elwig.Windows {
.ToList(); .ToList();
} }
Utils.RenewItemsSource(MemberList, members, i => (i as Member)?.MgNr, !updateSort); Utils.RenewItemsSource(MemberList, members, i => (i as Member)?.MgNr, MemberList_SelectionChanged, Utils.RenewSourceDefault.IfOnly, !updateSort);
if (members.Count == 1)
MemberList.SelectedIndex = 0;
RefreshInputs();
} }
private void RefreshInputs(bool validate = false) { private void RefreshInputs(bool validate = false) {
ClearInputStates(); ClearInputStates();
Member m = (Member)MemberList.SelectedItem; if (MemberList.SelectedItem is Member m) {
if (m != null) {
EditMemberButton.IsEnabled = true; EditMemberButton.IsEnabled = true;
DeleteMemberButton.IsEnabled = true; DeleteMemberButton.IsEnabled = true;
AreaCommitmentButton.IsEnabled = true; AreaCommitmentButton.IsEnabled = true;
@ -111,9 +106,8 @@ namespace Elwig.Windows {
AreaCommitmentButton.IsEnabled = false; AreaCommitmentButton.IsEnabled = false;
DeliveryButton.IsEnabled = false; DeliveryButton.IsEnabled = false;
ClearOriginalValues(); ClearOriginalValues();
ClearInputs(); ClearInputs(validate);
} }
if (!validate) ClearInputStates();
GC.Collect(); GC.Collect();
} }