Files
elwig/Elwig/Windows/BaseDataWindow.xaml.cs
2024-01-19 00:22:49 +01:00

336 lines
17 KiB
C#

using Elwig.Helpers;
using Elwig.Models.Entities;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
namespace Elwig.Windows {
public partial class BaseDataWindow : AdministrationWindow {
public BaseDataWindow() {
InitializeComponent();
RequiredInputs = new Control[] {
ClientNameInput, ClientNameTypeInput, ClientNameTokenInput, ClientNameShortInput,
ClientAddressInput, ClientPlzInput, ClientOrtInput,
};
ExemptInputs = new Control[] {
ClientNameFull,
BranchIdInput, BranchNameInput, BranchPlzInput, BranchOrtInput,
BranchAddressInput, BranchPhoneNrInput, BranchFaxNrInput, BranchMobileNrInput,
WineAttributeIdInput, WineAttributeNameInput, WineAttributeActiveInput,
WineAttributeMaxKgPerHaInput.TextBox, WineAttributeStrictInput, WineAttributeFillLowerInput,
WineCultivationIdInput, WineCultivationNameInput, WineCultivationDescriptionInput,
AreaCommitmentTypeIdInput, AreaCommitmentTypeWineVariantInput, AreaCommitmentTypeWineAttributeInput,
AreaCommitmentTypeMinKgPerHaInput.TextBox, AreaCommitmentTypePenaltyPerKgInput.TextBox,
AreaCommitmentTypePenaltyInput.TextBox, AreaCommitmentTypePenaltyNoneInput.TextBox,
SeasonMaxKgPerHaInput.TextBox, SeasonVatNormalInput.TextBox, SeasonVatFlatrateInput.TextBox, SeasonStartInput, SeasonEndInput,
SeasonMinKgPerBsInput.TextBox, SeasonMaxKgPerBsInput.TextBox, SeasonBsValueInput.TextBox,
SeasonPenaltyPerKgInput.TextBox, SeasonPenaltyInput.TextBox, SeasonPenaltyNoneInput.TextBox,
SeasonModifierIdInput, SeasonModifierNameInput, SeasonModifierRelInput.TextBox, SeasonModifierAbsInput.TextBox,
};
WineAttributeFillLowerInput.Visibility = Visibility.Hidden;
WineAttributeFillLowerLabel.Visibility = Visibility.Hidden;
}
new protected void LockInputs() {
base.LockInputs();
BranchIdInput.IsReadOnly = true;
BranchNameInput.IsReadOnly = true;
BranchPlzInput.IsReadOnly = true;
BranchOrtInput.IsEnabled = false;
BranchAddressInput.IsReadOnly = true;
BranchPhoneNrInput.IsReadOnly = true;
BranchFaxNrInput.IsReadOnly = true;
BranchMobileNrInput.IsReadOnly = true;
WineAttributeIdInput.IsReadOnly = true;
WineAttributeNameInput.IsReadOnly = true;
WineAttributeActiveInput.IsEnabled = false;
WineAttributeMaxKgPerHaInput.TextBox.IsReadOnly = true;
WineAttributeStrictInput.IsEnabled = false;
WineAttributeFillLowerInput.IsEnabled = false;
WineCultivationIdInput.IsReadOnly = true;
WineCultivationNameInput.IsReadOnly = true;
WineCultivationDescriptionInput.IsReadOnly = true;
AreaCommitmentTypeWineVariantInput.IsEnabled = false;
AreaCommitmentTypeWineAttributeInput.IsEnabled = false;
AreaCommitmentTypeMinKgPerHaInput.TextBox.IsReadOnly = true;
AreaCommitmentTypePenaltyPerKgInput.TextBox.IsReadOnly = true;
AreaCommitmentTypePenaltyInput.TextBox.IsReadOnly = true;
AreaCommitmentTypePenaltyNoneInput.TextBox.IsReadOnly = true;
SeasonMaxKgPerHaInput.TextBox.IsReadOnly = true;
SeasonVatNormalInput.TextBox.IsReadOnly = true;
SeasonVatFlatrateInput.TextBox.IsReadOnly = true;
SeasonMinKgPerBsInput.TextBox.IsReadOnly = true;
SeasonMaxKgPerBsInput.TextBox.IsReadOnly = true;
SeasonPenaltyPerKgInput.TextBox.IsReadOnly = true;
SeasonPenaltyInput.TextBox.IsReadOnly = true;
SeasonPenaltyNoneInput.TextBox.IsReadOnly = true;
SeasonBsValueInput.TextBox.IsReadOnly = true;
SeasonModifierIdInput.IsReadOnly = true;
SeasonModifierNameInput.IsReadOnly = true;
SeasonModifierRelInput.TextBox.IsReadOnly = true;
SeasonModifierAbsInput.TextBox.IsReadOnly = true;
}
new protected void UnlockInputs() {
base.UnlockInputs();
BranchIdInput.IsReadOnly = false;
BranchNameInput.IsReadOnly = false;
BranchPlzInput.IsReadOnly = false;
BranchOrtInput.IsEnabled = true;
BranchAddressInput.IsReadOnly = false;
BranchPhoneNrInput.IsReadOnly = false;
BranchFaxNrInput.IsReadOnly = false;
BranchMobileNrInput.IsReadOnly = false;
WineAttributeIdInput.IsReadOnly = false;
WineAttributeNameInput.IsReadOnly = false;
WineAttributeActiveInput.IsEnabled = true;
WineAttributeMaxKgPerHaInput.TextBox.IsReadOnly = false;
WineAttributeStrictInput.IsEnabled = true;
WineAttributeFillLowerInput.IsEnabled = true;
WineCultivationIdInput.IsReadOnly = false;
WineCultivationNameInput.IsReadOnly = false;
WineCultivationDescriptionInput.IsReadOnly = false;
AreaCommitmentTypeWineVariantInput.IsEnabled = true;
AreaCommitmentTypeWineAttributeInput.IsEnabled = true;
AreaCommitmentTypeMinKgPerHaInput.TextBox.IsReadOnly = false;
AreaCommitmentTypePenaltyPerKgInput.TextBox.IsReadOnly = false;
AreaCommitmentTypePenaltyInput.TextBox.IsReadOnly = false;
AreaCommitmentTypePenaltyNoneInput.TextBox.IsReadOnly = false;
SeasonMaxKgPerHaInput.TextBox.IsReadOnly = false;
SeasonVatNormalInput.TextBox.IsReadOnly = false;
SeasonVatFlatrateInput.TextBox.IsReadOnly = false;
SeasonMinKgPerBsInput.TextBox.IsReadOnly = false;
SeasonMaxKgPerBsInput.TextBox.IsReadOnly = false;
SeasonPenaltyPerKgInput.TextBox.IsReadOnly = false;
SeasonPenaltyInput.TextBox.IsReadOnly = false;
SeasonPenaltyNoneInput.TextBox.IsReadOnly = false;
SeasonBsValueInput.TextBox.IsReadOnly = false;
SeasonModifierIdInput.IsReadOnly = false;
SeasonModifierNameInput.IsReadOnly = false;
SeasonModifierRelInput.TextBox.IsReadOnly = false;
SeasonModifierAbsInput.TextBox.IsReadOnly = false;
}
private void Window_Loaded(object sender, RoutedEventArgs evt) {
LockInputs();
}
protected override async Task OnRenewContext() {
await base.OnRenewContext();
FillInputs(App.Client);
ControlUtils.RenewItemsSource(SeasonList, await Context.Seasons.OrderByDescending(s => s.Year).ToListAsync(), s => (s as Season)?.Year, null, ControlUtils.RenewSourceDefault.First);
var year = (SeasonList.SelectedItem as Season)?.Year;
ControlUtils.RenewItemsSource(BranchList, await Context.Branches.OrderBy(b => b.Name).ToListAsync(), b => (b as Branch)?.ZwstId, null, ControlUtils.RenewSourceDefault.First);
ControlUtils.RenewItemsSource(WineAttributeList, await Context.WineAttributes.OrderBy(a => a.Name).ToListAsync(), a => (a as WineAttr)?.AttrId, null, ControlUtils.RenewSourceDefault.First);
ControlUtils.RenewItemsSource(AreaCommitmentTypeWineVariantInput, await Context.WineVarieties.OrderBy(s => s.Name).ToListAsync(), s => (s as WineVar)?.SortId);
var attrList = await Context.WineAttributes.OrderBy(a => a.Name).Cast<object>().ToListAsync();
attrList.Insert(0, new NullItem(""));
ControlUtils.RenewItemsSource(AreaCommitmentTypeWineAttributeInput, attrList, a => (a as WineAttr)?.AttrId);
ControlUtils.RenewItemsSource(AreaCommitmentTypeList, await Context.AreaCommitmentTypes.OrderBy(v => v.VtrgId).ToListAsync(), v => (v as AreaComType)?.VtrgId, null, ControlUtils.RenewSourceDefault.First);
ControlUtils.RenewItemsSource(WineCultivationList, await Context.WineCultivations.OrderBy(c => c.Name).ToListAsync(), c=> (c as WineCult)?.CultId, null, ControlUtils.RenewSourceDefault.First);
ControlUtils.RenewItemsSource(SeasonModifierList, await Context.Modifiers.Where(m => m.Year == year).OrderBy(m => m.Ordering).ToListAsync(), m => (m as Modifier)?.ModId, null, ControlUtils.RenewSourceDefault.First);
}
protected override void UpdateButtons() {
if (!IsEditing && !IsCreating) return;
bool ch = _branchChanged || _attrChanged || _cultChanged || _actChanged ||
_seasonChanged || _modChanged || HasChanged,
v = IsValid;
CancelButton.IsEnabled = true;
ResetButton.IsEnabled = ch;
SaveButton.IsEnabled = ch && v;
BranchAddButton.IsEnabled = true;
BranchDeleteButton.IsEnabled = BranchList.SelectedIndex != -1;
WineAttributeAddButton.IsEnabled = true;
WineAttributeDeleteButton.IsEnabled = WineAttributeList.SelectedIndex != -1;
WineCultivationAddButton.IsEnabled = true;
WineCultivationDeleteButton.IsEnabled = WineCultivationList.SelectedIndex != -1;
AreaCommitmentTypeAddButton.IsEnabled = true;
AreaCommitmentTypeDeleteButton.IsEnabled = AreaCommitmentTypeList.SelectedIndex != -1;
SeasonModifierUpButton.IsEnabled = SeasonModifierList.SelectedIndex >= 1;
SeasonModifierDownButton.IsEnabled = SeasonModifierList.SelectedIndex != -1 && SeasonModifierList.SelectedIndex < (_modList?.Count - 1 ?? 0);
SeasonModifierAddButton.IsEnabled = true;
SeasonModifierDeleteButton.IsEnabled = SeasonModifierList.SelectedIndex != -1;
}
private void OriginButton_Click(object sender, RoutedEventArgs evt) {
App.FocusOriginHierarchy();
}
private void EditButton_Click(object sender, RoutedEventArgs evt) {
IsEditing = true;
EditButton.Visibility = Visibility.Hidden;
ResetButton.Visibility = Visibility.Visible;
BranchesInitEditing();
WineAttributesInitEditing();
WineCultivationsInitEditing();
AreaCommitmentTypesInitEditing();
SeasonsInitEditing();
ModifiersInitEditing();
UnlockInputs();
UpdateButtons();
}
private void CancelButton_Click(object sender, RoutedEventArgs evt) {
IsEditing = false;
IsCreating = false;
EditButton.Visibility = Visibility.Visible;
ResetButton.Visibility = Visibility.Hidden;
CancelButton.IsEnabled = false;
SaveButton.IsEnabled = false;
ResetButton.IsEnabled = false;
Context.ChangeTracker.Clear();
BranchesFinishEditing();
WineCultivationsFinishEditing();
WineAttributesFinishEditing();
AreaCommitmentTypesFinishEditing();
SeasonsFinishEditing();
ModifiersFinishEditing();
ClearInputStates();
FillInputs(App.Client);
LockInputs();
}
private void ResetButton_Click(object sender, RoutedEventArgs evt) {
_branchChanged = false;
_attrChanged = false;
_cultChanged = false;
_modChanged = false;
Context.ChangeTracker.Clear();
BranchesInitEditing();
WineAttributesInitEditing();
WineCultivationsInitEditing();
AreaCommitmentTypesInitEditing();
SeasonsInitEditing();
ModifiersInitEditing();
ClearInputStates();
FillInputs(App.Client);
UpdateButtons();
}
private async void SaveButton_Click(object sender, RoutedEventArgs evt) {
try {
await UpdateClientParameters(App.Client);
await BranchesSave();
await WineAttributesSave();
await WineCultivationsSave();
await AreaCommitmentTypesSave();
await SeasonsSave();
await ModifiersSave();
} 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, "Stammdaten aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
}
IsEditing = false;
IsCreating = false;
EditButton.Visibility = Visibility.Visible;
ResetButton.Visibility = Visibility.Hidden;
CancelButton.IsEnabled = false;
SaveButton.IsEnabled = false;
ResetButton.IsEnabled = false;
BranchesFinishEditing();
WineAttributesFinishEditing();
WineCultivationsFinishEditing();
AreaCommitmentTypesFinishEditing();
SeasonsFinishEditing();
ModifiersFinishEditing();
ClearInputStates();
FillInputs(App.Client);
LockInputs();
await HintContextChange();
}
private void FillInputs(ClientParameters p) {
ClearOriginalValues();
ClearDefaultValues();
ClientNameInput.Text = p.Name;
ClientNameSuffixInput.Text = p.NameSuffix;
ClientNameTypeInput.Text = p.NameType;
ClientNameTokenInput.Text = p.NameToken;
ClientNameShortInput.Text = p.NameShort;
ClientAddressInput.Text = p.Address;
ClientPlzInput.Text = p.Plz.ToString();
ClientOrtInput.Text = p.Ort;
ClientIbanInput.Text = p.Iban;
ClientBicInput.Text = p.Bic;
ClientUstIdNrInput.Text = p.UstIdNr;
ClientLfbisNrInput.Text = p.LfbisNr;
ClientPhoneNrInput.Text = p.PhoneNr;
ClientFaxNrInput.Text = p.FaxNr;
ClientEmailAddressInput.Text = p.EmailAddress;
ClientWebsiteInput.Text = p.Website;
TextElementDeliveryNote.Text = p.TextDeliveryNote;
switch (p.ModeDeliveryNoteStats) {
case 0: ModeDeliveryNoteNone.IsChecked = true; break;
case 1: ModeDeliveryNoteGaOnly.IsChecked = true; break;
case 2: ModeDeliveryNoteShort.IsChecked = true; break;
case 3: ModeDeliveryNoteFull.IsChecked = true; break;
}
TextElementDeliveryConfirmation.Text = p.TextDeliveryConfirmation;
FinishInputFilling();
}
private async Task UpdateClientParameters(ClientParameters p) {
p.Name = ClientNameInput.Text;
p.NameSuffix = ClientNameSuffixInput.Text.Length > 0 ? ClientNameSuffixInput.Text : null;
p.NameType = ClientNameTypeInput.Text;
p.NameToken = ClientNameTokenInput.Text;
p.NameShort = ClientNameShortInput.Text;
p.Address = ClientAddressInput.Text;
p.Plz = int.Parse(ClientPlzInput.Text);
p.Ort = ClientOrtInput.Text;
p.Iban = ClientIbanInput.Text.Length > 0 ? ClientIbanInput.Text : null;
p.Bic = ClientBicInput.Text.Length > 0 ? ClientBicInput.Text : null;
p.UstIdNr = ClientUstIdNrInput.Text.Length > 0 ? ClientUstIdNrInput.Text : null;
p.LfbisNr = ClientLfbisNrInput.Text.Length > 0 ? ClientLfbisNrInput.Text : null;
p.PhoneNr = ClientPhoneNrInput.Text.Length > 0 ? ClientPhoneNrInput.Text : null;
p.FaxNr = ClientFaxNrInput.Text.Length > 0 ? ClientFaxNrInput.Text : null;
p.EmailAddress = ClientEmailAddressInput.Text.Length > 0 ? ClientEmailAddressInput.Text : null;
p.Website = ClientWebsiteInput.Text.Length > 0 ? ClientWebsiteInput.Text : null;
p.TextDeliveryNote = TextElementDeliveryNote.Text.Length > 0 ? TextElementDeliveryNote.Text : null;
p.ModeDeliveryNoteStats = (ModeDeliveryNoteNone.IsChecked == true) ? 0 : (ModeDeliveryNoteGaOnly.IsChecked == true) ? 1 : (ModeDeliveryNoteShort.IsChecked == true) ? 2 : (ModeDeliveryNoteFull.IsChecked == true) ? 3 : 2;
p.TextDeliveryConfirmation = TextElementDeliveryConfirmation.Text.Length > 0 ? TextElementDeliveryConfirmation.Text : null;
await p.UpdateValues();
}
private void ClientNames_TextChanged(object sender, TextChangedEventArgs evt) {
var suffix = ClientNameSuffixInput.Text.Length > 0 ? ClientNameSuffixInput.Text : null;
ClientNameFull.Text = $"{ClientNameInput.Text}{(suffix != null ? $", {suffix}," : "")} {ClientNameTypeInput.Text}";
TextBox_TextChanged(sender, evt);
}
}
}