Add bulk calendar invitation delivery
This commit is contained in:
@@ -14,6 +14,7 @@ from govoplan_campaign.backend.schemas import (
|
||||
CampaignCreateMinimalRequest,
|
||||
CampaignAddressLookupCandidate,
|
||||
CampaignAddressLookupResponse,
|
||||
CampaignCalendarCatalogResponse,
|
||||
CampaignPostboxCatalogResponse,
|
||||
CampaignRecipientAddressSource,
|
||||
CampaignRecipientAddressSourcesResponse,
|
||||
@@ -63,6 +64,7 @@ from govoplan_campaign.backend.campaign.postbox_targets import (
|
||||
delivery_catalog_payload,
|
||||
)
|
||||
from govoplan_campaign.backend.integrations import (
|
||||
calendar_integration,
|
||||
PostboxDeliveryUnavailable,
|
||||
postbox_integration,
|
||||
templates_integration,
|
||||
@@ -756,6 +758,55 @@ def campaign_postbox_catalog(
|
||||
)
|
||||
|
||||
|
||||
@router.get(
|
||||
"/{campaign_id}/calendar-invitation-catalog",
|
||||
response_model=CampaignCalendarCatalogResponse,
|
||||
)
|
||||
def campaign_calendar_invitation_catalog(
|
||||
campaign_id: str,
|
||||
session: Session = Depends(get_session),
|
||||
principal: ApiPrincipal = Depends(require_scope("campaigns:campaign:update")),
|
||||
):
|
||||
_get_campaign_for_principal(session, campaign_id, principal, write=True)
|
||||
integration = calendar_integration()
|
||||
if not integration.available:
|
||||
return CampaignCalendarCatalogResponse(
|
||||
reason="The Calendar invitation capability is not active."
|
||||
)
|
||||
if not any(
|
||||
principal.has(scope)
|
||||
for scope in (
|
||||
"calendar:calendar:read",
|
||||
"calendar:calendar:write",
|
||||
"calendar:calendar:admin",
|
||||
)
|
||||
):
|
||||
return CampaignCalendarCatalogResponse(
|
||||
reason="You are not permitted to select a Calendar collection."
|
||||
)
|
||||
calendars = integration.list_calendars(
|
||||
session,
|
||||
tenant_id=principal.tenant_id,
|
||||
user_id=str(getattr(principal.user, "id", "")) or None,
|
||||
group_ids=tuple(principal.group_ids),
|
||||
can_admin=principal.has("calendar:calendar:admin"),
|
||||
)
|
||||
return CampaignCalendarCatalogResponse(
|
||||
available=True,
|
||||
calendars=[
|
||||
{
|
||||
"id": item.id,
|
||||
"name": item.name,
|
||||
"color": item.color,
|
||||
"timezone": item.timezone,
|
||||
"source_kind": item.source_kind,
|
||||
"writable": item.writable,
|
||||
}
|
||||
for item in calendars
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
@router.get("/{campaign_id}/print-templates")
|
||||
def campaign_print_templates(
|
||||
campaign_id: str,
|
||||
|
||||
Reference in New Issue
Block a user