Skip to content

Commit

Permalink
feat: ignore inactive ciip_application_wizard rows
Browse files Browse the repository at this point in the history
  • Loading branch information
dleard committed Jan 29, 2021
1 parent bc59e32 commit f0b1d8c
Show file tree
Hide file tree
Showing 6 changed files with 233 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ begin
select facility_id from ggircs_portal.application where id = application_id_input into facility_id_input;

for temp_row in
select form_id from ggircs_portal.ciip_application_wizard
select form_id from ggircs_portal.ciip_application_wizard where is_active=true
loop
-- Populate new revision of form_results with data from previous result on new revision creation
if last_revision_id_input > 0 then
Expand Down Expand Up @@ -90,7 +90,7 @@ begin
insert into ggircs_portal.application_revision_status(application_id, version_number, application_revision_status)
values (application_id_input, 0, 'submitted');
for temp_row in
select form_id from ggircs_portal.ciip_application_wizard
select form_id from ggircs_portal.ciip_application_wizard where is_active=true
loop
insert into ggircs_portal.form_result(form_id, application_id, version_number, form_result)
values (temp_row.form_id, application_id_input, 0, (select fr.form_result
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
-- Deploy ggircs-portal:function_create_application_revision_mutation_chain to pg
-- requires: table_application_revision_status

begin;

create or replace function ggircs_portal.create_application_revision_mutation_chain(application_id_input int, last_revision_id_input int)
returns ggircs_portal.application_revision
as $function$
declare
new_version_number int;
form_result_id int;
current_reporting_year int;
temp_row record;
form_result jsonb;
init_function varchar(1000);
query text;
result ggircs_portal.application_revision;
facility_id_input int;
has_swrs_data boolean default false;
begin
new_version_number := last_revision_id_input + 1;

-- Insert new row in application_revision
insert into ggircs_portal.application_revision(application_id, version_number)
values (application_id_input, new_version_number);

select reporting_year from ggircs_portal.opened_reporting_year() into current_reporting_year;
if new_version_number <= 1 and current_reporting_year is null then
raise exception 'The application window is closed';
end if;

-- Insert new value with application_id fk and version 1 into application_revision_status
insert into ggircs_portal.application_revision_status(application_id, version_number, application_revision_status)
values (application_id_input, new_version_number, 'draft');

select facility_id from ggircs_portal.application where id = application_id_input into facility_id_input;

for temp_row in
select form_id from ggircs_portal.ciip_application_wizard
loop
-- Populate new revision of form_results with data from previous result on new revision creation
if last_revision_id_input > 0 then
select fr.form_result from ggircs_portal.form_result fr
where fr.form_id = temp_row.form_id
and fr.application_id = application_id_input
and fr.version_number=last_revision_id_input
into form_result;

else
-- Populate initial version of application form results with data from swrs or empty results
if ((select fj.name from ggircs_portal.form_json as fj where temp_row.form_id = fj.id) in ('Production', 'fuel')) then
form_result='[{}]';
else
form_result = '{}';
end if;
if (select prepopulate_from_swrs from ggircs_portal.form_json where id = temp_row.form_id) then
select form_result_init_function from ggircs_portal.form_json where id = temp_row.form_id into init_function;
if (init_function is not null) then
query := format('select * from ggircs_portal.%I($1, $2);', init_function);
execute query
using facility_id_input, current_reporting_year
into form_result;
end if;
end if;

end if;

-- loop over what is in the wizard, not the forms in case some forms get added/disabled etc
insert into ggircs_portal.form_result(form_id, application_id, version_number, form_result)
values (temp_row.form_id, application_id_input, new_version_number, form_result) returning id into form_result_id;

if last_revision_id_input = 0 then
-- Create form result statuses
insert into ggircs_portal.form_result_status(application_id, form_id, form_result_status)
values (application_id_input, temp_row.form_id, 'in review');
end if;

end loop;

-- If the application's facility has a report_id then there is a swrs report.
if (exists(select id from ggircs_portal.facility where id=facility_id_input and report_id is not null)
and last_revision_id_input = 0) then
has_swrs_data := true;
end if;

-- Create a duplicate revision 'version 0' with form_results if has_swrs_data = true;
if (has_swrs_data) then
insert into ggircs_portal.application_revision(application_id, version_number)
values (application_id_input, 0);
insert into ggircs_portal.application_revision_status(application_id, version_number, application_revision_status)
values (application_id_input, 0, 'submitted');
for temp_row in
select form_id from ggircs_portal.ciip_application_wizard
loop
insert into ggircs_portal.form_result(form_id, application_id, version_number, form_result)
values (temp_row.form_id, application_id_input, 0, (select fr.form_result
from ggircs_portal.form_result fr
where fr.application_id = application_id_input
and fr.form_id = temp_row.form_id
and fr.version_number = 1));
end loop;
end if;

select * from ggircs_portal.application_revision where application_id = application_id_input and version_number = new_version_number into result;
return result;
end;
$function$ language plpgsql strict volatile;

grant execute on function ggircs_portal.create_application_revision_mutation_chain to ciip_administrator, ciip_analyst, ciip_industry_user;

commit;
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ begin
values (application_id_input, new_version_number);

select reporting_year from ggircs_portal.opened_reporting_year() into current_reporting_year;
if current_reporting_year is null then
if new_version_number <= 1 and current_reporting_year is null then
raise exception 'The application window is closed';
end if;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
-- Deploy ggircs-portal:function_create_application_revision_mutation_chain to pg
-- requires: table_application_revision_status

begin;

create or replace function ggircs_portal.create_application_revision_mutation_chain(application_id_input int, last_revision_id_input int)
returns ggircs_portal.application_revision
as $function$
declare
new_version_number int;
form_result_id int;
current_reporting_year int;
temp_row record;
form_result jsonb;
init_function varchar(1000);
query text;
result ggircs_portal.application_revision;
facility_id_input int;
has_swrs_data boolean default false;
begin
new_version_number := last_revision_id_input + 1;

-- Insert new row in application_revision
insert into ggircs_portal.application_revision(application_id, version_number)
values (application_id_input, new_version_number);

select reporting_year from ggircs_portal.opened_reporting_year() into current_reporting_year;
if current_reporting_year is null then
raise exception 'The application window is closed';
end if;

-- Insert new value with application_id fk and version 1 into application_revision_status
insert into ggircs_portal.application_revision_status(application_id, version_number, application_revision_status)
values (application_id_input, new_version_number, 'draft');

select facility_id from ggircs_portal.application where id = application_id_input into facility_id_input;

for temp_row in
select form_id from ggircs_portal.ciip_application_wizard
loop
-- Populate new revision of form_results with data from previous result on new revision creation
if last_revision_id_input > 0 then
select fr.form_result from ggircs_portal.form_result fr
where fr.form_id = temp_row.form_id
and fr.application_id = application_id_input
and fr.version_number=last_revision_id_input
into form_result;

else
-- Populate initial version of application form results with data from swrs or empty results
if ((select fj.name from ggircs_portal.form_json as fj where temp_row.form_id = fj.id) in ('Production', 'fuel')) then
form_result='[{}]';
else
form_result = '{}';
end if;
if (select prepopulate_from_swrs from ggircs_portal.form_json where id = temp_row.form_id) then
select form_result_init_function from ggircs_portal.form_json where id = temp_row.form_id into init_function;
if (init_function is not null) then
query := format('select * from ggircs_portal.%I($1, $2);', init_function);
execute query
using facility_id_input, current_reporting_year
into form_result;
end if;
end if;

end if;

-- loop over what is in the wizard, not the forms in case some forms get added/disabled etc
insert into ggircs_portal.form_result(form_id, application_id, version_number, form_result)
values (temp_row.form_id, application_id_input, new_version_number, form_result) returning id into form_result_id;

if last_revision_id_input = 0 then
-- Create form result statuses
insert into ggircs_portal.form_result_status(application_id, form_id, form_result_status)
values (application_id_input, temp_row.form_id, 'in review');
end if;

end loop;

-- If the application's facility has a report_id then there is a swrs report.
if (exists(select id from ggircs_portal.facility where id=facility_id_input and report_id is not null)
and last_revision_id_input = 0) then
has_swrs_data := true;
end if;

-- Create a duplicate revision 'version 0' with form_results if has_swrs_data = true;
if (has_swrs_data) then
insert into ggircs_portal.application_revision(application_id, version_number)
values (application_id_input, 0);
insert into ggircs_portal.application_revision_status(application_id, version_number, application_revision_status)
values (application_id_input, 0, 'submitted');
for temp_row in
select form_id from ggircs_portal.ciip_application_wizard
loop
insert into ggircs_portal.form_result(form_id, application_id, version_number, form_result)
values (temp_row.form_id, application_id_input, 0, (select fr.form_result
from ggircs_portal.form_result fr
where fr.application_id = application_id_input
and fr.form_id = temp_row.form_id
and fr.version_number = 1));
end loop;
end if;

select * from ggircs_portal.application_revision where application_id = application_id_input and version_number = new_version_number into result;
return result;
end;
$function$ language plpgsql strict volatile;

grant execute on function ggircs_portal.create_application_revision_mutation_chain to ciip_administrator, ciip_analyst, ciip_industry_user;

commit;
1 change: 1 addition & 0 deletions schema/sqitch.plan
Original file line number Diff line number Diff line change
Expand Up @@ -211,3 +211,4 @@ function_opened_reporting_year [function_opened_reporting_year@v1.13.0] 2020-12-
function_current_timestamp [function_current_timestamp@v1.13.0] 2020-12-05T00:12:09Z Pierre Bastianelli <pierre.bastianelli@gov.bc.ca> # Removing the function since it's not needed anymore
@v1.14.0 2021-01-05T23:06:03Z Matthieu Foucault <matthieu@button.is> # release v1.14.0
tables/ciip_application_wizard_001 [tables/ciip_application_wizard] 2021-01-26T18:30:43Z Dylan Leard <dylan@button.is> # Migration: add boolean column that shows whether a form is currently in use (active)
mutations/create_application_revision_mutation_chain [mutations/create_application_revision_mutation_chain@v1.14.0] 2021-01-26T18:40:02Z Dylan Leard <dylan@button.is> # Migration: ignore inactive forms in the ciip_application_wizard table
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- Verify ggircs-portal:function_create_application_revision_mutation_chain on pg

begin;

select pg_get_functiondef('ggircs_portal.create_application_revision_mutation_chain(int, int)'::regprocedure);

rollback;

0 comments on commit f0b1d8c

Please sign in to comment.