Rename ContractWindow to AreaCommAdminWindow

This commit is contained in:
2023-03-21 22:10:44 +01:00
parent 8dc60984d6
commit 44ac6463f8
5 changed files with 382 additions and 52 deletions

View File

@ -0,0 +1,108 @@
<Window x:Class="Elwig.Windows.AreaCommAdminWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Elwig.Windows"
mc:Ignorable="d"
Title="Flächenbindugen - Elwig" Height="600" Width="850"
Loaded="Window_Loaded">
<Window.Resources>
<Style TargetType="Label">
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="Padding" Value="2,4,2,4"/>
<Setter Property="Height" Value="25"/>
</Style>
<Style TargetType="TextBox">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="Height" Value="25"/>
<Setter Property="TextWrapping" Value="NoWrap"/>
</Style>
<Style TargetType="ComboBox">
<Setter Property="IsEnabled" Value="False"/>
<Setter Property="Height" Value="25"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Top"/>
</Style>
<Style TargetType="Button">
<Setter Property="FontSize" Value="14"/>
<Setter Property="Padding" Value="9,3"/>
<Setter Property="Height" Value="27"/>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="19"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="370"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Menu Grid.ColumnSpan="3" BorderThickness="0,0,0,1" BorderBrush="LightGray" Background="White">
<MenuItem Header="Flächenbindugen"/>
</Menu>
<Grid Grid.RowSpan="4" Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="125"/>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="125"/>
</Grid.ColumnDefinitions>
<DataGrid x:Name="AreaCommitmentList" AutoGenerateColumns="False" HeadersVisibility="Column" IsReadOnly="True" GridLinesVisibility="None" SelectionMode="Single"
CanUserDeleteRows="False" CanUserResizeRows="False" CanUserAddRows="False" SelectionChanged="AreaCommitmentList_SelectionChanged" Grid.Column="0" Grid.Row="1"
Margin="10,10,10,47" FontSize="14" Grid.ColumnSpan="3">
<DataGrid.Columns>
<DataGridTextColumn Header="Gemeinde" Binding="{Binding Kg.Kg.Name}" Width="5*"/>
<DataGridTextColumn Header="Ried" Binding="{Binding Rd.Name}" Width="5*"/>
<DataGridTextColumn Header="Parzelle" Binding="{Binding GstNr}" Width="3*"/>
</DataGrid.Columns>
</DataGrid>
<Button x:Name="NewAreaCommitmentButton" Content="Neu" Click="NewAreaCommitmentButton_Click"
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,10,0,10" Width="110" Grid.Column="0"/>
<Button x:Name="EditAreaCommitmentButton" Content="Bearbeiten" Click="EditAreaCommitmentButton_Click" IsEnabled="False"
HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,10,0,10" Width="110" Grid.Column="1"/>
<Button x:Name="DeleteAreaCommitmentButton" Content="Löschen" Click="DeleteAreaCommitmentButton_Click" IsEnabled="False"
HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,10,10,10" Width="110" Grid.Column="2"/>
<Button x:Name="SaveButton" Content="Speichern" Click="SaveButton_Click" IsEnabled="False" Visibility="Hidden"
HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,10,0,10" Width="110" Grid.Column="0"/>
<Button x:Name="ResetButton" Content="Zurücksetzen" Click="ResetButton_Click" IsEnabled="False" Visibility="Hidden"
HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,10,0,10" Width="110" Grid.Column="1"/>
<Button x:Name="CancelButton" Content="Abbrechen" Click="CancelButton_Click" IsEnabled="False" Visibility="Hidden" IsCancel="True"
HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,10,10,10" Width="110" Grid.Column="2"/>
</Grid>
<GroupBox Header="Lage" Grid.Column="1" Grid.Row="1" Grid.RowSpan="2" Margin="5,5,5,5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Content="Gemeinde:" Margin="10,10,0,0" Grid.Column="0"/>
<ComboBox x:Name="KgInput" ItemTemplate="{StaticResource KgTemplate}" TextSearch.TextPath="Name"
Width="200" HorizontalAlignment="Left"
Margin="0,10,10,0" Grid.Column="1"/>
<Label Content="Ried:" Margin="10,40,0,0" Grid.Column="0"/>
<ComboBox x:Name="RdInput" ItemTemplate="{StaticResource KgTemplate}" TextSearch.TextPath="Name"
Width="200" HorizontalAlignment="Left"
Margin="0,40,0,0" Grid.Column="1"/>
<Label Content="Parzelle:" Margin="10,70,0,0" Grid.Column="0"/>
<TextBox x:Name="GstNr" Margin="0,70,0,0" Width="100" Grid.Column="1" TextAlignment="Right" HorizontalAlignment="Left"/>
</Grid>
</GroupBox>
</Grid>
</Window>

View File

@ -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<TextBox> TextBoxInputs = Array.Empty<TextBox>();
private IEnumerable<ComboBox> ComboBoxInputs = Array.Empty<ComboBox>();
private readonly Dictionary<Control, bool> Valid = new();
private readonly Dictionary<Control, object?> 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<AreaCommitment> 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();
}
}
}

View File

@ -1,21 +0,0 @@
<Window x:Class="Elwig.Windows.ContractListWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Elwig.Windows"
mc:Ignorable="d"
Title="Flächenbindungen" Height="450" Width="800">
<Grid>
<DataGrid x:Name="ContractList" AutoGenerateColumns="False" HeadersVisibility="Column" IsReadOnly="True" GridLinesVisibility="None" SelectionMode="Single"
CanUserDeleteRows="False" CanUserResizeRows="False" CanUserAddRows="False" SelectionChanged="ContractList_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn Header="Vnr." Binding="{Binding Vnr}" Width="50"/>
<DataGridTextColumn Header="MgNr." Binding="{Binding MgNr}" Width="50"/>
<DataGridTextColumn Header="From" Binding="{Binding YearFrom}" Width="50"/>
<DataGridTextColumn Header="To" Binding="{Binding YearTo}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>

View File

@ -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<Contract> 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();
}
}
}

View File

@ -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();
}