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 : AdministrationWindow { private readonly Member member; private bool IsEditing = false; private bool IsCreating = false; public AreaCommAdminWindow(Member member) { InitializeComponent(); this.member = member; Title = $"Flächenbindungen - {member.FamilyName} {member.GivenName} - Elwig"; RefreshContractList(); } 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(); SortInput.ItemsSource = Context.WineVarieties.OrderBy(s => s.Name).ToList(); AttrInput.ItemsSource = Context.WineAttributes.OrderBy(a => a.Name).ToList(); CultInput.ItemsSource = Context.WineCultivations.OrderBy(c => c.Name).ToList(); } private void RefreshAreaCommitmentList() { Contract? contract = (Contract)ContractList.SelectedItem; if (contract == null) { AreaCommitmentList.ItemsSource = null; return; } Context.AreaCommitments.Load(); List commitments = Context.AreaCommitments.Where(a => a.VNr == contract.VNr).ToList(); AreaCommitmentList.ItemsSource = commitments; if (commitments.Count == 1) AreaCommitmentList.SelectedIndex = 0; } private void RefreshContractList() { Context.Contracts.Load(); List contracts = Context.Contracts.Where(c => c.MgNr == member.MgNr).ToList(); ContractList.ItemsSource = contracts; if (contracts.Count == 1) ContractList.SelectedIndex = 0; RefreshAreaCommitmentList(); } 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) { ClearOriginalValues(); VNr.Text = a.VNr.ToString(); MgNr.Text = a.Contract.MgNr.ToString(); YearFrom.Text = a.Contract.YearFrom.ToString(); YearTo.Text = a.Contract.YearTo.ToString(); KgInput.SelectedItem = a.Kg.Kg; RdInput.SelectedItem = a.Rd; GstNr.Text = a.GstNr; Area.Text = a.Area.ToString() + "m²"; SortInput.SelectedItem = a.WineVar; AttrInput.SelectedItem = a.WineAttr; CultInput.SelectedItem = a.WineCult; FillOriginalValues(); } 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?", "Flächenbindung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No); if (r == MessageBoxResult.Yes) { Context.Remove(a); Context.SaveChanges(); RefreshAreaCommitmentList(); } } private void NewContractButton_Click(object sender, RoutedEventArgs evt) { IsCreating = true; AreaCommitmentList.IsEnabled = false; AreaCommitmentList.SelectedItem = null; HideNewEditDeleteButtons(); ShowSaveResetCancelButtons(); UnlockInputs(); InitInputs(); } private void DeleteContractButton_Click(object sender, RoutedEventArgs evt) { Contract c = (Contract)ContractList.SelectedItem; if (c == null) return; var r = MessageBox.Show( $"Soll der Vertrag \"{c.VNr} und alle enthaltenen Flächenbindungen wirklich unwiderruflich gelöscht werden?", "Vertrag löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No); if (r == MessageBoxResult.Yes) { Context.Remove(c); Context.SaveChanges(); RefreshAreaCommitmentList(); } } private void AreaCommitmentSaveButton_Click(object sender, RoutedEventArgs evt) { AreaCommitment? a = new(); if (IsEditing) a = (AreaCommitment)AreaCommitmentList.SelectedItem; else if (IsCreating) a = new(); //TODO 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 AreaCommitmentResetButton_Click(object sender, RoutedEventArgs evt) { if (IsEditing) { RefreshInputs(); } else if (IsCreating) { InitInputs(); } UpdateButtons(); } private void AreaCommitmentCancelButton_Click(object sender, RoutedEventArgs evt) { IsEditing = false; IsCreating = false; AreaCommitmentList.IsEnabled = true; HideSaveResetCancelButtons(); ShowNewEditDeleteButtons(); RefreshInputs(); ClearInputStates(); LockInputs(); } private void ContractSaveButton_Click(object sender, RoutedEventArgs evt) { //TODO } private void ContractCancelButton_Click(object sender, RoutedEventArgs evt) { IsEditing = false; IsCreating = false; ContractList.IsEnabled = true; HideSaveResetCancelButtons(); ShowNewEditDeleteButtons(); RefreshInputs(); ClearInputStates(); LockInputs(); } override protected void UpdateButtons() { if (!IsEditing && !IsCreating) return; bool ch = HasChanged(), v = IsValid(); AreaCommitmentResetButton.IsEnabled = (ch); AreaCommitmentSaveButton.IsEnabled = (v && ch); } private void InitInputs() { FillOriginalValues(); } private void ShowSaveResetCancelButtons() { AreaCommitmentSaveButton.IsEnabled = false; AreaCommitmentResetButton.IsEnabled = false; AreaCommitmentCancelButton.IsEnabled = true; AreaCommitmentSaveButton.Visibility = Visibility.Visible; AreaCommitmentResetButton.Visibility = Visibility.Visible; AreaCommitmentCancelButton.Visibility = Visibility.Visible; } private void HideSaveResetCancelButtons() { AreaCommitmentSaveButton.IsEnabled = false; AreaCommitmentResetButton.IsEnabled = false; AreaCommitmentCancelButton.IsEnabled = false; AreaCommitmentSaveButton.Visibility = Visibility.Hidden; AreaCommitmentResetButton.Visibility = Visibility.Hidden; AreaCommitmentCancelButton.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 ContractList_SelectionChanged(object sender, SelectionChangedEventArgs evt) { RefreshAreaCommitmentList(); } private void AreaCommitmentList_SelectionChanged(object sender, SelectionChangedEventArgs evt) { RefreshInputs(); } } }