From d45bc67b6230dcf711babaf2f1a74a31e13e6e7a Mon Sep 17 00:00:00 2001 From: Kai Lawrence Date: Wed, 9 Jul 2025 22:11:12 +0000 Subject: [PATCH 1/4] Fix(Zaehler): Update permissions for Zaehler without wohnungen --- .../Services/PermissionHandler.cs | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Deeplex.Saverwalter.WebAPI/Services/PermissionHandler.cs b/Deeplex.Saverwalter.WebAPI/Services/PermissionHandler.cs index 36eb07fe..2f9ff244 100644 --- a/Deeplex.Saverwalter.WebAPI/Services/PermissionHandler.cs +++ b/Deeplex.Saverwalter.WebAPI/Services/PermissionHandler.cs @@ -410,7 +410,24 @@ protected override Task HandleRequirementAsync( OperationAuthorizationRequirement requirement, Zaehlerstand entity) { - return HandleWohnungSubRequirementAsync(context, requirement, entity.Zaehler.Wohnung!); + if (entity.Zaehler.Wohnung != null) + { + return HandleWohnungSubRequirementAsync(context, requirement, entity.Zaehler.Wohnung); + } + if (entity.Zaehler.Adresse == null || entity.Zaehler.Adresse.Wohnungen.Count == 0) + { + context.Succeed(requirement); + return Task.CompletedTask; + } + else + { + foreach (var wohnung in entity.Zaehler.Adresse.Wohnungen.ToList()) + { + HandleWohnungSubRequirementAsync(context, requirement, wohnung); + } + + return Task.CompletedTask; + } } } @@ -482,6 +499,8 @@ protected Task HandleWohnungSubRequirementAsync(AuthorizationHandlerContext cont } protected static bool IsAuthorized(Guid userId, Wohnung wohnung, VerwalterRolle rolle) - => wohnung.Verwalter.Count > 0 && wohnung.Verwalter.AsQueryable().Any(Utils.HasRequiredAuth(rolle, userId)); + => wohnung != null && + wohnung.Verwalter.Count > 0 && + wohnung.Verwalter.AsQueryable().Any(Utils.HasRequiredAuth(rolle, userId)); } } From 890b121aed5674fb6d84a47535dc3b7a2397dd3d Mon Sep 17 00:00:00 2001 From: Kai Lawrence Date: Sun, 13 Jul 2025 12:29:09 +0000 Subject: [PATCH 2/4] Fix: Quickadd Button disappears after modal closes --- .../svelte/src/components/elements/WalterDataTable.svelte | 5 +++-- .../src/components/elements/WalterDataWrapperQuickAdd.svelte | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Deeplex.Saverwalter.WebAPI/svelte/src/components/elements/WalterDataTable.svelte b/Deeplex.Saverwalter.WebAPI/svelte/src/components/elements/WalterDataTable.svelte index 74a7278d..82d40867 100644 --- a/Deeplex.Saverwalter.WebAPI/svelte/src/components/elements/WalterDataTable.svelte +++ b/Deeplex.Saverwalter.WebAPI/svelte/src/components/elements/WalterDataTable.svelte @@ -161,8 +161,9 @@ along with this program. If not, see . style="right: -1em; position: sticky;" on:click={add} iconDescription="Eintrag hinzufügen" - icon={Add}>Eintrag hinzufügen + icon={Add}> + Eintrag hinzufügen + {/if} diff --git a/Deeplex.Saverwalter.WebAPI/svelte/src/components/elements/WalterDataWrapperQuickAdd.svelte b/Deeplex.Saverwalter.WebAPI/svelte/src/components/elements/WalterDataWrapperQuickAdd.svelte index dfd1ec4a..718e9b00 100644 --- a/Deeplex.Saverwalter.WebAPI/svelte/src/components/elements/WalterDataWrapperQuickAdd.svelte +++ b/Deeplex.Saverwalter.WebAPI/svelte/src/components/elements/WalterDataWrapperQuickAdd.svelte @@ -43,7 +43,6 @@ along with this program. If not, see . function close() { addModalOpen = false; - addEntry = {}; changeTracker.set(tracker); } From 053a27cc1fe48cb2fa4b859bac59d1d9b72d0802 Mon Sep 17 00:00:00 2001 From: Kai Lawrence Date: Sun, 13 Jul 2025 12:56:09 +0000 Subject: [PATCH 3/4] Feat: Split Adresse and Wohnung in Zaehler --- Deeplex.Saverwalter.WebAPI/Controllers/ZaehlerController.cs | 6 +++--- .../svelte/src/components/elements/WalterDataTable.svelte | 6 +----- .../svelte/src/components/lists/WalterZaehlerList.svelte | 1 + 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/Deeplex.Saverwalter.WebAPI/Controllers/ZaehlerController.cs b/Deeplex.Saverwalter.WebAPI/Controllers/ZaehlerController.cs index 22bab756..85784bcd 100644 --- a/Deeplex.Saverwalter.WebAPI/Controllers/ZaehlerController.cs +++ b/Deeplex.Saverwalter.WebAPI/Controllers/ZaehlerController.cs @@ -36,6 +36,7 @@ public class ZaehlerEntryBase public int Id { get; set; } public string Kennnummer { get; set; } = null!; public SelectionEntry Typ { get; set; } = null!; + public AdresseEntryBase? Adresse { get; set; } public SelectionEntry? Wohnung { get; set; } public ZaehlerstandEntryBase? LastZaehlerstand { get; set; } public DateOnly? Ende { get; set; } @@ -48,9 +49,10 @@ public ZaehlerEntryBase(Zaehler entity, Permissions permissions) Entity = entity; Id = entity.ZaehlerId; + Adresse = entity.Adresse is Adresse a ? new AdresseEntryBase(a, permissions) : null; Kennnummer = entity.Kennnummer; Typ = new((int)entity.Typ, entity.Typ.ToString()); - Wohnung = entity.Wohnung is Wohnung w ? new(w.WohnungId, $"{w.Adresse?.Anschrift ?? "Unbekannte Anschrift"}, {w.Bezeichnung}") : null; + Wohnung = entity.Wohnung is Wohnung w ? new(w.WohnungId, w.Bezeichnung) : null; var letzterStand = entity.Staende?.OrderBy(s => s.Datum).ToList().LastOrDefault(); Ende = entity.Ende; if (letzterStand is Zaehlerstand stand) @@ -66,7 +68,6 @@ public class ZaehlerEntry : ZaehlerEntryBase { public string? Notiz { get; set; } public IEnumerable? SelectedUmlagen { get; set; } - public AdresseEntryBase? Adresse { get; set; } public DateTime CreatedAt { get; set; } public DateTime LastModified { get; set; } @@ -76,7 +77,6 @@ public class ZaehlerEntry : ZaehlerEntryBase public ZaehlerEntry() : base() { } public ZaehlerEntry(Zaehler entity, Permissions permissions) : base(entity, permissions) { - Adresse = entity.Adresse is Adresse a ? new AdresseEntryBase(a, permissions) : null; SelectedUmlagen = entity.Umlagen.ToList() .Select(e => new SelectionEntry(e.UmlageId, e.Typ.Bezeichnung + " - " + e.GetWohnungenBezeichnung())); diff --git a/Deeplex.Saverwalter.WebAPI/svelte/src/components/elements/WalterDataTable.svelte b/Deeplex.Saverwalter.WebAPI/svelte/src/components/elements/WalterDataTable.svelte index 82d40867..7cd74f23 100644 --- a/Deeplex.Saverwalter.WebAPI/svelte/src/components/elements/WalterDataTable.svelte +++ b/Deeplex.Saverwalter.WebAPI/svelte/src/components/elements/WalterDataTable.svelte @@ -57,11 +57,7 @@ along with this program. If not, see . if (searchParams) { if (searchQuery) { searchParams.set('search', searchQuery); - window.history.replaceState( - {}, - '', - `?${searchParams.toString()}` - ); + window.history.replaceState({}, '', `?${searchParams.toString()}`); } else { searchParams.delete('search'); window.history.replaceState( diff --git a/Deeplex.Saverwalter.WebAPI/svelte/src/components/lists/WalterZaehlerList.svelte b/Deeplex.Saverwalter.WebAPI/svelte/src/components/lists/WalterZaehlerList.svelte index 669ea016..78b5dd11 100644 --- a/Deeplex.Saverwalter.WebAPI/svelte/src/components/lists/WalterZaehlerList.svelte +++ b/Deeplex.Saverwalter.WebAPI/svelte/src/components/lists/WalterZaehlerList.svelte @@ -26,6 +26,7 @@ along with this program. If not, see . const headers = [ { key: 'kennnummer', value: 'Kennnummer' }, + { key: 'adresse.anschrift', value: 'Adresse'}, { key: 'wohnung.text', value: 'Wohnung' }, { key: 'typ.text', value: 'Typ' }, { key: 'lastZaehlerstand.datum', value: 'Letztes Ablesedatum' }, From b7ea96b4769389b65c01b1fb927074680c5e920c Mon Sep 17 00:00:00 2001 From: Kai Lawrence Date: Sun, 13 Jul 2025 12:59:07 +0000 Subject: [PATCH 4/4] Feat: Vertragsversion is called Nachtrag in UI --- .../svelte/src/components/details/WalterVertrag.svelte | 4 ++-- .../svelte/src/routes/(app)/vertraege/[id]/+page.svelte | 2 +- .../svelte/src/routes/(app)/vertraege/new/+page.svelte | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Deeplex.Saverwalter.WebAPI/svelte/src/components/details/WalterVertrag.svelte b/Deeplex.Saverwalter.WebAPI/svelte/src/components/details/WalterVertrag.svelte index ff6edafc..d9fa3f92 100644 --- a/Deeplex.Saverwalter.WebAPI/svelte/src/components/details/WalterVertrag.svelte +++ b/Deeplex.Saverwalter.WebAPI/svelte/src/components/details/WalterVertrag.svelte @@ -36,11 +36,11 @@ along with this program. If not, see . . /> . - Vertragsversion: + Nachtrag: