Changes in DeliveryAdminWindow
This commit is contained in:
@ -15,22 +15,21 @@ namespace Elwig.Windows {
|
||||
public partial class DeliveryAdminWindow : AdministrationWindow {
|
||||
|
||||
private bool IsUpdatingGradation = false;
|
||||
private bool IsRefreshingInputs = false;
|
||||
private readonly bool IsReceipt = false;
|
||||
private readonly Member? Member = null;
|
||||
private Member? Member = null;
|
||||
private readonly DispatcherTimer Timer;
|
||||
private List<string> TextFilter = new();
|
||||
private readonly RoutedCommand CtrlF = new();
|
||||
|
||||
public DeliveryAdminWindow() {
|
||||
public DeliveryAdminWindow(bool receipt = false) {
|
||||
InitializeComponent();
|
||||
CtrlF.InputGestures.Add(new KeyGesture(Key.F, ModifierKeys.Control));
|
||||
CommandBindings.Add(new CommandBinding(CtrlF, FocusSearchInput));
|
||||
RequiredInputs = new Control[] {
|
||||
MgNrInput, MemberInput,
|
||||
LsNrInput, DateInput, BranchInput,
|
||||
SortIdInput, WineVarietyInput,
|
||||
GradationOeInput, GradationKmwInput,
|
||||
WineQualityLevelInput,
|
||||
GradationOeInput, GradationKmwInput, WineQualityLevelInput,
|
||||
WineOriginInput, WineKgInput,
|
||||
WeightInput
|
||||
};
|
||||
@ -38,8 +37,8 @@ namespace Elwig.Windows {
|
||||
SearchInput, TodayOnlyInput, SeasonOnlyInput,
|
||||
DeliveryList, DeliveryPartList,
|
||||
MemberAddressField,
|
||||
LsNrInput, DateInput, TimeInput, BranchInput,
|
||||
};
|
||||
IsReceipt = receipt;
|
||||
|
||||
Timer = new DispatcherTimer();
|
||||
Timer.Tick += new EventHandler(OnSecondPassed);
|
||||
@ -47,12 +46,23 @@ namespace Elwig.Windows {
|
||||
|
||||
InitializeDelayTimer(SearchInput, SearchInput_TextChanged);
|
||||
SearchInput.TextChanged -= SearchInput_TextChanged;
|
||||
}
|
||||
|
||||
public DeliveryAdminWindow(bool receipt) : this() {
|
||||
IsReceipt = receipt;
|
||||
Title = "Übernahme - Elwig";
|
||||
TodayOnlyInput.IsChecked = true;
|
||||
if (IsReceipt) {
|
||||
Title = "Übernahme - Elwig";
|
||||
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() {
|
||||
@ -75,10 +85,12 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
protected override void UpdateButtons() {
|
||||
|
||||
if (!IsEditing && !IsCreating) return;
|
||||
bool ch = HasChanged, v = IsValid;
|
||||
ResetButton.IsEnabled = (ch);
|
||||
SaveButton.IsEnabled = (v && ch);
|
||||
}
|
||||
|
||||
|
||||
private async Task RefreshDeliveryList() {
|
||||
await RefreshDeliveryListQuery();
|
||||
}
|
||||
@ -98,44 +110,37 @@ namespace Elwig.Windows {
|
||||
|
||||
List<Delivery> deliveries = await deliveryQuery.OrderByDescending(d => d.DateString).ThenByDescending(d => d.TimeString).ToListAsync();
|
||||
if (TextFilter.Count > 0) {
|
||||
deliveries = deliveries
|
||||
var dict = deliveries
|
||||
.ToDictionary(d => d, d => d.SearchScore(TextFilter))
|
||||
.OrderByDescending(a => a.Value)
|
||||
.ThenBy(a => a.Key.DateTime)
|
||||
.Where(a => a.Value > 0)
|
||||
.ThenBy(a => a.Key.DateTime);
|
||||
var threshold = dict.Select(a => a.Value).Max() * 3 / 4;
|
||||
deliveries = dict
|
||||
.Where(a => a.Value > threshold)
|
||||
.Select(a => a.Key)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
Utils.RenewItemsSource(DeliveryList, deliveries, d => ((d as Delivery)?.Year, (d as Delivery)?.DId), !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();
|
||||
Utils.RenewItemsSource(DeliveryList, deliveries, d => ((d as Delivery)?.Year, (d as Delivery)?.DId), DeliveryList_SelectionChanged, Utils.RenewSourceDefault.IfOnly, !updateSort);
|
||||
}
|
||||
|
||||
protected override async Task 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();
|
||||
RefreshDeliveryPartList();
|
||||
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(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(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);
|
||||
@ -144,10 +149,9 @@ namespace Elwig.Windows {
|
||||
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();
|
||||
UpdateRdInput();
|
||||
await UpdateLsNr();
|
||||
|
||||
if (IsCreating) await UpdateLsNr();
|
||||
}
|
||||
|
||||
private void FocusSearchInput(object sender, RoutedEventArgs evt) {
|
||||
@ -157,35 +161,38 @@ namespace Elwig.Windows {
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshInputs() {
|
||||
IsRefreshingInputs = true;
|
||||
ClearInputStates();
|
||||
private void RefreshDeliveryParts() {
|
||||
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);
|
||||
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 {
|
||||
Utils.RenewItemsSource(ModifiersInput, Context.Modifiers.Where(m => m.Year == Utils.CurrentLastSeason).OrderBy(m => m.Name).ToList(), i => (i as Modifier)?.ModId);
|
||||
ClearOriginalValues();
|
||||
ClearInputs();
|
||||
DeliveryPartList.ItemsSource = null;
|
||||
}
|
||||
IsRefreshingInputs = false;
|
||||
}
|
||||
|
||||
private void RefreshInputs(bool validate = false) {
|
||||
ClearInputStates();
|
||||
if (DeliveryPartList.SelectedItem is DeliveryPart p) {
|
||||
FillInputs(p);
|
||||
} else {
|
||||
ClearOriginalValues();
|
||||
ClearInputs(validate);
|
||||
}
|
||||
GC.Collect();
|
||||
}
|
||||
|
||||
private void FillInputs(Delivery d) {
|
||||
private void FillInputs(DeliveryPart p) {
|
||||
ClearOriginalValues();
|
||||
|
||||
var d = p.Delivery;
|
||||
MgNrInput.Text = d.MgNr.ToString();
|
||||
Utils.SelectComboBoxItem(BranchInput, i => (i as Branch)?.ZwstId, d.ZwstId);
|
||||
LsNrInput.Text = d.LsNr;
|
||||
DateInput.Text = d.Date.ToString("dd.MM.yyyy");
|
||||
TimeInput.Text = d.Time?.ToString("HH:mm") ?? "";
|
||||
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 ?? "";
|
||||
Utils.SelectCheckComboBoxItems(AttributesInput, p?.Attributes, i => (i as WineAttr)?.AttrId);
|
||||
GradationKmwInput.Text = (p != null) ? $"{p.Kmw:N1}" : "";
|
||||
@ -223,11 +230,27 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
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) {
|
||||
if (!IsRefreshingInputs) RefreshInputs();
|
||||
private void DeliveryPartList_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) {
|
||||
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) {
|
||||
@ -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() {
|
||||
var branch = (Branch)BranchInput.SelectedItem;
|
||||
var date = DateOnly.ParseExact(DateInput.Text, "dd.MM.yyyy");
|
||||
@ -261,7 +422,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private void DateInput_TextChanged(object sender, TextChangedEventArgs evt) {
|
||||
UpdateLsNr().GetAwaiter().GetResult();
|
||||
if (IsCreating) UpdateLsNr().GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
private void UpdateWineVariety(bool valid) {
|
||||
@ -288,8 +449,8 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private void WineVarietyInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
|
||||
var s = WineVarietyInput.SelectedItem as WineVar;
|
||||
if (s != null) SortIdInput.Text = s.SortId;
|
||||
if (WineVarietyInput.SelectedItem is WineVar s)
|
||||
SortIdInput.Text = s.SortId;
|
||||
}
|
||||
|
||||
private void UpdateWineQualityLevels() {
|
||||
|
Reference in New Issue
Block a user