[#43] BaseDataWindow: Do not use Context from ContextWindow any more

This commit is contained in:
2024-03-18 10:28:35 +01:00
parent 5715c41a2e
commit 729d2fd76c
7 changed files with 154 additions and 122 deletions

View File

@ -133,18 +133,37 @@ namespace Elwig.Windows {
protected override async Task OnRenewContext() {
await base.OnRenewContext();
using var ctx = new AppDbContext();
FillInputs(App.Client);
ControlUtils.RenewItemsSource(SeasonList, await Context.Seasons.OrderByDescending(s => s.Year).ToListAsync(), s => (s as Season)?.Year, null, ControlUtils.RenewSourceDefault.First);
ControlUtils.RenewItemsSource(SeasonList, await ctx.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();
ControlUtils.RenewItemsSource(BranchList, await ctx.Branches
.OrderBy(b => b.Name)
.Include(b => b.PostalDest!.AtPlz)
.ToListAsync(), b => (b as Branch)?.ZwstId, null, ControlUtils.RenewSourceDefault.First);
ControlUtils.RenewItemsSource(WineAttributeList, await ctx.WineAttributes
.OrderBy(a => a.Name)
.ToListAsync(), a => (a as WineAttr)?.AttrId, null, ControlUtils.RenewSourceDefault.First);
ControlUtils.RenewItemsSource(AreaCommitmentTypeWineVariantInput, await ctx.WineVarieties
.OrderBy(s => s.Name)
.ToListAsync(), s => (s as WineVar)?.SortId);
var attrList = await ctx.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);
ControlUtils.RenewItemsSource(AreaCommitmentTypeList, await ctx.AreaCommitmentTypes
.OrderBy(t => t.VtrgId)
.Include(t => t.WineVar)
.Include(t => t.WineAttr)
.ToListAsync(), t => (t as AreaComType)?.VtrgId, null, ControlUtils.RenewSourceDefault.First);
ControlUtils.RenewItemsSource(WineCultivationList, await ctx.WineCultivations
.OrderBy(c => c.Name)
.ToListAsync(), c=> (c as WineCult)?.CultId, null, ControlUtils.RenewSourceDefault.First);
ControlUtils.RenewItemsSource(SeasonModifierList, await ctx.Modifiers
.Where(m => m.Year == year)
.OrderBy(m => m.Ordering)
.ToListAsync(), m => (m as Modifier)?.ModId, null, ControlUtils.RenewSourceDefault.First);
}
protected override void UpdateButtons() {
@ -174,23 +193,52 @@ namespace Elwig.Windows {
App.FocusOriginHierarchy();
}
private void EditButton_Click(object sender, RoutedEventArgs evt) {
private async Task InitEditing() {
using var ctx = new AppDbContext();
await BranchesInitEditing(ctx);
await WineAttributesInitEditing(ctx);
await WineCultivationsInitEditing(ctx);
await AreaCommitmentTypesInitEditing(ctx);
await SeasonsInitEditing(ctx);
await ModifiersInitEditing(ctx);
}
private async Task Save() {
using var ctx = new AppDbContext();
// FIXME
//using var tx = await ctx.Database.BeginTransactionAsync();
await UpdateClientParameters(App.Client);
await BranchesSave(ctx);
await WineAttributesSave(ctx);
await WineCultivationsSave(ctx);
await AreaCommitmentTypesSave(ctx);
await SeasonsSave(ctx);
await ModifiersSave(ctx);
//await tx.CommitAsync();
}
private async Task FinishEditing() {
using var ctx = new AppDbContext();
await BranchesFinishEditing(ctx);
await WineAttributesFinishEditing(ctx);
await WineCultivationsFinishEditing(ctx);
await AreaCommitmentTypesFinishEditing(ctx);
await SeasonsFinishEditing(ctx);
await ModifiersFinishEditing(ctx);
}
private async void EditButton_Click(object sender, RoutedEventArgs evt) {
IsEditing = true;
EditButton.Visibility = Visibility.Hidden;
ResetButton.Visibility = Visibility.Visible;
BranchesInitEditing();
WineAttributesInitEditing();
WineCultivationsInitEditing();
AreaCommitmentTypesInitEditing();
SeasonsInitEditing();
ModifiersInitEditing();
await InitEditing();
UnlockInputs();
UpdateButtons();
}
private void CancelButton_Click(object sender, RoutedEventArgs evt) {
private async void CancelButton_Click(object sender, RoutedEventArgs evt) {
IsEditing = false;
IsCreating = false;
EditButton.Visibility = Visibility.Visible;
@ -199,32 +247,20 @@ namespace Elwig.Windows {
SaveButton.IsEnabled = false;
ResetButton.IsEnabled = false;
Context.ChangeTracker.Clear();
BranchesFinishEditing();
WineCultivationsFinishEditing();
WineAttributesFinishEditing();
AreaCommitmentTypesFinishEditing();
SeasonsFinishEditing();
ModifiersFinishEditing();
await FinishEditing();
ClearInputStates();
FillInputs(App.Client);
LockInputs();
}
private void ResetButton_Click(object sender, RoutedEventArgs evt) {
private async void ResetButton_Click(object sender, RoutedEventArgs evt) {
_branchChanged = false;
_attrChanged = false;
_cultChanged = false;
_modChanged = false;
Context.ChangeTracker.Clear();
BranchesInitEditing();
WineAttributesInitEditing();
WineCultivationsInitEditing();
AreaCommitmentTypesInitEditing();
SeasonsInitEditing();
ModifiersInitEditing();
await InitEditing();
ClearInputStates();
FillInputs(App.Client);
@ -233,13 +269,7 @@ namespace Elwig.Windows {
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();
await Save();
} 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;
@ -254,12 +284,7 @@ namespace Elwig.Windows {
SaveButton.IsEnabled = false;
ResetButton.IsEnabled = false;
BranchesFinishEditing();
WineAttributesFinishEditing();
WineCultivationsFinishEditing();
AreaCommitmentTypesFinishEditing();
SeasonsFinishEditing();
ModifiersFinishEditing();
await FinishEditing();
ClearInputStates();
FillInputs(App.Client);