Skip to content

Commit fea4344

Browse files
authored
Merge pull request #2592 from IFRCGo/feat/add-simplified-eap-to-global-pdf-export
Add simplified eap to global pdf export
2 parents 5491784 + 844b74c commit fea4344

5 files changed

Lines changed: 90 additions & 0 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 4.2.19 on 2025-11-18 05:22
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('api', '0226_nsdinitiativescategory_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='export',
15+
name='export_type',
16+
field=models.CharField(choices=[('dref-applications', 'DREF Application'), ('dref-operational-updates', 'DREF Operational Update'), ('dref-final-reports', 'DREF Final Report'), ('old-dref-final-reports', 'Old DREF Final Report'), ('per', 'Per'), ('simplified-eap', 'Simplified EAP')], max_length=255, verbose_name='Export Type'),
17+
),
18+
]

api/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2560,6 +2560,7 @@ class ExportType(models.TextChoices):
25602560
FINAL_REPORT = "dref-final-reports", _("DREF Final Report")
25612561
OLD_FINAL_REPORT = "old-dref-final-reports", _("Old DREF Final Report")
25622562
PER = "per", _("Per")
2563+
SIMPLIFIED_EAP = "simplified-eap", _("Simplified EAP")
25632564

25642565
export_id = models.IntegerField(verbose_name=_("Export Id"))
25652566
export_type = models.CharField(verbose_name=_("Export Type"), max_length=255, choices=ExportType.choices)

api/serializers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from api.utils import CountryValidator, RegionValidator
1616
from deployments.models import EmergencyProject, Personnel, PersonnelDeployment
1717
from dref.models import Dref, DrefFinalReport, DrefOperationalUpdate
18+
from eap.models import SimplifiedEAP
1819
from lang.models import String
1920
from lang.serializers import ModelSerializer
2021
from local_units.models import DelegationOffice
@@ -2566,6 +2567,11 @@ def create(self, validated_data):
25662567
elif export_type == Export.ExportType.PER:
25672568
overview = Overview.objects.filter(id=export_id).first()
25682569
title = f"{overview.country.name}-preparedness-{overview.get_phase_display()}"
2570+
elif export_type == Export.ExportType.SIMPLIFIED_EAP:
2571+
simplified_eap = SimplifiedEAP.objects.filter(id=export_id).first()
2572+
title = (
2573+
f"{simplified_eap.eap_registration.national_society.name}-{simplified_eap.eap_registration.disaster_type.name}"
2574+
)
25692575
else:
25702576
title = "Export"
25712577
user = self.context["request"].user

api/tasks.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ def generate_url(url, export_id, user, title):
104104
page.wait_for_selector("#pdf-preview-ready", state="attached", timeout=timeout)
105105
if export.export_type == Export.ExportType.PER:
106106
file_name = f'PER {title} ({datetime.now().strftime("%Y-%m-%d %H-%M-%S")}).pdf'
107+
elif export.export_type == Export.ExportType.SIMPLIFIED_EAP:
108+
file_name = f'SIMPLIFIED EAP {title} ({datetime.now().strftime("%Y-%m-%d %H-%M-%S")}).pdf'
107109
else:
108110
file_name = f'DREF {title} ({datetime.now().strftime("%Y-%m-%d %H-%M-%S")}).pdf'
109111
file = ContentFile(

eap/test_views.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import os
22
import tempfile
3+
from unittest import mock
34

45
from django.conf import settings
56
from django.contrib.auth.models import Group, Permission
67
from django.core import management
78

89
from api.factories.country import CountryFactory
910
from api.factories.disaster_type import DisasterTypeFactory
11+
from api.models import Export
1012
from deployments.factories.user import UserFactory
1113
from eap.factories import (
1214
EAPRegistrationFactory,
@@ -1151,3 +1153,64 @@ def test_status_transition(self):
11511153
# Check is the activated timeline is added
11521154
self.eap_registration.refresh_from_db()
11531155
self.assertIsNotNone(self.eap_registration.activated_at)
1156+
1157+
1158+
class TestSimplifiedEapPdfExport(APITestCase):
1159+
def setUp(self):
1160+
super().setUp()
1161+
self.country = CountryFactory.create(name="country1", iso3="XXX")
1162+
self.national_society = CountryFactory.create(name="national_society1", iso3="YYY")
1163+
self.disaster_type = DisasterTypeFactory.create(name="disaster1")
1164+
self.partner1 = CountryFactory.create(name="partner1", iso3="ZZZ")
1165+
self.partner2 = CountryFactory.create(name="partner2", iso3="AAA")
1166+
1167+
self.user = UserFactory.create()
1168+
1169+
self.eap_registration = EAPRegistrationFactory.create(
1170+
eap_type=EAPType.SIMPLIFIED_EAP,
1171+
country=self.country,
1172+
national_society=self.national_society,
1173+
disaster_type=self.disaster_type,
1174+
partners=[self.partner1.id, self.partner2.id],
1175+
created_by=self.user,
1176+
modified_by=self.user,
1177+
)
1178+
1179+
self.simplified_eap = SimplifiedEAPFactory.create(
1180+
eap_registration=self.eap_registration,
1181+
created_by=self.user,
1182+
modified_by=self.user,
1183+
national_society_contact_title="NS Title Example",
1184+
)
1185+
self.url = "/api/v2/pdf-export/"
1186+
1187+
@mock.patch("api.serializers.generate_url.delay")
1188+
def test_create_simplified_eap_export(self, mock_generate_url):
1189+
data = {
1190+
"export_type": Export.ExportType.SIMPLIFIED_EAP,
1191+
"export_id": self.simplified_eap.id,
1192+
"is_pga": False,
1193+
}
1194+
1195+
self.authenticate(self.user)
1196+
1197+
with self.capture_on_commit_callbacks(execute=True):
1198+
response = self.client.post(self.url, data, format="json")
1199+
self.assert_201(response)
1200+
export = Export.objects.first()
1201+
self.assertIsNotNone(export)
1202+
1203+
expected_url = (
1204+
f"{settings.GO_WEB_INTERNAL_URL}/" f"{Export.ExportType.SIMPLIFIED_EAP}/" f"{self.simplified_eap.id}/export/"
1205+
)
1206+
self.assertEqual(export.url, expected_url)
1207+
self.assertEqual(response.data["status"], Export.ExportStatus.PENDING)
1208+
1209+
self.assertEqual(mock_generate_url.called, True)
1210+
title = f"{self.national_society.name}-{self.disaster_type.name}"
1211+
mock_generate_url.assert_called_once_with(
1212+
export.url,
1213+
export.id,
1214+
self.user.id,
1215+
title,
1216+
)

0 commit comments

Comments
 (0)