[#41] MemberAdminWindow: Add feature to transfer area commitments from predecessor
This commit is contained in:
@ -30,6 +30,7 @@ namespace Elwig.Helpers {
|
|||||||
public static int CurrentYear => DateTime.Now.Year;
|
public static int CurrentYear => DateTime.Now.Year;
|
||||||
public static int CurrentNextSeason => DateTime.Now.Year - (DateTime.Now.Month <= 3 ? 1 : 0);
|
public static int CurrentNextSeason => DateTime.Now.Year - (DateTime.Now.Month <= 3 ? 1 : 0);
|
||||||
public static int CurrentLastSeason => DateTime.Now.Year - (DateTime.Now.Month <= 7 ? 1 : 0);
|
public static int CurrentLastSeason => DateTime.Now.Year - (DateTime.Now.Month <= 7 ? 1 : 0);
|
||||||
|
public static int FollowingSeason => DateTime.Now.Year + (DateTime.Now.Month >= 11 ? 1 : 0);
|
||||||
public static DateTime Today => (DateTime.Now.Hour >= 3) ? DateTime.Today : DateTime.Today.AddDays(-1);
|
public static DateTime Today => (DateTime.Now.Hour >= 3) ? DateTime.Today : DateTime.Today.AddDays(-1);
|
||||||
|
|
||||||
[GeneratedRegex("^serial://([A-Za-z0-9]+):([0-9]+)(,([5-9]),([NOEMSnoems]),(0|1|1\\.5|2|))?$", RegexOptions.Compiled)]
|
[GeneratedRegex("^serial://([A-Za-z0-9]+):([0-9]+)(,([5-9]),([NOEMSnoems]),(0|1|1\\.5|2|))?$", RegexOptions.Compiled)]
|
||||||
|
@ -15,7 +15,9 @@ using System.Diagnostics;
|
|||||||
namespace Elwig.Windows {
|
namespace Elwig.Windows {
|
||||||
public partial class MemberAdminWindow : AdministrationWindow {
|
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 (ComboBox Type, TextBox Number, TextBox Comment)[] PhoneNrInputs;
|
||||||
private readonly (Label Label, TextBox Address)[] EmailAddressInputs;
|
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 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 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() {
|
public MemberAdminWindow() {
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@ -338,6 +340,7 @@ namespace Elwig.Windows {
|
|||||||
IsCreating = true;
|
IsCreating = true;
|
||||||
MemberList.IsEnabled = false;
|
MemberList.IsEnabled = false;
|
||||||
MemberList.SelectedItem = null;
|
MemberList.SelectedItem = null;
|
||||||
|
TransferPredecessorAreaComs = false;
|
||||||
HideNewEditDeleteButtons();
|
HideNewEditDeleteButtons();
|
||||||
ShowSaveResetCancelButtons();
|
ShowSaveResetCancelButtons();
|
||||||
UnlockInputs();
|
UnlockInputs();
|
||||||
@ -352,6 +355,7 @@ namespace Elwig.Windows {
|
|||||||
|
|
||||||
IsEditing = true;
|
IsEditing = true;
|
||||||
MemberList.IsEnabled = false;
|
MemberList.IsEnabled = false;
|
||||||
|
TransferPredecessorAreaComs = false;
|
||||||
|
|
||||||
HideNewEditDeleteButtons();
|
HideNewEditDeleteButtons();
|
||||||
ShowSaveResetCancelButtons();
|
ShowSaveResetCancelButtons();
|
||||||
@ -402,6 +406,7 @@ namespace Elwig.Windows {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void ResetButton_Click(object sender, RoutedEventArgs evt) {
|
private void ResetButton_Click(object sender, RoutedEventArgs evt) {
|
||||||
|
TransferPredecessorAreaComs = false;
|
||||||
if (IsEditing) {
|
if (IsEditing) {
|
||||||
RefreshInputs();
|
RefreshInputs();
|
||||||
} else if (IsCreating) {
|
} else if (IsCreating) {
|
||||||
@ -415,6 +420,7 @@ namespace Elwig.Windows {
|
|||||||
IsEditing = false;
|
IsEditing = false;
|
||||||
IsCreating = false;
|
IsCreating = false;
|
||||||
MemberList.IsEnabled = true;
|
MemberList.IsEnabled = true;
|
||||||
|
TransferPredecessorAreaComs = false;
|
||||||
HideSaveResetCancelButtons();
|
HideSaveResetCancelButtons();
|
||||||
ShowNewEditDeleteButtons();
|
ShowNewEditDeleteButtons();
|
||||||
RefreshInputs();
|
RefreshInputs();
|
||||||
@ -651,6 +657,33 @@ namespace Elwig.Windows {
|
|||||||
|
|
||||||
await ctx.SaveChangesAsync();
|
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) {
|
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}");
|
||||||
}
|
}
|
||||||
@ -804,8 +837,26 @@ namespace Elwig.Windows {
|
|||||||
InputTextChanged((TextBox)sender, Validator.CheckPredecessorMgNr);
|
InputTextChanged((TextBox)sender, Validator.CheckPredecessorMgNr);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PredecessorMgNrInput_LostFocus(object sender, RoutedEventArgs evt) {
|
private async void PredecessorMgNrInput_LostFocus(object sender, RoutedEventArgs evt) {
|
||||||
InputLostFocus((TextBox)sender, Validator.CheckPredecessorMgNr);
|
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) {
|
private new void EmailAddressInput_TextChanged(object sender, TextChangedEventArgs evt) {
|
||||||
|
Reference in New Issue
Block a user