Compare commits

..

1 Commits

Author SHA1 Message Date
94d5084f58 Bump version to 1.0.0.0
All checks were successful
Test / Run tests (push) Successful in 2m28s
2025-02-15 11:44:46 +01:00
20 changed files with 473 additions and 587 deletions

View File

@ -1,7 +1,7 @@
name: Deploy name: Deploy
on: on:
push: push:
tags: ["v[0-9]+.[0-9]+.[0-9]+"] tags: ["v([0-9]+.)?[0-9]+.[0-9]+.[0-9]+"]
jobs: jobs:
deploy: deploy:
name: Build and Deploy name: Build and Deploy

View File

@ -3,22 +3,6 @@ Changelog
========= =========
[v0.13.8][v0.13.8] (2025-02-21) {#v0.13.8}
------------------------------------------
### Behobene Fehler {#v0.13.8-bugfixes}
* Details im Lieferungen-Fenster (`DeliveryAdminWindow`) für die WG Weinland richtiggestellt (Lesweagen, Verhalten bei _Gerebelt gewogen_). (138dae715e, aa98909c0a)
### Sonstiges {#v0.13.8-misc}
* Abhängigkeiten aktualisiert. (fe0a7dab2a, 775bb08e95)
[v0.13.8]: https://git.necronda.net/winzer/elwig/releases/tag/v0.13.8
[v0.13.7][v0.13.7] (2025-01-21) {#v0.13.7} [v0.13.7][v0.13.7] (2025-01-21) {#v0.13.7}
------------------------------------------ ------------------------------------------

View File

@ -82,7 +82,7 @@ namespace Elwig {
} }
protected override async void OnStartup(StartupEventArgs evt) { protected override async void OnStartup(StartupEventArgs evt) {
Version = new Version(typeof(App).GetTypeInfo().Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion.Split('+')[0] ?? "0.0.0"); Version = new Version(typeof(App).GetTypeInfo().Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion.Split('+')[0] ?? "0.0.0.0");
try { try {
await AppDbUpdater.CheckDb(); await AppDbUpdater.CheckDb();
@ -197,12 +197,10 @@ namespace Elwig {
var ch = CurrentLastWrite; var ch = CurrentLastWrite;
if (ch > CurrentApp.LastChanged) if (ch > CurrentApp.LastChanged)
CurrentApp.LastChanged = ch; CurrentApp.LastChanged = ch;
MainDispatcher.Invoke(() => {
foreach (Window w in CurrentApp.Windows) { foreach (Window w in CurrentApp.Windows) {
if (w is not ContextWindow c) continue; if (w is not ContextWindow c) continue;
MainDispatcher.BeginInvoke(c.HintContextChange); MainDispatcher.BeginInvoke(c.HintContextChange);
} }
});
} }
private void OnAutoUpdateTimer(object? sender, EventArgs? evt) { private void OnAutoUpdateTimer(object? sender, EventArgs? evt) {

View File

@ -7,7 +7,7 @@
<UseWPF>true</UseWPF> <UseWPF>true</UseWPF>
<PreserveCompilationContext>true</PreserveCompilationContext> <PreserveCompilationContext>true</PreserveCompilationContext>
<ApplicationIcon>Resources\Images\Elwig.ico</ApplicationIcon> <ApplicationIcon>Resources\Images\Elwig.ico</ApplicationIcon>
<Version>0.13.8</Version> <Version>1.0.0.0</Version>
<SatelliteResourceLanguages>de-AT</SatelliteResourceLanguages> <SatelliteResourceLanguages>de-AT</SatelliteResourceLanguages>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<ApplicationManifest>app.manifest</ApplicationManifest> <ApplicationManifest>app.manifest</ApplicationManifest>
@ -26,20 +26,20 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" /> <PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
<PackageReference Include="LinqKit" Version="1.3.8" /> <PackageReference Include="LinqKit" Version="1.3.7" />
<PackageReference Include="MailKit" Version="4.12.0" /> <PackageReference Include="MailKit" Version="4.9.0" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Language" Version="6.0.36" /> <PackageReference Include="Microsoft.AspNetCore.Razor.Language" Version="6.0.36" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="9.0.4" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="9.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.4" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="9.0.4" /> <PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="9.0.1" />
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3179.45" /> <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2903.40" />
<PackageReference Include="NJsonSchema" Version="11.3.2" /> <PackageReference Include="NJsonSchema" Version="11.1.0" />
<PackageReference Include="PdfiumViewer" Version="2.13.0" /> <PackageReference Include="PdfiumViewer" Version="2.13.0" />
<PackageReference Include="PdfiumViewer.Native.x86_64.no_v8-no_xfa" Version="2018.4.8.256" /> <PackageReference Include="PdfiumViewer.Native.x86_64.no_v8-no_xfa" Version="2018.4.8.256" />
<PackageReference Include="RazorLight" Version="2.3.1" /> <PackageReference Include="RazorLight" Version="2.3.1" />
<PackageReference Include="ScottPlot.WPF" Version="5.0.55" /> <PackageReference Include="ScottPlot.WPF" Version="5.0.53" />
<PackageReference Include="System.IO.Ports" Version="9.0.4" /> <PackageReference Include="System.IO.Ports" Version="9.0.1" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.4" /> <PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.1" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -23,10 +23,6 @@ namespace Elwig.Helpers {
public bool HasNetWeighing(Branch? b) => HasNetWeighing(b?.ZwstId); public bool HasNetWeighing(Branch? b) => HasNetWeighing(b?.ZwstId);
public bool HasNetWeighing() => HasNetWeighing(App.ZwstId); public bool HasNetWeighing() => HasNetWeighing(App.ZwstId);
public bool HasBoxWeighing(string? zwstId) => IsWinzerkeller && (zwstId != "W");
public bool HasBoxWeighing(Branch? b) => HasBoxWeighing(b?.ZwstId);
public bool HasBoxWeighing() => HasBoxWeighing(App.ZwstId);
public string NameToken; public string NameToken;
public string NameShort; public string NameShort;
public string Name; public string Name;

View File

@ -434,7 +434,8 @@ namespace Elwig.Helpers {
if (accept != null) if (accept != null)
client.DefaultRequestHeaders.Accept.Add(new(accept)); client.DefaultRequestHeaders.Accept.Add(new(accept));
if (username != null || password != null) if (username != null || password != null)
client.DefaultRequestHeaders.Authorization = new("Basic", Convert.ToBase64String(Utils.UTF8.GetBytes($"{username}:{password}"))); client.DefaultRequestHeaders.Authorization = new("Basic", Convert.ToBase64String(
Utils.UTF8.GetBytes($"{username}:{password}")));
return client; return client;
} }
@ -453,8 +454,6 @@ namespace Elwig.Helpers {
} }
public static async Task UploadExportData(string zip, string url, string username, string password) { public static async Task UploadExportData(string zip, string url, string username, string password) {
if (url.StartsWith("https://elwig.at/clients/"))
url = "https://sync.elwig.at/" + url[25..];
if (!url.EndsWith('/')) url += "/"; if (!url.EndsWith('/')) url += "/";
using var client = GetHttpClient(username, password, accept: "application/json"); using var client = GetHttpClient(username, password, accept: "application/json");
var content = new StreamContent(new FileStream(zip, FileMode.Open, FileAccess.Read)); var content = new StreamContent(new FileStream(zip, FileMode.Open, FileAccess.Read));
@ -464,8 +463,6 @@ namespace Elwig.Helpers {
} }
public static async Task<JsonArray> GetExportMetaData(string url, string username, string password) { public static async Task<JsonArray> GetExportMetaData(string url, string username, string password) {
if (url.StartsWith("https://elwig.at/clients/"))
url = "https://sync.elwig.at/" + url[25..];
using var client = GetHttpClient(username, password, accept: "application/json"); using var client = GetHttpClient(username, password, accept: "application/json");
using var res = await client.GetAsync(url); using var res = await client.GetAsync(url);
res.EnsureSuccessStatusCode(); res.EnsureSuccessStatusCode();
@ -499,11 +496,9 @@ namespace Elwig.Helpers {
if (App.Config.Smtp == null) if (App.Config.Smtp == null)
return false; return false;
Mouse.OverrideCursor = Cursors.Wait;
var success = await Task.Run(async () => {
SmtpClient? client = null; SmtpClient? client = null;
try { try {
Mouse.OverrideCursor = Cursors.AppStarting;
client = await GetSmtpClient(); client = await GetSmtpClient();
using var msg = new MimeMessage(); using var msg = new MimeMessage();
@ -526,12 +521,9 @@ namespace Elwig.Helpers {
if (client != null) if (client != null)
await client.DisconnectAsync(true); await client.DisconnectAsync(true);
client?.Dispose(); client?.Dispose();
Mouse.OverrideCursor = null;
} }
return true; return true;
});
Mouse.OverrideCursor = null;
return success;
} }
public static async Task ExportDocument(Document doc, ExportMode mode, string? filename = null, (Member, string, string)? emailData = null) { public static async Task ExportDocument(Document doc, ExportMode mode, string? filename = null, (Member, string, string)? emailData = null) {

View File

@ -108,8 +108,7 @@ namespace Elwig.Services {
public static async Task<int> UpdateAreaCommitment(this AreaComAdminViewModel vm, int? oldFbNr) { public static async Task<int> UpdateAreaCommitment(this AreaComAdminViewModel vm, int? oldFbNr) {
int newFbNr = (int)vm.FbNr!; int newFbNr = (int)vm.FbNr!;
await Task.Run(async () => { using (var ctx = new AppDbContext()) {
using var ctx = new AppDbContext();
var a = new AreaCom { var a = new AreaCom {
FbNr = oldFbNr ?? newFbNr, FbNr = oldFbNr ?? newFbNr,
MgNr = (int)vm.MgNr!, MgNr = (int)vm.MgNr!,
@ -141,7 +140,7 @@ namespace Elwig.Services {
if (newFbNr != a.FbNr) { if (newFbNr != a.FbNr) {
await ctx.Database.ExecuteSqlAsync($"UPDATE area_commitment SET fbnr = {newFbNr} WHERE fbnr = {oldFbNr}"); await ctx.Database.ExecuteSqlAsync($"UPDATE area_commitment SET fbnr = {newFbNr} WHERE fbnr = {oldFbNr}");
} }
}); }
App.HintContextChange(); App.HintContextChange();
@ -254,16 +253,5 @@ namespace Elwig.Services {
} }
return grid; return grid;
} }
public static async Task DeleteAreaCom(int fbnr) {
await Task.Run(async () => {
using var ctx = new AppDbContext();
var l = (await ctx.AreaCommitments.FindAsync(fbnr))!;
ctx.Remove(l);
await ctx.SaveChangesAsync();
});
App.HintContextChange();
}
} }
} }

View File

@ -430,10 +430,9 @@ namespace Elwig.Services {
} }
public static async Task<DeliveryPart> UpdateDeliveryPart(this DeliveryAdminViewModel vm, int? oldYear, int? oldDid, int? oldDpnr, bool dateHasChanged, bool timeHasChanged, bool timeIsDefault) { public static async Task<DeliveryPart> UpdateDeliveryPart(this DeliveryAdminViewModel vm, int? oldYear, int? oldDid, int? oldDpnr, bool dateHasChanged, bool timeHasChanged, bool timeIsDefault) {
var p = await Task.Run(async () => {
DeliveryPart p; DeliveryPart p;
using var ctx = new AppDbContext(); using (var ctx = new AppDbContext()) {
int year = oldYear ?? Utils.CurrentYear; int year = oldYear ?? Utils.CurrentYear;
int did = oldDid ?? await ctx.NextDId(year); int did = oldDid ?? await ctx.NextDId(year);
int dpnr = oldDpnr ?? await ctx.NextDPNr(year, did); int dpnr = oldDpnr ?? await ctx.NextDPNr(year, did);
@ -525,9 +524,7 @@ namespace Elwig.Services {
} }
await ctx.SaveChangesAsync(); await ctx.SaveChangesAsync();
}
return p;
});
App.HintContextChange(); App.HintContextChange();
@ -535,10 +532,9 @@ namespace Elwig.Services {
} }
public static async Task<Delivery> SplitDeliveryToMember(int year, int did, int[] weights, int mgnr) { public static async Task<Delivery> SplitDeliveryToMember(int year, int did, int[] weights, int mgnr) {
var n = await Task.Run(async () => {
Delivery n; Delivery n;
using var ctx = new AppDbContext(); using (var ctx = new AppDbContext()) {
bool anyLeft = false; bool anyLeft = false;
var d = (await ctx.Deliveries.FindAsync(year, did))!; var d = (await ctx.Deliveries.FindAsync(year, did))!;
var lnr = await ctx.NextLNr(d.Date, d.ZwstId); var lnr = await ctx.NextLNr(d.Date, d.ZwstId);
@ -581,9 +577,7 @@ namespace Elwig.Services {
await ctx.SaveChangesAsync(); await ctx.SaveChangesAsync();
if (!anyLeft) if (!anyLeft)
await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({d.Year}, {d.DId})"); await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({d.Year}, {d.DId})");
}
return n;
});
App.HintContextChange(); App.HintContextChange();
@ -591,9 +585,9 @@ namespace Elwig.Services {
} }
public static async Task<Delivery> SplitDeliveryToLsNr(int year, int did, int[] weights, string lsnr) { public static async Task<Delivery> SplitDeliveryToLsNr(int year, int did, int[] weights, string lsnr) {
var n = await Task.Run(async () => {
Delivery n; Delivery n;
using var ctx = new AppDbContext();
using (var ctx = new AppDbContext()) {
var anyLeft = false; var anyLeft = false;
n = (await ctx.Deliveries.FirstAsync(d => d.LsNr == lsnr))!; n = (await ctx.Deliveries.FirstAsync(d => d.LsNr == lsnr))!;
var d = (await ctx.Deliveries.FindAsync(year, did))!; var d = (await ctx.Deliveries.FindAsync(year, did))!;
@ -622,9 +616,7 @@ namespace Elwig.Services {
await ctx.SaveChangesAsync(); await ctx.SaveChangesAsync();
if (!anyLeft && n.LsNr != d.LsNr) if (!anyLeft && n.LsNr != d.LsNr)
await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({d.Year}, {d.DId})"); await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({d.Year}, {d.DId})");
}
return n;
});
App.HintContextChange(); App.HintContextChange();
@ -632,8 +624,7 @@ namespace Elwig.Services {
} }
public static async Task DepreciateDelivery(int year, int did, int[] weights) { public static async Task DepreciateDelivery(int year, int did, int[] weights) {
await Task.Run(async () => { using (var ctx = new AppDbContext()) {
using var ctx = new AppDbContext();
var d = (await ctx.Deliveries.FindAsync(year, did))!; var d = (await ctx.Deliveries.FindAsync(year, did))!;
var dpnr = await ctx.NextDPNr(year, did); var dpnr = await ctx.NextDPNr(year, did);
foreach (var (p, w) in d.Parts.ToList().Zip(weights)) { foreach (var (p, w) in d.Parts.ToList().Zip(weights)) {
@ -657,14 +648,13 @@ namespace Elwig.Services {
} }
} }
await ctx.SaveChangesAsync(); await ctx.SaveChangesAsync();
}); }
App.HintContextChange(); App.HintContextChange();
} }
public static async Task GenerateDeliveryNote(int year, int did, ExportMode mode) { public static async Task GenerateDeliveryNote(int year, int did, ExportMode mode) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
var d = (await ctx.Deliveries.FindAsync(year, did))!; var d = (await ctx.Deliveries.FindAsync(year, did))!;
@ -673,7 +663,6 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
@ -718,8 +707,7 @@ namespace Elwig.Services {
Title = $"{DeliveryJournal.Name} speichern unter - Elwig" Title = $"{DeliveryJournal.Name} speichern unter - Elwig"
}; };
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var data = await DeliveryJournalData.FromQuery(query, filterNames); var data = await DeliveryJournalData.FromQuery(query, filterNames);
using var ods = new OdsFile(d.FileName); using var ods = new OdsFile(d.FileName);
@ -727,7 +715,6 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
} else if (mode == ExportMode.Export) { } else if (mode == ExportMode.Export) {
@ -738,8 +725,7 @@ namespace Elwig.Services {
Title = $"{DeliveryJournal.Name} speichern unter - Elwig" Title = $"{DeliveryJournal.Name} speichern unter - Elwig"
}; };
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
await ElwigData.Export(d.FileName, await query await ElwigData.Export(d.FileName, await query
.Select(p => p.Delivery) .Select(p => p.Delivery)
@ -751,12 +737,10 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
} else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) { } else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip"; var filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip";
var path = Path.Combine(App.TempPath, filename); var path = Path.Combine(App.TempPath, filename);
@ -783,11 +767,9 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} else { } else {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var data = await DeliveryJournalData.FromQuery(query, filterNames); var data = await DeliveryJournalData.FromQuery(query, filterNames);
using var doc = new DeliveryJournal(string.Join(" / ", filterNames), data); using var doc = new DeliveryJournal(string.Join(" / ", filterNames), data);
@ -795,7 +777,6 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
} }
@ -817,8 +798,7 @@ namespace Elwig.Services {
throw new ArgumentException("Invalid value for ExportSubject"); throw new ArgumentException("Invalid value for ExportSubject");
} }
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var data = await WineQualityStatisticsData.FromQuery(query, App.Client.OrderingMemberList); var data = await WineQualityStatisticsData.FromQuery(query, App.Client.OrderingMemberList);
using var doc = new WineQualityStatistics(string.Join(" / ", filterNames), data); using var doc = new WineQualityStatistics(string.Join(" / ", filterNames), data);
@ -826,7 +806,6 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
@ -850,8 +829,7 @@ namespace Elwig.Services {
Title = $"Lieferstatistik pro Ort speichern unter - Elwig" Title = $"Lieferstatistik pro Ort speichern unter - Elwig"
}; };
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
using var ods = new OdsFile(d.FileName); using var ods = new OdsFile(d.FileName);
var tbl = await WineLocalityStatisticsData.FromQuery(query, filterNames); var tbl = await WineLocalityStatisticsData.FromQuery(query, filterNames);
@ -859,7 +837,6 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
} }
@ -898,8 +875,7 @@ namespace Elwig.Services {
Title = $"{DeliveryDepreciationList.Name} speichern unter - Elwig" Title = $"{DeliveryDepreciationList.Name} speichern unter - Elwig"
}; };
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
using var ods = new OdsFile(d.FileName); using var ods = new OdsFile(d.FileName);
var tblTotal = await DeliveryJournalData.FromQuery(query, filterNames); var tblTotal = await DeliveryJournalData.FromQuery(query, filterNames);
@ -915,12 +891,10 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
} else { } else {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var data = await DeliveryJournalData.FromQuery(query, filterNames); var data = await DeliveryJournalData.FromQuery(query, filterNames);
using var doc = new DeliveryDepreciationList(string.Join(" / ", filterNames), data); using var doc = new DeliveryDepreciationList(string.Join(" / ", filterNames), data);
@ -928,7 +902,6 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
} }
@ -1097,12 +1070,10 @@ namespace Elwig.Services {
} }
public static async Task DeleteDelivery(string lsnr) { public static async Task DeleteDelivery(string lsnr) {
await Task.Run(async () => { using (var ctx = new AppDbContext()) {
using var ctx = new AppDbContext();
await ctx.Deliveries.Where(d => d.LsNr == lsnr).ExecuteDeleteAsync(); await ctx.Deliveries.Where(d => d.LsNr == lsnr).ExecuteDeleteAsync();
await ctx.SaveChangesAsync(); await ctx.SaveChangesAsync();
}); }
App.HintContextChange(); App.HintContextChange();
} }
} }

View File

@ -367,8 +367,7 @@ namespace Elwig.Services {
} }
public static async Task GenerateMemberDataSheet(Member m, ExportMode mode) { public static async Task GenerateMemberDataSheet(Member m, ExportMode mode) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
using var doc = new MemberDataSheet(m, ctx); using var doc = new MemberDataSheet(m, ctx);
@ -376,13 +375,11 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
public static async Task GenerateDeliveryConfirmation(Member m, int year, ExportMode mode) { public static async Task GenerateDeliveryConfirmation(Member m, int year, ExportMode mode) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var b = new Billing(year); var b = new Billing(year);
await b.FinishSeason(); await b.FinishSeason();
@ -396,13 +393,11 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
public static async Task GenerateCreditNote(Member m, int year, int avnr, ExportMode mode) { public static async Task GenerateCreditNote(Member m, int year, int avnr, ExportMode mode) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
var v = (await ctx.PaymentVariants.FindAsync(year, avnr))!; var v = (await ctx.PaymentVariants.FindAsync(year, avnr))!;
@ -417,7 +412,6 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
@ -470,8 +464,7 @@ namespace Elwig.Services {
Title = $"{MemberList.Name} speichern unter - Elwig" Title = $"{MemberList.Name} speichern unter - Elwig"
}; };
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1])); var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1]));
using var ods = new OdsFile(d.FileName); using var ods = new OdsFile(d.FileName);
@ -479,7 +472,6 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
} else if (mode == ExportMode.Export) { } else if (mode == ExportMode.Export) {
@ -490,8 +482,7 @@ namespace Elwig.Services {
Title = $"{MemberList.Name} speichern unter - Elwig" Title = $"{MemberList.Name} speichern unter - Elwig"
}; };
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var members = await query var members = await query
.OrderBy(m => m.MgNr) .OrderBy(m => m.MgNr)
@ -508,12 +499,10 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
} else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) { } else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip"; var filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip";
var path = Path.Combine(App.TempPath, filename); var path = Path.Combine(App.TempPath, filename);
@ -544,11 +533,9 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} else { } else {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1])); var data = await MemberListData.FromQuery(query, filterNames, filterNames.Where(f => f.StartsWith("Flächenbindung")).Select(f => f.Split(' ')[^1]));
using var doc = new MemberList(string.Join(" / ", filterNames), data); using var doc = new MemberList(string.Join(" / ", filterNames), data);
@ -556,13 +543,14 @@ namespace Elwig.Services {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
} }
public static async Task<int> UpdateMember(this MemberAdminViewModel vm, int? oldMgNr) { public static async Task<int> UpdateMember(this MemberAdminViewModel vm, int? oldMgNr) {
var newMgNr = (int)vm.MgNr!; var newMgNr = (int)vm.MgNr!;
using (var ctx = new AppDbContext()) {
var m = new Member { var m = new Member {
MgNr = oldMgNr ?? newMgNr, MgNr = oldMgNr ?? newMgNr,
PredecessorMgNr = vm.PredecessorMgNr, PredecessorMgNr = vm.PredecessorMgNr,
@ -600,8 +588,6 @@ namespace Elwig.Services {
ContactViaEmail = vm.ContactViaEmail, ContactViaEmail = vm.ContactViaEmail,
}; };
await Task.Run(async () => {
using var ctx = new AppDbContext();
if (oldMgNr != null) { if (oldMgNr != null) {
ctx.Update(m); ctx.Update(m);
} else { } else {
@ -684,7 +670,7 @@ namespace Elwig.Services {
if (newMgNr != m.MgNr) { if (newMgNr != m.MgNr) {
await ctx.Database.ExecuteSqlAsync($"UPDATE member SET mgnr = {newMgNr} WHERE mgnr = {oldMgNr}"); await ctx.Database.ExecuteSqlAsync($"UPDATE member SET mgnr = {newMgNr} WHERE mgnr = {oldMgNr}");
} }
}); }
App.HintContextChange(); App.HintContextChange();
@ -692,8 +678,7 @@ namespace Elwig.Services {
} }
public static async Task DeleteMember(int mgnr, bool deletePaymentData, bool deleteDeliveries, bool deleteAreaComs) { public static async Task DeleteMember(int mgnr, bool deletePaymentData, bool deleteDeliveries, bool deleteAreaComs) {
await Task.Run(async () => { using (var ctx = new AppDbContext()) {
using var ctx = new AppDbContext();
var l = (await ctx.Members.FindAsync(mgnr))!; var l = (await ctx.Members.FindAsync(mgnr))!;
if (deletePaymentData) { if (deletePaymentData) {
ctx.RemoveRange(l.Credits); ctx.RemoveRange(l.Credits);
@ -706,8 +691,7 @@ namespace Elwig.Services {
} }
ctx.Remove(l); ctx.Remove(l);
await ctx.SaveChangesAsync(); await ctx.SaveChangesAsync();
}); }
App.HintContextChange(); App.HintContextChange();
} }
} }

View File

@ -203,9 +203,13 @@ namespace Elwig.Windows {
$"Soll die Flächenbindung {a.GstNr} ({a.Area} m²) wirklich unwiderruflich gelöscht werden?", $"Soll die Flächenbindung {a.GstNr} ({a.Area} m²) wirklich unwiderruflich gelöscht werden?",
"Flächenbindung löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); "Flächenbindung löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
if (r == MessageBoxResult.OK) { if (r == MessageBoxResult.OK) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
try { try {
await AreaComService.DeleteAreaCom(a.FbNr); using (var ctx = new AppDbContext()) {
ctx.Remove(a);
await ctx.SaveChangesAsync();
}
App.HintContextChange();
} catch (Exception exc) { } catch (Exception exc) {
var str = "Der Eintrag konnte nicht in der Datenbank aktualisiert werden!\n\n" + exc.Message; 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; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
@ -223,7 +227,7 @@ namespace Elwig.Windows {
private async void AreaCommitmentSaveButton_Click(object? sender, RoutedEventArgs? evt) { private async void AreaCommitmentSaveButton_Click(object? sender, RoutedEventArgs? evt) {
AreaCommitmentSaveButton.IsEnabled = false; AreaCommitmentSaveButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
int fbnr; int fbnr;
try { try {
@ -233,8 +237,9 @@ namespace Elwig.Windows {
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Flächenbindung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(str, "Flächenbindung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
AreaCommitmentSaveButton.IsEnabled = true; AreaCommitmentSaveButton.IsEnabled = true;
Mouse.OverrideCursor = null;
return; return;
} finally {
Mouse.OverrideCursor = null;
} }
IsEditing = false; IsEditing = false;
@ -247,7 +252,6 @@ namespace Elwig.Windows {
FinishInputFilling(); FinishInputFilling();
await RefreshList(); await RefreshList();
RefreshInputs(); RefreshInputs();
Mouse.OverrideCursor = null;
ViewModel.SearchQuery = ""; ViewModel.SearchQuery = "";
ControlUtils.SelectItem(AreaCommitmentList, AreaCommitmentList.ItemsSource.Cast<AreaCom>().Where(a => a.FbNr == fbnr).FirstOrDefault()); ControlUtils.SelectItem(AreaCommitmentList, AreaCommitmentList.ItemsSource.Cast<AreaCom>().Where(a => a.FbNr == fbnr).FirstOrDefault());
} }

View File

@ -157,7 +157,7 @@ namespace Elwig.Windows {
} }
var d = new NewSeasonDialog(s, currencies); var d = new NewSeasonDialog(s, currencies);
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
try { try {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
ctx.Add(new Season { ctx.Add(new Season {
@ -209,7 +209,7 @@ namespace Elwig.Windows {
$"Soll die Saison {s.Year} wirklich unwiderruflich gelöscht werden?", $"Soll die Saison {s.Year} wirklich unwiderruflich gelöscht werden?",
"Saison löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); "Saison löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
if (r == MessageBoxResult.OK) { if (r == MessageBoxResult.OK) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
try { try {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
ctx.Remove(s); ctx.Remove(s);

View File

@ -318,7 +318,8 @@ namespace Elwig.Windows {
private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) {
SaveButton.IsEnabled = false; SaveButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
try { try {
await Save(); await Save();
} catch (Exception exc) { } catch (Exception exc) {
@ -326,8 +327,9 @@ namespace Elwig.Windows {
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Stammdaten aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(str, "Stammdaten aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
SaveButton.IsEnabled = true; SaveButton.IsEnabled = true;
Mouse.OverrideCursor = null;
return; return;
} finally {
Mouse.OverrideCursor = null;
} }
IsEditing = false; IsEditing = false;
@ -347,7 +349,6 @@ namespace Elwig.Windows {
} }
App.HintContextChange(); App.HintContextChange();
Mouse.OverrideCursor = null;
} }
private void FillInputs(ClientParameters p, Season? s) { private void FillInputs(ClientParameters p, Season? s) {

View File

@ -310,23 +310,19 @@ namespace Elwig.Windows {
UnsetDefaultValue(GerebeltGewogenInput); UnsetDefaultValue(GerebeltGewogenInput);
} }
if (App.Client.HasBoxWeighing(ViewModel.Branch)) { if (!App.Client.HasNetWeighing(ViewModel.Branch)) {
LesewagenInput.IsEnabled = false; LesewagenInput.IsEnabled = false;
SetDefaultValue(LesewagenInput, false); SetDefaultValue(LesewagenInput, false);
} else {
LesewagenInput.IsEnabled = true;
UnsetDefaultValue(LesewagenInput);
}
if (!App.Client.HasNetWeighing(ViewModel.Branch)) {
HandPickedInput.IsThreeState = false; HandPickedInput.IsThreeState = false;
UnsetDefaultValue(HandPickedInput); UnsetDefaultValue(HandPickedInput);
} else { } else {
LesewagenInput.IsEnabled = true;
UnsetDefaultValue(LesewagenInput);
HandPickedInput.IsThreeState = true; HandPickedInput.IsThreeState = true;
SetDefaultValue(HandPickedInput, null); SetDefaultValue(HandPickedInput, null);
} }
if (App.Client.IsMatzen || App.Client.IsWinzerkeller || App.Client.IsBaden || App.Client.IsWeinland) { if (App.Client.IsMatzen || App.Client.IsWinzerkeller) {
GebundenInput.IsEnabled = false; GebundenInput.IsEnabled = false;
SetDefaultValue(GebundenInput, null); SetDefaultValue(GebundenInput, null);
} else { } else {
@ -719,7 +715,7 @@ namespace Elwig.Windows {
private async void NewDeliveryPartButton_Click(object sender, RoutedEventArgs evt) { private async void NewDeliveryPartButton_Click(object sender, RoutedEventArgs evt) {
FinishButton.IsEnabled = false; FinishButton.IsEnabled = false;
NewDeliveryPartButton.IsEnabled = false; NewDeliveryPartButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
DeliveryPartList.IsEnabled = false; DeliveryPartList.IsEnabled = false;
DeliveryPart? p; DeliveryPart? p;
@ -757,7 +753,7 @@ namespace Elwig.Windows {
private async void FinishButton_Click(object sender, RoutedEventArgs evt) { private async void FinishButton_Click(object sender, RoutedEventArgs evt) {
FinishButton.IsEnabled = false; FinishButton.IsEnabled = false;
NewDeliveryPartButton.IsEnabled = false; NewDeliveryPartButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
DeliveryPartList.IsEnabled = false; DeliveryPartList.IsEnabled = false;
DeliveryPart? p; DeliveryPart? p;
@ -888,7 +884,7 @@ namespace Elwig.Windows {
if (res == null) if (res == null)
return; return;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
try { try {
var id = res.Value.Item1; var id = res.Value.Item1;
var weights = res.Value.Item2; var weights = res.Value.Item2;
@ -959,7 +955,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.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); "Lieferung löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
if (r == MessageBoxResult.OK) { if (r == MessageBoxResult.OK) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
try { try {
await DeliveryService.DeleteDelivery(d.LsNr); await DeliveryService.DeleteDelivery(d.LsNr);
} catch (Exception exc) { } catch (Exception exc) {
@ -979,7 +975,7 @@ namespace Elwig.Windows {
private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) {
SaveButton.IsEnabled = false; SaveButton.IsEnabled = false;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
DeliveryPart? p; DeliveryPart? p;
try { try {
@ -996,8 +992,9 @@ namespace Elwig.Windows {
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(str, "Lieferung aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
SaveButton.IsEnabled = true; SaveButton.IsEnabled = true;
Mouse.OverrideCursor = null;
return; return;
} finally {
Mouse.OverrideCursor = null;
} }
IsEditing = false; IsEditing = false;
@ -1014,7 +1011,6 @@ namespace Elwig.Windows {
await RefreshDeliveryParts(); await RefreshDeliveryParts();
RefreshInputs(); RefreshInputs();
Mouse.OverrideCursor = null;
DepreciateButton.IsEnabled = true; DepreciateButton.IsEnabled = true;
} }
@ -1384,7 +1380,7 @@ namespace Elwig.Windows {
} }
private void GerebeltGewogenInput_Changed(object sender, RoutedEventArgs evt) { private void GerebeltGewogenInput_Changed(object sender, RoutedEventArgs evt) {
if ((IsEditing || IsCreating) && !App.Client.HasNetWeighing(ViewModel.Branch)) { if (!App.Client.HasNetWeighing(ViewModel.Branch)) {
HandPickedInput.IsChecked = !GerebeltGewogenInput.IsChecked; HandPickedInput.IsChecked = !GerebeltGewogenInput.IsChecked;
} }
if (!ViewModel.IsReceipt || App.Client.HasNetWeighing(ViewModel.Branch)) { if (!ViewModel.IsReceipt || App.Client.HasNetWeighing(ViewModel.Branch)) {
@ -1394,7 +1390,7 @@ namespace Elwig.Windows {
} }
private void HandPickedInput_Changed(object sender, RoutedEventArgs evt) { private void HandPickedInput_Changed(object sender, RoutedEventArgs evt) {
if ((IsEditing || IsCreating) && !App.Client.HasNetWeighing(ViewModel.Branch)) { if (!App.Client.HasNetWeighing(ViewModel.Branch)) {
GerebeltGewogenInput.IsChecked = !HandPickedInput.IsChecked; GerebeltGewogenInput.IsChecked = !HandPickedInput.IsChecked;
} }
CheckBox_Changed(sender, evt); CheckBox_Changed(sender, evt);

View File

@ -25,7 +25,7 @@ namespace Elwig.Windows {
public MainWindow() { public MainWindow() {
InitializeComponent(); InitializeComponent();
var v = Assembly.GetExecutingAssembly().GetName().Version; var v = Assembly.GetExecutingAssembly().GetName().Version;
VersionField.Text = "Version: " + (v == null ? "?" : $"{v.Major}.{v.Minor}.{v.Build}") + $" {App.BranchName}"; VersionField.Text = $"Version: {v?.ToString() ?? "?"} {App.BranchName}";
if (App.Client.Client == null) VersionField.Text += " (Unbekannt)"; if (App.Client.Client == null) VersionField.Text += " (Unbekannt)";
Menu_Help_Update.IsEnabled = App.Config.UpdateUrl != null; Menu_Help_Update.IsEnabled = App.Config.UpdateUrl != null;
Menu_Help_Smtp.IsEnabled = App.Config.Smtp != null; Menu_Help_Smtp.IsEnabled = App.Config.Smtp != null;
@ -62,7 +62,7 @@ namespace Elwig.Windows {
} }
private async void Menu_Help_Smtp_Click(object sender, RoutedEventArgs evt) { private async void Menu_Help_Smtp_Click(object sender, RoutedEventArgs evt) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
try { try {
using var client = await Utils.GetSmtpClient(); using var client = await Utils.GetSmtpClient();
await client!.DisconnectAsync(true); await client!.DisconnectAsync(true);
@ -133,10 +133,8 @@ namespace Elwig.Windows {
Multiselect = true, Multiselect = true,
}; };
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
await ElwigData.Import(d.FileNames, ElwigData.ImportMode.Interactively); await ElwigData.Import(d.FileNames, ElwigData.ImportMode.Interactively);
});
} }
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
@ -147,8 +145,7 @@ namespace Elwig.Windows {
private async void DownloadButton_Click(object sender, RoutedEventArgs evt) { private async void DownloadButton_Click(object sender, RoutedEventArgs evt) {
if (App.Config.SyncUrl == null) if (App.Config.SyncUrl == null)
return; return;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var data = await Utils.GetExportMetaData(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword); var data = await Utils.GetExportMetaData(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword);
var files = data var files = data
@ -184,15 +181,13 @@ namespace Elwig.Windows {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
private async void UploadButton_Click(object sender, RoutedEventArgs evt) { private async void UploadButton_Click(object sender, RoutedEventArgs evt) {
if (App.Config.SyncUrl == null) if (App.Config.SyncUrl == null)
return; return;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var path = Path.Combine(App.TempPath, $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip"); var path = Path.Combine(App.TempPath, $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip");
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
@ -221,7 +216,6 @@ namespace Elwig.Windows {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Lieferungen hochladen", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Lieferungen hochladen", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
@ -276,31 +270,24 @@ namespace Elwig.Windows {
AreaCommitmentsButton.IsEnabled = valid; AreaCommitmentsButton.IsEnabled = valid;
BreakdownMemberVarietyButton.IsEnabled = valid; BreakdownMemberVarietyButton.IsEnabled = valid;
if (valid) {
var areaComs = Utils.ActiveAreaCommitments(ctx.AreaCommitments, year!.Value);
var weightTotal = await ctx.DeliveryParts.Where(p => p.Year == year).SumAsync(p => p.Weight);
var gebWeight = await ctx.DeliveryPartBuckets.Where(b => b.Year == year && b.Discr != "_").SumAsync(b => b.Value);
SeasonStatMembersTotal.Text = $"{await ctx.Deliveries.Where(d => d.Year == year).Select(d => d.Member).Distinct().CountAsync():N0}";
SeasonStatMembersGeb.Text = $"{await areaComs.Select(c => c.Member).Distinct().CountAsync():N0}";
SeasonStatWeightTotal.Text = $"{weightTotal:N0} kg";
SeasonStatWeightGeb.Text = $"{gebWeight:N0} kg";
SeasonStatWeightUngeb.Text = $"{weightTotal - gebWeight:N0} kg";
SeasonStatArea.Text = $"{await areaComs.SumAsync(c => c.Area):N0} m²";
} else {
SeasonStatMembersTotal.Text = "-"; SeasonStatMembersTotal.Text = "-";
SeasonStatMembersGeb.Text = "-"; SeasonStatMembersGeb.Text = "-";
SeasonStatWeightTotal.Text = "-"; SeasonStatWeightTotal.Text = "-";
SeasonStatWeightGeb.Text = "-"; SeasonStatWeightGeb.Text = "-";
SeasonStatWeightUngeb.Text = "-"; SeasonStatWeightUngeb.Text = "-";
SeasonStatArea.Text = "-"; SeasonStatArea.Text = "-";
if (valid) { }
await Task.Run(async () => {
var membersTotal = await ctx.Deliveries.Where(d => d.Year == year).Select(d => d.Member).Distinct().CountAsync();
var areaComs = Utils.ActiveAreaCommitments(ctx.AreaCommitments, year!.Value);
var membersGeb = await areaComs.Select(c => c.Member).Distinct().CountAsync();
var weightTotal = await ctx.DeliveryParts.Where(p => p.Year == year).SumAsync(p => p.Weight);
var gebWeight = await ctx.DeliveryPartBuckets.Where(b => b.Year == year && b.Discr != "_").SumAsync(b => b.Value);
var area = await areaComs.SumAsync(c => c.Area);
await App.MainDispatcher.BeginInvoke(() => {
if (year != SeasonInput.Value) return;
SeasonStatMembersTotal.Text = $"{membersTotal:N0}";
SeasonStatMembersGeb.Text = $"{membersGeb:N0}";
SeasonStatWeightTotal.Text = $"{weightTotal:N0} kg";
SeasonStatWeightGeb.Text = $"{gebWeight:N0} kg";
SeasonStatWeightUngeb.Text = $"{weightTotal - gebWeight:N0} kg";
SeasonStatArea.Text = $"{area:N0} m²";
});
});
};
} }
private void DeliveryConfirmationButton_Click(object sender, RoutedEventArgs evt) { private void DeliveryConfirmationButton_Click(object sender, RoutedEventArgs evt) {
@ -328,8 +315,7 @@ namespace Elwig.Windows {
if (d.ShowDialog() == false) if (d.ShowDialog() == false)
return; return;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var b = new Billing(year); var b = new Billing(year);
await b.FinishSeason(); await b.FinishSeason();
@ -345,7 +331,6 @@ namespace Elwig.Windows {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
@ -361,8 +346,7 @@ namespace Elwig.Windows {
if (d.ShowDialog() == false) if (d.ShowDialog() == false)
return; return;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var b = new Billing(year); var b = new Billing(year);
await b.FinishSeason(); await b.FinishSeason();
@ -380,7 +364,6 @@ namespace Elwig.Windows {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
@ -396,8 +379,7 @@ namespace Elwig.Windows {
if (d.ShowDialog() == false) if (d.ShowDialog() == false)
return; return;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var b = new Billing(year); var b = new Billing(year);
await b.FinishSeason(); await b.FinishSeason();
@ -411,7 +393,6 @@ namespace Elwig.Windows {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
@ -427,8 +408,7 @@ namespace Elwig.Windows {
if (d.ShowDialog() == false) if (d.ShowDialog() == false)
return; return;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
await Task.Run(async () => {
try { try {
var b = new Billing(year); var b = new Billing(year);
await b.FinishSeason(); await b.FinishSeason();
@ -442,7 +422,6 @@ namespace Elwig.Windows {
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }
});
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
} }
} }

View File

@ -389,7 +389,7 @@ namespace Elwig.Windows {
} }
var d = new DeleteMemberDialog(m.MgNr, m.AdministrativeName, areaComs, deliveries, credits); var d = new DeleteMemberDialog(m.MgNr, m.AdministrativeName, areaComs, deliveries, credits);
if (d.ShowDialog() == true) { if (d.ShowDialog() == true) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
try { try {
await MemberService.DeleteMember(m.MgNr, d.DeletePaymentData, d.DeleteDeliveries, d.DeleteAreaComs); await MemberService.DeleteMember(m.MgNr, d.DeletePaymentData, d.DeleteDeliveries, d.DeleteAreaComs);
} catch (Exception exc) { } catch (Exception exc) {
@ -408,7 +408,7 @@ namespace Elwig.Windows {
} }
private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) { private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) {
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
SaveButton.IsEnabled = false; SaveButton.IsEnabled = false;
int mgnr; int mgnr;
@ -419,8 +419,9 @@ namespace Elwig.Windows {
if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message; if (exc.InnerException != null) str += "\n\n" + exc.InnerException.Message;
MessageBox.Show(str, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(str, "Mitglied aktualisieren", MessageBoxButton.OK, MessageBoxImage.Error);
SaveButton.IsEnabled = true; SaveButton.IsEnabled = true;
Mouse.OverrideCursor = null;
return; return;
} finally {
Mouse.OverrideCursor = null;
} }
IsEditing = false; IsEditing = false;
@ -435,7 +436,6 @@ namespace Elwig.Windows {
await RefreshList(); await RefreshList();
RefreshInputs(); RefreshInputs();
ViewModel.SearchQuery = ""; ViewModel.SearchQuery = "";
Mouse.OverrideCursor = null;
if (mgnr is int m) if (mgnr is int m)
FocusMember(m); FocusMember(m);
} }
@ -491,9 +491,8 @@ namespace Elwig.Windows {
private async void Menu_Contact_Letterhead_Click(object sender, RoutedEventArgs evt) { private async void Menu_Contact_Letterhead_Click(object sender, RoutedEventArgs evt) {
if (ViewModel.SelectedMember is not Member m) return; if (ViewModel.SelectedMember is not Member m) return;
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.AppStarting;
try { try {
await Task.Run(async () => {
using var doc = new Letterhead(m); using var doc = new Letterhead(m);
await doc.Generate(); await doc.Generate();
if (!App.Config.Debug) { if (!App.Config.Debug) {
@ -501,7 +500,6 @@ namespace Elwig.Windows {
} else { } else {
doc.Show(); doc.Show();
} }
});
} catch (Exception exc) { } catch (Exception exc) {
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
} }

View File

@ -1,4 +1,4 @@
<Project Sdk="WixToolset.Sdk/6"> <Project Sdk="WixToolset.Sdk/5.0.0">
<PropertyGroup> <PropertyGroup>
<HarvestFileSuppressUniqueIds>false</HarvestFileSuppressUniqueIds> <HarvestFileSuppressUniqueIds>false</HarvestFileSuppressUniqueIds>
<HarvestFileGenerateGuidsNow>true</HarvestFileGenerateGuidsNow> <HarvestFileGenerateGuidsNow>true</HarvestFileGenerateGuidsNow>

View File

@ -2,6 +2,3 @@
Elwig Elwig
===== =====
**El**ektronische **Wi**nzer**g**enossenschaftsverwaltung (Electronic Management for Vintners' Cooperatives).
Further information may be found on [the website](https://elwig.at).

View File

@ -1,6 +1,4 @@
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal" xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"
xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util">
<Bundle Name="Elwig" Manufacturer="Elwig" Version="!(bind.packageVersion.ElwigMsi)" UpgradeCode="f3c8fcab-c37c-43aa-9ab8-e42f4bb518b7" <Bundle Name="Elwig" Manufacturer="Elwig" Version="!(bind.packageVersion.ElwigMsi)" UpgradeCode="f3c8fcab-c37c-43aa-9ab8-e42f4bb518b7"
IconSourceFile="$(var.ElwigProjectDir)\Resources\Images\Elwig.ico"> IconSourceFile="$(var.ElwigProjectDir)\Resources\Images\Elwig.ico">
<BootstrapperApplication> <BootstrapperApplication>

View File

@ -1,4 +1,4 @@
<Project Sdk="WixToolset.Sdk/6"> <Project Sdk="WixToolset.Sdk/5.0.0">
<PropertyGroup> <PropertyGroup>
<OutputType>Bundle</OutputType> <OutputType>Bundle</OutputType>
<OutputName>Elwig</OutputName> <OutputName>Elwig</OutputName>
@ -13,7 +13,7 @@
</Target> </Target>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Installer\Installer.wixproj" /> <ProjectReference Include="..\Installer\Installer.wixproj" />
<PackageReference Include="WixToolset.Bal.wixext" Version="6.0.0" /> <PackageReference Include="WixToolset.Bal.wixext" Version="5.0.2" />
<PackageReference Include="WixToolset.Util.wixext" Version="6.0.0" /> <PackageReference Include="WixToolset.Util.wixext" Version="5.0.2" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -19,16 +19,16 @@
</Target> </Target>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="Appium.WebDriver" Version="4.4.5" /> <PackageReference Include="Appium.WebDriver" Version="4.4.5" />
<PackageReference Include="NReco.PdfRenderer" Version="1.6.0" /> <PackageReference Include="NReco.PdfRenderer" Version="1.6.0" />
<PackageReference Include="NUnit" Version="4.3.2" /> <PackageReference Include="NUnit" Version="4.3.2" />
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0" /> <PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageReference Include="NUnit.Analyzers" Version="4.7.0"> <PackageReference Include="NUnit.Analyzers" Version="4.6.0">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.4"> <PackageReference Include="coverlet.collector" Version="6.0.3">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>