Skip to content

Commit cfcf1da

Browse files
Merge pull request #1496 from IFRCGo/feature/3w-add-annual-figures-1189
Add annual figures
2 parents 8d6ebc4 + 9b91066 commit cfcf1da

File tree

8 files changed

+220
-102
lines changed

8 files changed

+220
-102
lines changed

deployments/admin.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,10 @@ class ProjectCountryFilter(AutocompleteFilter):
104104
field_name = 'project_country'
105105

106106

107+
class ProjectAnnualSplitAdminInline(admin.TabularInline):
108+
model = models.AnnualSplit
109+
110+
107111
class ProjectAdmin(CompareVersionAdmin, TranslationAdmin):
108112
form = ProjectForm
109113
reporting_ns_in = 'country_from__in'
@@ -113,6 +117,7 @@ class ProjectAdmin(CompareVersionAdmin, TranslationAdmin):
113117
'user', 'reporting_ns', 'project_country', 'project_districts', 'regional_project',
114118
'event', 'dtype',
115119
)
120+
inlines = [ProjectAnnualSplitAdminInline]
116121

117122
class Media: # Required by AutocompleteFilter
118123
pass

deployments/drf_views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ class ProjectViewset(
368368
viewsets.ModelViewSet,
369369
):
370370
queryset = Project.objects.prefetch_related(
371-
'user', 'reporting_ns', 'project_districts', 'event', 'dtype', 'regional_project',
371+
'user', 'reporting_ns', 'project_districts', 'event', 'dtype', 'regional_project', 'annual_splits',
372372
).all()
373373
filterset_class = ProjectFilter
374374
serializer_class = ProjectSerializer
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Generated by Django 2.2.27 on 2022-08-18 09:43
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('deployments', '0066_auto_20220727_0708'),
11+
]
12+
13+
operations = [
14+
migrations.CreateModel(
15+
name='AnnualSplit',
16+
fields=[
17+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18+
('year', models.IntegerField(blank=True, null=True, verbose_name='year')),
19+
('budget_amount', models.IntegerField(blank=True, null=True, verbose_name='amount')),
20+
('target_male', models.IntegerField(blank=True, null=True, verbose_name='target male')),
21+
('target_female', models.IntegerField(blank=True, null=True, verbose_name='target female')),
22+
('target_other', models.IntegerField(blank=True, null=True, verbose_name='target other')),
23+
('reached_male', models.IntegerField(blank=True, null=True, verbose_name='reached male')),
24+
('reached_female', models.IntegerField(blank=True, null=True, verbose_name='reached female')),
25+
('reached_other', models.IntegerField(blank=True, null=True, verbose_name='reached other')),
26+
('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='annual_splits', to='deployments.Project', verbose_name='project')),
27+
],
28+
options={
29+
'verbose_name': 'Annual Split',
30+
'verbose_name_plural': 'Annual Splits',
31+
},
32+
),
33+
]

deployments/models.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,27 @@ def get_for(user, queryset=None):
518518
)
519519

520520

521+
class AnnualSplit(models.Model):
522+
""" Annual split for Project """
523+
524+
project = models.ForeignKey(Project, verbose_name=_('project'), related_name='annual_splits', on_delete=models.CASCADE)
525+
year = models.IntegerField(verbose_name=_('year'), null=True, blank=True)
526+
budget_amount = models.IntegerField(verbose_name=_('amount'), null=True, blank=True)
527+
target_male = models.IntegerField(verbose_name=_('target male'), null=True, blank=True)
528+
target_female = models.IntegerField(verbose_name=_('target female'), null=True, blank=True)
529+
target_other = models.IntegerField(verbose_name=_('target other'), null=True, blank=True)
530+
reached_male = models.IntegerField(verbose_name=_('reached male'), null=True, blank=True)
531+
reached_female = models.IntegerField(verbose_name=_('reached female'), null=True, blank=True)
532+
reached_other = models.IntegerField(verbose_name=_('reached other'), null=True, blank=True)
533+
534+
class Meta:
535+
verbose_name = _('Annual Split')
536+
verbose_name_plural = _('Annual Splits')
537+
538+
def __str__(self):
539+
return '%s: %s %s | %s %s' % (str(self.project_id), str(self.year), str(self.budget_amount), str(self.target_male), str(self.reached_male),)
540+
541+
521542
@reversion.register()
522543
class ProjectImport(models.Model):
523544
"""

deployments/serializers.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
)
2525

2626
from .models import (
27+
AnnualSplit,
2728
ERUOwner,
2829
ERU,
2930
PersonnelDeployment,
@@ -337,6 +338,13 @@ class Meta:
337338
fields = '__all__'
338339

339340

341+
class AnnualSplitSerializer(ModelSerializer):
342+
class Meta:
343+
model = AnnualSplit
344+
fields = ('year', 'budget_amount', 'target_male', 'target_female', 'target_other',
345+
'reached_male', 'reached_female', 'reached_other',)
346+
347+
340348
class ProjectSerializer(EnumSupportSerializerMixin, ModelSerializer):
341349
project_country_detail = MiniCountrySerializer(source='project_country', read_only=True)
342350
project_districts_detail = MiniDistrictSerializer(source='project_districts', read_only=True, many=True)
@@ -350,6 +358,7 @@ class ProjectSerializer(EnumSupportSerializerMixin, ModelSerializer):
350358
status_display = serializers.CharField(source='get_status_display', read_only=True)
351359
visibility_display = serializers.CharField(source='get_visibility_display', read_only=True)
352360
secondary_sectors_display = serializers.ListField(source='get_secondary_sectors_display', read_only=True)
361+
annual_split_detail = AnnualSplitSerializer(source='annual_splits', many=True, read_only=True)
353362
modified_by_detail = MiniUserSerializer(source='modified_by', read_only=True)
354363

355364
class Meta:

0 commit comments

Comments
 (0)