Windows: Add OriginHierarchyWindow
This commit is contained in:
184
Elwig/Windows/OriginHierarchyWindow.xaml.cs
Normal file
184
Elwig/Windows/OriginHierarchyWindow.xaml.cs
Normal file
@ -0,0 +1,184 @@
|
||||
using Elwig.Helpers;
|
||||
using Elwig.Models.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.ChangeTracking;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace Elwig.Windows {
|
||||
|
||||
public partial class OriginHierarchyWindow : ContextWindow {
|
||||
|
||||
private bool isUpdating = false;
|
||||
|
||||
public OriginHierarchyWindow() {
|
||||
InitializeComponent();
|
||||
ActivateKgButton.IsEnabled = false;
|
||||
DeactivateKgButton.IsEnabled = false;
|
||||
}
|
||||
|
||||
protected override async Task OnRenewContext() {
|
||||
ControlUtils.RenewItemsSource(WineOrigins, (await Context.WineOrigins.ToListAsync()).OrderByDescending(o => o.SortKey).ThenBy(o => o.HkId), i => (i as WineOrigin)?.HkId, WineOrigins_SelectionChanged);
|
||||
if (WineOrigins.SelectedItem == null) {
|
||||
var hkid = await Context.WbKgs
|
||||
.GroupBy(k => k.AtKg.Gem.WbGem.HkId)
|
||||
.Where(g => g.Count() > 0)
|
||||
.OrderByDescending(g => g.Count())
|
||||
.Select(g => g.Key)
|
||||
.FirstOrDefaultAsync();
|
||||
ControlUtils.SelectListBoxItem(WineOrigins, o => (o as WineOrigin)?.HkId, hkid);
|
||||
}
|
||||
ControlUtils.RenewItemsSource(WbGls, await Context.WbGls.OrderBy(g => g.GlNr).ToListAsync(), g => (g as WbGl)?.GlNr, WbGls_SelectionChanged, ControlUtils.RenewSourceDefault.First);
|
||||
await UpdateWbGems();
|
||||
await UpdateWbKgs();
|
||||
await UpdateWbGlKgs();
|
||||
await UpdateWbRds();
|
||||
}
|
||||
|
||||
private async Task UpdateWbGems() {
|
||||
WbGemsHeader.Content = "Gemeinden" + (WineOrigins.SelectedItem is WineOrigin o ? $" ({o.Name})" : "");
|
||||
var selHkId = (WineOrigins.SelectedItem as WineOrigin)?.HkId;
|
||||
ControlUtils.RenewItemsSource(WbGems, await Context.WbGems.Where(g => g.HkId == selHkId).Select(g => g.AtGem).OrderBy(g => g.Name).ToListAsync(), g => (g as AT_Gem)?.Gkz, WbGems_SelectionChanged);
|
||||
await UpdateWbKgs();
|
||||
}
|
||||
|
||||
private async Task UpdateWbKgs() {
|
||||
WbKgsHeader.Content = "Verfügbare KG";
|
||||
IQueryable<AT_Kg>? kgs = null;
|
||||
if (WbGems.SelectedItem is AT_Gem g) {
|
||||
WbKgsHeader.Content += $" ({g.Name})";
|
||||
kgs = Context.Katastralgemeinden.Where(k => k.Gkz == g.Gkz);
|
||||
} else if (WineOrigins.SelectedItem is WineOrigin o) {
|
||||
WbKgsHeader.Content += $" ({o.Name})";
|
||||
kgs = Context.WbGems.Where(g => g.HkId == o.HkId).SelectMany(g => g.AtGem.Kgs);
|
||||
} else {
|
||||
kgs = null;
|
||||
}
|
||||
if (kgs == null) {
|
||||
WbKgs.ItemsSource = null;
|
||||
} else {
|
||||
ControlUtils.RenewItemsSource(WbKgs, await kgs.OrderBy(k => k.WbKg.Gl == null).ThenBy(k => k.WbKg.GlNr).ThenBy(k => k.Name).ToListAsync(), k => (k as AT_Kg)?.KgNr, WbKgs_SelectionChanged);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task UpdateWbGlKgs() {
|
||||
WbGlKgsHeader.Content = "Aktive KG";
|
||||
if (WbGls.SelectedItem is WbGl g) {
|
||||
WbGlKgsHeader.Content += $" ({g.Name})";
|
||||
ControlUtils.RenewItemsSource(WbGlKgs, await Context.WbKgs.Where(k => k.GlNr == g.GlNr).Select(k => k.AtKg).OrderBy(k => k.Name).ToListAsync(), k => (k as AT_Kg)?.KgNr, WbGlKgs_SelectionChanged);
|
||||
} else {
|
||||
WbGlKgs.ItemsSource = null;
|
||||
}
|
||||
UpdateButtons();
|
||||
}
|
||||
|
||||
private async Task UpdateWbRds() {
|
||||
WbRdsHeader.Content = "Riede";
|
||||
if (WbGlKgs.SelectedItem is AT_Kg k) {
|
||||
WbRdsHeader.Content += $" ({k.Name})";
|
||||
ControlUtils.RenewItemsSource(WbRds, await Context.WbRde.Where(r => r.KgNr == k.KgNr).OrderBy(r => r.Name).ToListAsync(), k => (k as AT_Kg)?.KgNr);
|
||||
} else {
|
||||
WbRds.ItemsSource = null;
|
||||
}
|
||||
UpdateButtons();
|
||||
}
|
||||
|
||||
private async void WineOrigins_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
|
||||
await UpdateWbGems();
|
||||
}
|
||||
|
||||
private async void WbGls_SelectionChanged(object? sender, SelectionChangedEventArgs? e) {
|
||||
await UpdateWbGlKgs();
|
||||
}
|
||||
|
||||
private async void WbGems_SelectionChanged(object? sender, SelectionChangedEventArgs? e) {
|
||||
await UpdateWbKgs();
|
||||
}
|
||||
|
||||
private async void WbGlKgs_SelectionChanged(object sender, SelectionChangedEventArgs e) {
|
||||
await UpdateWbRds();
|
||||
if (!isUpdating && WbGlKgs.SelectedItem is AT_Kg k) {
|
||||
isUpdating = true;
|
||||
ControlUtils.SelectListBoxItem(WineOrigins, o => (o as WineOrigin)?.HkId, k.Gem.WbGem?.HkId);
|
||||
ControlUtils.SelectListBoxItem(WbGems, g => (g as AT_Gem)?.Gkz, k.Gkz);
|
||||
ControlUtils.SelectListBoxItem(WbKgs, k => (k as AT_Kg)?.KgNr, k.KgNr);
|
||||
isUpdating = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void WbKgs_SelectionChanged(object sender, SelectionChangedEventArgs e) {
|
||||
UpdateButtons();
|
||||
if (!isUpdating && WbKgs.SelectedItem is AT_Kg k && k.WbKg != null && ((WbGls.SelectedItem as WbGl)?.GlNr == k.WbKg?.GlNr || WbGls.SelectedItem == null)) {
|
||||
isUpdating = true;
|
||||
ControlUtils.SelectListBoxItem(WbGls, g => (g as WbGl)?.GlNr, k.WbKg?.GlNr);
|
||||
ControlUtils.SelectListBoxItem(WbGlKgs, k => (k as AT_Kg)?.KgNr, k.KgNr);
|
||||
isUpdating = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateButtons() {
|
||||
if (WbKgs.SelectedItem is AT_Kg v) {
|
||||
ActivateKgButton.IsEnabled = v.WbKg?.GlNr != (WbGls.SelectedItem as WbGl)?.GlNr;
|
||||
ActivateKgButton.ToolTip = $"KG {v.Name} Großlage {(WbGls.SelectedItem as WbGl)?.Name} zuweisen";
|
||||
} else {
|
||||
ActivateKgButton.IsEnabled = false;
|
||||
ActivateKgButton.ToolTip = $"Verfügbare Katastralgemeinde Großlage {(WbGls.SelectedItem as WbGl)?.Name} zuweisen";
|
||||
}
|
||||
|
||||
if (WbGlKgs.SelectedItem is AT_Kg a) {
|
||||
DeactivateKgButton.IsEnabled = true;
|
||||
DeactivateKgButton.ToolTip = $"KG {a.Name} deaktivieren";
|
||||
} else {
|
||||
DeactivateKgButton.IsEnabled = false;
|
||||
DeactivateKgButton.ToolTip = "Aktive Katastralgemeinde deaktivieren";
|
||||
}
|
||||
}
|
||||
|
||||
private async void ActivateKgButton_Click(object sender, RoutedEventArgs e) {
|
||||
if (WbKgs.SelectedItem is not AT_Kg k || WbGls.SelectedItem is not WbGl g) return;
|
||||
try {
|
||||
if (k.WbKg != null) {
|
||||
k.WbKg.GlNr = g.GlNr;
|
||||
Context.Update(k.WbKg);
|
||||
} else {
|
||||
var wbKg = Context.CreateProxy<WbKg>();
|
||||
wbKg.KgNr = k.KgNr;
|
||||
wbKg.GlNr = g.GlNr;
|
||||
await Context.AddAsync(wbKg);
|
||||
}
|
||||
await Context.SaveChangesAsync();
|
||||
await App.HintContextChange();
|
||||
ControlUtils.SelectListBoxItem(WbGlKgs, kg => (kg as AT_Kg)?.KgNr, k.KgNr);
|
||||
} 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, "Katastralgemeinde aktivieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private async void DeactivateKgButton_Click(object sender, RoutedEventArgs e) {
|
||||
if (WbGlKgs.SelectedItem is not AT_Kg k || k.WbKg == null) return;
|
||||
try {
|
||||
Context.Remove(k.WbKg);
|
||||
await Context.SaveChangesAsync();
|
||||
await App.HintContextChange();
|
||||
ControlUtils.SelectListBoxItem(WbKgs, kg => (kg as AT_Kg)?.KgNr, k.KgNr);
|
||||
} catch (Exception exc) {
|
||||
await HintContextChange();
|
||||
var str = "Der Eintrag konnte nicht aus der Datenbank gelöscht werden!\n\n" + exc.Message;
|
||||
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
|
||||
MessageBox.Show(str, "Katastralgemeinde deaktivieren", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
|
||||
public void FocusKgNr(int kgnr) {
|
||||
var kg = Context.Katastralgemeinden.Find(kgnr);
|
||||
ControlUtils.SelectListBoxItem(WbGls, kg.WbKg.Gl, g => (g as WbGl)?.GlNr);
|
||||
ControlUtils.SelectListBoxItem(WbGlKgs, kg, k => (k as AT_Kg)?.KgNr);
|
||||
WbGlKgs.Focus();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user