164 lines
5.8 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|