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/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)); } } 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 . . 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( @@ -161,8 +157,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); } 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' }, diff --git a/Deeplex.Saverwalter.WebAPI/svelte/src/routes/(app)/vertraege/[id]/+page.svelte b/Deeplex.Saverwalter.WebAPI/svelte/src/routes/(app)/vertraege/[id]/+page.svelte index ebf13d2b..1f8cfbd2 100644 --- a/Deeplex.Saverwalter.WebAPI/svelte/src/routes/(app)/vertraege/[id]/+page.svelte +++ b/Deeplex.Saverwalter.WebAPI/svelte/src/routes/(app)/vertraege/[id]/+page.svelte @@ -97,7 +97,7 @@ along with this program. If not, see . /> . - Vertragsversion: + Nachtrag: