@page "/beheer" @attribute [Authorize] @inject BeheerService Beheerkant @rendermode InteractiveServer Beheer - MijnBesluit @* De beheerpagina. Twee handelingen: een overlijden terugdraaien dat ten onrechte is bevestigd, en een samenvoeging terugdraaien die niet had gemoeten. Zie BeheerService voor waarom er niet meer op staat. Kort: een beheerder kan geen kluis openen en kan niet op naam zoeken. *@ @if (!Magdit) {

Niet gevonden

Deze pagina bestaat niet, of hij is niet voor jou.

} else {

Beheer

Hier draai je twee dingen terug die niemand anders kan: een overlijden dat ten onrechte is bevestigd, en een samenvoeging van twee profielen die niet had gemoeten. Voor het eerste is dit nodig als de bezwaarlink uit de waarschuwingsmail verlopen is; de betrokkene kan dan niet meer inloggen en heeft zelf geen weg terug.

@* Adverteren heeft een eigen scherm: dat gaat niet over terugdraaien maar over betalingen afvinken en advertenties beoordelen, en daar hoor je dagelijks te komen in plaats van bij hoge uitzondering. *@

Advertenties beheren ›

@* Kluissoorten: wat mensen in hun kluis kunnen vastleggen, en wat je daar zelf bij zet. Ook een eigen scherm: dat is inrichten, geen terugdraaien. *@

Kluissoorten beheren ›

@if (Melding is not null) {
@Melding
} @* ------------------------------------------------------------ statistieken *@

Gebruik van MijnBesluit

Aantallen, niet inhoud: hier is niets van iemands kluis of berichten te zien. Bedoeld om de belasting in te schatten, niet om iemand te volgen.

@if (Stats is null) {

Statistieken zijn hier niet beschikbaar.

} else {
@Stats.Profielen Profielen (@Stats.GeclaimdeProfielen geclaimd)
@Stats.Families Families
@Stats.KluisItems Kluisitems
@Stats.KluisBestanden Bijlagen
@Stats.Momenten Momenten (@Stats.BezorgdeMomenten bezorgd)
@Stats.Nalatenschapbeheerders Aangewezen beheerders
@if (Stats.ItemsPerCategorie.Count > 0) {

Kluisitems per categorie

@foreach (var (categorie, aantal) in Stats.ItemsPerCategorie.OrderByDescending(kv => kv.Value)) {
@Kluisweergave.Naam(categorie)
@aantal
}
} }

Profiel opzoeken

Alleen het volledige adres, niet een deel ervan en niet op naam. Je hoort al te weten wie je zoekt.
@if (Gevonden is { } profiel) {

@profiel.DisplayName

E-mailadres @(profiel.Email ?? "onbekend")
Eigen account @(profiel.IsGeclaimd ? "ja" : "nee, het profiel is nog niet geclaimd")
Meldingen @profiel.Meldingen van @profiel.MeldingenNodig
Stand @Stand(profiel.Stand)
Kan inloggen @(profiel.AccountGeblokkeerd ? "nee, het account staat op overleden" : "ja")
@if (profiel.OpgegaanIn is { } opgegaan) {
Opgegaan in profiel @opgegaan
}
@if (profiel.OverlijdenBevestigdOp is { } bevestigd) {

Het overlijden is bevestigd op @Datums.Datum(bevestigd)@( profiel.Overlijdensdatum is { } datum ? $", met {Datums.Datum(datum)} als overlijdensdatum" : "").

Terugdraaien betekent: alle meldingen vervallen, het account wordt weer actief, en de toegang die de nalatenschapsbeheerder had gekregen wordt ingetrokken.

Dit komt in het logboek te staan, bij jouw naam.
} else {

Voor dit profiel is geen overlijden bevestigd. Er valt daar dus niets terug te draaien.

}
@* ------------------------------------------------------------ samenvoegingen *@

Samenvoegingen

@if (profiel.Samenvoegingen.Count == 0) {

Dit profiel is nooit samengevoegd. Let op: samenvoegingen van vóór 15 september 2026 zijn niet vastgelegd en kunnen daarom ook niet worden teruggedraaid.

} else {

Terugdraaien zet alles wat toen is verhuisd terug bij het profiel dat is opgegaan. Wat er ná die tijd bij het andere profiel is bijgekomen, blijft daar staan — dat is daar aangemaakt en hoort daar.

@foreach (var samenvoeging in profiel.Samenvoegingen) {
@samenvoeging.DuplicaatNaam (@samenvoeging.DuplicaatPersonId) → @samenvoeging.DoelNaam (@samenvoeging.DoelPersonId)
@Datums.DatumTijd(samenvoeging.SamengevoegdOp) · @samenvoeging.Stappen stap@(samenvoeging.Stappen == 1 ? "" : "pen")
@if (samenvoeging.IsTeruggedraaid) { Teruggedraaid }
@if (!samenvoeging.IsTeruggedraaid) {
Dit komt in het logboek te staan, bij jouw naam.
}
}
}
} } @code { [CascadingParameter] private Task? AuthState { get; set; } private long _gebruikerId; private bool Magdit, Bezig; private string Adres = ""; private string Reden = ""; private string Terugreden = ""; private BeheerService.Profielbeeld? Gevonden; private string? Melding, MeldingSoort; private Statistieken? Stats; protected override async Task OnInitializedAsync() { if (AuthState is null) return; _gebruikerId = (await AuthState).User.UserId() ?? 0; Magdit = await Beheerkant.IsBeheerderAsync(_gebruikerId); if (!Magdit) return; var statistieken = await Beheerkant.StatistiekenAsync(_gebruikerId); if (statistieken.Succeeded) Stats = statistieken.Value; } /// Breedte van de staaf voor deze categorie, ten opzichte van de grootste categorie. private int CategoriePercentage(int aantal) { var grootste = Stats!.ItemsPerCategorie.Values.Max(); return grootste == 0 ? 0 : Math.Max(2, aantal * 100 / grootste); } private async Task Zoeken() { Bezig = true; Melding = null; Gevonden = null; try { var resultaat = await Beheerkant.ZoekOpAdresAsync(Adres, _gebruikerId); if (resultaat.Succeeded) Gevonden = resultaat.Value; else { Melding = resultaat.Error; MeldingSoort = "fout"; } } finally { Bezig = false; } } private async Task Herstellen() { if (Gevonden is not { } profiel) return; Bezig = true; Melding = null; try { var resultaat = await Beheerkant.HerstelOverlijdenAsync(profiel.PersonId, _gebruikerId, Reden); if (!resultaat.Succeeded) { Melding = resultaat.Error; MeldingSoort = "fout"; return; } Melding = $"Het overlijden van {profiel.DisplayName} is teruggedraaid. " + "Hij of zij kan weer inloggen, en de nalatenschapsbeheerder is zijn toegang kwijt."; MeldingSoort = "goed"; Reden = ""; // Opnieuw ophalen, zodat het scherm laat zien wat er nu staat. var opnieuw = await Beheerkant.ZoekOpAdresAsync(Adres, _gebruikerId); Gevonden = opnieuw.Succeeded ? opnieuw.Value : null; } finally { Bezig = false; } } private async Task TerugdraaienAsync(long samenvoegingId) { Bezig = true; Melding = null; try { var resultaat = await Beheerkant.TerugdraaienAsync(samenvoegingId, _gebruikerId, Terugreden); if (!resultaat.Succeeded) { Melding = resultaat.Error; MeldingSoort = "fout"; return; } Melding = "De samenvoeging is teruggedraaid. De twee profielen staan weer los van elkaar."; MeldingSoort = "goed"; Terugreden = ""; var opnieuw = await Beheerkant.ZoekOpAdresAsync(Adres, _gebruikerId); Gevonden = opnieuw.Succeeded ? opnieuw.Value : null; } finally { Bezig = false; } } private static string Stand(DeathProcedureState stand) => stand switch { DeathProcedureState.Geen => "geen meldingen", DeathProcedureState.Lopend => "procedure loopt", DeathProcedureState.Betwist => "tegengesproken door de betrokkene", DeathProcedureState.Bevestigd => "overlijden bevestigd", _ => "onbekend" }; }