205 lines
9.2 KiB
C#
205 lines
9.2 KiB
C#
using Elwig.Helpers;
|
|
using Elwig.Models;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Threading;
|
|
using Xceed.Wpf.Toolkit.Primitives;
|
|
|
|
namespace Elwig.Windows {
|
|
public partial class DeliveryAdminWindow : AdministrationWindow {
|
|
|
|
private bool IsUpdatingGradation = false;
|
|
|
|
private DispatcherTimer dispatcherTimer;
|
|
|
|
public DeliveryAdminWindow() {
|
|
InitializeComponent();
|
|
RequiredInputs = new Control[] {
|
|
MgNrInput, MemberInput,
|
|
SortIdInput, WineVarietyInput,
|
|
GradationOeInput, GradationKmwInput,
|
|
WineQualityLevelInput,
|
|
WineOriginInput, WineKgInput
|
|
};
|
|
ExemptInputs = new Control[] {
|
|
LsNrInput, DateInput, TimeInput, BranchInput,
|
|
MemberAddressField
|
|
};
|
|
|
|
dispatcherTimer = new DispatcherTimer();
|
|
dispatcherTimer.Tick += new EventHandler(OnSecondPassed);
|
|
dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
|
|
dispatcherTimer.Start();
|
|
}
|
|
|
|
private void Window_Loaded(object sender, RoutedEventArgs evt) {
|
|
|
|
}
|
|
|
|
private void OnSecondPassed(object? sender, EventArgs evt) {
|
|
var now = DateTime.Now;
|
|
TimeInput.Text = now.ToString("HH:mm");
|
|
DateInput.Text = now.ToString("dd.MM.yyyy");
|
|
}
|
|
|
|
protected override void UpdateButtons() {
|
|
|
|
}
|
|
|
|
protected override async Task RenewContext() {
|
|
await base.RenewContext();
|
|
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);
|
|
BranchInput.SelectedItem = BranchInput.ItemsSource.Cast<Branch>().First(b => b.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);
|
|
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(WineKgInput, await Context.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).ToListAsync(), i => (i as AT_Kg)?.KgNr);
|
|
UpdateWineQualityLevels();
|
|
UpdateRdInput();
|
|
}
|
|
|
|
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;
|
|
WineKgInput.SelectedItem = m?.DefaultKg;
|
|
}
|
|
|
|
private void DateInput_TextChanged(object sender, TextChangedEventArgs evt) {
|
|
var branch = (Branch)BranchInput.SelectedItem;
|
|
var date = DateOnly.ParseExact(DateInput.Text, "dd.MM.yyyy");
|
|
var lnr = Context.NextLNr(date).GetAwaiter().GetResult();
|
|
LsNrInput.Text = $"{date.ToString("yyyyMMdd")}{branch.ZwstId}{lnr:000}";
|
|
}
|
|
|
|
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 UpdateWineQualityLevels() {
|
|
var kmw = double.Parse(GradationKmwInput.Text);
|
|
WineQualityLevelInput.ItemsSource = Context.WineQualityLevels.Where(q => q.MinKmw == null || q.MinKmw <= kmw).ToList();
|
|
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;
|
|
}
|
|
}
|
|
|
|
private void UpdateGradationKmw() {
|
|
IsUpdatingGradation = true;
|
|
var caret = GradationKmwInput.CaretIndex;
|
|
GradationKmwInput.Text = $"{Utils.OeToKmw(double.Parse(GradationOeInput.Text)):#.0}";
|
|
GradationKmwInput.CaretIndex = caret;
|
|
IsUpdatingGradation = false;
|
|
UpdateWineQualityLevels();
|
|
}
|
|
|
|
private void UpdateGradationOe() {
|
|
IsUpdatingGradation = true;
|
|
var caret = GradationOeInput.CaretIndex;
|
|
GradationOeInput.Text = $"{Utils.KmwToOe(double.Parse(GradationKmwInput.Text)):#}";
|
|
GradationOeInput.CaretIndex = caret;
|
|
IsUpdatingGradation = false;
|
|
UpdateWineQualityLevels();
|
|
}
|
|
|
|
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);
|
|
if (!GradationKmwInput.Text.Contains(',')) GradationKmwInput.Text += ",0";
|
|
}
|
|
|
|
private void AttributesInput_SelectionChanged(object sender, ItemSelectionChangedEventArgs evt) {
|
|
|
|
}
|
|
|
|
private void ModifiersInput_SelectionChanged(object sender, ItemSelectionChangedEventArgs evt) {
|
|
|
|
}
|
|
|
|
private void UpdateWineOrigin() {
|
|
var qual = (WineQualLevel)WineQualityLevelInput.SelectedItem;
|
|
var kg = ((AT_Kg)WineKgInput.SelectedItem)?.WbKg;
|
|
if (qual == null || kg == null) return;
|
|
var o = kg.Origin;
|
|
while (o != null && o.Level > qual.OriginLevel) o = o.Parent;
|
|
WineOriginInput.SelectedItem = o;
|
|
}
|
|
|
|
private void WineQualityLevelInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
|
|
UpdateWineOrigin();
|
|
}
|
|
|
|
private void UpdateRdInput() {
|
|
if (WineKgInput.SelectedItem is AT_Kg kg) {
|
|
var list = Context.WbRde.Where(r => r.KgNr == kg.KgNr).OrderBy(r => r.Name).Cast<object>().ToList();
|
|
list.Insert(0, new NullItem());
|
|
Utils.RenewItemsSource(WineRdInput, list, i => ((i as WbRd)?.KgNr, (i as WbRd)?.RdNr));
|
|
if (WineRdInput.SelectedItem == null) WineRdInput.SelectedIndex = 0;
|
|
} else {
|
|
WineRdInput.ItemsSource = null;
|
|
}
|
|
}
|
|
|
|
private void WineKgInput_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
|
|
UpdateWineOrigin();
|
|
UpdateRdInput();
|
|
}
|
|
}
|
|
}
|