Files
elwig/Elwig/Windows/SeasonFinishWindow.xaml.cs

86 lines
3.2 KiB
C#

using Elwig.Documents;
using Elwig.Helpers;
using Elwig.Helpers.Billing;
using Microsoft.EntityFrameworkCore;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
namespace Elwig.Windows {
public partial class SeasonFinishWindow : ContextWindow {
public SeasonFinishWindow() {
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs evt) {
SeasonInput.Value = Utils.CurrentLastSeason;
}
protected override async Task OnRenewContext() {
SeasonInput_ValueChanged(null, null);
}
private async void SeasonInput_ValueChanged(object? sender, RoutedEventArgs? evt) {
var s0 = await Context.Seasons.FindAsync(SeasonInput.Value);
var s1 = await Context.Seasons.FindAsync(SeasonInput.Value + 1);
var valid = (s0 != null);
var last = (s1 == null);
CalculateBinsButton.IsEnabled = valid && last;
DeliveryConfirmationButton.IsEnabled = valid;
OverUnderDeliveryButton.IsEnabled = valid;
}
private async void CalculateBinsButton_Click(object sender, RoutedEventArgs evt) {
if (SeasonInput.Value is not int year)
return;
CalculateBinsButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting;
var b = new Billing(year);
await b.FinishSeason();
await b.CalculateBins(
AllowAttrIntoLowerBinsInput.IsChecked ?? false,
AvoidUnderDeliveriesInput.IsChecked ?? false,
HonorGebundenInput.IsChecked ?? false);
Mouse.OverrideCursor = null;
CalculateBinsButton.IsEnabled = true;
}
private async void DeliveryConfirmationButton_Click(object sender, RoutedEventArgs evt) {
if (SeasonInput.Value is not int year)
return;
var res = MessageBox.Show(
$"Sollen wirklich alle Bestätigungen gedruckt werden?", "Ausdruck Bestätigen",
MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
if (res != MessageBoxResult.Yes)
return;
Mouse.OverrideCursor = Cursors.AppStarting;
using var doc = await Document.Merge(Context.Members.FromSqlRaw($"""
SELECT m.*
FROM member m
JOIN delivery d ON d.mgnr = m.mgnr
WHERE m.active AND d.year = {year}
GROUP BY m.mgnr
ORDER BY m.mgnr
""")
.ToList()
.Select(m => new DeliveryConfirmation(Context, year, m)));
await doc.Generate();
Mouse.OverrideCursor = null;
if (App.Config.Debug) {
doc.Show();
} else {
await doc.Print();
}
}
private void OverUnderDeliveryButton_Click(object sender, RoutedEventArgs evt) {
}
private void PaymentButton_Click(object sender, RoutedEventArgs evt) {
var w = new ChartWindow();
w.Show();
}
}
}