Status 2026-07-13: implemented on feature/130-report-builder (#608) — as-built notes in the #130 status section.
Parent: #130 (Report Builder — bands + bricks). Phase 2 (needs Phase 1: #521, #528). Part of epic #506, Track A.
Scope
The builder page shows five stacked Mason canvases, one per band, in fixed order:
- Header
- Group Header
- Details
- Group Footer
- Footer
(ReportBand enum — harvested from feature/145-report-builder — already defines exactly these five.)
Each canvas is its own Awcodes\Mason\Mason field whose ->bricks() list is ReportBricksCollection::forBand($band) — a brick that isn't allowed in a band never appears in that band's picker. Saving the page merges the five canvas states into one bands.json via ReportTemplateStorage (#528). This replaces the previous single-canvas-with-zone-overlays attempt, which is what stalled the old branch.
Also in scope: the template list page (disk scan: system + current company templates) with Clone / Rename / Delete actions (company templates only; system templates read-only) and a Preview action rendering dummy data. Panel theme imports mason's plugin CSS.
Acceptance criteria
Test scenarios (PHPUnit + Livewire, #[Test], no Pest)
- Builder page loads for an admin (
AbstractAdminPanelTestCase), asserts five band fields present.
- Saving a modified state persists to the expected storage path and round-trips.
- A details-only brick is absent from the header canvas's available bricks.
- Save action on a system template is rejected/hidden.
Status 2026-07-13: implemented on
feature/130-report-builder(#608) — as-built notes in the #130 status section.Parent: #130 (Report Builder — bands + bricks). Phase 2 (needs Phase 1: #521, #528). Part of epic #506, Track A.
Scope
The builder page shows five stacked Mason canvases, one per band, in fixed order:
(
ReportBandenum — harvested fromfeature/145-report-builder— already defines exactly these five.)Each canvas is its own
Awcodes\Mason\Masonfield whose->bricks()list isReportBricksCollection::forBand($band)— a brick that isn't allowed in a band never appears in that band's picker. Saving the page merges the five canvas states into onebands.jsonviaReportTemplateStorage(#528). This replaces the previous single-canvas-with-zone-overlays attempt, which is what stalled the old branch.Also in scope: the template list page (disk scan: system + current company templates) with Clone / Rename / Delete actions (company templates only; system templates read-only) and a Preview action rendering dummy data. Panel theme imports mason's plugin CSS.
Acceptance criteria
allowedBands()include that band.bands.json; an empty band saves as an empty array.Test scenarios (PHPUnit + Livewire,
#[Test], no Pest)AbstractAdminPanelTestCase), asserts five band fields present.