Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
2ff53c67c3 | |||
3e1f8a910b | |||
ca1fb0f5e8 | |||
39d749ad2d | |||
31c491d956 | |||
41c5288fc5 | |||
e50e7337e6 | |||
ffe85d471c | |||
d1c07ee92a | |||
4af2fa256e | |||
bf0db37872 | |||
3161351a30 | |||
aa98909c0a | |||
775bb08e95 | |||
fe0a7dab2a | |||
138dae715e | |||
28af7f8dd3 |
52
CHANGELOG.md
52
CHANGELOG.md
@ -3,17 +3,33 @@ 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}
|
||||
------------------------------------------
|
||||
|
||||
### Behobene Fehler {#0.13.7-bugfixes}
|
||||
### Behobene Fehler {#v0.13.7-bugfixes}
|
||||
|
||||
* In seltenen Fällen konnten im Auszahlungsvariante-Fenster (`ChartWindow`) manche (Sorten-/Attribut-/Bewirtschaftungsart-)Zuordnungen zu Kurven nicht richtig gespeichert werden. (0b8a1b321f)
|
||||
* Beim Öffnen des Ausgangs-Protokoll-Fensters (`MailLogWindow`) kam es zu einem Absturz. (5d017cc8ea)
|
||||
* Im Auszahlungsvarianten-Fenster (`PaymentVariantsWindow`) war es nicht möglich die Überweisungsdaten zu exportieren, sofern mindestens eine Traubengutschrift einen negativen Betrag aufwies.
|
||||
Jetzt wird der Benutzer nur gewarnt und es ist möglich alle anderen Gutschriften zu exportieren. (6d88c5645c, c7a2f2241d)
|
||||
|
||||
### Sonstiges {#0.13.7-misc}
|
||||
### Sonstiges {#v0.13.7-misc}
|
||||
|
||||
* Im Auszahlungsvarianten-Fenster (`PaymentVariantsWindow`) ist es nun möglich das Datum einer Auszahlungsvariante zu ändern. (bd4ebb8c35)
|
||||
|
||||
@ -25,12 +41,12 @@ Changelog
|
||||
[v0.13.6][v0.13.6] (2025-01-14) {#v0.13.6}
|
||||
------------------------------------------
|
||||
|
||||
### Behobene Fehler {#0.13.6-bugfixes}
|
||||
### Behobene Fehler {#v0.13.6-bugfixes}
|
||||
|
||||
* In seltenen Fällen konnten im Auszahlungsvariante-Fenster (`ChartWindow`) manche (Sorten-/Attribut-/Bewirtschaftungsart-)Zuordnungen zu Kurven nicht richtig gespeichert werden.
|
||||
Berechnungen basierend auf diesen (evtl. falschen) Zuordnungen wurden immer richtig ausgeführt, eine nachträgliche Überprüfung ist daher möglich. (20e3e2a76b)
|
||||
|
||||
### Sonstiges {#0.13.6-misc}
|
||||
### Sonstiges {#v0.13.6-misc}
|
||||
|
||||
* Abhängigkeiten aktualisiert. (95ccb2627c, 80fec4473a)
|
||||
|
||||
@ -42,12 +58,12 @@ Changelog
|
||||
[v0.13.5][v0.13.5] (2025-01-02) {#v0.13.5}
|
||||
------------------------------------------
|
||||
|
||||
### Neue Funktionen {#0.13.5-features}
|
||||
### Neue Funktionen {#v0.13.5-features}
|
||||
|
||||
* Im Mitglieder-Fenster (`MemberAdminWindow`) Filter `aktiv` und `!aktiv` hinzugefügt. (5e53d864b1)
|
||||
* Im Lieferungen Fenster (`DeliveryAdminWindow`) Menüpunkt _Statistik_ mitsamt _Qualitätsstatistik_ und _Lieferstatistik pro Ort_ hinzugefügt. (c24b1ca2b9)
|
||||
|
||||
### Sonstiges {#0.13.5-misc}
|
||||
### Sonstiges {#v0.13.5-misc}
|
||||
|
||||
* Abhängigkeiten aktualisiert. (c9e483ba9d, 633b560a67)
|
||||
|
||||
@ -59,12 +75,12 @@ Changelog
|
||||
[v0.13.4][v0.13.4] (2024-11-25) {#v0.13.4}
|
||||
------------------------------------------
|
||||
|
||||
### Behobene Fehler {#0.13.4-bugfixes}
|
||||
### Behobene Fehler {#v0.13.4-bugfixes}
|
||||
|
||||
* Bei _Unter-/Überlieferungen lt. gez. GA_ waren seit [v0.10.6](#v0.10.6) (2023-08-30) Nicht-Lieferanten nicht aufgeführt. (6ba2aa7143)
|
||||
* Bei _Unterlieferungen laut Flächenbindungen_ wurden nur Mitglieder berücksichtigt, die zum Zeitpunkt des Exports aktiv waren. (3b97c2243a, 338f9fe092)
|
||||
|
||||
### Sonstiges {#0.13.4-misc}
|
||||
### Sonstiges {#v0.13.4-misc}
|
||||
|
||||
* Abhängigkeiten aktualisiert. (c3a2f983d5, 70e01849be, a99a23fd08, 4a10e94d71, 6c7f10cb26)
|
||||
|
||||
@ -76,17 +92,17 @@ Changelog
|
||||
[v0.13.3][v0.13.3] (2024-11-13) {#v0.13.3}
|
||||
------------------------------------------
|
||||
|
||||
### Neue Funktionen {#0.13.3-features}
|
||||
### Neue Funktionen {#v0.13.3-features}
|
||||
|
||||
* Im Haupt-Fenster (`MainWindow`) unter _Leseabschluss_ eine Statistik-Tabelle (Gebunden/Ungeb., Mitglieder/Gewicht/Fläche) hinzugefügt. (54deccf021)
|
||||
* Im Haupt-Fenster (`MainWindow`) unter _Leseabschluss_ zwei Exportmöglichkeiten (_Flächenbindungen_, _Liefermenge/Ertrag_) hinzugefügt. (c5453c2fe6)
|
||||
* Ausgangs-Protokoll-Fenster (`MailLogWindow`) zum Ansehen aller ausgehenden E-Mails oder ausgedruckten Rundschreiben hinzugefügt (_Rundschreiben_ -> _Hilfe_). (2ee0d56dcc)
|
||||
|
||||
### Behobene Fehler {#0.13.3-bugfixes}
|
||||
### Behobene Fehler {#v0.13.3-bugfixes}
|
||||
|
||||
* Im Rundschreiben-Fenster (`MailWindow`) kleinere Fehler behoben und alle Einstellungen werden nun gespeichert. (0a9731af09)
|
||||
|
||||
### Sonstiges {#0.13.3-misc}
|
||||
### Sonstiges {#v0.13.3-misc}
|
||||
|
||||
* In allen Fenstern an passenden Stellen Symbole/Icons hinzugefügt. (f4fa549130)
|
||||
* Im Mitglieder-Fenster (`MemberAdminWindow`) Filter `Flächenbindung` (Mitglieder mit irgendeiner aktiven Flächenbindung) hinzugefügt. (a1d84dd988)
|
||||
@ -100,17 +116,17 @@ Changelog
|
||||
[v0.13.2][v0.13.2] (2024-10-13) {#v0.13.2}
|
||||
------------------------------------------
|
||||
|
||||
### Neue Funktionen {#0.13.2-features}
|
||||
### Neue Funktionen {#v0.13.2-features}
|
||||
|
||||
* Im Lieferungen-Fenster den Menüpunkt _Abwertungsliste_ (`DeliveryDepreciationList`) hinzugefügt. (3cbffdbf27)
|
||||
|
||||
### Behobene Fehler {#0.13.2-bugfixes}
|
||||
### Behobene Fehler {#v0.13.2-bugfixes}
|
||||
|
||||
* Fehler im Waagenprotokoll `Avery-Async` (L320) behoben. (8680e51052)
|
||||
* Hausnummern in der BKI Traubentransportscheinliste werden in Excel richtig angezeigt. (86f7f693a0)
|
||||
* Beim Ändern der Identifikatoren von Attributen/Bewirtschaftungsarten wurden diese in Auszahlungsvarianten nicht aktualisiert. (d1f67dc57d)
|
||||
|
||||
### Sonstiges {#0.13.2-misc}
|
||||
### Sonstiges {#v0.13.2-misc}
|
||||
|
||||
* Weitere automatisierte Tests hinzugefügt. ([#11][i11])
|
||||
* Namenszusätze bei Gemeinden (z.B. an, bei, im, am) genauer angegeben. (65498dd18f)
|
||||
@ -126,15 +142,15 @@ Changelog
|
||||
[v0.13.1][v0.13.1] (2024-09-29) {#v0.13.1}
|
||||
------------------------------------------
|
||||
|
||||
### Neue Funktionen {#0.13.1-features}
|
||||
### Neue Funktionen {#v0.13.1-features}
|
||||
|
||||
* Das Extrahieren/Abwerten/Aufteilen von (Teil-)Lieferungen wurde grundlegend überarbeitet und funktioniert ab jetzt in einem einzigen, übersichtlicheren Dialog. (c62947dacd, c185437b9a)
|
||||
|
||||
### Behobene Fehler {#0.13.1-bugfixes}
|
||||
### Behobene Fehler {#v0.13.1-bugfixes}
|
||||
|
||||
* Im Mitglieder-Fenster (`MemberAdminWinodw`) wurden bei `Anlieferungsbestätigung -> speichern (PDF)` und `Traubengutschrift -> speichern (PDF)` E-Mails verschickt, anstatt ein PDF gespeichert. (6ba1973087, a2315e84bd)
|
||||
|
||||
### Sonstiges {#0.13.1-misc}
|
||||
### Sonstiges {#v0.13.1-misc}
|
||||
|
||||
* Abhängigkeiten aktualisiert. (b6ae1f5675)
|
||||
|
||||
@ -149,7 +165,7 @@ Changelog
|
||||
> [!NOTE]
|
||||
> Ab dieser Version verhält sich die Berechnung der Unterlieferungen bei Flächenbindungen anders.
|
||||
|
||||
### Behobene Fehler {#0.13.0-bugfixes}
|
||||
### Behobene Fehler {#v0.13.0-bugfixes}
|
||||
|
||||
* Im Lieferungen-Fenster (`DeliveryAdminWindow`) war das Extrahieren in eine neue Lieferung seit ca. 6 Monaten (98688168b8) nicht mehr möglich. (8a61747538)
|
||||
|
||||
|
@ -197,10 +197,12 @@ namespace Elwig {
|
||||
var ch = CurrentLastWrite;
|
||||
if (ch > CurrentApp.LastChanged)
|
||||
CurrentApp.LastChanged = ch;
|
||||
MainDispatcher.Invoke(() => {
|
||||
foreach (Window w in CurrentApp.Windows) {
|
||||
if (w is not ContextWindow c) continue;
|
||||
MainDispatcher.BeginInvoke(c.HintContextChange);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void OnAutoUpdateTimer(object? sender, EventArgs? evt) {
|
||||
|
@ -7,7 +7,7 @@
|
||||
<UseWPF>true</UseWPF>
|
||||
<PreserveCompilationContext>true</PreserveCompilationContext>
|
||||
<ApplicationIcon>Resources\Images\Elwig.ico</ApplicationIcon>
|
||||
<Version>0.13.7</Version>
|
||||
<Version>0.13.8</Version>
|
||||
<SatelliteResourceLanguages>de-AT</SatelliteResourceLanguages>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||
@ -26,20 +26,20 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
|
||||
<PackageReference Include="LinqKit" Version="1.3.7" />
|
||||
<PackageReference Include="MailKit" Version="4.9.0" />
|
||||
<PackageReference Include="LinqKit" Version="1.3.8" />
|
||||
<PackageReference Include="MailKit" Version="4.12.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Razor.Language" Version="6.0.36" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="9.0.1" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="9.0.1" />
|
||||
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2903.40" />
|
||||
<PackageReference Include="NJsonSchema" Version="11.1.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="9.0.4" />
|
||||
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3179.45" />
|
||||
<PackageReference Include="NJsonSchema" Version="11.3.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.53" />
|
||||
<PackageReference Include="System.IO.Ports" Version="9.0.1" />
|
||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.1" />
|
||||
<PackageReference Include="ScottPlot.WPF" Version="5.0.55" />
|
||||
<PackageReference Include="System.IO.Ports" Version="9.0.4" />
|
||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -23,6 +23,10 @@ namespace Elwig.Helpers {
|
||||
public bool HasNetWeighing(Branch? b) => HasNetWeighing(b?.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 NameShort;
|
||||
public string Name;
|
||||
|
@ -434,8 +434,7 @@ namespace Elwig.Helpers {
|
||||
if (accept != null)
|
||||
client.DefaultRequestHeaders.Accept.Add(new(accept));
|
||||
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;
|
||||
}
|
||||
|
||||
@ -454,6 +453,8 @@ namespace Elwig.Helpers {
|
||||
}
|
||||
|
||||
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 += "/";
|
||||
using var client = GetHttpClient(username, password, accept: "application/json");
|
||||
var content = new StreamContent(new FileStream(zip, FileMode.Open, FileAccess.Read));
|
||||
@ -463,6 +464,8 @@ namespace Elwig.Helpers {
|
||||
}
|
||||
|
||||
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 res = await client.GetAsync(url);
|
||||
res.EnsureSuccessStatusCode();
|
||||
@ -496,9 +499,11 @@ namespace Elwig.Helpers {
|
||||
if (App.Config.Smtp == null)
|
||||
return false;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
|
||||
var success = await Task.Run(async () => {
|
||||
SmtpClient? client = null;
|
||||
try {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
client = await GetSmtpClient();
|
||||
|
||||
using var msg = new MimeMessage();
|
||||
@ -521,9 +526,12 @@ namespace Elwig.Helpers {
|
||||
if (client != null)
|
||||
await client.DisconnectAsync(true);
|
||||
client?.Dispose();
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
Mouse.OverrideCursor = null;
|
||||
return success;
|
||||
}
|
||||
|
||||
public static async Task ExportDocument(Document doc, ExportMode mode, string? filename = null, (Member, string, string)? emailData = null) {
|
||||
|
@ -108,7 +108,8 @@ namespace Elwig.Services {
|
||||
public static async Task<int> UpdateAreaCommitment(this AreaComAdminViewModel vm, int? oldFbNr) {
|
||||
int newFbNr = (int)vm.FbNr!;
|
||||
|
||||
using (var ctx = new AppDbContext()) {
|
||||
await Task.Run(async () => {
|
||||
using var ctx = new AppDbContext();
|
||||
var a = new AreaCom {
|
||||
FbNr = oldFbNr ?? newFbNr,
|
||||
MgNr = (int)vm.MgNr!,
|
||||
@ -140,7 +141,7 @@ namespace Elwig.Services {
|
||||
if (newFbNr != a.FbNr) {
|
||||
await ctx.Database.ExecuteSqlAsync($"UPDATE area_commitment SET fbnr = {newFbNr} WHERE fbnr = {oldFbNr}");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
App.HintContextChange();
|
||||
|
||||
@ -253,5 +254,16 @@ namespace Elwig.Services {
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -430,9 +430,10 @@ namespace Elwig.Services {
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
using (var ctx = new AppDbContext()) {
|
||||
using var ctx = new AppDbContext();
|
||||
int year = oldYear ?? Utils.CurrentYear;
|
||||
int did = oldDid ?? await ctx.NextDId(year);
|
||||
int dpnr = oldDpnr ?? await ctx.NextDPNr(year, did);
|
||||
@ -524,7 +525,9 @@ namespace Elwig.Services {
|
||||
}
|
||||
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
|
||||
return p;
|
||||
});
|
||||
|
||||
App.HintContextChange();
|
||||
|
||||
@ -532,9 +535,10 @@ namespace Elwig.Services {
|
||||
}
|
||||
|
||||
public static async Task<Delivery> SplitDeliveryToMember(int year, int did, int[] weights, int mgnr) {
|
||||
var n = await Task.Run(async () => {
|
||||
Delivery n;
|
||||
|
||||
using (var ctx = new AppDbContext()) {
|
||||
using var ctx = new AppDbContext();
|
||||
bool anyLeft = false;
|
||||
var d = (await ctx.Deliveries.FindAsync(year, did))!;
|
||||
var lnr = await ctx.NextLNr(d.Date, d.ZwstId);
|
||||
@ -577,7 +581,9 @@ namespace Elwig.Services {
|
||||
await ctx.SaveChangesAsync();
|
||||
if (!anyLeft)
|
||||
await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({d.Year}, {d.DId})");
|
||||
}
|
||||
|
||||
return n;
|
||||
});
|
||||
|
||||
App.HintContextChange();
|
||||
|
||||
@ -585,9 +591,9 @@ namespace Elwig.Services {
|
||||
}
|
||||
|
||||
public static async Task<Delivery> SplitDeliveryToLsNr(int year, int did, int[] weights, string lsnr) {
|
||||
var n = await Task.Run(async () => {
|
||||
Delivery n;
|
||||
|
||||
using (var ctx = new AppDbContext()) {
|
||||
using var ctx = new AppDbContext();
|
||||
var anyLeft = false;
|
||||
n = (await ctx.Deliveries.FirstAsync(d => d.LsNr == lsnr))!;
|
||||
var d = (await ctx.Deliveries.FindAsync(year, did))!;
|
||||
@ -616,7 +622,9 @@ namespace Elwig.Services {
|
||||
await ctx.SaveChangesAsync();
|
||||
if (!anyLeft && n.LsNr != d.LsNr)
|
||||
await ctx.Database.ExecuteSqlAsync($"DELETE FROM delivery WHERE (year, did) = ({d.Year}, {d.DId})");
|
||||
}
|
||||
|
||||
return n;
|
||||
});
|
||||
|
||||
App.HintContextChange();
|
||||
|
||||
@ -624,7 +632,8 @@ namespace Elwig.Services {
|
||||
}
|
||||
|
||||
public static async Task DepreciateDelivery(int year, int did, int[] weights) {
|
||||
using (var ctx = new AppDbContext()) {
|
||||
await Task.Run(async () => {
|
||||
using var ctx = new AppDbContext();
|
||||
var d = (await ctx.Deliveries.FindAsync(year, did))!;
|
||||
var dpnr = await ctx.NextDPNr(year, did);
|
||||
foreach (var (p, w) in d.Parts.ToList().Zip(weights)) {
|
||||
@ -648,13 +657,14 @@ namespace Elwig.Services {
|
||||
}
|
||||
}
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
});
|
||||
|
||||
App.HintContextChange();
|
||||
}
|
||||
|
||||
public static async Task GenerateDeliveryNote(int year, int did, ExportMode mode) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
using var ctx = new AppDbContext();
|
||||
var d = (await ctx.Deliveries.FindAsync(year, did))!;
|
||||
@ -663,6 +673,7 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
@ -707,7 +718,8 @@ namespace Elwig.Services {
|
||||
Title = $"{DeliveryJournal.Name} speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var data = await DeliveryJournalData.FromQuery(query, filterNames);
|
||||
using var ods = new OdsFile(d.FileName);
|
||||
@ -715,6 +727,7 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
} else if (mode == ExportMode.Export) {
|
||||
@ -725,7 +738,8 @@ namespace Elwig.Services {
|
||||
Title = $"{DeliveryJournal.Name} speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
await ElwigData.Export(d.FileName, await query
|
||||
.Select(p => p.Delivery)
|
||||
@ -737,10 +751,12 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
} else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip";
|
||||
var path = Path.Combine(App.TempPath, filename);
|
||||
@ -767,9 +783,11 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
} else {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var data = await DeliveryJournalData.FromQuery(query, filterNames);
|
||||
using var doc = new DeliveryJournal(string.Join(" / ", filterNames), data);
|
||||
@ -777,6 +795,7 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
}
|
||||
@ -798,7 +817,8 @@ namespace Elwig.Services {
|
||||
throw new ArgumentException("Invalid value for ExportSubject");
|
||||
}
|
||||
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var data = await WineQualityStatisticsData.FromQuery(query, App.Client.OrderingMemberList);
|
||||
using var doc = new WineQualityStatistics(string.Join(" / ", filterNames), data);
|
||||
@ -806,6 +826,7 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
@ -829,7 +850,8 @@ namespace Elwig.Services {
|
||||
Title = $"Lieferstatistik pro Ort speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
using var ods = new OdsFile(d.FileName);
|
||||
var tbl = await WineLocalityStatisticsData.FromQuery(query, filterNames);
|
||||
@ -837,6 +859,7 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
}
|
||||
@ -875,7 +898,8 @@ namespace Elwig.Services {
|
||||
Title = $"{DeliveryDepreciationList.Name} speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
using var ods = new OdsFile(d.FileName);
|
||||
var tblTotal = await DeliveryJournalData.FromQuery(query, filterNames);
|
||||
@ -891,10 +915,12 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
} else {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var data = await DeliveryJournalData.FromQuery(query, filterNames);
|
||||
using var doc = new DeliveryDepreciationList(string.Join(" / ", filterNames), data);
|
||||
@ -902,6 +928,7 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
}
|
||||
@ -1070,10 +1097,12 @@ namespace Elwig.Services {
|
||||
}
|
||||
|
||||
public static async Task DeleteDelivery(string lsnr) {
|
||||
using (var ctx = new AppDbContext()) {
|
||||
await Task.Run(async () => {
|
||||
using var ctx = new AppDbContext();
|
||||
await ctx.Deliveries.Where(d => d.LsNr == lsnr).ExecuteDeleteAsync();
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
});
|
||||
|
||||
App.HintContextChange();
|
||||
}
|
||||
}
|
||||
|
@ -367,7 +367,8 @@ namespace Elwig.Services {
|
||||
}
|
||||
|
||||
public static async Task GenerateMemberDataSheet(Member m, ExportMode mode) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
using var ctx = new AppDbContext();
|
||||
using var doc = new MemberDataSheet(m, ctx);
|
||||
@ -375,11 +376,13 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
public static async Task GenerateDeliveryConfirmation(Member m, int year, ExportMode mode) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var b = new Billing(year);
|
||||
await b.FinishSeason();
|
||||
@ -393,11 +396,13 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
public static async Task GenerateCreditNote(Member m, int year, int avnr, ExportMode mode) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
using var ctx = new AppDbContext();
|
||||
var v = (await ctx.PaymentVariants.FindAsync(year, avnr))!;
|
||||
@ -412,6 +417,7 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
@ -464,7 +470,8 @@ namespace Elwig.Services {
|
||||
Title = $"{MemberList.Name} speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
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);
|
||||
@ -472,6 +479,7 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
} else if (mode == ExportMode.Export) {
|
||||
@ -482,7 +490,8 @@ namespace Elwig.Services {
|
||||
Title = $"{MemberList.Name} speichern unter - Elwig"
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var members = await query
|
||||
.OrderBy(m => m.MgNr)
|
||||
@ -499,10 +508,12 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
} else if (mode == ExportMode.Upload && App.Config.SyncUrl != null) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var filename = $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip";
|
||||
var path = Path.Combine(App.TempPath, filename);
|
||||
@ -533,9 +544,11 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
} else {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
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);
|
||||
@ -543,14 +556,13 @@ namespace Elwig.Services {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task<int> UpdateMember(this MemberAdminViewModel vm, int? oldMgNr) {
|
||||
var newMgNr = (int)vm.MgNr!;
|
||||
|
||||
using (var ctx = new AppDbContext()) {
|
||||
var m = new Member {
|
||||
MgNr = oldMgNr ?? newMgNr,
|
||||
PredecessorMgNr = vm.PredecessorMgNr,
|
||||
@ -588,6 +600,8 @@ namespace Elwig.Services {
|
||||
ContactViaEmail = vm.ContactViaEmail,
|
||||
};
|
||||
|
||||
await Task.Run(async () => {
|
||||
using var ctx = new AppDbContext();
|
||||
if (oldMgNr != null) {
|
||||
ctx.Update(m);
|
||||
} else {
|
||||
@ -670,7 +684,7 @@ namespace Elwig.Services {
|
||||
if (newMgNr != m.MgNr) {
|
||||
await ctx.Database.ExecuteSqlAsync($"UPDATE member SET mgnr = {newMgNr} WHERE mgnr = {oldMgNr}");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
App.HintContextChange();
|
||||
|
||||
@ -678,7 +692,8 @@ namespace Elwig.Services {
|
||||
}
|
||||
|
||||
public static async Task DeleteMember(int mgnr, bool deletePaymentData, bool deleteDeliveries, bool deleteAreaComs) {
|
||||
using (var ctx = new AppDbContext()) {
|
||||
await Task.Run(async () => {
|
||||
using var ctx = new AppDbContext();
|
||||
var l = (await ctx.Members.FindAsync(mgnr))!;
|
||||
if (deletePaymentData) {
|
||||
ctx.RemoveRange(l.Credits);
|
||||
@ -691,7 +706,8 @@ namespace Elwig.Services {
|
||||
}
|
||||
ctx.Remove(l);
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
});
|
||||
|
||||
App.HintContextChange();
|
||||
}
|
||||
}
|
||||
|
@ -203,13 +203,9 @@ namespace Elwig.Windows {
|
||||
$"Soll die Flächenbindung {a.GstNr} ({a.Area} m²) wirklich unwiderruflich gelöscht werden?",
|
||||
"Flächenbindung löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (r == MessageBoxResult.OK) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
using (var ctx = new AppDbContext()) {
|
||||
ctx.Remove(a);
|
||||
await ctx.SaveChangesAsync();
|
||||
}
|
||||
App.HintContextChange();
|
||||
await AreaComService.DeleteAreaCom(a.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;
|
||||
@ -227,7 +223,7 @@ namespace Elwig.Windows {
|
||||
|
||||
private async void AreaCommitmentSaveButton_Click(object? sender, RoutedEventArgs? evt) {
|
||||
AreaCommitmentSaveButton.IsEnabled = false;
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
|
||||
int fbnr;
|
||||
try {
|
||||
@ -237,9 +233,8 @@ namespace Elwig.Windows {
|
||||
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;
|
||||
return;
|
||||
}
|
||||
|
||||
IsEditing = false;
|
||||
@ -252,6 +247,7 @@ namespace Elwig.Windows {
|
||||
FinishInputFilling();
|
||||
await RefreshList();
|
||||
RefreshInputs();
|
||||
Mouse.OverrideCursor = null;
|
||||
ViewModel.SearchQuery = "";
|
||||
ControlUtils.SelectItem(AreaCommitmentList, AreaCommitmentList.ItemsSource.Cast<AreaCom>().Where(a => a.FbNr == fbnr).FirstOrDefault());
|
||||
}
|
||||
|
@ -157,7 +157,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
var d = new NewSeasonDialog(s, currencies);
|
||||
if (d.ShowDialog() == true) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
using var ctx = new AppDbContext();
|
||||
ctx.Add(new Season {
|
||||
@ -209,7 +209,7 @@ namespace Elwig.Windows {
|
||||
$"Soll die Saison {s.Year} wirklich unwiderruflich gelöscht werden?",
|
||||
"Saison löschen", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel);
|
||||
if (r == MessageBoxResult.OK) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
using var ctx = new AppDbContext();
|
||||
ctx.Remove(s);
|
||||
|
@ -318,8 +318,7 @@ namespace Elwig.Windows {
|
||||
|
||||
private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) {
|
||||
SaveButton.IsEnabled = false;
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
await Save();
|
||||
} catch (Exception exc) {
|
||||
@ -327,9 +326,8 @@ namespace Elwig.Windows {
|
||||
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;
|
||||
return;
|
||||
}
|
||||
|
||||
IsEditing = false;
|
||||
@ -349,6 +347,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
App.HintContextChange();
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
private void FillInputs(ClientParameters p, Season? s) {
|
||||
|
@ -310,19 +310,23 @@ namespace Elwig.Windows {
|
||||
UnsetDefaultValue(GerebeltGewogenInput);
|
||||
}
|
||||
|
||||
if (!App.Client.HasNetWeighing(ViewModel.Branch)) {
|
||||
if (App.Client.HasBoxWeighing(ViewModel.Branch)) {
|
||||
LesewagenInput.IsEnabled = false;
|
||||
SetDefaultValue(LesewagenInput, false);
|
||||
HandPickedInput.IsThreeState = false;
|
||||
UnsetDefaultValue(HandPickedInput);
|
||||
} else {
|
||||
LesewagenInput.IsEnabled = true;
|
||||
UnsetDefaultValue(LesewagenInput);
|
||||
}
|
||||
|
||||
if (!App.Client.HasNetWeighing(ViewModel.Branch)) {
|
||||
HandPickedInput.IsThreeState = false;
|
||||
UnsetDefaultValue(HandPickedInput);
|
||||
} else {
|
||||
HandPickedInput.IsThreeState = true;
|
||||
SetDefaultValue(HandPickedInput, null);
|
||||
}
|
||||
|
||||
if (App.Client.IsMatzen || App.Client.IsWinzerkeller) {
|
||||
if (App.Client.IsMatzen || App.Client.IsWinzerkeller || App.Client.IsBaden || App.Client.IsWeinland) {
|
||||
GebundenInput.IsEnabled = false;
|
||||
SetDefaultValue(GebundenInput, null);
|
||||
} else {
|
||||
@ -715,7 +719,7 @@ namespace Elwig.Windows {
|
||||
private async void NewDeliveryPartButton_Click(object sender, RoutedEventArgs evt) {
|
||||
FinishButton.IsEnabled = false;
|
||||
NewDeliveryPartButton.IsEnabled = false;
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
DeliveryPartList.IsEnabled = false;
|
||||
|
||||
DeliveryPart? p;
|
||||
@ -753,7 +757,7 @@ namespace Elwig.Windows {
|
||||
private async void FinishButton_Click(object sender, RoutedEventArgs evt) {
|
||||
FinishButton.IsEnabled = false;
|
||||
NewDeliveryPartButton.IsEnabled = false;
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
DeliveryPartList.IsEnabled = false;
|
||||
|
||||
DeliveryPart? p;
|
||||
@ -884,7 +888,7 @@ namespace Elwig.Windows {
|
||||
if (res == null)
|
||||
return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
var id = res.Value.Item1;
|
||||
var weights = res.Value.Item2;
|
||||
@ -955,7 +959,7 @@ namespace Elwig.Windows {
|
||||
$"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);
|
||||
if (r == MessageBoxResult.OK) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
await DeliveryService.DeleteDelivery(d.LsNr);
|
||||
} catch (Exception exc) {
|
||||
@ -975,7 +979,7 @@ namespace Elwig.Windows {
|
||||
|
||||
private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) {
|
||||
SaveButton.IsEnabled = false;
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
|
||||
DeliveryPart? p;
|
||||
try {
|
||||
@ -992,9 +996,8 @@ namespace Elwig.Windows {
|
||||
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;
|
||||
return;
|
||||
}
|
||||
|
||||
IsEditing = false;
|
||||
@ -1011,6 +1014,7 @@ namespace Elwig.Windows {
|
||||
await RefreshDeliveryParts();
|
||||
RefreshInputs();
|
||||
|
||||
Mouse.OverrideCursor = null;
|
||||
DepreciateButton.IsEnabled = true;
|
||||
}
|
||||
|
||||
@ -1380,7 +1384,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private void GerebeltGewogenInput_Changed(object sender, RoutedEventArgs evt) {
|
||||
if (!App.Client.HasNetWeighing(ViewModel.Branch)) {
|
||||
if ((IsEditing || IsCreating) && !App.Client.HasNetWeighing(ViewModel.Branch)) {
|
||||
HandPickedInput.IsChecked = !GerebeltGewogenInput.IsChecked;
|
||||
}
|
||||
if (!ViewModel.IsReceipt || App.Client.HasNetWeighing(ViewModel.Branch)) {
|
||||
@ -1390,7 +1394,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private void HandPickedInput_Changed(object sender, RoutedEventArgs evt) {
|
||||
if (!App.Client.HasNetWeighing(ViewModel.Branch)) {
|
||||
if ((IsEditing || IsCreating) && !App.Client.HasNetWeighing(ViewModel.Branch)) {
|
||||
GerebeltGewogenInput.IsChecked = !HandPickedInput.IsChecked;
|
||||
}
|
||||
CheckBox_Changed(sender, evt);
|
||||
|
@ -62,7 +62,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private async void Menu_Help_Smtp_Click(object sender, RoutedEventArgs evt) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
using var client = await Utils.GetSmtpClient();
|
||||
await client!.DisconnectAsync(true);
|
||||
@ -133,8 +133,10 @@ namespace Elwig.Windows {
|
||||
Multiselect = true,
|
||||
};
|
||||
if (d.ShowDialog() == true) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
await ElwigData.Import(d.FileNames, ElwigData.ImportMode.Interactively);
|
||||
});
|
||||
}
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
@ -145,7 +147,8 @@ namespace Elwig.Windows {
|
||||
private async void DownloadButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (App.Config.SyncUrl == null)
|
||||
return;
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var data = await Utils.GetExportMetaData(App.Config.SyncUrl, App.Config.SyncUsername, App.Config.SyncPassword);
|
||||
var files = data
|
||||
@ -181,13 +184,15 @@ namespace Elwig.Windows {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
private async void UploadButton_Click(object sender, RoutedEventArgs evt) {
|
||||
if (App.Config.SyncUrl == null)
|
||||
return;
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var path = Path.Combine(App.TempPath, $"{DateTime.Now:yyyy-MM-dd_HH-mm-ss}_{App.ZwstId}.elwig.zip");
|
||||
using var ctx = new AppDbContext();
|
||||
@ -216,6 +221,7 @@ namespace Elwig.Windows {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Lieferungen hochladen", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
@ -270,24 +276,31 @@ namespace Elwig.Windows {
|
||||
AreaCommitmentsButton.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 = "-";
|
||||
SeasonStatMembersGeb.Text = "-";
|
||||
SeasonStatWeightTotal.Text = "-";
|
||||
SeasonStatWeightGeb.Text = "-";
|
||||
SeasonStatWeightUngeb.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) {
|
||||
@ -315,7 +328,8 @@ namespace Elwig.Windows {
|
||||
if (d.ShowDialog() == false)
|
||||
return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var b = new Billing(year);
|
||||
await b.FinishSeason();
|
||||
@ -331,6 +345,7 @@ namespace Elwig.Windows {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
@ -346,7 +361,8 @@ namespace Elwig.Windows {
|
||||
if (d.ShowDialog() == false)
|
||||
return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var b = new Billing(year);
|
||||
await b.FinishSeason();
|
||||
@ -364,6 +380,7 @@ namespace Elwig.Windows {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
@ -379,7 +396,8 @@ namespace Elwig.Windows {
|
||||
if (d.ShowDialog() == false)
|
||||
return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var b = new Billing(year);
|
||||
await b.FinishSeason();
|
||||
@ -393,6 +411,7 @@ namespace Elwig.Windows {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
|
||||
@ -408,7 +427,8 @@ namespace Elwig.Windows {
|
||||
if (d.ShowDialog() == false)
|
||||
return;
|
||||
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
await Task.Run(async () => {
|
||||
try {
|
||||
var b = new Billing(year);
|
||||
await b.FinishSeason();
|
||||
@ -422,6 +442,7 @@ namespace Elwig.Windows {
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
});
|
||||
Mouse.OverrideCursor = null;
|
||||
}
|
||||
}
|
||||
|
@ -389,7 +389,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
var d = new DeleteMemberDialog(m.MgNr, m.AdministrativeName, areaComs, deliveries, credits);
|
||||
if (d.ShowDialog() == true) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
await MemberService.DeleteMember(m.MgNr, d.DeletePaymentData, d.DeleteDeliveries, d.DeleteAreaComs);
|
||||
} catch (Exception exc) {
|
||||
@ -408,7 +408,7 @@ namespace Elwig.Windows {
|
||||
}
|
||||
|
||||
private async void SaveButton_Click(object? sender, RoutedEventArgs? evt) {
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
SaveButton.IsEnabled = false;
|
||||
|
||||
int mgnr;
|
||||
@ -419,9 +419,8 @@ namespace Elwig.Windows {
|
||||
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;
|
||||
return;
|
||||
}
|
||||
|
||||
IsEditing = false;
|
||||
@ -436,6 +435,7 @@ namespace Elwig.Windows {
|
||||
await RefreshList();
|
||||
RefreshInputs();
|
||||
ViewModel.SearchQuery = "";
|
||||
Mouse.OverrideCursor = null;
|
||||
if (mgnr is int m)
|
||||
FocusMember(m);
|
||||
}
|
||||
@ -491,8 +491,9 @@ namespace Elwig.Windows {
|
||||
|
||||
private async void Menu_Contact_Letterhead_Click(object sender, RoutedEventArgs evt) {
|
||||
if (ViewModel.SelectedMember is not Member m) return;
|
||||
Mouse.OverrideCursor = Cursors.AppStarting;
|
||||
Mouse.OverrideCursor = Cursors.Wait;
|
||||
try {
|
||||
await Task.Run(async () => {
|
||||
using var doc = new Letterhead(m);
|
||||
await doc.Generate();
|
||||
if (!App.Config.Debug) {
|
||||
@ -500,6 +501,7 @@ namespace Elwig.Windows {
|
||||
} else {
|
||||
doc.Show();
|
||||
}
|
||||
});
|
||||
} catch (Exception exc) {
|
||||
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
<Project Sdk="WixToolset.Sdk/5.0.0">
|
||||
<Project Sdk="WixToolset.Sdk/6">
|
||||
<PropertyGroup>
|
||||
<HarvestFileSuppressUniqueIds>false</HarvestFileSuppressUniqueIds>
|
||||
<HarvestFileGenerateGuidsNow>true</HarvestFileGenerateGuidsNow>
|
||||
|
@ -2,3 +2,6 @@
|
||||
Elwig
|
||||
=====
|
||||
|
||||
**El**ektronische **Wi**nzer**g**enossenschaftsverwaltung (Electronic Management for Vintners' Cooperatives).
|
||||
|
||||
Further information may be found on [the website](https://elwig.at).
|
||||
|
@ -1,4 +1,6 @@
|
||||
<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">
|
||||
<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">
|
||||
<Bundle Name="Elwig" Manufacturer="Elwig" Version="!(bind.packageVersion.ElwigMsi)" UpgradeCode="f3c8fcab-c37c-43aa-9ab8-e42f4bb518b7"
|
||||
IconSourceFile="$(var.ElwigProjectDir)\Resources\Images\Elwig.ico">
|
||||
<BootstrapperApplication>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<Project Sdk="WixToolset.Sdk/5.0.0">
|
||||
<Project Sdk="WixToolset.Sdk/6">
|
||||
<PropertyGroup>
|
||||
<OutputType>Bundle</OutputType>
|
||||
<OutputName>Elwig</OutputName>
|
||||
@ -13,7 +13,7 @@
|
||||
</Target>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Installer\Installer.wixproj" />
|
||||
<PackageReference Include="WixToolset.Bal.wixext" Version="5.0.2" />
|
||||
<PackageReference Include="WixToolset.Util.wixext" Version="5.0.2" />
|
||||
<PackageReference Include="WixToolset.Bal.wixext" Version="6.0.0" />
|
||||
<PackageReference Include="WixToolset.Util.wixext" Version="6.0.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -19,16 +19,16 @@
|
||||
</Target>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
|
||||
<PackageReference Include="Appium.WebDriver" Version="4.4.5" />
|
||||
<PackageReference Include="NReco.PdfRenderer" Version="1.6.0" />
|
||||
<PackageReference Include="NUnit" Version="4.3.2" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.6.0">
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.7.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.3">
|
||||
<PackageReference Include="coverlet.collector" Version="6.0.4">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
Reference in New Issue
Block a user