Implement correlated campaign invitations
This commit is contained in:
@@ -17,6 +17,7 @@ from govoplan_core.core.calendar import (
|
||||
)
|
||||
from govoplan_core.core.module_guards import drop_table_retirement_provider, persistent_table_uninstall_guard
|
||||
from govoplan_core.core.modules import (
|
||||
DocumentationCondition,
|
||||
DocumentationTopic,
|
||||
FrontendModule,
|
||||
FrontendRoute,
|
||||
@@ -497,7 +498,7 @@ manifest = ModuleManifest(
|
||||
provides_interfaces=(
|
||||
ModuleInterfaceProvider(name="calendar.outbox", version="0.1.8"),
|
||||
ModuleInterfaceProvider(name="calendar.scheduling", version="0.1.8"),
|
||||
ModuleInterfaceProvider(name="calendar.invitations", version="0.1.0"),
|
||||
ModuleInterfaceProvider(name="calendar.invitations", version="0.2.0"),
|
||||
ModuleInterfaceProvider(name="calendar.external_profiles", version="0.1.0"),
|
||||
),
|
||||
permissions=PERMISSIONS,
|
||||
@@ -554,6 +555,27 @@ manifest = ModuleManifest(
|
||||
related_modules=("connectors", "audit", "ops"),
|
||||
metadata={"kind": "reference"},
|
||||
),
|
||||
DocumentationTopic(
|
||||
id="calendar.campaign-invitations-and-replies",
|
||||
title="Track Campaign invitations and attendee replies",
|
||||
summary="Mirror accepted Campaign invitation deliveries as correlated VEVENTs and keep attendee participation state authoritative in Calendar.",
|
||||
body="Campaign can render a METHOD:REQUEST attachment before delivery and create or update the correlated Calendar event only after delivery acceptance. Calendar stores correlation, attendee PARTSTAT, response time, bounded evidence, synchronization state, and any degraded behavior. When Mail watches an authorized IMAP folder, METHOD:REPLY parts are forwarded idempotently to Calendar. Campaign reports query the current state in batches instead of copying it into Campaign records. Recurring Campaign invitation series remain a separate workflow.",
|
||||
documentation_types=("admin", "user"),
|
||||
audience=("calendar_manager", "campaign_manager", "operator"),
|
||||
conditions=(
|
||||
DocumentationCondition(
|
||||
required_modules=("calendar", "campaigns"),
|
||||
required_capabilities=(CAPABILITY_CALENDAR_INVITATIONS,),
|
||||
any_scopes=(
|
||||
"calendar:calendar:read",
|
||||
"calendar:calendar:write",
|
||||
"calendar:calendar:admin",
|
||||
),
|
||||
),
|
||||
),
|
||||
related_modules=("campaigns", "mail", "audit"),
|
||||
metadata={"kind": "workflow"},
|
||||
),
|
||||
DocumentationTopic(
|
||||
id="calendar.outbound-change-recovery",
|
||||
title="Recover synchronized calendar writes",
|
||||
|
||||
Reference in New Issue
Block a user