fix --> tag batch main dashboard

This commit is contained in:
2026-01-28 11:34:27 +03:30
parent 10c6eb9e79
commit 879e004e9b

View File

@@ -1,4 +1,4 @@
from django.db.models import Sum, Q, Count, QuerySet from django.db.models import Sum, Q, Count, QuerySet, OuterRef, Subquery, IntegerField
from django.db.models.functions import Coalesce from django.db.models.functions import Coalesce
from apps.authentication.models import Organization from apps.authentication.models import Organization
@@ -26,9 +26,7 @@ class TagBatchService:
base_data = qs.aggregate( base_data = qs.aggregate(
batch_count=Count('id', distinct=True), batch_count=Count('id', distinct=True),
total_distributed_tags=Coalesce(Sum('total_distributed_tags'), 0), total_distributed_tags=Coalesce(Sum('total_distributed_tags'), 0),
total_remaining_tags=Coalesce(Sum('total_remaining_tags'), 0) / total_remaining_tags=Coalesce(Sum('total_remaining_tags'), 0),
Coalesce(Sum('total_remaining_tags', distinct=True), 0),
tag_count_created_by_batch=Count('tag'),
has_distributed_batches_number=Count( has_distributed_batches_number=Count(
'id', 'id',
distinct=True, distinct=True,
@@ -37,21 +35,30 @@ class TagBatchService:
]) ])
) )
) )
base_data.update(qs.aggregate(tag_count_created_by_batch=Count('tag')))
tag_count_subquery = (
TagBatch.objects
.filter(id=OuterRef('id'))
.annotate(cnt=Count('tag'))
.values('cnt')
)
species_data = ( species_data = (
qs qs
.annotate(
tag_count=Subquery(tag_count_subquery, output_field=IntegerField())
)
.values('species_code') .values('species_code')
.annotate( .annotate(
batch_count=Count('id', distinct=True), batch_count=Count('id', distinct=True),
total_distributed_tags=Coalesce(Sum('total_distributed_tags'), 0), total_distributed_tags=Coalesce(Sum('total_distributed_tags'), 0),
total_remaining_tags=Coalesce(Sum('total_remaining_tags'), 0), total_remaining_tags=Coalesce(Sum('total_remaining_tags'), 0),
tag_count_created_by_batch=Count('tag'), tag_count_created_by_batch=Coalesce(Sum('tag_count'), 0),
has_distributed_batches_number=Count( has_distributed_batches_number=Count(
'id', 'id',
distinct=True, distinct=True,
filter=Q(status__in=[ filter=Q(status='distributed')
'distributed'
])
) )
) )
.order_by('species_code') .order_by('species_code')