Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1from django.db import models 

2from django.db.models import Sum 

3from django.db.models.functions import Cast 

4from django.contrib.postgres.fields.jsonb import KeyTextTransform 

5from rest_framework import serializers 

6 

7from project.models import Project 

8from report.models import ( 

9 Report, 

10 ProjectSOI, 

11 RegisterChildByAgeAndGender, 

12 PresenceAndParticipation, 

13 ChildFamilyParticipation, 

14 LanguagePeopleGroupDisability, 

15 SupportPariticipationDetail, 

16 MostVulnerableChildrenIndicator, 

17 MostVulnerableChildrenVulnerabilityMarker, 

18) 

19 

20from project.serializers import MiniProjectSerializer 

21 

22 

23class BaseSerializer(serializers.ModelSerializer): 

24 project_detail = MiniProjectSerializer(source='project', read_only=True) 

25 

26 

27class ReportSerializer(BaseSerializer): 

28 support_pariticipation_detail = serializers.SerializerMethodField() 

29 most_vulnerable_children_indicator = serializers.SerializerMethodField() 

30 most_vulnerable_children_vulnerability_marker = serializers.SerializerMethodField() 

31 

32 def get_support_pariticipation_detail(self, obj): 

33 return SupportPariticipationDetail.objects.filter(project=obj.project).values('type', 'comment').annotate( 

34 count_sum=Sum('count') 

35 ).values('type', 'comment', 'count_sum') 

36 

37 def get_most_vulnerable_children_indicator(self, obj): 

38 return MostVulnerableChildrenIndicator.objects.filter(project=obj.project).aggregate( 

39 total_mvc_count=Sum('mvc_count'), 

40 total_rc_not_vc_count=Sum('rc_not_vc_count'), 

41 total_rc_count=Sum('rc_count'), 

42 ) 

43 

44 def get_most_vulnerable_children_vulnerability_marker(self, obj): 

45 return MostVulnerableChildrenVulnerabilityMarker.objects.filter(project=obj.project).aggregate( 

46 **{ 

47 field_label: Sum(Cast(KeyTextTransform(field, 'data'), models.IntegerField())) 

48 for field, field_label in MostVulnerableChildrenVulnerabilityMarker.get_data_fields() 

49 }, 

50 ) 

51 

52 class Meta: 

53 model = Report 

54 fields = '__all__' 

55 

56 

57class ProjectSOISerializer(BaseSerializer): 

58 class Meta: 

59 model = ProjectSOI 

60 fields = '__all__' 

61 

62 

63class RegisterChildByAgeAndGenderSerializer(BaseSerializer): 

64 class Meta: 

65 model = RegisterChildByAgeAndGender 

66 fields = '__all__' 

67 

68 

69class PresenceAndParticipationSerializer(BaseSerializer): 

70 class Meta: 

71 model = PresenceAndParticipation 

72 fields = '__all__' 

73 

74 

75class ChildFamilyParticipationSerializer(BaseSerializer): 

76 class Meta: 

77 model = ChildFamilyParticipation 

78 fields = '__all__' 

79 

80 

81class SupportPariticipationDetailSerializer(BaseSerializer): 

82 class Meta: 

83 model = SupportPariticipationDetail 

84 fields = '__all__' 

85 

86 

87class ProjectLanguagePeopleGroupDisabilitySerializer(serializers.ModelSerializer): 

88 project_id = serializers.IntegerField(source='id') 

89 language = serializers.SerializerMethodField() 

90 people_group = serializers.SerializerMethodField() 

91 disability = serializers.SerializerMethodField() 

92 

93 def _get_field_value(self, instance, field): 

94 qs = LanguagePeopleGroupDisability.objects.filter(project=instance) 

95 return list( 

96 qs.values('date', field).annotate( 

97 count=Sum('count', distinct=True), 

98 ).values('date', f'{field}', 'count') 

99 ) 

100 

101 def get_language(self, instance): 

102 return self._get_field_value(instance, 'language') 

103 

104 def get_people_group(self, instance): 

105 return self._get_field_value(instance, 'people_group') 

106 

107 def get_disability(self, instance): 

108 return self._get_field_value(instance, 'disability') 

109 

110 class Meta: 

111 model = Project 

112 fields = ('project_id', 'language', 'people_group', 'disability')