From 44119638c251fdf1ef8f4bd301b2193ee91dd937 Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Mon, 3 Mar 2025 15:46:18 -0500 Subject: [PATCH] refactoring, plus funeral home maint --- app.js | 2 + app.ts | 2 + cypress/e2e/02-update/cemeteries.cy.js | 8 +- cypress/e2e/02-update/cemeteries.cy.ts | 8 +- data/config.baseOntario.js | 3 +- data/config.baseOntario.ts | 4 +- data/config.baseSsm.js | 3 +- data/config.baseSsm.ts | 5 +- data/config.defaultValues.d.ts | 6 +- data/config.defaultValues.js | 6 +- data/config.defaultValues.ts | 6 +- database/addFuneralHome.d.ts | 10 + database/addFuneralHome.js | 15 + database/addFuneralHome.ts | 47 + database/cleanupDatabase.js | 6 +- database/cleanupDatabase.ts | 6 +- database/deleteRecord.d.ts | 2 +- database/deleteRecord.js | 1 + database/deleteRecord.ts | 2 + database/getFuneralHome.d.ts | 2 + database/getFuneralHome.js | 15 + database/getFuneralHome.ts | 25 + database/getFuneralHomes.d.ts | 2 + database/getFuneralHomes.js | 14 + database/getFuneralHomes.ts | 22 + database/getReportData.js | 24 +- database/getReportData.ts | 24 +- database/updateFuneralHome.d.ts | 11 + database/updateFuneralHome.js | 16 + database/updateFuneralHome.ts | 48 + handlers/admin-get/tables.js | 5 +- handlers/admin-get/tables.ts | 5 +- handlers/api-get/milestoneICS.js | 2 +- handlers/api-get/milestoneICS.ts | 2 +- handlers/cemeteries-get/new.js | 4 +- handlers/cemeteries-get/new.ts | 4 +- handlers/funeralHomes-get/edit.d.ts | 2 + handlers/funeralHomes-get/edit.js | 14 + handlers/funeralHomes-get/edit.ts | 24 + handlers/funeralHomes-get/new.d.ts | 2 + handlers/funeralHomes-get/new.js | 12 + handlers/funeralHomes-get/new.ts | 17 + handlers/funeralHomes-get/search.d.ts | 2 + handlers/funeralHomes-get/search.js | 8 + handlers/funeralHomes-get/search.ts | 15 + handlers/funeralHomes-get/view.d.ts | 2 + handlers/funeralHomes-get/view.js | 14 + handlers/funeralHomes-get/view.ts | 24 + .../doCreateFuneralHome.d.ts | 3 + .../funeralHomes-post/doCreateFuneralHome.js | 8 + .../funeralHomes-post/doCreateFuneralHome.ts | 18 + .../doDeleteFuneralHome.d.ts | 4 + .../funeralHomes-post/doDeleteFuneralHome.js | 7 + .../funeralHomes-post/doDeleteFuneralHome.ts | 18 + .../doUpdateFuneralHome.d.ts | 3 + .../funeralHomes-post/doUpdateFuneralHome.js | 8 + .../funeralHomes-post/doUpdateFuneralHome.ts | 20 + handlers/reports-get/reportName.d.ts | 5 +- handlers/reports-get/reportName.ts | 4 +- ...yType.html => adminContractTypes-add.html} | 16 +- ....html => adminContractTypes-addField.html} | 16 +- ....html => adminContractTypes-addPrint.html} | 14 +- ...Type.html => adminContractTypes-edit.html} | 20 +- ...html => adminContractTypes-editField.html} | 44 +- public/html/adminFees-addFee.html | 4 +- public/html/adminFees-editFee.html | 4 +- ...upant.html => contract-editInterment.html} | 56 +- ...ot.html => contract-selectBurialSite.html} | 0 public/html/lotOccupancy-addComment.html | 14 +- public/html/lotOccupancy-addOccupant.html | 72 +- public/html/lotOccupancy-addTransaction.html | 20 +- public/html/lotOccupancy-createWorkOrder.html | 4 +- public/html/lotOccupancy-editComment.html | 30 +- public/html/lotOccupancy-editFeeQuantity.html | 14 +- public/html/lotOccupancy-editTransaction.html | 30 +- public/html/lotOccupancy-setFeeQuantity.html | 10 +- public/html/workOrder-addLotOccupancy.html | 16 +- public/javascripts/burialSite.edit.js | 2 +- public/javascripts/burialSite.edit.ts | 4 +- public/javascripts/burialSite.search.js | 2 +- public/javascripts/burialSite.search.ts | 4 +- public/javascripts/burialSite.view.js | 2 +- public/javascripts/burialSite.view.ts | 4 +- public/javascripts/burialSiteTypes.admin.js | 2 +- public/javascripts/burialSiteTypes.admin.ts | 4 +- public/javascripts/cemetery.edit.js | 14 +- public/javascripts/cemetery.edit.ts | 16 +- public/javascripts/cemetery.search.js | 10 +- public/javascripts/cemetery.search.ts | 12 +- public/javascripts/contract.edit.js | 695 ++------- public/javascripts/contract.edit.ts | 1110 +++----------- public/javascripts/contract.search.js | 2 +- public/javascripts/contract.search.ts | 4 +- public/javascripts/contractTypes.admin.js | 373 +++-- public/javascripts/contractTypes.admin.ts | 460 +++--- public/javascripts/dashboard.js | 2 +- public/javascripts/dashboard.ts | 2 +- public/javascripts/database.admin.js | 2 +- public/javascripts/database.admin.ts | 2 +- public/javascripts/fees.admin.js | 26 +- public/javascripts/fees.admin.ts | 28 +- public/javascripts/funeralHome.edit.d.ts | 1 + public/javascripts/funeralHome.edit.js | 81 + public/javascripts/funeralHome.edit.ts | 123 ++ public/javascripts/funeralHome.search.d.ts | 1 + public/javascripts/funeralHome.search.js | 82 + public/javascripts/funeralHome.search.ts | 128 ++ public/javascripts/main.js | 10 +- public/javascripts/main.ts | 24 +- public/javascripts/tables.admin.js | 945 +++++------- public/javascripts/tables.admin.ts | 1334 +++++++---------- public/javascripts/types.d.ts | 3 +- public/javascripts/types.ts | 3 +- public/javascripts/workOrder.edit.js | 6 +- public/javascripts/workOrder.edit.ts | 6 +- .../workOrder.milestoneCalendar.js | 2 +- .../workOrder.milestoneCalendar.ts | 2 +- public/javascripts/workOrder.outlook.js | 2 +- public/javascripts/workOrder.outlook.ts | 2 +- public/javascripts/workOrder.search.js | 2 +- public/javascripts/workOrder.search.ts | 2 +- public/javascripts/workOrder.view.js | 2 +- public/javascripts/workOrder.view.ts | 2 +- routes/funeralHomes.d.ts | 2 + routes/funeralHomes.js | 18 + routes/funeralHomes.ts | 40 + temp/legacy.importFromCSV.js | 60 +- temp/legacy.importFromCSV.ts | 112 +- temp/legacy.importFromCsv.ids.d.ts | 6 +- temp/legacy.importFromCsv.ids.js | 6 +- temp/legacy.importFromCsv.ids.ts | 6 +- test/functions.js | 18 +- test/functions.ts | 18 +- types/configTypes.d.ts | 9 +- types/configTypes.ts | 9 +- types/recordTypes.d.ts | 10 + types/recordTypes.ts | 11 + views/_header.ejs | 6 + views/_menu-admin.ejs | 12 +- views/admin-contractTypes.ejs | 30 +- views/admin-database.ejs | 2 +- views/admin-fees.ejs | 2 +- views/admin-tables.ejs | 276 ++-- views/cemetery-edit.ejs | 167 +-- views/contract-edit.ejs | 613 ++++---- views/contract-view.ejs | 144 +- views/dashboard.ejs | 10 +- views/funeralHome-edit.ejs | 162 ++ views/funeralHome-search.ejs | 65 + views/funeralHome-view.ejs | 70 + views/print/pdf/ssm.cemetery.burialPermit.ejs | 8 +- views/print/pdf/ssm.cemetery.contract.ejs | 32 +- views/print/pdf/workOrder.ejs | 4 +- views/print/screen/contract.ejs | 90 +- views/report-search.ejs | 24 +- views/workOrder-view.ejs | 24 +- 156 files changed, 4047 insertions(+), 4549 deletions(-) create mode 100644 database/addFuneralHome.d.ts create mode 100644 database/addFuneralHome.js create mode 100644 database/addFuneralHome.ts create mode 100644 database/getFuneralHome.d.ts create mode 100644 database/getFuneralHome.js create mode 100644 database/getFuneralHome.ts create mode 100644 database/getFuneralHomes.d.ts create mode 100644 database/getFuneralHomes.js create mode 100644 database/getFuneralHomes.ts create mode 100644 database/updateFuneralHome.d.ts create mode 100644 database/updateFuneralHome.js create mode 100644 database/updateFuneralHome.ts create mode 100644 handlers/funeralHomes-get/edit.d.ts create mode 100644 handlers/funeralHomes-get/edit.js create mode 100644 handlers/funeralHomes-get/edit.ts create mode 100644 handlers/funeralHomes-get/new.d.ts create mode 100644 handlers/funeralHomes-get/new.js create mode 100644 handlers/funeralHomes-get/new.ts create mode 100644 handlers/funeralHomes-get/search.d.ts create mode 100644 handlers/funeralHomes-get/search.js create mode 100644 handlers/funeralHomes-get/search.ts create mode 100644 handlers/funeralHomes-get/view.d.ts create mode 100644 handlers/funeralHomes-get/view.js create mode 100644 handlers/funeralHomes-get/view.ts create mode 100644 handlers/funeralHomes-post/doCreateFuneralHome.d.ts create mode 100644 handlers/funeralHomes-post/doCreateFuneralHome.js create mode 100644 handlers/funeralHomes-post/doCreateFuneralHome.ts create mode 100644 handlers/funeralHomes-post/doDeleteFuneralHome.d.ts create mode 100644 handlers/funeralHomes-post/doDeleteFuneralHome.js create mode 100644 handlers/funeralHomes-post/doDeleteFuneralHome.ts create mode 100644 handlers/funeralHomes-post/doUpdateFuneralHome.d.ts create mode 100644 handlers/funeralHomes-post/doUpdateFuneralHome.js create mode 100644 handlers/funeralHomes-post/doUpdateFuneralHome.ts rename public/html/{adminOccupancyTypes-addOccupancyType.html => adminContractTypes-add.html} (68%) rename public/html/{adminOccupancyTypes-addOccupancyTypeField.html => adminContractTypes-addField.html} (72%) rename public/html/{adminOccupancyTypes-addOccupancyTypePrint.html => adminContractTypes-addPrint.html} (77%) rename public/html/{adminOccupancyTypes-editOccupancyType.html => adminContractTypes-edit.html} (66%) rename public/html/{adminOccupancyTypes-editOccupancyTypeField.html => adminContractTypes-editField.html} (80%) rename public/html/{lotOccupancy-editOccupant.html => contract-editInterment.html} (76%) rename public/html/{lotOccupancy-selectLot.html => contract-selectBurialSite.html} (100%) create mode 100644 public/javascripts/funeralHome.edit.d.ts create mode 100644 public/javascripts/funeralHome.edit.js create mode 100644 public/javascripts/funeralHome.edit.ts create mode 100644 public/javascripts/funeralHome.search.d.ts create mode 100644 public/javascripts/funeralHome.search.js create mode 100644 public/javascripts/funeralHome.search.ts create mode 100644 routes/funeralHomes.d.ts create mode 100644 routes/funeralHomes.js create mode 100644 routes/funeralHomes.ts create mode 100644 views/funeralHome-edit.ejs create mode 100644 views/funeralHome-search.ejs create mode 100644 views/funeralHome-view.ejs diff --git a/app.js b/app.js index 831a95e3..9c740bb0 100644 --- a/app.js +++ b/app.js @@ -22,6 +22,7 @@ import routerBurialSites from './routes/burialSites.js'; import routerCemeteries from './routes/cemeteries.js'; import routerContracts from './routes/contracts.js'; import routerDashboard from './routes/dashboard.js'; +import routerFuneralHomes from './routes/funeralHomes.js'; import routerLogin from './routes/login.js'; import routerPrint from './routes/print.js'; import routerReports from './routes/reports.js'; @@ -142,6 +143,7 @@ app.use(`${urlPrefix}/api/:apiKey`, permissionHandlers.apiGetHandler, routerApi) app.use(`${urlPrefix}/print`, sessionChecker, routerPrint); app.use(`${urlPrefix}/cemeteries`, sessionChecker, routerCemeteries); app.use(`${urlPrefix}/burialSites`, sessionChecker, routerBurialSites); +app.use(`${urlPrefix}/funeralHomes`, sessionChecker, routerFuneralHomes); app.use(`${urlPrefix}/contracts`, sessionChecker, routerContracts); app.use(`${urlPrefix}/workOrders`, sessionChecker, routerWorkOrders); app.use(`${urlPrefix}/reports`, sessionChecker, routerReports); diff --git a/app.ts b/app.ts index 5e2f85df..753dc21f 100644 --- a/app.ts +++ b/app.ts @@ -24,6 +24,7 @@ import routerBurialSites from './routes/burialSites.js' import routerCemeteries from './routes/cemeteries.js' import routerContracts from './routes/contracts.js' import routerDashboard from './routes/dashboard.js' +import routerFuneralHomes from './routes/funeralHomes.js' import routerLogin from './routes/login.js' import routerPrint from './routes/print.js' import routerReports from './routes/reports.js' @@ -233,6 +234,7 @@ app.use(`${urlPrefix}/api/:apiKey`, permissionHandlers.apiGetHandler, routerApi) app.use(`${urlPrefix}/print`, sessionChecker, routerPrint) app.use(`${urlPrefix}/cemeteries`, sessionChecker, routerCemeteries) app.use(`${urlPrefix}/burialSites`, sessionChecker, routerBurialSites) +app.use(`${urlPrefix}/funeralHomes`, sessionChecker, routerFuneralHomes) app.use(`${urlPrefix}/contracts`, sessionChecker, routerContracts) app.use(`${urlPrefix}/workOrders`, sessionChecker, routerWorkOrders) diff --git a/cypress/e2e/02-update/cemeteries.cy.js b/cypress/e2e/02-update/cemeteries.cy.js index f45c7f6a..7d5f7257 100644 --- a/cypress/e2e/02-update/cemeteries.cy.js +++ b/cypress/e2e/02-update/cemeteries.cy.js @@ -45,8 +45,8 @@ describe('Update - Cemeteries', () => { .type(cemeteryData.cemeteryLongitude?.toString() ?? ''); }); cy.log('Ensure the default city and province are used'); - cy.get("input[name='cemeteryCity']").should('have.value', getConfigProperty('settings.cemeteries.cityDefault')); - cy.get("input[name='cemeteryProvince']").should('have.value', getConfigProperty('settings.cemeteries.provinceDefault')); + cy.get("input[name='cemeteryCity']").should('have.value', getConfigProperty('settings.cityDefault')); + cy.get("input[name='cemeteryProvince']").should('have.value', getConfigProperty('settings.provinceDefault')); cy.log('Submit the form'); cy.get('#form--cemetery').submit(); cy.wait(1000); @@ -58,8 +58,8 @@ describe('Update - Cemeteries', () => { cy.get("textarea[name='cemeteryDescription']").should('have.value', cemeteryData.cemeteryDescription); cy.get("input[name='cemeteryAddress1']").should('have.value', cemeteryData.cemeteryAddress1); cy.get("input[name='cemeteryAddress2']").should('have.value', cemeteryData.cemeteryAddress2); - cy.get("input[name='cemeteryCity']").should('have.value', getConfigProperty('settings.cemeteries.cityDefault')); - cy.get("input[name='cemeteryProvince']").should('have.value', getConfigProperty('settings.cemeteries.provinceDefault')); + cy.get("input[name='cemeteryCity']").should('have.value', getConfigProperty('settings.cityDefault')); + cy.get("input[name='cemeteryProvince']").should('have.value', getConfigProperty('settings.provinceDefault')); cy.get("input[name='cemeteryPostalCode']").should('have.value', cemeteryData.cemeteryPostalCode); cy.get("input[name='cemeteryPhoneNumber']").should('have.value', cemeteryData.cemeteryPhoneNumber); cy.get("input[name='cemeteryLatitude']").should('have.value', cemeteryData.cemeteryLatitude?.toString()); diff --git a/cypress/e2e/02-update/cemeteries.cy.ts b/cypress/e2e/02-update/cemeteries.cy.ts index 9c89de78..8bc66847 100644 --- a/cypress/e2e/02-update/cemeteries.cy.ts +++ b/cypress/e2e/02-update/cemeteries.cy.ts @@ -65,12 +65,12 @@ describe('Update - Cemeteries', () => { cy.get("input[name='cemeteryCity']").should( 'have.value', - getConfigProperty('settings.cemeteries.cityDefault') + getConfigProperty('settings.cityDefault') ) cy.get("input[name='cemeteryProvince']").should( 'have.value', - getConfigProperty('settings.cemeteries.provinceDefault') + getConfigProperty('settings.provinceDefault') ) cy.log('Submit the form') @@ -106,12 +106,12 @@ describe('Update - Cemeteries', () => { cy.get("input[name='cemeteryCity']").should( 'have.value', - getConfigProperty('settings.cemeteries.cityDefault') + getConfigProperty('settings.cityDefault') ) cy.get("input[name='cemeteryProvince']").should( 'have.value', - getConfigProperty('settings.cemeteries.provinceDefault') + getConfigProperty('settings.provinceDefault') ) cy.get("input[name='cemeteryPostalCode']").should( diff --git a/data/config.baseOntario.js b/data/config.baseOntario.js index a8498898..a1e27d50 100644 --- a/data/config.baseOntario.js +++ b/data/config.baseOntario.js @@ -1,6 +1,5 @@ import { config as baseConfig } from './config.base.js'; export const config = Object.assign({}, baseConfig); -config.settings.contracts.provinceDefault = 'ON'; -config.settings.cemeteries.provinceDefault = 'ON'; +config.settings.provinceDefault = 'ON'; config.settings.fees.taxPercentageDefault = 13; export default config; diff --git a/data/config.baseOntario.ts b/data/config.baseOntario.ts index ee30a862..077fb234 100644 --- a/data/config.baseOntario.ts +++ b/data/config.baseOntario.ts @@ -2,9 +2,7 @@ import { config as baseConfig } from './config.base.js' export const config = Object.assign({}, baseConfig) -config.settings.contracts.provinceDefault = 'ON' - -config.settings.cemeteries.provinceDefault = 'ON' +config.settings.provinceDefault = 'ON' config.settings.fees.taxPercentageDefault = 13 diff --git a/data/config.baseSsm.js b/data/config.baseSsm.js index 2a0afd24..ea3bc42b 100644 --- a/data/config.baseSsm.js +++ b/data/config.baseSsm.js @@ -35,12 +35,11 @@ config.settings.burialSites.burialSiteNameSegments = { } } }; -config.settings.contracts.cityDefault = 'Sault Ste. Marie'; +config.settings.cityDefault = 'Sault Ste. Marie'; config.settings.contracts.prints = [ 'pdf/ssm.cemetery.burialPermit', 'pdf/ssm.cemetery.contract' ]; -config.settings.cemeteries.cityDefault = 'Sault Ste. Marie'; config.settings.workOrders.workOrderNumberLength = 6; config.settings.workOrders.workOrderMilestoneDateRecentBeforeDays = 7; config.settings.workOrders.workOrderMilestoneDateRecentAfterDays = 30; diff --git a/data/config.baseSsm.ts b/data/config.baseSsm.ts index 3965c51b..7059e2ef 100644 --- a/data/config.baseSsm.ts +++ b/data/config.baseSsm.ts @@ -41,14 +41,13 @@ config.settings.burialSites.burialSiteNameSegments = { } } -config.settings.contracts.cityDefault = 'Sault Ste. Marie' +config.settings.cityDefault = 'Sault Ste. Marie' + config.settings.contracts.prints = [ 'pdf/ssm.cemetery.burialPermit', 'pdf/ssm.cemetery.contract' ] -config.settings.cemeteries.cityDefault = 'Sault Ste. Marie' - config.settings.workOrders.workOrderNumberLength = 6 config.settings.workOrders.workOrderMilestoneDateRecentBeforeDays = 7 config.settings.workOrders.workOrderMilestoneDateRecentAfterDays = 30 diff --git a/data/config.defaultValues.d.ts b/data/config.defaultValues.d.ts index dc0cc417..e02a1d60 100644 --- a/data/config.defaultValues.d.ts +++ b/data/config.defaultValues.d.ts @@ -24,12 +24,10 @@ export declare const configDefaultValues: { 'aliases.externalReceiptNumber': string; 'aliases.workOrderOpenDate': string; 'aliases.workOrderCloseDate': string; - 'settings.cemeteries.cityDefault': string; - 'settings.cemeteries.provinceDefault': string; + 'settings.cityDefault': string; + 'settings.provinceDefault': string; 'settings.burialSites.burialSiteNameSegments': ConfigBurialSiteNameSegments; 'settings.contracts.burialSiteIdIsRequired': boolean; - 'settings.contracts.cityDefault': string; - 'settings.contracts.provinceDefault': string; 'settings.contracts.prints': string[]; 'settings.fees.taxPercentageDefault': number; 'settings.workOrders.workOrderNumberLength': number; diff --git a/data/config.defaultValues.js b/data/config.defaultValues.js index c176db9a..a6d88a17 100644 --- a/data/config.defaultValues.js +++ b/data/config.defaultValues.js @@ -23,8 +23,8 @@ export const configDefaultValues = { 'aliases.externalReceiptNumber': 'External Receipt Number', 'aliases.workOrderOpenDate': 'Order Date', 'aliases.workOrderCloseDate': 'Completion Date', - 'settings.cemeteries.cityDefault': '', - 'settings.cemeteries.provinceDefault': '', + 'settings.cityDefault': '', + 'settings.provinceDefault': '', 'settings.burialSites.burialSiteNameSegments': { separator: '-', segments: { @@ -38,8 +38,6 @@ export const configDefaultValues = { } }, 'settings.contracts.burialSiteIdIsRequired': true, - 'settings.contracts.cityDefault': '', - 'settings.contracts.provinceDefault': '', 'settings.contracts.prints': ['screen/contract'], 'settings.fees.taxPercentageDefault': 0, 'settings.workOrders.workOrderNumberLength': 6, diff --git a/data/config.defaultValues.ts b/data/config.defaultValues.ts index a4f83559..71415c3b 100644 --- a/data/config.defaultValues.ts +++ b/data/config.defaultValues.ts @@ -39,8 +39,8 @@ export const configDefaultValues = { 'aliases.workOrderOpenDate': 'Order Date', 'aliases.workOrderCloseDate': 'Completion Date', - 'settings.cemeteries.cityDefault': '', - 'settings.cemeteries.provinceDefault': '', + 'settings.cityDefault': '', + 'settings.provinceDefault': '', 'settings.burialSites.burialSiteNameSegments': { separator: '-', @@ -57,8 +57,6 @@ export const configDefaultValues = { 'settings.contracts.burialSiteIdIsRequired': true, - 'settings.contracts.cityDefault': '', - 'settings.contracts.provinceDefault': '', 'settings.contracts.prints': ['screen/contract'], 'settings.fees.taxPercentageDefault': 0, diff --git a/database/addFuneralHome.d.ts b/database/addFuneralHome.d.ts new file mode 100644 index 00000000..46e3a817 --- /dev/null +++ b/database/addFuneralHome.d.ts @@ -0,0 +1,10 @@ +export interface AddForm { + funeralHomeName: string; + funeralHomeAddress1: string; + funeralHomeAddress2: string; + funeralHomeCity: string; + funeralHomeProvince: string; + funeralHomePostalCode: string; + funeralHomePhoneNumber: string; +} +export default function addFuneralHome(addForm: AddForm, user: User): Promise; diff --git a/database/addFuneralHome.js b/database/addFuneralHome.js new file mode 100644 index 00000000..e83bf842 --- /dev/null +++ b/database/addFuneralHome.js @@ -0,0 +1,15 @@ +import { acquireConnection } from './pool.js'; +export default async function addFuneralHome(addForm, user) { + const database = await acquireConnection(); + const rightNowMillis = Date.now(); + const result = database + .prepare(`insert into FuneralHomes ( + funeralHomeName, funeralHomeAddress1, funeralHomeAddress2, + funeralHomeCity, funeralHomeProvince, funeralHomePostalCode, funeralHomePhoneNumber, + recordCreate_userName, recordCreate_timeMillis, + recordUpdate_userName, recordUpdate_timeMillis) + values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`) + .run(addForm.funeralHomeName, addForm.funeralHomeAddress1, addForm.funeralHomeAddress2, addForm.funeralHomeCity, addForm.funeralHomeProvince, addForm.funeralHomePostalCode, addForm.funeralHomePhoneNumber, user.userName, rightNowMillis, user.userName, rightNowMillis); + database.release(); + return result.lastInsertRowid; +} diff --git a/database/addFuneralHome.ts b/database/addFuneralHome.ts new file mode 100644 index 00000000..f96ea474 --- /dev/null +++ b/database/addFuneralHome.ts @@ -0,0 +1,47 @@ +import { acquireConnection } from './pool.js' + +export interface AddForm { + funeralHomeName: string + funeralHomeAddress1: string + funeralHomeAddress2: string + funeralHomeCity: string + funeralHomeProvince: string + funeralHomePostalCode: string + funeralHomePhoneNumber: string +} + +export default async function addFuneralHome( + addForm: AddForm, + user: User +): Promise { + const database = await acquireConnection() + + const rightNowMillis = Date.now() + + const result = database + .prepare( + `insert into FuneralHomes ( + funeralHomeName, funeralHomeAddress1, funeralHomeAddress2, + funeralHomeCity, funeralHomeProvince, funeralHomePostalCode, funeralHomePhoneNumber, + recordCreate_userName, recordCreate_timeMillis, + recordUpdate_userName, recordUpdate_timeMillis) + values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` + ) + .run( + addForm.funeralHomeName, + addForm.funeralHomeAddress1, + addForm.funeralHomeAddress2, + addForm.funeralHomeCity, + addForm.funeralHomeProvince, + addForm.funeralHomePostalCode, + addForm.funeralHomePhoneNumber, + user.userName, + rightNowMillis, + user.userName, + rightNowMillis + ) + + database.release() + + return result.lastInsertRowid as number +} diff --git a/database/cleanupDatabase.js b/database/cleanupDatabase.js index 87919327..c7750b54 100644 --- a/database/cleanupDatabase.js +++ b/database/cleanupDatabase.js @@ -23,7 +23,7 @@ export default async function cleanupDatabase(user) { .prepare('delete from WorkOrderComments where recordDelete_timeMillis <= ?') .run(recordDeleteTimeMillisMin).changes; /* - * Work Order Burial Site Contracts + * Work Order Contracts */ inactivatedRecordCount += database .prepare(`update WorkOrderContracts @@ -181,7 +181,7 @@ export default async function cleanupDatabase(user) { and contractTypeFieldId not in (select contractTypeFieldId from ContractFields)`) .run(recordDeleteTimeMillisMin).changes; /* - * Occupancy Type Prints + * Contract Type Prints */ inactivatedRecordCount += database .prepare(`update ContractTypePrints @@ -246,7 +246,7 @@ export default async function cleanupDatabase(user) { and burialSiteId not in (select burialSiteId from BurialSiteComments) and burialSiteId not in (select burialSiteId from BurialSiteFields) and burialSiteId not in (select burialSiteId from Contracts) - and burialSiteId not in (select burialSiteId from WorkOrderLots)`) + and burialSiteId not in (select burialSiteId from WorkOrderBurialSites)`) .run(recordDeleteTimeMillisMin).changes; /* * Burial Site Statuses diff --git a/database/cleanupDatabase.ts b/database/cleanupDatabase.ts index cf6dca1f..144abbec 100644 --- a/database/cleanupDatabase.ts +++ b/database/cleanupDatabase.ts @@ -37,7 +37,7 @@ export default async function cleanupDatabase( .run(recordDeleteTimeMillisMin).changes /* - * Work Order Burial Site Contracts + * Work Order Contracts */ inactivatedRecordCount += database @@ -271,7 +271,7 @@ export default async function cleanupDatabase( .run(recordDeleteTimeMillisMin).changes /* - * Occupancy Type Prints + * Contract Type Prints */ inactivatedRecordCount += database @@ -364,7 +364,7 @@ export default async function cleanupDatabase( and burialSiteId not in (select burialSiteId from BurialSiteComments) and burialSiteId not in (select burialSiteId from BurialSiteFields) and burialSiteId not in (select burialSiteId from Contracts) - and burialSiteId not in (select burialSiteId from WorkOrderLots)` + and burialSiteId not in (select burialSiteId from WorkOrderBurialSites)` ) .run(recordDeleteTimeMillisMin).changes diff --git a/database/deleteRecord.d.ts b/database/deleteRecord.d.ts index 8ecf9f25..b5323573 100644 --- a/database/deleteRecord.d.ts +++ b/database/deleteRecord.d.ts @@ -1,3 +1,3 @@ -type RecordTable = 'FeeCategories' | 'Fees' | 'BurialSites' | 'BurialSiteComments' | 'Contracts' | 'ContractComments' | 'BurialSiteStatuses' | 'BurialSiteTypes' | 'BurialSiteTypeFields' | 'Cemeteries' | 'ContractTypes' | 'ContractTypeFields' | 'WorkOrders' | 'WorkOrderComments' | 'WorkOrderMilestones' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes'; +type RecordTable = 'FeeCategories' | 'Fees' | 'BurialSites' | 'BurialSiteComments' | 'Contracts' | 'ContractComments' | 'BurialSiteStatuses' | 'BurialSiteTypes' | 'BurialSiteTypeFields' | 'Cemeteries' | 'FuneralHomes' | 'ContractTypes' | 'ContractTypeFields' | 'WorkOrders' | 'WorkOrderComments' | 'WorkOrderMilestones' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes'; export declare function deleteRecord(recordTable: RecordTable, recordId: number | string, user: User): Promise; export {}; diff --git a/database/deleteRecord.js b/database/deleteRecord.js index eef67d90..8a096af5 100644 --- a/database/deleteRecord.js +++ b/database/deleteRecord.js @@ -11,6 +11,7 @@ recordIdColumns.set('BurialSiteStatuses', 'burialSiteStatusId'); recordIdColumns.set('BurialSiteTypes', 'burialSiteTypeId'); recordIdColumns.set('BurialSiteTypeFields', 'burialSiteTypeFieldId'); recordIdColumns.set('Cemeteries', 'cemeteryId'); +recordIdColumns.set('FuneralHomes', 'funeralHomeId'); recordIdColumns.set('ContractTypes', 'contractTypeId'); recordIdColumns.set('ContractTypeFields', 'contractTypeFieldId'); recordIdColumns.set('WorkOrders', 'workOrderId'); diff --git a/database/deleteRecord.ts b/database/deleteRecord.ts index a5a17a0c..3bf0c442 100644 --- a/database/deleteRecord.ts +++ b/database/deleteRecord.ts @@ -13,6 +13,7 @@ type RecordTable = | 'BurialSiteTypes' | 'BurialSiteTypeFields' | 'Cemeteries' + | 'FuneralHomes' | 'ContractTypes' | 'ContractTypeFields' | 'WorkOrders' @@ -32,6 +33,7 @@ recordIdColumns.set('BurialSiteStatuses', 'burialSiteStatusId') recordIdColumns.set('BurialSiteTypes', 'burialSiteTypeId') recordIdColumns.set('BurialSiteTypeFields', 'burialSiteTypeFieldId') recordIdColumns.set('Cemeteries', 'cemeteryId') +recordIdColumns.set('FuneralHomes', 'funeralHomeId') recordIdColumns.set('ContractTypes', 'contractTypeId') recordIdColumns.set('ContractTypeFields', 'contractTypeFieldId') recordIdColumns.set('WorkOrders', 'workOrderId') diff --git a/database/getFuneralHome.d.ts b/database/getFuneralHome.d.ts new file mode 100644 index 00000000..c33ac8e5 --- /dev/null +++ b/database/getFuneralHome.d.ts @@ -0,0 +1,2 @@ +import type { FuneralHome } from '../types/recordTypes.js'; +export default function getFuneralHome(funeralHomeId: number | string): Promise; diff --git a/database/getFuneralHome.js b/database/getFuneralHome.js new file mode 100644 index 00000000..dbde71eb --- /dev/null +++ b/database/getFuneralHome.js @@ -0,0 +1,15 @@ +import { acquireConnection } from './pool.js'; +export default async function getFuneralHome(funeralHomeId) { + const database = await acquireConnection(); + const funeralHome = database + .prepare(`select funeralHomeId, funeralHomeName, + funeralHomeAddress1, funeralHomeAddress2, + funeralHomeCity, funeralHomeProvince, funeralHomePostalCode, funeralHomePhoneNumber + from FuneralHomes f + where f.recordDelete_timeMillis is null + and f.funeralHomeId = ? + order by f.funeralHomeName, f.funeralHomeId`) + .get(funeralHomeId); + database.release(); + return funeralHome; +} diff --git a/database/getFuneralHome.ts b/database/getFuneralHome.ts new file mode 100644 index 00000000..2e2eef24 --- /dev/null +++ b/database/getFuneralHome.ts @@ -0,0 +1,25 @@ +import type { Cemetery, FuneralHome } from '../types/recordTypes.js' + +import { acquireConnection } from './pool.js' + +export default async function getFuneralHome( + funeralHomeId: number | string +): Promise { + const database = await acquireConnection() + + const funeralHome = database + .prepare( + `select funeralHomeId, funeralHomeName, + funeralHomeAddress1, funeralHomeAddress2, + funeralHomeCity, funeralHomeProvince, funeralHomePostalCode, funeralHomePhoneNumber + from FuneralHomes f + where f.recordDelete_timeMillis is null + and f.funeralHomeId = ? + order by f.funeralHomeName, f.funeralHomeId` + ) + .get(funeralHomeId) as Cemetery | undefined + + database.release() + + return funeralHome +} diff --git a/database/getFuneralHomes.d.ts b/database/getFuneralHomes.d.ts new file mode 100644 index 00000000..4fb76855 --- /dev/null +++ b/database/getFuneralHomes.d.ts @@ -0,0 +1,2 @@ +import type { FuneralHome } from '../types/recordTypes.js'; +export default function getFuneralHomes(): Promise; diff --git a/database/getFuneralHomes.js b/database/getFuneralHomes.js new file mode 100644 index 00000000..e61010b4 --- /dev/null +++ b/database/getFuneralHomes.js @@ -0,0 +1,14 @@ +import { acquireConnection } from './pool.js'; +export default async function getFuneralHomes() { + const database = await acquireConnection(); + const funeralHomes = database + .prepare(`select funeralHomeId, funeralHomeName, + funeralHomeAddress1, funeralHomeAddress2, + funeralHomeCity, funeralHomeProvince, funeralHomePostalCode, funeralHomePhoneNumber + from FuneralHomes f + where f.recordDelete_timeMillis is null + order by f.funeralHomeName, f.funeralHomeId`) + .all(); + database.release(); + return funeralHomes; +} diff --git a/database/getFuneralHomes.ts b/database/getFuneralHomes.ts new file mode 100644 index 00000000..e505551d --- /dev/null +++ b/database/getFuneralHomes.ts @@ -0,0 +1,22 @@ +import type { Cemetery, FuneralHome } from '../types/recordTypes.js' + +import { acquireConnection } from './pool.js' + +export default async function getFuneralHomes(): Promise { + const database = await acquireConnection() + + const funeralHomes = database + .prepare( + `select funeralHomeId, funeralHomeName, + funeralHomeAddress1, funeralHomeAddress2, + funeralHomeCity, funeralHomeProvince, funeralHomePostalCode, funeralHomePhoneNumber + from FuneralHomes f + where f.recordDelete_timeMillis is null + order by f.funeralHomeName, f.funeralHomeId` + ) + .all() as Cemetery[] + + database.release() + + return funeralHomes +} diff --git a/database/getReportData.js b/database/getReportData.js index 3fd7f1ad..89ad396b 100644 --- a/database/getReportData.js +++ b/database/getReportData.js @@ -28,11 +28,7 @@ export default async function getReportData(reportName, reportParameters = {}) { case 'burialSites-byBurialSiteTypeId': { sql = `select l.burialSiteId, m.cemeteryName, - l.burialSiteNameSegment1, - l.burialSiteNameSegment2, - l.burialSiteNameSegment3, - l.burialSiteNameSegment4, - l.burialSiteNameSegment5, + l.burialSiteName, t.burialSiteType, s.burialSiteStatus from BurialSites l @@ -47,11 +43,7 @@ export default async function getReportData(reportName, reportParameters = {}) { case 'burialSites-byBurialSiteStatusId': { sql = `select l.burialSiteId, m.cemeteryName, - l.burialSiteNameSegment1, - l.burialSiteNameSegment2, - l.burialSiteNameSegment3, - l.burialSiteNameSegment4, - l.burialSiteNameSegment5, + l.burialSiteName, t.burialSiteType, s.burialSiteStatus from BurialSites l @@ -66,11 +58,7 @@ export default async function getReportData(reportName, reportParameters = {}) { case 'burialSites-byCemeteryId': { sql = `select l.burialSiteId, m.cemeteryName, - l.burialSiteNameSegment1, - l.burialSiteNameSegment2, - l.burialSiteNameSegment3, - l.burialSiteNameSegment4, - l.burialSiteNameSegment5, + l.burialSiteName, t.burialSiteType, s.burialSiteStatus from BurialSites l @@ -96,11 +84,7 @@ export default async function getReportData(reportName, reportParameters = {}) { } case 'contracts-current-byCemeteryId': { sql = `select o.contractId, - l.burialSiteNameSegment1, - l.burialSiteNameSegment2, - l.burialSiteNameSegment3, - l.burialSiteNameSegment4, - l.burialSiteNameSegment5, + l.burialSiteName, m.cemeteryName, ot.contractType, o.contractStartDate, diff --git a/database/getReportData.ts b/database/getReportData.ts index c6f336d4..7bd4e9d0 100644 --- a/database/getReportData.ts +++ b/database/getReportData.ts @@ -46,11 +46,7 @@ export default async function getReportData( case 'burialSites-byBurialSiteTypeId': { sql = `select l.burialSiteId, m.cemeteryName, - l.burialSiteNameSegment1, - l.burialSiteNameSegment2, - l.burialSiteNameSegment3, - l.burialSiteNameSegment4, - l.burialSiteNameSegment5, + l.burialSiteName, t.burialSiteType, s.burialSiteStatus from BurialSites l @@ -68,11 +64,7 @@ export default async function getReportData( case 'burialSites-byBurialSiteStatusId': { sql = `select l.burialSiteId, m.cemeteryName, - l.burialSiteNameSegment1, - l.burialSiteNameSegment2, - l.burialSiteNameSegment3, - l.burialSiteNameSegment4, - l.burialSiteNameSegment5, + l.burialSiteName, t.burialSiteType, s.burialSiteStatus from BurialSites l @@ -90,11 +82,7 @@ export default async function getReportData( case 'burialSites-byCemeteryId': { sql = `select l.burialSiteId, m.cemeteryName, - l.burialSiteNameSegment1, - l.burialSiteNameSegment2, - l.burialSiteNameSegment3, - l.burialSiteNameSegment4, - l.burialSiteNameSegment5, + l.burialSiteName, t.burialSiteType, s.burialSiteStatus from BurialSites l @@ -126,11 +114,7 @@ export default async function getReportData( case 'contracts-current-byCemeteryId': { sql = `select o.contractId, - l.burialSiteNameSegment1, - l.burialSiteNameSegment2, - l.burialSiteNameSegment3, - l.burialSiteNameSegment4, - l.burialSiteNameSegment5, + l.burialSiteName, m.cemeteryName, ot.contractType, o.contractStartDate, diff --git a/database/updateFuneralHome.d.ts b/database/updateFuneralHome.d.ts new file mode 100644 index 00000000..dee8c5e8 --- /dev/null +++ b/database/updateFuneralHome.d.ts @@ -0,0 +1,11 @@ +export interface UpdateForm { + funeralHomeId: number | string; + funeralHomeName: string; + funeralHomeAddress1: string; + funeralHomeAddress2: string; + funeralHomeCity: string; + funeralHomeProvince: string; + funeralHomePostalCode: string; + funeralHomePhoneNumber: string; +} +export default function updateFuneralHome(updateForm: UpdateForm, user: User): Promise; diff --git a/database/updateFuneralHome.js b/database/updateFuneralHome.js new file mode 100644 index 00000000..b0b6aa99 --- /dev/null +++ b/database/updateFuneralHome.js @@ -0,0 +1,16 @@ +import { acquireConnection } from './pool.js'; +export default async function updateFuneralHome(updateForm, user) { + const database = await acquireConnection(); + const rightNowMillis = Date.now(); + const result = database + .prepare(`update FuneralHomes + set funeralHomeName = ?, + funeralHomeAddress1 = ?, funeralHomeAddress2 = ?, + funeralHomeCity = ?, funeralHomeProvince = ?, funeralHomePostalCode = ?, funeralHomePhoneNumber = ?, + recordUpdate_userName = ?, recordUpdate_timeMillis = ? + where recordDelete_timeMillis is null + and funeralHomeId = ?`) + .run(updateForm.funeralHomeName, updateForm.funeralHomeAddress1, updateForm.funeralHomeAddress2, updateForm.funeralHomeCity, updateForm.funeralHomeProvince, updateForm.funeralHomePostalCode, updateForm.funeralHomePhoneNumber, user.userName, rightNowMillis, updateForm.funeralHomeId); + database.release(); + return result.changes > 0; +} diff --git a/database/updateFuneralHome.ts b/database/updateFuneralHome.ts new file mode 100644 index 00000000..2354fe33 --- /dev/null +++ b/database/updateFuneralHome.ts @@ -0,0 +1,48 @@ +import { acquireConnection } from './pool.js' + +export interface UpdateForm { + funeralHomeId: number | string + funeralHomeName: string + funeralHomeAddress1: string + funeralHomeAddress2: string + funeralHomeCity: string + funeralHomeProvince: string + funeralHomePostalCode: string + funeralHomePhoneNumber: string +} + +export default async function updateFuneralHome( + updateForm: UpdateForm, + user: User +): Promise { + const database = await acquireConnection() + + const rightNowMillis = Date.now() + + const result = database + .prepare( + `update FuneralHomes + set funeralHomeName = ?, + funeralHomeAddress1 = ?, funeralHomeAddress2 = ?, + funeralHomeCity = ?, funeralHomeProvince = ?, funeralHomePostalCode = ?, funeralHomePhoneNumber = ?, + recordUpdate_userName = ?, recordUpdate_timeMillis = ? + where recordDelete_timeMillis is null + and funeralHomeId = ?` + ) + .run( + updateForm.funeralHomeName, + updateForm.funeralHomeAddress1, + updateForm.funeralHomeAddress2, + updateForm.funeralHomeCity, + updateForm.funeralHomeProvince, + updateForm.funeralHomePostalCode, + updateForm.funeralHomePhoneNumber, + user.userName, + rightNowMillis, + updateForm.funeralHomeId + ) + + database.release() + + return result.changes > 0 +} diff --git a/handlers/admin-get/tables.js b/handlers/admin-get/tables.js index 9caed8fd..9009f759 100644 --- a/handlers/admin-get/tables.js +++ b/handlers/admin-get/tables.js @@ -1,15 +1,12 @@ -import { getSolidIconClasses } from '@cityssm/font-awesome-v5-iconclasses'; import { getBurialSiteStatuses, getWorkOrderMilestoneTypes, getWorkOrderTypes } from '../../helpers/functions.cache.js'; export default async function handler(_request, response) { const workOrderTypes = await getWorkOrderTypes(); const workOrderMilestoneTypes = await getWorkOrderMilestoneTypes(); const burialSiteStatuses = await getBurialSiteStatuses(); - const fontAwesomeIconClasses = await getSolidIconClasses(); response.render('admin-tables', { headTitle: 'Config Table Management', workOrderTypes, workOrderMilestoneTypes, - burialSiteStatuses, - fontAwesomeIconClasses + burialSiteStatuses }); } diff --git a/handlers/admin-get/tables.ts b/handlers/admin-get/tables.ts index 47f786f7..a62de824 100644 --- a/handlers/admin-get/tables.ts +++ b/handlers/admin-get/tables.ts @@ -15,13 +15,10 @@ export default async function handler( const workOrderMilestoneTypes = await getWorkOrderMilestoneTypes() const burialSiteStatuses = await getBurialSiteStatuses() - const fontAwesomeIconClasses = await getSolidIconClasses() - response.render('admin-tables', { headTitle: 'Config Table Management', workOrderTypes, workOrderMilestoneTypes, - burialSiteStatuses, - fontAwesomeIconClasses + burialSiteStatuses }) } diff --git a/handlers/api-get/milestoneICS.js b/handlers/api-get/milestoneICS.js index 4984ad2d..c2c8661f 100644 --- a/handlers/api-get/milestoneICS.js +++ b/handlers/api-get/milestoneICS.js @@ -60,7 +60,7 @@ function buildEventDescriptionHTML_occupancies(request, milestone) { descriptionHTML += ` - ${escapeHTML(occupancy.occupancyType ?? '')} + ${escapeHTML(occupancy.contractType ?? '')} diff --git a/handlers/api-get/milestoneICS.ts b/handlers/api-get/milestoneICS.ts index a9f3020a..8a6a52d3 100644 --- a/handlers/api-get/milestoneICS.ts +++ b/handlers/api-get/milestoneICS.ts @@ -95,7 +95,7 @@ function buildEventDescriptionHTML_occupancies( descriptionHTML += ` - ${escapeHTML(occupancy.occupancyType ?? '')} + ${escapeHTML(occupancy.contractType ?? '')} diff --git a/handlers/cemeteries-get/new.js b/handlers/cemeteries-get/new.js index 1a425ca8..cd33aba0 100644 --- a/handlers/cemeteries-get/new.js +++ b/handlers/cemeteries-get/new.js @@ -2,8 +2,8 @@ import { getCemeterySVGs } from '../../helpers/cemeteries.helpers.js'; import { getConfigProperty } from '../../helpers/config.helpers.js'; export default async function handler(_request, response) { const cemetery = { - cemeteryCity: getConfigProperty('settings.cemeteries.cityDefault'), - cemeteryProvince: getConfigProperty('settings.cemeteries.provinceDefault') + cemeteryCity: getConfigProperty('settings.cityDefault'), + cemeteryProvince: getConfigProperty('settings.provinceDefault') }; const cemeterySVGs = await getCemeterySVGs(); response.render('cemetery-edit', { diff --git a/handlers/cemeteries-get/new.ts b/handlers/cemeteries-get/new.ts index 999023f1..74ed4ce9 100644 --- a/handlers/cemeteries-get/new.ts +++ b/handlers/cemeteries-get/new.ts @@ -9,8 +9,8 @@ export default async function handler( response: Response ): Promise { const cemetery: Cemetery = { - cemeteryCity: getConfigProperty('settings.cemeteries.cityDefault'), - cemeteryProvince: getConfigProperty('settings.cemeteries.provinceDefault') + cemeteryCity: getConfigProperty('settings.cityDefault'), + cemeteryProvince: getConfigProperty('settings.provinceDefault') } const cemeterySVGs = await getCemeterySVGs() diff --git a/handlers/funeralHomes-get/edit.d.ts b/handlers/funeralHomes-get/edit.d.ts new file mode 100644 index 00000000..19d32e4d --- /dev/null +++ b/handlers/funeralHomes-get/edit.d.ts @@ -0,0 +1,2 @@ +import type { Request, Response } from 'express'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/funeralHomes-get/edit.js b/handlers/funeralHomes-get/edit.js new file mode 100644 index 00000000..3f7cf9db --- /dev/null +++ b/handlers/funeralHomes-get/edit.js @@ -0,0 +1,14 @@ +import getFuneralHome from '../../database/getFuneralHome.js'; +import { getConfigProperty } from '../../helpers/config.helpers.js'; +export default async function handler(request, response) { + const funeralHome = await getFuneralHome(request.params.funeralHomeId); + if (funeralHome === undefined) { + response.redirect(`${getConfigProperty('reverseProxy.urlPrefix')}/funeralHomes/?error=funeralHomeIdNotFound`); + return; + } + response.render('funeralHome-edit', { + headTitle: funeralHome.funeralHomeName, + isCreate: false, + funeralHome + }); +} diff --git a/handlers/funeralHomes-get/edit.ts b/handlers/funeralHomes-get/edit.ts new file mode 100644 index 00000000..daf2d7e2 --- /dev/null +++ b/handlers/funeralHomes-get/edit.ts @@ -0,0 +1,24 @@ +import type { Request, Response } from 'express' + +import getFuneralHome from '../../database/getFuneralHome.js' +import { getConfigProperty } from '../../helpers/config.helpers.js' + +export default async function handler( + request: Request, + response: Response +): Promise { + const funeralHome = await getFuneralHome(request.params.funeralHomeId) + + if (funeralHome === undefined) { + response.redirect( + `${getConfigProperty('reverseProxy.urlPrefix')}/funeralHomes/?error=funeralHomeIdNotFound` + ) + return + } + + response.render('funeralHome-edit', { + headTitle: funeralHome.funeralHomeName, + isCreate: false, + funeralHome + }) +} diff --git a/handlers/funeralHomes-get/new.d.ts b/handlers/funeralHomes-get/new.d.ts new file mode 100644 index 00000000..f4584afd --- /dev/null +++ b/handlers/funeralHomes-get/new.d.ts @@ -0,0 +1,2 @@ +import type { Request, Response } from 'express'; +export default function handler(_request: Request, response: Response): void; diff --git a/handlers/funeralHomes-get/new.js b/handlers/funeralHomes-get/new.js new file mode 100644 index 00000000..9c35d88b --- /dev/null +++ b/handlers/funeralHomes-get/new.js @@ -0,0 +1,12 @@ +import { getConfigProperty } from '../../helpers/config.helpers.js'; +export default function handler(_request, response) { + const funeralHome = { + funeralHomeCity: getConfigProperty('settings.cityDefault'), + funeralHomeProvince: getConfigProperty('settings.provinceDefault') + }; + response.render('funeralHome-edit', { + headTitle: `Create a Funeral Home`, + isCreate: true, + funeralHome + }); +} diff --git a/handlers/funeralHomes-get/new.ts b/handlers/funeralHomes-get/new.ts new file mode 100644 index 00000000..92c7b7d1 --- /dev/null +++ b/handlers/funeralHomes-get/new.ts @@ -0,0 +1,17 @@ +import type { Request, Response } from 'express' + +import { getConfigProperty } from '../../helpers/config.helpers.js' +import type { FuneralHome } from '../../types/recordTypes.js' + +export default function handler(_request: Request, response: Response): void { + const funeralHome: FuneralHome = { + funeralHomeCity: getConfigProperty('settings.cityDefault'), + funeralHomeProvince: getConfigProperty('settings.provinceDefault') + } + + response.render('funeralHome-edit', { + headTitle: `Create a Funeral Home`, + isCreate: true, + funeralHome + }) +} diff --git a/handlers/funeralHomes-get/search.d.ts b/handlers/funeralHomes-get/search.d.ts new file mode 100644 index 00000000..4bcb65f6 --- /dev/null +++ b/handlers/funeralHomes-get/search.d.ts @@ -0,0 +1,2 @@ +import type { Request, Response } from 'express'; +export default function handler(_request: Request, response: Response): Promise; diff --git a/handlers/funeralHomes-get/search.js b/handlers/funeralHomes-get/search.js new file mode 100644 index 00000000..969419b5 --- /dev/null +++ b/handlers/funeralHomes-get/search.js @@ -0,0 +1,8 @@ +import getFuneralHomes from '../../database/getFuneralHomes.js'; +export default async function handler(_request, response) { + const funeralHomes = await getFuneralHomes(); + response.render('funeralHome-search', { + headTitle: `Funeral Home Search`, + funeralHomes + }); +} diff --git a/handlers/funeralHomes-get/search.ts b/handlers/funeralHomes-get/search.ts new file mode 100644 index 00000000..f90aa34e --- /dev/null +++ b/handlers/funeralHomes-get/search.ts @@ -0,0 +1,15 @@ +import type { Request, Response } from 'express' + +import getFuneralHomes from '../../database/getFuneralHomes.js' + +export default async function handler( + _request: Request, + response: Response +): Promise { + const funeralHomes = await getFuneralHomes() + + response.render('funeralHome-search', { + headTitle: `Funeral Home Search`, + funeralHomes + }) +} diff --git a/handlers/funeralHomes-get/view.d.ts b/handlers/funeralHomes-get/view.d.ts new file mode 100644 index 00000000..19d32e4d --- /dev/null +++ b/handlers/funeralHomes-get/view.d.ts @@ -0,0 +1,2 @@ +import type { Request, Response } from 'express'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/funeralHomes-get/view.js b/handlers/funeralHomes-get/view.js new file mode 100644 index 00000000..190983c2 --- /dev/null +++ b/handlers/funeralHomes-get/view.js @@ -0,0 +1,14 @@ +import getFuneralHome from '../../database/getFuneralHome.js'; +import { getConfigProperty } from '../../helpers/config.helpers.js'; +export default async function handler(request, response) { + const funeralHome = await getFuneralHome(request.params.funeralHomeId); + if (funeralHome === undefined) { + response.redirect(`${getConfigProperty('reverseProxy.urlPrefix')}/funeralHomes/?error=funeralHomeIdNotFound`); + return; + } + response.render('funeralHome-view', { + headTitle: funeralHome.funeralHomeName, + isCreate: false, + funeralHome + }); +} diff --git a/handlers/funeralHomes-get/view.ts b/handlers/funeralHomes-get/view.ts new file mode 100644 index 00000000..0c8c6f25 --- /dev/null +++ b/handlers/funeralHomes-get/view.ts @@ -0,0 +1,24 @@ +import type { Request, Response } from 'express' + +import getFuneralHome from '../../database/getFuneralHome.js' +import { getConfigProperty } from '../../helpers/config.helpers.js' + +export default async function handler( + request: Request, + response: Response +): Promise { + const funeralHome = await getFuneralHome(request.params.funeralHomeId) + + if (funeralHome === undefined) { + response.redirect( + `${getConfigProperty('reverseProxy.urlPrefix')}/funeralHomes/?error=funeralHomeIdNotFound` + ) + return + } + + response.render('funeralHome-view', { + headTitle: funeralHome.funeralHomeName, + isCreate: false, + funeralHome + }) +} diff --git a/handlers/funeralHomes-post/doCreateFuneralHome.d.ts b/handlers/funeralHomes-post/doCreateFuneralHome.d.ts new file mode 100644 index 00000000..5ca3c69d --- /dev/null +++ b/handlers/funeralHomes-post/doCreateFuneralHome.d.ts @@ -0,0 +1,3 @@ +import type { Request, Response } from 'express'; +import { type AddForm } from '../../database/addFuneralHome.js'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/funeralHomes-post/doCreateFuneralHome.js b/handlers/funeralHomes-post/doCreateFuneralHome.js new file mode 100644 index 00000000..588d107e --- /dev/null +++ b/handlers/funeralHomes-post/doCreateFuneralHome.js @@ -0,0 +1,8 @@ +import addFuneralHome from '../../database/addFuneralHome.js'; +export default async function handler(request, response) { + const funeralHomeId = await addFuneralHome(request.body, request.session.user); + response.json({ + success: true, + funeralHomeId + }); +} diff --git a/handlers/funeralHomes-post/doCreateFuneralHome.ts b/handlers/funeralHomes-post/doCreateFuneralHome.ts new file mode 100644 index 00000000..88cc71f9 --- /dev/null +++ b/handlers/funeralHomes-post/doCreateFuneralHome.ts @@ -0,0 +1,18 @@ +import type { Request, Response } from 'express' + +import addFuneralHome, { type AddForm } from '../../database/addFuneralHome.js' + +export default async function handler( + request: Request, + response: Response +): Promise { + const funeralHomeId = await addFuneralHome( + request.body, + request.session.user as User + ) + + response.json({ + success: true, + funeralHomeId + }) +} diff --git a/handlers/funeralHomes-post/doDeleteFuneralHome.d.ts b/handlers/funeralHomes-post/doDeleteFuneralHome.d.ts new file mode 100644 index 00000000..33acaa76 --- /dev/null +++ b/handlers/funeralHomes-post/doDeleteFuneralHome.d.ts @@ -0,0 +1,4 @@ +import type { Request, Response } from 'express'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/funeralHomes-post/doDeleteFuneralHome.js b/handlers/funeralHomes-post/doDeleteFuneralHome.js new file mode 100644 index 00000000..95027a6a --- /dev/null +++ b/handlers/funeralHomes-post/doDeleteFuneralHome.js @@ -0,0 +1,7 @@ +import { deleteRecord } from '../../database/deleteRecord.js'; +export default async function handler(request, response) { + const success = await deleteRecord('FuneralHomes', request.body.funeralHomeId, request.session.user); + response.json({ + success + }); +} diff --git a/handlers/funeralHomes-post/doDeleteFuneralHome.ts b/handlers/funeralHomes-post/doDeleteFuneralHome.ts new file mode 100644 index 00000000..8a7fe099 --- /dev/null +++ b/handlers/funeralHomes-post/doDeleteFuneralHome.ts @@ -0,0 +1,18 @@ +import type { Request, Response } from 'express' + +import { deleteRecord } from '../../database/deleteRecord.js' + +export default async function handler( + request: Request, + response: Response +): Promise { + const success = await deleteRecord( + 'FuneralHomes', + request.body.funeralHomeId, + request.session.user as User + ) + + response.json({ + success + }) +} diff --git a/handlers/funeralHomes-post/doUpdateFuneralHome.d.ts b/handlers/funeralHomes-post/doUpdateFuneralHome.d.ts new file mode 100644 index 00000000..25c89065 --- /dev/null +++ b/handlers/funeralHomes-post/doUpdateFuneralHome.d.ts @@ -0,0 +1,3 @@ +import type { Request, Response } from 'express'; +import { type UpdateForm } from '../../database/updateFuneralHome.js'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/funeralHomes-post/doUpdateFuneralHome.js b/handlers/funeralHomes-post/doUpdateFuneralHome.js new file mode 100644 index 00000000..d476b065 --- /dev/null +++ b/handlers/funeralHomes-post/doUpdateFuneralHome.js @@ -0,0 +1,8 @@ +import updateFuneralHome from '../../database/updateFuneralHome.js'; +export default async function handler(request, response) { + const success = await updateFuneralHome(request.body, request.session.user); + response.json({ + success, + funeralHomeId: request.body.funeralHomeId + }); +} diff --git a/handlers/funeralHomes-post/doUpdateFuneralHome.ts b/handlers/funeralHomes-post/doUpdateFuneralHome.ts new file mode 100644 index 00000000..94086a5f --- /dev/null +++ b/handlers/funeralHomes-post/doUpdateFuneralHome.ts @@ -0,0 +1,20 @@ +import type { Request, Response } from 'express' + +import updateFuneralHome, { + type UpdateForm +} from '../../database/updateFuneralHome.js' + +export default async function handler( + request: Request, + response: Response +): Promise { + const success = await updateFuneralHome( + request.body, + request.session.user as User + ) + + response.json({ + success, + funeralHomeId: request.body.funeralHomeId + }) +} diff --git a/handlers/reports-get/reportName.d.ts b/handlers/reports-get/reportName.d.ts index 19d32e4d..bb919204 100644 --- a/handlers/reports-get/reportName.d.ts +++ b/handlers/reports-get/reportName.d.ts @@ -1,2 +1,5 @@ import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): Promise; +import { type ReportParameters } from '../../database/getReportData.js'; +export default function handler(request: Request<{ + reportName: string; +}, unknown, unknown, ReportParameters>, response: Response): Promise; diff --git a/handlers/reports-get/reportName.ts b/handlers/reports-get/reportName.ts index 2cf9cdc3..d0b5206a 100644 --- a/handlers/reports-get/reportName.ts +++ b/handlers/reports-get/reportName.ts @@ -6,14 +6,14 @@ import getReportData, { } from '../../database/getReportData.js' export default async function handler( - request: Request, + request: Request<{ reportName: string }, unknown, unknown, ReportParameters>, response: Response ): Promise { const reportName = request.params.reportName const rows = await getReportData( reportName, - request.query as ReportParameters + request.query ) if (rows === undefined) { diff --git a/public/html/adminOccupancyTypes-addOccupancyType.html b/public/html/adminContractTypes-add.html similarity index 68% rename from public/html/adminOccupancyTypes-addOccupancyType.html rename to public/html/adminContractTypes-add.html index e1e5b8c0..3eaf5cc5 100644 --- a/public/html/adminOccupancyTypes-addOccupancyType.html +++ b/public/html/adminContractTypes-add.html @@ -3,7 +3,7 @@