using Elwig.Helpers; using Elwig.Models; using System.Linq; using System.Windows; using System.Windows.Controls; using Xceed.Wpf.Toolkit.Primitives; namespace Elwig.Windows { public partial class DeliveryAdminWindow : AdministrationWindow { private bool IsUpdatingGradation = false; public DeliveryAdminWindow() { InitializeComponent(); RequiredInputs = new Control[] { MgNrInput, MemberInput, SortIdInput, WineVarietyInput, GradationOeInput, GradationKmwInput, WineOriginInput }; ExemptInputs = new Control[] { MgNrInput, MemberInput, MemberAddressField }; } private void Window_Loaded(object sender, RoutedEventArgs evt) { MemberInput.ItemsSource = Context.Members.OrderBy(m => m.FamilyName).ThenBy(m => m.GivenName).ToList(); WineVarietyInput.ItemsSource = Context.WineVarieties.OrderBy(v => v.Name).ToList(); AttributesInput.ItemsSource = Context.WineAttributes.OrderBy(a => a.Name).ToList(); ModifiersInput.ItemsSource = Context.Modifiers.Where(m => m.Season.Year == 2022).OrderBy(m => m.Name).ToList(); WineOriginInput.ItemsSource = Context.WineOrigins.ToList().OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId); } protected override void UpdateButtons() { } private void MgNrInput_TextChanged(object sender, TextChangedEventArgs evt) { var valid = InputTextChanged((TextBox)sender, Validator.CheckMgNr); MemberInput.SelectedItem = valid ? Context.Members.Find(int.Parse(MgNrInput.Text)) : null; } private void MgNrInput_LostFocus(object sender, RoutedEventArgs evt) { var valid = InputLostFocus((TextBox)sender, Validator.CheckMgNr); MemberInput.SelectedItem = valid ? Context.Members.Find(int.Parse(MgNrInput.Text)) : null; } private void MemberInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) { var m = MemberInput.SelectedItem as Member; if (m != null) MgNrInput.Text = m.MgNr.ToString(); MemberAddressField.Text = m?.FullAddress; } private void UpdateWineVariety(bool valid) { if (valid) { var text = SortIdInput.Text; WineVarietyInput.SelectedItem = Context.WineVarieties.Find(text[0..2]); if (text.Length >= 3) { AttributesInput.UnSelectAll(); AttributesInput.SelectedItems.Add(Context.WineAttributes.Find(text[2..])); SortIdInput.Text = text[0..2]; } } else { WineVarietyInput.SelectedItem = null; AttributesInput.UnSelectAll(); } } private void SortIdInput_TextChanged(object sender, TextChangedEventArgs evt) { UpdateWineVariety(InputTextChanged((TextBox)sender, Validator.CheckSortId)); } private void SortIdInput_LostFocus(object sender, RoutedEventArgs evt) { UpdateWineVariety(InputLostFocus((TextBox)sender, Validator.CheckSortId)); } private void WineVarietyInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) { var s = WineVarietyInput.SelectedItem as WineVar; if (s != null) SortIdInput.Text = s.SortId; } private void UpdateGradationKmw() { IsUpdatingGradation = true; var caret = GradationKmwInput.CaretIndex; GradationKmwInput.Text = $"{Utils.OeToKmw(double.Parse(GradationOeInput.Text)):#.0}"; GradationKmwInput.CaretIndex = caret; IsUpdatingGradation = false; } private void UpdateGradationOe() { IsUpdatingGradation = true; var caret = GradationOeInput.CaretIndex; GradationOeInput.Text = $"{Utils.KmwToOe(double.Parse(GradationKmwInput.Text)):#}"; GradationOeInput.CaretIndex = caret; IsUpdatingGradation = false; } private void GradationOeInput_TextChanged(object sender, TextChangedEventArgs evt) { var valid = InputTextChanged((TextBox)sender, Validator.CheckGradatoinOe); if (valid && !IsUpdatingGradation) UpdateGradationKmw(); } private void GradationOeInput_LostFocus(object sender, RoutedEventArgs evt) { InputLostFocus((TextBox)sender, Validator.CheckGradatoinOe); } private void GradationKmwInput_TextChanged(object sender, TextChangedEventArgs evt) { var valid = InputTextChanged((TextBox)sender, Validator.CheckGradationKmw); if (valid && !IsUpdatingGradation) UpdateGradationOe(); } private void GradationKmwInput_LostFocus(object sender, RoutedEventArgs evt) { InputLostFocus((TextBox)sender, Validator.CheckGradationKmw); } private void AttributesInput_SelectionChanged(object sender, ItemSelectionChangedEventArgs evt) { } private void ModifiersInput_SelectionChanged(object sender, ItemSelectionChangedEventArgs evt) { } } }