diff --git a/Elwig/Windows/AreaCommAdminWindow.xaml b/Elwig/Windows/AreaCommAdminWindow.xaml
new file mode 100644
index 0000000..a000682
--- /dev/null
+++ b/Elwig/Windows/AreaCommAdminWindow.xaml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Elwig/Windows/AreaCommAdminWindow.xaml.cs b/Elwig/Windows/AreaCommAdminWindow.xaml.cs
new file mode 100644
index 0000000..56a9b7a
--- /dev/null
+++ b/Elwig/Windows/AreaCommAdminWindow.xaml.cs
@@ -0,0 +1,273 @@
+using Microsoft.EntityFrameworkCore;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows;
+using System.Windows.Controls;
+using Elwig.Helpers;
+using Elwig.Models;
+using System.Runtime.CompilerServices;
+using System;
+
+namespace Elwig.Windows {
+ public partial class AreaCommAdminWindow : Window {
+ private readonly AppDbContext Context = new();
+ private readonly Member member;
+ private bool IsEditing = false;
+ private bool IsCreating = false;
+ private IEnumerable TextBoxInputs = Array.Empty();
+ private IEnumerable ComboBoxInputs = Array.Empty();
+ private readonly Dictionary Valid = new();
+ private readonly Dictionary OriginalValues = new();
+
+ public AreaCommAdminWindow(Member member) {
+ InitializeComponent();
+ this.member = member;
+ this.Title = $"Flächenbindungen von {member.FamilyName} {member.GivenName} - Elwig";
+ RefreshAreaCommitmentList();
+ }
+
+ private void Window_Loaded(object sender, RoutedEventArgs e) {
+ KgInput.ItemsSource = Context.WbKgs.Select(k => k.Kg).OrderBy(k => k.Name).ToList();
+ RdInput.ItemsSource = Context.WbRde.OrderBy(r => r.Name).ToList();
+ }
+
+ private void RefreshAreaCommitmentList() {
+ Context.AreaCommitments.Load();
+ List commitments = Context.AreaCommitments.Where(a => a.Contract.MgNr == member.MgNr).ToList();
+
+ AreaCommitmentList.ItemsSource = commitments;
+ if (commitments.Count == 1)
+ AreaCommitmentList.SelectedIndex = 0;
+ }
+
+ private void RefreshInputs(bool validate = false) {
+ ClearInputStates();
+ AreaCommitment a = (AreaCommitment)AreaCommitmentList.SelectedItem;
+ if (a != null) {
+ //EditMemberButton.IsEnabled = true;
+ //DeleteMemberButton.IsEnabled = true;
+ //AreaCommitmentButton.IsEnabled = true;
+ FillInputs(a);
+ } else {
+ //EditMemberButton.IsEnabled = false;
+ //DeleteMemberButton.IsEnabled = false;
+ //AreaCommitmentButton.IsEnabled = false;
+ ClearInputs();
+ }
+ //if (!validate) ClearInputStates();
+ GC.Collect();
+ }
+
+ private void FillInputs(AreaCommitment a) {
+ OriginalValues.Clear();
+
+ KgInput.SelectedItem = a.Kg.Kg;
+ RdInput.SelectedItem = a.Rd;
+ GstNr.Text = a.GstNr;
+
+ FillOriginalValues();
+ }
+
+ private void FillOriginalValues() {
+ foreach (var tb in TextBoxInputs)
+ OriginalValues[tb] = tb.Text;
+ foreach (var cb in ComboBoxInputs)
+ OriginalValues[cb] = cb.SelectedItem;
+ }
+
+ private void ClearInputStates() {
+ foreach (var tb in TextBoxInputs)
+ Utils.ClearInputState(tb);
+ foreach (var cb in ComboBoxInputs)
+ Utils.ClearInputState(cb);
+ }
+
+ private void ClearInputs() {
+ OriginalValues.Clear();
+ foreach (var tb in TextBoxInputs) {
+ tb.Text = " ";
+ tb.Text = "";
+ }
+ foreach (var cb in ComboBoxInputs) {
+ cb.SelectedItem = null;
+ if (cb.ItemsSource != null)
+ Utils.SetInputInvalid(cb);
+ }
+ }
+
+ private void NewAreaCommitmentButton_Click(object sender, RoutedEventArgs evt) {
+ IsCreating = true;
+ AreaCommitmentList.IsEnabled = false;
+ AreaCommitmentList.SelectedItem = null;
+ HideNewEditDeleteButtons();
+ ShowSaveResetCancelButtons();
+ UnlockInputs();
+ InitInputs();
+ }
+
+ private void EditAreaCommitmentButton_Click(object sender, RoutedEventArgs evt) {
+ if (AreaCommitmentList.SelectedItem == null)
+ return;
+
+ IsEditing = true;
+ AreaCommitmentList.IsEnabled = false;
+
+ HideNewEditDeleteButtons();
+ ShowSaveResetCancelButtons();
+ UnlockInputs();
+ }
+
+ private void DeleteAreaCommitmentButton_Click(object sender, RoutedEventArgs evt) {
+ AreaCommitment a = (AreaCommitment)AreaCommitmentList.SelectedItem;
+ if (a == null) return;
+
+ var r = MessageBox.Show(
+ $"Soll die Flächenbindung \"{a.Kg.Kg.Name}, {a.Rd.Name}\", (MgNr. {a.GstNr}) wirklich unwiderruflich gelöscht werden?",
+ "Mitglied löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
+ if (r == MessageBoxResult.Yes) {
+ Context.Remove(a);
+ Context.SaveChanges();
+ RefreshAreaCommitmentList();
+ }
+ }
+
+ private void SaveButton_Click(object sender, RoutedEventArgs evt) {
+ AreaCommitment? a = new();
+ if (IsEditing)
+ a = (AreaCommitment)AreaCommitmentList.SelectedItem;
+ else if (IsCreating)
+ a = new();
+
+ a.KgNr = ((AT_Kg)KgInput.SelectedItem).KgNr;
+ a.RdNr = ((WbRd)RdInput.SelectedItem).RdNr;
+ a.GstNr = GstNr.Text;
+
+ try {
+ if (IsEditing)
+ Context.Update(a);
+ else if (IsCreating)
+ Context.Add(a);
+ Context.SaveChanges();
+ } catch (Exception exc) {
+ var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
+ if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
+ MessageBox.Show(str, "Flächenbindung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
+
+ IsEditing = false;
+ IsCreating = false;
+ AreaCommitmentList.IsEnabled = true;
+ HideSaveResetCancelButtons();
+ ShowNewEditDeleteButtons();
+ LockInputs();
+ RefreshAreaCommitmentList();
+ }
+
+ private void ResetButton_Click(object sender, RoutedEventArgs evt) {
+ if (IsEditing) {
+ RefreshInputs();
+ } else if (IsCreating) {
+ InitInputs();
+ }
+ UpdateButtons();
+ }
+
+ private void CancelButton_Click(object sender, RoutedEventArgs evt) {
+ IsEditing = false;
+ IsCreating = false;
+ AreaCommitmentList.IsEnabled = true;
+ HideSaveResetCancelButtons();
+ ShowNewEditDeleteButtons();
+ RefreshInputs();
+ ClearInputStates();
+ LockInputs();
+ }
+
+ private void LockInputs() {
+ foreach (var tb in TextBoxInputs)
+ tb.IsReadOnly = true;
+ foreach (var cb in ComboBoxInputs)
+ cb.IsEnabled = false;
+ }
+
+ private void UnlockInputs() {
+ foreach (var tb in TextBoxInputs)
+ tb.IsReadOnly = false;
+ foreach (var cb in ComboBoxInputs)
+ cb.IsEnabled = true;
+ }
+
+ private void UpdateButtons() {
+ if (!IsEditing && !IsCreating) return;
+ bool ch = HasChanged(), v = IsValid();
+ ResetButton.IsEnabled = (ch);
+ SaveButton.IsEnabled = (v && ch);
+ }
+
+ private void InitInputs() {
+ FillOriginalValues();
+ }
+
+ private bool HasChanged() {
+ return !IsValid() ||
+ TextBoxInputs.Any(InputHasChanged) ||
+ ComboBoxInputs.Any(InputHasChanged);
+ }
+
+ private bool InputHasChanged(Control input) {
+ if (!OriginalValues.ContainsKey(input)) {
+ return false;
+ } else if (input is TextBox tb) {
+ return OriginalValues[tb]?.ToString() != tb.Text;
+ } else if (input is ComboBox sb) {
+ return OriginalValues[sb] != sb.SelectedItem;
+ } else {
+ return false;
+ }
+ }
+
+ private bool IsValid() {
+ return Valid.All(kv => kv.Value) && ComboBoxInputs.All(cb => cb.ItemsSource == null || cb.SelectedItem != null);
+ }
+
+ private void ShowSaveResetCancelButtons() {
+ SaveButton.IsEnabled = false;
+ ResetButton.IsEnabled = false;
+ CancelButton.IsEnabled = true;
+ SaveButton.Visibility = Visibility.Visible;
+ ResetButton.Visibility = Visibility.Visible;
+ CancelButton.Visibility = Visibility.Visible;
+ }
+
+ private void HideSaveResetCancelButtons() {
+ SaveButton.IsEnabled = false;
+ ResetButton.IsEnabled = false;
+ CancelButton.IsEnabled = false;
+ SaveButton.Visibility = Visibility.Hidden;
+ ResetButton.Visibility = Visibility.Hidden;
+ CancelButton.Visibility = Visibility.Hidden;
+ }
+
+ private void ShowNewEditDeleteButtons() {
+ NewAreaCommitmentButton.IsEnabled = true;
+ EditAreaCommitmentButton.IsEnabled = AreaCommitmentList.SelectedItem != null;
+ DeleteAreaCommitmentButton.IsEnabled = AreaCommitmentList.SelectedItem != null;
+ NewAreaCommitmentButton.Visibility = Visibility.Visible;
+ EditAreaCommitmentButton.Visibility = Visibility.Visible;
+ DeleteAreaCommitmentButton.Visibility = Visibility.Visible;
+ }
+
+ private void HideNewEditDeleteButtons() {
+ NewAreaCommitmentButton.IsEnabled = false;
+ EditAreaCommitmentButton.IsEnabled = false;
+ DeleteAreaCommitmentButton.IsEnabled = false;
+ NewAreaCommitmentButton.Visibility = Visibility.Hidden;
+ EditAreaCommitmentButton.Visibility = Visibility.Hidden;
+ DeleteAreaCommitmentButton.Visibility = Visibility.Hidden;
+ }
+
+ private void AreaCommitmentList_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
+ RefreshInputs();
+ }
+ }
+}
diff --git a/Elwig/Windows/ContractListWindow.xaml b/Elwig/Windows/ContractListWindow.xaml
deleted file mode 100644
index b6cfdd4..0000000
--- a/Elwig/Windows/ContractListWindow.xaml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Elwig/Windows/ContractListWindow.xaml.cs b/Elwig/Windows/ContractListWindow.xaml.cs
deleted file mode 100644
index 4c88f7d..0000000
--- a/Elwig/Windows/ContractListWindow.xaml.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using Microsoft.EntityFrameworkCore;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-using Elwig.Helpers;
-using Elwig.Models;
-
-namespace Elwig.Windows {
- public partial class ContractListWindow : Window {
- private readonly AppDbContext Context = new();
-
- public ContractListWindow(Member member) {
- InitializeComponent();
- }
-
- private void RefreshContractList() {
- Context.Members.Load();
- List contracts = Context.Contracts.OrderBy(c => c.MgNr).ToList();
-
- ContractList.ItemsSource = contracts;
- if (contracts.Count == 1)
- ContractList.SelectedIndex = 0;
- }
-
- private void ContractList_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
- RefreshContractList();
- }
- }
-}
diff --git a/Elwig/Windows/MemberAdminWindow.xaml.cs b/Elwig/Windows/MemberAdminWindow.xaml.cs
index 510bc40..05229bb 100644
--- a/Elwig/Windows/MemberAdminWindow.xaml.cs
+++ b/Elwig/Windows/MemberAdminWindow.xaml.cs
@@ -214,7 +214,7 @@ namespace Elwig.Windows {
}
private void AreaCommitmentButton_Click(object sender, RoutedEventArgs evt) {
- var w = new AreaCommitmentWindow((Member)MemberList.SelectedItem);
+ var w = new AreaCommAdminWindow((Member)MemberList.SelectedItem);
w.Show();
}