118 lines
5.8 KiB
C#
118 lines
5.8 KiB
C#
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 async Task SeasonsInitEditing(AppDbContext ctx) {
|
|
ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons.OrderByDescending(s => s.Year).ToListAsync(), s => (s as Season)?.Year);
|
|
SeasonList_SelectionChanged(null, null);
|
|
}
|
|
|
|
private async Task SeasonsFinishEditing(AppDbContext ctx) {
|
|
ControlUtils.RenewItemsSource(SeasonList, await ctx.Seasons.OrderByDescending(s => s.Year).Include(s => s.Modifiers).ToListAsync(), s => (s as Season)?.Year);
|
|
_seasonChanged = false;
|
|
}
|
|
|
|
private async Task SeasonsSave(AppDbContext ctx) {
|
|
if (!_seasonChanged || SeasonList.SelectedItem is not Season s)
|
|
return;
|
|
ctx.Update(s);
|
|
await ctx.SaveChangesAsync();
|
|
}
|
|
|
|
private void SeasonList_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) {
|
|
_seasonUpdate = true;
|
|
if (SeasonList.SelectedItem is Season s) {
|
|
SeasonModifierList.ItemsSource = s.Modifiers.OrderBy(m => m.Ordering).ToList();
|
|
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() ?? "";
|
|
SeasonBsValueInput.Text = s.BusinessShareValue?.ToString() ?? "";
|
|
|
|
var sym = s.Currency.Symbol ?? "";
|
|
SeasonModifierAbsInput.Unit = $"{sym}/kg";
|
|
SeasonPenaltyPerKgInput.Unit = $"{sym}/kg";
|
|
SeasonPenaltyInput.Unit = sym;
|
|
SeasonPenaltyNoneInput.Unit = sym;
|
|
SeasonBsValueInput.Unit = $"{sym}/GA";
|
|
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 = "";
|
|
SeasonBsValueInput.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;
|
|
s.BusinessShareValue = (SeasonBsValueInput.Text.Length > 0) ? decimal.Parse(SeasonBsValueInput.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);
|
|
}
|
|
}
|
|
}
|