From 5f50e1846b58d17f4ce3a279c9ec68da84850963 Mon Sep 17 00:00:00 2001 From: Sushil Tiwari Date: Thu, 23 Jan 2025 15:06:31 +0545 Subject: [PATCH] fix sources stats on ops learning (#2393) --- per/drf_views.py | 14 +++++++------- per/serializers.py | 8 ++++---- per/test_views.py | 16 +++++++++++----- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/per/drf_views.py b/per/drf_views.py index 108a0ecbd..731d987ed 100644 --- a/per/drf_views.py +++ b/per/drf_views.py @@ -20,7 +20,7 @@ from rest_framework.response import Response from rest_framework.settings import api_settings -from api.models import Appeal, Country, Region +from api.models import Country, Region from deployments.models import SectorTag from main.permissions import DenyGuestUserMutationPermission, DenyGuestUserPermission from main.utils import SpreadSheetContentNegotiation @@ -950,7 +950,7 @@ def stats(self, request): operations_included=Count("appeal_code", distinct=True), learning_extracts=Count("id", distinct=True), sector_covered=Count("sector_validated", distinct=True), - source_used=Count("appeal_code__appealdocument", distinct=True), + source_used=Count("appeal_document_id", distinct=True), ) learning_by_sector_qs = ( @@ -961,13 +961,13 @@ def stats(self, request): # NOTE: Queryset is unbounded, we may need to add some start_date filter. sources_overtime_qs = ( - Appeal.objects.filter(opslearning__in=queryset) + queryset.filter(appeal_document_id__isnull=False) .annotate( - type=F("atype"), - date=F("start_date"), - count=Count("appealdocument", distinct=True), + atype=F("appeal_code__atype"), + date=F("appeal_code__start_date"), + count=Count("appeal_document_id", distinct=True), ) - .values("type", "date", "count") + .values("atype", "date", "count") ) learning_by_region_qs = ( diff --git a/per/serializers.py b/per/serializers.py index 2233347d3..57a2c1888 100644 --- a/per/serializers.py +++ b/per/serializers.py @@ -1275,13 +1275,13 @@ class LearningBySectorSerializer(serializers.Serializer): class LearningSourcesOvertimeSerializer(serializers.Serializer): - type = serializers.IntegerField(required=True) - type_display = serializers.SerializerMethodField(read_only=True) + atype = serializers.IntegerField(required=True) + atype_display = serializers.SerializerMethodField(read_only=True) date = serializers.DateTimeField(required=True) count = serializers.IntegerField(required=True) - def get_type_display(self, obj): - type = obj.get("type") + def get_atype_display(self, obj): + type = obj.get("atype") return AppealType(type).label diff --git a/per/test_views.py b/per/test_views.py index 8f328ee31..97e264d35 100644 --- a/per/test_views.py +++ b/per/test_views.py @@ -250,16 +250,22 @@ def setUp(self): region=self.region, country=self.country, code="APP002", atype=1, start_date="2023-02-01" ) - AppealDocumentFactory.create(appeal=self.appeal1) - AppealDocumentFactory.create(appeal=self.appeal2) + appeal_document_1 = AppealDocumentFactory.create(appeal=self.appeal1) + appeal_document_2 = AppealDocumentFactory.create(appeal=self.appeal2) - self.ops_learning1 = OpsLearningFactory.create(is_validated=True, appeal_code=self.appeal1) + self.ops_learning1 = OpsLearningFactory.create( + is_validated=True, appeal_code=self.appeal1, appeal_document_id=appeal_document_1.id + ) self.ops_learning1.sector_validated.set([self.sector1]) - self.ops_learning2 = OpsLearningFactory.create(is_validated=True, appeal_code=self.appeal2) + self.ops_learning2 = OpsLearningFactory.create( + is_validated=True, appeal_code=self.appeal2, appeal_document_id=appeal_document_2.id + ) self.ops_learning2.sector_validated.set([self.sector2]) - self.ops_learning3 = OpsLearningFactory.create(is_validated=False, appeal_code=self.appeal2) + self.ops_learning3 = OpsLearningFactory.create( + is_validated=False, appeal_code=self.appeal2, appeal_document_id=appeal_document_2.id + ) self.ops_learning3.sector_validated.set([self.sector2]) def test_ops_learning_stats(self):