feat: add campaign copying scheduling and residual handling

This commit is contained in:
2026-08-07 14:54:04 +02:00
parent 696f8f6385
commit c2efd6b7bd
35 changed files with 3359 additions and 39 deletions
@@ -14,6 +14,7 @@ from govoplan_core.core.campaigns import (
CampaignPolicyContext,
CampaignPolicyContextProvider,
CampaignRetentionProvider,
CampaignScheduleProvider,
)
from govoplan_core.core.ownership import (
OwnershipActionDecision,
@@ -715,6 +716,37 @@ def delivery_tasks_capability(context: object) -> CampaignDeliveryTaskService:
return CampaignDeliveryTaskService()
class CampaignScheduleService(CampaignScheduleProvider):
def dispatch_due(
self,
session: object,
*,
tenant_id: str | None = None,
now=None,
limit: int = 50,
) -> Mapping[str, object]:
from govoplan_campaign.backend.campaign.scheduling import (
dispatch_due_campaign_schedules,
)
return dispatch_due_campaign_schedules(
session, # type: ignore[arg-type]
tenant_id=tenant_id,
now=now,
limit=limit,
)
def schedules_capability(context: object) -> CampaignScheduleService:
from govoplan_campaign.backend.runtime import configure_runtime
configure_runtime(
registry=getattr(context, "registry", None),
settings=getattr(context, "settings", None),
)
return CampaignScheduleService()
class CampaignRetentionService(CampaignRetentionProvider):
def apply_retention(self, session: object, *, dry_run, now, policy_for_campaign_id):
from govoplan_campaign.backend.retention import apply_campaign_retention