Skip to content

Commit

Permalink
fix: do not create extraneous review steps for older applications
Browse files Browse the repository at this point in the history
  • Loading branch information
dleard committed Nov 3, 2021
1 parent 67b68e6 commit 9b50a1d
Show file tree
Hide file tree
Showing 7 changed files with 142 additions and 18 deletions.
20 changes: 12 additions & 8 deletions schema/deploy/trigger_functions/create_or_refresh_review_step.sql
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,18 @@ begin

if new.version_number > 0 then

for temp_row in
select id, step_name from ggircs_portal.review_step where is_active = true
loop
insert into ggircs_portal.application_review_step(application_id, review_step_id)
values (new.application_id, temp_row.id)
on conflict (application_id, review_step_id)
do update set is_complete=false;
end loop;
-- If review steps exist, refresh the review steps by setting is_complete=false
if (select exists (select id from ggircs_portal.application_review_step ars where ars.application_id = new.application_id limit 1)) then
update ggircs_portal.application_review_step ars set is_complete=false where ars.application_id = new.application_id;
-- Create new review steps if none exist (first submission)
else
for temp_row in
select id, step_name from ggircs_portal.review_step where is_active = true
loop
insert into ggircs_portal.application_review_step(application_id, review_step_id)
values (new.application_id, temp_row.id);
end loop;
end if;
end if;

return new;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
-- Deploy ggircs-portal:trigger_functions/create_or_refresh_review_step to pg
-- requires: tables/application_review_step

begin;

create or replace function ggircs_portal_private.create_or_refresh_review_step()
returns trigger as $$

declare
temp_row record;

begin

if new.version_number > 0 then

for temp_row in
select id, step_name from ggircs_portal.review_step where is_active = true
loop
insert into ggircs_portal.application_review_step(application_id, review_step_id)
values (new.application_id, temp_row.id)
on conflict (application_id, review_step_id)
do update set is_complete=false;
end loop;
end if;

return new;
end;
$$ language plpgsql volatile security definer;

grant execute on function ggircs_portal_private.create_or_refresh_review_step to ciip_administrator, ciip_analyst, ciip_industry_user;

comment on function ggircs_portal_private.create_or_refresh_review_step()
is $$
a trigger to create a review step for an application if it does not exist else reset the is_complete value to false
when the application_revision_status changes to submitted.
example usage:

create table some_schema.some_table (
...
application_revision_status ggircs_portal.application_revision_status
);
create trigger _create_or_refresh_review_step
before insert of application_revision_status on some_schema.some_table
for each row
execute procedure ggircs_portal_private.create_or_refresh_review_step();
$$;

commit;
19 changes: 11 additions & 8 deletions schema/revert/trigger_functions/create_or_refresh_review_step.sql
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,17 @@ declare

begin

for temp_row in
select id, step_name from ggircs_portal.review_step where is_active = true
loop
insert into ggircs_portal.application_review_step(application_id, review_step_id)
values (new.application_id, temp_row.id)
on conflict (application_id, review_step_id)
do update set is_complete=false;
end loop;
if new.version_number > 0 then

for temp_row in
select id, step_name from ggircs_portal.review_step where is_active = true
loop
insert into ggircs_portal.application_review_step(application_id, review_step_id)
values (new.application_id, temp_row.id)
on conflict (application_id, review_step_id)
do update set is_complete=false;
end loop;
end if;

return new;
end;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
-- Deploy ggircs-portal:trigger_functions/create_or_refresh_review_step to pg
-- requires: tables/application_review_step

begin;

create or replace function ggircs_portal_private.create_or_refresh_review_step()
returns trigger as $$

declare
temp_row record;

begin

for temp_row in
select id, step_name from ggircs_portal.review_step where is_active = true
loop
insert into ggircs_portal.application_review_step(application_id, review_step_id)
values (new.application_id, temp_row.id)
on conflict (application_id, review_step_id)
do update set is_complete=false;
end loop;

return new;
end;
$$ language plpgsql volatile security definer;

grant execute on function ggircs_portal_private.create_or_refresh_review_step to ciip_administrator, ciip_analyst, ciip_industry_user;

comment on function ggircs_portal_private.create_or_refresh_review_step()
is $$
a trigger to create a review step for an application if it does not exist else reset the is_complete value to false
when the application_revision_status changes to submitted.
example usage:

create table some_schema.some_table (
...
application_revision_status ggircs_portal.application_revision_status
);
create trigger _create_or_refresh_review_step
before insert of application_revision_status on some_schema.some_table
for each row
execute procedure ggircs_portal_private.create_or_refresh_review_step();
$$;

commit;
1 change: 1 addition & 0 deletions schema/sqitch.plan
Original file line number Diff line number Diff line change
Expand Up @@ -387,3 +387,4 @@ mutations/create_application_revision_mutation_chain [mutations/create_applicati
@v2.13.2 2021-10-05T19:51:38Z Matthieu Foucault <matthieu@button.is> # release v2.13.2
application_validation_functions/emission_category_missing_fuel [application_validation_functions/emission_category_missing_fuel@v2.13.0] 2021-04-27T21:54:17Z Dylan Leard <dylan@button.is> # Validation function to determine if there a missing fuels based on the emission categories with reported emissions
application_validation_functions/no_reported_ciip_product [application_validation_functions/no_reported_ciip_product@v2.13.0] 2021-10-12T22:07:57Z Alex Zorkin <AizeeDev@BigThink> # Updating validation ogic on un-required products
trigger_functions/create_or_refresh_review_step [trigger_functions/create_or_refresh_review_step@v2.13.0] 2021-11-03T19:58:12Z Dylan Leard <dylan@button.is> # Migration: fix trigger to use legacy review steps where appropriate
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ create extension if not exists pgtap;
reset client_min_messages;

begin;
select plan(10);
select plan(11);

select has_function(
'ggircs_portal_private', 'checksum_form_results',
Expand All @@ -27,12 +27,14 @@ do $$
end;
$$;
select test_helper.create_test_users();
select test_helper.create_applications(2, False, True);
select test_helper.create_applications(3, False, True);
insert into ggircs_portal.review_step (step_name, is_active) values ('test_step1', true);
insert into ggircs_portal.review_step (step_name, is_active) values ('test_step2', true);
insert into ggircs_portal.review_step (step_name, is_active) values ('no_step', false);
insert into ggircs_portal.application_review_step (application_id, review_step_id, is_complete)
values (2,1,true), (2,2,true);
insert into ggircs_portal.application_review_step (application_id, review_step_id, is_complete)
values (3,3,true);

insert into ggircs_portal.application_revision(application_id, version_number) values (1,0);

Expand Down Expand Up @@ -133,6 +135,20 @@ select results_eq(
'Trigger function sets is_complete column to false when review_steps already exist'
);

-- Fire trigger by submitting an application with an existing legacy review_step with is_complete set to true
insert into ggircs_portal.application_revision_status (application_id, version_number, application_revision_status)
values (3,1,'submitted');

select results_eq(
$$
select review_step_id, is_complete from ggircs_portal.application_review_step where application_id=3;
$$,
$$
values(3::integer, false::boolean)
$$,
'Trigger function refreshes the legacy step without creating extraneous new active steps'
);

select finish();

rollback;
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- Verify ggircs-portal:trigger_functions/create_or_refresh_review_step on pg

begin;

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

rollback;

0 comments on commit 9b50a1d

Please sign in to comment.