186 lines
7.3 KiB
C#
186 lines
7.3 KiB
C#
using Elwig.Helpers;
|
||
using Elwig.Helpers.Billing;
|
||
using Elwig.Helpers.Export;
|
||
using Elwig.Models.Dtos;
|
||
using Microsoft.Win32;
|
||
using System;
|
||
using System.ComponentModel;
|
||
using System.Diagnostics;
|
||
using System.IO;
|
||
using System.Reflection;
|
||
using System.Threading.Tasks;
|
||
using System.Windows;
|
||
using System.Windows.Input;
|
||
|
||
namespace Elwig.Windows {
|
||
public partial class MainWindow : ContextWindow {
|
||
|
||
public MainWindow() {
|
||
InitializeComponent();
|
||
var v = Assembly.GetExecutingAssembly().GetName().Version;
|
||
VersionField.Text = "Version: " + (v == null ? "?" : $"{v.Major}.{v.Minor}.{v.Build}") + $" – {App.BranchName}";
|
||
if (App.Client.Client == null) VersionField.Text += " (Unbekannt)";
|
||
if (App.Config.UpdateUrl == null) Menu_Help_Update.IsEnabled = false;
|
||
if (App.Config.Smtp == null) Menu_Help_Smtp.IsEnabled = false;
|
||
}
|
||
|
||
private void Window_Loaded(object sender, RoutedEventArgs evt) {
|
||
SeasonInput.Value = Utils.CurrentLastSeason;
|
||
}
|
||
|
||
private void Window_Closing(object sender, CancelEventArgs evt) {
|
||
if (App.NumWindows > 1 && !App.ForceShutdown) {
|
||
var res = MessageBox.Show("Es sind noch weitere Fenster geöffnet.\nSollen alle Fenster geschlossen werden?",
|
||
"Elwig beenden", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||
if (res != MessageBoxResult.Yes) {
|
||
evt.Cancel = true;
|
||
} else {
|
||
Application.Current.Shutdown();
|
||
}
|
||
}
|
||
}
|
||
|
||
private async void Menu_Help_Update_Click(object sender, RoutedEventArgs evt) {
|
||
await App.CheckForUpdates();
|
||
}
|
||
|
||
private async void Menu_Help_Smtp_Click(object sender, RoutedEventArgs evt) {
|
||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||
try {
|
||
using var client = await Utils.GetSmtpClient();
|
||
await client!.DisconnectAsync(true);
|
||
MessageBox.Show("E-Mail-Einstellungen erfolgreich überprüft!", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information);
|
||
} catch (Exception exc) {
|
||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||
}
|
||
Mouse.OverrideCursor = null;
|
||
}
|
||
|
||
private void Menu_Help_Config_Click(object sender, RoutedEventArgs evt) {
|
||
Process.Start("explorer.exe", App.DataPath);
|
||
}
|
||
|
||
private void Menu_Database_Query_Click(object sender, RoutedEventArgs evt) {
|
||
var w = new QueryWindow();
|
||
w.Show();
|
||
}
|
||
|
||
private void Menu_Database_Open_Click(object sender, RoutedEventArgs evt) {
|
||
if (Path.GetDirectoryName(App.Config.DatabaseFile) is string path)
|
||
Process.Start("explorer.exe", path);
|
||
}
|
||
|
||
private void MemberAdminButton_Click(object sender, RoutedEventArgs evt) {
|
||
var w = new MemberAdminWindow();
|
||
w.Show();
|
||
}
|
||
|
||
private void ReceiptButton_Click(object sender, RoutedEventArgs evt) {
|
||
App.FocusReceipt();
|
||
}
|
||
|
||
private void DeliveryAdminButton_Click(object sender, RoutedEventArgs evt) {
|
||
var w = new DeliveryAdminWindow();
|
||
w.Show();
|
||
}
|
||
|
||
private void BaseDataButton_Click(object sender, RoutedEventArgs evt) {
|
||
App.FocusBaseData();
|
||
}
|
||
|
||
private void MailButton_Click(object sender, RoutedEventArgs evt) {
|
||
App.FocusMailWindow();
|
||
}
|
||
|
||
protected override Task OnRenewContext(AppDbContext ctx) {
|
||
SeasonInput_ValueChanged(null, null);
|
||
return Task.CompletedTask;
|
||
}
|
||
|
||
private void SeasonFinish_Expanded(object sender, RoutedEventArgs evt) {
|
||
Height = 530;
|
||
}
|
||
|
||
private void SeasonFinish_Collapsed(object sender, RoutedEventArgs evt) {
|
||
Height = 390;
|
||
}
|
||
|
||
private async void SeasonInput_ValueChanged(object? sender, RoutedEventArgs? evt) {
|
||
using var ctx = new AppDbContext();
|
||
var s0 = await ctx.Seasons.FindAsync(SeasonInput.Value);
|
||
var valid = (s0 != null);
|
||
DeliveryConfirmationButton.IsEnabled = valid;
|
||
OverUnderDeliveryButton.IsEnabled = valid;
|
||
AutoBusinessSharesButton.IsEnabled = valid && false;
|
||
PaymentButton.IsEnabled = valid;
|
||
}
|
||
|
||
private void DeliveryConfirmationButton_Click(object sender, RoutedEventArgs evt) {
|
||
if (SeasonInput.Value is not int year)
|
||
return;
|
||
var w = App.FocusMailWindow(year);
|
||
w.AddDeliveryConfirmation();
|
||
}
|
||
|
||
private async void OverUnderDeliveryButton_Click(object sender, RoutedEventArgs evt) {
|
||
if (SeasonInput.Value is not int year)
|
||
return;
|
||
var d = new SaveFileDialog() {
|
||
FileName = $"Über-Unterlieferungen-{year}.ods",
|
||
DefaultExt = "ods",
|
||
Filter = "OpenDocument Format Spreadsheet (*.ods)|*.ods",
|
||
Title = $"Über-/Unterlieferungen {year} speichern unter - Elwig"
|
||
};
|
||
if (d.ShowDialog() == false)
|
||
return;
|
||
|
||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||
try {
|
||
var b = new Billing(year);
|
||
await b.FinishSeason();
|
||
await b.CalculateBuckets();
|
||
await App.HintContextChange();
|
||
|
||
using var ctx = new AppDbContext();
|
||
var tbl1 = await OverUnderDeliveryData.ForSeason(ctx.OverUnderDeliveryRows, year);
|
||
var tbl2 = await AreaComUnderDeliveryData.ForSeason(ctx.AreaComUnderDeliveryRows, year);
|
||
var tbl3 = await MemberDeliveryPerVariantData.ForSeason(ctx.MemberDeliveryPerVariantRows, year);
|
||
using var ods = new OdsFile(d.FileName);
|
||
await ods.AddTable(tbl1);
|
||
await ods.AddTable(tbl2);
|
||
await ods.AddTable(tbl3);
|
||
} catch (Exception exc) {
|
||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||
}
|
||
Mouse.OverrideCursor = null;
|
||
}
|
||
|
||
private async void AutoBusinessSharesButton_Click(object sender, RoutedEventArgs evt) {
|
||
if (SeasonInput.Value is not int year)
|
||
return;
|
||
if (false && App.Client.IsMatzen) {
|
||
AutoBusinessSharesButton.IsEnabled = false;
|
||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||
|
||
var b = new Billing(year);
|
||
await b.AutoAdjustBusinessShare();
|
||
|
||
Mouse.OverrideCursor = null;
|
||
AutoBusinessSharesButton.IsEnabled = true;
|
||
} else {
|
||
MessageBox.Show(
|
||
"Es ist kein automatisches Nachzeichnen der Geschäftsanteile\n" +
|
||
"für diese Genossenschaft eingestellt!\n" +
|
||
"Bitte wenden Sie sich an die Programmierer!", "Fehler",
|
||
MessageBoxButton.OK, MessageBoxImage.Information);
|
||
}
|
||
}
|
||
|
||
private void PaymentButton_Click(object sender, RoutedEventArgs evt) {
|
||
if (SeasonInput.Value is not int year)
|
||
return;
|
||
App.FocusPaymentVariants(year);
|
||
}
|
||
}
|
||
}
|