diff --git a/Elwig/Windows/MemberAdminWindow.xaml b/Elwig/Windows/MemberAdminWindow.xaml index 40facf2..6f88854 100644 --- a/Elwig/Windows/MemberAdminWindow.xaml +++ b/Elwig/Windows/MemberAdminWindow.xaml @@ -410,7 +410,7 @@ TextChanged="TextBox_TextChanged"/> <CheckBox x:Name="ActiveInput" Content="Aktiv" IsEnabled="False" - Checked="CheckBox_Changed" Unchecked="CheckBox_Changed" + Checked="ActiveInput_Changed" Unchecked="ActiveInput_Changed" Grid.Column="2" HorizontalAlignment="Left" Margin="10,15,0,0" VerticalAlignment="Top" IsChecked="False"/> <CheckBox x:Name="VollLieferantInput" Content="Volllieferant" IsEnabled="False" diff --git a/Elwig/Windows/MemberAdminWindow.xaml.cs b/Elwig/Windows/MemberAdminWindow.xaml.cs index 07f0012..84db95d 100644 --- a/Elwig/Windows/MemberAdminWindow.xaml.cs +++ b/Elwig/Windows/MemberAdminWindow.xaml.cs @@ -16,6 +16,7 @@ namespace Elwig.Windows { public partial class MemberAdminWindow : AdministrationWindow { protected bool TransferPredecessorAreaComs = false; + protected bool CancelAreaComs = false; protected List<string> TextFilter = []; private readonly (ComboBox Type, TextBox Number, TextBox Comment)[] PhoneNrInputs; @@ -341,6 +342,7 @@ namespace Elwig.Windows { MemberList.IsEnabled = false; MemberList.SelectedItem = null; TransferPredecessorAreaComs = false; + CancelAreaComs = false; HideNewEditDeleteButtons(); ShowSaveResetCancelButtons(); UnlockInputs(); @@ -356,6 +358,7 @@ namespace Elwig.Windows { IsEditing = true; MemberList.IsEnabled = false; TransferPredecessorAreaComs = false; + CancelAreaComs = false; HideNewEditDeleteButtons(); ShowSaveResetCancelButtons(); @@ -407,6 +410,7 @@ namespace Elwig.Windows { private void ResetButton_Click(object sender, RoutedEventArgs evt) { TransferPredecessorAreaComs = false; + CancelAreaComs = false; if (IsEditing) { RefreshInputs(); } else if (IsCreating) { @@ -421,6 +425,7 @@ namespace Elwig.Windows { IsCreating = false; MemberList.IsEnabled = true; TransferPredecessorAreaComs = false; + CancelAreaComs = false; HideSaveResetCancelButtons(); ShowNewEditDeleteButtons(); RefreshInputs(); @@ -684,6 +689,19 @@ namespace Elwig.Windows { } TransferPredecessorAreaComs = false; + if (CancelAreaComs) { + var year = Utils.FollowingSeason; + var areaComs = await ctx.AreaCommitments + .Where(c => c.MgNr == m.MgNr && (c.YearTo == null || c.YearTo >= year)) + .ToListAsync(); + + foreach (var ac in areaComs) + ac.YearTo = year - 1; + ctx.UpdateRange(areaComs); + await ctx.SaveChangesAsync(); + } + CancelAreaComs = false; + if (newMgNr != m.MgNr) { await ctx.Database.ExecuteSqlAsync($"UPDATE member SET mgnr = {newMgNr} WHERE mgnr = {oldMgNr}"); } @@ -844,12 +862,14 @@ namespace Elwig.Windows { if (MemberList.SelectedItem is Member m && m.MgNr == mgnr) return; using var ctx = new AppDbContext(); - var areaComs = await ctx.AreaCommitments.Where(c => c.MgNr == mgnr && c.YearTo == null).ToListAsync(); + var areaComs = await ctx.AreaCommitments + .Where(c => c.MgNr == mgnr && (c.YearTo == null || c.YearTo >= Utils.FollowingSeason)) + .ToListAsync(); if (areaComs.Count == 0) return; var res = MessageBox.Show("Sollen die aktiven Flächenbindungen des angegebenen\n" + $"Vorgängers übernommen werden? ({areaComs.Sum(c => c.Area)} m²)\n\n" + - "Die Flächenbindungen werden erst\nnach dem Speichern übernommen!", + "Die Änderungen werden erst beim Speichern übernommen!", "Aktive Flächenbindungen übernehmen", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No); if (res != MessageBoxResult.Yes) return; @@ -893,5 +913,23 @@ namespace Elwig.Windows { if (MemberList.SelectedItem is not Member m || m.PredecessorMgNr == null) return; FocusMember((int)m.PredecessorMgNr); } + + private async void ActiveInput_Changed(object sender, RoutedEventArgs evt) { + if ((IsEditing || IsCreating) && ActiveInput.IsChecked == false && int.TryParse(MgNrInput.Text, out var mgnr)) { + using var ctx = new AppDbContext(); + var areaComs = await ctx.AreaCommitments + .Where(c => c.MgNr == mgnr && (c.YearTo == null || c.YearTo >= Utils.FollowingSeason)) + .ToListAsync(); + if (areaComs.Count >= 0) { + var res = MessageBox.Show($"Sollen die aktiven Flächenbindungen gekündigt werden? ({areaComs.Sum(c => c.Area)} m²)\n" + + "Falls die Flächenbindungen später an ein neues Mitglied\n" + + "übertragen werden sollen bitte \"Nein\" auswählen!\n\n" + + "Die Änderungen werden erst beim Speichern übernommen!", + "Flächenbindungen kündigen", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No); + CancelAreaComs = res == MessageBoxResult.Yes; + } + } + CheckBox_Changed(sender, evt); + } } }