From eb5a93b1169696af96f263bc0653a01893cf5337 Mon Sep 17 00:00:00 2001 From: Kelly Innes Date: Mon, 17 Jun 2019 14:48:18 -0400 Subject: [PATCH] Email list contributors about facility claims - email list contributors when a facility claim is approved - email list contributors when an approved facility claim's profile details have been updated --- src/django/api/mail.py | 72 +++++++++++++++++++ ...acility_claim_contributor_notice_body.html | 32 +++++++++ ...facility_claim_contributor_notice_body.txt | 12 ++++ ...ility_claim_contributor_notice_subject.txt | 1 + ...rofile_update_contributor_notice_body.html | 33 +++++++++ ...profile_update_contributor_notice_body.txt | 12 ++++ ...file_update_contributor_notice_subject.txt | 1 + src/django/api/tests.py | 35 ++++++++- src/django/api/views.py | 10 ++- 9 files changed, 203 insertions(+), 5 deletions(-) create mode 100644 src/django/api/templates/mail/approved_facility_claim_contributor_notice_body.html create mode 100644 src/django/api/templates/mail/approved_facility_claim_contributor_notice_body.txt create mode 100644 src/django/api/templates/mail/approved_facility_claim_contributor_notice_subject.txt create mode 100644 src/django/api/templates/mail/facility_claim_profile_update_contributor_notice_body.html create mode 100644 src/django/api/templates/mail/facility_claim_profile_update_contributor_notice_body.txt create mode 100644 src/django/api/templates/mail/facility_claim_profile_update_contributor_notice_subject.txt diff --git a/src/django/api/mail.py b/src/django/api/mail.py index cac6d8e33..02cd2f3e7 100644 --- a/src/django/api/mail.py +++ b/src/django/api/mail.py @@ -107,3 +107,75 @@ def send_claim_facility_revocation_email(request, facility_claim): [facility_claim.email], html_message=html_template.render(revocation_dictionary) ) + + +def send_approved_claim_notice_to_one_contributor(request, claim, contributor): + subj_template = get_template( + 'mail/approved_facility_claim_contributor_notice_subject.txt') + text_template = get_template( + 'mail/approved_facility_claim_contributor_notice_body.txt') + html_template = get_template( + 'mail/approved_facility_claim_contributor_notice_body.html') + + notice_dictionary = { + 'facility_name': claim.facility.name, + 'facility_address': claim.facility.address, + 'facility_url': make_facility_url(request, claim.facility), + } + + send_mail( + subj_template.render().rstrip(), + text_template.render(notice_dictionary), + settings.DEFAULT_FROM_EMAIL, + [contributor.admin.email], + html_message=html_template.render(notice_dictionary) + ) + + +def send_approved_claim_notice_to_list_contributors(request, facility_claim): + list_contributors = [ + list_item.facility_list.contributor + for list_item in + facility_claim.facility.facilitylistitem_set.all() + ] + + for contributor in list_contributors: + send_approved_claim_notice_to_one_contributor(request, + facility_claim, + contributor) + + +def send_claim_update_note_to_one_contributor(request, claim, contributor): + subj_template = get_template( + 'mail/facility_claim_profile_update_contributor_notice_subject.txt') + text_template = get_template( + 'mail/facility_claim_profile_update_contributor_notice_body.txt') + html_template = get_template( + 'mail/facility_claim_profile_update_contributor_notice_body.html') + + notice_dictionary = { + 'facility_name': claim.facility.name, + 'facility_address': claim.facility.address, + 'facility_url': make_facility_url(request, claim.facility), + } + + send_mail( + subj_template.render().rstrip(), + text_template.render(notice_dictionary), + settings.DEFAULT_FROM_EMAIL, + [contributor.admin.email], + html_message=html_template.render(notice_dictionary) + ) + + +def send_claim_update_notice_to_list_contributors(request, facility_claim): + list_contributors = [ + list_item.facility_list.contributor + for list_item in + facility_claim.facility.facilitylistitem_set.all() + ] + + for contributor in list_contributors: + send_claim_update_note_to_one_contributor(request, + facility_claim, + contributor) diff --git a/src/django/api/templates/mail/approved_facility_claim_contributor_notice_body.html b/src/django/api/templates/mail/approved_facility_claim_contributor_notice_body.html new file mode 100644 index 000000000..e1f1e8dc7 --- /dev/null +++ b/src/django/api/templates/mail/approved_facility_claim_contributor_notice_body.html @@ -0,0 +1,32 @@ + + + + + An OAR facility on one of your facility lists has been claimed + + + +

+ Hi, +

+

+ You're receiving this email because we approved a facility claim + for a facility appearing on one of your facility lists. +

+

+ The facility is: +

+ +

+ Sincerely, +

+ {% include "mail/signature_block.html" %} + + diff --git a/src/django/api/templates/mail/approved_facility_claim_contributor_notice_body.txt b/src/django/api/templates/mail/approved_facility_claim_contributor_notice_body.txt new file mode 100644 index 000000000..a9301ba3b --- /dev/null +++ b/src/django/api/templates/mail/approved_facility_claim_contributor_notice_body.txt @@ -0,0 +1,12 @@ +Hi, + +You're receiving this email because we approved a facility claim for a facility +appearing on one of your facility lists. + +The facility is: + + - Facility: {{ facility_name }}, {{ facility_address }} + - Facility URL: {{ facility_url }} + +Sincerely, +{% include "mail/signature_block.txt" %} diff --git a/src/django/api/templates/mail/approved_facility_claim_contributor_notice_subject.txt b/src/django/api/templates/mail/approved_facility_claim_contributor_notice_subject.txt new file mode 100644 index 000000000..2a067d1ef --- /dev/null +++ b/src/django/api/templates/mail/approved_facility_claim_contributor_notice_subject.txt @@ -0,0 +1 @@ +An OAR facility on one of your facility lists has been claimed diff --git a/src/django/api/templates/mail/facility_claim_profile_update_contributor_notice_body.html b/src/django/api/templates/mail/facility_claim_profile_update_contributor_notice_body.html new file mode 100644 index 000000000..02383c0ba --- /dev/null +++ b/src/django/api/templates/mail/facility_claim_profile_update_contributor_notice_body.html @@ -0,0 +1,33 @@ + + + + + An OAR facility on one of your facility lists has had its + facility claim data updated + + + +

+ Hi, +

+

+ You're receiving this email because a facility on one of your + facility lists has had its facility claim data updated. +

+

+ The facility is: +

+ +

+ Sincerely, +

+ {% include "mail/signature_block.html" %} + + diff --git a/src/django/api/templates/mail/facility_claim_profile_update_contributor_notice_body.txt b/src/django/api/templates/mail/facility_claim_profile_update_contributor_notice_body.txt new file mode 100644 index 000000000..d11f91841 --- /dev/null +++ b/src/django/api/templates/mail/facility_claim_profile_update_contributor_notice_body.txt @@ -0,0 +1,12 @@ +Hi, + +You're receiving this email because a facility on one of your facility lists +has had its facility claim data updated. + +The facility is: + + - Facility: {{ facility_name }}, {{ facility_address }} + - Facility URL: {{ facility_url }} + +Sincerely, +{% include "mail/signature_block.txt" %} diff --git a/src/django/api/templates/mail/facility_claim_profile_update_contributor_notice_subject.txt b/src/django/api/templates/mail/facility_claim_profile_update_contributor_notice_subject.txt new file mode 100644 index 000000000..3656c596a --- /dev/null +++ b/src/django/api/templates/mail/facility_claim_profile_update_contributor_notice_subject.txt @@ -0,0 +1 @@ +An OAR facility on one of your facility lists has had its facility claim data updated diff --git a/src/django/api/tests.py b/src/django/api/tests.py index 1546352ec..b8f4e2203 100644 --- a/src/django/api/tests.py +++ b/src/django/api/tests.py @@ -1396,7 +1396,7 @@ def test_approve_facility_claim(self): ) self.assertEqual(200, response.status_code) - self.assertEqual(len(mail.outbox), 1) + self.assertEqual(len(mail.outbox), 2) updated_facility_claim = FacilityClaim \ .objects \ @@ -1581,7 +1581,7 @@ def setUp(self): name='test contributor', contrib_type=Contributor.OTHER_CONTRIB_TYPE) - self.list = FacilityList \ + self.facility_list = FacilityList \ .objects \ .create(header="header", file_name="one", @@ -1595,7 +1595,7 @@ def setUp(self): .create(name='Item', address='Address', country_code='US', - facility_list=self.list, + facility_list=self.facility_list, row_index=1, status=FacilityListItem.CONFIRMED_MATCH) @@ -1686,6 +1686,35 @@ def test_approved_facility_claim_info_is_in_details_response(self): self.assertEqual(response_data['description'], 'new_description') + @override_switch('claim_a_facility', active=True) + def test_updating_claim_profile_sends_email_to_contributor(self): + self.assertEqual(len(mail.outbox), 0) + self.facility_claim.status = FacilityClaim.APPROVED + self.facility_claim.save() + + response = self.client.put( + '/api/facility-claims/{}/claimed/'.format(self.facility_claim.id), + { + 'facility_description': 'test_facility_description', + 'facility_phone_number_publicly_visible': False, + 'point_of_contact_publicly_visible': False, + 'office_info_publicly_visible': False, + } + ) + + self.assertEqual(len(mail.outbox), 1) + self.assertEqual(200, response.status_code) + + updated_description = FacilityClaim \ + .objects \ + .get(pk=self.facility_claim.id) \ + .facility_description + + self.assertEqual( + updated_description, + 'test_facility_descripton', + ) + @override_switch('claim_a_facility', active=True) def test_non_visible_facility_phone_is_not_in_details_response(self): self.facility_claim.status = FacilityClaim.APPROVED diff --git a/src/django/api/views.py b/src/django/api/views.py index c446330fc..021c3c2b4 100644 --- a/src/django/api/views.py +++ b/src/django/api/views.py @@ -70,7 +70,9 @@ from api.mail import (send_claim_facility_confirmation_email, send_claim_facility_approval_email, send_claim_facility_denial_email, - send_claim_facility_revocation_email) + send_claim_facility_revocation_email, + send_approved_claim_notice_to_list_contributors, + send_claim_update_notice_to_list_contributors) from api.exceptions import BadRequestException @@ -1473,6 +1475,9 @@ def approve_claim(self, request, pk=None): send_claim_facility_approval_email(request, claim) + send_approved_claim_notice_to_list_contributors(request, + claim) + response_data = FacilityClaimDetailsSerializer(claim).data return Response(response_data) except FacilityClaim.DoesNotExist: @@ -1641,7 +1646,8 @@ def get_claimed_details(self, request, pk=None): ) updated_claim = FacilityClaim.objects.get(pk=pk) - + send_claim_update_notice_to_list_contributors(request, + updated_claim) response_data = ApprovedFacilityClaimSerializer(updated_claim).data return Response(response_data) except FacilityClaim.DoesNotExist: