From bec1b165bf9090662f15d11a0ec8f3adb2235906 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@necronda.net>
Date: Sat, 24 Aug 2024 13:35:14 +0200
Subject: [PATCH] MemberAdminWindow: Allow user to keep AreaCom YearTo when
 transfering

---
 Elwig/Dialogs/AreaComDialog.xaml         | 10 +++++++---
 Elwig/Dialogs/AreaComDialog.xaml.cs      | 10 +++++++++-
 Elwig/Services/MemberService.cs          |  2 +-
 Elwig/ViewModels/MemberAdminViewModel.cs |  1 +
 Elwig/Windows/MemberAdminWindow.xaml.cs  |  1 +
 5 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/Elwig/Dialogs/AreaComDialog.xaml b/Elwig/Dialogs/AreaComDialog.xaml
index 4cc61a2..a0a9a06 100644
--- a/Elwig/Dialogs/AreaComDialog.xaml
+++ b/Elwig/Dialogs/AreaComDialog.xaml
@@ -8,7 +8,7 @@
         ResizeMode="NoResize" ShowInTaskbar="False" Topmost="True"
         WindowStartupLocation="CenterOwner"
         DataContext="{Binding RelativeSource={RelativeSource Self}}"
-        Title="Flächenbindungen übertragen" Height="230" Width="450">
+        Title="Flächenbindungen übertragen" Height="260" Width="450">
     <Window.Resources>
         <Style TargetType="Label">
             <Setter Property="HorizontalAlignment" Value="Left"/>
@@ -48,11 +48,15 @@
                             Minimum="1900" Maximum="9999"
                             HorizontalAlignment="Center" VerticalAlignment="Top"
                             TextChanged="SeasonInput_TextChanged"/>
+        <CheckBox x:Name="CopyYearToInput" Content="Beginn der Laufzeit von Vorgänger übernehmen" Margin="0,80,0,0"
+                  HorizontalAlignment="Center" VerticalAlignment="Top"
+                  Checked="CopyYearToInput_Changed" Unchecked="CopyYearToInput_Changed"
+                  IsChecked="{Binding MaintainYearTo}"/>
 
-        <TextBlock x:Name="DescBlock1" Margin="0,85,0,0" TextAlignment="Center"
+        <TextBlock x:Name="DescBlock1" Margin="0,105,0,0" TextAlignment="Center"
                    HorizontalAlignment="Center" VerticalAlignment="Top">
             Die Flächenbindungen beim <Bold>Vorgänger</Bold> sind bis inkl. Saison <Bold><Run x:Name="CancelSeason1"/></Bold> gültig,<LineBreak/>
-            und werden beim <Bold>Nachfolger</Bold> ab inkl. Saison <Bold><Run x:Name="TransferSeason"/></Bold> übernommen.
+            und werden beim <Bold>Nachfolger</Bold> ab <Run x:Name="DescBlock1Season" Text="inkl. Saison "/><Bold><Run x:Name="TransferSeason"/></Bold> übernommen.
         </TextBlock>
         <TextBlock x:Name="DescBlock2" Margin="0,70,0,0" TextAlignment="Center" Visibility="Hidden"
                    HorizontalAlignment="Center" VerticalAlignment="Top">
diff --git a/Elwig/Dialogs/AreaComDialog.xaml.cs b/Elwig/Dialogs/AreaComDialog.xaml.cs
index 2a54553..8a014d4 100644
--- a/Elwig/Dialogs/AreaComDialog.xaml.cs
+++ b/Elwig/Dialogs/AreaComDialog.xaml.cs
@@ -7,6 +7,7 @@ namespace Elwig.Dialogs {
 
         public int CancelSeason { get; set; }
         public int SuccessorSeason => CancelSeason + 1;
+        public bool MaintainYearTo { get; set; }
 
         public string AreaComNum { get; set; }
         public string Area { get; set; }
@@ -22,6 +23,7 @@ namespace Elwig.Dialogs {
             QuestionBlock2.Visibility = Visibility.Visible;
             DescBlock1.Visibility = Visibility.Hidden;
             DescBlock2.Visibility = Visibility.Visible;
+            CopyYearToInput.Visibility = Visibility.Hidden;
             Height = 240;
             SeasonInput.Margin = new(0, 40, 0, 0);
             SeasonLabel.Margin = new(0, 40, 100, 0);
@@ -41,7 +43,13 @@ namespace Elwig.Dialogs {
             CancelSeason = (int)SeasonInput.Value!;
             CancelSeason1.Text = $"{CancelSeason}";
             CancelSeason2.Text = $"{CancelSeason}";
-            TransferSeason.Text = $"{SuccessorSeason}";
+            TransferSeason.Text = MaintainYearTo ? "" : $"{SuccessorSeason}";
+            DescBlock1Season.Text = MaintainYearTo ? "dem originalen Beginn der FB" : "inkl. Saison ";
+        }
+
+        private void CopyYearToInput_Changed(object sender, RoutedEventArgs evt) {
+            TransferSeason.Text = MaintainYearTo ? "" : $"{SuccessorSeason}";
+            DescBlock1Season.Text = MaintainYearTo ? "dem originalen Beginn der FB" : "inkl. Saison ";
         }
 
         private void ConfirmButton_Click(object sender, RoutedEventArgs evt) {
diff --git a/Elwig/Services/MemberService.cs b/Elwig/Services/MemberService.cs
index f59d452..719fe6c 100644
--- a/Elwig/Services/MemberService.cs
+++ b/Elwig/Services/MemberService.cs
@@ -597,7 +597,7 @@ namespace Elwig.Services {
                     KgNr = c.KgNr,
                     GstNr = c.GstNr,
                     RdNr = c.RdNr,
-                    YearFrom = year,
+                    YearFrom = vm.MaintainAreaComYearTo ? c.YearFrom : year,
                     YearTo = c.YearTo,
                 }));
 
diff --git a/Elwig/ViewModels/MemberAdminViewModel.cs b/Elwig/ViewModels/MemberAdminViewModel.cs
index 0380b51..3423c0c 100644
--- a/Elwig/ViewModels/MemberAdminViewModel.cs
+++ b/Elwig/ViewModels/MemberAdminViewModel.cs
@@ -11,6 +11,7 @@ namespace Elwig.ViewModels {
     public partial class MemberAdminViewModel : ObservableObject {
 
         public int? TransferPredecessorAreaComs = null;
+        public bool MaintainAreaComYearTo = false;
         public int? CancelAreaComs = null;
 
         public ObservableCollection<KeyValuePair<string, string>> PhoneNrTypes { get; set; } = new(Utils.PhoneNrTypes);
diff --git a/Elwig/Windows/MemberAdminWindow.xaml.cs b/Elwig/Windows/MemberAdminWindow.xaml.cs
index 85285f7..b7ea298 100644
--- a/Elwig/Windows/MemberAdminWindow.xaml.cs
+++ b/Elwig/Windows/MemberAdminWindow.xaml.cs
@@ -747,6 +747,7 @@ namespace Elwig.Windows {
                 if (d.ShowDialog() != true)
                     return;
                 ViewModel.TransferPredecessorAreaComs = d.SuccessorSeason;
+                ViewModel.MaintainAreaComYearTo = d.MaintainYearTo;
                 if (IsEditing)
                     SetOriginalValue(PredecessorMgNrInput, -1);  // hack to allow user to save
                 UpdateButtons();