132 lines
5.5 KiB
C#
132 lines
5.5 KiB
C#
using Elwig.Helpers;
|
|
using Elwig.Models.Entities;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows;
|
|
|
|
namespace Elwig.Windows {
|
|
public partial class BaseDataWindow {
|
|
|
|
private Dictionary<string, string?>? _cults = null;
|
|
private Dictionary<WineCult, string>? _cultIds = null;
|
|
private ObservableCollection<WineCult>? _cultList = null;
|
|
private bool _cultChanged = false;
|
|
private bool _cultUpdate = false;
|
|
|
|
private async Task WineCultivationsInitEditing(AppDbContext ctx) {
|
|
_cultList = new(await ctx.WineCultivations
|
|
.OrderBy(c => c.Name)
|
|
.ToListAsync());
|
|
_cults = _cultList.ToDictionary(c => c.CultId, c => (string?)c.CultId);
|
|
_cultIds = _cultList.ToDictionary(c => c, c => c.CultId);
|
|
ControlUtils.RenewItemsSource(WineCultivationList, _cultList);
|
|
WineCultivationList_SelectionChanged(null, null);
|
|
}
|
|
|
|
private async Task WineCultivationsFinishEditing(AppDbContext ctx) {
|
|
ControlUtils.RenewItemsSource(WineCultivationList, await ctx.WineCultivations
|
|
.OrderBy(c => c.Name)
|
|
.ToListAsync());
|
|
_cultList = null;
|
|
_cults = null;
|
|
_cultIds = null;
|
|
_cultChanged = false;
|
|
|
|
WineCultivationAddButton.IsEnabled = false;
|
|
WineCultivationDeleteButton.IsEnabled = false;
|
|
}
|
|
|
|
private async Task WineCultivationsSave(AppDbContext ctx) {
|
|
if (!_cultChanged || _cultList == null || _cults == null || _cultIds == null)
|
|
return;
|
|
|
|
foreach (var (cultid, _) in _cults.Where(c => c.Value == null)) {
|
|
ctx.Remove(ctx.WineCultivations.Find(cultid)!);
|
|
}
|
|
foreach (var (cult, old) in _cultIds) {
|
|
cult.CultId = old;
|
|
}
|
|
foreach (var (old, cultid) in _cults.Where(c => c.Value != null)) {
|
|
ctx.Update(ctx.WineCultivations.Find(old)!);
|
|
}
|
|
await ctx.SaveChangesAsync();
|
|
|
|
foreach (var (old, cultid) in _cults.Where(c => c.Value != null)) {
|
|
await ctx.Database.ExecuteSqlAsync($"UPDATE wine_cultivation SET cultid = {cultid} WHERE cultid = {old}");
|
|
await ctx.Database.ExecuteSqlRawAsync($"UPDATE payment_variant SET data = REPLACE(data, '-{old}\"', '-{cultid}\"')");
|
|
}
|
|
await ctx.SaveChangesAsync();
|
|
|
|
foreach (var cult in _cultList.Where(c => !_cultIds.ContainsKey(c))) {
|
|
if (cult.CultId == null) continue;
|
|
ctx.Add(cult);
|
|
}
|
|
await ctx.SaveChangesAsync();
|
|
}
|
|
|
|
private void WineCultivationList_SelectionChanged(object? sender, SelectionChangedEventArgs? evt) {
|
|
UpdateButtons();
|
|
_cultUpdate = true;
|
|
if (WineCultivationList.SelectedItem is not WineCult cult) {
|
|
WineCultivationIdInput.Text = "";
|
|
WineCultivationNameInput.Text = "";
|
|
WineCultivationDescriptionInput.Text = "";
|
|
} else {
|
|
WineCultivationIdInput.Text = cult.CultId;
|
|
WineCultivationNameInput.Text = cult.Name;
|
|
WineCultivationDescriptionInput.Text = cult.Description;
|
|
}
|
|
_cultUpdate = false;
|
|
}
|
|
|
|
private void WineCultivationAddButton_Click(object sender, RoutedEventArgs evt) {
|
|
if (_cultList == null) return;
|
|
_cultChanged = true;
|
|
var item = new WineCult { CultId = "", Name = "" };
|
|
_cultList.Add(item);
|
|
WineCultivationList.SelectedItem = item;
|
|
UpdateButtons();
|
|
}
|
|
|
|
private void WineCultivationDeleteButton_Click(object sender, RoutedEventArgs evt) {
|
|
if (_cultList == null || _cults == null) return;
|
|
_cultChanged = true;
|
|
var idx = WineCultivationList.SelectedIndex;
|
|
var item = _cultList[idx];
|
|
_cults[item.CultId] = null;
|
|
_cultList.RemoveAt(idx);
|
|
WineCultivationList.SelectedIndex = idx < _cultList.Count ? idx : idx - 1;
|
|
UpdateButtons();
|
|
}
|
|
|
|
private void WineCultivation_Changed(object? sender, RoutedEventArgs? evt) {
|
|
if (_cultUpdate || (!IsEditing && !IsCreating) || WineCultivationList.SelectedItem is not WineCult cult || _cults == null || _cultIds == null) return;
|
|
_cultChanged = _cultChanged ||
|
|
WineCultivationIdInput.Text != cult.CultId ||
|
|
WineCultivationNameInput.Text != cult.Name ||
|
|
WineCultivationDescriptionInput.Text != (cult.Description ?? "");
|
|
|
|
var old = _cultIds.GetValueOrDefault(cult);
|
|
var id = WineCultivationIdInput.Text ?? "";
|
|
if (old != null) _cults[old] = id;
|
|
cult.CultId = id;
|
|
cult.Name = WineCultivationNameInput.Text ?? "";
|
|
cult.Description = WineCultivationDescriptionInput.Text ?? "";
|
|
if (cult.Description.Length == 0) cult.Description = null;
|
|
|
|
CollectionViewSource.GetDefaultView(_cultList).Refresh();
|
|
UpdateButtons();
|
|
}
|
|
|
|
private void WineCultivationIdInput_TextChanged(object sender, TextChangedEventArgs evt) {
|
|
UpperCaseInput_TextChanged(sender, evt);
|
|
WineCultivation_Changed(sender, evt);
|
|
}
|
|
}
|
|
}
|