[#41] MemberAdminWindow: Add feature to cancel area commitments on member non-active

This commit is contained in:
2024-03-19 18:52:57 +01:00
parent 1b822a88f3
commit 545033daf5
2 changed files with 41 additions and 3 deletions

View File

@ -410,7 +410,7 @@
TextChanged="TextBox_TextChanged"/> TextChanged="TextBox_TextChanged"/>
<CheckBox x:Name="ActiveInput" Content="Aktiv" IsEnabled="False" <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"/> Grid.Column="2" HorizontalAlignment="Left" Margin="10,15,0,0" VerticalAlignment="Top" IsChecked="False"/>
<CheckBox x:Name="VollLieferantInput" Content="Volllieferant" IsEnabled="False" <CheckBox x:Name="VollLieferantInput" Content="Volllieferant" IsEnabled="False"

View File

@ -16,6 +16,7 @@ namespace Elwig.Windows {
public partial class MemberAdminWindow : AdministrationWindow { public partial class MemberAdminWindow : AdministrationWindow {
protected bool TransferPredecessorAreaComs = false; protected bool TransferPredecessorAreaComs = false;
protected bool CancelAreaComs = false;
protected List<string> TextFilter = []; protected List<string> TextFilter = [];
private readonly (ComboBox Type, TextBox Number, TextBox Comment)[] PhoneNrInputs; private readonly (ComboBox Type, TextBox Number, TextBox Comment)[] PhoneNrInputs;
@ -341,6 +342,7 @@ namespace Elwig.Windows {
MemberList.IsEnabled = false; MemberList.IsEnabled = false;
MemberList.SelectedItem = null; MemberList.SelectedItem = null;
TransferPredecessorAreaComs = false; TransferPredecessorAreaComs = false;
CancelAreaComs = false;
HideNewEditDeleteButtons(); HideNewEditDeleteButtons();
ShowSaveResetCancelButtons(); ShowSaveResetCancelButtons();
UnlockInputs(); UnlockInputs();
@ -356,6 +358,7 @@ namespace Elwig.Windows {
IsEditing = true; IsEditing = true;
MemberList.IsEnabled = false; MemberList.IsEnabled = false;
TransferPredecessorAreaComs = false; TransferPredecessorAreaComs = false;
CancelAreaComs = false;
HideNewEditDeleteButtons(); HideNewEditDeleteButtons();
ShowSaveResetCancelButtons(); ShowSaveResetCancelButtons();
@ -407,6 +410,7 @@ namespace Elwig.Windows {
private void ResetButton_Click(object sender, RoutedEventArgs evt) { private void ResetButton_Click(object sender, RoutedEventArgs evt) {
TransferPredecessorAreaComs = false; TransferPredecessorAreaComs = false;
CancelAreaComs = false;
if (IsEditing) { if (IsEditing) {
RefreshInputs(); RefreshInputs();
} else if (IsCreating) { } else if (IsCreating) {
@ -421,6 +425,7 @@ namespace Elwig.Windows {
IsCreating = false; IsCreating = false;
MemberList.IsEnabled = true; MemberList.IsEnabled = true;
TransferPredecessorAreaComs = false; TransferPredecessorAreaComs = false;
CancelAreaComs = false;
HideSaveResetCancelButtons(); HideSaveResetCancelButtons();
ShowNewEditDeleteButtons(); ShowNewEditDeleteButtons();
RefreshInputs(); RefreshInputs();
@ -684,6 +689,19 @@ namespace Elwig.Windows {
} }
TransferPredecessorAreaComs = false; 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) { if (newMgNr != m.MgNr) {
await ctx.Database.ExecuteSqlAsync($"UPDATE member SET mgnr = {newMgNr} WHERE mgnr = {oldMgNr}"); 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) if (MemberList.SelectedItem is Member m && m.MgNr == mgnr)
return; return;
using var ctx = new AppDbContext(); 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) if (areaComs.Count == 0)
return; return;
var res = MessageBox.Show("Sollen die aktiven Flächenbindungen des angegebenen\n" + var res = MessageBox.Show("Sollen die aktiven Flächenbindungen des angegebenen\n" +
$"Vorgängers übernommen werden? ({areaComs.Sum(c => c.Area)} m²)\n\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); "Aktive Flächenbindungen übernehmen", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
if (res != MessageBoxResult.Yes) if (res != MessageBoxResult.Yes)
return; return;
@ -893,5 +913,23 @@ namespace Elwig.Windows {
if (MemberList.SelectedItem is not Member m || m.PredecessorMgNr == null) return; if (MemberList.SelectedItem is not Member m || m.PredecessorMgNr == null) return;
FocusMember((int)m.PredecessorMgNr); 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);
}
} }
} }