diff --git a/apps/tag/services/tag_distribution_services.py b/apps/tag/services/tag_distribution_services.py index e6ccf7c..7674657 100644 --- a/apps/tag/services/tag_distribution_services.py +++ b/apps/tag/services/tag_distribution_services.py @@ -1,7 +1,8 @@ import random from django.db import transaction -from django.db.models import Sum +from django.db.models import Sum, Q +from django.db.models.aggregates import Count from apps.authentication.models import Organization from apps.tag.exceptions import TagException @@ -154,10 +155,21 @@ class TagDistributionService: distribution batch main page dashboard detail """ - distributions_batch = TagDistributionBatch.objects.prefetch_related('distributions') + if org.type.key == 'ADM': + distributions_batch = TagDistributionBatch.objects.prefetch_related('distributions') + else: + distributions_batch = TagDistributionBatch.objects.filter( + Q(assigner_org=org) | + Q(assigned_org=org) + ) - distributions_batch.aggregate( + data = distributions_batch.aggregate( + count=Count('id'), total_tag_count=Sum('total_tag_count'), + total_recieved_distributions=Count('id', filter=Q(assigned_org=org)), + total_sent_distributions=Count('id', filter=Q(assigner_org=org)), total_distributed_tag_count=Sum('total_distributed_tag_count'), remaining_tag_count=Sum('remaining_tag_count'), ) + + return data diff --git a/apps/tag/web/api/v1/api.py b/apps/tag/web/api/v1/api.py index 3eefb0d..73e119f 100644 --- a/apps/tag/web/api/v1/api.py +++ b/apps/tag/web/api/v1/api.py @@ -532,3 +532,37 @@ class TagDistributionBatchViewSet( serializer = self.get_serializer(page, many=True) return self.get_paginated_response(serializer.data) return Response(self.serializer_class(queryset).data) + + @action( + methods=['post'], + detail=True, + url_name='reactivate_tag_dist_batch', + url_path='reactivate_tag_dist_batch', + name='reactivate_tag_dist_batch', + ) + def reactivate_tag_dist_batch(self, request, pk=None): + """ + reactivate canceled distribution batch + """ + + dist_batch = self.get_object() + dist_batch.is_closed = False + dist_batch.save(update_fields=['is_closed']) + + return Response(status=status.HTTP_200_OK) + + @action( + methods=['get'], + detail=False, + url_path='main_dashboard', + url_name='main_dashboard', + name='main_dashboard' + ) + def main_dashboard(self, request): + """ + dashboard of main page + """ + org = get_organization_by_user(request.user) + dashboard_data = self.distribution_batch_main_dashboard(org=org) + + return Response(dashboard_data, status=status.HTTP_200_OK)