Files
ai_ml_operations 8a97e3fbe2 Initial commit
2026-09-06 04:27:41 -07:00

59 lines
1.6 KiB
Python

"""Register portal nav, dashboard widgets, and due-work dispatch."""
from django.utils import timezone
from core.registry import (
register_dashboard_collector,
register_dispatcher,
register_feature,
register_portal_nav,
)
def register() -> None:
register_feature("directmail")
register_portal_nav(
section="directmail",
label="Direct mail",
url_name="directmail:campaign_list",
group="Outreach",
order=30,
)
register_portal_nav(
section="postcard",
label="Postcard design",
url_name="directmail:postcard_designer",
group="Outreach",
order=31,
)
register_dashboard_collector(_dashboard)
register_dispatcher(_dispatch_due)
def _dashboard(request) -> dict:
from directmail.models import Campaign
upcoming = list(
Campaign.objects.exclude(
status__in=[Campaign.Status.COMPLETED, Campaign.Status.CANCELLED]
).order_by("scheduled_for", "-created_at")[:5]
)
return {"upcoming_directmail": upcoming}
def _dispatch_due() -> int:
from directmail.models import Message
from directmail.tasks import send_campaign_message
now = timezone.now()
enqueued = 0
for message in Message.objects.filter(
status=Message.Status.SCHEDULED,
scheduled_for__lte=now,
).iterator():
message.status = Message.Status.QUEUED
message.save(update_fields=["status", "updated_at"])
send_campaign_message.enqueue(message_id=str(message.pk))
enqueued += 1
return enqueued