[#41] MemberAdminWindow: Add feature to transfer area commitments from predecessor

This commit is contained in:
2024-03-19 18:27:19 +01:00
parent a9bad4dd3f
commit 1b822a88f3
2 changed files with 56 additions and 4 deletions

View File

@ -15,7 +15,9 @@ using System.Diagnostics;
namespace Elwig.Windows {
public partial class MemberAdminWindow : AdministrationWindow {
private List<string> TextFilter = [];
protected bool TransferPredecessorAreaComs = false;
protected List<string> TextFilter = [];
private readonly (ComboBox Type, TextBox Number, TextBox Comment)[] PhoneNrInputs;
private readonly (Label Label, TextBox Address)[] EmailAddressInputs;
@ -23,7 +25,7 @@ namespace Elwig.Windows {
private readonly RoutedCommand CtrlP = new("CtrlP", typeof(MemberAdminWindow), [new KeyGesture(Key.P, ModifierKeys.Control)]);
private readonly RoutedCommand CtrlShiftP = new("CtrlShiftP", typeof(MemberAdminWindow), [new KeyGesture(Key.P, ModifierKeys.Control | ModifierKeys.Shift)]);
private static ObservableCollection<KeyValuePair<string, string>> PhoneNrTypes { get; set; } = new(Utils.PhoneNrTypes);
protected static ObservableCollection<KeyValuePair<string, string>> PhoneNrTypes { get; set; } = new(Utils.PhoneNrTypes);
public MemberAdminWindow() {
InitializeComponent();
@ -338,6 +340,7 @@ namespace Elwig.Windows {
IsCreating = true;
MemberList.IsEnabled = false;
MemberList.SelectedItem = null;
TransferPredecessorAreaComs = false;
HideNewEditDeleteButtons();
ShowSaveResetCancelButtons();
UnlockInputs();
@ -352,6 +355,7 @@ namespace Elwig.Windows {
IsEditing = true;
MemberList.IsEnabled = false;
TransferPredecessorAreaComs = false;
HideNewEditDeleteButtons();
ShowSaveResetCancelButtons();
@ -402,6 +406,7 @@ namespace Elwig.Windows {
}
private void ResetButton_Click(object sender, RoutedEventArgs evt) {
TransferPredecessorAreaComs = false;
if (IsEditing) {
RefreshInputs();
} else if (IsCreating) {
@ -415,6 +420,7 @@ namespace Elwig.Windows {
IsEditing = false;
IsCreating = false;
MemberList.IsEnabled = true;
TransferPredecessorAreaComs = false;
HideSaveResetCancelButtons();
ShowNewEditDeleteButtons();
RefreshInputs();
@ -651,6 +657,33 @@ namespace Elwig.Windows {
await ctx.SaveChangesAsync();
if (TransferPredecessorAreaComs && m.PredecessorMgNr is int predecessor) {
var year = Utils.FollowingSeason;
var areaComs = await ctx.AreaCommitments
.Where(c => c.MgNr == predecessor && (c.YearTo == null || c.YearTo >= year))
.ToListAsync();
var fbNr = await ctx.NextFbNr();
ctx.AddRange(areaComs.Select((c, i) => new AreaCom {
FbNr = fbNr + i,
MgNr = m.MgNr,
VtrgId = c.VtrgId,
CultId = c.CultId,
Area = c.Area,
KgNr = c.KgNr,
GstNr = c.GstNr,
RdNr = c.RdNr,
YearFrom = year,
YearTo = c.YearTo,
}));
foreach (var ac in areaComs)
ac.YearTo = year - 1;
ctx.UpdateRange(areaComs);
await ctx.SaveChangesAsync();
}
TransferPredecessorAreaComs = false;
if (newMgNr != m.MgNr) {
await ctx.Database.ExecuteSqlAsync($"UPDATE member SET mgnr = {newMgNr} WHERE mgnr = {oldMgNr}");
}
@ -804,8 +837,26 @@ namespace Elwig.Windows {
InputTextChanged((TextBox)sender, Validator.CheckPredecessorMgNr);
}
private void PredecessorMgNrInput_LostFocus(object sender, RoutedEventArgs evt) {
InputLostFocus((TextBox)sender, Validator.CheckPredecessorMgNr);
private async void PredecessorMgNrInput_LostFocus(object sender, RoutedEventArgs evt) {
var valid = InputLostFocus((TextBox)sender, Validator.CheckPredecessorMgNr);
if (valid && PredecessorMgNrInput.Text != "" && (IsEditing || IsCreating)) {
var mgnr = int.Parse(PredecessorMgNrInput.Text);
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();
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!",
"Aktive Flächenbindungen übernehmen", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
if (res != MessageBoxResult.Yes)
return;
TransferPredecessorAreaComs = true;
SetOriginalValue(PredecessorMgNrInput, -1); // hack to allow user to save
UpdateButtons();
}
}
private new void EmailAddressInput_TextChanged(object sender, TextChangedEventArgs evt) {