Compare commits
	
		
			1 Commits
		
	
	
		
			v1.0.1.5
			...
			6b8202d1e6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6b8202d1e6 | 
							
								
								
									
										32
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -2,42 +2,12 @@ | ||||
| Changelog | ||||
| ========= | ||||
|  | ||||
| [v1.0.1.5][v1.0.1.5] (2025-10-29) {#v1.0.1.5} | ||||
| --------------------------------------------- | ||||
|  | ||||
| ### Behobene Fehler {#v1.0.1.5-bugfixes} | ||||
|  | ||||
| * Im Rundschreiben-Fenster (`MailWindow`) kam es zu einem Absturz, wenn man das Fenster über den "Anlieferungsbestätigung"-Knopf im Leseabschluss-Abschnitt geöffnet hat. (af98c32026) | ||||
|  | ||||
| [v1.0.1.5]: https://git.necronda.net/winzer/elwig/releases/tag/v1.0.1.5 | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| [v1.0.1.4][v1.0.1.4] (2025-10-28) {#v1.0.1.4} | ||||
| --------------------------------------------- | ||||
|  | ||||
| ### Behobene Fehler {#v1.0.1.4-bugfixes} | ||||
|  | ||||
| * Im Rundschreiben-Fenster (`MailWindow`) kam es zu einem Absturz, wenn man die Zustelloptionen "Post zusenden an Mitglieder, die keine E-Mail erhalten würden" und "E-Mail zusenden an niemanden" kombiniert hat. (2de8af878b) | ||||
|  | ||||
| ### Sonstiges {#v1.0.1.4-misc} | ||||
|  | ||||
| * Im Auszahlungsvariante-Fenster (`ChartWindow`) gibt es keine Fehlermeldung mehr wenn nicht für alle Sorten ein Preis definiert ist, nur noch eine Warnung. (428cd6ddc2) | ||||
|  | ||||
| [v1.0.1.4]: https://git.necronda.net/winzer/elwig/releases/tag/v1.0.1.4 | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| [v1.0.1.3][v1.0.1.3] (2025-10-13) {#v1.0.1.3} | ||||
| --------------------------------------------- | ||||
|  | ||||
| ### Neue Funktionen {#v1.0.1.3-features} | ||||
|  | ||||
| * In der Liste des Lieferungen-Fenster (`DeliveryAdminWindow`) werden | ||||
| 	* statt ausschließlich der Sorte auch Attribut und Bewirtschaftungsart angezeigt. (a0d4f19f30) | ||||
| 	* Kommentare der Lieferungen (und Teillieferungen) angezeigt. (548aeb2ce9) | ||||
| * In der Liste des Lieferungen-Fenster (`DeliveryAdminWindow`) werden statt ausschließlich der Sorte auch Attribut und Bewirtschaftungsart angezeigt. (a0d4f19f30) | ||||
|  | ||||
| ### Sonstiges {#v1.0.1.3-misc} | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
|     <UseWPF>true</UseWPF> | ||||
|     <PreserveCompilationContext>true</PreserveCompilationContext> | ||||
|     <ApplicationIcon>Resources\Images\Elwig.ico</ApplicationIcon> | ||||
|     <Version>1.0.1.5</Version> | ||||
|     <Version>1.0.1.3</Version> | ||||
|     <SatelliteResourceLanguages>de-AT</SatelliteResourceLanguages> | ||||
|     <AllowUnsafeBlocks>true</AllowUnsafeBlocks> | ||||
|     <ApplicationManifest>app.manifest</ApplicationManifest> | ||||
|   | ||||
| @@ -20,19 +20,13 @@ namespace Elwig.Helpers.Billing { | ||||
|             Data = PaymentBillingData.FromJson(PaymentVariant.Data, Utils.GetVaributes(ctx, Year, onlyDelivered: false)); | ||||
|         } | ||||
|  | ||||
|         public async Task Calculate(bool strictPrices = true, bool? honorGebunden = null, bool? allowAttrsIntoLower = null, bool? avoidUnderDeliveries = null) { | ||||
|         public async Task Calculate(bool? honorGebunden = null, bool? allowAttrsIntoLower = null, bool? avoidUnderDeliveries = null) { | ||||
|             using var cnx = await AppDbContext.ConnectAsync(); | ||||
|             using var tx = await cnx.BeginTransactionAsync(); | ||||
|             await CalculateBuckets(honorGebunden, allowAttrsIntoLower, avoidUnderDeliveries, cnx); | ||||
|             await DeleteInDb(cnx); | ||||
|             await SetCalcTime(cnx); | ||||
|             KeyNotFoundException? exception = null; | ||||
|             try { | ||||
|                 await CalculatePrices(cnx, strictPrices); | ||||
|             } catch (KeyNotFoundException e) { | ||||
|                 if (strictPrices) throw; | ||||
|                 exception = e; | ||||
|             } | ||||
|             await CalculatePrices(cnx); | ||||
|             if (Data.ConsiderDelieryModifiers) { | ||||
|                 await CalculateDeliveryModifiers(cnx); | ||||
|             } | ||||
| @@ -40,8 +34,6 @@ namespace Elwig.Helpers.Billing { | ||||
|                 await CalculateMemberModifiers(cnx); | ||||
|             } | ||||
|             await tx.CommitAsync(); | ||||
|             if (exception != null) | ||||
|                 throw exception; | ||||
|         } | ||||
|  | ||||
|         public async Task Commit() { | ||||
| @@ -150,8 +142,7 @@ namespace Elwig.Helpers.Billing { | ||||
|                 """); | ||||
|         } | ||||
|  | ||||
|         protected async Task CalculatePrices(SqliteConnection cnx, bool strict = true) { | ||||
|             var invalid = new HashSet<string>(); | ||||
|         protected async Task CalculatePrices(SqliteConnection cnx) { | ||||
|             var parts = new List<(int Year, int DId, int DPNr, int BktNr, string SortId, string? AttrId, string? CultId, string Discr, int Value, double Oe, double Kmw, string QualId, bool AttrAreaCom)>(); | ||||
|             using (var cmd = cnx.CreateCommand()) { | ||||
|                 cmd.CommandText = $""" | ||||
| @@ -181,25 +172,15 @@ namespace Elwig.Helpers.Billing { | ||||
|                 var payAttrId = (part.Discr is "" or "_") ? null : part.Discr; | ||||
|                 var attrId = part.AttrAreaCom ? payAttrId : part.AttrId; | ||||
|                 var geb = !ungeb && (payAttrId == attrId || !part.AttrAreaCom); | ||||
|                 decimal price = 0; | ||||
|                 try { | ||||
|                     price = Data.CalculatePrice(part.SortId, attrId, part.CultId, part.QualId, geb, part.Oe, part.Kmw); | ||||
|                 } catch (KeyNotFoundException e) { | ||||
|                     invalid.Add(e.Message.Split('\'')[1]); | ||||
|                 } | ||||
|                 var price = Data.CalculatePrice(part.SortId, attrId, part.CultId, part.QualId, geb, part.Oe, part.Kmw); | ||||
|                 var priceL = PaymentVariant.Season.DecToDb(price); | ||||
|                 inserts.Add((part.Year, part.DId, part.DPNr, part.BktNr, priceL, priceL * part.Value)); | ||||
|             } | ||||
|  | ||||
|             var msg = invalid.Count == 0 ? null : "Für folgende Sorten wurde noch keine Preiskurve festgelegt: " + string.Join(", ", invalid); | ||||
|             if (msg != null && strict) | ||||
|                 throw new KeyNotFoundException(msg); | ||||
|             await AppDbContext.ExecuteBatch(cnx, $""" | ||||
|                 INSERT INTO payment_delivery_part_bucket (year, did, dpnr, bktnr, avnr, price, amount) | ||||
|                 VALUES {string.Join(",\n       ", inserts.Select(i => $"({i.Year}, {i.DId}, {i.DPNr}, {i.BktNr}, {AvNr}, {i.Price}, {i.Amount})"))}; | ||||
|                 """); | ||||
|             if (msg != null) | ||||
|                 throw new KeyNotFoundException(msg); | ||||
|         } | ||||
|  | ||||
|         protected async Task CalculateDeliveryModifiers(SqliteConnection cnx) { | ||||
|   | ||||
| @@ -63,11 +63,6 @@ namespace Elwig.Models.Entities { | ||||
|         [Column("comment")] | ||||
|         public string? Comment { get; set; } | ||||
|  | ||||
|         [NotMapped] | ||||
|         public string[] Comments => [.. Parts.Select(p => p.Comment).Prepend(Comment).Where(c => c != null).Cast<string>()]; | ||||
|         [NotMapped] | ||||
|         public string CommentsString => string.Join(" / ", Comments); | ||||
|  | ||||
|         [Column("ctime"), DatabaseGenerated(DatabaseGeneratedOption.Computed)] | ||||
|         public long CTime { get; set; } | ||||
|         [NotMapped] | ||||
|   | ||||
| @@ -664,10 +664,8 @@ namespace Elwig.Windows { | ||||
|             try { | ||||
|                 await Task.Run(async () => { | ||||
|                     var b = new BillingVariant(PaymentVar.Year, PaymentVar.AvNr); | ||||
|                     await b.Calculate(false); | ||||
|                     await b.Calculate(); | ||||
|                 }); | ||||
|             } catch (KeyNotFoundException exc) { | ||||
|                 MessageBox.Show(exc.Message, "Noch nicht alle Preise festgelegt", MessageBoxButton.OK, MessageBoxImage.Information); | ||||
|             } catch (Exception exc) { | ||||
|                 MessageBox.Show(exc.Message, "Berechnungsfehler", MessageBoxButton.OK, MessageBoxImage.Error); | ||||
|             } | ||||
|   | ||||
| @@ -295,7 +295,6 @@ | ||||
|                     <DataGridTextColumn Header="LsNr." Binding="{Binding LsNr}" Width="120"/> | ||||
|                     <DataGridTextColumn Header="Mitglied" Binding="{Binding Member.AdministrativeName}" Width="180"/> | ||||
|                     <DataGridTextColumn Header="Zu-/Abschläge" Binding="{Binding FilteredModifiersString}" Width="150"/> | ||||
|                     <DataGridTextColumn Header="Kommentar" Binding="{Binding CommentsString}" Width="150"/> | ||||
|                 </DataGrid.Columns> | ||||
|             </DataGrid> | ||||
|  | ||||
|   | ||||
| @@ -738,7 +738,7 @@ namespace Elwig.Windows { | ||||
|                 PostalNoEmailInput.IsChecked == true ? 1 : 0; | ||||
|             var emailMode = EmailAllInput.IsChecked == true ? 2 : EmailWishInput.IsChecked == true ? 1 : 0; | ||||
|  | ||||
|             double printNum = printMode == 3 ? PostalAllCount : printMode == 2 ? PostalWishCount : printMode == 1 ? PostalNoEmailCount : 0; | ||||
|             double printNum = printMode == 3 ? PostalAllCount : printMode == 2 ? PostalWishCount : printMode == 2 ? PostalNoEmailCount : 0; | ||||
|             double emailNum = emailMode == 2 ? EmailAllCount : emailMode == 1 ? EmailWishCount : 0; | ||||
|             double totalNum = printNum + emailNum; | ||||
|  | ||||
| @@ -954,7 +954,7 @@ namespace Elwig.Windows { | ||||
|             AvaiableDocumentsList.SelectedIndex = 1; | ||||
|             if (AvaiableDocumentsList.SelectedItem is not string s || SelectedDocs.Any(d => d.Type == DocType.DeliveryConfirmation)) | ||||
|                 return; | ||||
|             SelectedDocs.Add(new(DocType.DeliveryConfirmation, s, Year)); | ||||
|             SelectedDocs.Add(new(DocType.DeliveryConfirmation, s, (Year, DocumentNonDeliverersInput.IsChecked == true))); | ||||
|             SelectedDocumentsList.SelectedIndex = SelectedDocs.Count - 1; | ||||
|             RecipientsDeliveryMembersInput.IsChecked = true; | ||||
|         } | ||||
|   | ||||
| @@ -13,7 +13,7 @@ About | ||||
| **Product:** Elwig   | ||||
| **Description:** Electronic Management for Vintners' Cooperatives   | ||||
| **Type:** ERP system   | ||||
| **Version:** 1.0.1.5 ([Changelog](./CHANGELOG.md))   | ||||
| **Version:** 1.0.1.3 ([Changelog](./CHANGELOG.md))   | ||||
| **License:** [GNU General Public License 3.0 (GPLv3)](./LICENSE)   | ||||
| **Website:** https://elwig.at/   | ||||
| **Source code:** https://git.necronda.net/winzer/elwig   | ||||
| @@ -33,7 +33,7 @@ Packaging: [WiX Toolset](https://www.firegiant.com/wixtoolset/) | ||||
| **Produkt:** Elwig   | ||||
| **Beschreibung:** Elektronische Winzergenossenschaftsverwaltung   | ||||
| **Typ:** Warenwirtschaftssystem (ERP-System)   | ||||
| **Version:** 1.0.1.5 ([Änderungsprotokoll](./CHANGELOG.md))   | ||||
| **Version:** 1.0.1.2 ([Änderungsprotokoll](./CHANGELOG.md))   | ||||
| **Lizenz:** [GNU General Public License 3.0 (GPLv3)](./LICENSE)   | ||||
| **Website:** https://elwig.at/   | ||||
| **Quellcode:** https://git.necronda.net/winzer/elwig   | ||||
|   | ||||
| @@ -188,7 +188,7 @@ namespace Tests.UnitTests.HelperTests { | ||||
|                 Assert.That(payment["GV"],  Is.EqualTo(10_000)); | ||||
|             }); | ||||
|  | ||||
|             await b.Calculate(true, false, false, false); | ||||
|             await b.Calculate(false, false, false); | ||||
|             var prices = await GetMemberDeliveryPrices(year, mgnr); | ||||
|             Assert.Multiple(() => { | ||||
|                 Assert.That(prices, Has.Count.EqualTo(7)); | ||||
| @@ -234,7 +234,7 @@ namespace Tests.UnitTests.HelperTests { | ||||
|                 Assert.That(payment["GV"],  Is.EqualTo(8_000)); | ||||
|             }); | ||||
|  | ||||
|             await b.Calculate(true, true, false, false); | ||||
|             await b.Calculate(true, false, false); | ||||
|             var prices = await GetMemberDeliveryPrices(year, mgnr); | ||||
|             Assert.Multiple(() => { | ||||
|                 Assert.That(prices, Has.Count.EqualTo(6)); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user