Skip to content

Commit

Permalink
feat: add email trigger for 'create application' & fix trigger not to…
Browse files Browse the repository at this point in the history
… send an email when version = 0
  • Loading branch information
dleard committed Jun 4, 2020
1 parent 67250d8 commit 3d78c12
Show file tree
Hide file tree
Showing 10 changed files with 106 additions and 5 deletions.
17 changes: 17 additions & 0 deletions app/server/emailTemplates/draftApplicationStarted.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const createDraftApplicationStartedMail = ({
email,
firstName,
lastName,
operatorName,
facilityName
}) => {
return `
<p>${firstName}<p>
<p>${lastName}<p>
<p>${email}<p>
<p>${operatorName}<p>
<p>${facilityName}<p>
`;
};

module.exports = createDraftApplicationStartedMail;
12 changes: 12 additions & 0 deletions app/server/tasks/sendMail.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const createOrganisationAccessRequestMail = require('../emailTemplates/requestFo
const createOrganisationAccessApprovedMail = require('../emailTemplates/organisationAccessApproved.js');
const createNotifyAdminApplicationSubmittedMail = require('../emailTemplates/notifyAdminApplicationSubmitted.js');
const createNotifyAdminAccessRequestMail = require('../emailTemplates/notifyAdminOrganisationAccess');
const createDraftApplicationStartedMail = require('../emailTemplates/draftApplicationStarted');
const dotenv = require('dotenv');
dotenv.config();

Expand Down Expand Up @@ -146,6 +147,17 @@ module.exports = async ({
});
email = process.env.ADMIN_EMAIL;
break;
case 'draft_application_started':
subject = 'Draft Application Started';
htmlContent = createDraftApplicationStartedMail({
firstName,
lastName,
email,
operatorName,
facilityName
});
email = process.env.ADMIN_EMAIL;
break;
default:
htmlContent = null;
}
Expand Down
2 changes: 2 additions & 0 deletions schema/data/dev/application.sql
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ begin;
select 'Dropping old application data: ';
truncate ggircs_portal.application restart identity cascade;

alter table ggircs_portal.application disable trigger _send_draft_application_email;
alter table ggircs_portal.application_revision_status disable trigger _status_change_email;

-- Set a jwt token so that the created_by columns are not null on creation of application;
Expand All @@ -26,5 +27,6 @@ begin;
update ggircs_portal.application_revision set legal_disclaimer_accepted = true where application_id=1;

alter table ggircs_portal.application_revision_status enable trigger _status_change_email;
alter table ggircs_portal.application enable trigger _send_draft_application_email;

commit;
12 changes: 8 additions & 4 deletions schema/data/dev/ciip_user_organisation.sql
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@ begin;

-- Temporarily disable _set_user_id trigger in order to hardcode user_id into table ccip_user_organisation
alter table ggircs_portal.ciip_user_organisation
disable trigger _set_user_id;
disable trigger _set_user_id;
alter table ggircs_portal.ciip_user_organisation
disable trigger _send_request_for_access_email;
disable trigger _send_request_for_access_email;
alter table ggircs_portal.ciip_user_organisation
disable trigger _send_access_approved_email;

with rows as (
insert into ggircs_portal.ciip_user_organisation(id, user_id, organisation_id, status)
Expand All @@ -30,8 +32,10 @@ begin;

-- Re-enable _set_user_id trigger
alter table ggircs_portal.ciip_user_organisation
enable trigger _set_user_id;
enable trigger _set_user_id;
alter table ggircs_portal.ciip_user_organisation
enable trigger _send_request_for_access_email;
alter table ggircs_portal.ciip_user_organisation
enable trigger _send_request_for_access_email;
enable trigger _send_access_approved_email;

commit;
5 changes: 5 additions & 0 deletions schema/deploy/tables/application.sql
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ create table ggircs_portal.application (
reporting_year int references ggircs_portal.reporting_year(reporting_year)
);

create trigger _send_draft_application_email
before insert on ggircs_portal.application
for each row
execute procedure ggircs_portal_private.draft_application_started();

do
$grant$
begin
Expand Down
46 changes: 46 additions & 0 deletions schema/deploy/trigger_functions/draft_application_started.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
-- Deploy ggircs-portal:trigger_functions/draft_application_started to pg
-- requires: schema_ggircs_portal

begin;

create or replace function ggircs_portal_private.draft_application_started() returns trigger as $$
declare
user_details record;
operation_details record;
begin

with ud as (
select cu.first_name, cu.last_name, cu.email_address
from ggircs_portal.ciip_user cu
where cu.uuid = (select sub from ggircs_portal.session())
)
select * from ud into user_details;

with od as (
select f.facility_name, o.operator_name
from ggircs_portal.facility f
join ggircs_portal.organisation o
on o.id = f.organisation_id
and f.id = new.facility_id
)
select * from od into operation_details;

perform ggircs_portal_private.graphile_worker_job_definer(
'sendMail',
json_build_object(
'type', 'draft_application_started',
'firstName', user_details.first_name,
'lastName', user_details.last_name,
'email', user_details.email_address,
'operatorName', operation_details.operator_name,
'facilityName', operation_details.facility_name
)
);

return new;
end;
$$ language plpgsql volatile;

comment on function ggircs_portal_private.draft_application_started is 'Trigger function sends an email upon being called';

commit;
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ begin
when tg_argv[0]='status_change' then

-- Do not send any mail when a draft revision is created
if (new.application_revision_status = 'draft') then
if (new.application_revision_status = 'draft' or new.version_number = 0) then
return new;
end if;

Expand Down
7 changes: 7 additions & 0 deletions schema/revert/trigger_functions/draft_application_started.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- Revert ggircs-portal:trigger_functions/draft_application_started from pg

begin;

drop function ggircs_portal_private.draft_application_started;

commit;
1 change: 1 addition & 0 deletions schema/sqitch.plan
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ trigger_functions/check_for_immutable_application_revision_status [schema_ggircs
trigger_functions/protect_read_only_products [schema_ggircs_portal_private] 2020-05-04T17:54:24Z Dylan Leard <dylan@button.is> # Trigger function protects any product rows/columns that should be read only
trigger_functions/request_for_organisation_access [schema_ggircs_portal] 2020-06-03T22:05:30Z Dylan Leard <ddylan@button.is> # Trigger function sends an email to a reporter when they have requested access to an organisation
trigger_functions/organisation_access_approved [schema_ggircs_portal] 2020-06-03T23:08:20Z Dylan Leard <dylan@button.is> # Trigger function sends an email when organisation access has been approved
trigger_functions/draft_application_started [schema_ggircs_portal] 2020-06-04T00:08:08Z Dylan Leard <dylan@button.is> # Trigger sends an email to the reporter when they begin a draft application
types/jwt_token [schema_ggircs_portal] 2019-10-17T00:28:40Z Alec Wenzowski <alec@button.is> # Add a schema for Keycloak JWT Tokens
function_session [schema_ggircs_portal types/jwt_token] 2019-10-17T01:02:35Z Alec Wenzowski <alec@button.is> # Something
types/ciip_user_organisation_status [schema_ggircs_portal] 2019-11-06T21:07:19Z Helen Liu <helen@button.is> # added new type file ciip_user_organisation_status
Expand Down
7 changes: 7 additions & 0 deletions schema/verify/trigger_functions/draft_application_started.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- Verify ggircs-portal:trigger_functions/draft_application_started on pg

begin;

select pg_get_functiondef('ggircs_portal_private.draft_application_started()'::regprocedure);

rollback;

0 comments on commit 3d78c12

Please sign in to comment.