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

164 lines
5.8 KiB
C#

using Elwig.Documents;
using Elwig.Helpers;
using Elwig.Models.Dtos;
using Elwig.Models.Entities;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Elwig.Helpers.Billing;
namespace Elwig.Windows {
public partial class PaymentVariantsWindow : ContextWindow {
public readonly int Year;
public PaymentVariantsWindow(int year) {
InitializeComponent();
Year = year;
Title = $"Auszahlungsvarianten - Lese {Year} - Elwig";
}
protected override async Task OnRenewContext() {
ControlUtils.RenewItemsSource(PaymentVariantList, await Context.PaymentVariants.Where(v => v.Year == Year).OrderBy(v => v.AvNr).ToListAsync(), v => (v as PaymentVar)?.AvNr);
Update();
}
private void Update() {
if (PaymentVariantList.SelectedItem is PaymentVar v) {
var locked = !v.TestVariant;
DeleteButton.IsEnabled = !locked;
CalculateButton.IsEnabled = !locked;
CommitButton.IsEnabled = !locked;
RevertButton.IsEnabled = locked;
CopyButton.IsEnabled = true;
EditButton.IsEnabled = true;
ShowButton.IsEnabled = true;
PrintButton.IsEnabled = true;
NameInput.Text = v.Name;
CommentInput.Text = v.Comment;
} else {
EditButton.IsEnabled = false;
CopyButton.IsEnabled = false;
CalculateButton.IsEnabled = false;
CommitButton.IsEnabled = false;
RevertButton.IsEnabled = false;
DeleteButton.IsEnabled = false;
ShowButton.IsEnabled = false;
PrintButton.IsEnabled = false;
NameInput.Text = "";
CommentInput.Text = "";
}
}
private void PaymentVariantList_SelectionChanged(object sender, SelectionChangedEventArgs evt) {
Update();
}
private void AddButton_Click(object sender, RoutedEventArgs evt) {
}
private void CopyButton_Click(object sender, RoutedEventArgs evt) {
}
private void DeleteButton_Click(object sender, RoutedEventArgs evt) {
}
private async void CalculateButton_Click(object sender, RoutedEventArgs evt) {
if (PaymentVariantList.SelectedValue is not PaymentVar v)
return;
CalculateButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting;
var b = new BillingVariant(v.Year, v.AvNr);
await b.Calculate();
Mouse.OverrideCursor = null;
CalculateButton.IsEnabled = true;
}
private void EditButton_Click(object sender, RoutedEventArgs evt) {
if (PaymentVariantList.SelectedItem is not PaymentVar v)
return;
App.FocusChartWindow(v.Year, v.AvNr);
}
private async void ShowButton_Click(object sender, RoutedEventArgs evt) {
await Generate(1);
}
private async void PrintButton_Click(object sender, RoutedEventArgs evt) {
await Generate(2);
}
private async void CommitButton_Click(object sender, RoutedEventArgs e) {
if (PaymentVariantList.SelectedValue is not PaymentVar v)
return;
CommitButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting;
var b = new BillingVariant(v.Year, v.AvNr);
await b.Commit();
Mouse.OverrideCursor = null;
RevertButton.IsEnabled = true;
await HintContextChange();
}
private async void RevertButton_Click(object sender, RoutedEventArgs e) {
if (PaymentVariantList.SelectedValue is not PaymentVar v)
return;
RevertButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting;
var b = new BillingVariant(v.Year, v.AvNr);
await b.Revert();
Mouse.OverrideCursor = null;
CommitButton.IsEnabled = true;
await HintContextChange();
}
private async Task Generate(int mode) {
if (PaymentVariantList.SelectedItem is not PaymentVar v)
return;
Mouse.OverrideCursor = Cursors.AppStarting;
var members = Context.Members.FromSqlRaw($"""
SELECT m.*
FROM member m
INNER JOIN delivery d ON d.mgnr = m.mgnr
WHERE d.year = {Year}
GROUP BY m.mgnr
""");
members = members.OrderBy(m => m.MgNr);
IEnumerable<Member> list = await members.ToListAsync();
var data = await CreditNoteData.ForPaymentVariant(Context.CreditNoteRows, Context.Seasons, v.Year, v.AvNr);
var payments = await Context.MemberPayments.Where(p => p.Year == v.Year && p.AvNr == v.AvNr).ToDictionaryAsync(c => c.MgNr);
await Context.GetMemberAreaCommitmentBuckets(Year, 0);
using var doc = Document.Merge(list.Select(m =>
new CreditNote(Context, payments[m.MgNr], data[m.MgNr], Context.GetMemberUnderDelivery(Year, m.MgNr).GetAwaiter().GetResult())
));
await doc.Generate(new Progress<double>(v => {
ProgressBar.Value = v;
}));
Mouse.OverrideCursor = null;
if (mode < 2) {
doc.Show();
return;
}
if (App.Config.Debug) {
doc.Show();
} else {
await doc.Print();
}
}
}
}