using Elwig.Documents; using Elwig.Models.Dtos; using Elwig.Models.Entities; using Elwig.Windows; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; namespace Elwig.Dialogs { public partial class DeliveryConfirmationsWindow : ContextWindow { public readonly int Year; public DeliveryConfirmationsWindow(int year) { InitializeComponent(); Year = year; Title = $"Anlieferungsbestätigungen - Lese {Year} - Elwig"; TextElement.Text = App.Client.TextDeliveryConfirmation; } private void Window_Loaded(object sender, RoutedEventArgs evt) { ShowButton.IsEnabled = App.IsPrintingReady; PrintButton.IsEnabled = App.IsPrintingReady; } protected override async Task OnRenewContext() { } private async Task UpdateTextParameter() { var text = TextElement.Text; if (text.Length == 0) text = null; if (text != App.Client.TextDeliveryConfirmation) { App.Client.TextDeliveryConfirmation = text; await App.Client.UpdateValues(); } } private async Task Generate(int mode) { Mouse.OverrideCursor = Cursors.AppStarting; await UpdateTextParameter(); IQueryable members; if (AllMembersInput.IsChecked == true) { members = Context.Members.Where(m => m.IsActive); } else { 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 """); } if (OrderMgNrInput.IsChecked == true) { members = members .OrderBy(m => m.MgNr); } else if (OrderNameInput.IsChecked == true) { members = members .OrderBy(m => m.FamilyName) .ThenBy(m => m.GivenName) .ThenBy(m => m.MgNr); } else if (OrderPlzInput.IsChecked == true) { members = members .OrderBy(m => m.PostalDest.AtPlz.Plz) .ThenBy(m => m.PostalDest.AtPlz.Ort.Name) .ThenBy(m => m.FamilyName) .ThenBy(m => m.GivenName) .ThenBy(m => m.MgNr); } IEnumerable list = await members.ToListAsync(); var data = await DeliveryConfirmationData.ForSeason(Context.DeliveryParts, Year); using var doc = Document.Merge(list.Select(m => new DeliveryConfirmation(Context, Year, m, data.TryGetValue(m.MgNr, out var d) ? d : DeliveryConfirmationData.CreateEmpty(Year, m)) { //DoubleSided = true } )); //doc.DoubleSided = true; await doc.Generate(new Progress(v => { ProgressBar.Value = v; })); Mouse.OverrideCursor = null; if (mode < 2) { doc.Show(); return; } if (App.Config.Debug) { doc.Show(); } else { await doc.Print(); } Close(); } private async void ShowButton_Click(object sender, RoutedEventArgs evt) { await Generate(1); } private async void PrintButton_Click(object sender, RoutedEventArgs evt) { await Generate(2); } } }