diff --git a/app/client/src/features/reports/ReportLicenceComments.jsx b/app/client/src/features/reports/ReportLicenceComments.jsx deleted file mode 100644 index 2837f6d..0000000 --- a/app/client/src/features/reports/ReportLicenceComments.jsx +++ /dev/null @@ -1,83 +0,0 @@ -import React, { useEffect } from "react"; -import { useForm } from "react-hook-form"; -import { useSelector, useDispatch } from "react-redux"; -import { Row, Col, Form, Button } from "react-bootstrap"; - -import DocGenDownloadBar from "../../components/DocGenDownloadBar"; - -import { - generateReport, - fetchReportJob, - selectReportsJob, - completeReportJob, - startLicenceCommentsJob, -} from "./reportsSlice"; - -import { REPORTS } from "../../utilities/constants"; - -export default function ReportLicenceComments() { - const dispatch = useDispatch(); - - const job = useSelector(selectReportsJob); - const { pendingDocuments } = job; - - const form = useForm({ - reValidateMode: "onBlur", - }); - const { register, watch } = form; - - const watchLicenceNumber = watch("licenceNumber", null); - - useEffect(() => { - if (job.id && job.type === REPORTS.LICENCE_COMMENTS) { - dispatch(fetchReportJob()); - - if (pendingDocuments?.length > 0) { - dispatch(generateReport(pendingDocuments[0].documentId)); - } else { - dispatch(completeReportJob(job.id)); - } - } - }, [pendingDocuments]); // eslint-disable-line react-hooks/exhaustive-deps - - const onGenerateReport = () => { - dispatch( - startLicenceCommentsJob({ - licenceNumber: watchLicenceNumber, - }) - ); - }; - - return ( - <> - - - Licence Number - - - -   - - - -
- -
- - ); -} - -ReportLicenceComments.propTypes = {}; diff --git a/app/client/src/features/reports/Reports.jsx b/app/client/src/features/reports/Reports.jsx index 75ae28d..e810b1b 100644 --- a/app/client/src/features/reports/Reports.jsx +++ b/app/client/src/features/reports/Reports.jsx @@ -23,7 +23,6 @@ import ReportLicenceExpiry from "./ReportLicenceExpiry"; import { clearReportsJob } from "./reportsSlice"; import RenderOnRole from "../../components/RenderOnRole"; import ReportDairyTrailerInspection from "./ReportDairyTrailerInspection"; -import ReportLicenceComments from "./ReportLicenceComments"; export default function Reports() { const dispatch = useDispatch(); @@ -71,9 +70,6 @@ export default function Reports() { case REPORTS.DAIRY_TEST_THRESHOLD: control = ; break; - case REPORTS.LICENCE_COMMENTS: - control = ; - break; case REPORTS.LICENCE_LOCATION: control = ; break; @@ -197,18 +193,6 @@ export default function Reports() { - - - - { - try { - const response = await Api.post( - `documents/reports/startJob/licenceComments`, - payload - ); - return response.data; - } catch (error) { - if (error instanceof ApiError) { - return thunkApi.rejectWithValue(error.serialize()); - } - return thunkApi.rejectWithValue({ code: -1, description: error.message }); - } - } -); - export const startLicenceExpiryJob = createAsyncThunk( "reports/startLicenceExpiryJob", async (payload, thunkApi) => { @@ -397,9 +379,6 @@ export const reportsSlice = createSlice({ [startLicenceExpiryJob.pending]: pendingStartJobReducer, [startLicenceExpiryJob.fulfilled]: fulfilledStartJobReducer, [startLicenceExpiryJob.rejected]: rejectionStartJobReducer, - [startLicenceCommentsJob.pending]: pendingStartJobReducer, - [startLicenceCommentsJob.fulfilled]: fulfilledStartJobReducer, - [startLicenceCommentsJob.rejected]: rejectionStartJobReducer, [fetchReportJob.pending]: (state) => { state.job.status = REQUEST_STATUS.PENDING; diff --git a/app/client/src/utilities/constants.js b/app/client/src/utilities/constants.js index 95cd2ea..087078c 100644 --- a/app/client/src/utilities/constants.js +++ b/app/client/src/utilities/constants.js @@ -150,7 +150,6 @@ export const REPORTS = { DAIRY_FARM_QUALITY: "DAIRY_FARM_QUALITY", DAIRY_FARM_TANK: "DAIRY_FARM_TANK", DAIRY_TEST_THRESHOLD: "DAIRY_TEST_THRESHOLD", - LICENCE_COMMENTS: "LICENCE_COMMENTS", LICENCE_LOCATION: "LICENCE_LOCATION", LICENCE_EXPIRY: "LICENCE_EXPIRY", DAIRY_TRAILER_INSPECTION: "TRAILER INSPECTION", diff --git a/app/server/routes/v1/documents.js b/app/server/routes/v1/documents.js index 9c82240..84bb8ed 100644 --- a/app/server/routes/v1/documents.js +++ b/app/server/routes/v1/documents.js @@ -955,21 +955,6 @@ async function startLicenceTypeLocationJob(licenceTypeId) { return { jobId, documents }; } -async function startLicenceCommentsJob(licenceNumber) { - const [procedureResult] = await prisma.$transaction([ - prisma.$queryRawUnsafe( - `CALL mals_app.pr_generate_print_json_licence_comments('${licenceNumber}', NULL)`, - licenceNumber - ), - ]); - - const jobId = procedureResult[0].iop_print_job_id; - - const documents = await getPendingDocuments(jobId); - - return { jobId, documents }; -} - async function startLicenceExpiryJob(startDate, endDate) { const [procedureResult] = await prisma.$transaction([ prisma.$queryRawUnsafe( @@ -1477,17 +1462,6 @@ router.post("/reports/startJob/licenceTypeLocation", async (req, res, next) => { .finally(async () => prisma.$disconnect()); }); -router.post("/reports/startJob/licenceComments", async (req, res, next) => { - const licenceNumber = req.body.licenceNumber; - - await startLicenceCommentsJob(licenceNumber) - .then(({ jobId, documents }) => { - return res.send({ jobId, documents, type: REPORTS.LICENCE_COMMENTS }); - }) - .catch(next) - .finally(async () => prisma.$disconnect()); -}); - router.post("/reports/startJob/licenceExpiry", async (req, res, next) => { const startDate = formatDate(new Date(req.body.startDate)); const endDate = formatDate(new Date(req.body.endDate)); @@ -1569,17 +1543,7 @@ router.post("/download/:jobId(\\d+)", async (req, res, next) => { const zip = new AdmZip(); let fileName = null; documents.forEach((document) => { - if ( - job.printCategory === constants.DOCUMENT_TYPE_REPORT && - document.document_type === constants.REPORTS.LICENCE_COMMENTS - ) { - fileName = `${document.document_json.Licence_Number}-${document.document_type}.xlsx`; - } else if ( - job.printCategory === constants.DOCUMENT_TYPE_REPORT && - document.document_type === constants.REPORTS.DAIRY_TRAILER_INSPECTION - ) { - fileName = `${document.document_json.LicenceNumber}-${document.document_type}.xlsx`; - } else if (job.printCategory === constants.DOCUMENT_TYPE_REPORT) { + if (job.printCategory === constants.DOCUMENT_TYPE_REPORT) { fileName = `${document.document_json.Licence_Type}-${document.document_type}.xlsx`; } else if ( document.document_type === constants.DOCUMENT_TYPE_DAIRY_INFRACTION @@ -1588,6 +1552,7 @@ router.post("/download/:jobId(\\d+)", async (req, res, next) => { } else { fileName = `${document.licence_number}-${document.document_type}.docx`; } + zip.addFile(fileName, document.document_binary); }); diff --git a/app/server/static/templates/certificates/Dairy-Farm.docx b/app/server/static/templates/certificates/Dairy-Farm.docx index b216031..4883b6e 100644 Binary files a/app/server/static/templates/certificates/Dairy-Farm.docx and b/app/server/static/templates/certificates/Dairy-Farm.docx differ diff --git a/app/server/static/templates/certificates/Purchase-Live-Poultry.docx b/app/server/static/templates/certificates/Purchase-Live-Poultry.docx index cac2713..43307e3 100644 Binary files a/app/server/static/templates/certificates/Purchase-Live-Poultry.docx and b/app/server/static/templates/certificates/Purchase-Live-Poultry.docx differ diff --git a/app/server/static/templates/reports/Dairy_Test_Threshold_Template.xlsx b/app/server/static/templates/reports/Dairy_Test_Threshold_Template.xlsx index dffe4f5..96a92db 100644 Binary files a/app/server/static/templates/reports/Dairy_Test_Threshold_Template.xlsx and b/app/server/static/templates/reports/Dairy_Test_Threshold_Template.xlsx differ diff --git a/app/server/static/templates/reports/Licence_Comments_Template.xlsx b/app/server/static/templates/reports/Licence_Comments_Template.xlsx deleted file mode 100644 index 823dcb6..0000000 Binary files a/app/server/static/templates/reports/Licence_Comments_Template.xlsx and /dev/null differ diff --git a/app/server/utilities/constants.js b/app/server/utilities/constants.js index bc0deab..bac122b 100644 --- a/app/server/utilities/constants.js +++ b/app/server/utilities/constants.js @@ -102,6 +102,5 @@ module.exports = Object.freeze({ DAIRY_TRAILER_INSPECTION: "TRAILER INSPECTION", LICENCE_LOCATION: "LICENCE_LOCATION", LICENCE_EXPIRY: "LICENCE_EXPIRY", - LICENCE_COMMENTS: "LICENCE_COMMENTS", }, }); diff --git a/app/server/utilities/documents.js b/app/server/utilities/documents.js index b09e3e8..df8d6e4 100644 --- a/app/server/utilities/documents.js +++ b/app/server/utilities/documents.js @@ -196,8 +196,6 @@ function getReportsTemplateName(documentType) { return "Licence_Expiry_Species_NoSpecies_Template"; case constants.REPORTS.DAIRY_TRAILER_INSPECTION: return "Dairy_Trailer_Inspection_Template"; - case constants.REPORTS.LICENCE_COMMENTS: - return "Licence_Comments_Template"; default: return null; } diff --git a/spilo-db/db-scripts/releases/release_5.5_ddl.sql b/spilo-db/db-scripts/releases/release_5.5_ddl.sql deleted file mode 100644 index cafea1f..0000000 --- a/spilo-db/db-scripts/releases/release_5.5_ddl.sql +++ /dev/null @@ -1,273 +0,0 @@ --- MALS-17 - New report - to show comments by license number and or IRMA number --- Create a view and procedure to support Comments reporting. - -DROP PROCEDURE IF EXISTS mals_app.pr_generate_print_json_licence_comments; -DROP VIEW IF EXISTS mals_app.mal_licence_comment_vw; - --- --- VIEW: MAL_LICENCE_COMMENT_VW --- - -CREATE OR REPLACE VIEW mals_app.mal_licence_comment_vw -AS SELECT lic.id AS licence_id, - lic.licence_number, - lic.irma_number, - reg.last_name, - reg.first_name, - lic.company_name, - reg.email_address, - lictyp.licence_type, - com.create_timestamp, - com.licence_comment - FROM mals_app.mal_licence lic - JOIN mals_app.mal_licence_type_lu lictyp ON lic.licence_type_id = lictyp.id - LEFT JOIN mals_app.mal_registrant reg ON lic.primary_registrant_id = reg.id - LEFT JOIN mals_app.mal_licence_comment com ON lic.id = com.licence_id; - --- Permissions - -ALTER TABLE mals_app.mal_licence_comment_vw OWNER TO mals; -GRANT ALL ON TABLE mals_app.mal_licence_comment_vw TO mals; -GRANT SELECT ON TABLE mals_app.mal_licence_comment_vw TO mals_app_role; - --- --- PROCEDURE: PR_GENERATE_PRINT_JSON_LICENCE_COMMENTS --- - -CREATE OR REPLACE PROCEDURE mals_app.pr_generate_print_json_licence_comments(IN ip_licence_number character varying, INOUT iop_print_job_id integer) - LANGUAGE plpgsql -AS $procedure$ - declare - l_report_json_count integer default 0; - begin - -- - -- Start a row in the mal_print_job table - call pr_start_print_job( - ip_print_category => 'REPORT', - iop_print_job_id => iop_print_job_id - ); - -- - -- Insert the JSON into the output table - with licence_comments as ( - select - lic.licence_number, - lic.licence_type, - json_agg(json_build_object('LicenceNumber', lic.licence_number, - 'Lastname', lic.last_name, - 'Firstname', lic.first_name, - 'Company', lic.company_name, - 'Email', lic.email_address, - 'LicenceType', lic.licence_type, - 'CommentDate', lic.create_timestamp, - 'Comment', lic.licence_comment) - order by lic.create_timestamp) licence_json, - count(*) num_rows - from mal_licence_comment_vw lic - WHERE (lic.irma_number = ip_licence_number) OR (CAST(lic.licence_number AS varchar) = ip_licence_number) - group by lic.licence_number, lic.licence_type - ) - -- - -- MAIN QUERY - -- - insert into mal_print_job_output( - print_job_id, - licence_type, - licence_number, - document_type, - document_json, - document_binary, - create_userid, - create_timestamp, - update_userid, - update_timestamp) - select - iop_print_job_id, - licence_type, - null, - 'LICENCE_COMMENTS', - json_build_object('DateTime', to_char(current_timestamp, 'fmyyyy-mm-dd hh24mi'), - 'Licence_Number', licence_number, - 'Licence', licence_json, - 'RowCount', num_rows) report_json, - null, - current_user, - current_timestamp, - current_user, - current_timestamp - from licence_comments; - -- - GET DIAGNOSTICS l_report_json_count = ROW_COUNT; - -- - -- Update the Print Job table. - update mal_print_job set - job_status = 'COMPLETE', - json_end_time = current_timestamp, - report_json_count = l_report_json_count, - update_userid = current_user, - update_timestamp = current_timestamp - where id = iop_print_job_id; -end; -$procedure$ -; - --- Permissions - -ALTER PROCEDURE mals_app.pr_generate_print_json_licence_comments(in varchar, inout int4) OWNER TO mals; -GRANT ALL ON PROCEDURE mals_app.pr_generate_print_json_licence_comments(in varchar, inout int4) TO mals; -GRANT EXECUTE ON PROCEDURE mals_app.pr_generate_print_json_licence_comments(in varchar, inout int4) TO mals_app_role; - --- MALS-19 - Add a column to the Dairy Test Threshold Report --- Add the Penaltiesd Issued column to the licence_json JSON object. - --- --- PROCEDURE: PR_GENERATE_PRINT_JSON_DAIRY_FARM_TEST_THRESHOLD --- - -CREATE OR REPLACE PROCEDURE mals_app.pr_generate_print_json_dairy_farm_test_threshold(ip_start_date date, ip_end_date date, INOUT iop_print_job_id integer) - LANGUAGE plpgsql -AS $procedure$ - declare - l_report_json_count integer default 0; - begin - -- - -- Start a row in the mal_print_job table - call pr_start_print_job( - ip_print_category => 'REPORT', - iop_print_job_id => iop_print_job_id - ); - -- - -- Insert the JSON into the output table - with result_base as ( - select lic.id licence_id, - rslt.irma_number, - coalesce(lic.company_name, nullif(trim(concat(reg.first_name, ' ', reg.last_name)),'')) derived_licence_holder_name, - coalesce(spc1_date, scc_date, cry_date, ffa_date, ih_date) derived_test_date, - rslt.spc1_infraction_flag, - case when rslt.spc1_infraction_flag then rslt.spc1_value else null end spc1_value, - case when rslt.spc1_infraction_flag then rslt.spc1_correspondence_code else null end spc1_corespondence_code, - case when rslt.spc1_infraction_flag then rslt.spc1_levy_percentage else null end spc1_levy_percentage, - case when rslt.spc1_infraction_flag then - case when rslt.spc1_correspondence_code = 'W' then 'Warning' else concat(rslt.spc1_levy_percentage, '%') end - else null end spc1_penalty_issued, - rslt.scc_infraction_flag, - case when rslt.scc_infraction_flag then rslt.scc_value else null end scc_value, - case when rslt.scc_infraction_flag then rslt.scc_correspondence_code else null end scc_corespondence_code, - case when rslt.scc_infraction_flag then rslt.scc_levy_percentage else null end scc_levy_percentage, - case when rslt.scc_infraction_flag then - case when rslt.scc_correspondence_code = 'W' then 'Warning' else concat(rslt.scc_levy_percentage, '%') end - else null end scc_penalty_issued, - rslt.cry_infraction_flag, - case when rslt.cry_infraction_flag then rslt.cry_value else null end cry_value, - case when rslt.cry_infraction_flag then rslt.cry_correspondence_code else null end cry_corespondence_code, - case when rslt.cry_infraction_flag then rslt.cry_levy_percentage else null end cry_levy_percentage, - case when rslt.cry_infraction_flag then - case when rslt.cry_correspondence_code = 'W' then 'Warning' else concat(rslt.cry_levy_percentage, '%') end - else null end cry_penalty_issued, - rslt.ffa_infraction_flag, - case when rslt.ffa_infraction_flag then rslt.ffa_value else null end ffa_value, - rslt.ih_infraction_flag, - case when rslt.ih_infraction_flag then rslt.ih_value else null end ih_value, - case when rslt.ih_infraction_flag then rslt.ih_correspondence_code else null end ih_corespondence_code, - case when rslt.ih_infraction_flag then rslt.ih_levy_percentage else null end ih_levy_percentage, - case when rslt.ih_infraction_flag then - case when rslt.ih_correspondence_code = 'W' then 'Warning' else concat(rslt.ih_levy_percentage, '%') end - else null end ih_penalty_issued, - case when spc1_infraction_flag then 1 else 0 end + - case when scc_infraction_flag then 1 else 0 end + - case when cry_infraction_flag then 1 else 0 end + - case when ih_infraction_flag then 1 else 0 end num_infractions - from mal_licence lic - inner join mal_registrant reg - on lic.primary_registrant_id = reg.id - inner join mal_dairy_farm_test_result rslt - on lic.id = rslt.licence_id - where greatest(spc1_date, scc_date, cry_date, ffa_date, ih_date) - between ip_start_date and ip_end_date - and greatest(spc1_infraction_flag, scc_infraction_flag, cry_infraction_flag, ffa_infraction_flag, ih_infraction_flag) = true - ), - infractions as ( - select licence_id, - rtrim(concat( - case when num_infractions > 1 then spc1_penalty_issued || ' SPC1, ' else spc1_penalty_issued end, - case when num_infractions > 1 then scc_penalty_issued || ' SCC, ' else scc_penalty_issued end, - case when num_infractions > 1 then cry_penalty_issued || ' CRY, ' else cry_penalty_issued end, - case when num_infractions > 1 then ih_penalty_issued || ' IH, 'else ih_penalty_issued end), ', ') penalties_issued - from result_base), - licence_list as ( - select json_agg(json_build_object('IRMA_Num', rb.irma_number, - 'LicenceHolderCompany', rb.derived_licence_holder_name, - 'TestDate', rb.derived_test_date, - 'IBC_Result', rb.spc1_value, - 'SCC_Result', rb.scc_value, - 'CRY_Result', rb.cry_value, - 'FFA_Result', rb.ffa_value, - 'IH_Result', rb.ih_value, - 'PenaltyIssued', inf.penalties_issued) - order by irma_number) licence_json - from result_base rb - left join infractions inf - on rb.licence_id = inf.licence_id), - result_summary as ( - select - count(spc1_value) spc1_count, - count(scc_value) scc_count, - count(cry_value) cry_count, - count(ffa_value) ffa_count, - count(ih_value) ih_count - from result_base) - -- - -- MAIN QUERY - -- - insert into mal_print_job_output( - print_job_id, - licence_type, - licence_number, - document_type, - document_json, - document_binary, - create_userid, - create_timestamp, - update_userid, - update_timestamp) - select - iop_print_job_id, - 'DAIRY FARM', - null, - 'DAIRY_TEST_THRESHOLD', - json_build_object('DateTime', to_char(current_timestamp, 'fmyyyy-mm-dd hh24:mi'), - 'DateRangeStart', to_char(ip_start_date, 'fmMonth dd, yyyy'), - 'DateRangeEnd', to_char(ip_end_date, 'fmMonth dd, yyyy'), - 'Reg', list.licence_json, - 'Tot_IBC_Count', smry.spc1_count, - 'Tot_SCC_Count', smry.scc_count, - 'Tot_CRY_Count', smry.cry_count, - 'Tot_FFA_Count', smry.ffa_count, - 'Tot_IH_Count', smry.ih_count) report_json, - null, - current_user, - current_timestamp, - current_user, - current_timestamp - from licence_list list - cross join result_summary smry; - -- - GET DIAGNOSTICS l_report_json_count = ROW_COUNT; - -- - -- Update the Print Job table. - update mal_print_job set - job_status = 'COMPLETE', - json_end_time = current_timestamp, - report_json_count = l_report_json_count, - update_userid = current_user, - update_timestamp = current_timestamp - where id = iop_print_job_id; -end; -$procedure$ -; - --- MALS-24 - Purchase Live Poultry License - Act & Reg wording needs updating --- Update the legislation column to reflec the new terminology. - -UPDATE mals_app.mal_licence_type_lu -SET legislation = 'Under the authority of the Animal Health Act and s.9(2) of the Poultry Health and Buying Regulation' -WHERE licence_type = 'PURCHASE LIVE POULTRY'; \ No newline at end of file