Compare commits

...

9 Commits

Author SHA1 Message Date
1fc736ce16 Bump version to 0.12.0
All checks were successful
Test / Run tests (push) Successful in 1m54s
Deploy / Build and Deploy (push) Successful in 2m9s
2024-09-24 23:10:17 +02:00
ce39797d8b [#56] Windows: Fail gracefully while saving
All checks were successful
Test / Run tests (push) Successful in 2m11s
2024-09-24 20:10:26 +02:00
94a6dd5312 Printing: Replace PDFtoPrinter with PdfiumViewer 2024-09-24 20:10:26 +02:00
b67857ae22 [#56] AppDbContext: Turn off connection pooling 2024-09-24 20:10:26 +02:00
a48ea8e7e2 Printing/Pdf: Small fixes 2024-09-24 20:10:21 +02:00
0f87446906 Bump version to 0.11.4
All checks were successful
Test / Run tests (push) Successful in 1m47s
Deploy / Build and Deploy (push) Successful in 2m7s
2024-09-22 23:33:45 +02:00
e0fcaf1f53 Services: Fix spacing in tool tip grids
All checks were successful
Test / Run tests (push) Successful in 2m3s
2024-09-22 23:22:23 +02:00
26e549caa6 Bump version to 0.11.3
All checks were successful
Test / Run tests (push) Successful in 1m37s
Deploy / Build and Deploy (push) Successful in 2m28s
2024-09-22 21:05:42 +02:00
1d187c25f3 MemberAdminWindow: Revert caching of MembersDeliveries
All checks were successful
Test / Run tests (push) Successful in 1m46s
2024-09-22 21:01:48 +02:00
21 changed files with 234 additions and 104 deletions

View File

@ -3,9 +3,65 @@ Changelog
=========
[v0.12.0][v0.12.0] (2024-09-24) {#v0.12.0}
------------------------------------------
### Behobene Fehler {#v0.12.0-bugfixes}
* Das Drucken von Dokumenten ist wieder möglich. (94a6dd5312, a48ea8e7e2)
### Sonstiges {#v0.12.0-misc}
* Versuch 1: `Database is locked` Fehler beheben. ([#56][i56])
[v0.12.0]: https://git.necronda.net/winzer/elwig/releases/tag/v0.12.0
[i56]: https://git.necronda.net/winzer/elwig/issues/56
[v0.11.4][v0.11.4] (2024-09-22) {#v0.11.4}
------------------------------------------
> [!WARNING]
> Aufgrund eines Fehlers ist in dieser Version das Drucken von Dokumenten nicht möglich!
>
> Es wird empfohlen die nächste Version zu verwenden.
### Behobene Fehler {#v0.11.4-bugfixes}
* In den Tooltips für Gewicht und Flächenbindungen wurden die Abstände wieder hergestellt. (e0fcaf1f53)
[v0.11.4]: https://git.necronda.net/winzer/elwig/releases/tag/v0.11.4
[v0.11.3][v0.11.3] (2024-09-22) {#v0.11.3}
------------------------------------------
> [!WARNING]
> Aufgrund eines Fehlers ist in dieser Version das Drucken von Dokumenten nicht möglich!
>
> Es wird empfohlen Version 0.12.0 zu verwenden.
### Behobene Fehler {#v0.11.3-bugfixes}
* Im Mitglieder-Fenster (`MemberAdminWindow`) wurde das Berechnen der Mitgliederdaten pro Jahr und Mitglied rückgängig gemacht. (1d187c25f3)
[v0.11.3]: https://git.necronda.net/winzer/elwig/releases/tag/v0.11.3
[v0.11.2][v0.11.2] (2024-09-22) {#v0.11.2}
------------------------------------------
> [!WARNING]
> Aufgrund eines Fehlers ist in dieser Version das Drucken von Dokumenten nicht möglich!
>
> Es wird empfohlen Version 0.12.0 zu verwenden.
### Neue Funktionen {#v0.11.2-features}
* In der Anmeldeliste (`DeliveryAncmtList`) wird die Stamm-KG des Mitgliedes angegeben. (165770fa37)

View File

@ -153,7 +153,7 @@ namespace Elwig.Documents {
public async Task Print(int copies = 1) {
if (PdfPath == null) throw new InvalidOperationException("Pdf file has not been generated yet");
await Pdf.Print(PdfPath, copies);
await Pdf.Print(PdfPath, copies, DoublePaged);
}
public void Show() {

View File

@ -7,7 +7,7 @@
<UseWPF>true</UseWPF>
<PreserveCompilationContext>true</PreserveCompilationContext>
<ApplicationIcon>Resources\Images\Elwig.ico</ApplicationIcon>
<Version>0.11.2</Version>
<Version>0.12.0</Version>
<SatelliteResourceLanguages>de-AT</SatelliteResourceLanguages>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<ApplicationManifest>app.manifest</ApplicationManifest>
@ -34,6 +34,8 @@
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="8.0.0" />
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2739.15" />
<PackageReference Include="NJsonSchema" Version="11.0.2" />
<PackageReference Include="PdfiumViewer" Version="2.13.0" />
<PackageReference Include="PdfiumViewer.Native.x86_64.no_v8-no_xfa" Version="2018.4.8.256" />
<PackageReference Include="RazorLight" Version="2.3.1" />
<PackageReference Include="ScottPlot.WPF" Version="5.0.39" />
<PackageReference Include="System.IO.Ports" Version="8.0.0" />

View File

@ -78,7 +78,7 @@ namespace Elwig.Helpers {
public bool HasBackendChanged => SavedLastWriteTime != LastWriteTime;
public static string? ConnectionStringOverride { get; set; } = null;
public static string ConnectionString => ConnectionStringOverride ?? $"Data Source=\"{App.Config.DatabaseFile}\"; Mode=ReadWrite; Foreign Keys=True; Cache=Default";
public static string ConnectionString => ConnectionStringOverride ?? $"Data Source=\"{App.Config.DatabaseFile}\"; Mode=ReadWrite; Foreign Keys=True; Cache=Default; Pooling=False";
private readonly Dictionary<int, Dictionary<int, Dictionary<string, AreaComBucket>>> _memberAreaCommitmentBuckets = [];
private readonly Dictionary<int, Dictionary<int, Dictionary<string, int>>> _memberDeliveryBuckets = [];

View File

@ -8,16 +8,12 @@ using System.Windows;
using System.Text.RegularExpressions;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using PdfiumViewer;
using System.Drawing.Printing;
namespace Elwig.Helpers.Printing {
public static class Pdf {
private static readonly string PdfToPrinter = new string[] { App.ExePath }
.Union(Environment.GetEnvironmentVariable("PATH")?.Split(';') ?? [])
.Select(x => Path.Combine(x, "PDFtoPrinter.exe"))
.Where(File.Exists)
.FirstOrDefault() ?? throw new FileNotFoundException("PDFtoPrinter executable not found");
private static readonly string WinziPrint = new string[] { App.ExePath }
.Union(Environment.GetEnvironmentVariable("PATH")?.Split(';') ?? [])
.Select(x => Path.Combine(x, "WinziPrint.exe"))
@ -92,21 +88,24 @@ namespace Elwig.Helpers.Printing {
});
}
public static async Task Print(string path, int copies = 1) {
public static async Task Print(string path, int copies = 1, bool doublePaged = false) {
await Print(path, new() {
Copies = (short)copies,
Collate = true,
Duplex = doublePaged ? Duplex.Vertical : Duplex.Simplex,
});
}
public static Task Print(string path, PrinterSettings settings) {
try {
var p = new Process() { StartInfo = new() {
FileName = PdfToPrinter,
CreateNoWindow = true,
UseShellExecute = false,
} };
p.StartInfo.ArgumentList.Add(path);
p.StartInfo.ArgumentList.Add("/s");
p.StartInfo.ArgumentList.Add($"copies={copies}");
p.Start();
await p.WaitForExitAsync();
using var doc = PdfDocument.Load(path);
using var printDoc = doc.CreatePrintDocument(PdfPrintMode.CutMargin);
printDoc.PrinterSettings = settings;
printDoc.Print();
} catch (Exception e) {
MessageBox.Show("Beim Drucken ist ein Fehler aufgetreten:\n\n" + e.Message, "Fehler beim Drucken");
MessageBox.Show("Beim Drucken ist ein Fehler aufgetreten:\n\n" + e.Message, "Fehler beim Drucken", MessageBoxButton.OK, MessageBoxImage.Error);
}
return Task.CompletedTask;
}
}
}

View File

@ -242,8 +242,8 @@ namespace Elwig.Services {
AddToolTipCell(grid, "Lieferrecht", 0, 4, 1, false, false, true);
int rowNum = 1;
foreach (var row in data) {
if (rowNum == 2 || (rowNum != 1 && row.Item1 != null)) rowNum++;
AddToolTipRow(grid, rowNum++, row.Item1, row.Item2, row.Item3, row.Item4, row.Item5);
if (rowNum == 2) rowNum++;
}
return grid;
}

View File

@ -494,41 +494,35 @@ namespace Elwig.Services {
WeighingReason = vm.ManualWeighingReason,
};
try {
if (oldDelivery != null && ctx.Entry(oldDelivery) is EntityEntry<Delivery> entry) {
entry.State = EntityState.Detached;
}
if (!deliveryNew) {
ctx.Update(d);
} else {
ctx.Add(d);
}
if (!partNew) {
ctx.Update(p);
} else {
ctx.Add(p);
}
ctx.UpdateDeliveryPartModifiers(p, await ctx.DeliveryPartModifiers
.Where(m => m.Year == p.Year && m.DId == p.DId && m.DPNr == p.DPNr)
.Select(m => m.Modifier)
.ToListAsync(), vm.Modifiers);
if (originalMgNr != null && originalMgNr.Value != d.MgNr) {
// update origin (KgNr), if default is selected
var newKgNr = (await ctx.Members.FindAsync(d.MgNr))?.DefaultKgNr;
foreach (var part in d.Parts.Where(part => part.DPNr != dpnr && part.KgNr == originalMemberKgNr)) {
part.KgNr = newKgNr;
ctx.Update(part);
}
}
await ctx.SaveChangesAsync();
} catch (Exception exc) {
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
if (oldDelivery != null && ctx.Entry(oldDelivery) is EntityEntry<Delivery> entry) {
entry.State = EntityState.Detached;
}
if (!deliveryNew) {
ctx.Update(d);
} else {
ctx.Add(d);
}
if (!partNew) {
ctx.Update(p);
} else {
ctx.Add(p);
}
ctx.UpdateDeliveryPartModifiers(p, await ctx.DeliveryPartModifiers
.Where(m => m.Year == p.Year && m.DId == p.DId && m.DPNr == p.DPNr)
.Select(m => m.Modifier)
.ToListAsync(), vm.Modifiers);
if (originalMgNr != null && originalMgNr.Value != d.MgNr) {
// update origin (KgNr), if default is selected
var newKgNr = (await ctx.Members.FindAsync(d.MgNr))?.DefaultKgNr;
foreach (var part in d.Parts.Where(part => part.DPNr != dpnr && part.KgNr == originalMemberKgNr)) {
part.KgNr = newKgNr;
ctx.Update(part);
}
}
await ctx.SaveChangesAsync();
return p;
}
@ -830,8 +824,8 @@ namespace Elwig.Services {
wGrid.ColumnDefinitions.Add(new() { Width = new(50) });
int rowNum = 0;
foreach (var row in weightData) {
if (rowNum == 1 || (rowNum != 0 && row.Item1 != null)) rowNum++;
AddWeightToolTipRow(wGrid, rowNum++, row.Item1, row.Item2, row.Item3, row.Item4, row.Item5);
if (rowNum == 1) rowNum++;
}
var gGrid = new Grid();
@ -845,8 +839,8 @@ namespace Elwig.Services {
AddToolTipCell(gGrid, "Max.", 0, 4, 1, false, false, true);
rowNum = 1;
foreach (var row in gradationData) {
if (rowNum == 2 || (rowNum != 1 && row.Item1 != null)) rowNum++;
AddGradationToolTipRow(gGrid, rowNum++, row.Item1, row.Item2, row.Item3, row.Item4, row.Item5);
if (rowNum == 2) rowNum++;
}
return (wGrid, gGrid);

View File

@ -166,6 +166,14 @@ namespace Elwig.Services {
} catch { }
var (text, gridData) = await AreaComService.GenerateToolTipData(c, maxKgPerHa);
var deliveries = await ctx.Deliveries
.Where(d => d.MgNr == m.MgNr)
.GroupBy(d => d.Year)
.ToDictionaryAsync(g => g.Key, g => g.Any());
if (m.MgNr != vm.MgNr)
return;
await App.MainDispatcher.BeginInvoke(() => {
var (d1Grid, _) = DeliveryService.GenerateToolTip(d1GridData, []);
var (d2Grid, _) = DeliveryService.GenerateToolTip(d2GridData, []);
@ -179,12 +187,13 @@ namespace Elwig.Services {
vm.StatusAreaCommitmentInfo = $"{Utils.CurrentLastSeason}";
vm.StatusAreaCommitment = text;
vm.StatusAreaCommitmentToolTip = grid;
vm.MemberHasDeliveries = Enumerable.Range(0, 9999).Select(i => deliveries.GetValueOrDefault(i, false)).ToList();
});
});
vm.MemberHasEmail = m.EmailAddresses.Count > 0;
vm.MemberCanSendEmail = App.Config.Smtp != null && m.EmailAddresses.Count > 0;
vm.MemberHasDeliveries = Enumerable.Range(0, 9999).Select(i => vm.MembersDeliveries.GetValueOrDefault((m.MgNr, i), false)).ToList();
vm.MemberHasDeliveries = Enumerable.Range(0, 9999).Select(i => false).ToList();
}
public static async Task<(List<string>, IQueryable<Member>, List<string>)> GetFilters(this MemberAdminViewModel vm, AppDbContext ctx) {

View File

@ -40,7 +40,6 @@ namespace Elwig.ViewModels {
private bool _enableSearchInputs = true;
[ObservableProperty]
private IEnumerable<bool> _memberHasDeliveries = [ .. Enumerable.Range(0, 9999).Select(i => false) ];
public Dictionary<(int, int), bool> MembersDeliveries = [];
[ObservableProperty]
private bool _memberListOrderByMgNr;

View File

@ -226,14 +226,22 @@ namespace Elwig.Windows {
}
private async void AreaCommitmentSaveButton_Click(object? sender, RoutedEventArgs? evt) {
int? fbnr = null;
AreaCommitmentSaveButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting;
int fbnr;
try {
fbnr = await ViewModel.UpdateAreaCommitment((AreaCommitmentList.SelectedItem as AreaCom)?.FbNr);
} catch (Exception exc) {
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Flächenbindung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
AreaCommitmentSaveButton.IsEnabled = true;
return;
} finally {
Mouse.OverrideCursor = null;
}
IsEditing = false;
IsCreating = false;
AreaCommitmentList.IsEnabled = true;

View File

@ -6,6 +6,7 @@ using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace Elwig.Windows {
public partial class BaseDataWindow : AdministrationWindow {
@ -316,12 +317,19 @@ namespace Elwig.Windows {
}
private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) {
SaveButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting;
try {
await Save();
} catch (Exception exc) {
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Stammdaten aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
SaveButton.IsEnabled = true;
return;
} finally {
Mouse.OverrideCursor = null;
}
IsEditing = false;

View File

@ -661,6 +661,9 @@ namespace Elwig.Windows {
}
private async void SaveButton_Click(object sender, RoutedEventArgs e) {
SaveButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting;
try {
using (var ctx = new AppDbContext()) {
var origData = BillingData.FromJson(PaymentVar.Data);
@ -677,7 +680,12 @@ namespace Elwig.Windows {
var str = "Der Eintrag konnte nicht in der Datenbank gespeichert werden!\n\n" + exc.Message;
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Auszahlungsvariante speichern", MessageBoxButton.OK, MessageBoxImage.Error);
SaveButton.IsEnabled = true;
return;
} finally {
Mouse.OverrideCursor = null;
}
LockContext = true;
SetHasChanged(false);
}

View File

@ -694,14 +694,28 @@ namespace Elwig.Windows {
NewDeliveryPartButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting;
DeliveryPartList.IsEnabled = false;
var p = await ViewModel.UpdateDeliveryPart(
(DeliveryList.SelectedItem as Delivery)?.Year,
(DeliveryList.SelectedItem as Delivery)?.DId,
(DeliveryPartList.SelectedItem as DeliveryPart)?.DPNr,
InputHasChanged(DateInput),
InputHasChanged(TimeInput),
!InputIsNotDefault(TimeInput)
);
DeliveryPart? p;
try {
p = await ViewModel.UpdateDeliveryPart(
(DeliveryList.SelectedItem as Delivery)?.Year,
(DeliveryList.SelectedItem as Delivery)?.DId,
(DeliveryPartList.SelectedItem as DeliveryPart)?.DPNr,
InputHasChanged(DateInput),
InputHasChanged(TimeInput),
!InputIsNotDefault(TimeInput)
);
} catch (Exception exc) {
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
FinishButton.IsEnabled = true;
SaveButton.IsEnabled = true;
Mouse.OverrideCursor = null;
DeliveryPartList.IsEnabled = true;
return;
}
EmptyScale();
await RefreshList();
await RefreshDeliveryParts();
@ -718,14 +732,28 @@ namespace Elwig.Windows {
NewDeliveryPartButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting;
DeliveryPartList.IsEnabled = false;
var p = await ViewModel.UpdateDeliveryPart(
(DeliveryList.SelectedItem as Delivery)?.Year,
(DeliveryList.SelectedItem as Delivery)?.DId,
(DeliveryPartList.SelectedItem as DeliveryPart)?.DPNr,
InputHasChanged(DateInput),
InputHasChanged(TimeInput),
!InputIsNotDefault(TimeInput)
);
DeliveryPart? p;
try {
p = await ViewModel.UpdateDeliveryPart(
(DeliveryList.SelectedItem as Delivery)?.Year,
(DeliveryList.SelectedItem as Delivery)?.DId,
(DeliveryPartList.SelectedItem as DeliveryPart)?.DPNr,
InputHasChanged(DateInput),
InputHasChanged(TimeInput),
!InputIsNotDefault(TimeInput)
);
} catch (Exception exc) {
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
FinishButton.IsEnabled = true;
SaveButton.IsEnabled = true;
Mouse.OverrideCursor = null;
DeliveryPartList.IsEnabled = true;
return;
}
EmptyScale();
await RefreshList();
await RefreshDeliveryParts();
@ -743,6 +771,7 @@ namespace Elwig.Windows {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
Mouse.OverrideCursor = null;
DeliveryList.SelectedItem = null;
await RenewContext();
@ -940,22 +969,31 @@ namespace Elwig.Windows {
SaveButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.AppStarting;
DeliveryPart? p;
try {
p = await ViewModel.UpdateDeliveryPart(
(DeliveryList.SelectedItem as Delivery)?.Year,
(DeliveryList.SelectedItem as Delivery)?.DId,
(DeliveryPartList.SelectedItem as DeliveryPart)?.DPNr,
InputHasChanged(DateInput),
InputHasChanged(TimeInput),
!InputIsNotDefault(TimeInput)
);
} catch (Exception exc) {
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
SaveButton.IsEnabled = true;
return;
} finally {
Mouse.OverrideCursor = null;
}
IsEditing = false;
IsCreating = false;
DeliveryList.IsEnabled = true;
DeliveryPartList.IsEnabled = true;
var p = await ViewModel.UpdateDeliveryPart(
(DeliveryList.SelectedItem as Delivery)?.Year,
(DeliveryList.SelectedItem as Delivery)?.DId,
(DeliveryPartList.SelectedItem as DeliveryPart)?.DPNr,
InputHasChanged(DateInput),
InputHasChanged(TimeInput),
!InputIsNotDefault(TimeInput)
);
Mouse.OverrideCursor = null;
HideSaveResetCancelButtons();
ShowNewEditDeleteButtons();
LockInputs();

View File

@ -341,6 +341,8 @@ namespace Elwig.Windows {
private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) {
Mouse.OverrideCursor = Cursors.AppStarting;
SaveButton.IsEnabled = false;
int year = -1, dsnr = -1, mgnr = -1;
string? sortid = null;
try {
@ -350,8 +352,12 @@ namespace Elwig.Windows {
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Anmeldung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
SaveButton.IsEnabled = true;
return;
} finally {
Mouse.OverrideCursor = null;
}
Mouse.OverrideCursor = null;
IsEditing = false;
IsCreating = false;
DeliveryAncmtList.IsEnabled = true;

View File

@ -201,14 +201,20 @@ namespace Elwig.Windows {
private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) {
Mouse.OverrideCursor = Cursors.AppStarting;
SaveButton.IsEnabled = false;
try {
await ViewModel.UpdateDeliverySchedule(ViewModel.SelectedDeliverySchedule?.Year, ViewModel.SelectedDeliverySchedule?.DsNr);
} catch (Exception exc) {
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Leseplan aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
SaveButton.IsEnabled = true;
return;
} finally {
Mouse.OverrideCursor = null;
}
Mouse.OverrideCursor = null;
IsEditing = false;
IsCreating = false;
DeliveryScheduleList.IsEnabled = true;

View File

@ -706,8 +706,7 @@ namespace Elwig.Windows {
private async void PrintButton_Click(object sender, RoutedEventArgs evt) {
if (PrintDocument == null) return;
PrintButton.IsEnabled = false;
var res = MessageBox.Show($"Sollen {PrintDocument.Pages} Blätter ({PrintDocument.TotalPages} Seiten) gedruckt werden?\n" +
$"Sind die \"Duplex-Einstellungen\" des Standarddruckers entsprechend eingestellt (doppelseitig bzw. einseitig)?",
var res = MessageBox.Show($"Sollen {PrintDocument.Pages} Blätter ({PrintDocument.TotalPages} Seiten) gedruckt werden?",
"Rundschreiben drucken", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
if (res == MessageBoxResult.Yes) {
Mouse.OverrideCursor = Cursors.AppStarting;

View File

@ -187,10 +187,6 @@ namespace Elwig.Windows {
ControlUtils.RenewItemsSource(BranchInput, await ctx.Branches.OrderBy(b => b.Name).ToListAsync());
ControlUtils.RenewItemsSource(DefaultKgInput, await ctx.WbKgs.Select(k => k.AtKg).OrderBy(k => k.Name).ToListAsync());
ViewModel.MembersDeliveries = await ctx.Deliveries
.GroupBy(d => new { d.MgNr, d.Year })
.ToDictionaryAsync(g => (g.Key.MgNr, g.Key.Year), g => g.Any());
var seasons = await ctx.Seasons.OrderByDescending(s => s.Year).ToListAsync();
Menu_DeliveryConfirmation.Items.Clear();
foreach (var s in seasons) {
@ -395,14 +391,22 @@ namespace Elwig.Windows {
}
private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) {
int? mgnr = null;
Mouse.OverrideCursor = Cursors.AppStarting;
SaveButton.IsEnabled = false;
int mgnr;
try {
mgnr = await ViewModel.UpdateMember(ViewModel.SelectedMember?.MgNr);
} catch (Exception exc) {
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message;
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
SaveButton.IsEnabled = true;
return;
} finally {
Mouse.OverrideCursor = null;
}
IsEditing = false;
IsCreating = false;
MemberList.IsEnabled = true;

View File

@ -1,5 +1,4 @@
::mkdir "C:\Program Files\Elwig"
::curl --fail -s -L "https://github.com/emendelson/pdftoprinter/raw/main/PDFtoPrinter.exe" -z "C:\Program Files\Elwig\PDFtoPrinter.exe" -o "C:\Program Files\Elwig\PDFtoPrinter.exe"
mkdir "C:\ProgramData\Elwig\resources"
copy /b /y Documents\*.css "C:\ProgramData\Elwig\resources"
copy /b /y Documents\*.cshtml "C:\ProgramData\Elwig\resources"

View File

@ -25,7 +25,6 @@
</Task>
</UsingTask>
<Target Name="CustomBeforeBuild" BeforeTargets="BeforeBuild">
<Exec Command="curl --fail -s -L &quot;https://github.com/emendelson/pdftoprinter/raw/main/PDFtoPrinter.exe&quot; -z &quot;$(ProjectDir)\Files\PDFtoPrinter.exe&quot; -o &quot;$(ProjectDir)\Files\PDFtoPrinter.exe&quot;" />
<Exec Command="dotnet publish &quot;$(ProjectDir)\..\Elwig\Elwig.csproj&quot; &quot;/p:PublishProfile=$(ProjectDir)\..\Elwig\Properties\PublishProfiles\FolderProfile.pubxml&quot;" />
<GetFileVersion AssemblyPath="..\Elwig\bin\Publish\Elwig.exe">
<Output TaskParameter="Version" PropertyName="ElwigFileVersion" />
@ -36,7 +35,6 @@
</Target>
<ItemGroup>
<None Include="Files\config.ini" />
<None Include="Files\PDFtoPrinter.exe" />
<None Include="Files\WinziPrint.exe" />
</ItemGroup>
</Project>

View File

@ -10,9 +10,6 @@
<Component Directory="InstallFolder">
<File Source="$(ProjectDir)\Files\WinziPrint.exe" Id="WinziPrint.exe"/>
</Component>
<Component Directory="InstallFolder">
<File Source="$(ProjectDir)\Files\PDFtoPrinter.exe" Id="PDFtoPrinter.exe"/>
</Component>
</ComponentGroup>
</Fragment>
</Wix>

View File

@ -15,7 +15,7 @@ namespace Tests.E2ETests {
[OneTimeSetUp]
public static async Task SetupDatabase() {
if (File.Exists(Utils.TestDatabasePath)) File.Delete(Utils.TestDatabasePath);
using var cnx = await AppDbContext.ConnectAsync($"Data Source=\"{Utils.TestDatabasePath}\"; Mode=ReadWriteCreate; Foreign Keys=True; Cache=Default");
using var cnx = await AppDbContext.ConnectAsync($"Data Source=\"{Utils.TestDatabasePath}\"; Mode=ReadWriteCreate; Foreign Keys=True; Cache=Default; Pooling=False");
await AppDbContext.ExecuteEmbeddedScript(cnx, Assembly.GetExecutingAssembly(), "Tests.Resources.Sql.Create.sql");
await AppDbContext.ExecuteEmbeddedScript(cnx, Assembly.GetExecutingAssembly(), "Tests.Resources.Sql.Insert.sql");
await AppDbContext.ExecuteEmbeddedScript(cnx, Assembly.GetExecutingAssembly(), "Tests.Resources.Sql.E2EInsert.sql");