Compare commits
6 Commits
c9f49927a8
...
0e17aa5408
| Author | SHA1 | Date | |
|---|---|---|---|
| 0e17aa5408 | |||
| 2bf850bc55 | |||
| aadf536d13 | |||
| 3be6371be1 | |||
| ca1b68aa4f | |||
| d4e5ac6753 |
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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