Skip to content

Commit 9f891f4

Browse files
Merge pull request #1540 from IFRCGo/feature/dref-emails-1538
Add notification sending to DREF creation/update
2 parents 3200039 + 834d1b9 commit 9f891f4

File tree

8 files changed

+615
-114
lines changed

8 files changed

+615
-114
lines changed

deployments/snapshots/snap_tests.py

Lines changed: 112 additions & 106 deletions
Large diffs are not rendered by default.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# Generated by Django 3.2.15 on 2022-09-29 07:39
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+
('dref', '0038_auto_20220915_1520'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='dref',
16+
name='field_report',
17+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='field_report_dref', to='api.fieldreport', verbose_name='field report'),
18+
),
19+
migrations.RenameField(
20+
model_name='drefoperationalupdate',
21+
old_name='has_forcasted_event_materialize',
22+
new_name='has_forecasted_event_materialize',
23+
),
24+
migrations.AlterField(
25+
model_name='drefoperationalupdate',
26+
name='has_forecasted_event_materialize',
27+
field=models.BooleanField(blank=True, null=True, verbose_name='Has Forecasted Event Materialize'),
28+
),
29+
]

dref/models.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,6 @@ def get_image_map(title, request):
198198
PlannedIntervention.Title.MULTI_PURPOSE_CASH: 'cash.png',
199199
PlannedIntervention.Title.ENVIRONMENTAL_SUSTAINABILITY: 'environment.png',
200200
PlannedIntervention.Title.COMMUNITY_ENGAGEMENT_AND_ACCOUNTABILITY: 'participation_team.png',
201-
PlannedIntervention.Title.MULTI_PURPOSE_CASH: 'cash.png'
202201
}
203202
return request.build_absolute_uri(static(os.path.join('images/dref', title_static_map[title])))
204203

@@ -243,7 +242,7 @@ class Status(models.IntegerChoices):
243242
)
244243
field_report = models.ForeignKey(
245244
FieldReport, verbose_name=_('field report'),
246-
on_delete=models.SET_NULL, null=True,
245+
on_delete=models.SET_NULL, null=True, blank=True,
247246
related_name='field_report_dref'
248247
)
249248
title = models.CharField(verbose_name=_('title'), max_length=255)
@@ -1076,8 +1075,8 @@ class DrefOperationalUpdate(models.Model):
10761075
blank=True, null=True,
10771076
verbose_name=_('Risk Security Concern')
10781077
)
1079-
has_forcasted_event_materialize = models.BooleanField(
1080-
verbose_name=_('Has Forcasted Event Materialize'),
1078+
has_forecasted_event_materialize = models.BooleanField(
1079+
verbose_name=_('Has Forecasted Event Materialize'),
10811080
null=True, blank=True
10821081
)
10831082
anticipatory_to_response = models.TextField(

dref/serializers.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import datetime
33

44
from django.utils.translation import gettext
5-
from django.db import models
5+
from django.db import models, transaction
66

77
from rest_framework import serializers
88

@@ -34,6 +34,8 @@
3434
from dref.imminent_utils import extract_imminent_file
3535
from dref.assessment_utils import extract_assessment_file
3636

37+
from .tasks import send_dref_email
38+
3739

3840
class RiskSecuritySerializer(ModelSerializer):
3941
class Meta:
@@ -160,7 +162,7 @@ def create(self, validated_data):
160162
created_by = self.context['request'].user
161163
dref = extract_assessment_file(file, created_by)
162164
if not dref:
163-
raise serializers.ValidationError(ugettext('Can\'t dref from supplied data'))
165+
raise serializers.ValidationError(gettext('Can\'t dref from supplied data'))
164166
validated_data['dref'] = dref
165167
return super().create(validated_data)
166168

@@ -422,7 +424,11 @@ def create(self, validated_data):
422424
dref_assessment_report = super().create(validated_data)
423425
dref_assessment_report.needs_identified.clear()
424426
return dref_assessment_report
425-
return super().create(validated_data)
427+
dref = super().create(validated_data)
428+
transaction.on_commit(
429+
lambda: send_dref_email.delay(dref.id)
430+
)
431+
return dref
426432

427433
def update(self, instance, validated_data):
428434
validated_data['modified_by'] = self.context['request'].user
@@ -452,7 +458,11 @@ def update(self, instance, validated_data):
452458
dref_assessment_report = super().update(instance, validated_data)
453459
dref_assessment_report.needs_identified.clear()
454460
return dref_assessment_report
455-
return super().update(instance, validated_data)
461+
dref = super().update(instance, validated_data)
462+
transaction.on_commit(
463+
lambda: send_dref_email.delay(dref.id)
464+
)
465+
return dref
456466

457467

458468
class DrefOperationalUpdateSerializer(

dref/tasks.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from celery import shared_task
2+
from django.template.loader import render_to_string
3+
from notifications.notification import send_notification
4+
from .models import Dref
5+
from .utils import get_email_context
6+
7+
8+
@shared_task
9+
def send_dref_email(dref_id):
10+
instance = Dref.objects.get(id=dref_id)
11+
email_context = get_email_context(instance)
12+
users_emails = [t.email for t in instance.users.iterator()]
13+
if users_emails:
14+
send_notification(
15+
f'Flash Update: {instance.title}',
16+
users_emails,
17+
render_to_string('email/dref/dref.html', email_context),
18+
'New DREF'
19+
)
20+
return email_context

dref/utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,3 +509,13 @@ def f(r, c, i=0, as_list=False):
509509
dref.national_society_actions.add(*national_societies)
510510
dref.risk_security.add(*risk_security_list)
511511
return dref
512+
513+
514+
def get_email_context(instance):
515+
from dref.serializers import DrefSerializer
516+
517+
dref_data = DrefSerializer(instance).data
518+
email_context = {
519+
'title': dref_data['title'],
520+
}
521+
return email_context
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{% include "email/dref/head.html" %}
2+
3+
<table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#ffffff">
4+
<tr>
5+
<td align="center" class="pb-30" style="padding-bottom:30px;">
6+
You have been added to a DREF Application "DREF Tittle" (with an hyperlink to the application, http://localhost:3000/dref-application/X/edit/
7+
</td>
8+
</tr>
9+
</table>
10+
11+
{% include "design/foot1.html" %}

0 commit comments

Comments
 (0)