Compare commits
	
		
			17 Commits
		
	
	
		
			v0.13.6
			...
			ffe85d471c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ffe85d471c | |||
| d1c07ee92a | |||
| 4af2fa256e | |||
| bf0db37872 | |||
| 3161351a30 | |||
| aa98909c0a | |||
| 775bb08e95 | |||
| fe0a7dab2a | |||
| 138dae715e | |||
| 28af7f8dd3 | |||
| 7cc2f75e7c | |||
| c7a2f2241d | |||
| bd4ebb8c35 | |||
| 6d88c5645c | |||
| 5d017cc8ea | |||
| 0b8a1b321f | |||
| 95927c3f1a | 
							
								
								
									
										67
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -3,15 +3,50 @@ 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 {#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 {#v0.13.7-misc} | ||||||
|  |  | ||||||
|  | * Im Auszahlungsvarianten-Fenster (`PaymentVariantsWindow`) ist es nun möglich das Datum einer Auszahlungsvariante zu ändern. (bd4ebb8c35) | ||||||
|  |  | ||||||
|  | [v0.13.7]: https://git.necronda.net/winzer/elwig/releases/tag/v0.13.7 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| [v0.13.6][v0.13.6] (2025-01-14) {#v0.13.6} | [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. | * 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) |   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) | * Abhängigkeiten aktualisiert. (95ccb2627c, 80fec4473a) | ||||||
|  |  | ||||||
| @@ -23,12 +58,12 @@ Changelog | |||||||
| [v0.13.5][v0.13.5] (2025-01-02) {#v0.13.5} | [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 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) | * 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) | * Abhängigkeiten aktualisiert. (c9e483ba9d, 633b560a67) | ||||||
|  |  | ||||||
| @@ -40,12 +75,12 @@ Changelog | |||||||
| [v0.13.4][v0.13.4] (2024-11-25) {#v0.13.4} | [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 _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) | * 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) | * Abhängigkeiten aktualisiert. (c3a2f983d5, 70e01849be, a99a23fd08, 4a10e94d71, 6c7f10cb26) | ||||||
|  |  | ||||||
| @@ -57,17 +92,17 @@ Changelog | |||||||
| [v0.13.3][v0.13.3] (2024-11-13) {#v0.13.3} | [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_ 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) | * 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) | * 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) | * 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) | * 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) | * Im Mitglieder-Fenster (`MemberAdminWindow`) Filter `Flächenbindung` (Mitglieder mit irgendeiner aktiven Flächenbindung) hinzugefügt. (a1d84dd988) | ||||||
| @@ -81,17 +116,17 @@ Changelog | |||||||
| [v0.13.2][v0.13.2] (2024-10-13) {#v0.13.2} | [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) | * 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) | * Fehler im Waagenprotokoll `Avery-Async` (L320) behoben. (8680e51052) | ||||||
| * Hausnummern in der BKI Traubentransportscheinliste werden in Excel richtig angezeigt. (86f7f693a0) | * 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) | * 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]) | * Weitere automatisierte Tests hinzugefügt. ([#11][i11]) | ||||||
| * Namenszusätze bei Gemeinden (z.B. an, bei, im, am) genauer angegeben. (65498dd18f) | * Namenszusätze bei Gemeinden (z.B. an, bei, im, am) genauer angegeben. (65498dd18f) | ||||||
| @@ -107,15 +142,15 @@ Changelog | |||||||
| [v0.13.1][v0.13.1] (2024-09-29) {#v0.13.1} | [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) | * 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) | * 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) | * Abhängigkeiten aktualisiert. (b6ae1f5675) | ||||||
|  |  | ||||||
| @@ -130,7 +165,7 @@ Changelog | |||||||
| > [!NOTE] | > [!NOTE] | ||||||
| > Ab dieser Version verhält sich die Berechnung der Unterlieferungen bei Flächenbindungen anders. | > 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) | * Im Lieferungen-Fenster (`DeliveryAdminWindow`) war das Extrahieren in eine neue Lieferung seit ca. 6 Monaten (98688168b8) nicht mehr möglich. (8a61747538) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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.6</Version> |     <Version>0.13.8</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.7" /> |     <PackageReference Include="LinqKit" Version="1.3.8" /> | ||||||
|     <PackageReference Include="MailKit" Version="4.9.0" /> |     <PackageReference Include="MailKit" Version="4.11.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.1" /> |     <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="9.0.4" /> | ||||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.1" /> |     <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.4" /> | ||||||
|     <PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="9.0.1" /> |     <PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="9.0.4" /> | ||||||
|     <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2903.40" /> |     <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3179.45" /> | ||||||
|     <PackageReference Include="NJsonSchema" Version="11.1.0" /> |     <PackageReference Include="NJsonSchema" Version="11.2.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.53" /> |     <PackageReference Include="ScottPlot.WPF" Version="5.0.55" /> | ||||||
|     <PackageReference Include="System.IO.Ports" Version="9.0.1" /> |     <PackageReference Include="System.IO.Ports" Version="9.0.4" /> | ||||||
|     <PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.1" /> |     <PackageReference Include="System.Text.Encoding.CodePages" Version="9.0.4" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
|  |  | ||||||
| </Project> | </Project> | ||||||
|   | |||||||
| @@ -306,6 +306,7 @@ namespace Elwig.Helpers.Billing { | |||||||
|                     if ((ks.Count > vaributes.Count() * 0.5 && useDefault) || ks.Count == vaributes.Count()) { |                     if ((ks.Count > vaributes.Count() * 0.5 && useDefault) || ks.Count == vaributes.Count()) { | ||||||
|                         foreach (var k in ks) { |                         foreach (var k in ks) { | ||||||
|                             if (!(originalData[$"{k[..2]}/"]?.AsValue().TryGetValue<string>(out var o) ?? false) || o == v) |                             if (!(originalData[$"{k[..2]}/"]?.AsValue().TryGetValue<string>(out var o) ?? false) || o == v) | ||||||
|  |                                 if (!(originalData[k.Split('-')[0]]?.AsValue().TryGetValue<string>(out var o2) ?? false) || o2 == v) | ||||||
|                                     data.Remove(k); |                                     data.Remove(k); | ||||||
|                         } |                         } | ||||||
|                         data["default"] = v; |                         data["default"] = v; | ||||||
| @@ -317,6 +318,7 @@ namespace Elwig.Helpers.Billing { | |||||||
|                     if ((ks.Count > vaributes.Count() * 0.5 && useDefault) || ks.Count == vaributes.Count()) { |                     if ((ks.Count > vaributes.Count() * 0.5 && useDefault) || ks.Count == vaributes.Count()) { | ||||||
|                         foreach (var k in ks) { |                         foreach (var k in ks) { | ||||||
|                             if (!(originalData[$"{k[..2]}/"]?.AsValue().TryGetValue<decimal>(out var o) ?? false) || o == v) |                             if (!(originalData[$"{k[..2]}/"]?.AsValue().TryGetValue<decimal>(out var o) ?? false) || o == v) | ||||||
|  |                                 if (!(originalData[k.Split('-')[0]]?.AsValue().TryGetValue<decimal>(out var o2) ?? false) || o2 == v) | ||||||
|                                     data.Remove(k); |                                     data.Remove(k); | ||||||
|                         } |                         } | ||||||
|                         data["default"] = v; |                         data["default"] = v; | ||||||
| @@ -371,6 +373,15 @@ namespace Elwig.Helpers.Billing { | |||||||
|                 } else if (k.Contains("/-")) { |                 } else if (k.Contains("/-")) { | ||||||
|                     data.Remove(k, out var val); |                     data.Remove(k, out var val); | ||||||
|                     data.Add(k.Replace("/-", "-"), val); |                     data.Add(k.Replace("/-", "-"), val); | ||||||
|  |                     if (k[0] == '/' || k.Contains('-')) { | ||||||
|  |                         foreach (var (k2, o) in originalData) { | ||||||
|  |                             if (!data.ContainsKey(k2) && k2.Contains('-') && k2.Contains("-" + k.Split('-')[1]) && !k2.Contains("/-") | ||||||
|  |                                 && (!k2.Contains('/') || k2.Length <= 4 || !data.ContainsKey(k2[2..]))) | ||||||
|  |                             { | ||||||
|  |                                 data[k2] = o?.DeepClone(); | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -46,14 +46,14 @@ namespace Elwig.Helpers.Billing { | |||||||
|                            m.mgnr, |                            m.mgnr, | ||||||
|                            v.avnr, |                            v.avnr, | ||||||
|                            ROUND(p.amount / POW(10, s.precision - 2)) AS net_amount, |                            ROUND(p.amount / POW(10, s.precision - 2)) AS net_amount, | ||||||
|                            ROUND(lp.amount / POW(10, s.precision - 2)) AS prev_amount, |                            IIF(lc.amount >= 0, ROUND(lp.amount / POW(10, s.precision - 2)), 0) AS prev_net_amount, | ||||||
|                            IIF(m.buchführend, s.vat_normal, s.vat_flatrate) AS vat, |                            IIF(m.buchführend, s.vat_normal, s.vat_flatrate) AS vat, | ||||||
|                            ROUND(IIF({Data.ConsiderTotalPenalty}, COALESCE(b.total_penalty, 0), 0) / POW(10, s.precision - 2)) + |                            ROUND(IIF({Data.ConsiderTotalPenalty}, COALESCE(b.total_penalty, 0), 0) / POW(10, s.precision - 2)) + | ||||||
|                            ROUND(IIF({Data.ConsiderContractPenalties}, COALESCE(u.total_penalty, 0), 0) / POW(10, 4 - 2)) + |                            ROUND(IIF({Data.ConsiderContractPenalties}, COALESCE(u.total_penalty, 0), 0) / POW(10, 4 - 2)) + | ||||||
|                            ROUND(IIF({Data.ConsiderAutoBusinessShares}, -COALESCE(a.total_amount, 0), 0) / POW(10, s.precision - 2)) + |                            ROUND(IIF({Data.ConsiderAutoBusinessShares}, -COALESCE(a.total_amount, 0), 0) / POW(10, s.precision - 2)) + | ||||||
|                            IIF({Data.ConsiderCustomModifiers}, COALESCE(x.amount, 0), 0) |                            IIF({Data.ConsiderCustomModifiers}, COALESCE(x.amount, 0), 0) | ||||||
|                            AS modifiers, |                            AS modifiers, | ||||||
|                            lc.modifiers AS prev_modifiers |                            IIF(lc.amount >= 0, lc.modifiers, 0) AS prev_modifiers | ||||||
|                     FROM season s |                     FROM season s | ||||||
|                         JOIN payment_variant v ON v.year = s.year |                         JOIN payment_variant v ON v.year = s.year | ||||||
|                         LEFT JOIN payment_variant l ON l.year = s.year |                         LEFT JOIN payment_variant l ON l.year = s.year | ||||||
|   | |||||||
| @@ -23,6 +23,10 @@ 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; | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ namespace Elwig.Models.Dtos { | |||||||
|  |  | ||||||
|         public static IEnumerable<Transaction> FromPaymentVariant(PaymentVar variant) { |         public static IEnumerable<Transaction> FromPaymentVariant(PaymentVar variant) { | ||||||
|             return variant.Credits |             return variant.Credits | ||||||
|                 .Where(c => c.Member.Iban != null) |                 .Where(c => c.Member.Iban != null && c.Amount > 0) | ||||||
|                 .OrderBy(c => c.TgNr) |                 .OrderBy(c => c.TgNr) | ||||||
|                 .Select(c => new Transaction(c)) |                 .Select(c => new Transaction(c)) | ||||||
|                 .ToList(); |                 .ToList(); | ||||||
|   | |||||||
| @@ -225,30 +225,8 @@ namespace Elwig.Windows { | |||||||
|             DataPlot.Color = ColorUngebunden; |             DataPlot.Color = ColorUngebunden; | ||||||
|             DataPlot.MarkerStyle = new MarkerStyle(MarkerShape.FilledCircle, 9, ColorUngebunden); |             DataPlot.MarkerStyle = new MarkerStyle(MarkerShape.FilledCircle, 9, ColorUngebunden); | ||||||
|  |  | ||||||
|             //OechslePricePlot.Interaction.Enable(new PlotActions() { |  | ||||||
|             //    ZoomIn = StandardActions.ZoomIn, |  | ||||||
|             //    ZoomOut = StandardActions.ZoomOut, |  | ||||||
|             //    PanUp = StandardActions.PanUp, |  | ||||||
|             //    PanDown = StandardActions.PanDown, |  | ||||||
|             //    PanLeft = StandardActions.PanLeft, |  | ||||||
|             //    PanRight = StandardActions.PanRight, |  | ||||||
|             //    DragPan = StandardActions.DragPan, |  | ||||||
|             //    DragZoom = StandardActions.DragZoom, |  | ||||||
|             //    DragZoomRectangle = StandardActions.DragZoomRectangle, |  | ||||||
|             //    ZoomRectangleClear = StandardActions.ZoomRectangleClear, |  | ||||||
|             //    ZoomRectangleApply = StandardActions.ZoomRectangleApply, |  | ||||||
|             //    AutoScale = StandardActions.AutoScale, |  | ||||||
|             //}); |  | ||||||
|  |  | ||||||
|             //OechslePricePlot.Plot.XAxis.ManualTickSpacing(1); |  | ||||||
|             //OechslePricePlot.Plot.YAxis.ManualTickSpacing(0.1); |  | ||||||
|             OechslePricePlot.Plot.Axes.SetLimits(Math.Min(GraphEntry.MinX, GraphEntry.MinXGeb) - 1, GraphEntry.MaxX + 1, -0.1, 1.5); |             OechslePricePlot.Plot.Axes.SetLimits(Math.Min(GraphEntry.MinX, GraphEntry.MinXGeb) - 1, GraphEntry.MaxX + 1, -0.1, 1.5); | ||||||
|  |  | ||||||
|             //OechslePricePlot.Plot.Layout(padding: 0); |  | ||||||
|             //OechslePricePlot.Plot.XAxis2.Layout(padding: 0); |  | ||||||
|             //OechslePricePlot.Plot.YAxis.Layout(padding: 0); |  | ||||||
|             //OechslePricePlot.Plot.YAxis2.Layout(padding: 0); |  | ||||||
|  |  | ||||||
|             HighlightedPointPlot = OechslePricePlot.Plot.Add.Marker(0, 0, MarkerShape.OpenCircle, 10, Colors.Red); |             HighlightedPointPlot = OechslePricePlot.Plot.Add.Marker(0, 0, MarkerShape.OpenCircle, 10, Colors.Red); | ||||||
|             HighlightedPointPlot.IsVisible = false; |             HighlightedPointPlot.IsVisible = false; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -310,19 +310,23 @@ namespace Elwig.Windows { | |||||||
|                 UnsetDefaultValue(GerebeltGewogenInput); |                 UnsetDefaultValue(GerebeltGewogenInput); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             if (!App.Client.HasNetWeighing(ViewModel.Branch)) { |             if (App.Client.HasBoxWeighing(ViewModel.Branch)) { | ||||||
|                 LesewagenInput.IsEnabled = false; |                 LesewagenInput.IsEnabled = false; | ||||||
|                 SetDefaultValue(LesewagenInput, false); |                 SetDefaultValue(LesewagenInput, false); | ||||||
|                 HandPickedInput.IsThreeState = false; |  | ||||||
|                 UnsetDefaultValue(HandPickedInput); |  | ||||||
|             } else { |             } else { | ||||||
|                 LesewagenInput.IsEnabled = true; |                 LesewagenInput.IsEnabled = true; | ||||||
|                 UnsetDefaultValue(LesewagenInput); |                 UnsetDefaultValue(LesewagenInput); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (!App.Client.HasNetWeighing(ViewModel.Branch)) { | ||||||
|  |                 HandPickedInput.IsThreeState = false; | ||||||
|  |                 UnsetDefaultValue(HandPickedInput); | ||||||
|  |             } else { | ||||||
|                 HandPickedInput.IsThreeState = true; |                 HandPickedInput.IsThreeState = true; | ||||||
|                 SetDefaultValue(HandPickedInput, null); |                 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; |                 GebundenInput.IsEnabled = false; | ||||||
|                 SetDefaultValue(GebundenInput, null); |                 SetDefaultValue(GebundenInput, null); | ||||||
|             } else { |             } else { | ||||||
| @@ -1380,7 +1384,7 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private void GerebeltGewogenInput_Changed(object sender, RoutedEventArgs evt) { |         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; |                 HandPickedInput.IsChecked = !GerebeltGewogenInput.IsChecked; | ||||||
|             } |             } | ||||||
|             if (!ViewModel.IsReceipt || App.Client.HasNetWeighing(ViewModel.Branch)) { |             if (!ViewModel.IsReceipt || App.Client.HasNetWeighing(ViewModel.Branch)) { | ||||||
| @@ -1390,7 +1394,7 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private void HandPickedInput_Changed(object sender, RoutedEventArgs evt) { |         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; |                 GerebeltGewogenInput.IsChecked = !HandPickedInput.IsChecked; | ||||||
|             } |             } | ||||||
|             CheckBox_Changed(sender, evt); |             CheckBox_Changed(sender, evt); | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private async void TimeSpanInput_SelectionChanged(object sender, RoutedEventArgs evt) { |         private async void TimeSpanInput_SelectionChanged(object sender, RoutedEventArgs evt) { | ||||||
|  |             if (!IsLoaded) return; | ||||||
|             DateTime? fromDate = DateTime.Now; |             DateTime? fromDate = DateTime.Now; | ||||||
|             if (TimeSpanInput.SelectedIndex == 0) { |             if (TimeSpanInput.SelectedIndex == 0) { | ||||||
|                 fromDate = fromDate.Value.AddDays(-7); |                 fromDate = fromDate.Value.AddDays(-7); | ||||||
| @@ -50,6 +51,7 @@ namespace Elwig.Windows { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         private void ApplyFilters() { |         private void ApplyFilters() { | ||||||
|  |             if (!IsLoaded) return; | ||||||
|             var filters = FilterInput.Text.Split(' '); |             var filters = FilterInput.Text.Split(' '); | ||||||
|             IEnumerable<Row> data = Data; |             IEnumerable<Row> data = Data; | ||||||
|             switch (TypeInput.SelectedIndex) { |             switch (TypeInput.SelectedIndex) { | ||||||
|   | |||||||
| @@ -140,8 +140,9 @@ | |||||||
|             <TextBox x:Name="CommentInput" Grid.Column="1" HorizontalAlignment="Stretch" Margin="0,40,10,0" |             <TextBox x:Name="CommentInput" Grid.Column="1" HorizontalAlignment="Stretch" Margin="0,40,10,0" | ||||||
|                      TextChanged="CommentInput_TextChanged"/> |                      TextChanged="CommentInput_TextChanged"/> | ||||||
|  |  | ||||||
|             <Label Content="Erstellt am:" Margin="10,70,0,0" Grid.Column="0"/> |             <Label Content="Datum:" Margin="10,70,0,0" Grid.Column="0"/> | ||||||
|             <TextBox x:Name="DateInput" Grid.Column="1" Width="77" HorizontalAlignment="Left" Margin="0,70,10,0" IsReadOnly="True"/> |             <TextBox x:Name="DateInput" Grid.Column="1" Width="77" HorizontalAlignment="Left" Margin="0,70,10,0" | ||||||
|  |                      TextChanged="DateInput_TextChanged"/> | ||||||
|  |  | ||||||
|             <Label Content="Überwiesen am:" Margin="10,100,0,0" Grid.Column="0"/> |             <Label Content="Überwiesen am:" Margin="10,100,0,0" Grid.Column="0"/> | ||||||
|             <TextBox x:Name="TransferDateInput" Grid.Column="1" Width="77" HorizontalAlignment="Left" Margin="0,100,10,0" |             <TextBox x:Name="TransferDateInput" Grid.Column="1" Width="77" HorizontalAlignment="Left" Margin="0,100,10,0" | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ namespace Elwig.Windows { | |||||||
|  |  | ||||||
|         public readonly int Year; |         public readonly int Year; | ||||||
|         public readonly bool SeasonLocked; |         public readonly bool SeasonLocked; | ||||||
|         private bool DataValid, DataChanged, NameChanged, CommentChanged, TransferDateValid, TransferDateChanged; |         private bool DataValid, DataChanged, NameChanged, CommentChanged, DateValid, DateChanged, TransferDateValid, TransferDateChanged; | ||||||
|         private BillingData? BillingData; |         private BillingData? BillingData; | ||||||
|         private bool WeightModifierChanged = false; |         private bool WeightModifierChanged = false; | ||||||
|  |  | ||||||
| @@ -175,6 +175,7 @@ namespace Elwig.Windows { | |||||||
|         private void UpdateSaveButton() { |         private void UpdateSaveButton() { | ||||||
|             SaveButton.IsEnabled = PaymentVariantList.SelectedItem != null && |             SaveButton.IsEnabled = PaymentVariantList.SelectedItem != null && | ||||||
|                 ((DataChanged && DataValid) || NameChanged || CommentChanged || |                 ((DataChanged && DataValid) || NameChanged || CommentChanged || | ||||||
|  |                 (DateChanged && DateValid) || | ||||||
|                 (TransferDateChanged && TransferDateValid) || |                 (TransferDateChanged && TransferDateValid) || | ||||||
|                 (ConsiderModifiersInput.IsChecked != BillingData?.ConsiderDelieryModifiers) || |                 (ConsiderModifiersInput.IsChecked != BillingData?.ConsiderDelieryModifiers) || | ||||||
|                 (ConsiderPenaltiesInput.IsChecked != BillingData?.ConsiderContractPenalties) || |                 (ConsiderPenaltiesInput.IsChecked != BillingData?.ConsiderContractPenalties) || | ||||||
| @@ -433,10 +434,16 @@ namespace Elwig.Windows { | |||||||
|  |  | ||||||
|             var withoutIban = v.Credits.Count(c => c.Member.Iban == null); |             var withoutIban = v.Credits.Count(c => c.Member.Iban == null); | ||||||
|             if (withoutIban > 0) { |             if (withoutIban > 0) { | ||||||
|                 var r = MessageBox.Show($"Achtung: Für {withoutIban} Mitglieder ist kein IBAN hinterlegt.\nDiese werden NICHT exportiert.", |                 var r = MessageBox.Show($"Achtung: Für {withoutIban:N0} Mitglieder ist kein IBAN hinterlegt.\n\nDiese werden NICHT exportiert.", | ||||||
|                     "Mitglieder ohne IBAN", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); |                     "Mitglieder ohne IBAN", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel); | ||||||
|                 if (r != MessageBoxResult.OK) return; |                 if (r != MessageBoxResult.OK) return; | ||||||
|             } |             } | ||||||
|  |             var withNegAmount = v.Credits.Count(c => c.Amount <= 0); | ||||||
|  |             if (withNegAmount > 0) { | ||||||
|  |                 var r = MessageBox.Show($"Achtung: Es gibt {withNegAmount:N0} Traubengutschriften mit negativem Betrag.\n\nDiese werden NICHT exportiert.", | ||||||
|  |                     "Traubengutschriften mit negativem Betrag", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.OK); | ||||||
|  |                 if (r != MessageBoxResult.OK) return; | ||||||
|  |             } | ||||||
|  |  | ||||||
|             var d = new SaveFileDialog() { |             var d = new SaveFileDialog() { | ||||||
|                 FileName = $"{App.Client.NameToken}-Überweisungsdaten-{v.Year}-{v.Name.Trim().Replace(' ', '-')}.{Ebics.FileExtension}", |                 FileName = $"{App.Client.NameToken}-Überweisungsdaten-{v.Year}-{v.Name.Trim().Replace(' ', '-')}.{Ebics.FileExtension}", | ||||||
| @@ -489,6 +496,7 @@ namespace Elwig.Windows { | |||||||
|             try { |             try { | ||||||
|                 v.Name = NameInput.Text; |                 v.Name = NameInput.Text; | ||||||
|                 v.Comment = (CommentInput.Text != "") ? CommentInput.Text : null; |                 v.Comment = (CommentInput.Text != "") ? CommentInput.Text : null; | ||||||
|  |                 v.DateString = string.Join("-", DateInput.Text.Split(".").Reverse()); | ||||||
|                 v.TransferDateString = (TransferDateInput.Text != "") ? string.Join("-", TransferDateInput.Text.Split(".").Reverse()) : null; |                 v.TransferDateString = (TransferDateInput.Text != "") ? string.Join("-", TransferDateInput.Text.Split(".").Reverse()) : null; | ||||||
|                 var d = App.Config.Debug ? BillingData.FromJson(DataInput.Text) : BillingData; |                 var d = App.Config.Debug ? BillingData.FromJson(DataInput.Text) : BillingData; | ||||||
|                 d.ConsiderDelieryModifiers = ConsiderModifiersInput.IsChecked ?? false; |                 d.ConsiderDelieryModifiers = ConsiderModifiersInput.IsChecked ?? false; | ||||||
| @@ -557,6 +565,27 @@ namespace Elwig.Windows { | |||||||
|             UpdateSaveButton(); |             UpdateSaveButton(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         private void DateInput_TextChanged(object sender, TextChangedEventArgs evt) { | ||||||
|  |             if (PaymentVariantList.SelectedItem is not PaymentVar v) { | ||||||
|  |                 ControlUtils.ClearInputState(DateInput); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             var res = Validator.CheckDate(DateInput, true); | ||||||
|  |             if (!res.IsValid) { | ||||||
|  |                 ControlUtils.SetInputInvalid(DateInput); | ||||||
|  |                 DateValid = false; | ||||||
|  |             } else if (DateInput.Text != $"{v.Date:dd.MM.yyyy}") { | ||||||
|  |                 ControlUtils.SetInputChanged(DateInput); | ||||||
|  |                 DateValid = true; | ||||||
|  |                 DateChanged = true; | ||||||
|  |             } else { | ||||||
|  |                 ControlUtils.ClearInputState(DateInput); | ||||||
|  |                 DateValid = true; | ||||||
|  |                 DateChanged = false; | ||||||
|  |             } | ||||||
|  |             UpdateSaveButton(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         private void TransferDateInput_TextChanged(object sender, TextChangedEventArgs evt) { |         private void TransferDateInput_TextChanged(object sender, TextChangedEventArgs evt) { | ||||||
|             if (PaymentVariantList.SelectedItem is not PaymentVar v) { |             if (PaymentVariantList.SelectedItem is not PaymentVar v) { | ||||||
|                 ControlUtils.ClearInputState(TransferDateInput); |                 ControlUtils.ClearInputState(TransferDateInput); | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| <Project Sdk="WixToolset.Sdk/5.0.0"> | <Project Sdk="WixToolset.Sdk/6"> | ||||||
|   <PropertyGroup> |   <PropertyGroup> | ||||||
|     <HarvestFileSuppressUniqueIds>false</HarvestFileSuppressUniqueIds> |     <HarvestFileSuppressUniqueIds>false</HarvestFileSuppressUniqueIds> | ||||||
|     <HarvestFileGenerateGuidsNow>true</HarvestFileGenerateGuidsNow> |     <HarvestFileGenerateGuidsNow>true</HarvestFileGenerateGuidsNow> | ||||||
|   | |||||||
| @@ -2,3 +2,6 @@ | |||||||
| Elwig | 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" |   <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> | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| <Project Sdk="WixToolset.Sdk/5.0.0"> | <Project Sdk="WixToolset.Sdk/6"> | ||||||
|   <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="5.0.2" /> |     <PackageReference Include="WixToolset.Bal.wixext" Version="6.0.0" /> | ||||||
|     <PackageReference Include="WixToolset.Util.wixext" Version="5.0.2" /> |     <PackageReference Include="WixToolset.Util.wixext" Version="6.0.0" /> | ||||||
|   </ItemGroup> |   </ItemGroup> | ||||||
| </Project> | </Project> | ||||||
| @@ -972,5 +972,67 @@ namespace Tests.HelperTests { | |||||||
|                 } |                 } | ||||||
|                 """)); |                 """)); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         private static IEnumerable<List<T>> GetPermutations<T>(T[] input) { | ||||||
|  |             if (input.Length <= 1) | ||||||
|  |                 yield return [..input]; | ||||||
|  |             for (int i = 0; i < input.Length; i++) { | ||||||
|  |                 yield return [input[i]]; | ||||||
|  |                 foreach (var p in GetPermutations(input.Where((_, j) => j != i).ToArray())) { | ||||||
|  |                     p.Insert(0, input[i]); | ||||||
|  |                     yield return p; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private static IEnumerable<List<HashSet<RawVaribute>>> GetCurves(RawVaribute[] vaributes, int minNumCurves = 1, int maxNumCurves = 10) { | ||||||
|  |             foreach (var p in GetPermutations(vaributes)) { | ||||||
|  |                 for (int nCurves = minNumCurves; nCurves <= Math.Min(maxNumCurves, p.Count); nCurves++) { | ||||||
|  |                     yield return Enumerable.Range(0, nCurves) | ||||||
|  |                         .Select(n => p.Where((v, idx) => idx % nCurves == n).ToHashSet()) | ||||||
|  |                         .ToList(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private readonly HashSet<string> TestedCurves = []; | ||||||
|  |  | ||||||
|  |         private void TestCollapse(List<HashSet<RawVaribute>> curves) { | ||||||
|  |             var str = string.Join("\n", curves.Select(c => string.Join("  ", c.Select(v => v.ToString().PadRight(6)).Order())).Order().Select((c, n) => $"{n + 1}: [ " + c + " ]")); | ||||||
|  |             if (!TestedCurves.Add(str)) | ||||||
|  |                 return; | ||||||
|  |             var vaributes = curves.SelectMany(v => v).ToList(); | ||||||
|  |             List<GraphEntry> entries = curves | ||||||
|  |                 .Select((l, n) => new GraphEntry(n, 4, new BillingData.Curve(BillingData.CurveMode.Oe, new() { | ||||||
|  |                     [73] = n + 1, | ||||||
|  |                 }, null), GetSelection(l.Select(v => v.ToString())))) | ||||||
|  |                 .ToList(); | ||||||
|  |             var data = BillingData.FromGraphEntries(entries); | ||||||
|  |             var test = PaymentBillingData.FromJson(data.ToJsonString(), vaributes); | ||||||
|  |             for (int i = 0; i < curves.Count; i++) { | ||||||
|  |                 foreach (var v in curves[i]) { | ||||||
|  |                     var val = test.CalculatePrice(v.SortId!, v.AttrId, v.CultId, "QUW", false, 73.0, 15.0); | ||||||
|  |                     var actualCurve = (int)val; | ||||||
|  |                     Assert.That(actualCurve, Is.EqualTo(i + 1), $"Invalid: {v} (Curve {i + 1} -> {actualCurve})\n\n{str}\n\n{data.ToJsonString(JsonOpts)}\n"); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         [Test] | ||||||
|  |         public void TestCollapse_01_Permutations() { | ||||||
|  |             RawVaribute[][] configurations = [ | ||||||
|  |                 [new("GV/-"), new("WR/-"), new("ZW/-"), new("GV/K-"), new("WR/K-"), new("ZW/K-")], | ||||||
|  |                 [new("GV/-"), new("WR/-"), new("GV/K-"), new("WR/K-"), new("GV/S-"), new("WR/S-")], | ||||||
|  |                 [new("GV/-"), new("WR/-"), new("ZW/-"), new("GV/-B"), new("WR/-B"), new("ZW/-B")], | ||||||
|  |                 [new("GV/-"), new("WR/-"), new("GV/-B"), new("WR/-B"), new("GV/-KIP"), new("WR/-KIP")], | ||||||
|  |                 [new("GV/-"), new("GV/K-"), new("ZW/-"), new("ZW/K-"), new("GV/-B"), new("GV/K-B"), new("ZW/-B"), new("ZW/K-B")], | ||||||
|  |             ]; | ||||||
|  |             Assert.Multiple(() => { | ||||||
|  |                 foreach (var config in configurations) { | ||||||
|  |                     foreach (var c in GetCurves(config)) | ||||||
|  |                         TestCollapse(c); | ||||||
|  |                 } | ||||||
|  |             }); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -19,16 +19,16 @@ | |||||||
|   </Target> |   </Target> | ||||||
|  |  | ||||||
|   <ItemGroup> |   <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="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="4.6.0" /> |     <PackageReference Include="NUnit3TestAdapter" Version="5.0.0" /> | ||||||
|     <PackageReference Include="NUnit.Analyzers" Version="4.6.0"> |     <PackageReference Include="NUnit.Analyzers" Version="4.7.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.3"> |     <PackageReference Include="coverlet.collector" Version="6.0.4"> | ||||||
|       <PrivateAssets>all</PrivateAssets> |       <PrivateAssets>all</PrivateAssets> | ||||||
|       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> |       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | ||||||
|     </PackageReference> |     </PackageReference> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user