feat: integrate reports into Campaign navigation

This commit is contained in:
2026-07-29 22:19:24 +02:00
parent 101f3ccd7d
commit cc93945f79
7 changed files with 123 additions and 28 deletions

View File

@@ -88,6 +88,13 @@ OPERATOR_QUEUE_REQUIRED_ANY = (
)
# Preserve the former /operator route identity for saved View projections.
OPERATOR_QUEUE_SURFACE_ID = "campaigns.route.operator"
# Preserve the former /reports route identity for saved View projections.
REPORTS_SURFACE_ID = "campaigns.route.reports"
REPORTS_REQUIRED_ANY = ("campaigns:report:read",)
CAMPAIGN_MODULE_REQUIRED_ANY = (
"campaigns:campaign:read",
*REPORTS_REQUIRED_ANY,
)
ROLE_TEMPLATES = (
RoleTemplate(
@@ -230,8 +237,7 @@ manifest = ModuleManifest(
role_templates=ROLE_TEMPLATES,
tenant_summary_providers=(_tenant_summary,),
nav_items=(
NavItem(path="/campaigns", label="Campaigns", icon="campaign", required_any=("campaigns:campaign:read",), order=20),
NavItem(path="/reports", label="Reports", icon="clipboard-pen-line", required_any=("campaigns:report:read",), order=70),
NavItem(path="/campaigns", label="Campaigns", icon="campaign", required_any=CAMPAIGN_MODULE_REQUIRED_ANY, order=20),
),
frontend=FrontendModule(
module_id="campaigns",
@@ -239,8 +245,8 @@ manifest = ModuleManifest(
routes=(
FrontendRoute(
path="/campaigns",
component="CampaignListPage",
required_any=("campaigns:campaign:read",),
component="CampaignModulePage",
required_any=CAMPAIGN_MODULE_REQUIRED_ANY,
order=20,
),
FrontendRoute(
@@ -258,16 +264,16 @@ manifest = ModuleManifest(
order=22,
),
FrontendRoute(
path="/reports",
path="/campaigns/reports",
component="AggregateReportsPage",
required_any=("campaigns:report:read",),
order=70,
required_any=REPORTS_REQUIRED_ANY,
order=22,
surface_id=REPORTS_SURFACE_ID,
),
FrontendRoute(path="/templates", component="TemplatesPage", order=90),
),
nav_items=(
NavItem(path="/campaigns", label="Campaigns", icon="campaign", required_any=("campaigns:campaign:read",), order=20),
NavItem(path="/reports", label="Reports", icon="clipboard-pen-line", required_any=("campaigns:report:read",), order=70),
NavItem(path="/campaigns", label="Campaigns", icon="campaign", required_any=CAMPAIGN_MODULE_REQUIRED_ANY, order=20),
NavItem(path="/templates", label="Templates", icon="layout-template", order=90),
),
view_surfaces=(
@@ -461,7 +467,7 @@ manifest = ModuleManifest(
),
links=(
DocumentationLink(label="Campaign operator queue", href="/campaigns/queue", kind="runtime"),
DocumentationLink(label="Campaign reports", href="/reports", kind="runtime"),
DocumentationLink(label="Campaign reports", href="/campaigns/reports", kind="runtime"),
DocumentationLink(label="Campaign delivery runbook", href="govoplan-campaign/docs/CAMPAIGN_DELIVERY_RUNBOOK.md", kind="repository"),
),
related_modules=("mail", "audit"),