[#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

@ -18,16 +18,20 @@ namespace Elwig.Windows {
private bool _actChanged = false;
private bool _actUpdate = false;
private void AreaCommitmentTypesInitEditing() {
_actList = new(Context.AreaCommitmentTypes.OrderBy(v => v.VtrgId).ToList());
private async Task AreaCommitmentTypesInitEditing(AppDbContext ctx) {
_actList = new(await ctx.AreaCommitmentTypes
.OrderBy(v => v.VtrgId)
.Include(t => t.WineVar)
.Include(t => t.WineAttr)
.ToListAsync());
_acts = _actList.ToDictionary(v => v.VtrgId, v => (string?)v.VtrgId);
_actIds = _actList.ToDictionary(v => v, v => v.VtrgId);
ControlUtils.RenewItemsSource(AreaCommitmentTypeList, _actList, a => (a as AreaComType)?.VtrgId);
AreaCommitmentTypeList_SelectionChanged(null, null);
}
private void AreaCommitmentTypesFinishEditing() {
ControlUtils.RenewItemsSource(AreaCommitmentTypeList, Context.AreaCommitmentTypes.OrderBy(v => v.SortId).ToList(), v => (v as AreaComType)?.VtrgId);
private async Task AreaCommitmentTypesFinishEditing(AppDbContext ctx) {
ControlUtils.RenewItemsSource(AreaCommitmentTypeList, await ctx.AreaCommitmentTypes.OrderBy(v => v.SortId).ToListAsync(), v => (v as AreaComType)?.VtrgId);
_actList = null;
_acts = null;
_actIds = null;
@ -37,31 +41,31 @@ namespace Elwig.Windows {
AreaCommitmentTypeDeleteButton.IsEnabled = false;
}
private async Task AreaCommitmentTypesSave() {
private async Task AreaCommitmentTypesSave(AppDbContext ctx) {
if (!_actChanged || _actList == null || _acts == null || _actIds == null)
return;
foreach (var (vtrgid, _) in _acts.Where(a => a.Value == null)) {
Context.Remove(Context.AreaCommitmentTypes.Find(vtrgid));
ctx.Remove(ctx.AreaCommitmentTypes.Find(vtrgid)!);
}
foreach (var (attr, old) in _actIds) {
attr.VtrgId = old;
}
foreach (var (old, vtrgid) in _acts.Where(a => a.Value != null)) {
Context.Update(Context.AreaCommitmentTypes.Find(old));
ctx.Update(ctx.AreaCommitmentTypes.Find(old)!);
}
await Context.SaveChangesAsync();
await ctx.SaveChangesAsync();
foreach (var (old, vtrgid) in _acts.Where(a => a.Value != null)) {
await Context.Database.ExecuteSqlAsync($"UPDATE area_commitment_type SET vtrgid = {vtrgid} WHERE vtrgid = {old}");
await ctx.Database.ExecuteSqlAsync($"UPDATE area_commitment_type SET vtrgid = {vtrgid} WHERE vtrgid = {old}");
}
await Context.SaveChangesAsync();
await ctx.SaveChangesAsync();
foreach (var type in _actList.Where(a => !_actIds.ContainsKey(a))) {
if (type.VtrgId == null) continue;
await Context.AddAsync(type);
ctx.Add(type);
}
await Context.SaveChangesAsync();
await ctx.SaveChangesAsync();
}
private void AreaCommitmentTypeList_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) {
@ -90,7 +94,7 @@ namespace Elwig.Windows {
private void AreaCommitmentTypeAddButton_Click(object sender, RoutedEventArgs evt) {
if (_actList == null) return;
_actChanged = true;
var item = Context.CreateProxy<AreaComType>();
var item = new AreaComType { VtrgId = "", SortId = "" };
_actList.Add(item);
AreaCommitmentTypeList.SelectedItem = item;
UpdateButtons();