Skip to content

Commit 77dd4c1

Browse files
authored
Merge pull request #2444 from IFRCGo/feature/dref-super-ticker-2
Add fields based on new dref superticket
2 parents e33c294 + d14ac51 commit 77dd4c1

File tree

8 files changed

+676
-0
lines changed

8 files changed

+676
-0
lines changed

dref/migrations/0077_dref_child_safeguarding_risk_level_and_more.py

Lines changed: 364 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Generated by Django 4.2.19 on 2025-04-25 11:26
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("dref", "0077_dref_child_safeguarding_risk_level_and_more"),
10+
]
11+
12+
operations = [
13+
migrations.RemoveField(
14+
model_name="dref",
15+
name="estimated_number_of_affected_minors",
16+
),
17+
migrations.RemoveField(
18+
model_name="dreffinalreport",
19+
name="estimated_number_of_affected_minors",
20+
),
21+
migrations.RemoveField(
22+
model_name="drefoperationalupdate",
23+
name="estimated_number_of_affected_minors",
24+
),
25+
migrations.AddField(
26+
model_name="dref",
27+
name="estimated_number_of_affected_boys_under_18",
28+
field=models.IntegerField(blank=True, null=True, verbose_name="estimated number of affected boys under 18"),
29+
),
30+
migrations.AddField(
31+
model_name="dref",
32+
name="estimated_number_of_affected_girls_under_18",
33+
field=models.IntegerField(blank=True, null=True, verbose_name="estimated number of affected girls under 18"),
34+
),
35+
migrations.AddField(
36+
model_name="dreffinalreport",
37+
name="estimated_number_of_affected_boys_under_18",
38+
field=models.IntegerField(blank=True, null=True, verbose_name="estimated number of affected boys under 18"),
39+
),
40+
migrations.AddField(
41+
model_name="dreffinalreport",
42+
name="estimated_number_of_affected_girls_under_18",
43+
field=models.IntegerField(blank=True, null=True, verbose_name="estimated number of affected girls under 18"),
44+
),
45+
migrations.AddField(
46+
model_name="drefoperationalupdate",
47+
name="estimated_number_of_affected_boys_under_18",
48+
field=models.IntegerField(blank=True, null=True, verbose_name="estimated number of affected boys under 18"),
49+
),
50+
migrations.AddField(
51+
model_name="drefoperationalupdate",
52+
name="estimated_number_of_affected_girls_under_18",
53+
field=models.IntegerField(blank=True, null=True, verbose_name="estimated number of affected girls under 18"),
54+
),
55+
]

dref/models.py

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,18 @@ class Status(models.IntegerChoices):
311311
status = models.IntegerField(choices=Status.choices, verbose_name=_("status"), null=True, blank=True)
312312
num_assisted = models.IntegerField(verbose_name=_("number of assisted"), blank=True, null=True)
313313
num_affected = models.IntegerField(verbose_name=_("number of affected"), blank=True, null=True)
314+
estimated_number_of_affected_male = models.IntegerField(
315+
verbose_name=_("estimated number of affected male"), blank=True, null=True
316+
)
317+
estimated_number_of_affected_female = models.IntegerField(
318+
verbose_name=_("estimated number of affected female"), blank=True, null=True
319+
)
320+
estimated_number_of_affected_girls_under_18 = models.IntegerField(
321+
verbose_name=_("estimated number of affected girls under 18"), blank=True, null=True
322+
)
323+
estimated_number_of_affected_boys_under_18 = models.IntegerField(
324+
verbose_name=_("estimated number of affected boys under 18"), blank=True, null=True
325+
)
314326
amount_requested = models.IntegerField(verbose_name=_("amount requested"), blank=True, null=True)
315327
people_in_need = models.IntegerField(verbose_name=_("people in need"), blank=True, null=True)
316328
emergency_appeal_planned = models.BooleanField(verbose_name=_("emergency appeal planned "), null=True, blank=True)
@@ -333,6 +345,10 @@ class Status(models.IntegerChoices):
333345
ns_request_text = models.TextField(blank=True, null=True, verbose_name=_("ns request text"))
334346
dref_recurrent_text = models.TextField(verbose_name=_("dref recurrent text"), blank=True, null=True)
335347
lessons_learned = models.TextField(verbose_name=_("lessons learned"), blank=True, null=True)
348+
complete_child_safeguarding_risk = models.BooleanField(
349+
null=True, blank=True, default=False, help_text=_("Did you complete the child safeguarding risk analysis")
350+
)
351+
child_safeguarding_risk_level = models.TextField(verbose_name=_("Child safeguarding risk level"), blank=True, null=True)
336352
event_description = models.TextField(verbose_name=_("event description"), blank=True, null=True)
337353
anticipatory_actions = models.TextField(
338354
blank=True,
@@ -481,6 +497,21 @@ class Status(models.IntegerChoices):
481497
national_society_contact_phone_number = models.CharField(
482498
verbose_name=_("national society contact phone number"), max_length=100, null=True, blank=True
483499
)
500+
national_society_integrity_contact_name = models.CharField(
501+
verbose_name=_("national society integrity contact name"), max_length=255, null=True, blank=True
502+
)
503+
national_society_integrity_contact_email = models.CharField(
504+
verbose_name=_("national society integrity contact email"), max_length=255, null=True, blank=True
505+
)
506+
national_society_integrity_contact_title = models.CharField(
507+
verbose_name=_("national society integrity contact title"), max_length=255, null=True, blank=True
508+
)
509+
national_society_integrity_contact_phone_number = models.CharField(
510+
verbose_name=_("national society integrity contact phone number"), max_length=100, null=True, blank=True
511+
)
512+
national_society_hotline_phone_number = models.CharField(
513+
verbose_name=_("national society hotline phone number"), max_length=100, null=True, blank=True
514+
)
484515
media_contact_name = models.CharField(verbose_name=_("media contact name"), max_length=255, null=True, blank=True)
485516
media_contact_email = models.CharField(verbose_name=_("media contact email"), max_length=255, null=True, blank=True)
486517
media_contact_title = models.CharField(verbose_name=_("media contact title"), max_length=255, null=True, blank=True)
@@ -515,6 +546,12 @@ class Status(models.IntegerChoices):
515546
verbose_name=_("human resource"),
516547
help_text=_("how many volunteers and staff involved in the response?"),
517548
)
549+
is_volunteer_team_diverse = models.TextField(
550+
blank=True,
551+
null=True,
552+
verbose_name=_("is volunteer team diverse"),
553+
help_text=_("Does your volunteer team reflect the gender, age, and cultural diversity of the people you’re helping?"),
554+
)
518555
is_surge_personnel_deployed = models.BooleanField(blank=True, null=True, verbose_name=_("Is surge personnel deployed"))
519556
surge_personnel_deployed = models.TextField(
520557
blank=True, null=True, verbose_name=_("surge personnel deployed"), help_text=_("Will a Surge personnel be deployed?")
@@ -606,6 +643,21 @@ class Status(models.IntegerChoices):
606643
verbose_name=_("Has the child safeguarding risk analysis assessment been completed?"), null=True, blank=True
607644
)
608645
risk_security_concern = models.TextField(blank=True, null=True, verbose_name=_("Risk Security Concern"))
646+
has_anti_fraud_corruption_policy = models.BooleanField(
647+
verbose_name=_("Has anti-fraud and corruption policy"), null=True, blank=True
648+
)
649+
has_sexual_abuse_policy = models.BooleanField(
650+
verbose_name=_("Has prevention of sexual exploitation and abuse policy"), null=True, blank=True
651+
)
652+
has_child_protection_policy = models.BooleanField(
653+
verbose_name=_("Has child protection/child safeguarding policy"), null=True, blank=True
654+
)
655+
has_whistleblower_protection_policy = models.BooleanField(
656+
verbose_name=_("Has whistleblower protection policy"), null=True, blank=True
657+
)
658+
has_anti_sexual_harassment_policy = models.BooleanField(
659+
verbose_name=_("Has anti-sexual harassment policy"), null=True, blank=True
660+
)
609661
is_man_made_event = models.BooleanField(verbose_name=_("Is Man-made Event"), null=True, blank=True)
610662
__budget_file_id = None
611663
is_active = models.BooleanField(verbose_name=_("Is Active"), null=True, blank=True)
@@ -781,6 +833,18 @@ class DrefOperationalUpdate(models.Model):
781833
status = models.IntegerField(choices=Dref.Status.choices, verbose_name=_("status"), null=True, blank=True)
782834
number_of_people_targeted = models.IntegerField(verbose_name=_("Number of people targeted"), blank=True, null=True)
783835
number_of_people_affected = models.IntegerField(verbose_name=_("number of people affected"), blank=True, null=True)
836+
estimated_number_of_affected_male = models.IntegerField(
837+
verbose_name=_("estimated number of affected male"), blank=True, null=True
838+
)
839+
estimated_number_of_affected_female = models.IntegerField(
840+
verbose_name=_("estimated number of affected female"), blank=True, null=True
841+
)
842+
estimated_number_of_affected_girls_under_18 = models.IntegerField(
843+
verbose_name=_("estimated number of affected girls under 18"), blank=True, null=True
844+
)
845+
estimated_number_of_affected_boys_under_18 = models.IntegerField(
846+
verbose_name=_("estimated number of affected boys under 18"), blank=True, null=True
847+
)
784848
dref_allocated_so_far = models.IntegerField(verbose_name=_("Dref allocated so far"), null=True, blank=True)
785849
additional_allocation = models.IntegerField(verbose_name=_("Additional allocation"), null=True, blank=True)
786850
total_dref_allocation = models.IntegerField(verbose_name=_("Total dref allocation"), null=True, blank=True)
@@ -875,6 +939,21 @@ class DrefOperationalUpdate(models.Model):
875939
national_society_contact_phone_number = models.CharField(
876940
verbose_name=_("national society contact phone number"), max_length=100, null=True, blank=True
877941
)
942+
national_society_integrity_contact_name = models.CharField(
943+
verbose_name=_("national society integrity contact name"), max_length=255, null=True, blank=True
944+
)
945+
national_society_integrity_contact_email = models.CharField(
946+
verbose_name=_("national society integrity contact email"), max_length=255, null=True, blank=True
947+
)
948+
national_society_integrity_contact_title = models.CharField(
949+
verbose_name=_("national society integrity contact title"), max_length=255, null=True, blank=True
950+
)
951+
national_society_integrity_contact_phone_number = models.CharField(
952+
verbose_name=_("national society integrity contact phone number"), max_length=100, null=True, blank=True
953+
)
954+
national_society_hotline_phone_number = models.CharField(
955+
verbose_name=_("national society hotline phone number"), max_length=100, null=True, blank=True
956+
)
878957
media_contact_name = models.CharField(verbose_name=_("media contact name"), max_length=255, null=True, blank=True)
879958
media_contact_email = models.CharField(verbose_name=_("media contact email"), max_length=255, null=True, blank=True)
880959
media_contact_title = models.CharField(verbose_name=_("media contact title"), max_length=255, null=True, blank=True)
@@ -1005,6 +1084,21 @@ class DrefOperationalUpdate(models.Model):
10051084
)
10061085
risk_security = models.ManyToManyField(RiskSecurity, blank=True, verbose_name=_("Risk Security"))
10071086
risk_security_concern = models.TextField(blank=True, null=True, verbose_name=_("Risk Security Concern"))
1087+
has_anti_fraud_corruption_policy = models.BooleanField(
1088+
verbose_name=_("Has anti-fraud and corruption policy"), null=True, blank=True
1089+
)
1090+
has_sexual_abuse_policy = models.BooleanField(
1091+
verbose_name=_("Has prevention of sexual exploitation and abuse policy"), null=True, blank=True
1092+
)
1093+
has_child_protection_policy = models.BooleanField(
1094+
verbose_name=_("Has child protection/child safeguarding policy"), null=True, blank=True
1095+
)
1096+
has_whistleblower_protection_policy = models.BooleanField(
1097+
verbose_name=_("Has whistleblower protection policy"), null=True, blank=True
1098+
)
1099+
has_anti_sexual_harassment_policy = models.BooleanField(
1100+
verbose_name=_("Has anti-sexual harassment policy"), null=True, blank=True
1101+
)
10081102
has_child_safeguarding_risk_analysis_assessment = models.BooleanField(
10091103
verbose_name=_("Has the child safeguarding risk analysis assessment been completed?"), null=True, blank=True
10101104
)
@@ -1040,6 +1134,12 @@ class DrefOperationalUpdate(models.Model):
10401134
verbose_name=_("human resource"),
10411135
help_text=_("how many volunteers and staff involved in the response?"),
10421136
)
1137+
is_volunteer_team_diverse = models.TextField(
1138+
blank=True,
1139+
null=True,
1140+
verbose_name=_("is volunteer team diverse"),
1141+
help_text=_("Does your volunteer team reflect the gender, age, and cultural diversity of the people you’re helping?"),
1142+
)
10431143
is_surge_personnel_deployed = models.BooleanField(blank=True, null=True, verbose_name=_("Is surge personnel deployed"))
10441144
surge_personnel_deployed = models.TextField(
10451145
blank=True, null=True, verbose_name=_("surge personnel deployed"), help_text=_("Will a Surge personnel be deployed?")
@@ -1171,6 +1271,18 @@ class DrefFinalReport(models.Model):
11711271
status = models.IntegerField(choices=Dref.Status.choices, verbose_name=_("status"), null=True, blank=True)
11721272
number_of_people_targeted = models.IntegerField(verbose_name=_("Number of people targeted"), blank=True, null=True)
11731273
number_of_people_affected = models.IntegerField(verbose_name=_("number of people affected"), blank=True, null=True)
1274+
estimated_number_of_affected_male = models.IntegerField(
1275+
verbose_name=_("estimated number of affected male"), blank=True, null=True
1276+
)
1277+
estimated_number_of_affected_female = models.IntegerField(
1278+
verbose_name=_("estimated number of affected female"), blank=True, null=True
1279+
)
1280+
estimated_number_of_affected_girls_under_18 = models.IntegerField(
1281+
verbose_name=_("estimated number of affected girls under 18"), blank=True, null=True
1282+
)
1283+
estimated_number_of_affected_boys_under_18 = models.IntegerField(
1284+
verbose_name=_("estimated number of affected boys under 18"), blank=True, null=True
1285+
)
11741286
total_dref_allocation = models.IntegerField(verbose_name=_("Total dref allocation"), null=True, blank=True)
11751287
date_of_publication = models.DateField(verbose_name=_("Date of publication"), blank=True, null=True)
11761288
total_operation_timeframe = models.IntegerField(verbose_name=_("Total Operation Timeframe"), null=True, blank=True)
@@ -1211,6 +1323,21 @@ class DrefFinalReport(models.Model):
12111323
national_society_contact_phone_number = models.CharField(
12121324
verbose_name=_("national society contact phone number"), max_length=100, null=True, blank=True
12131325
)
1326+
national_society_integrity_contact_name = models.CharField(
1327+
verbose_name=_("national society integrity contact name"), max_length=255, null=True, blank=True
1328+
)
1329+
national_society_integrity_contact_email = models.CharField(
1330+
verbose_name=_("national society integrity contact email"), max_length=255, null=True, blank=True
1331+
)
1332+
national_society_integrity_contact_title = models.CharField(
1333+
verbose_name=_("national society integrity contact title"), max_length=255, null=True, blank=True
1334+
)
1335+
national_society_integrity_contact_phone_number = models.CharField(
1336+
verbose_name=_("national society integrity contact phone number"), max_length=100, null=True, blank=True
1337+
)
1338+
national_society_hotline_phone_number = models.CharField(
1339+
verbose_name=_("national society hotline phone number"), max_length=100, null=True, blank=True
1340+
)
12141341
ifrc_emergency_name = models.CharField(verbose_name=_("ifrc emergency name"), max_length=255, null=True, blank=True)
12151342
ifrc_emergency_email = models.CharField(verbose_name=_("ifrc emergency email"), max_length=255, null=True, blank=True)
12161343
ifrc_emergency_title = models.CharField(verbose_name=_("ifrc emergency title"), max_length=255, null=True, blank=True)
@@ -1358,6 +1485,21 @@ class DrefFinalReport(models.Model):
13581485
verbose_name=_("Has the child safeguarding risk analysis assessment been completed?"), null=True, blank=True
13591486
)
13601487
risk_security_concern = models.TextField(blank=True, null=True, verbose_name=_("Risk Security Concern"))
1488+
has_anti_fraud_corruption_policy = models.BooleanField(
1489+
verbose_name=_("Has anti-fraud and corruption policy"), null=True, blank=True
1490+
)
1491+
has_sexual_abuse_policy = models.BooleanField(
1492+
verbose_name=_("Has prevention of sexual exploitation and abuse policy"), null=True, blank=True
1493+
)
1494+
has_child_protection_policy = models.BooleanField(
1495+
verbose_name=_("Has child protection/child safeguarding policy"), null=True, blank=True
1496+
)
1497+
has_whistleblower_protection_policy = models.BooleanField(
1498+
verbose_name=_("Has whistleblower protection policy"), null=True, blank=True
1499+
)
1500+
has_anti_sexual_harassment_policy = models.BooleanField(
1501+
verbose_name=_("Has anti-sexual harassment policy"), null=True, blank=True
1502+
)
13611503
event_date = models.DateField(
13621504
verbose_name=_("event date"), null=True, blank=True, help_text=_("Date of event/Approximate date of impact")
13631505
)

0 commit comments

Comments
 (0)