Rapport: resourcediagram — de Gantt-afdruk per resource, met een blad per persoon (#113) - #132
Merged
Merged
Conversation
… per persoon (issue #113) Nieuw rapporttype `resourceGantt` naast de Gantt-afdruk: dezelfde render, maar de rijenbron is `computeResourceGanttRows` (src/engine/reports/resourceGantt.ts) — per resource een band, daaronder zijn bladtaken op start, via dezelfde groepeerpijplijn als het scherm (`computeViewRows`), dus een taak met twee resources staat onder beide banden. De melder wilde "wie doet wat, en wanneer" grafisch, als eigen tabblad, zonder eerst de schermweergave te groeperen. Twee opties, bewaard in `reportSettings.resourceGantt`: - Elke resource op een nieuwe pagina — `PrintOptions.pageBreakBeforeGroups` levert `RenderReportResult.forcedBreakOffsets`; `tileLayout` kent nu `forcedBreakOffsetsPx`, waar een gedwongen positie zonder vulgraaddrempel wint (een resource met één taak krijgt bewust een bijna leeg vel). Raster- en vector-pagineerder geven het door. - Taken zonder resource meenemen — de "(geen)"-band als laatste. Alle Gantt-opties gelden onverkort; alleen Volg weergave verdwijnt bij dit type. Samenvatting telt resources/toewijzingen/zonder resource; lege staat zegt dat er nog geen toewijzingen zijn; exportsuffix `-resourcediagram.pdf`. Overbelasting in rood op de bandrij bewust niet (secundair volgens de melder). Regressie: check-reports.ts (rijen, tellingen, dubbele resource, (geen)-band), check-print-report.ts (gedwongen posities in render en tegeling) en tests/browser/resource-gantt-report.spec.ts. i18n in 14 locales, gids nl+en plus de sectie in de 12 vertaalde gidsen (verify:docs eist kopstructuurpariteit), CLAUDE.md. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
… blad per resource Twee Chromium-screenshots van de gemergede branch, zoals artifacts/tabel-overhaul: de live preview met de banden Guillaume/Noam/Torenkraan (Casco onder twee resources), en pagina 2 met "Elke resource op een nieuwe pagina" aan — één vel voor Noam. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
…pijlen (review op #132) Bevindingen van de hyperkritische review verwerkt: 1. Banden op resource-IDENTITEIT i.p.v. naam. `computeViewRows` bandt resources op naam (`resourceNames`), zodat twee gelijknamige medewerkers één uitdeelvel kregen, hun gedeelde taak twee keer onder dezelfde band stond (identieke rowKeys) en `counts.resources` loog. `resourceGantt.ts` bouwt zijn rijen nu zelf: per resource-id een band, naam als label, gelijknamigen `Jan #1`/`Jan #2`, naamloze een surrogaat `#<positie>` i.p.v. stil in de verborgen "(geen)"-band te verdwijnen (bevinding 4); volgorde cijfer-/taalbewust en hoofdletterongevoelig, gelijk ⇒ projectvolgorde. Invoer is nu een ReportContext-subset (bevinding 11); dubbele toewijzing = één rij; onbekende resource = zonder resource. 2. Relaties uit én verborgen bij dit type: `rowIndexOf` in de printrender ankert een taak die onder n banden staat op de laatste kopie, en bij "blad per resource" liepen de pijlen de bladrand af. `showDeps` wordt voor `resourceGantt` geforceerd op false, de checkbox verdwijnt (zoals Volg weergave). 3. Tellingen versus Resourcetoewijzingen: resources nu op id; het verschil in "zonder resource" (dit rapport telt mijlpalen/hammocks mee omdat het ze tekent) staat in de gids en het type. 6. Leeg project ⇒ gewone "geen taken"-melding i.p.v. "wijs eerst resources toe". 7. Gids it/ar: "(geen)"-label gelijkgetrokken met task:structure.none. 8. Gidsen (14 talen): "relaties gelden onverkort" weg; banden-per-identiteit en de twee uitzonderingen benoemd; nl/en ook de telling en de voet-op-het-laatste-vel. 10. `previewOptionsSignature` serialiseert `rows` als structuur (sleutel/label/diepte) i.p.v. volledige Task-objecten per toewijzing. Regressie: check-reports.ts (gelijknamig ⇒ twee banden met unieke sleutels, naamloos ⇒ surrogaat, dubbele/onbekende toewijzing, bandvolgorde, leeg project), check-print-report.ts (gedwongen breken zonder kopherhaling, in 'actual' en met tijdlijn over 2 pagina's), nieuw check-report-resource-gantt-setting.ts (defaults, round-trip, tolerantie), browserspec: geen relatie-/volg-weergave-optie zichtbaar en de geëxporteerde vector-PDF telt 3 pagina's (pdf-lib). Niet gedaan (pre-existing, aparte klus): de voet met legenda staat bij elke meerpagina-afdruk alleen op het laatste vel — nu in de gids vermeld. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
5 tasks
…ollator, één relatiepredicaat (review ronde 2) Tweede hyperkritische review op #132 ("ja, mits"), verwerkt: N1 De bandvolgorde hing aan de host-locale (`localeCompare(b, undefined, …)`): dezelfde planning gaf op een Zweedse machine een andere bladnummering dan op een Nederlandse. `computeResourceGanttRows` krijgt nu `opts.locale` (de app-taal, `i18n.language`); één `Intl.Collator` voor sortering én gelijknaamdetectie. Test: en ⇒ Älg vóór Zorg, sv ⇒ erna. N5 `Jan`/`jan`/` Jan ` kregen geen volgnummer maar sorteerden wél als gelijk. Duplicaten worden nu met dezelfde collator (sensitivity base) gegroepeerd ⇒ `Jan #1`, `jan #2`, `Jan #3`. N4 Het surrogaat `#n` voor een naamloze resource deelt de naamruimte met een resource die letterlijk "#2" heet; surrogaten gaan nu door dezelfde duplicaatpas (`#2 #1`, `#2 #2`). N6 `showDeps`-forcering en verborgen vinkje hangen aan één predicaat, `reportTypeDrawsRelations()` in reportSettings, headless bewaakt (plus: showDeps staat standaard aan, dus de forcering is dragend). N8 `counts.assignments` telt records i.p.v. rijen — dezelfde telling als Resourcetoewijzingen. N9 `startOf` weg; `taskStart` uit reportCommon. N7 `RESOURCE_GANTT_NONE_KEY` niet meer geëxporteerd; `resourceBandLabels` blijft publiek en wordt nu rechtstreeks getest. N2 Gids (14 talen): "verzameltaken worden nooit toegewezen" was onwaar — MSPDI/MPP-importeurs maken zulke toewijzingen wél; nu: "een toewijzing op een verzameltaak (uit een import) wordt hier niet getoond". Module-commentaar idem. N10 ja/ko: dubbele zin over "rijen niet van het scherm" weg. N11 nl/en: de reden voor "geen relaties" eerlijker geformuleerd (kan onder meerdere banden staan; pijlen zouden bij blad per resource van het vel lopen). N3 (het vaste "Pagina 1 van 1" in de voet) zit in #135, samen met de voet op elke pagina. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
This was referenced Sep 14, 2026
pull Bot
pushed a commit
to pepe57/open-planner-studio
that referenced
this pull request
Sep 14, 2026
… nabespreking) De Gantt-afdruk tekent één voetstrook (projectnaam, afdrukdatum, legenda, merk) onder de laatste rij; de pagineerder herhaalde alleen de kop, dus bij een meerpagina-afdruk stond de legenda uitsluitend op de laatste pagina. Met "een blad per persoon" (OpenAEC-Foundation#132) is dat geen randgeval meer: een uitgedeeld vel zonder legenda is onleesbaar (hyperkritische review op OpenAEC-Foundation#132, bevinding 5). De voet is nu, net als de kop, een herhaalbaar blok: - `RenderReportResult.footerHeight` (de render meldt zijn voethoogte, schaalt mee met de rapport-lettergrootte; tabelrenders en de lege staat hebben er geen); - `tileLayout.computeTileLayout` kent `repeatFooterHeightPx`: de body loopt van onder de kop tot boven de voet (`repeatFooterSrcY`), elke pagina houdt onderaan het printgebied `footerTopPt` vrij; zonder de optie byte-identiek, met dezelfde degeneratievangnetten als de kop; - raster-pagineerder, vector-pagineerder én preview tekenen de strook per pagina uit hetzelfde bronvenster (in de vector-tak komt de voettekst daardoor per pagina mee, zoals de koptekst); - instelling `repeatFooter` (standaard aan, zoals de kop) in ops-reportSettings, checkbox naast "Kop op elke pagina herhalen", 14 locales, gids nl+en. Het vaste "Pagina 1 van 1" in de voet is weg: de render kent het paginatotaal niet en het zou nu op elke pagina zo staan; het echte "n / totaal" drukken de pagineerders al in de ondermarge. Regressie: check-print-report.ts (voethoogte, tegeling met/zonder voet byte-identiek, laatste body-tegel eindigt boven de voet, rijgrenzen blijven, degeneratie, zonder kop en in 'actual', samen met blad-per-resource, geen nep-paginanummer), nieuw check-report-footer-setting.ts, browserspec report-footer.spec.ts (telt per PDF-pagina de XObject-tekeningen: 3 mét voet, 2 zonder; preview rastert opnieuw). report-preview-performance.spec.ts: fixture 260 → 240 rijen, want het paginatotaal stond precies op de previewcachegrens en de voet kost per pagina één strook body. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
Fixes #113. De melder (gfayat) wil een grafisch "wie doet wat, en wanneer"-overzicht dat hij kan afdrukken — als overlegdocument én als los vel per persoon — en liefst als eigen rapporttype, omdat "Gantt groeperen op resource + Volg weergave" meerdere handelingen kost en de schermweergave verbouwt. Overbelasting in rood noemde hij secundair; die zit er bewust niet in.
Nieuw rapporttype Resourcediagram (
resourceGantt) op het Rapport-tabblad:src/engine/reports/resourceGantt.ts(computeResourceGanttRows, invoer eenReportContext-subset): per resource-identiteit een band, daaronder zijn bladtaken op start. Naam is alleen het label: resources met (volgens de collator) gelijke naam — ookJan/jan/Jan— krijgenJan #1/jan #2, een naamloze een surrogaat#<positie>dat door dezelfde duplicaatpas gaat. Bandvolgorde via éénIntl.Collatorop de app-taal (i18n.language), nooit de OS-taal van de afdrukker — zelfde vel, zelfde bladnummering op elke machine. Bewust níét de schermgroeperingcomputeViewRows: die bandt op naam en zou twee gelijknamige medewerkers op één vel zetten. Een taak met twee resources staat onder beide banden; dubbele toewijzing = één rij (de telling volgt de records, zoals Resourcetoewijzingen); onbekende resource = "zonder resource".PrintOptions.pageBreakBeforeGroups→RenderReportResult.forcedBreakOffsets→ nieuwforcedBreakOffsetsPxintileLayout.computeTileLayout. Een gedwongen positie wint zonder deMIN_BREAK_FILL-vulgraaddrempel (een resource met één taak krijgt bewust een bijna leeg vel); een gedwongen positie die niet op de pagina past gedraagt zich als een gewone toegestane positie. Beide pagineerders (paginate.ts,paginateVector.ts) geven het door. Zonder de optie is de tegeling byte-identiek.reportTypeDrawsRelations()(reportSettings) is het ene predicaat datshowDepsforceert én het vinkje verbergt. Samenvattingsblok telt resources / toewijzingen / zonder resource (die laatste telt ook mijlpalen en hammocks, want die worden getekend — anders dan het tabelrapport Resourcetoewijzingen; staat in de gids); zonder toewijzingen zegt de preview dat i.p.v. "geen taken" (en bij een leeg project gewoon "geen taken"); exportsuffix-resourcediagram.pdf.isGanttReportType()bundelt de twee Gantt-achtige typen inReportPanel.reportSettings.resourceGantt(met tolerante parser, zoals de rest).previewOptionsSignatureserialiseertrowsals structuur (sleutel/label/diepte) i.p.v. volledigeTask-objecten per toewijzing.Schermbewijs in
artifacts/resourcediagram/(zelfde conventie alsartifacts/tabel-overhaul).Hyperkritische reviews (subagent, Opus), twee rondes. Ronde 1 (verwerkt in
786f031): banden op naam i.p.v. identiteit; relatiepijlen op de verkeerde bandkopie + afgeknipt; tellingen ≠ Resourcetoewijzingen; naamloze resource ⇒ taken stil weg; verkeerde lege-staat-tekst; gidsit/ar-label; gids beloofde "relaties onverkort"; testgaten incl. de vector-tak; signatuur-serialisatie; mapcontract. Ronde 2 ("ja, mits", verwerkt in1cf581b): bandvolgorde hing aan de host-locale (N1);Jan/janzonder volgnummer maar wél gelijk gesorteerd (N5); surrogaat#2botst met een letterlijke "#2" (N4);showDeps-forcering op twee losse plekken (N6); gids beweerde onwaar dat verzameltaken nooit een toewijzing hebben — importeurs maken die wél, en zo'n toewijzing wordt hier niet getoond (N2, 14 gidsen); "Toewijzingen" telde rijen i.p.v. records (N8); dode export/duplicaat-helper (N7, N9); ja/ko-dubbelzin en nl/en-formulering (N10, N11). Buiten dit diff, opgelost in #135: de voet met legenda stond bij élke meerpagina-Gantt-afdruk alleen op het laatste vel, en het vaste "Pagina 1 van 1" erin (N3) — #135 maakt de voet een herhaalbaar blok en haalt het nepnummer weg.How it was verified
npm run verifygreen — alle onderdelen lokaal gedraaid op de metmainsamengevoegde boom: typecheck, lint, planning (alle batterijen + tijdzone-matrix), library, mcp, dev-server, verify:examples, verify:docs (34 artikelen × 14 talen), verify:i18n, store-/gantt-boundaries, cycles, en de browsersuite. Eén kanttekening bij die laatste:tests/browser/just-updated-dialog.spec.tsfaalt in deze sandbox opconsole.error: Failed to load resource: net::ERR_CERT_AUTHORITY_INVALID— Chromium vertrouwt de CA van de uitgaande proxy hier niet bij het ophalen van de GitHub-release-info (releaseInfo.ts), en de harness telt elke console.error als fout. Dit diff raakt geen updater-/netwerkcode; CI (test-job, echt netwerk) is op786f031groen inclusief die spec.tests/planning/check-reports.ts(banden op id; gelijknamig ⇒ twee banden met unieke sleutels; hoofdletter-/spatie-/accentvarianten alle genummerd en bij elkaar gesorteerd; surrogaat naast letterlijke "feat: debug terminal overlay + timescale dropdown fix #2"; bandvolgorde per app-taal — en ⇒ Älg vóór Zorg, sv ⇒ erna; dubbele/onbekende toewijzing; "(geen)" alleen op verzoek; geen verzameltaken; leeg project),tests/planning/check-print-report.ts(gedwongen posities uit de render liggen op rijgrenzen; drie banden ⇒ drie pagina's terwijl ze samen op één passen — ook zonder kopherhaling, inactualen met de tijdlijn over 2 pagina's; dunne pagina toegestaan; verre gedwongen positie later gehonoreerd; lege lijst byte-identiek), nieuwtests/planning/check-report-resource-gantt-setting.ts(defaults, round-trip, tolerantie, het relatiepredicaat),tests/browser/resource-gantt-report.spec.ts(rapporttype kiezen, samenvatting 2/3/1, geen relatie-/volg-weergave-optie, preview 1 → 2 → 3 pagina's via de twee opties, export-suffix, en de geëxporteerde vector-PDF telt 3 pagina's via pdf-lib).artifacts/resourcediagram/).Does this touch
ops-reportSettings), geen projectdata.tests/planning/check-reports.ts.t(...);reportType.resourceGantt+resourceGantt.*in alle 14report.json-locales (verify:i18ngroen).@tauri-apps/*— n.v.t.Documentation
public/docs/{nl,en}/gids-rapporten-printen.md: sectie Resourcediagram (incl. de twee uitzonderingen, banden-per-identiteit, de telling, verzameltaak-toewijzingen uit een import, de voet op het laatste vel — tot Rapport: voet met legenda op elke pagina (#113, nabespreking) #135), intro (elf rapporttypen), leerlijst en praktijkbullet. De 12 vertaalde gidsen hebben dezelfde sectie met dezelfde uitzonderingen en de verzameltaak-correctie; de fijnere nl/en-nuances (surrogaatlabel, telverschil, voet) volgen de maandelijkse vertaalronde.CLAUDE.md: rapportparagraaf (elf typen, banden op identiteit, relaties uit, de forced-break-keten).docs/CHANGELOG.mdbewust niet: die wordt alleen bij een release bijgewerkt.🤖 Generated with Claude Code
https://claude.ai/code/session_014zosxbSXvi3YSGmeN1MsQq