From c0e62541c3c9249e8eb6b0fbb67d82c189f0b16b Mon Sep 17 00:00:00 2001 From: Mojtaba-z Date: Sat, 24 Jan 2026 16:35:54 +0330 Subject: [PATCH] fix --> tag distribution dashboard by species --- .../tag/services/tag_distribution_services.py | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/apps/tag/services/tag_distribution_services.py b/apps/tag/services/tag_distribution_services.py index 37c3af0..5a99304 100644 --- a/apps/tag/services/tag_distribution_services.py +++ b/apps/tag/services/tag_distribution_services.py @@ -6,6 +6,7 @@ from django.db.models.aggregates import Count from django.db.models.functions import Coalesce from apps.authentication.models import Organization +from apps.livestock.models import LiveStockSpecies from apps.tag.exceptions import TagException from apps.tag.models import Tag, TagBatch, TagDistribution, TagDistributionBatch from common.generics import generate_unique_code @@ -159,16 +160,18 @@ class TagDistributionService: is_closed = False if is_closed == 'false' else True if org.type.key == 'ADM': - distributions_batch = TagDistributionBatch.objects.prefetch_related( - 'distributions' - ).filter(is_closed=is_closed) + distribution_query = (Q(is_closed=is_closed)) else: - distributions_batch = TagDistributionBatch.objects.filter( + distribution_query = ( Q(assigner_org=org) | Q(assigned_org=org), - is_closed=is_closed, + Q(is_closed=is_closed) ) + distributions_batch = TagDistributionBatch.objects.prefetch_related( + 'distributions' + ).filter(distribution_query) + data = distributions_batch.aggregate( count=Count('id'), total_sent_tag_count=Coalesce(Sum('total_tag_count', filter=Q(assigner_org=org)), 0), @@ -179,11 +182,22 @@ class TagDistributionService: remaining_tag_count=Sum('remaining_tag_count'), ) + # distributions item list detail + items_list = [] distributions = TagDistribution.objects.filter( - Q(assigner_org=org) | - Q(assigned_org=org), - is_closed=is_closed, + distribution_query ) - print(distributions) + species = LiveStockSpecies.objects.values('value') + + for spec in species: + items_list.append({ + spec.get('value'): distributions.aggregate( + dist_count=Count('id', filter=Q(species_code=spec.get('value'))), + tag_count=Sum('distributed_number', filter=Q(species_code=spec.get('value'))) + ), + }) + + data.update({'items': items_list}) + return data