diff --git a/Elwig/Documents/BusinessDocument.cs b/Elwig/Documents/BusinessDocument.cs index 4016729..8d6bbc1 100644 --- a/Elwig/Documents/BusinessDocument.cs +++ b/Elwig/Documents/BusinessDocument.cs @@ -68,7 +68,7 @@ namespace Elwig.Documents { .SetBorder(new SolidBorder(new DeviceRgb(0x80, 0x80, 0x80), BorderThickness)) .AddCell(NewAsideCell("Mitglied", 2)) .AddCell(NewAsideCell("Mitglieds-Nr.:", isName: true)).AddCell(NewAsideCell($"{Member.MgNr}")) - .AddCell(NewAsideCell("Betriebs-Nr.:", isName: true)).AddCell(NewAsideCell(Member.LfbisNr ?? "")) + .AddCell(NewAsideCell("Betriebs-Nr.:", isName: true)).AddCell(NewAsideCell((Member.LfbisNr ?? "-") + (Member.OrganicAuthorityCode != null ? $" ({Member.OrganicAuthorityCode})" : ""))) .AddCell(NewAsideCell("UID:", isName: true)).AddCell(NewAsideCell(uid)); } diff --git a/Elwig/Documents/DeliveryConfirmation.cs b/Elwig/Documents/DeliveryConfirmation.cs index dbc9af9..5eda941 100644 --- a/Elwig/Documents/DeliveryConfirmation.cs +++ b/Elwig/Documents/DeliveryConfirmation.cs @@ -30,7 +30,7 @@ namespace Elwig.Documents { _year = year; ShowDateAndLocation = true; UseBillingAddress = true; - DocumentId = $"Anl.-Best. {_year}/{m.MgNr}"; + DocumentId = $"Anlfrg.-Bstng. {_year}/{m.MgNr}"; Data = data; } diff --git a/Elwig/Documents/MemberDataSheet.cs b/Elwig/Documents/MemberDataSheet.cs index ee3d3f6..27b42c6 100644 --- a/Elwig/Documents/MemberDataSheet.cs +++ b/Elwig/Documents/MemberDataSheet.cs @@ -161,7 +161,7 @@ namespace Elwig.Documents { .AddCell(NewDataTh("Buchführend:", colspan: 2)).AddCell(NewTd(new KernedParagraph(Member.IsBuchführend ? "Ja " : "Nein ", 10) .Add(Normal($"({(Member.IsBuchführend ? season.VatNormal : season.VatFlatrate) * 100:N0}% USt.)", 8)), colspan: 2)) .AddCell(NewDataTh("(Katastralgemeinde mit dem größten Anteil an Weinbauflächen)", 8, colspan: 2)) - .AddCell(NewDataTh("Bio:", colspan: 2)).AddCell(NewTd(Member.IsOrganic ? "Ja" : "Nein", colspan: 2)) + .AddCell(NewDataTh("Bio:", colspan: 2)).AddCell(NewTd((Member.IsOrganic ? "Ja" : "Nein") + (Member.OrganicAuthorityCode != null ? $" ({Member.OrganicAuthorityCode})" : ""), colspan: 2)) .AddCell(NewDataHdr("Genossenschaft", colspan: 6)) .AddCell(NewDataTh("Status:")).AddCell(NewTd(new KernedParagraph(Member.IsActive ? "Aktiv " : "Nicht aktiv ", 10) .Add(Normal("(" + (Member.ExitDate != null ? $"{Member.EntryDate:dd.MM.yyyy}\u2013{Member.ExitDate:dd.MM.yyyy}" : $"seit {Member.EntryDate:dd.MM.yyyy}") + ")", 8)))) diff --git a/Elwig/Helpers/AppDbUpdater.cs b/Elwig/Helpers/AppDbUpdater.cs index db54d3f..f1c79ee 100644 --- a/Elwig/Helpers/AppDbUpdater.cs +++ b/Elwig/Helpers/AppDbUpdater.cs @@ -9,7 +9,7 @@ namespace Elwig.Helpers { public static class AppDbUpdater { // Don't forget to update value in Tests/fetch-resources.bat! - public static readonly int RequiredSchemaVersion = 41; + public static readonly int RequiredSchemaVersion = 42; private static int VersionOffset = 0; diff --git a/Elwig/Helpers/Export/ElwigData.cs b/Elwig/Helpers/Export/ElwigData.cs index 9da5241..147dc2f 100644 --- a/Elwig/Helpers/Export/ElwigData.cs +++ b/Elwig/Helpers/Export/ElwigData.cs @@ -638,6 +638,7 @@ namespace Elwig.Helpers.Export { ["zwstid"] = m.ZwstId, ["lfbis_nr"] = m.LfbisNr, ["ustid_nr"] = m.UstIdNr, + ["org_auth_code"] = m.OrganicAuthorityCode, ["juridical_pers"] = m.IsJuridicalPerson, ["volllieferant"] = m.IsVollLieferant, ["buchführend"] = m.IsBuchführend, @@ -710,6 +711,7 @@ namespace Elwig.Helpers.Export { ZwstId = json["zwstid"]?.AsValue().GetValue(), LfbisNr = json["lfbis_nr"]?.AsValue().GetValue(), UstIdNr = json["ustid_nr"]?.AsValue().GetValue(), + OrganicAuthorityCode = json["org_auth_code"]?.AsValue().GetValue(), IsJuridicalPerson = json["juridical_pers"]?.AsValue().GetValue() ?? false, IsVollLieferant = json["volllieferant"]?.AsValue().GetValue() ?? false, IsBuchführend = json["buchführend"]?.AsValue().GetValue() ?? false, diff --git a/Elwig/Helpers/Validator.cs b/Elwig/Helpers/Validator.cs index 33084de..befc722 100644 --- a/Elwig/Helpers/Validator.cs +++ b/Elwig/Helpers/Validator.cs @@ -631,15 +631,18 @@ namespace Elwig.Helpers { if (v < 2 && char.IsAsciiLetter(ch)) { v++; text += ch; - } else if ((v == 2 || v == 6) && ch == '-') { - v++; + } else if ((v == 2 || v == 5) && ch == '-' && text[^1] != '-') { text += ch; - } else if (v >= 2 && char.IsLetterOrDigit(ch)) { + } else if (v >= 2 && v <= 4 && char.IsLetter(ch)) { + if (v == 2 && text[^1] != '-') + text += "-"; if (text.StartsWith("AT")) { - if (v == 3 && ch == 'B' || v == 4 && ch == 'I' || v == 5 && ch == 'O') { + if (v == 2 && ch == 'B' || v == 3 && ch == 'I' || v == 4 && ch == 'O') { v++; text += ch; - } else if (v > 6 && char.IsAsciiDigit(ch)) { + } + } else if (text.StartsWith("DE")) { + if (v == 2 && ch == 'Ö' || v == 3 && ch == 'K' || v == 4 && ch == 'O') { v++; text += ch; } @@ -647,11 +650,16 @@ namespace Elwig.Helpers { v++; text += ch; } + } else if (v >= 5 && v <= 7 && char.IsAsciiDigit(ch)) { + if (v == 5 && text[^1] != '-') + text += "-"; + v++; + text += ch; } if (i == input.CaretIndex - 1) { pos = text.Length; - } else if (text.StartsWith("AT") && v >= 10) { + } else if ((text.StartsWith("AT") || text.StartsWith("DE")) && v >= 10) { break; } } @@ -662,7 +670,7 @@ namespace Elwig.Helpers { if (text.Length == 0) return required ? new(false, "Bio-Kontrollstellen-Code ist nicht optional") : new(true, null); - if (text.StartsWith("AT")) { + if (text.StartsWith("AT") || text.StartsWith("DE")) { if (text.Length != 10) { return new(false, "Bio-Kontrollstellen-Code ist ungültig"); } diff --git a/Elwig/Models/Entities/Member.cs b/Elwig/Models/Entities/Member.cs index 2294d38..afa460c 100644 --- a/Elwig/Models/Entities/Member.cs +++ b/Elwig/Models/Entities/Member.cs @@ -96,6 +96,9 @@ namespace Elwig.Models.Entities { [Column("ustid_nr")] public string? UstIdNr { get; set; } + [Column("org_auth_code")] + public string? OrganicAuthorityCode { get; set; } + [Column("juridical_pers")] public bool IsJuridicalPerson { get; set; } diff --git a/Elwig/Resources/Sql/41-42.sql b/Elwig/Resources/Sql/41-42.sql new file mode 100644 index 0000000..428c4fc --- /dev/null +++ b/Elwig/Resources/Sql/41-42.sql @@ -0,0 +1,3 @@ +-- schema version 41 to 42 + +ALTER TABLE member ADD COLUMN org_auth_code TEXT CHECK (org_auth_code REGEXP '^[A-Z]{2}-[A-ZÖØ]{3}-[0-9]{2,3}(-[A-Z]{2})?$') DEFAULT NULL; diff --git a/Elwig/Services/MemberService.cs b/Elwig/Services/MemberService.cs index 9fbd9ec..3624c4f 100644 --- a/Elwig/Services/MemberService.cs +++ b/Elwig/Services/MemberService.cs @@ -106,6 +106,7 @@ namespace Elwig.Services { vm.UstIdNr = m.UstIdNr; vm.LfbisNr = m.LfbisNr; + vm.OrganicAuthorityCode = m.OrganicAuthorityCode; vm.IsBuchführend = m.IsBuchführend; vm.IsOrganic = m.IsOrganic; @@ -555,6 +556,7 @@ namespace Elwig.Services { UstIdNr = string.IsNullOrWhiteSpace(vm.UstIdNr) ? null : vm.UstIdNr, LfbisNr = string.IsNullOrWhiteSpace(vm.LfbisNr) ? null : vm.LfbisNr, + OrganicAuthorityCode = string.IsNullOrWhiteSpace(vm.OrganicAuthorityCode) ? null : vm.OrganicAuthorityCode, IsBuchführend = vm.IsBuchführend, IsOrganic = vm.IsOrganic, diff --git a/Elwig/ViewModels/MemberAdminViewModel.cs b/Elwig/ViewModels/MemberAdminViewModel.cs index 26ca52d..e103635 100644 --- a/Elwig/ViewModels/MemberAdminViewModel.cs +++ b/Elwig/ViewModels/MemberAdminViewModel.cs @@ -116,6 +116,8 @@ namespace Elwig.ViewModels { [ObservableProperty] private string? _lfbisNr; [ObservableProperty] + private string? _organicAuthorityCode; + [ObservableProperty] private bool _isBuchführend; [ObservableProperty] private bool _isOrganic; diff --git a/Elwig/Windows/MemberAdminWindow.xaml b/Elwig/Windows/MemberAdminWindow.xaml index 41351e2..1a1b6e7 100644 --- a/Elwig/Windows/MemberAdminWindow.xaml +++ b/Elwig/Windows/MemberAdminWindow.xaml @@ -548,34 +548,38 @@ - + -