Skip to content

Commit 9153b9f

Browse files
committed
fix(dref): rename original_language field to starting_language
1 parent c4b29f0 commit 9153b9f

File tree

6 files changed

+97
-47
lines changed

6 files changed

+97
-47
lines changed

dref/admin.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ class DrefAdmin(CompareVersionAdmin, TranslationAdmin, admin.ModelAdmin):
9898
"risk_security",
9999
"proposed_action",
100100
)
101-
readonly_fields = ("original_language",)
101+
readonly_fields = ("starting_language",)
102102

103103
def get_queryset(self, request):
104104
return (
@@ -144,7 +144,7 @@ class DrefOperationalUpdateAdmin(CompareVersionAdmin, TranslationAdmin, admin.Mo
144144
"district",
145145
"risk_security",
146146
)
147-
readonly_fields = ("original_language",)
147+
readonly_fields = ("starting_language",)
148148
list_filter = ["dref"]
149149

150150
def get_queryset(self, request):
@@ -201,7 +201,7 @@ class DrefFinalReportAdmin(CompareVersionAdmin, TranslationAdmin, admin.ModelAdm
201201
"national_society_actions",
202202
"source_information",
203203
)
204-
readonly_fields = ("original_language",)
204+
readonly_fields = ("starting_language",)
205205
list_filter = ["dref"]
206206
search_fields = ["title", "national_society__name", "appeal_code"]
207207

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Generated by Django 4.2.19 on 2025-10-17 05:28
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('dref', '0086_alter_dref_status_alter_dreffinalreport_status_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.RenameField(
14+
model_name='dref',
15+
old_name='original_language',
16+
new_name='starting_language',
17+
),
18+
migrations.RenameField(
19+
model_name='dreffinalreport',
20+
old_name='original_language',
21+
new_name='starting_language',
22+
),
23+
migrations.RenameField(
24+
model_name='drefoperationalupdate',
25+
old_name='original_language',
26+
new_name='starting_language',
27+
)
28+
]

dref/models.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -334,10 +334,10 @@ class Status(models.IntegerChoices):
334334
related_name="dref_targeting_strategy_support_file",
335335
)
336336
status = models.IntegerField(choices=Status.choices, verbose_name=_("status"), default=Status.DRAFT)
337-
original_language = models.CharField(
337+
starting_language = models.CharField(
338338
blank=True,
339339
null=True,
340-
verbose_name=_("Original language"),
340+
verbose_name=_("Starting language"),
341341
help_text="The language in which this record was first created.",
342342
) # NOTE: This field is set at creation with the active language.
343343
num_assisted = models.IntegerField(verbose_name=_("number of assisted"), blank=True, null=True)
@@ -864,10 +864,10 @@ class DrefOperationalUpdate(models.Model):
864864
choices=Dref.DisasterCategory.choices, verbose_name=_("disaster category"), null=True, blank=True
865865
)
866866
status = models.IntegerField(choices=Dref.Status.choices, verbose_name=_("status"), default=Dref.Status.DRAFT)
867-
original_language = models.CharField(
867+
starting_language = models.CharField(
868868
blank=True,
869869
null=True,
870-
verbose_name=_("Original language"),
870+
verbose_name=_("Starting language"),
871871
help_text="The language in which this record was first created.",
872872
) # NOTE: This field is set at creation with the active language.
873873
number_of_people_targeted = models.IntegerField(verbose_name=_("Number of people targeted"), blank=True, null=True)
@@ -1303,10 +1303,10 @@ class DrefFinalReport(models.Model):
13031303
choices=Dref.DisasterCategory.choices, verbose_name=_("disaster category"), null=True, blank=True
13041304
)
13051305
status = models.IntegerField(choices=Dref.Status.choices, verbose_name=_("status"), default=Dref.Status.DRAFT)
1306-
original_language = models.CharField(
1306+
starting_language = models.CharField(
13071307
blank=True,
13081308
null=True,
1309-
verbose_name=_("Original language"),
1309+
verbose_name=_("Starting language"),
13101310
help_text="The language in which this record was first created.",
13111311
) # NOTE: This field is set at creation with the active language.
13121312
number_of_people_targeted = models.IntegerField(verbose_name=_("Number of people targeted"), blank=True, null=True)

dref/serializers.py

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ class MiniDrefSerializer(serializers.ModelSerializer):
205205
unpublished_final_report_count = serializers.SerializerMethodField()
206206
operational_update_details = serializers.SerializerMethodField()
207207
final_report_details = serializers.SerializerMethodField()
208-
original_language = serializers.CharField(read_only=True)
208+
starting_language = serializers.CharField(read_only=True)
209209

210210
class Meta:
211211
model = Dref
@@ -236,7 +236,7 @@ class Meta:
236236
"status",
237237
"status_display",
238238
"date_of_approval",
239-
"original_language",
239+
"starting_language",
240240
]
241241

242242
@extend_schema_field(MiniOperationalUpdateActiveSerializer(many=True))
@@ -435,7 +435,7 @@ class Meta:
435435
"created_by",
436436
"budget_file_preview",
437437
"is_dref_imminent_v2",
438-
"original_language",
438+
"starting_language",
439439
)
440440
exclude = (
441441
"cover_image",
@@ -614,7 +614,7 @@ def validate_budget_file_preview(self, budget_file_preview):
614614

615615
def create(self, validated_data):
616616
current_language = get_language()
617-
validated_data["original_language"] = current_language
617+
validated_data["starting_language"] = current_language
618618
validated_data["created_by"] = self.context["request"].user
619619
validated_data["is_active"] = True
620620
type_of_dref = validated_data.get("type_of_dref")
@@ -651,7 +651,6 @@ def create(self, validated_data):
651651
to = {u.email for u in validated_data["users"]}
652652
else:
653653
to = None
654-
# set original language
655654
dref = super().create(validated_data)
656655
if to:
657656
transaction.on_commit(lambda: send_dref_email.delay(dref.id, list(to), "New"))
@@ -789,10 +788,18 @@ def validate_images_file(self, images):
789788

790789
def create(self, validated_data):
791790
dref = validated_data["dref"]
792-
language = validated_data.get("original_language")
793-
if language != dref.original_language and language != dref.translation_module_original_language:
791+
current_language = get_language()
792+
valid_languages = [dref.starting_language, dref.translation_module_original_language]
793+
# Check request language
794+
if current_language not in valid_languages:
795+
raise serializers.ValidationError(
796+
gettext(f"Language must be either '{valid_languages[0]}' or '{valid_languages[1]}'.")
797+
)
798+
# Check payload language
799+
language = validated_data.get("starting_language")
800+
if language not in valid_languages:
794801
raise serializers.ValidationError(
795-
gettext(f"Language must be either '{dref.original_language}' or '{dref.translation_module_original_language}'.")
802+
gettext(f"Language must be either '{valid_languages[0]}' or '{valid_languages[1]}'.")
796803
)
797804
dref_operational_update = DrefOperationalUpdate.objects.filter(dref=dref).order_by("-operational_update_number").first()
798805
validated_data["created_by"] = self.context["request"].user
@@ -1240,10 +1247,19 @@ def create(self, validated_data):
12401247
# if yes copy from the latest operational update
12411248
# else copy from dref
12421249
dref = validated_data["dref"]
1243-
language = validated_data.get("original_language")
1244-
if language != dref.original_language and language != dref.translation_module_original_language:
1250+
current_language = get_language()
1251+
valid_languages = [dref.starting_language, dref.translation_module_original_language]
1252+
# Check request language
1253+
if current_language not in valid_languages:
1254+
raise serializers.ValidationError(
1255+
gettext(f"Language must be either '{valid_languages[0]}' or '{valid_languages[1]}'.")
1256+
)
1257+
1258+
# Check payload language
1259+
language = validated_data.get("starting_language")
1260+
if language not in valid_languages:
12451261
raise serializers.ValidationError(
1246-
gettext(f"Language must be either '{dref.original_language}' or '{dref.translation_module_original_language}'.")
1262+
gettext(f"Language must be either '{valid_languages[0]}' or '{valid_languages[1]}'.")
12471263
)
12481264
dref_operational_update = (
12491265
DrefOperationalUpdate.objects.filter(dref=dref, status=Dref.Status.APPROVED)
@@ -1548,7 +1564,7 @@ class CompletedDrefOperationsSerializer(serializers.ModelSerializer):
15481564
status_display = serializers.CharField(source="get_status_display", read_only=True)
15491565
application_type = serializers.SerializerMethodField()
15501566
application_type_display = serializers.SerializerMethodField()
1551-
original_language = serializers.CharField(read_only=True)
1567+
starting_language = serializers.CharField(read_only=True)
15521568

15531569
class Meta:
15541570
model = DrefFinalReport
@@ -1566,7 +1582,7 @@ class Meta:
15661582
"dref",
15671583
"status",
15681584
"status_display",
1569-
"original_language",
1585+
"starting_language",
15701586
)
15711587

15721588
def get_application_type(self, obj) -> str:

dref/test_views.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -954,7 +954,7 @@ def test_dref_create_and_update_in_local_language(
954954
"national_society": national_society.id,
955955
"disaster_type": disaster_type.id,
956956
"needs_identified": [{"title": "shelter_housing_and_settlements", "description": "hola"}],
957-
"original_language": "es",
957+
"starting_language": "es",
958958
"planned_interventions": [
959959
{
960960
"title": "shelter_housing_and_settlements",
@@ -978,7 +978,7 @@ def test_dref_create_and_update_in_local_language(
978978
self.client.force_authenticate(self.user)
979979
response = self.client.post(url, data, format="json", HTTP_ACCEPT_LANGUAGE="es")
980980
self.assertEqual(response.status_code, 201)
981-
self.assertEqual(response.data["original_language"], "es")
981+
self.assertEqual(response.data["starting_language"], "es")
982982
self.assertEqual(response.data["translation_module_original_language"], "es")
983983
self.assertEqual(response.data["title"], "Prueba de título Dref")
984984
# Test update
@@ -1101,19 +1101,19 @@ def test_create_and_update_operational_update(self):
11011101
title="Test Title",
11021102
created_by=user1,
11031103
status=Dref.Status.DRAFT,
1104-
original_language="en",
1104+
starting_language="en",
11051105
)
11061106
dref2 = DrefFactory.create(
11071107
title="Título en español",
11081108
created_by=user1,
11091109
status=Dref.Status.APPROVED,
1110-
original_language="es",
1110+
starting_language="fr",
11111111
)
11121112
dref3 = DrefFactory.create(
11131113
title="Titre en français",
11141114
created_by=user1,
11151115
status=Dref.Status.APPROVED,
1116-
original_language="fr",
1116+
starting_language="fr",
11171117
)
11181118
ops_update_data = {
11191119
"dref": dref.id,
@@ -1124,13 +1124,13 @@ def test_create_and_update_operational_update(self):
11241124
"dref": dref2.id,
11251125
"country": self.country.id,
11261126
"district": [self.district.id],
1127-
"original_language": "fr",
1127+
"starting_language": "es",
11281128
}
11291129
ops_update_data3 = {
11301130
"dref": dref3.id,
11311131
"country": self.country.id,
11321132
"district": [self.district.id],
1133-
"original_language": "fr",
1133+
"starting_language": "fr",
11341134
}
11351135

11361136
self.authenticate(user1)
@@ -1154,15 +1154,15 @@ def test_create_and_update_operational_update(self):
11541154
data_ar = {
11551155
"title": "العنوان بالعربية",
11561156
"modified_at": datetime.now(),
1157-
"original_language": "ar",
1157+
"starting_language": "ar",
11581158
}
11591159
response = self.client.patch(update_url, data=data_ar, HTTP_ACCEPT_LANGUAGE="ar")
11601160
self.assert_400(response)
11611161
# Update in Spanish
11621162
data_es = {
11631163
"title": "Título en español",
11641164
"modified_at": datetime.now(),
1165-
"original_language": "es",
1165+
"starting_language": "es",
11661166
}
11671167
response = self.client.patch(update_url, data=data_es, HTTP_ACCEPT_LANGUAGE="es")
11681168
self.assert_400(response)
@@ -1171,7 +1171,7 @@ def test_create_and_update_operational_update(self):
11711171
data_en = {
11721172
"title": "Updated title in English",
11731173
"modified_at": datetime.now(),
1174-
"original_language": "en",
1174+
"starting_language": "en",
11751175
}
11761176
response = self.client.patch(update_url, data=data_en, HTTP_ACCEPT_LANGUAGE="en")
11771177
self.assert_400(response)
@@ -1180,7 +1180,7 @@ def test_create_and_update_operational_update(self):
11801180
data_fr = {
11811181
"title": "Titre en français",
11821182
"modified_at": datetime.now(),
1183-
"original_language": "fr",
1183+
"starting_language": "fr",
11841184
}
11851185
response = self.client.patch(update_url, data=data_fr, HTTP_ACCEPT_LANGUAGE="fr")
11861186
self.assert_200(response)
@@ -2177,27 +2177,27 @@ def test_create_and_update_final_report(self):
21772177
created_by=self.user,
21782178
status=Dref.Status.DRAFT,
21792179
type_of_dref=Dref.DrefType.ASSESSMENT,
2180-
original_language="en",
2180+
starting_language="en",
21812181
)
21822182
dref2 = DrefFactory.create(
21832183
title="لعنوان بالعربية",
21842184
created_by=self.user,
21852185
status=Dref.Status.APPROVED,
21862186
type_of_dref=Dref.DrefType.IMMINENT,
2187-
original_language="ar",
2187+
starting_language="ar",
21882188
)
21892189
dref3 = DrefFactory.create(
21902190
title="Título en español",
21912191
created_by=self.user,
21922192
status=Dref.Status.APPROVED,
21932193
type_of_dref=Dref.DrefType.IMMINENT,
2194-
original_language="es",
2194+
starting_language="es",
21952195
)
21962196
dref.users.add(user1)
21972197
url = "/api/v2/dref-final-report/"
21982198
data2 = {
21992199
"dref": dref2.id,
2200-
"original_language": "fr",
2200+
"starting_language": "fr",
22012201
}
22022202

22032203
self.authenticate(self.user)
@@ -2206,40 +2206,40 @@ def test_create_and_update_final_report(self):
22062206

22072207
url = "/api/v2/dref-final-report/"
22082208
# Test create final report for draft dref status
2209-
data1 = {"dref": dref.id, "original_language": "en"}
2209+
data1 = {"dref": dref.id, "starting_language": "en"}
22102210
response = self.client.post(url, data=data1)
22112211
self.assert_400(response)
22122212

22132213
# Test create final report with original language other than dref original language
2214-
data2 = {"dref": dref2.id, "original_language": "es"}
2214+
data2 = {"dref": dref2.id, "starting_language": "es"}
22152215
response = self.client.post(url, data=data2)
22162216
self.assert_400(response)
22172217

22182218
# Test create final report with approved dref status and matching with dref original language
2219-
data3 = {"dref": dref3.id, "original_language": "es"}
2219+
data3 = {"dref": dref3.id, "starting_language": "es"}
22202220
response = self.client.post(url, data=data3, HTTP_ACCEPT_LANGUAGE="es")
22212221
self.assert_201(response)
22222222
self.assertEqual(response.data["translation_module_original_language"], "es")
22232223
final_report_id = response.data["id"]
22242224

22252225
# Test Update
22262226
update_url = f"/api/v2/dref-final-report/{final_report_id}/"
2227-
data_ar = {"title": "العنوان بالعربية", "modified_at": datetime.now(), "original_language": "ar"}
2227+
data_ar = {"title": "العنوان بالعربية", "modified_at": datetime.now(), "starting_language": "ar"}
22282228
response = self.client.patch(update_url, data=data_ar, HTTP_ACCEPT_LANGUAGE="ar")
22292229
self.assert_400(response)
22302230

22312231
# Update in English
2232-
data_en = {"title": "Updated title in English", "modified_at": datetime.now(), "original_language": "en"}
2232+
data_en = {"title": "Updated title in English", "modified_at": datetime.now(), "starting_language": "en"}
22332233
response = self.client.patch(update_url, data=data_en, HTTP_ACCEPT_LANGUAGE="en")
22342234
self.assert_400(response)
22352235

22362236
# Update in French
2237-
data_fr = {"title": "Titre en français", "modified_at": datetime.now(), "original_language": "ar"}
2237+
data_fr = {"title": "Titre en français", "modified_at": datetime.now(), "starting_language": "ar"}
22382238
response = self.client.patch(update_url, data=data_fr, HTTP_ACCEPT_LANGUAGE="ar")
22392239
self.assert_400(response)
22402240

22412241
# Update in Spanish (original language)
2242-
data_es = {"title": "Título en español", "modified_at": datetime.now(), "original_language": "es"}
2242+
data_es = {"title": "Título en español", "modified_at": datetime.now(), "starting_language": "es"}
22432243
response = self.client.patch(update_url, data=data_es, HTTP_ACCEPT_LANGUAGE="es")
22442244
self.assert_200(response)
22452245
self.assertEqual(response.data["translation_module_original_language"], "es")

0 commit comments

Comments
 (0)