using Elwig.Helpers; using Elwig.Models.Entities; using Microsoft.EntityFrameworkCore; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; namespace Elwig.Windows { public partial class BaseDataWindow { private bool _seasonChanged = false; private bool _seasonUpdate = false; private void SeasonsInitEditing() { ControlUtils.RenewItemsSource(SeasonList, Context.Seasons.OrderByDescending(s => s.Year).ToList(), s => (s as Season)?.Year); SeasonList_SelectionChanged(null, null); } private void SeasonsFinishEditing() { ControlUtils.RenewItemsSource(SeasonList, Context.Seasons.OrderByDescending(s => s.Year).ToList(), s => (s as Season)?.Year); _seasonChanged = false; } private async Task SeasonsSave() { if (!_seasonChanged || SeasonList.SelectedItem is not Season s) return; Context.Update(s); await Context.SaveChangesAsync(); } private async void SeasonList_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) { _seasonUpdate = true; if (SeasonList.SelectedItem is Season s) { SeasonModifierList.ItemsSource = await Context.Modifiers.Where(m => m.Year == s.Year).OrderBy(m => m.Ordering).ToListAsync(); SeasonMaxKgPerHaInput.Text = s.MaxKgPerHa.ToString(); SeasonVatNormalInput.Text = (s.VatNormal * 100).ToString(); SeasonVatFlatrateInput.Text = (s.VatFlatrate * 100).ToString(); SeasonStartInput.Text = $"{s.StartDate:dd.MM.yyyy}"; SeasonEndInput.Text = $"{s.EndDate:dd.MM.yyyy}"; SeasonMinKgPerBsInput.Text = s.MinKgPerBusinessShare.ToString(); SeasonMaxKgPerBsInput.Text = s.MaxKgPerBusinessShare.ToString(); SeasonPenaltyPerKgInput.Text = s.PenaltyPerKg?.ToString() ?? ""; SeasonPenaltyInput.Text = s.PenaltyAmount?.ToString() ?? ""; SeasonPenaltyNoneInput.Text = s.PenaltyNone?.ToString() ?? ""; var sym = s.Currency.Symbol ?? ""; SeasonModifierAbsInput.Unit = $"{sym}/kg"; SeasonPenaltyPerKgInput.Unit = $"{sym}/kg"; SeasonPenaltyInput.Unit = sym; SeasonPenaltyNoneInput.Unit = sym; AreaCommitmentTypePenaltyPerKgInput.Unit = $"{sym}/kg"; AreaCommitmentTypePenaltyInput.Unit = sym; AreaCommitmentTypePenaltyNoneInput.Unit = sym; } else { SeasonModifierList.ItemsSource = null; SeasonMaxKgPerHaInput.Text = ""; SeasonVatNormalInput.Text = ""; SeasonVatFlatrateInput.Text = ""; SeasonStartInput.Text = ""; SeasonEndInput.Text = ""; SeasonMinKgPerBsInput.Text = ""; SeasonMaxKgPerBsInput.Text = ""; SeasonPenaltyPerKgInput.Text = ""; SeasonPenaltyInput.Text = ""; SeasonPenaltyNoneInput.Text = ""; } _seasonUpdate = false; } private void Season_Changed(object? sender, RoutedEventArgs? evt) { if (_seasonUpdate || (!IsEditing && !IsCreating) || SeasonList.SelectedItem is not Season s) return; _seasonChanged = true; if (SeasonMaxKgPerHaInput.Text.Length > 0) s.MaxKgPerHa = int.Parse(SeasonMaxKgPerHaInput.Text); if (SeasonVatNormalInput.Text.Length > 0) s.VatNormal = double.Parse(SeasonVatNormalInput.Text) / 100; if (SeasonVatFlatrateInput.Text.Length > 0) s.VatFlatrate = double.Parse(SeasonVatFlatrateInput.Text) / 100; if (SeasonMinKgPerBsInput.Text.Length > 0) s.MinKgPerBusinessShare = int.Parse(SeasonMinKgPerBsInput.Text); if (SeasonMaxKgPerBsInput.Text.Length > 0) s.MaxKgPerBusinessShare = int.Parse(SeasonMaxKgPerBsInput.Text); s.PenaltyPerKg = (SeasonPenaltyPerKgInput.Text.Length > 0) ? decimal.Parse(SeasonPenaltyPerKgInput.Text) : null; s.PenaltyAmount = (SeasonPenaltyInput.Text.Length > 0) ? decimal.Parse(SeasonPenaltyInput.Text) : null; s.PenaltyNone = (SeasonPenaltyNoneInput.Text.Length > 0) ? decimal.Parse(SeasonPenaltyNoneInput.Text) : null; UpdateButtons(); } private void SeasonMinMaxKgInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckInteger((TextBox)sender, true, 5)); Season_Changed(sender, evt); } private void SeasonVatInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckDecimal((TextBox)sender, true, 2, 1)); Season_Changed(sender, evt); } private void SeasonPenaltyPerKgInput_TextChanged(object sender, TextChangedEventArgs evt) { if (SeasonList.SelectedItem is not Season s) return; InputTextChanged((TextBox)sender, Validator.CheckDecimal((TextBox)sender, false, 2, s.Precision)); Season_Changed(sender, evt); } private void SeasonPenaltyInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckDecimal((TextBox)sender, false, 4, 2)); Season_Changed(sender, evt); } } }