From f60060935695ac359992f2a1c247d30a0d5b3810 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Mon, 30 Mar 2026 19:35:53 +0200 Subject: [PATCH] [WIP] Entities: Add AreaComContract to group area commitments together --- Elwig/Controls/IntegerUpDown.cs | 11 +- Elwig/Dialogs/AreaComModifyDialog.xaml.cs | 10 +- Elwig/Dialogs/AreaComTransferDialog.xaml | 8 +- Elwig/Dialogs/AreaComTransferDialog.xaml.cs | 26 +- Elwig/Documents/MemberDataSheet.cs | 12 +- Elwig/Helpers/AppDbContext.cs | 34 ++- Elwig/Helpers/AppDbUpdater.cs | 2 +- Elwig/Helpers/Export/ElwigData.cs | 290 ++++++++++++++------ Elwig/Helpers/Validator.cs | 2 +- Elwig/Models/Entities/AreaCom.cs | 31 +-- Elwig/Models/Entities/AreaComContract.cs | 78 ++++++ Elwig/Resources/Sql/37-38.sql | 218 +++++++++++++++ Elwig/Services/AreaComService.cs | 68 +++-- Elwig/Services/MemberService.cs | 14 +- Elwig/Services/SyncService.cs | 45 +-- Elwig/ViewModels/AreaComAdminViewModel.cs | 8 +- Elwig/ViewModels/MemberAdminViewModel.cs | 1 - Elwig/Windows/AreaComAdminWindow.xaml | 160 ++++++----- Elwig/Windows/AreaComAdminWindow.xaml.cs | 152 +++++++--- Elwig/Windows/MemberAdminWindow.xaml.cs | 1 - Elwig/Windows/OriginHierarchyWindow.xaml.cs | 4 +- Tests/fetch-resources.bat | 2 +- 22 files changed, 858 insertions(+), 319 deletions(-) create mode 100644 Elwig/Models/Entities/AreaComContract.cs create mode 100644 Elwig/Resources/Sql/37-38.sql diff --git a/Elwig/Controls/IntegerUpDown.cs b/Elwig/Controls/IntegerUpDown.cs index dba367a..fd4abd5 100644 --- a/Elwig/Controls/IntegerUpDown.cs +++ b/Elwig/Controls/IntegerUpDown.cs @@ -41,11 +41,19 @@ namespace Elwig.Controls { incButton!.Click += IncrementButton_Click; decButton!.Click += DecrementButton_Click; base.OnApplyTemplate(); + UpdateButtons(); + } + + private void UpdateButtons() { + var incButton = GetTemplateChild("IncrementButton") as RepeatButton; + var decButton = GetTemplateChild("DecrementButton") as RepeatButton; + incButton?.IsEnabled = Maximum != null && Value < Maximum; + decButton?.IsEnabled = Minimum != null && Value > Minimum; } private void IntegerUpDown_TextChanged(object sender, TextChangedEventArgs evt) { var idx = CaretIndex; - Text = new string(Text.Where(char.IsAsciiDigit).Take(4).ToArray()); + Text = new string([.. Text.Where(char.IsAsciiDigit).Take(4)]); CaretIndex = idx; evt.Handled = !(Value >= Minimum && Value <= Maximum); if (idx >= 4) { @@ -56,6 +64,7 @@ namespace Elwig.Controls { } CaretIndex = 4; } + UpdateButtons(); } private void IntegerUpDown_LostFocus(object sender, RoutedEventArgs evt) { diff --git a/Elwig/Dialogs/AreaComModifyDialog.xaml.cs b/Elwig/Dialogs/AreaComModifyDialog.xaml.cs index 0c2da99..ee064aa 100644 --- a/Elwig/Dialogs/AreaComModifyDialog.xaml.cs +++ b/Elwig/Dialogs/AreaComModifyDialog.xaml.cs @@ -12,23 +12,25 @@ namespace Elwig.Dialogs { public string OrigYearTo { get; set; } public string Area { get; set; } - public AreaComModifyDialog(int? yearFrom, int? yearTo, int area, bool delete) { + public AreaComModifyDialog(int? yearFrom, int? yearTo, int area, bool delete, bool forceRetroactive = false) { Area = $"{area:N0}"; OrigYearFrom = $"{yearFrom}"; OrigYearTo = $"{yearTo}"; InitializeComponent(); Title = delete ? "Flächenbindung löschen" : "Flächenbindung bearbeiten"; RetroactiveInput.Content = delete ? "Rückwirkend löschen" : "Rückwirkend bearbeiten"; + RetroactiveInput.IsEnabled = !forceRetroactive; if (delete) { QuestionBlock1.Visibility = Visibility.Hidden; QuestionBlock2.Visibility = Visibility.Visible; DescBlock1.Visibility = Visibility.Hidden; DescBlock2.Visibility = Visibility.Visible; } - if ((yearTo.HasValue && yearTo < Utils.CurrentNextSeason) || (yearFrom.HasValue && yearFrom >= Utils.CurrentNextSeason)) { + SeasonInput.Minimum = yearFrom + 1; + if (forceRetroactive || (yearTo.HasValue && yearTo < Utils.CurrentYear) || (yearFrom.HasValue && yearFrom >= Utils.CurrentYear)) { RetroactiveInput.IsChecked = true; } else { - SeasonInput.Text = $"{Utils.CurrentNextSeason}"; + SeasonInput.Text = $"{Utils.CurrentYear}"; } } @@ -48,7 +50,7 @@ namespace Elwig.Dialogs { DescBlock2.Visibility = Visibility.Hidden; } else { SeasonInput.IsEnabled = true; - SeasonInput.Text = $"{Utils.CurrentNextSeason}"; + SeasonInput.Text = $"{Utils.CurrentYear}"; DescBlock1.Visibility = QuestionBlock1.Visibility; DescBlock2.Visibility = QuestionBlock2.Visibility; } diff --git a/Elwig/Dialogs/AreaComTransferDialog.xaml b/Elwig/Dialogs/AreaComTransferDialog.xaml index fcec9d1..51f4f6e 100644 --- a/Elwig/Dialogs/AreaComTransferDialog.xaml +++ b/Elwig/Dialogs/AreaComTransferDialog.xaml @@ -8,7 +8,7 @@ ResizeMode="NoResize" ShowInTaskbar="False" Topmost="True" WindowStartupLocation="CenterOwner" DataContext="{Binding RelativeSource={RelativeSource Self}}" - Title="Flächenbindungen übertragen" Height="260" Width="450"> + Title="Flächenbindungen übertragen" Height="240" Width="450"> - + - - - + + @@ -177,91 +177,119 @@ - - + + - + - + -