fix sms and ticket user frindly
This commit is contained in:
1 parent
1ee83374fd
commit
b8b3aba855
30 files changed
+2220
-119
No files matched your search
@@ -1,7 +1,7 @@
|
||||
from datetime import timedelta
|
||||
from django.core.exceptions import PermissionDenied,ValidationError
|
||||
from django.db import transaction
|
||||
from django.db.models import Count
|
||||
from django.db.models import Count,Q
|
||||
from django.utils import timezone
|
||||
from apps.attachments.services import save_attachments
|
||||
from apps.core.persian_text import normalize_persian_text
|
||||
@@ -100,11 +100,12 @@ def refresh_group_dispatch_status(dispatch_id):
|
||||
"""Persist delivery state independently of whether a report page is opened."""
|
||||
dispatch=GroupDispatch.objects.filter(pk=dispatch_id).first()
|
||||
if not dispatch: return None
|
||||
counts={row["status"]:row["count"] for row in NotificationJob.objects.filter(ticket__group_dispatch_id=dispatch_id,channel=NotificationJob.Channel.SMS,event_type="STAFF_TICKET_CREATED").values("status").annotate(count=Count("id"))}
|
||||
jobs=NotificationJob.objects.filter(ticket__group_dispatch_id=dispatch_id,channel=NotificationJob.Channel.SMS,event_type="STAFF_TICKET_CREATED")
|
||||
counts={row["status"]:row["count"] for row in jobs.values("status").annotate(count=Count("id"))}
|
||||
sent=counts.get(NotificationJob.Status.SENT,0)
|
||||
failed=counts.get(NotificationJob.Status.FAILED,0)
|
||||
if dispatch.recipient_count and sent>=dispatch.recipient_count: status=GroupDispatch.Status.SENT
|
||||
elif failed: status=GroupDispatch.Status.PARTIAL
|
||||
failed=jobs.filter(Q(status=NotificationJob.Status.FAILED) | Q(status=NotificationJob.Status.SENT,delivery_status__in=[NotificationJob.DeliveryStatus.UNDELIVERED,NotificationJob.DeliveryStatus.EXPIRED,NotificationJob.DeliveryStatus.BLOCKED,NotificationJob.DeliveryStatus.UNKNOWN,NotificationJob.DeliveryStatus.ERROR],delivery_next_check_at__isnull=True)).count()
|
||||
if failed: status=GroupDispatch.Status.PARTIAL
|
||||
elif dispatch.recipient_count and sent>=dispatch.recipient_count: status=GroupDispatch.Status.SENT
|
||||
else: status=GroupDispatch.Status.QUEUED
|
||||
if dispatch.status!=status:
|
||||
GroupDispatch.objects.filter(pk=dispatch_id).update(status=status,updated_at=timezone.now())
|
||||
|
||||
Reference in new issue
Block a user