Compare commits
	
		
			8 Commits
		
	
	
		
			v0.3.3
			...
			0e17aa5408
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 0e17aa5408 | |||
| 2bf850bc55 | |||
| aadf536d13 | |||
| 3be6371be1 | |||
| ca1b68aa4f | |||
| d4e5ac6753 | |||
| c9f49927a8 | |||
| 1794b5b8ca | 
| @@ -157,9 +157,12 @@ namespace Elwig { | |||||||
|  |  | ||||||
|         protected void OnPrintingReadyChanged(EventArgs evt) { |         protected void OnPrintingReadyChanged(EventArgs evt) { | ||||||
|             foreach (Window w in Windows) { |             foreach (Window w in Windows) { | ||||||
|                 foreach (var b in ControlUtils.FindAllChildren<Button>(w).Where(b => "Print".Equals(b.Tag))) { |                 foreach (var b in ControlUtils.FindAllChildren<Button>(w).Where(b => b.Tag?.ToString() == "Print")) { | ||||||
|                     b.IsEnabled = IsPrintingReady; |                     b.IsEnabled = IsPrintingReady; | ||||||
|                 } |                 } | ||||||
|  |                 foreach (var i in ControlUtils.FindAllChildren<MenuItem>(w).Where(i => i.Tag?.ToString() == "Print")) { | ||||||
|  |                     i.IsEnabled = IsPrintingReady; | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -29,10 +29,10 @@ namespace Elwig.Documents { | |||||||
|                 var b = Member.BillingAddress; |                 var b = Member.BillingAddress; | ||||||
|                 if (b != null && UseBillingAddress) { |                 if (b != null && UseBillingAddress) { | ||||||
|                     var plz = b.PostalDest.AtPlz; |                     var plz = b.PostalDest.AtPlz; | ||||||
|                     return $"{b.Name}\n{Member.AdministrativeName}\n{b.Address}\n{plz.Plz} {plz.Dest}\nÖsterreich"; |                     return $"{b.Name}\n{Member.AdministrativeName}\n{b.Address}\n{plz.Plz} {plz.Ort.Name}\n{b.Country.Name}"; | ||||||
|                 } else { |                 } else { | ||||||
|                     var plz = Member.PostalDest.AtPlz; |                     var plz = Member.PostalDest.AtPlz; | ||||||
|                     return $"{Member.AdministrativeName}\n{Member.Address}\n{plz.Plz} {plz.Dest}\nÖsterreich"; |                     return $"{Member.AdministrativeName}\n{Member.Address}\n{plz.Plz} {plz.Ort.Name}\n{Member.PostalDest.Country.Name}"; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -2,11 +2,15 @@ using System; | |||||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||||
| using System.IO; | using System.IO; | ||||||
| using Elwig.Helpers; | using Elwig.Helpers; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Text.RegularExpressions; | ||||||
|  | using System.Linq; | ||||||
|  |  | ||||||
| namespace Elwig.Documents { | namespace Elwig.Documents { | ||||||
|     public abstract class Document : IDisposable { |     public abstract partial class Document : IDisposable { | ||||||
|  |  | ||||||
|         private TempFile? PdfFile = null; |         private TempFile? _pdfFile = null; | ||||||
|  |         private string? _renderedHtml = null; | ||||||
|  |  | ||||||
|         public bool ShowFoldMarks = App.Config.Debug; |         public bool ShowFoldMarks = App.Config.Debug; | ||||||
|  |  | ||||||
| @@ -35,17 +39,56 @@ namespace Elwig.Documents { | |||||||
|             Date = DateTime.Today; |             Date = DateTime.Today; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         [GeneratedRegex(@"</body>.*?</footer>\s*</div>", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled)] | ||||||
|  |         private static partial Regex GeneratedDocumentHeaderRegex(); | ||||||
|  |         private static readonly Regex DocumentHeaderRegex = GeneratedDocumentHeaderRegex(); | ||||||
|  |  | ||||||
|  |         [GeneratedRegex(@"<style>.*?/style>", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled)] | ||||||
|  |         private static partial Regex GeneratedHtmlStyleRegex(); | ||||||
|  |         private static readonly Regex HtmlStyleRegex = GeneratedHtmlStyleRegex(); | ||||||
|  |  | ||||||
|  |         [GeneratedRegex(@"<link[^>]*>", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled)] | ||||||
|  |         private static partial Regex GeneratedHtmlLinkRegex(); | ||||||
|  |         private static readonly Regex HtmlLinkRegex = GeneratedHtmlLinkRegex(); | ||||||
|  |  | ||||||
|         ~Document() { |         ~Document() { | ||||||
|             Dispose(); |             Dispose(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public void Dispose() { |         public void Dispose() { | ||||||
|             PdfFile?.Dispose(); |             _pdfFile?.Dispose(); | ||||||
|             PdfFile = null; |             _pdfFile = null; | ||||||
|             GC.SuppressFinalize(this); |             GC.SuppressFinalize(this); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         private Task<string> Render() { |         public static async Task<Document> Merge(IEnumerable<Document> docs) { | ||||||
|  |             string html = ""; | ||||||
|  |             var styles = new List<string>(); | ||||||
|  |             foreach (var d in docs) { | ||||||
|  |                 var h = await d.Render(); | ||||||
|  |                 var s = HtmlStyleRegex.Matches(h).Select(m => m.Value).ToList(); | ||||||
|  |                 var l = HtmlLinkRegex.Matches(h).Select(m => m.Value).ToList(); | ||||||
|  |                 if (s.All(styles.Contains)) { | ||||||
|  |                     h = HtmlStyleRegex.Replace(h, ""); | ||||||
|  |                 } else { | ||||||
|  |                     styles.AddRange(s); | ||||||
|  |                 } | ||||||
|  |                 if (l.All(styles.Contains)) { | ||||||
|  |                     h = HtmlLinkRegex.Replace(h, ""); | ||||||
|  |                 } else { | ||||||
|  |                     styles.AddRange(l); | ||||||
|  |                 } | ||||||
|  |                 html += h; | ||||||
|  |             } | ||||||
|  |             html = DocumentHeaderRegex.Replace(html, "<div class='document-break'/>"); | ||||||
|  |             return new InternalDocument("Mehrere Dokumente") { | ||||||
|  |                 _renderedHtml = html, | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private async Task<string> Render() { | ||||||
|  |             if (_renderedHtml != null) | ||||||
|  |                 return _renderedHtml; | ||||||
|             string name; |             string name; | ||||||
|             if (this is BusinessLetter) { |             if (this is BusinessLetter) { | ||||||
|                 name = "BusinessLetter"; |                 name = "BusinessLetter"; | ||||||
| @@ -55,14 +98,17 @@ namespace Elwig.Documents { | |||||||
|                 name = "CreditNote"; |                 name = "CreditNote"; | ||||||
|             } else if (this is DeliveryJournal) { |             } else if (this is DeliveryJournal) { | ||||||
|                 name = "DeliveryJournal"; |                 name = "DeliveryJournal"; | ||||||
|  |             } else if (this is Letterhead) { | ||||||
|  |                 name = "Letterhead"; | ||||||
|             } else { |             } else { | ||||||
|                 throw new InvalidOperationException("Invalid document object"); |                 throw new InvalidOperationException("Invalid document object"); | ||||||
|             } |             } | ||||||
|             return Render(name); |             return await Render(name); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         private Task<string> Render(string name) { |         private async Task<string> Render(string name) { | ||||||
|             return Html.CompileRenderAsync(name, this); |             _renderedHtml = await Html.CompileRenderAsync(name, this); | ||||||
|  |             return _renderedHtml; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public async Task Generate() { |         public async Task Generate() { | ||||||
| @@ -71,22 +117,26 @@ namespace Elwig.Documents { | |||||||
|                 await File.WriteAllTextAsync(tmpHtml.FilePath, await Render(), Utils.UTF8); |                 await File.WriteAllTextAsync(tmpHtml.FilePath, await Render(), Utils.UTF8); | ||||||
|                 await Pdf.Convert(tmpHtml.FilePath, pdf.FilePath); |                 await Pdf.Convert(tmpHtml.FilePath, pdf.FilePath); | ||||||
|             } |             } | ||||||
|             PdfFile = pdf; |             _pdfFile = pdf; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public void SaveTo(string pdfPath) { |         public void SaveTo(string pdfPath) { | ||||||
|             if (PdfFile == null) throw new InvalidOperationException("Pdf file has not been generated yet"); |             if (_pdfFile == null) throw new InvalidOperationException("Pdf file has not been generated yet"); | ||||||
|             File.Copy(PdfFile.FilePath, pdfPath); |             File.Copy(_pdfFile.FilePath, pdfPath); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public async Task Print(int copies = 1) { |         public async Task Print(int copies = 1) { | ||||||
|             if (PdfFile == null) throw new InvalidOperationException("Pdf file has not been generated yet"); |             if (_pdfFile == null) throw new InvalidOperationException("Pdf file has not been generated yet"); | ||||||
|             await Pdf.Print(PdfFile.FilePath, copies); |             await Pdf.Print(_pdfFile.FilePath, copies); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public void Show() { |         public void Show() { | ||||||
|             if (PdfFile == null) throw new InvalidOperationException("Pdf file has not been generated yet"); |             if (_pdfFile == null) throw new InvalidOperationException("Pdf file has not been generated yet"); | ||||||
|             Pdf.Show(PdfFile.NewReference(), Title); |             Pdf.Show(_pdfFile.NewReference(), Title); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private class InternalDocument : Document { | ||||||
|  |             public InternalDocument(string title) : base(title) { } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ namespace Elwig.Documents { | |||||||
|             await e.CompileTemplateAsync("DeliveryNote"); |             await e.CompileTemplateAsync("DeliveryNote"); | ||||||
|             await e.CompileTemplateAsync("CreditNote"); |             await e.CompileTemplateAsync("CreditNote"); | ||||||
|             await e.CompileTemplateAsync("DeliveryJournal"); |             await e.CompileTemplateAsync("DeliveryJournal"); | ||||||
|  |             await e.CompileTemplateAsync("Letterhead"); | ||||||
|  |  | ||||||
|             Engine = e; |             Engine = e; | ||||||
|             evtHandler(); |             evtHandler(); | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								Elwig/Documents/Letterhead.cshtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								Elwig/Documents/Letterhead.cshtml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | @using RazorLight | ||||||
|  | @inherits TemplatePage<Elwig.Documents.Letterhead> | ||||||
|  | @model Elwig.Documents.Letterhead | ||||||
|  | @{ Layout = "BusinessDocument"; } | ||||||
|  | <style> | ||||||
|  |     header, .footer-wrapper { | ||||||
|  |         visibility: hidden; | ||||||
|  |     } | ||||||
|  | </style> | ||||||
							
								
								
									
										9
									
								
								Elwig/Documents/Letterhead.cshtml.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								Elwig/Documents/Letterhead.cshtml.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | using Elwig.Models; | ||||||
|  |  | ||||||
|  | namespace Elwig.Documents { | ||||||
|  |     public class Letterhead : BusinessDocument { | ||||||
|  |         public Letterhead(Member m) : base($"Briefkopf {m.Name}", m, true) { | ||||||
|  |             Aside = ""; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -59,6 +59,7 @@ namespace Elwig.Documents { | |||||||
|         public static async Task Print(string path, int copies = 1) { |         public static async Task Print(string path, int copies = 1) { | ||||||
|             var p = new Process() { StartInfo = new() { FileName = PdfToPrinter } }; |             var p = new Process() { StartInfo = new() { FileName = PdfToPrinter } }; | ||||||
|             p.StartInfo.ArgumentList.Add(path); |             p.StartInfo.ArgumentList.Add(path); | ||||||
|  |             p.StartInfo.ArgumentList.Add("/s"); | ||||||
|             p.StartInfo.ArgumentList.Add($"copies={copies}"); |             p.StartInfo.ArgumentList.Add($"copies={copies}"); | ||||||
|             p.Start(); |             p.Start(); | ||||||
|             await p.WaitForExitAsync(); |             await p.WaitForExitAsync(); | ||||||
|   | |||||||
| @@ -20,6 +20,9 @@ | |||||||
| hr.page-break { | hr.page-break { | ||||||
|     display: none; |     display: none; | ||||||
| } | } | ||||||
|  | .document-break { | ||||||
|  |     break-before: page; | ||||||
|  | } | ||||||
|  |  | ||||||
| @page { | @page { | ||||||
|     size: A4; |     size: A4; | ||||||
|   | |||||||
| @@ -58,7 +58,8 @@ namespace Elwig.Helpers { | |||||||
|                     continue; |                     continue; | ||||||
|                 } else if (child is T t) { |                 } else if (child is T t) { | ||||||
|                     yield return t; |                     yield return t; | ||||||
|                 } else if (child is DependencyObject childDepOpj) { |                 } | ||||||
|  |                 if (child is DependencyObject childDepOpj) { | ||||||
|                     foreach (T childOfChild in FindAllChildren<T>(childDepOpj)) { |                     foreach (T childOfChild in FindAllChildren<T>(childDepOpj)) { | ||||||
|                         yield return childOfChild; |                         yield return childOfChild; | ||||||
|                     } |                     } | ||||||
|   | |||||||
| @@ -157,8 +157,12 @@ namespace Elwig.Helpers { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         public static void MailTo(string emailAddress) { |         public static void MailTo(string emailAddress) { | ||||||
|  |             MailTo(new string[] { emailAddress }); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public static void MailTo(IEnumerable<string> emailAddresses) { | ||||||
|             Process.Start(new ProcessStartInfo() { |             Process.Start(new ProcessStartInfo() { | ||||||
|                 FileName = $"mailto:{emailAddress}", |                 FileName = $"mailto:{string.Join(",%20", emailAddresses)}", | ||||||
|                 UseShellExecute = true, |                 UseShellExecute = true, | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -62,13 +62,13 @@ | |||||||
|                 <MenuItem x:Name="Menu_Print_PrintDeliveryNote" Header="Lieferschein drucken" IsEnabled="False" |                 <MenuItem x:Name="Menu_Print_PrintDeliveryNote" Header="Lieferschein drucken" IsEnabled="False" | ||||||
|                           Click="Menu_Print_PrintDeliveryNote_Click"/> |                           Click="Menu_Print_PrintDeliveryNote_Click"/> | ||||||
|                 <MenuItem x:Name="Menu_Print_DeliveryJournal" Header="Lieferjournal"> |                 <MenuItem x:Name="Menu_Print_DeliveryJournal" Header="Lieferjournal"> | ||||||
|                     <MenuItem x:Name="Menu_Print_DeliveryJournal_ShowToday" Header="von heute anzeigen" |                     <MenuItem x:Name="Menu_Print_DeliveryJournal_ShowToday" Header="von heute anzeigen" IsEnabled="False" Tag="Print" | ||||||
|                               Click="Menu_Print_DeliveryJournal_ShowToday_Click"/> |                               Click="Menu_Print_DeliveryJournal_ShowToday_Click"/> | ||||||
|                     <MenuItem x:Name="Menu_Print_DeliveryJournal_PrintToday" Header="von heute drucken" |                     <MenuItem x:Name="Menu_Print_DeliveryJournal_PrintToday" Header="von heute drucken" IsEnabled="False" Tag="Print" | ||||||
|                               Click="Menu_Print_DeliveryJournal_PrintToday_Click"/> |                               Click="Menu_Print_DeliveryJournal_PrintToday_Click"/> | ||||||
|                     <MenuItem x:Name="Menu_Print_DeliveryJournal_ShowFilter" Header="aus Filtern anzeigen" |                     <MenuItem x:Name="Menu_Print_DeliveryJournal_ShowFilter" Header="aus Filtern anzeigen" IsEnabled="False" Tag="Print" | ||||||
|                               Click="Menu_Print_DeliveryJournal_ShowFilter_Click"/> |                               Click="Menu_Print_DeliveryJournal_ShowFilter_Click"/> | ||||||
|                     <MenuItem x:Name="Menu_Print_DeliveryJournal_PrintFilter" Header="aus Filtern drucken" |                     <MenuItem x:Name="Menu_Print_DeliveryJournal_PrintFilter" Header="aus Filtern drucken" IsEnabled="False" Tag="Print" | ||||||
|                               Click="Menu_Print_DeliveryJournal_PrintFilter_Click"/> |                               Click="Menu_Print_DeliveryJournal_PrintFilter_Click"/> | ||||||
|                 </MenuItem> |                 </MenuItem> | ||||||
|             </MenuItem> |             </MenuItem> | ||||||
|   | |||||||
| @@ -94,6 +94,11 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private void Window_Loaded(object sender, RoutedEventArgs evt) { |         private void Window_Loaded(object sender, RoutedEventArgs evt) { | ||||||
|  |             Menu_Print_DeliveryJournal_ShowToday.IsEnabled = App.IsPrintingReady; | ||||||
|  |             Menu_Print_DeliveryJournal_PrintToday.IsEnabled = App.IsPrintingReady; | ||||||
|  |             Menu_Print_DeliveryJournal_ShowFilter.IsEnabled = App.IsPrintingReady; | ||||||
|  |             Menu_Print_DeliveryJournal_PrintFilter.IsEnabled = App.IsPrintingReady; | ||||||
|  |  | ||||||
|             OnSecondPassed(null, null); |             OnSecondPassed(null, null); | ||||||
|             Timer.Start(); |             Timer.Start(); | ||||||
|             LockInputs(); |             LockInputs(); | ||||||
| @@ -108,7 +113,7 @@ namespace Elwig.Windows { | |||||||
|  |  | ||||||
|         private async void Menu_Print_ShowDeliveryNote_Click(object sender, RoutedEventArgs evt) { |         private async void Menu_Print_ShowDeliveryNote_Click(object sender, RoutedEventArgs evt) { | ||||||
|             if (DeliveryList.SelectedItem is not Delivery d) return; |             if (DeliveryList.SelectedItem is not Delivery d) return; | ||||||
|             Mouse.OverrideCursor = Cursors.Wait; |             Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|             using var doc = new DeliveryNote(d, Context); |             using var doc = new DeliveryNote(d, Context); | ||||||
|             await doc.Generate(); |             await doc.Generate(); | ||||||
|             Mouse.OverrideCursor = null; |             Mouse.OverrideCursor = null; | ||||||
| @@ -117,7 +122,7 @@ namespace Elwig.Windows { | |||||||
|  |  | ||||||
|         private async void Menu_Print_PrintDeliveryNote_Click(object sender, RoutedEventArgs evt) { |         private async void Menu_Print_PrintDeliveryNote_Click(object sender, RoutedEventArgs evt) { | ||||||
|             if (DeliveryList.SelectedItem is not Delivery d) return; |             if (DeliveryList.SelectedItem is not Delivery d) return; | ||||||
|             Mouse.OverrideCursor = Cursors.Wait; |             Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|             using var doc = new DeliveryNote(d, Context); |             using var doc = new DeliveryNote(d, Context); | ||||||
|             await doc.Generate(); |             await doc.Generate(); | ||||||
|             Mouse.OverrideCursor = null; |             Mouse.OverrideCursor = null; | ||||||
| @@ -134,7 +139,7 @@ namespace Elwig.Windows { | |||||||
|                 Title = $"Traubentransportscheinliste (BKI) speichern unter - Elwig" |                 Title = $"Traubentransportscheinliste (BKI) speichern unter - Elwig" | ||||||
|             }; |             }; | ||||||
|             if (d.ShowDialog() == true) { |             if (d.ShowDialog() == true) { | ||||||
|                 Mouse.OverrideCursor = Cursors.Wait; |                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|                 using var file = new Bki(d.FileName); |                 using var file = new Bki(d.FileName); | ||||||
|                 await file.ExportAsync(year); |                 await file.ExportAsync(year); | ||||||
|                 Mouse.OverrideCursor = null; |                 Mouse.OverrideCursor = null; | ||||||
| @@ -142,7 +147,7 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private async void Menu_Print_DeliveryJournal_ShowToday_Click(object sender, RoutedEventArgs evt) { |         private async void Menu_Print_DeliveryJournal_ShowToday_Click(object sender, RoutedEventArgs evt) { | ||||||
|             Mouse.OverrideCursor = Cursors.Wait; |             Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|             var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today)); |             var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today)); | ||||||
|             await doc.Generate(); |             await doc.Generate(); | ||||||
|             Mouse.OverrideCursor = null; |             Mouse.OverrideCursor = null; | ||||||
| @@ -150,7 +155,7 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private async void Menu_Print_DeliveryJournal_PrintToday_Click(object sender, RoutedEventArgs evt) { |         private async void Menu_Print_DeliveryJournal_PrintToday_Click(object sender, RoutedEventArgs evt) { | ||||||
|             Mouse.OverrideCursor = Cursors.Wait; |             Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|             var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today)); |             var doc = new DeliveryJournal(Context, DateOnly.FromDateTime(Utils.Today)); | ||||||
|             await doc.Generate(); |             await doc.Generate(); | ||||||
|             Mouse.OverrideCursor = null; |             Mouse.OverrideCursor = null; | ||||||
| @@ -158,7 +163,7 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private async void Menu_Print_DeliveryJournal_ShowFilter_Click(object sender, RoutedEventArgs evt) { |         private async void Menu_Print_DeliveryJournal_ShowFilter_Click(object sender, RoutedEventArgs evt) { | ||||||
|             Mouse.OverrideCursor = Cursors.Wait; |             Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|             var (f, _, d, _) = await GetFilters(); |             var (f, _, d, _) = await GetFilters(); | ||||||
|             var doc = new DeliveryJournal(string.Join(" / ", f), d); |             var doc = new DeliveryJournal(string.Join(" / ", f), d); | ||||||
|             await doc.Generate(); |             await doc.Generate(); | ||||||
| @@ -167,7 +172,7 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private async void Menu_Print_DeliveryJournal_PrintFilter_Click(object sender, RoutedEventArgs evt) { |         private async void Menu_Print_DeliveryJournal_PrintFilter_Click(object sender, RoutedEventArgs evt) { | ||||||
|             Mouse.OverrideCursor = Cursors.Wait; |             Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|             var (f, _, d, _) = await GetFilters(); |             var (f, _, d, _) = await GetFilters(); | ||||||
|             var doc = new DeliveryJournal(string.Join(" / ", f), d); |             var doc = new DeliveryJournal(string.Join(" / ", f), d); | ||||||
|             await doc.Generate(); |             await doc.Generate(); | ||||||
| @@ -878,15 +883,14 @@ namespace Elwig.Windows { | |||||||
|             await RefreshDeliveryList(); |             await RefreshDeliveryList(); | ||||||
|             await RefreshDeliveryParts(); |             await RefreshDeliveryParts(); | ||||||
|             if (p?.Delivery != null) { |             if (p?.Delivery != null) { | ||||||
|                 Mouse.OverrideCursor = Cursors.Wait; |                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|                 using var doc = new DeliveryNote(p.Delivery, Context); |                 using var doc = new DeliveryNote(p.Delivery, Context); | ||||||
|                 await doc.Generate(); |                 await doc.Generate(); | ||||||
|                 Mouse.OverrideCursor = null; |                 Mouse.OverrideCursor = null; | ||||||
|                 if (App.Config.Debug) { |                 if (App.Config.Debug) { | ||||||
|                     doc.Show(); |                     doc.Show(); | ||||||
|                 } else { |                 } else { | ||||||
|                     await doc.Print(2); |                     doc.Print(2); | ||||||
|                     Activate(); |  | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             FinishButton.Cursor = null; |             FinishButton.Cursor = null; | ||||||
| @@ -950,7 +954,7 @@ namespace Elwig.Windows { | |||||||
|             try { |             try { | ||||||
|                 if (res == null || res <= 0) |                 if (res == null || res <= 0) | ||||||
|                     return; |                     return; | ||||||
|                 Mouse.OverrideCursor = Cursors.Wait; |                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|                 ClearOriginalValues(); |                 ClearOriginalValues(); | ||||||
|                 if (res >= p.Weight) { |                 if (res >= p.Weight) { | ||||||
|                     ControlUtils.SelectComboBoxItem(WineQualityLevelInput, q => (q as WineQualLevel)?.QualId, "WEI"); |                     ControlUtils.SelectComboBoxItem(WineQualityLevelInput, q => (q as WineQualLevel)?.QualId, "WEI"); | ||||||
| @@ -1032,7 +1036,7 @@ namespace Elwig.Windows { | |||||||
|                 $"Soll die Lieferung {d.LsNr} ({d.Member.AdministrativeName}, MgNr. {d.Member.MgNr}) wirklich unwiderruflich gelöscht werden?", |                 $"Soll die Lieferung {d.LsNr} ({d.Member.AdministrativeName}, MgNr. {d.Member.MgNr}) wirklich unwiderruflich gelöscht werden?", | ||||||
|                 "Lieferung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No); |                 "Lieferung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No); | ||||||
|             if (r == MessageBoxResult.Yes) { |             if (r == MessageBoxResult.Yes) { | ||||||
|                 Mouse.OverrideCursor = Cursors.Wait; |                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|                 Context.Remove(d); |                 Context.Remove(d); | ||||||
|                 await Context.SaveChangesAsync(); |                 await Context.SaveChangesAsync(); | ||||||
|                 await RefreshDeliveryList(); |                 await RefreshDeliveryList(); | ||||||
| @@ -1119,7 +1123,7 @@ namespace Elwig.Windows { | |||||||
|             EntityEntry<Delivery>? entry = null; |             EntityEntry<Delivery>? entry = null; | ||||||
|             try { |             try { | ||||||
|                 Delivery? d = null; |                 Delivery? d = null; | ||||||
|                 Mouse.OverrideCursor = Cursors.Wait; |                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|                 if (res == "new") { |                 if (res == "new") { | ||||||
|                     d = Context.CreateProxy<Delivery>(); |                     d = Context.CreateProxy<Delivery>(); | ||||||
|                     d.Date = delivery.Date; |                     d.Date = delivery.Date; | ||||||
| @@ -1170,7 +1174,7 @@ namespace Elwig.Windows { | |||||||
|                 $"Soll die Teillieferung Nr. {p.DPNr} wirklich unwiderruflich gelöscht werden?", |                 $"Soll die Teillieferung Nr. {p.DPNr} wirklich unwiderruflich gelöscht werden?", | ||||||
|                 "Lieferung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No); |                 "Lieferung löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No); | ||||||
|             if (r == MessageBoxResult.Yes) { |             if (r == MessageBoxResult.Yes) { | ||||||
|                 Mouse.OverrideCursor = Cursors.Wait; |                 Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|                 Context.Remove(p); |                 Context.Remove(p); | ||||||
|                 await Context.SaveChangesAsync(); |                 await Context.SaveChangesAsync(); | ||||||
|                 await RefreshDeliveryParts(); |                 await RefreshDeliveryParts(); | ||||||
|   | |||||||
| @@ -55,7 +55,12 @@ | |||||||
|             </MenuItem> |             </MenuItem> | ||||||
|             <MenuItem Header="Drucken"> |             <MenuItem Header="Drucken"> | ||||||
|                 <MenuItem Header="Stammdatenblatt drucken"/> |                 <MenuItem Header="Stammdatenblatt drucken"/> | ||||||
|                 <MenuItem Header="Mitgliederliste drucken"/> |                 <MenuItem Header="Briefköpfe drucken"> | ||||||
|  |                     <MenuItem x:Name="Menu_Print_Letterheads_MgNr" Header="nach MgNr. sortiert" IsEnabled="False" Tag="Print" | ||||||
|  |                               Click="Menu_Print_Letterheads_MgNr_Click"/> | ||||||
|  |                     <MenuItem x:Name="Menu_Print_Letterheads_Name" Header="nach Name sortiert" IsEnabled="False" Tag="Print" | ||||||
|  |                               Click="Menu_Print_Letterheads_Name_Click"/> | ||||||
|  |                 </MenuItem> | ||||||
|             </MenuItem> |             </MenuItem> | ||||||
|             <MenuItem Header="Rundschreiben"> |             <MenuItem Header="Rundschreiben"> | ||||||
|                 <MenuItem Header="Runschreiben ausschicken"/> |                 <MenuItem Header="Runschreiben ausschicken"/> | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ using Elwig.Models; | |||||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||||
| using Microsoft.EntityFrameworkCore.ChangeTracking; | using Microsoft.EntityFrameworkCore.ChangeTracking; | ||||||
| using System.Collections.ObjectModel; | using System.Collections.ObjectModel; | ||||||
|  | using Elwig.Documents; | ||||||
|  |  | ||||||
| namespace Elwig.Windows { | namespace Elwig.Windows { | ||||||
|     public partial class MemberAdminWindow : AdministrationWindow { |     public partial class MemberAdminWindow : AdministrationWindow { | ||||||
| @@ -54,6 +55,9 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private void Window_Loaded(object sender, RoutedEventArgs evt) { |         private void Window_Loaded(object sender, RoutedEventArgs evt) { | ||||||
|  |             Menu_Print_Letterheads_MgNr.IsEnabled = App.IsPrintingReady; | ||||||
|  |             Menu_Print_Letterheads_Name.IsEnabled = App.IsPrintingReady; | ||||||
|  |  | ||||||
|             ActiveMemberInput.IsChecked = true; |             ActiveMemberInput.IsChecked = true; | ||||||
|             UpdatePhoneNrInputVisibility(); |             UpdatePhoneNrInputVisibility(); | ||||||
|             LockInputs(); |             LockInputs(); | ||||||
| @@ -266,7 +270,26 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private void Menu_Member_SendEmail_Click(object sender, RoutedEventArgs evt) { |         private void Menu_Member_SendEmail_Click(object sender, RoutedEventArgs evt) { | ||||||
|             Utils.MailTo(((Member)MemberList.SelectedItem).EmailAddresses.First().Address); |             Utils.MailTo(((Member)MemberList.SelectedItem).EmailAddresses.Select(a => a.Address)); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private async void Menu_Print_Letterheads_MgNr_Click(object sender, RoutedEventArgs evt) { | ||||||
|  |             using var d = await Document.Merge(Context.Members | ||||||
|  |                 .Where(m => m.IsActive) | ||||||
|  |                 .OrderBy(m => m.MgNr) | ||||||
|  |                 .Select(m => new Letterhead(m))); | ||||||
|  |             await d.Generate(); | ||||||
|  |             d.Show(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private async void Menu_Print_Letterheads_Name_Click(object sender, RoutedEventArgs evt) { | ||||||
|  |             using var d = await Document.Merge(Context.Members | ||||||
|  |                 .Where(m => m.IsActive) | ||||||
|  |                 .OrderBy(m => m.FamilyName) | ||||||
|  |                 .ThenBy(m => m.GivenName) | ||||||
|  |                 .Select(m => new Letterhead(m))); | ||||||
|  |             await d.Generate(); | ||||||
|  |             d.Show(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         private void FocusSearchInput(object sender, RoutedEventArgs evt) { |         private void FocusSearchInput(object sender, RoutedEventArgs evt) { | ||||||
|   | |||||||
| @@ -19,9 +19,9 @@ | |||||||
|         <Button x:Name="ChartButton" Content="Chart" Click="ChartButton_Click" |         <Button x:Name="ChartButton" Content="Chart" Click="ChartButton_Click" | ||||||
|                 Margin="50,240,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/> |                 Margin="50,240,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/> | ||||||
|  |  | ||||||
|         <Button x:Name="PdfDeliveryButton" Content="Lieferschein Erzeugen" Click="PdfDeliveryButton_Click" Tag="Print" |         <Button x:Name="PdfDeliveryButton" Content="Lieferschein Erzeugen" Click="PdfDeliveryButton_Click" Tag="Print" IsEnabled="False" | ||||||
|                 Margin="260,190,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/> |                 Margin="260,190,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/> | ||||||
|         <Button x:Name="PdfCreditButton" Content="Gutschrift Erzeugen" Click="PdfCreditButton_Click" Tag="Print" |         <Button x:Name="PdfCreditButton" Content="Gutschrift Erzeugen" Click="PdfCreditButton_Click" Tag="Print" IsEnabled="False" | ||||||
|                 Margin="260,160,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/> |                 Margin="260,160,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/> | ||||||
|     </Grid> |     </Grid> | ||||||
| </Window> | </Window> | ||||||
|   | |||||||
| @@ -51,7 +51,7 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private async void PdfDeliveryButton_Click(object sender, RoutedEventArgs evt) { |         private async void PdfDeliveryButton_Click(object sender, RoutedEventArgs evt) { | ||||||
|             Mouse.OverrideCursor = Cursors.Wait; |             Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|             using var ctx = new AppDbContext(); |             using var ctx = new AppDbContext(); | ||||||
|             using var doc = new DeliveryNote(await ctx.Deliveries.OrderBy(d => d.Parts.Count).ThenBy(d => d.Year).ThenBy(d => d.DId).LastAsync(), ctx); |             using var doc = new DeliveryNote(await ctx.Deliveries.OrderBy(d => d.Parts.Count).ThenBy(d => d.Year).ThenBy(d => d.DId).LastAsync(), ctx); | ||||||
|             await doc.Generate(); |             await doc.Generate(); | ||||||
| @@ -60,7 +60,7 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private async void PdfCreditButton_Click(object sender, RoutedEventArgs evt) { |         private async void PdfCreditButton_Click(object sender, RoutedEventArgs evt) { | ||||||
|             Mouse.OverrideCursor = Cursors.Wait; |             Mouse.OverrideCursor = Cursors.AppStarting; | ||||||
|             using var ctx = new AppDbContext(); |             using var ctx = new AppDbContext(); | ||||||
|             using var doc = new CreditNote(await ctx.Credits.FirstAsync(), ctx); |             using var doc = new CreditNote(await ctx.Credits.FirstAsync(), ctx); | ||||||
|             await doc.Generate(); |             await doc.Generate(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user