feat(campaigns): add Case Quick Access selector
Module Package Release / publish-packages (push) Successful in 13s

This commit is contained in:
2026-08-21 16:05:45 +02:00
parent 73cfad209a
commit 5a21067e44
6 changed files with 176 additions and 4 deletions
+70 -1
View File
@@ -36,6 +36,7 @@ from govoplan_core.core.modules import (
NavItem,
PermissionDefinition,
ProductAreaContribution,
QuickAccessTool,
RoleTemplate,
)
from govoplan_core.core.reporting import REPORT_PROVIDER_CAPABILITY_PREFIX
@@ -384,7 +385,7 @@ def _campaigns_router(context: ModuleContext):
manifest = ModuleManifest(
id="campaigns",
name="Campaigns",
version="0.1.18",
version="0.1.19",
required_capabilities=(
CAPABILITY_AUTH_PRINCIPAL_RESOLVER,
CAPABILITY_AUTH_PERMISSION_EVALUATOR,
@@ -617,6 +618,32 @@ manifest = ModuleManifest(
label="Campaign activity widget",
order=50,
),
ViewSurface(
id="campaigns.quick_access.campaigns",
module_id="campaigns",
kind="quick_access",
label="Campaign selection",
order=55,
),
),
quick_access_tools=(
QuickAccessTool(
id="campaigns.select",
module_id="campaigns",
category_id="campaigns",
label="Campaigns",
description="Select an authorized exact Campaign for the active Case.",
surface_id="campaigns.quick_access.campaigns",
icon="campaign",
full_page_path="/campaigns",
required_any=("campaigns:campaign:read",),
order=20,
modes=("select",),
availability="active_object",
accepted_reference_kinds=("cases.case",),
returned_reference_kinds=("campaigns.campaign",),
help_context_id="campaigns.quick_access.campaigns",
),
),
),
migration_spec=MigrationSpec(
@@ -668,6 +695,48 @@ manifest = ModuleManifest(
),
documentation=(
*CAMPAIGN_USER_DOCUMENTATION,
DocumentationTopic(
id="campaigns.workflow.link-exact-campaign-to-case",
title="Link an exact Campaign reference to an active Case",
summary=(
"Return an authorized Campaign and current immutable version through "
"Quick Access without copying campaign content."
),
body=(
"When a Case is the active object, Campaigns contributes a bounded "
"Quick Access selector. The normal Campaign list endpoint applies the "
"current actor's tenant, owner, group, share, and administration access "
"before candidates appear. Selecting a Campaign returns only its owner "
"module, stable Campaign ID, current version ID, display label, tenant, "
"and owner route through the versioned result contract. Cases discards "
"the label and stores no recipient, message, attachment, delivery, report, "
"or campaign configuration content. Opening the reference enters Campaigns "
"and rechecks current access. Campaigns disabled, access revoked, or the "
"source removed therefore leaves only an unavailable historical Case "
"reference; it never turns Case access into Campaign access."
),
layer="configured",
documentation_types=("admin", "user"),
audience=("campaign_manager", "case_manager", "operator", "module_admin"),
related_modules=("cases", "quick_access"),
conditions=(
DocumentationCondition(
required_modules=("campaigns", "cases"),
required_scopes=("campaigns:campaign:read",),
),
),
links=(
DocumentationLink(
label="Campaigns",
href="/campaigns",
kind="runtime",
),
),
metadata={
"kind": "workflow",
"help_contexts": ["campaigns.quick_access.campaigns"],
},
),
DocumentationTopic(
id="campaigns.privacy.data-subject-requests",
title="Review Campaign data in a data-subject request",