estelam ticket, varizha , others
This commit is contained in:
1 parent
35a1ec1794
commit
6b546aad76
71 files changed
+2865
-191
No files matched your search
@@ -1,8 +1,46 @@
|
||||
"""Bounded-query projections use only the current evidence revision for financial totals."""
|
||||
from datetime import datetime, time, timedelta
|
||||
|
||||
from django.urls import reverse
|
||||
from django.db.models import BigIntegerField, F, OuterRef, Subquery, Sum, Value
|
||||
from django.db.models import BigIntegerField, Count, F, OuterRef, Q, Subquery, Sum, Value
|
||||
from django.db.models.functions import Coalesce
|
||||
from .models import PaymentReceiptRevision
|
||||
from django.utils import timezone
|
||||
from .models import PaymentReceipt, PaymentReceiptRevision
|
||||
|
||||
|
||||
def daily_payment_summary(receipts, notices):
|
||||
"""Summarize permission-scoped, unfiltered querysets in two aggregate queries.
|
||||
|
||||
Submission means initial receipt creation. Final outcomes use the current
|
||||
revision's finalization time, including receipts submitted on earlier days.
|
||||
Superseded revisions and partial votes never count as final outcomes.
|
||||
"""
|
||||
local_timezone = timezone.get_default_timezone()
|
||||
today = timezone.localdate(timezone=local_timezone)
|
||||
start = timezone.make_aware(datetime.combine(today, time.min), local_timezone)
|
||||
end = timezone.make_aware(datetime.combine(today + timedelta(days=1), time.min), local_timezone)
|
||||
current = PaymentReceiptRevision.objects.filter(
|
||||
receipt_id=OuterRef('pk'), version=OuterRef('current_version'))
|
||||
receipts = receipts.annotate(
|
||||
summary_amount=Subquery(current.values('amount')[:1]),
|
||||
summary_finalized_at=Subquery(current.values('cycle__finalized_at')[:1]))
|
||||
submitted = Q(created_at__gte=start, created_at__lt=end)
|
||||
finalized = Q(summary_finalized_at__gte=start, summary_finalized_at__lt=end)
|
||||
approved = finalized & Q(status=PaymentReceipt.Status.APPROVED)
|
||||
rejected = finalized & Q(status=PaymentReceipt.Status.REJECTED)
|
||||
pending = Q(status__in=[PaymentReceipt.Status.PENDING, PaymentReceipt.Status.PARTIAL])
|
||||
summary = receipts.aggregate(
|
||||
submitted_count=Count('pk', filter=submitted),
|
||||
submitted_amount=Sum('summary_amount', filter=submitted, default=0),
|
||||
approved_count=Count('pk', filter=approved),
|
||||
approved_amount=Sum('summary_amount', filter=approved, default=0),
|
||||
rejected_count=Count('pk', filter=rejected),
|
||||
rejected_amount=Sum('summary_amount', filter=rejected, default=0),
|
||||
pending_count=Count('pk', filter=pending),
|
||||
pending_amount=Sum('summary_amount', filter=pending, default=0))
|
||||
summary['notice_count'] = notices.filter(created_at__gte=start, created_at__lt=end).count()
|
||||
summary['date'] = today
|
||||
return summary
|
||||
|
||||
|
||||
def notice_sms_history(notice):
|
||||
|
||||
Reference in new issue
Block a user