From 06f6874298c36f38388aae28d35fbe13bd3ef287 Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Tue, 25 Feb 2025 13:17:01 -0500 Subject: [PATCH] major refactoring --- database/addWorkOrderBurialSite.d.ts | 2 +- database/addWorkOrderBurialSite.js | 18 +- database/addWorkOrderBurialSite.ts | 26 +- database/addWorkOrderBurialSiteContract.d.ts | 2 +- database/addWorkOrderBurialSiteContract.js | 2 +- database/addWorkOrderBurialSiteContract.ts | 2 +- database/getNextBurialSiteId.js | 5 +- database/getNextBurialSiteId.ts | 5 +- database/getPastLotOccupancyOccupants.d.ts | 9 - database/getPastLotOccupancyOccupants.js | 39 - database/getPastLotOccupancyOccupants.ts | 70 - database/getPreviousBurialSiteId.d.ts | 1 + database/getPreviousBurialSiteId.js | 14 + database/getPreviousBurialSiteId.ts | 22 + database/getPreviousLotId.d.ts | 1 - database/getPreviousLotId.js | 18 - database/getPreviousLotId.ts | 36 - database/getWorkOrder.js | 8 +- database/getWorkOrder.ts | 8 +- database/getWorkOrderMilestones.js | 24 +- database/getWorkOrderMilestones.ts | 26 +- database/getWorkOrders.d.ts | 2 +- database/getWorkOrders.js | 36 +- database/getWorkOrders.ts | 38 +- database/updateBurialSiteContractComment.d.ts | 4 +- database/updateBurialSiteContractComment.ts | 4 +- database/updateLotOccupancyOccupant.d.ts | 2 +- database/updateLotOccupancyOccupant.js | 2 +- database/updateLotOccupancyOccupant.ts | 2 +- handlers/api-get/milestoneICS.js | 54 +- handlers/api-get/milestoneICS.ts | 54 +- .../doSearchBurialSiteContracts.d.ts | 3 +- .../doSearchBurialSiteContracts.js | 8 +- .../doSearchBurialSiteContracts.ts | 20 +- .../doUpdateBurialSiteContract.d.ts | 3 +- .../doUpdateBurialSiteContract.js | 4 +- .../doUpdateBurialSiteContract.ts | 14 +- .../doUpdateBurialSiteContractComment.d.ts | 5 +- .../doUpdateBurialSiteContractComment.js | 4 +- .../doUpdateBurialSiteContractComment.ts | 18 +- ...doUpdateBurialSiteContractFeeQuantity.d.ts | 3 +- .../doUpdateBurialSiteContractFeeQuantity.js | 4 +- .../doUpdateBurialSiteContractFeeQuantity.ts | 14 +- ...doUpdateBurialSiteContractTransaction.d.ts | 3 +- .../doUpdateBurialSiteContractTransaction.js | 8 +- .../doUpdateBurialSiteContractTransaction.ts | 20 +- handlers/print-get/pdf.js | 2 +- handlers/print-get/pdf.ts | 2 +- handlers/print-get/screen.js | 2 +- handlers/print-get/screen.ts | 2 +- handlers/reports-get/reportName.js | 4 +- handlers/reports-get/reportName.ts | 4 +- handlers/reports-get/search.js | 12 +- handlers/reports-get/search.ts | 17 +- handlers/workOrders-get/edit.js | 4 +- handlers/workOrders-get/edit.ts | 4 +- handlers/workOrders-get/view.js | 2 +- handlers/workOrders-get/view.ts | 2 +- .../doAddWorkOrderBurialSite.d.ts | 5 + .../doAddWorkOrderBurialSite.js | 19 + .../doAddWorkOrderBurialSite.ts | 37 + .../doAddWorkOrderBurialSiteContract.d.ts | 5 + ...js => doAddWorkOrderBurialSiteContract.js} | 10 +- .../doAddWorkOrderBurialSiteContract.ts | 39 + .../workOrders-post/doAddWorkOrderLot.d.ts | 2 - handlers/workOrders-post/doAddWorkOrderLot.js | 19 - handlers/workOrders-post/doAddWorkOrderLot.ts | 33 - .../doAddWorkOrderLotOccupancy.d.ts | 2 - .../doAddWorkOrderLotOccupancy.ts | 35 - .../doDeleteWorkOrderBurialSite.d.ts | 5 + .../doDeleteWorkOrderBurialSite.js | 16 + .../doDeleteWorkOrderBurialSite.ts | 31 + .../doDeleteWorkOrderBurialSiteContract.d.ts | 5 + .../doDeleteWorkOrderBurialSiteContract.js | 18 + .../doDeleteWorkOrderBurialSiteContract.ts | 38 + .../workOrders-post/doDeleteWorkOrderLot.d.ts | 2 - .../workOrders-post/doDeleteWorkOrderLot.js | 16 - .../workOrders-post/doDeleteWorkOrderLot.ts | 31 - .../doDeleteWorkOrderLotOccupancy.d.ts | 2 - .../doDeleteWorkOrderLotOccupancy.js | 18 - .../doDeleteWorkOrderLotOccupancy.ts | 34 - .../workOrders-post/doSearchWorkOrders.js | 2 +- .../workOrders-post/doSearchWorkOrders.ts | 2 +- .../doUpdateBurialSiteStatus.d.ts | 6 + .../doUpdateBurialSiteStatus.js | 16 + .../doUpdateBurialSiteStatus.ts | 35 + .../workOrders-post/doUpdateLotStatus.d.ts | 2 - handlers/workOrders-post/doUpdateLotStatus.js | 16 - handlers/workOrders-post/doUpdateLotStatus.ts | 31 - helpers/burialSiteContracts.helpers.d.ts | 4 + ...ancy.js => burialSiteContracts.helpers.js} | 14 +- helpers/burialSiteContracts.helpers.ts | 54 + helpers/functions.cache.d.ts | 4 +- helpers/functions.cache.js | 1 + helpers/functions.cache.ts | 18 +- helpers/functions.fee.d.ts | 4 +- helpers/functions.fee.ts | 4 +- helpers/functions.lotOccupancy.d.ts | 5 - helpers/functions.lotOccupancy.ts | 64 - helpers/functions.print.js | 2 +- helpers/functions.print.ts | 2 +- helpers/functions.sqlFilters.js | 1 + helpers/functions.sqlFilters.ts | 1 + public/javascripts/adminDatabase.d.ts | 1 - public/javascripts/adminDatabase.js | 70 - public/javascripts/adminFees.d.ts | 1 - public/javascripts/adminFees.js | 659 ------- public/javascripts/adminLotTypes.d.ts | 1 - public/javascripts/adminLotTypes.js | 409 ---- public/javascripts/adminOccupancyTypes.d.ts | 1 - public/javascripts/adminOccupancyTypes.js | 602 ------ public/javascripts/adminTables.d.ts | 1 - public/javascripts/adminTables.js | 716 ------- .../{lotEdit.ts => burialSite.edit.ts} | 14 +- .../{lotSearch.js => burialSite.search.js} | 0 .../{lotSearch.ts => burialSite.search.ts} | 12 +- .../{lotView.ts => burialSite.view.ts} | 0 ...ancyEdit.ts => burialSiteContract.edit.ts} | 30 +- ...Search.ts => burialSiteContract.search.ts} | 0 ...inLotTypes.ts => burialSiteTypes.admin.ts} | 18 +- .../{mapEdit.ts => cemetery.edit.ts} | 0 .../{mapSearch.ts => cemetery.search.ts} | 0 .../{mapView.ts => cemetery.view.ts} | 0 ...cupancyTypes.ts => contractTypes.admin.ts} | 28 +- .../{adminDatabase.ts => database.admin.ts} | 0 .../{adminFees.ts => fees.admin.ts} | 0 public/javascripts/lotEdit.d.ts | 1 - public/javascripts/lotEdit.js | 367 ---- public/javascripts/lotOccupancyEdit.d.ts | 1 - public/javascripts/lotOccupancyEdit.js | 1735 ----------------- public/javascripts/lotOccupancySearch.d.ts | 1 - public/javascripts/lotOccupancySearch.js | 152 -- public/javascripts/lotSearch.d.ts | 1 - public/javascripts/lotView.d.ts | 1 - public/javascripts/lotView.js | 9 - public/javascripts/mapEdit.d.ts | 1 - public/javascripts/mapEdit.js | 82 - public/javascripts/mapSearch.d.ts | 1 - public/javascripts/mapSearch.js | 101 - public/javascripts/mapView.d.ts | 1 - public/javascripts/mapView.js | 20 - .../{reportSearch.ts => report.search.ts} | 0 public/javascripts/reportSearch.d.ts | 0 public/javascripts/reportSearch.js | 28 - .../{adminTables.ts => tables.admin.ts} | 22 +- .../{workOrderEdit.ts => workOrder.edit.ts} | 36 +- ...ndar.ts => workOrder.milestoneCalendar.ts} | 2 +- ...rkOrderOutlook.ts => workOrder.outlook.ts} | 0 ...workOrderSearch.ts => workOrder.search.ts} | 2 +- .../{workOrderView.ts => workOrder.view.ts} | 0 public/javascripts/workOrderEdit.d.ts | 1 - public/javascripts/workOrderEdit.js | 1243 ------------ .../workOrderMilestoneCalendar.d.ts | 1 - .../javascripts/workOrderMilestoneCalendar.js | 118 -- public/javascripts/workOrderOutlook.d.ts | 1 - public/javascripts/workOrderOutlook.js | 46 - public/javascripts/workOrderSearch.d.ts | 1 - public/javascripts/workOrderSearch.js | 180 -- public/javascripts/workOrderView.d.ts | 1 - public/javascripts/workOrderView.js | 37 - routes/admin.js | 147 +- routes/admin.ts | 162 +- routes/burialSites.js | 28 +- routes/burialSites.ts | 40 +- routes/cemeteries.js | 12 +- routes/cemeteries.ts | 12 +- routes/contracts.js | 71 +- routes/contracts.ts | 122 +- routes/workOrders.js | 22 +- routes/workOrders.ts | 28 +- temp/legacy.importFromCSV.js | 14 +- temp/legacy.importFromCSV.ts | 14 +- temp/so.exportMaps.d.ts | 1 - temp/so.exportMaps.js | 36 - temp/so.exportMaps.ts | 53 - test/functions.js | 6 +- test/functions.ts | 6 +- types/recordTypes.d.ts | 2 +- types/recordTypes.ts | 2 +- 179 files changed, 1071 insertions(+), 7897 deletions(-) delete mode 100644 database/getPastLotOccupancyOccupants.d.ts delete mode 100644 database/getPastLotOccupancyOccupants.js delete mode 100644 database/getPastLotOccupancyOccupants.ts create mode 100644 database/getPreviousBurialSiteId.d.ts create mode 100644 database/getPreviousBurialSiteId.js create mode 100644 database/getPreviousBurialSiteId.ts delete mode 100644 database/getPreviousLotId.d.ts delete mode 100644 database/getPreviousLotId.js delete mode 100644 database/getPreviousLotId.ts create mode 100644 handlers/workOrders-post/doAddWorkOrderBurialSite.d.ts create mode 100644 handlers/workOrders-post/doAddWorkOrderBurialSite.js create mode 100644 handlers/workOrders-post/doAddWorkOrderBurialSite.ts create mode 100644 handlers/workOrders-post/doAddWorkOrderBurialSiteContract.d.ts rename handlers/workOrders-post/{doAddWorkOrderLotOccupancy.js => doAddWorkOrderBurialSiteContract.js} (60%) create mode 100644 handlers/workOrders-post/doAddWorkOrderBurialSiteContract.ts delete mode 100644 handlers/workOrders-post/doAddWorkOrderLot.d.ts delete mode 100644 handlers/workOrders-post/doAddWorkOrderLot.js delete mode 100644 handlers/workOrders-post/doAddWorkOrderLot.ts delete mode 100644 handlers/workOrders-post/doAddWorkOrderLotOccupancy.d.ts delete mode 100644 handlers/workOrders-post/doAddWorkOrderLotOccupancy.ts create mode 100644 handlers/workOrders-post/doDeleteWorkOrderBurialSite.d.ts create mode 100644 handlers/workOrders-post/doDeleteWorkOrderBurialSite.js create mode 100644 handlers/workOrders-post/doDeleteWorkOrderBurialSite.ts create mode 100644 handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.d.ts create mode 100644 handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.js create mode 100644 handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.ts delete mode 100644 handlers/workOrders-post/doDeleteWorkOrderLot.d.ts delete mode 100644 handlers/workOrders-post/doDeleteWorkOrderLot.js delete mode 100644 handlers/workOrders-post/doDeleteWorkOrderLot.ts delete mode 100644 handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.d.ts delete mode 100644 handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.js delete mode 100644 handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.ts create mode 100644 handlers/workOrders-post/doUpdateBurialSiteStatus.d.ts create mode 100644 handlers/workOrders-post/doUpdateBurialSiteStatus.js create mode 100644 handlers/workOrders-post/doUpdateBurialSiteStatus.ts delete mode 100644 handlers/workOrders-post/doUpdateLotStatus.d.ts delete mode 100644 handlers/workOrders-post/doUpdateLotStatus.js delete mode 100644 handlers/workOrders-post/doUpdateLotStatus.ts create mode 100644 helpers/burialSiteContracts.helpers.d.ts rename helpers/{functions.lotOccupancy.js => burialSiteContracts.helpers.js} (61%) create mode 100644 helpers/burialSiteContracts.helpers.ts delete mode 100644 helpers/functions.lotOccupancy.d.ts delete mode 100644 helpers/functions.lotOccupancy.ts delete mode 100644 public/javascripts/adminDatabase.d.ts delete mode 100644 public/javascripts/adminDatabase.js delete mode 100644 public/javascripts/adminFees.d.ts delete mode 100644 public/javascripts/adminFees.js delete mode 100644 public/javascripts/adminLotTypes.d.ts delete mode 100644 public/javascripts/adminLotTypes.js delete mode 100644 public/javascripts/adminOccupancyTypes.d.ts delete mode 100644 public/javascripts/adminOccupancyTypes.js delete mode 100644 public/javascripts/adminTables.d.ts delete mode 100644 public/javascripts/adminTables.js rename public/javascripts/{lotEdit.ts => burialSite.edit.ts} (97%) rename public/javascripts/{lotSearch.js => burialSite.search.js} (100%) rename public/javascripts/{lotSearch.ts => burialSite.search.ts} (96%) rename public/javascripts/{lotView.ts => burialSite.view.ts} (100%) rename public/javascripts/{lotOccupancyEdit.ts => burialSiteContract.edit.ts} (98%) rename public/javascripts/{lotOccupancySearch.ts => burialSiteContract.search.ts} (100%) rename public/javascripts/{adminLotTypes.ts => burialSiteTypes.admin.ts} (97%) rename public/javascripts/{mapEdit.ts => cemetery.edit.ts} (100%) rename public/javascripts/{mapSearch.ts => cemetery.search.ts} (100%) rename public/javascripts/{mapView.ts => cemetery.view.ts} (100%) rename public/javascripts/{adminOccupancyTypes.ts => contractTypes.admin.ts} (97%) rename public/javascripts/{adminDatabase.ts => database.admin.ts} (100%) rename public/javascripts/{adminFees.ts => fees.admin.ts} (100%) delete mode 100644 public/javascripts/lotEdit.d.ts delete mode 100644 public/javascripts/lotEdit.js delete mode 100644 public/javascripts/lotOccupancyEdit.d.ts delete mode 100644 public/javascripts/lotOccupancyEdit.js delete mode 100644 public/javascripts/lotOccupancySearch.d.ts delete mode 100644 public/javascripts/lotOccupancySearch.js delete mode 100644 public/javascripts/lotSearch.d.ts delete mode 100644 public/javascripts/lotView.d.ts delete mode 100644 public/javascripts/lotView.js delete mode 100644 public/javascripts/mapEdit.d.ts delete mode 100644 public/javascripts/mapEdit.js delete mode 100644 public/javascripts/mapSearch.d.ts delete mode 100644 public/javascripts/mapSearch.js delete mode 100644 public/javascripts/mapView.d.ts delete mode 100644 public/javascripts/mapView.js rename public/javascripts/{reportSearch.ts => report.search.ts} (100%) delete mode 100644 public/javascripts/reportSearch.d.ts delete mode 100644 public/javascripts/reportSearch.js rename public/javascripts/{adminTables.ts => tables.admin.ts} (98%) rename public/javascripts/{workOrderEdit.ts => workOrder.edit.ts} (98%) rename public/javascripts/{workOrderMilestoneCalendar.ts => workOrder.milestoneCalendar.ts} (98%) rename public/javascripts/{workOrderOutlook.ts => workOrder.outlook.ts} (100%) rename public/javascripts/{workOrderSearch.ts => workOrder.search.ts} (99%) rename public/javascripts/{workOrderView.ts => workOrder.view.ts} (100%) delete mode 100644 public/javascripts/workOrderEdit.d.ts delete mode 100644 public/javascripts/workOrderEdit.js delete mode 100644 public/javascripts/workOrderMilestoneCalendar.d.ts delete mode 100644 public/javascripts/workOrderMilestoneCalendar.js delete mode 100644 public/javascripts/workOrderOutlook.d.ts delete mode 100644 public/javascripts/workOrderOutlook.js delete mode 100644 public/javascripts/workOrderSearch.d.ts delete mode 100644 public/javascripts/workOrderSearch.js delete mode 100644 public/javascripts/workOrderView.d.ts delete mode 100644 public/javascripts/workOrderView.js delete mode 100644 temp/so.exportMaps.d.ts delete mode 100644 temp/so.exportMaps.js delete mode 100644 temp/so.exportMaps.ts diff --git a/database/addWorkOrderBurialSite.d.ts b/database/addWorkOrderBurialSite.d.ts index 062d78da..f48ba043 100644 --- a/database/addWorkOrderBurialSite.d.ts +++ b/database/addWorkOrderBurialSite.d.ts @@ -1,5 +1,5 @@ export interface AddWorkOrderLotForm { workOrderId: number | string; - lotId: number | string; + burialSiteId: number | string; } export default function addWorkOrderLot(workOrderLotForm: AddWorkOrderLotForm, user: User): Promise; diff --git a/database/addWorkOrderBurialSite.js b/database/addWorkOrderBurialSite.js index a54ef12c..0d1c1796 100644 --- a/database/addWorkOrderBurialSite.js +++ b/database/addWorkOrderBurialSite.js @@ -4,23 +4,23 @@ export default async function addWorkOrderLot(workOrderLotForm, user) { const rightNowMillis = Date.now(); const row = database .prepare(`select recordDelete_timeMillis - from WorkOrderLots + from WorkOrderBurialSites where workOrderId = ? - and lotId = ?`) - .get(workOrderLotForm.workOrderId, workOrderLotForm.lotId); + and burialSiteId = ?`) + .get(workOrderLotForm.workOrderId, workOrderLotForm.burialSiteId); if (row === undefined) { database - .prepare(`insert into WorkOrderLots ( - workOrderId, lotId, + .prepare(`insert into WorkOrderBurialSites ( + workOrderId, burialSiteId, recordCreate_userName, recordCreate_timeMillis, recordUpdate_userName, recordUpdate_timeMillis) values (?, ?, ?, ?, ?, ?)`) - .run(workOrderLotForm.workOrderId, workOrderLotForm.lotId, user.userName, rightNowMillis, user.userName, rightNowMillis); + .run(workOrderLotForm.workOrderId, workOrderLotForm.burialSiteId, user.userName, rightNowMillis, user.userName, rightNowMillis); } else { if (row.recordDelete_timeMillis) { database - .prepare(`update WorkOrderLots + .prepare(`update WorkOrderBurialSites set recordCreate_userName = ?, recordCreate_timeMillis = ?, recordUpdate_userName = ?, @@ -28,8 +28,8 @@ export default async function addWorkOrderLot(workOrderLotForm, user) { recordDelete_userName = null, recordDelete_timeMillis = null where workOrderId = ? - and lotId = ?`) - .run(user.userName, rightNowMillis, user.userName, rightNowMillis, workOrderLotForm.workOrderId, workOrderLotForm.lotId); + and burialSiteId = ?`) + .run(user.userName, rightNowMillis, user.userName, rightNowMillis, workOrderLotForm.workOrderId, workOrderLotForm.burialSiteId); } } database.release(); diff --git a/database/addWorkOrderBurialSite.ts b/database/addWorkOrderBurialSite.ts index 74e85bb0..72e11e10 100644 --- a/database/addWorkOrderBurialSite.ts +++ b/database/addWorkOrderBurialSite.ts @@ -2,7 +2,7 @@ import { acquireConnection } from './pool.js' export interface AddWorkOrderLotForm { workOrderId: number | string - lotId: number | string + burialSiteId: number | string } export default async function addWorkOrderLot( @@ -16,26 +16,28 @@ export default async function addWorkOrderLot( const row = database .prepare( `select recordDelete_timeMillis - from WorkOrderLots + from WorkOrderBurialSites where workOrderId = ? - and lotId = ?` + and burialSiteId = ?` ) - .get(workOrderLotForm.workOrderId, workOrderLotForm.lotId) as { - recordDelete_timeMillis?: number - } + .get(workOrderLotForm.workOrderId, workOrderLotForm.burialSiteId) as + | { + recordDelete_timeMillis?: number + } + | undefined if (row === undefined) { database .prepare( - `insert into WorkOrderLots ( - workOrderId, lotId, + `insert into WorkOrderBurialSites ( + workOrderId, burialSiteId, recordCreate_userName, recordCreate_timeMillis, recordUpdate_userName, recordUpdate_timeMillis) values (?, ?, ?, ?, ?, ?)` ) .run( workOrderLotForm.workOrderId, - workOrderLotForm.lotId, + workOrderLotForm.burialSiteId, user.userName, rightNowMillis, user.userName, @@ -45,7 +47,7 @@ export default async function addWorkOrderLot( if (row.recordDelete_timeMillis) { database .prepare( - `update WorkOrderLots + `update WorkOrderBurialSites set recordCreate_userName = ?, recordCreate_timeMillis = ?, recordUpdate_userName = ?, @@ -53,7 +55,7 @@ export default async function addWorkOrderLot( recordDelete_userName = null, recordDelete_timeMillis = null where workOrderId = ? - and lotId = ?` + and burialSiteId = ?` ) .run( user.userName, @@ -61,7 +63,7 @@ export default async function addWorkOrderLot( user.userName, rightNowMillis, workOrderLotForm.workOrderId, - workOrderLotForm.lotId + workOrderLotForm.burialSiteId ) } } diff --git a/database/addWorkOrderBurialSiteContract.d.ts b/database/addWorkOrderBurialSiteContract.d.ts index 4c6da837..eef8b3e7 100644 --- a/database/addWorkOrderBurialSiteContract.d.ts +++ b/database/addWorkOrderBurialSiteContract.d.ts @@ -3,4 +3,4 @@ export interface AddWorkOrderBurialSiteContractOccupancyForm { workOrderId: number | string; burialSiteContractId: number | string; } -export default function addWorkOrderLotOccupancy(addForm: AddWorkOrderBurialSiteContractOccupancyForm, user: User, connectedDatabase?: PoolConnection): Promise; +export default function addWorkOrderBurialSiteContract(addForm: AddWorkOrderBurialSiteContractOccupancyForm, user: User, connectedDatabase?: PoolConnection): Promise; diff --git a/database/addWorkOrderBurialSiteContract.js b/database/addWorkOrderBurialSiteContract.js index 92f8f262..8b0a07c0 100644 --- a/database/addWorkOrderBurialSiteContract.js +++ b/database/addWorkOrderBurialSiteContract.js @@ -1,5 +1,5 @@ import { acquireConnection } from './pool.js'; -export default async function addWorkOrderLotOccupancy(addForm, user, connectedDatabase) { +export default async function addWorkOrderBurialSiteContract(addForm, user, connectedDatabase) { const database = connectedDatabase ?? (await acquireConnection()); const rightNowMillis = Date.now(); const recordDeleteTimeMillis = database diff --git a/database/addWorkOrderBurialSiteContract.ts b/database/addWorkOrderBurialSiteContract.ts index da96fdb7..ce6fdff4 100644 --- a/database/addWorkOrderBurialSiteContract.ts +++ b/database/addWorkOrderBurialSiteContract.ts @@ -7,7 +7,7 @@ export interface AddWorkOrderBurialSiteContractOccupancyForm { burialSiteContractId: number | string } -export default async function addWorkOrderLotOccupancy( +export default async function addWorkOrderBurialSiteContract( addForm: AddWorkOrderBurialSiteContractOccupancyForm, user: User, connectedDatabase?: PoolConnection diff --git a/database/getNextBurialSiteId.js b/database/getNextBurialSiteId.js index ef586f07..1e90e70d 100644 --- a/database/getNextBurialSiteId.js +++ b/database/getNextBurialSiteId.js @@ -1,13 +1,12 @@ import { acquireConnection } from './pool.js'; -// TODO export default async function getNextBurialSiteId(burialSiteId) { const database = await acquireConnection(); const result = database .prepare(`select burialSiteId from BurialSites where recordDelete_timeMillis is null - and userFn_lotNameSortName(lotName) > (select userFn_lotNameSortName(lotName) from Lots where lotId = ?) - order by userFn_lotNameSortName(lotName) + and burialSiteName > (select burialSiteName from BurialSites where burialSiteId = ?) + order by burialSiteName limit 1`) .pluck() .get(burialSiteId); diff --git a/database/getNextBurialSiteId.ts b/database/getNextBurialSiteId.ts index 2f9a8966..3d77ae73 100644 --- a/database/getNextBurialSiteId.ts +++ b/database/getNextBurialSiteId.ts @@ -1,6 +1,5 @@ import { acquireConnection } from './pool.js' -// TODO export default async function getNextBurialSiteId( burialSiteId: number | string ): Promise { @@ -11,8 +10,8 @@ export default async function getNextBurialSiteId( `select burialSiteId from BurialSites where recordDelete_timeMillis is null - and userFn_lotNameSortName(lotName) > (select userFn_lotNameSortName(lotName) from Lots where lotId = ?) - order by userFn_lotNameSortName(lotName) + and burialSiteName > (select burialSiteName from BurialSites where burialSiteId = ?) + order by burialSiteName limit 1` ) .pluck() diff --git a/database/getPastLotOccupancyOccupants.d.ts b/database/getPastLotOccupancyOccupants.d.ts deleted file mode 100644 index 1f1ae0f6..00000000 --- a/database/getPastLotOccupancyOccupants.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { LotOccupancyOccupant } from '../types/recordTypes.js'; -export interface GetPastLotOccupancyOccupantsFilters { - searchFilter: string; -} -interface GetPastLotOccupancyOccupantsOptions { - limit: number; -} -export default function getPastLotOccupancyOccupants(filters: GetPastLotOccupancyOccupantsFilters, options: GetPastLotOccupancyOccupantsOptions): Promise; -export {}; diff --git a/database/getPastLotOccupancyOccupants.js b/database/getPastLotOccupancyOccupants.js deleted file mode 100644 index 5268ecfe..00000000 --- a/database/getPastLotOccupancyOccupants.js +++ /dev/null @@ -1,39 +0,0 @@ -import { acquireConnection } from './pool.js'; -export default async function getPastLotOccupancyOccupants(filters, options) { - const database = await acquireConnection(); - let sqlWhereClause = ' where o.recordDelete_timeMillis is null and l.recordDelete_timeMillis is null'; - const sqlParameters = []; - if (filters.searchFilter !== '') { - const searchFilterPieces = filters.searchFilter.split(' '); - for (const searchFilterPiece of searchFilterPieces) { - if (searchFilterPiece === '') { - continue; - } - sqlWhereClause += ` and (o.occupantName like '%' || ? || '%' - or o.occupantFamilyName like '%' || ? || '%' - or o.occupantAddress1 like '%' || ? || '%' - or o.occupantAddress2 like '%' || ? || '%' - or o.occupantCity like '%' || ? || '%')`; - sqlParameters.push(searchFilterPiece, searchFilterPiece, searchFilterPiece, searchFilterPiece, searchFilterPiece); - } - } - const sql = `select o.occupantName, o.occupantFamilyName, - o.occupantAddress1, o.occupantAddress2, - o.occupantCity, o.occupantProvince, o.occupantPostalCode, - o.occupantPhoneNumber, o.occupantEmailAddress, - count(*) as burialSiteContractIdCount, - max(o.recordUpdate_timeMillis) as recordUpdate_timeMillisMax - from LotOccupancyOccupants o - left join BurialSiteContracts l on o.burialSiteContractId = l.burialSiteContractId - ${sqlWhereClause} - group by occupantName, occupantAddress1, occupantAddress2, - occupantCity, occupantProvince, occupantPostalCode, - occupantPhoneNumber, occupantEmailAddress - order by burialSiteContractIdCount desc, recordUpdate_timeMillisMax desc - limit ${options.limit}`; - const burialSiteContractOccupants = database - .prepare(sql) - .all(sqlParameters); - database.release(); - return burialSiteContractOccupants; -} diff --git a/database/getPastLotOccupancyOccupants.ts b/database/getPastLotOccupancyOccupants.ts deleted file mode 100644 index df75eb90..00000000 --- a/database/getPastLotOccupancyOccupants.ts +++ /dev/null @@ -1,70 +0,0 @@ -import type { LotOccupancyOccupant } from '../types/recordTypes.js' - -import { acquireConnection } from './pool.js' - -export interface GetPastLotOccupancyOccupantsFilters { - searchFilter: string -} - -interface GetPastLotOccupancyOccupantsOptions { - limit: number -} - -export default async function getPastLotOccupancyOccupants( - filters: GetPastLotOccupancyOccupantsFilters, - options: GetPastLotOccupancyOccupantsOptions -): Promise { - const database = await acquireConnection() - - let sqlWhereClause = - ' where o.recordDelete_timeMillis is null and l.recordDelete_timeMillis is null' - - const sqlParameters: unknown[] = [] - - if (filters.searchFilter !== '') { - const searchFilterPieces = filters.searchFilter.split(' ') - - for (const searchFilterPiece of searchFilterPieces) { - if (searchFilterPiece === '') { - continue - } - - sqlWhereClause += ` and (o.occupantName like '%' || ? || '%' - or o.occupantFamilyName like '%' || ? || '%' - or o.occupantAddress1 like '%' || ? || '%' - or o.occupantAddress2 like '%' || ? || '%' - or o.occupantCity like '%' || ? || '%')` - - sqlParameters.push( - searchFilterPiece, - searchFilterPiece, - searchFilterPiece, - searchFilterPiece, - searchFilterPiece - ) - } - } - - const sql = `select o.occupantName, o.occupantFamilyName, - o.occupantAddress1, o.occupantAddress2, - o.occupantCity, o.occupantProvince, o.occupantPostalCode, - o.occupantPhoneNumber, o.occupantEmailAddress, - count(*) as burialSiteContractIdCount, - max(o.recordUpdate_timeMillis) as recordUpdate_timeMillisMax - from LotOccupancyOccupants o - left join BurialSiteContracts l on o.burialSiteContractId = l.burialSiteContractId - ${sqlWhereClause} - group by occupantName, occupantAddress1, occupantAddress2, - occupantCity, occupantProvince, occupantPostalCode, - occupantPhoneNumber, occupantEmailAddress - order by burialSiteContractIdCount desc, recordUpdate_timeMillisMax desc - limit ${options.limit}` - - const burialSiteContractOccupants = database - .prepare(sql) - .all(sqlParameters) as LotOccupancyOccupant[] - - database.release() - - return burialSiteContractOccupants -} diff --git a/database/getPreviousBurialSiteId.d.ts b/database/getPreviousBurialSiteId.d.ts new file mode 100644 index 00000000..e4b7956c --- /dev/null +++ b/database/getPreviousBurialSiteId.d.ts @@ -0,0 +1 @@ +export default function getPreviousBurialSiteId(burialSiteId: number | string): Promise; diff --git a/database/getPreviousBurialSiteId.js b/database/getPreviousBurialSiteId.js new file mode 100644 index 00000000..182049ca --- /dev/null +++ b/database/getPreviousBurialSiteId.js @@ -0,0 +1,14 @@ +import { acquireConnection } from './pool.js'; +export default async function getPreviousBurialSiteId(burialSiteId) { + const database = await acquireConnection(); + const result = database + .prepare(`select burialSiteId from BurialSites + where recordDelete_timeMillis is null + and burialSiteName < (select burialSiteName from BurialSites where burialSiteId = ?) + order by burialSiteName desc + limit 1`) + .pluck() + .get(burialSiteId); + database.release(); + return result; +} diff --git a/database/getPreviousBurialSiteId.ts b/database/getPreviousBurialSiteId.ts new file mode 100644 index 00000000..98932b00 --- /dev/null +++ b/database/getPreviousBurialSiteId.ts @@ -0,0 +1,22 @@ +import { acquireConnection } from './pool.js' + +export default async function getPreviousBurialSiteId( + burialSiteId: number | string +): Promise { + const database = await acquireConnection() + + const result = database + .prepare( + `select burialSiteId from BurialSites + where recordDelete_timeMillis is null + and burialSiteName < (select burialSiteName from BurialSites where burialSiteId = ?) + order by burialSiteName desc + limit 1` + ) + .pluck() + .get(burialSiteId) as number | undefined + + database.release() + + return result +} diff --git a/database/getPreviousLotId.d.ts b/database/getPreviousLotId.d.ts deleted file mode 100644 index 7625bd7d..00000000 --- a/database/getPreviousLotId.d.ts +++ /dev/null @@ -1 +0,0 @@ -export default function getPreviousLotId(lotId: number | string): Promise; diff --git a/database/getPreviousLotId.js b/database/getPreviousLotId.js deleted file mode 100644 index 796edaa7..00000000 --- a/database/getPreviousLotId.js +++ /dev/null @@ -1,18 +0,0 @@ -import { getConfigProperty } from '../helpers/config.helpers.js'; -import { acquireConnection } from './pool.js'; -export default async function getPreviousLotId(lotId) { - const database = await acquireConnection(); - database.function('userFn_lotNameSortName', getConfigProperty('settings.lot.lotNameSortNameFunction')); - const result = database - .prepare(`select lotId from Lots - where recordDelete_timeMillis is null - and userFn_lotNameSortName(lotName) < (select userFn_lotNameSortName(lotName) from Lots where lotId = ?) - order by userFn_lotNameSortName(lotName) desc - limit 1`) - .get(lotId); - database.release(); - if (result === undefined) { - return undefined; - } - return result.lotId; -} diff --git a/database/getPreviousLotId.ts b/database/getPreviousLotId.ts deleted file mode 100644 index 48b6172e..00000000 --- a/database/getPreviousLotId.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { getConfigProperty } from '../helpers/config.helpers.js' - -import { acquireConnection } from './pool.js' - -export default async function getPreviousLotId( - lotId: number | string -): Promise { - const database = await acquireConnection() - - database.function( - 'userFn_lotNameSortName', - getConfigProperty('settings.lot.lotNameSortNameFunction') - ) - - const result = database - .prepare( - `select lotId from Lots - where recordDelete_timeMillis is null - and userFn_lotNameSortName(lotName) < (select userFn_lotNameSortName(lotName) from Lots where lotId = ?) - order by userFn_lotNameSortName(lotName) desc - limit 1` - ) - .get(lotId) as - | { - lotId: number - } - | undefined - - database.release() - - if (result === undefined) { - return undefined - } - - return result.lotId -} diff --git a/database/getWorkOrder.js b/database/getWorkOrder.js index 909cf767..7b26a0f2 100644 --- a/database/getWorkOrder.js +++ b/database/getWorkOrder.js @@ -24,20 +24,20 @@ async function _getWorkOrder(sql, workOrderIdOrWorkOrderNumber, options, connect }, { limit: -1, offset: 0, - includeLotOccupancyCount: false + includeBurialSiteContractCount: false }, database); - workOrder.workOrderBurialSites = burialSiteResults.lots; + workOrder.workOrderBurialSites = burialSiteResults.burialSites; const workOrderBurialSiteContractsResults = await getBurialSiteContracts({ workOrderId: workOrder.workOrderId }, { limit: -1, offset: 0, - includeOccupants: true, + includeInterments: true, includeFees: false, includeTransactions: false }, database); workOrder.workOrderBurialSiteContracts = - workOrderBurialSiteContractsResults.BurialSiteContracts; + workOrderBurialSiteContractsResults.burialSiteContracts; } if (options.includeComments) { workOrder.workOrderComments = await getWorkOrderComments(workOrder.workOrderId, database); diff --git a/database/getWorkOrder.ts b/database/getWorkOrder.ts index fba5100d..7de4cec9 100644 --- a/database/getWorkOrder.ts +++ b/database/getWorkOrder.ts @@ -48,12 +48,12 @@ async function _getWorkOrder( { limit: -1, offset: 0, - includeLotOccupancyCount: false + includeBurialSiteContractCount: false }, database ) - workOrder.workOrderBurialSites = burialSiteResults.lots + workOrder.workOrderBurialSites = burialSiteResults.burialSites const workOrderBurialSiteContractsResults = await getBurialSiteContracts( { @@ -62,7 +62,7 @@ async function _getWorkOrder( { limit: -1, offset: 0, - includeOccupants: true, + includeInterments: true, includeFees: false, includeTransactions: false }, @@ -70,7 +70,7 @@ async function _getWorkOrder( ) workOrder.workOrderBurialSiteContracts = - workOrderBurialSiteContractsResults.BurialSiteContracts + workOrderBurialSiteContractsResults.burialSiteContracts } if (options.includeComments) { diff --git a/database/getWorkOrderMilestones.js b/database/getWorkOrderMilestones.js index 3930c44e..d31b1972 100644 --- a/database/getWorkOrderMilestones.js +++ b/database/getWorkOrderMilestones.js @@ -1,7 +1,7 @@ import { dateIntegerToString, dateStringToInteger, dateToInteger, timeIntegerToPeriodString, timeIntegerToString } from '@cityssm/utils-datetime'; import { getConfigProperty } from '../helpers/config.helpers.js'; import getBurialSiteContracts from './getBurialSiteContracts.js'; -import getLots from './getLots.js'; +import getBurialSites from './getBurialSites.js'; import { acquireConnection } from './pool.js'; // eslint-disable-next-line security/detect-unsafe-regex const commaSeparatedNumbersRegex = /^\d+(?:,\d+)*$/; @@ -43,7 +43,8 @@ function buildWhereClause(filters) { break; } } - if (filters.workOrderMilestoneDateString !== undefined && filters.workOrderMilestoneDateString !== '') { + if (filters.workOrderMilestoneDateString !== undefined && + filters.workOrderMilestoneDateString !== '') { sqlWhereClause += ' and m.workOrderMilestoneDate = ?'; sqlParameters.push(dateStringToInteger(filters.workOrderMilestoneDateString)); } @@ -104,9 +105,9 @@ export default async function getWorkOrderMilestones(filters, options, connected userFn_timeIntegerToPeriodString(ifnull(m.workOrderMilestoneCompletionTime, 0)) as workOrderMilestoneCompletionTimePeriodString, ${options.includeWorkOrders ?? false ? ` m.workOrderId, w.workOrderNumber, wt.workOrderType, w.workOrderDescription, - w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString, - w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString, - w.recordUpdate_timeMillis as workOrderRecordUpdate_timeMillis,` + w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString, + w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString, + w.recordUpdate_timeMillis as workOrderRecordUpdate_timeMillis,` : ''} m.recordCreate_userName, m.recordCreate_timeMillis, m.recordUpdate_userName, m.recordUpdate_timeMillis @@ -121,24 +122,25 @@ export default async function getWorkOrderMilestones(filters, options, connected .all(sqlParameters); if (options.includeWorkOrders ?? false) { for (const workOrderMilestone of workOrderMilestones) { - const workOrderLotsResults = await getLots({ + const burialSites = await getBurialSites({ workOrderId: workOrderMilestone.workOrderId }, { limit: -1, offset: 0, - includeLotOccupancyCount: false + includeBurialSiteContractCount: false }, database); - workOrderMilestone.workOrderLots = workOrderLotsResults.lots; - const BurialSiteContracts = await getBurialSiteContracts({ + workOrderMilestone.workOrderBurialSites = burialSites.burialSites; + const burialSiteContracts = await getBurialSiteContracts({ workOrderId: workOrderMilestone.workOrderId }, { limit: -1, offset: 0, - includeOccupants: true, + includeInterments: true, includeFees: false, includeTransactions: false }, database); - workOrderMilestone.workOrderBurialSiteContracts = BurialSiteContracts.BurialSiteContracts; + workOrderMilestone.workOrderBurialSiteContracts = + burialSiteContracts.burialSiteContracts; } } if (connectedDatabase === undefined) { diff --git a/database/getWorkOrderMilestones.ts b/database/getWorkOrderMilestones.ts index 7dfe659a..25095ca5 100644 --- a/database/getWorkOrderMilestones.ts +++ b/database/getWorkOrderMilestones.ts @@ -12,7 +12,7 @@ import { getConfigProperty } from '../helpers/config.helpers.js' import type { WorkOrderMilestone } from '../types/recordTypes.js' import getBurialSiteContracts from './getBurialSiteContracts.js' -import getLots from './getLots.js' +import getBurialSites from './getBurialSites.js' import { acquireConnection } from './pool.js' export interface WorkOrderMilestoneFilters { @@ -99,7 +99,10 @@ function buildWhereClause(filters: WorkOrderMilestoneFilters): { } } - if (filters.workOrderMilestoneDateString !== undefined && filters.workOrderMilestoneDateString !== '') { + if ( + filters.workOrderMilestoneDateString !== undefined && + filters.workOrderMilestoneDateString !== '' + ) { sqlWhereClause += ' and m.workOrderMilestoneDate = ?' sqlParameters.push( dateStringToInteger(filters.workOrderMilestoneDateString) @@ -184,9 +187,9 @@ export default async function getWorkOrderMilestones( ${ options.includeWorkOrders ?? false ? ` m.workOrderId, w.workOrderNumber, wt.workOrderType, w.workOrderDescription, - w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString, - w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString, - w.recordUpdate_timeMillis as workOrderRecordUpdate_timeMillis,` + w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString, + w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString, + w.recordUpdate_timeMillis as workOrderRecordUpdate_timeMillis,` : '' } m.recordCreate_userName, m.recordCreate_timeMillis, @@ -204,35 +207,36 @@ export default async function getWorkOrderMilestones( if (options.includeWorkOrders ?? false) { for (const workOrderMilestone of workOrderMilestones) { - const workOrderLotsResults = await getLots( + const burialSites = await getBurialSites( { workOrderId: workOrderMilestone.workOrderId }, { limit: -1, offset: 0, - includeLotOccupancyCount: false + includeBurialSiteContractCount: false }, database ) - workOrderMilestone.workOrderLots = workOrderLotsResults.lots + workOrderMilestone.workOrderBurialSites = burialSites.burialSites - const BurialSiteContracts = await getBurialSiteContracts( + const burialSiteContracts = await getBurialSiteContracts( { workOrderId: workOrderMilestone.workOrderId }, { limit: -1, offset: 0, - includeOccupants: true, + includeInterments: true, includeFees: false, includeTransactions: false }, database ) - workOrderMilestone.workOrderBurialSiteContracts = BurialSiteContracts.BurialSiteContracts + workOrderMilestone.workOrderBurialSiteContracts = + burialSiteContracts.burialSiteContracts } } diff --git a/database/getWorkOrders.d.ts b/database/getWorkOrders.d.ts index 5f367ba2..ce2ceac6 100644 --- a/database/getWorkOrders.d.ts +++ b/database/getWorkOrders.d.ts @@ -11,7 +11,7 @@ export interface GetWorkOrdersFilters { interface GetWorkOrdersOptions { limit: number; offset: number; - includeLotsAndBurialSiteContracts?: boolean; + includeBurialSites?: boolean; includeComments?: boolean; includeMilestones?: boolean; } diff --git a/database/getWorkOrders.js b/database/getWorkOrders.js index c94d3f45..7c2e8215 100644 --- a/database/getWorkOrders.js +++ b/database/getWorkOrders.js @@ -1,7 +1,7 @@ import { dateIntegerToString, dateStringToInteger } from '@cityssm/utils-datetime'; import { getBurialSiteNameWhereClause, getOccupantNameWhereClause } from '../helpers/functions.sqlFilters.js'; import getBurialSiteContracts from './getBurialSiteContracts.js'; -import getLots from './getLots.js'; +import getBurialSites from './getBurialSites.js'; import getWorkOrderComments from './getWorkOrderComments.js'; import getWorkOrderMilestones from './getWorkOrderMilestones.js'; import { acquireConnection } from './pool.js'; @@ -36,18 +36,18 @@ function buildWhereClause(filters) { ))`; sqlParameters.push(...occupantNameFilters.sqlParameters); } - const lotNameFilters = getBurialSiteNameWhereClause(filters.lotName, '', 'l'); - if (lotNameFilters.sqlParameters.length > 0) { + const burialSiteNameFilters = getBurialSiteNameWhereClause(filters.lotName, '', 'l'); + if (burialSiteNameFilters.sqlParameters.length > 0) { sqlWhereClause += ` and w.workOrderId in ( - select workOrderId from WorkOrderLots + select workOrderId from WorkOrderBurialSites where recordDelete_timeMillis is null - and lotId in ( - select lotId from Lots l + and burialSiteId in ( + select burialSiteId from BurialSites l where recordDelete_timeMillis is null - ${lotNameFilters.sqlWhereClause} + ${burialSiteNameFilters.sqlWhereClause} ))`; - sqlParameters.push(...lotNameFilters.sqlParameters); + sqlParameters.push(...burialSiteNameFilters.sqlParameters); } if ((filters.burialSiteContractId ?? '') !== '') { sqlWhereClause += @@ -63,30 +63,30 @@ async function addInclusions(workOrder, options, database) { if (options.includeComments ?? false) { workOrder.workOrderComments = await getWorkOrderComments(workOrder.workOrderId, database); } - if (options.includeLotsAndBurialSiteContracts ?? false) { - if (workOrder.workOrderLotCount === 0) { - workOrder.workOrderLots = []; + if (options.includeBurialSites ?? false) { + if (workOrder.workOrderBurialSiteCount === 0) { + workOrder.workOrderBurialSites = []; } else { - const workOrderLotsResults = await getLots({ + const workOrderBurialSitesResults = await getBurialSites({ workOrderId: workOrder.workOrderId }, { limit: -1, offset: 0, - includeLotOccupancyCount: false + includeBurialSiteContractCount: false }, database); - workOrder.workOrderLots = workOrderLotsResults.lots; + workOrder.workOrderBurialSites = workOrderBurialSitesResults.burialSites; } - const BurialSiteContracts = await getBurialSiteContracts({ + const burialSiteContracts = await getBurialSiteContracts({ workOrderId: workOrder.workOrderId }, { limit: -1, offset: 0, - includeOccupants: true, + includeInterments: true, includeFees: false, includeTransactions: false }, database); - workOrder.workOrderBurialSiteContracts = BurialSiteContracts.BurialSiteContracts; + workOrder.workOrderBurialSiteContracts = burialSiteContracts.burialSiteContracts; } if (options.includeMilestones ?? false) { workOrder.workOrderMilestones = @@ -142,7 +142,7 @@ export async function getWorkOrders(filters, options, connectedDatabase) { .all(sqlParameters); } const hasInclusions = (options.includeComments ?? false) || - (options.includeLotsAndBurialSiteContracts ?? false) || + (options.includeBurialSites ?? false) || (options.includeMilestones ?? false); if (hasInclusions) { for (const workOrder of workOrders) { diff --git a/database/getWorkOrders.ts b/database/getWorkOrders.ts index 7acf09b3..8553e26a 100644 --- a/database/getWorkOrders.ts +++ b/database/getWorkOrders.ts @@ -12,7 +12,7 @@ import { import type { WorkOrder } from '../types/recordTypes.js' import getBurialSiteContracts from './getBurialSiteContracts.js' -import getLots from './getLots.js' +import getBurialSites from './getBurialSites.js' import getWorkOrderComments from './getWorkOrderComments.js' import getWorkOrderMilestones from './getWorkOrderMilestones.js' import { acquireConnection } from './pool.js' @@ -29,7 +29,7 @@ export interface GetWorkOrdersFilters { interface GetWorkOrdersOptions { limit: number offset: number - includeLotsAndBurialSiteContracts?: boolean + includeBurialSites?: boolean includeComments?: boolean includeMilestones?: boolean } @@ -77,18 +77,18 @@ function buildWhereClause(filters: GetWorkOrdersFilters): { sqlParameters.push(...occupantNameFilters.sqlParameters) } - const lotNameFilters = getBurialSiteNameWhereClause(filters.lotName, '', 'l') - if (lotNameFilters.sqlParameters.length > 0) { + const burialSiteNameFilters = getBurialSiteNameWhereClause(filters.lotName, '', 'l') + if (burialSiteNameFilters.sqlParameters.length > 0) { sqlWhereClause += ` and w.workOrderId in ( - select workOrderId from WorkOrderLots + select workOrderId from WorkOrderBurialSites where recordDelete_timeMillis is null - and lotId in ( - select lotId from Lots l + and burialSiteId in ( + select burialSiteId from BurialSites l where recordDelete_timeMillis is null - ${lotNameFilters.sqlWhereClause} + ${burialSiteNameFilters.sqlWhereClause} ))` - sqlParameters.push(...lotNameFilters.sqlParameters) + sqlParameters.push(...burialSiteNameFilters.sqlParameters) } if ((filters.burialSiteContractId ?? '') !== '') { @@ -115,40 +115,40 @@ async function addInclusions( ) } - if (options.includeLotsAndBurialSiteContracts ?? false) { - if (workOrder.workOrderLotCount === 0) { - workOrder.workOrderLots = [] + if (options.includeBurialSites ?? false) { + if (workOrder.workOrderBurialSiteCount === 0) { + workOrder.workOrderBurialSites = [] } else { - const workOrderLotsResults = await getLots( + const workOrderBurialSitesResults = await getBurialSites( { workOrderId: workOrder.workOrderId }, { limit: -1, offset: 0, - includeLotOccupancyCount: false + includeBurialSiteContractCount: false }, database ) - workOrder.workOrderLots = workOrderLotsResults.lots + workOrder.workOrderBurialSites = workOrderBurialSitesResults.burialSites } - const BurialSiteContracts = await getBurialSiteContracts( + const burialSiteContracts = await getBurialSiteContracts( { workOrderId: workOrder.workOrderId }, { limit: -1, offset: 0, - includeOccupants: true, + includeInterments: true, includeFees: false, includeTransactions: false }, database ) - workOrder.workOrderBurialSiteContracts = BurialSiteContracts.BurialSiteContracts + workOrder.workOrderBurialSiteContracts = burialSiteContracts.burialSiteContracts } if (options.includeMilestones ?? false) { @@ -230,7 +230,7 @@ export async function getWorkOrders( const hasInclusions = (options.includeComments ?? false) || - (options.includeLotsAndBurialSiteContracts ?? false) || + (options.includeBurialSites ?? false) || (options.includeMilestones ?? false) if (hasInclusions) { diff --git a/database/updateBurialSiteContractComment.d.ts b/database/updateBurialSiteContractComment.d.ts index 0a20be62..af05dcfe 100644 --- a/database/updateBurialSiteContractComment.d.ts +++ b/database/updateBurialSiteContractComment.d.ts @@ -1,8 +1,8 @@ import { type DateString, type TimeString } from '@cityssm/utils-datetime'; -export interface BurialSiteCommentUpdateForm { +export interface UpdateForm { burialSiteContractCommentId: string | number; commentDateString: DateString; commentTimeString: TimeString; comment: string; } -export default function updateBurialSiteContractComment(commentForm: BurialSiteCommentUpdateForm, user: User): Promise; +export default function updateBurialSiteContractComment(commentForm: UpdateForm, user: User): Promise; diff --git a/database/updateBurialSiteContractComment.ts b/database/updateBurialSiteContractComment.ts index c66ce316..3d05bc5e 100644 --- a/database/updateBurialSiteContractComment.ts +++ b/database/updateBurialSiteContractComment.ts @@ -7,7 +7,7 @@ import { import { acquireConnection } from './pool.js' -export interface BurialSiteCommentUpdateForm { +export interface UpdateForm { burialSiteContractCommentId: string | number commentDateString: DateString commentTimeString: TimeString @@ -15,7 +15,7 @@ export interface BurialSiteCommentUpdateForm { } export default async function updateBurialSiteContractComment( - commentForm: BurialSiteCommentUpdateForm, + commentForm: UpdateForm, user: User ): Promise { const database = await acquireConnection() diff --git a/database/updateLotOccupancyOccupant.d.ts b/database/updateLotOccupancyOccupant.d.ts index d864bd33..a5bcc9c2 100644 --- a/database/updateLotOccupancyOccupant.d.ts +++ b/database/updateLotOccupancyOccupant.d.ts @@ -13,4 +13,4 @@ export interface UpdateLotOccupancyOccupantForm { occupantEmailAddress: string; occupantComment: string; } -export default function updateLotOccupancyOccupant(burialSiteContractOccupantForm: UpdateLotOccupancyOccupantForm, user: User): Promise; +export default function updateBurialSiteContractOccupant(burialSiteContractOccupantForm: UpdateLotOccupancyOccupantForm, user: User): Promise; diff --git a/database/updateLotOccupancyOccupant.js b/database/updateLotOccupancyOccupant.js index fab7d407..aed18e1e 100644 --- a/database/updateLotOccupancyOccupant.js +++ b/database/updateLotOccupancyOccupant.js @@ -1,5 +1,5 @@ import { acquireConnection } from './pool.js'; -export default async function updateLotOccupancyOccupant(burialSiteContractOccupantForm, user) { +export default async function updateBurialSiteContractOccupant(burialSiteContractOccupantForm, user) { const database = await acquireConnection(); const results = database .prepare(`update LotOccupancyOccupants diff --git a/database/updateLotOccupancyOccupant.ts b/database/updateLotOccupancyOccupant.ts index 9c07722e..bbeafdd1 100644 --- a/database/updateLotOccupancyOccupant.ts +++ b/database/updateLotOccupancyOccupant.ts @@ -16,7 +16,7 @@ export interface UpdateLotOccupancyOccupantForm { occupantComment: string } -export default async function updateLotOccupancyOccupant( +export default async function updateBurialSiteContractOccupant( burialSiteContractOccupantForm: UpdateLotOccupancyOccupantForm, user: User ): Promise { diff --git a/handlers/api-get/milestoneICS.js b/handlers/api-get/milestoneICS.js index e54f1ff3..fd2c9376 100644 --- a/handlers/api-get/milestoneICS.js +++ b/handlers/api-get/milestoneICS.js @@ -23,7 +23,7 @@ function buildEventSummary(milestone) { ? milestone.workOrderMilestoneDescription ?? '' : milestone.workOrderMilestoneType ?? '').trim(); let occupantCount = 0; - for (const burialSiteContract of milestone.workOrderLotOccupancies ?? []) { + for (const burialSiteContract of milestone.workOrderBurialSiteContracts ?? []) { for (const occupant of burialSiteContract.burialSiteContractOccupants ?? []) { occupantCount += 1; if (occupantCount === 1) { @@ -42,21 +42,21 @@ function buildEventSummary(milestone) { // eslint-disable-next-line @typescript-eslint/naming-convention function buildEventDescriptionHTML_occupancies(request, milestone) { let descriptionHTML = ''; - if (milestone.workOrderLotOccupancies.length > 0) { + if (milestone.workOrderBurialSiteContracts.length > 0) { const urlRoot = getUrlRoot(request); descriptionHTML = `

- Related ${escapeHTML(getConfigProperty('aliases.occupancies'))} + Related Contracts

- - + + `; - for (const occupancy of milestone.workOrderLotOccupancies ?? []) { + for (const occupancy of milestone.workOrderBurialSiteContracts ?? []) { descriptionHTML += ` - - - `; - tableRowElement - .querySelector('.button--edit') - ?.addEventListener('click', editLotOccupancyTransaction); - tableRowElement - .querySelector('.button--delete') - ?.addEventListener('click', deleteLotOccupancyTransaction); - lotOccupancyTransactionsContainerElement - .querySelector('tbody') - ?.append(tableRowElement); - } - ; - lotOccupancyTransactionsContainerElement.querySelector('#lotOccupancyTransactions--grandTotal').textContent = `$${transactionGrandTotal.toFixed(2)}`; - const feeGrandTotal = getFeeGrandTotal(); - if (feeGrandTotal.toFixed(2) !== transactionGrandTotal.toFixed(2)) { - lotOccupancyTransactionsContainerElement.insertAdjacentHTML('afterbegin', `
-
-
-
-
Outstanding Balance
-
-
-
- $${cityssm.escapeHTML((feeGrandTotal - transactionGrandTotal).toFixed(2))} -
-
-
-
`); - } - } - const addTransactionButtonElement = document.querySelector('#button--addTransaction'); - addTransactionButtonElement.addEventListener('click', () => { - let transactionAmountElement; - let externalReceiptNumberElement; - let addCloseModalFunction; - function doAddTransaction(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doAddLotOccupancyTransaction`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyTransactions = responseJSON.lotOccupancyTransactions; - addCloseModalFunction(); - renderLotOccupancyTransactions(); - } - else { - bulmaJS.confirm({ - title: 'Error Adding Transaction', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - // eslint-disable-next-line @typescript-eslint/naming-convention - function dynamicsGP_refreshExternalReceiptNumberIcon() { - const externalReceiptNumber = externalReceiptNumberElement.value; - const iconElement = externalReceiptNumberElement - .closest('.control') - ?.querySelector('.icon'); - const helpTextElement = externalReceiptNumberElement - .closest('.field') - ?.querySelector('.help'); - if (externalReceiptNumber === '') { - helpTextElement.innerHTML = ' '; - iconElement.innerHTML = - ''; - return; - } - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doGetDynamicsGPDocument`, { - externalReceiptNumber - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (!responseJSON.success || - responseJSON.dynamicsGPDocument === undefined) { - helpTextElement.textContent = 'No Matching Document Found'; - iconElement.innerHTML = - ''; - } - else if (transactionAmountElement.valueAsNumber === - responseJSON.dynamicsGPDocument.documentTotal) { - helpTextElement.textContent = 'Matching Document Found'; - iconElement.innerHTML = - ''; - } - else { - helpTextElement.textContent = `Matching Document: $${responseJSON.dynamicsGPDocument.documentTotal.toFixed(2)}`; - iconElement.innerHTML = - ''; - } - }); - } - cityssm.openHtmlModal('lotOccupancy-addTransaction', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#lotOccupancyTransactionAdd--lotOccupancyId').value = lotOccupancyId.toString(); - const feeGrandTotal = getFeeGrandTotal(); - const transactionGrandTotal = getTransactionGrandTotal(); - transactionAmountElement = modalElement.querySelector('#lotOccupancyTransactionAdd--transactionAmount'); - transactionAmountElement.min = (-1 * transactionGrandTotal).toFixed(2); - transactionAmountElement.max = Math.max(feeGrandTotal - transactionGrandTotal, 0).toFixed(2); - transactionAmountElement.value = Math.max(feeGrandTotal - transactionGrandTotal, 0).toFixed(2); - if (los.dynamicsGPIntegrationIsEnabled) { - externalReceiptNumberElement = modalElement.querySelector( - // eslint-disable-next-line no-secrets/no-secrets - '#lotOccupancyTransactionAdd--externalReceiptNumber'); - const externalReceiptNumberControlElement = externalReceiptNumberElement.closest('.control'); - externalReceiptNumberControlElement.classList.add('has-icons-right'); - externalReceiptNumberControlElement.insertAdjacentHTML('beforeend', ''); - externalReceiptNumberControlElement.insertAdjacentHTML('afterend', '

'); - externalReceiptNumberElement.addEventListener('change', dynamicsGP_refreshExternalReceiptNumberIcon); - transactionAmountElement.addEventListener('change', dynamicsGP_refreshExternalReceiptNumberIcon); - dynamicsGP_refreshExternalReceiptNumberIcon(); - } - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - transactionAmountElement.focus(); - addCloseModalFunction = closeModalFunction; - modalElement - .querySelector('form') - ?.addEventListener('submit', doAddTransaction); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - addTransactionButtonElement.focus(); - } - }); - }); - renderLotOccupancyFees(); - })(); - } -})(); diff --git a/public/javascripts/lotOccupancySearch.d.ts b/public/javascripts/lotOccupancySearch.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/lotOccupancySearch.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/lotOccupancySearch.js b/public/javascripts/lotOccupancySearch.js deleted file mode 100644 index eba4a0df..00000000 --- a/public/javascripts/lotOccupancySearch.js +++ /dev/null @@ -1,152 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - const searchFilterFormElement = document.querySelector('#form--searchFilters'); - const searchResultsContainerElement = document.querySelector('#container--searchResults'); - const limit = Number.parseInt(document.querySelector('#searchFilter--limit').value, 10); - const offsetElement = document.querySelector('#searchFilter--offset'); - function renderLotOccupancies(rawResponseJSON) { - const responseJSON = rawResponseJSON; - if (responseJSON.lotOccupancies.length === 0) { - // eslint-disable-next-line no-unsanitized/property - searchResultsContainerElement.innerHTML = `
-

- There are no ${los.escapedAliases.occupancy} records that meet the search criteria. -

-
`; - return; - } - const resultsTbodyElement = document.createElement('tbody'); - const nowDateString = cityssm.dateToString(new Date()); - for (const lotOccupancy of responseJSON.lotOccupancies) { - let occupancyTimeHTML = ''; - if (lotOccupancy.occupancyStartDateString <= nowDateString && - (lotOccupancy.occupancyEndDateString === '' || - lotOccupancy.occupancyEndDateString >= nowDateString)) { - occupancyTimeHTML = ` - - `; - } - else if (lotOccupancy.occupancyStartDateString > nowDateString) { - occupancyTimeHTML = ` - - `; - } - else { - occupancyTimeHTML = ` - - `; - } - let occupantsHTML = ''; - for (const occupant of lotOccupancy.lotOccupancyOccupants ?? []) { - occupantsHTML += `
  • - - - - ${cityssm.escapeHTML(occupant.occupantName ?? '')} - ${cityssm.escapeHTML(occupant.occupantFamilyName ?? '')} -
  • `; - } - const feeTotal = (lotOccupancy.lotOccupancyFees?.reduce((soFar, currentFee) => soFar + - ((currentFee.feeAmount ?? 0) + (currentFee.taxAmount ?? 0)) * - (currentFee.quantity ?? 0), 0) ?? 0).toFixed(2); - const transactionTotal = (lotOccupancy.lotOccupancyTransactions?.reduce((soFar, currentTransaction) => soFar + currentTransaction.transactionAmount, 0) ?? 0).toFixed(2); - let feeIconHTML = ''; - if (feeTotal !== '0.00' || transactionTotal !== '0.00') { - feeIconHTML = ` - - `; - } - // eslint-disable-next-line no-unsanitized/method - resultsTbodyElement.insertAdjacentHTML('beforeend', ` - `); - } - // eslint-disable-next-line no-unsanitized/property - searchResultsContainerElement.innerHTML = `
    ${escapeHTML(getConfigProperty('aliases.occupancy'))} Type${escapeHTML(getConfigProperty('aliases.lot'))}Contract TypeBurial Site Start Date End Date ${escapeHTML(getConfigProperty('aliases.occupants'))}
    @@ -87,34 +87,28 @@ function buildEventDescriptionHTML_occupancies(request, milestone) { // eslint-disable-next-line @typescript-eslint/naming-convention function buildEventDescriptionHTML_lots(request, milestone) { let descriptionHTML = ''; - if (milestone.workOrderLots.length > 0) { + if ((milestone.workOrderBurialSites ?? []).length > 0) { const urlRoot = getUrlRoot(request); descriptionHTML += `

    - Related ${escapeHTML(getConfigProperty('aliases.lots'))} + Related Burial Sites

    - - - + + + `; - for (const lot of milestone.workOrderLots ?? []) { + for (const burialSite of milestone.workOrderBurialSites ?? []) { descriptionHTML += ` - - - + + + `; } descriptionHTML += '
    - ${escapeHTML(getConfigProperty('aliases.lot'))} - - ${escapeHTML(getConfigProperty('aliases.map'))} - - ${escapeHTML(getConfigProperty('aliases.lot'))} Type - Burial SiteCemeteryBurial Site Type Status
    - - ${escapeHTML(lot.lotName ?? '')} + + ${escapeHTML(burialSite.burialSiteName ?? '')} ${escapeHTML(lot.cemeteryName ?? '')}${escapeHTML(lot.lotType ?? '')}${escapeHTML(lot.lotStatus ?? '')}${escapeHTML(burialSite.cemeteryName ?? '')}${escapeHTML(burialSite.burialSiteType ?? '')}${escapeHTML(burialSite.burialSiteStatus ?? '')}
    '; @@ -163,13 +157,13 @@ function buildEventCategoryList(milestone) { return categories; } function buildEventLocation(milestone) { - const lotNames = []; - if (milestone.workOrderLots.length > 0) { - for (const lot of milestone.workOrderLots ?? []) { - lotNames.push(`${lot.cemeteryName ?? ''}: ${lot.lotName ?? ''}`); + const burialSiteNames = []; + if ((milestone.workOrderBurialSites ?? []).length > 0) { + for (const burialSite of milestone.workOrderBurialSites ?? []) { + burialSiteNames.push(`${burialSite.cemeteryName ?? ''}: ${burialSite.burialSiteName ?? ''}`); } } - return lotNames.join(', '); + return burialSiteNames.join(', '); } export default async function handler(request, response) { const urlRoot = getUrlRoot(request); @@ -253,9 +247,9 @@ export default async function handler(request, response) { const location = buildEventLocation(milestone); calendarEvent.location(location); // Set organizer / attendees - if (milestone.workOrderLotOccupancies.length > 0) { + if (milestone.workOrderBurialSiteContracts.length > 0) { let organizerSet = false; - for (const burialSiteContract of milestone.workOrderLotOccupancies ?? []) { + for (const burialSiteContract of milestone.workOrderBurialSiteContracts ?? []) { for (const occupant of burialSiteContract.burialSiteContractOccupants ?? []) { if (organizerSet) { calendarEvent.createAttendee({ diff --git a/handlers/api-get/milestoneICS.ts b/handlers/api-get/milestoneICS.ts index 36f56153..65686f16 100644 --- a/handlers/api-get/milestoneICS.ts +++ b/handlers/api-get/milestoneICS.ts @@ -47,7 +47,7 @@ function buildEventSummary(milestone: WorkOrderMilestone): string { let occupantCount = 0 - for (const burialSiteContract of milestone.workOrderLotOccupancies ?? []) { + for (const burialSiteContract of milestone.workOrderBurialSiteContracts ?? []) { for (const occupant of burialSiteContract.burialSiteContractOccupants ?? []) { occupantCount += 1 @@ -75,23 +75,23 @@ function buildEventDescriptionHTML_occupancies( ): string { let descriptionHTML = '' - if (milestone.workOrderLotOccupancies!.length > 0) { + if (milestone.workOrderBurialSiteContracts!.length > 0) { const urlRoot = getUrlRoot(request) descriptionHTML = `

    - Related ${escapeHTML(getConfigProperty('aliases.occupancies'))} + Related Contracts

    - - + + ` - for (const occupancy of milestone.workOrderLotOccupancies ?? []) { + for (const occupancy of milestone.workOrderBurialSiteContracts ?? []) { descriptionHTML += ` - ${lotOccupancyFee.quantity === 1 - ? '' - : ` - - - `} - - `; - tableRowElement - .querySelector('.button--editQuantity') - ?.addEventListener('click', editLotOccupancyFeeQuantity); - tableRowElement - .querySelector('.button--delete') - ?.addEventListener('click', deleteLotOccupancyFee); - lotOccupancyFeesContainerElement - .querySelector('tbody') - ?.append(tableRowElement); - feeAmountTotal += - (lotOccupancyFee.feeAmount ?? 0) * (lotOccupancyFee.quantity ?? 0); - taxAmountTotal += - (lotOccupancyFee.taxAmount ?? 0) * (lotOccupancyFee.quantity ?? 0); - } - ; - lotOccupancyFeesContainerElement.querySelector('#lotOccupancyFees--feeAmountTotal').textContent = `$${feeAmountTotal.toFixed(2)}`; - lotOccupancyFeesContainerElement.querySelector('#lotOccupancyFees--taxAmountTotal').textContent = `$${taxAmountTotal.toFixed(2)}`; - lotOccupancyFeesContainerElement.querySelector('#lotOccupancyFees--grandTotal').textContent = `$${(feeAmountTotal + taxAmountTotal).toFixed(2)}`; - renderLotOccupancyTransactions(); - } - const addFeeButtonElement = document.querySelector('#button--addFee'); - addFeeButtonElement.addEventListener('click', () => { - if (los.hasUnsavedChanges()) { - bulmaJS.alert({ - message: 'Please save all unsaved changes before adding fees.', - contextualColorName: 'warning' - }); - return; - } - let feeCategories; - let feeFilterElement; - let feeFilterResultsElement; - function doAddFeeCategory(clickEvent) { - clickEvent.preventDefault(); - const feeCategoryId = Number.parseInt(clickEvent.currentTarget.dataset.feeCategoryId ?? - '', 10); - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doAddLotOccupancyFeeCategory`, { - lotOccupancyId, - feeCategoryId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyFees = responseJSON.lotOccupancyFees; - renderLotOccupancyFees(); - bulmaJS.alert({ - message: 'Fee Group Added Successfully', - contextualColorName: 'success' - }); - } - else { - bulmaJS.alert({ - title: 'Error Adding Fee', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function doAddFee(feeId, quantity = 1) { - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doAddLotOccupancyFee`, { - lotOccupancyId, - feeId, - quantity - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyFees = responseJSON.lotOccupancyFees; - renderLotOccupancyFees(); - filterFees(); - } - else { - bulmaJS.alert({ - title: 'Error Adding Fee', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function doSetQuantityAndAddFee(fee) { - let quantityElement; - let quantityCloseModalFunction; - function doSetQuantity(submitEvent) { - submitEvent.preventDefault(); - doAddFee(fee.feeId, quantityElement.value); - quantityCloseModalFunction(); - } - cityssm.openHtmlModal('lotOccupancy-setFeeQuantity', { - onshow(modalElement) { - ; - modalElement.querySelector('#lotOccupancyFeeQuantity--quantityUnit').textContent = fee.quantityUnit ?? ''; - }, - onshown(modalElement, closeModalFunction) { - quantityCloseModalFunction = closeModalFunction; - quantityElement = modalElement.querySelector('#lotOccupancyFeeQuantity--quantity'); - modalElement - .querySelector('form') - ?.addEventListener('submit', doSetQuantity); - } - }); - } - function tryAddFee(clickEvent) { - clickEvent.preventDefault(); - const feeId = Number.parseInt(clickEvent.currentTarget.dataset.feeId ?? '', 10); - const feeCategoryId = Number.parseInt(clickEvent.currentTarget.dataset.feeCategoryId ?? - '', 10); - const feeCategory = feeCategories.find((currentFeeCategory) => { - return currentFeeCategory.feeCategoryId === feeCategoryId; - }); - const fee = feeCategory.fees.find((currentFee) => { - return currentFee.feeId === feeId; - }); - if (fee.includeQuantity ?? false) { - doSetQuantityAndAddFee(fee); - } - else { - doAddFee(feeId); - } - } - function filterFees() { - const filterStringPieces = feeFilterElement.value - .trim() - .toLowerCase() - .split(' '); - feeFilterResultsElement.innerHTML = ''; - for (const feeCategory of feeCategories) { - const categoryContainerElement = document.createElement('div'); - categoryContainerElement.className = 'container--feeCategory'; - categoryContainerElement.dataset.feeCategoryId = - feeCategory.feeCategoryId.toString(); - categoryContainerElement.innerHTML = `
    -
    -

    - ${cityssm.escapeHTML(feeCategory.feeCategory ?? '')} -

    -
    -
    -
    `; - if (feeCategory.isGroupedFee) { - // eslint-disable-next-line no-unsanitized/method - categoryContainerElement - .querySelector('.columns') - ?.insertAdjacentHTML('beforeend', `
    - -
    `); - categoryContainerElement - .querySelector('button') - ?.addEventListener('click', doAddFeeCategory); - } - let hasFees = false; - for (const fee of feeCategory.fees) { - // Don't include already applied fees that limit quantity - if (lotOccupancyFeesContainerElement.querySelector(`.container--lotOccupancyFee[data-fee-id='${fee.feeId}'][data-include-quantity='0']`) !== null) { - continue; - } - let includeFee = true; - const feeSearchString = `${feeCategory.feeCategory ?? ''} ${fee.feeName ?? ''} ${fee.feeDescription ?? ''}`.toLowerCase(); - for (const filterStringPiece of filterStringPieces) { - if (!feeSearchString.includes(filterStringPiece)) { - includeFee = false; - break; - } - } - if (!includeFee) { - continue; - } - hasFees = true; - const panelBlockElement = document.createElement(feeCategory.isGroupedFee ? 'div' : 'a'); - panelBlockElement.className = - 'panel-block is-block container--fee'; - panelBlockElement.dataset.feeId = fee.feeId.toString(); - panelBlockElement.dataset.feeCategoryId = - feeCategory.feeCategoryId.toString(); - // eslint-disable-next-line no-unsanitized/property - panelBlockElement.innerHTML = `${cityssm.escapeHTML(fee.feeName ?? '')}
    - - ${ - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - cityssm - .escapeHTML(fee.feeDescription ?? '') - .replaceAll('\n', '
    ')} -
    `; - if (!feeCategory.isGroupedFee) { - ; - panelBlockElement.href = '#'; - panelBlockElement.addEventListener('click', tryAddFee); - } - ; - categoryContainerElement.querySelector('.panel').append(panelBlockElement); - } - if (hasFees) { - feeFilterResultsElement.append(categoryContainerElement); - } - } - } - cityssm.openHtmlModal('lotOccupancy-addFee', { - onshow(modalElement) { - feeFilterElement = modalElement.querySelector('#feeSelect--feeName'); - feeFilterResultsElement = modalElement.querySelector('#resultsContainer--feeSelect'); - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doGetFees`, { - lotOccupancyId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - feeCategories = responseJSON.feeCategories; - feeFilterElement.disabled = false; - feeFilterElement.addEventListener('keyup', filterFees); - feeFilterElement.focus(); - filterFees(); - }); - }, - onshown() { - bulmaJS.toggleHtmlClipped(); - }, - onhidden() { - renderLotOccupancyFees(); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - addFeeButtonElement.focus(); - } - }); - }); - let lotOccupancyTransactions = exports.lotOccupancyTransactions; - delete exports.lotOccupancyTransactions; - const lotOccupancyTransactionsContainerElement = document.querySelector('#container--lotOccupancyTransactions'); - function getTransactionGrandTotal() { - let transactionGrandTotal = 0; - for (const lotOccupancyTransaction of lotOccupancyTransactions) { - transactionGrandTotal += lotOccupancyTransaction.transactionAmount; - } - return transactionGrandTotal; - } - function editLotOccupancyTransaction(clickEvent) { - const transactionIndex = Number.parseInt(clickEvent.currentTarget.closest('tr')?.dataset - .transactionIndex ?? '', 10); - const transaction = lotOccupancyTransactions.find((possibleTransaction) => { - return possibleTransaction.transactionIndex === transactionIndex; - }); - let editCloseModalFunction; - function doEdit(formEvent) { - formEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doUpdateLotOccupancyTransaction`, formEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyTransactions = responseJSON.lotOccupancyTransactions; - renderLotOccupancyTransactions(); - editCloseModalFunction(); - } - else { - bulmaJS.alert({ - title: 'Error Updating Transaction', - message: 'Please try again.', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('lotOccupancy-editTransaction', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#lotOccupancyTransactionEdit--lotOccupancyId').value = lotOccupancyId; - modalElement.querySelector('#lotOccupancyTransactionEdit--transactionIndex').value = transaction.transactionIndex?.toString() ?? ''; - modalElement.querySelector('#lotOccupancyTransactionEdit--transactionAmount').value = transaction.transactionAmount.toFixed(2); - modalElement.querySelector('#lotOccupancyTransactionEdit--externalReceiptNumber').value = transaction.externalReceiptNumber ?? ''; - modalElement.querySelector('#lotOccupancyTransactionEdit--transactionNote').value = transaction.transactionNote ?? ''; - modalElement.querySelector('#lotOccupancyTransactionEdit--transactionDateString').value = transaction.transactionDateString ?? ''; - modalElement.querySelector('#lotOccupancyTransactionEdit--transactionTimeString').value = transaction.transactionTimeString ?? ''; - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - los.initializeDatePickers(modalElement); - modalElement.querySelector('#lotOccupancyTransactionEdit--transactionAmount').focus(); - modalElement - .querySelector('form') - ?.addEventListener('submit', doEdit); - editCloseModalFunction = closeModalFunction; - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function deleteLotOccupancyTransaction(clickEvent) { - const transactionIndex = clickEvent.currentTarget.closest('.container--lotOccupancyTransaction').dataset.transactionIndex; - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doDeleteLotOccupancyTransaction`, { - lotOccupancyId, - transactionIndex - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyTransactions = responseJSON.lotOccupancyTransactions; - renderLotOccupancyTransactions(); - } - else { - bulmaJS.alert({ - title: 'Error Deleting Transaction', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: 'Delete Transaction', - message: 'Are you sure you want to delete this transaction?', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete Transaction', - callbackFunction: doDelete - } - }); - } - function renderLotOccupancyTransactions() { - if (lotOccupancyTransactions.length === 0) { - // eslint-disable-next-line no-unsanitized/property - lotOccupancyTransactionsContainerElement.innerHTML = `
    -

    There are no transactions associated with this record.

    -
    `; - return; - } - // eslint-disable-next-line no-unsanitized/property - lotOccupancyTransactionsContainerElement.innerHTML = `
    ${escapeHTML(getConfigProperty('aliases.occupancy'))} Type${escapeHTML(getConfigProperty('aliases.lot'))}Contract TypeBurial Site Start Date End Date ${escapeHTML(getConfigProperty('aliases.occupants'))}
    @@ -137,36 +137,30 @@ function buildEventDescriptionHTML_lots( ): string { let descriptionHTML = '' - if (milestone.workOrderLots!.length > 0) { + if ((milestone.workOrderBurialSites ?? []).length > 0) { const urlRoot = getUrlRoot(request) descriptionHTML += `

    - Related ${escapeHTML(getConfigProperty('aliases.lots'))} + Related Burial Sites

    - - - + + + ` - for (const lot of milestone.workOrderLots ?? []) { + for (const burialSite of milestone.workOrderBurialSites ?? []) { descriptionHTML += ` - - - + + + ` } @@ -242,14 +236,14 @@ function buildEventCategoryList(milestone: WorkOrderMilestone): string[] { } function buildEventLocation(milestone: WorkOrderMilestone): string { - const lotNames: string[] = [] + const burialSiteNames: string[] = [] - if (milestone.workOrderLots!.length > 0) { - for (const lot of milestone.workOrderLots ?? []) { - lotNames.push(`${lot.cemeteryName ?? ''}: ${lot.lotName ?? ''}`) + if ((milestone.workOrderBurialSites ?? []).length > 0) { + for (const burialSite of milestone.workOrderBurialSites ?? []) { + burialSiteNames.push(`${burialSite.cemeteryName ?? ''}: ${burialSite.burialSiteName ?? ''}`) } } - return lotNames.join(', ') + return burialSiteNames.join(', ') } export default async function handler( @@ -375,9 +369,9 @@ export default async function handler( calendarEvent.location(location) // Set organizer / attendees - if (milestone.workOrderLotOccupancies!.length > 0) { + if (milestone.workOrderBurialSiteContracts!.length > 0) { let organizerSet = false - for (const burialSiteContract of milestone.workOrderLotOccupancies ?? []) { + for (const burialSiteContract of milestone.workOrderBurialSiteContracts ?? []) { for (const occupant of burialSiteContract.burialSiteContractOccupants ?? []) { if (organizerSet) { calendarEvent.createAttendee({ diff --git a/handlers/contracts-post/doSearchBurialSiteContracts.d.ts b/handlers/contracts-post/doSearchBurialSiteContracts.d.ts index 19d32e4d..e7b4b06f 100644 --- a/handlers/contracts-post/doSearchBurialSiteContracts.d.ts +++ b/handlers/contracts-post/doSearchBurialSiteContracts.d.ts @@ -1,2 +1,3 @@ import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): Promise; +import { type GetBurialSiteContractsFilters, type GetBurialSiteContractsOptions } from '../../database/getBurialSiteContracts.js'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/contracts-post/doSearchBurialSiteContracts.js b/handlers/contracts-post/doSearchBurialSiteContracts.js index 6e9e6bb3..edd61514 100644 --- a/handlers/contracts-post/doSearchBurialSiteContracts.js +++ b/handlers/contracts-post/doSearchBurialSiteContracts.js @@ -3,13 +3,15 @@ export default async function handler(request, response) { const result = await getBurialSiteContracts(request.body, { limit: request.body.limit, offset: request.body.offset, - includeOccupants: true, + includeInterments: true, includeFees: true, includeTransactions: true }); response.json({ count: result.count, - offset: Number.parseInt(request.body.offset, 10), - lotOccupancies: result.lotOccupancies + offset: typeof request.body.offset === 'string' + ? Number.parseInt(request.body.offset, 10) + : request.body.offset, + burialSiteContracts: result.burialSiteContracts }); } diff --git a/handlers/contracts-post/doSearchBurialSiteContracts.ts b/handlers/contracts-post/doSearchBurialSiteContracts.ts index c36b94f9..f2065cdc 100644 --- a/handlers/contracts-post/doSearchBurialSiteContracts.ts +++ b/handlers/contracts-post/doSearchBurialSiteContracts.ts @@ -1,22 +1,32 @@ import type { Request, Response } from 'express' -import getBurialSiteContracts from '../../database/getBurialSiteContracts.js' +import getBurialSiteContracts, { + type GetBurialSiteContractsFilters, + type GetBurialSiteContractsOptions +} from '../../database/getBurialSiteContracts.js' export default async function handler( - request: Request, + request: Request< + unknown, + unknown, + GetBurialSiteContractsFilters & GetBurialSiteContractsOptions + >, response: Response ): Promise { const result = await getBurialSiteContracts(request.body, { limit: request.body.limit, offset: request.body.offset, - includeOccupants: true, + includeInterments: true, includeFees: true, includeTransactions: true }) response.json({ count: result.count, - offset: Number.parseInt(request.body.offset, 10), - lotOccupancies: result.lotOccupancies + offset: + typeof request.body.offset === 'string' + ? Number.parseInt(request.body.offset, 10) + : request.body.offset, + burialSiteContracts: result.burialSiteContracts }) } diff --git a/handlers/contracts-post/doUpdateBurialSiteContract.d.ts b/handlers/contracts-post/doUpdateBurialSiteContract.d.ts index 19d32e4d..2898c95b 100644 --- a/handlers/contracts-post/doUpdateBurialSiteContract.d.ts +++ b/handlers/contracts-post/doUpdateBurialSiteContract.d.ts @@ -1,2 +1,3 @@ import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): Promise; +import { type UpdateBurialSiteContractForm } from '../../database/updateBurialSiteContract.js'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/contracts-post/doUpdateBurialSiteContract.js b/handlers/contracts-post/doUpdateBurialSiteContract.js index 4bee3138..cb09ee7c 100644 --- a/handlers/contracts-post/doUpdateBurialSiteContract.js +++ b/handlers/contracts-post/doUpdateBurialSiteContract.js @@ -1,6 +1,6 @@ -import updateLotOccupancy from '../../database/updateLotOccupancy.js'; +import updateBurialSiteContract from '../../database/updateBurialSiteContract.js'; export default async function handler(request, response) { - const success = await updateLotOccupancy(request.body, request.session.user); + const success = await updateBurialSiteContract(request.body, request.session.user); response.json({ success, burialSiteContractId: request.body.burialSiteContractId diff --git a/handlers/contracts-post/doUpdateBurialSiteContract.ts b/handlers/contracts-post/doUpdateBurialSiteContract.ts index f534862c..4a19e7c4 100644 --- a/handlers/contracts-post/doUpdateBurialSiteContract.ts +++ b/handlers/contracts-post/doUpdateBurialSiteContract.ts @@ -1,20 +1,20 @@ import type { Request, Response } from 'express' -import updateLotOccupancy, { - type UpdateLotOccupancyForm -} from '../../database/updateLotOccupancy.js' +import updateBurialSiteContract, { + type UpdateBurialSiteContractForm +} from '../../database/updateBurialSiteContract.js' export default async function handler( - request: Request, + request: Request, response: Response ): Promise { - const success = await updateLotOccupancy( - request.body as UpdateLotOccupancyForm, + const success = await updateBurialSiteContract( + request.body, request.session.user as User ) response.json({ success, - burialSiteContractId: request.body.burialSiteContractId as string + burialSiteContractId: request.body.burialSiteContractId }) } diff --git a/handlers/contracts-post/doUpdateBurialSiteContractComment.d.ts b/handlers/contracts-post/doUpdateBurialSiteContractComment.d.ts index 19d32e4d..0bf71c74 100644 --- a/handlers/contracts-post/doUpdateBurialSiteContractComment.d.ts +++ b/handlers/contracts-post/doUpdateBurialSiteContractComment.d.ts @@ -1,2 +1,5 @@ import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): Promise; +import { type UpdateForm } from '../../database/updateBurialSiteContractComment.js'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/contracts-post/doUpdateBurialSiteContractComment.js b/handlers/contracts-post/doUpdateBurialSiteContractComment.js index 675beec6..fdbf1682 100644 --- a/handlers/contracts-post/doUpdateBurialSiteContractComment.js +++ b/handlers/contracts-post/doUpdateBurialSiteContractComment.js @@ -1,7 +1,7 @@ import getBurialSiteContractComments from '../../database/getBurialSiteContractComments.js'; -import updateLotOccupancyComment from '../../database/updateLotOccupancyComment.js'; +import updateBurialSiteContractComment from '../../database/updateBurialSiteContractComment.js'; export default async function handler(request, response) { - const success = await updateLotOccupancyComment(request.body, request.session.user); + const success = await updateBurialSiteContractComment(request.body, request.session.user); const burialSiteContractComments = await getBurialSiteContractComments(request.body.burialSiteContractId); response.json({ success, diff --git a/handlers/contracts-post/doUpdateBurialSiteContractComment.ts b/handlers/contracts-post/doUpdateBurialSiteContractComment.ts index b7db956e..aa52dc7e 100644 --- a/handlers/contracts-post/doUpdateBurialSiteContractComment.ts +++ b/handlers/contracts-post/doUpdateBurialSiteContractComment.ts @@ -1,21 +1,25 @@ import type { Request, Response } from 'express' import getBurialSiteContractComments from '../../database/getBurialSiteContractComments.js' -import updateLotOccupancyComment, { - type UpdateLotOccupancyCommentForm -} from '../../database/updateLotOccupancyComment.js' +import updateBurialSiteContractComment, { + type UpdateForm +} from '../../database/updateBurialSiteContractComment.js' export default async function handler( - request: Request, + request: Request< + unknown, + unknown, + UpdateForm & { burialSiteContractId: string } + >, response: Response ): Promise { - const success = await updateLotOccupancyComment( - request.body as UpdateLotOccupancyCommentForm, + const success = await updateBurialSiteContractComment( + request.body, request.session.user as User ) const burialSiteContractComments = await getBurialSiteContractComments( - request.body.burialSiteContractId as string + request.body.burialSiteContractId ) response.json({ diff --git a/handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.d.ts b/handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.d.ts index 19d32e4d..8f9659de 100644 --- a/handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.d.ts +++ b/handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.d.ts @@ -1,2 +1,3 @@ import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): Promise; +import { type UpdateBurialSiteFeeForm } from '../../database/updateBurialSiteContractFeeQuantity.js'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.js b/handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.js index af1c2dd5..8df0ed17 100644 --- a/handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.js +++ b/handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.js @@ -1,7 +1,7 @@ import getBurialSiteContractFees from '../../database/getBurialSiteContractFees.js'; -import updateLotOccupancyFeeQuantity from '../../database/updateLotOccupancyFeeQuantity.js'; +import updateBurialSiteContractFeeQuantity from '../../database/updateBurialSiteContractFeeQuantity.js'; export default async function handler(request, response) { - const success = await updateLotOccupancyFeeQuantity(request.body, request.session.user); + const success = await updateBurialSiteContractFeeQuantity(request.body, request.session.user); const burialSiteContractFees = await getBurialSiteContractFees(request.body.burialSiteContractId); response.json({ success, diff --git a/handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.ts b/handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.ts index 33bb575a..d718ea50 100644 --- a/handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.ts +++ b/handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.ts @@ -1,21 +1,21 @@ import type { Request, Response } from 'express' import getBurialSiteContractFees from '../../database/getBurialSiteContractFees.js' -import updateLotOccupancyFeeQuantity, { - type UpdateLotOccupancyFeeQuantityForm -} from '../../database/updateLotOccupancyFeeQuantity.js' +import updateBurialSiteContractFeeQuantity, { + type UpdateBurialSiteFeeForm +} from '../../database/updateBurialSiteContractFeeQuantity.js' export default async function handler( - request: Request, + request: Request, response: Response ): Promise { - const success = await updateLotOccupancyFeeQuantity( - request.body as UpdateLotOccupancyFeeQuantityForm, + const success = await updateBurialSiteContractFeeQuantity( + request.body, request.session.user as User ) const burialSiteContractFees = await getBurialSiteContractFees( - request.body.burialSiteContractId as string + request.body.burialSiteContractId ) response.json({ diff --git a/handlers/contracts-post/doUpdateBurialSiteContractTransaction.d.ts b/handlers/contracts-post/doUpdateBurialSiteContractTransaction.d.ts index 19d32e4d..0bfad4d6 100644 --- a/handlers/contracts-post/doUpdateBurialSiteContractTransaction.d.ts +++ b/handlers/contracts-post/doUpdateBurialSiteContractTransaction.d.ts @@ -1,2 +1,3 @@ import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): Promise; +import { type BurialSiteContractTransactionUpdateForm } from '../../database/updateBurialSiteContractTransaction.js'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/contracts-post/doUpdateBurialSiteContractTransaction.js b/handlers/contracts-post/doUpdateBurialSiteContractTransaction.js index bba8f8fa..e44ff6a2 100644 --- a/handlers/contracts-post/doUpdateBurialSiteContractTransaction.js +++ b/handlers/contracts-post/doUpdateBurialSiteContractTransaction.js @@ -1,8 +1,10 @@ import getBurialSiteContractTransactions from '../../database/getBurialSiteContractTransactions.js'; -import updateLotOccupancyTransaction from '../../database/updateLotOccupancyTransaction.js'; +import updateBurialSiteContractTransaction from '../../database/updateBurialSiteContractTransaction.js'; export default async function handler(request, response) { - await updateLotOccupancyTransaction(request.body, request.session.user); - const burialSiteContractTransactions = await getBurialSiteContractTransactions(request.body.burialSiteContractId, { includeIntegrations: true }); + await updateBurialSiteContractTransaction(request.body, request.session.user); + const burialSiteContractTransactions = await getBurialSiteContractTransactions(request.body.burialSiteContractId, { + includeIntegrations: true + }); response.json({ success: true, burialSiteContractTransactions diff --git a/handlers/contracts-post/doUpdateBurialSiteContractTransaction.ts b/handlers/contracts-post/doUpdateBurialSiteContractTransaction.ts index 49686e5e..66e0b8f8 100644 --- a/handlers/contracts-post/doUpdateBurialSiteContractTransaction.ts +++ b/handlers/contracts-post/doUpdateBurialSiteContractTransaction.ts @@ -1,23 +1,23 @@ import type { Request, Response } from 'express' import getBurialSiteContractTransactions from '../../database/getBurialSiteContractTransactions.js' -import updateLotOccupancyTransaction, { - type UpdateLotOccupancyTransactionForm -} from '../../database/updateLotOccupancyTransaction.js' +import updateBurialSiteContractTransaction, { + type BurialSiteContractTransactionUpdateForm +} from '../../database/updateBurialSiteContractTransaction.js' export default async function handler( - request: Request, + request: Request, response: Response ): Promise { - await updateLotOccupancyTransaction( - request.body as UpdateLotOccupancyTransactionForm, + await updateBurialSiteContractTransaction( + request.body, request.session.user as User ) - const burialSiteContractTransactions = await getBurialSiteContractTransactions( - request.body.burialSiteContractId as string, - { includeIntegrations: true } - ) + const burialSiteContractTransactions = + await getBurialSiteContractTransactions(request.body.burialSiteContractId, { + includeIntegrations: true + }) response.json({ success: true, diff --git a/handlers/print-get/pdf.js b/handlers/print-get/pdf.js index 072f31b3..3b80f3e6 100644 --- a/handlers/print-get/pdf.js +++ b/handlers/print-get/pdf.js @@ -7,7 +7,7 @@ import { getPdfPrintConfig, getReportData } from '../../helpers/functions.print. const attachmentOrInline = getConfigProperty('settings.printPdf.contentDisposition'); export async function handler(request, response, next) { const printName = request.params.printName; - if (!getConfigProperty('settings.burialSiteContract.prints').includes(`pdf/${printName}`) && + if (!getConfigProperty('settings.contracts.prints').includes(`pdf/${printName}`) && !getConfigProperty('settings.workOrders.prints').includes(`pdf/${printName}`)) { response.redirect(`${getConfigProperty('reverseProxy.urlPrefix')}/dashboard/?error=printConfigNotAllowed`); return; diff --git a/handlers/print-get/pdf.ts b/handlers/print-get/pdf.ts index fd9d7c87..550f660e 100644 --- a/handlers/print-get/pdf.ts +++ b/handlers/print-get/pdf.ts @@ -23,7 +23,7 @@ export async function handler( const printName = request.params.printName if ( - !getConfigProperty('settings.burialSiteContract.prints').includes( + !getConfigProperty('settings.contracts.prints').includes( `pdf/${printName}` ) && !getConfigProperty('settings.workOrders.prints').includes( diff --git a/handlers/print-get/screen.js b/handlers/print-get/screen.js index 9d4efa91..181d2cde 100644 --- a/handlers/print-get/screen.js +++ b/handlers/print-get/screen.js @@ -2,7 +2,7 @@ import { getConfigProperty } from '../../helpers/config.helpers.js'; import { getReportData, getScreenPrintConfig } from '../../helpers/functions.print.js'; export default async function handler(request, response) { const printName = request.params.printName; - if (!getConfigProperty('settings.burialSiteContract.prints').includes(`screen/${printName}`) && + if (!getConfigProperty('settings.contracts.prints').includes(`screen/${printName}`) && !getConfigProperty('settings.workOrders.prints').includes(`screen/${printName}`)) { response.redirect(`${getConfigProperty('reverseProxy.urlPrefix')}/dashboard/?error=printConfigNotAllowed`); return; diff --git a/handlers/print-get/screen.ts b/handlers/print-get/screen.ts index d00acbd5..8f2ef329 100644 --- a/handlers/print-get/screen.ts +++ b/handlers/print-get/screen.ts @@ -13,7 +13,7 @@ export default async function handler( const printName = request.params.printName if ( - !getConfigProperty('settings.burialSiteContract.prints').includes( + !getConfigProperty('settings.contracts.prints').includes( `screen/${printName}` ) && !getConfigProperty('settings.workOrders.prints').includes( diff --git a/handlers/reports-get/reportName.js b/handlers/reports-get/reportName.js index 6ba587f6..f6ab67c4 100644 --- a/handlers/reports-get/reportName.js +++ b/handlers/reports-get/reportName.js @@ -1,4 +1,4 @@ -import papaparse from 'papaparse'; +import papaParse from 'papaparse'; import getReportData from '../../database/getReportData.js'; export default async function handler(request, response) { const reportName = request.params.reportName; @@ -10,7 +10,7 @@ export default async function handler(request, response) { }); return; } - const csv = papaparse.unparse(rows); + const csv = papaParse.unparse(rows); response.setHeader('Content-Disposition', `attachment; filename=${reportName}-${Date.now().toString()}.csv`); response.setHeader('Content-Type', 'text/csv'); response.send(csv); diff --git a/handlers/reports-get/reportName.ts b/handlers/reports-get/reportName.ts index 5ac0fb53..2cf9cdc3 100644 --- a/handlers/reports-get/reportName.ts +++ b/handlers/reports-get/reportName.ts @@ -1,5 +1,5 @@ import type { Request, Response } from 'express' -import papaparse from 'papaparse' +import papaParse from 'papaparse' import getReportData, { type ReportParameters @@ -25,7 +25,7 @@ export default async function handler( return } - const csv = papaparse.unparse(rows) + const csv = papaParse.unparse(rows) response.setHeader( 'Content-Disposition', diff --git a/handlers/reports-get/search.js b/handlers/reports-get/search.js index 87a83d87..44e201ee 100644 --- a/handlers/reports-get/search.js +++ b/handlers/reports-get/search.js @@ -3,14 +3,14 @@ import getCemeteries from '../../database/getCemeteries.js'; import { getBurialSiteStatuses, getBurialSiteTypes } from '../../helpers/functions.cache.js'; export default async function handler(_request, response) { const rightNow = new Date(); - const maps = await getCemeteries(); - const lotTypes = await getBurialSiteTypes(); - const lotStatuses = await getBurialSiteStatuses(); + const cemeteries = await getCemeteries(); + const burialSiteTypes = await getBurialSiteTypes(); + const burialSiteStatuses = await getBurialSiteStatuses(); response.render('report-search', { headTitle: 'Reports', todayDateString: dateToString(rightNow), - maps, - lotTypes, - lotStatuses + cemeteries, + burialSiteTypes, + burialSiteStatuses }); } diff --git a/handlers/reports-get/search.ts b/handlers/reports-get/search.ts index 802ca15a..9526eb2b 100644 --- a/handlers/reports-get/search.ts +++ b/handlers/reports-get/search.ts @@ -2,7 +2,10 @@ import { dateToString } from '@cityssm/utils-datetime' import type { Request, Response } from 'express' import getCemeteries from '../../database/getCemeteries.js' -import { getBurialSiteStatuses, getBurialSiteTypes } from '../../helpers/functions.cache.js' +import { + getBurialSiteStatuses, + getBurialSiteTypes +} from '../../helpers/functions.cache.js' export default async function handler( _request: Request, @@ -10,15 +13,15 @@ export default async function handler( ): Promise { const rightNow = new Date() - const maps = await getCemeteries() - const lotTypes = await getBurialSiteTypes() - const lotStatuses = await getBurialSiteStatuses() + const cemeteries = await getCemeteries() + const burialSiteTypes = await getBurialSiteTypes() + const burialSiteStatuses = await getBurialSiteStatuses() response.render('report-search', { headTitle: 'Reports', todayDateString: dateToString(rightNow), - maps, - lotTypes, - lotStatuses + cemeteries, + burialSiteTypes, + burialSiteStatuses }) } diff --git a/handlers/workOrders-get/edit.js b/handlers/workOrders-get/edit.js index 6d09c5dd..bb35f305 100644 --- a/handlers/workOrders-get/edit.js +++ b/handlers/workOrders-get/edit.js @@ -1,9 +1,9 @@ import getWorkOrder from '../../database/getWorkOrder.js'; -import { getBurialSiteStatuses, getWorkOrderMilestoneTypes, getWorkOrderTypes } from '../../helpers/functions.cache.js'; import { getConfigProperty } from '../../helpers/config.helpers.js'; +import { getBurialSiteStatuses, getWorkOrderMilestoneTypes, getWorkOrderTypes } from '../../helpers/functions.cache.js'; export default async function handler(request, response) { const workOrder = await getWorkOrder(request.params.workOrderId, { - includeLotsAndLotOccupancies: true, + includeBurialSites: true, includeComments: true, includeMilestones: true }); diff --git a/handlers/workOrders-get/edit.ts b/handlers/workOrders-get/edit.ts index f06c2360..69aa90c9 100644 --- a/handlers/workOrders-get/edit.ts +++ b/handlers/workOrders-get/edit.ts @@ -1,19 +1,19 @@ import type { Request, Response } from 'express' import getWorkOrder from '../../database/getWorkOrder.js' +import { getConfigProperty } from '../../helpers/config.helpers.js' import { getBurialSiteStatuses, getWorkOrderMilestoneTypes, getWorkOrderTypes } from '../../helpers/functions.cache.js' -import { getConfigProperty } from '../../helpers/config.helpers.js' export default async function handler( request: Request, response: Response ): Promise { const workOrder = await getWorkOrder(request.params.workOrderId, { - includeLotsAndLotOccupancies: true, + includeBurialSites: true, includeComments: true, includeMilestones: true }) diff --git a/handlers/workOrders-get/view.js b/handlers/workOrders-get/view.js index 817777e0..a3cd1b13 100644 --- a/handlers/workOrders-get/view.js +++ b/handlers/workOrders-get/view.js @@ -2,7 +2,7 @@ import getWorkOrder from '../../database/getWorkOrder.js'; import { getConfigProperty } from '../../helpers/config.helpers.js'; export default async function handler(request, response) { const workOrder = await getWorkOrder(request.params.workOrderId, { - includeLotsAndLotOccupancies: true, + includeBurialSites: true, includeComments: true, includeMilestones: true }); diff --git a/handlers/workOrders-get/view.ts b/handlers/workOrders-get/view.ts index fd9b1e42..1d32589c 100644 --- a/handlers/workOrders-get/view.ts +++ b/handlers/workOrders-get/view.ts @@ -8,7 +8,7 @@ export default async function handler( response: Response ): Promise { const workOrder = await getWorkOrder(request.params.workOrderId, { - includeLotsAndLotOccupancies: true, + includeBurialSites: true, includeComments: true, includeMilestones: true }) diff --git a/handlers/workOrders-post/doAddWorkOrderBurialSite.d.ts b/handlers/workOrders-post/doAddWorkOrderBurialSite.d.ts new file mode 100644 index 00000000..b088724b --- /dev/null +++ b/handlers/workOrders-post/doAddWorkOrderBurialSite.d.ts @@ -0,0 +1,5 @@ +import type { Request, Response } from 'express'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/workOrders-post/doAddWorkOrderBurialSite.js b/handlers/workOrders-post/doAddWorkOrderBurialSite.js new file mode 100644 index 00000000..1bd7908f --- /dev/null +++ b/handlers/workOrders-post/doAddWorkOrderBurialSite.js @@ -0,0 +1,19 @@ +import addWorkOrderBurialSite from '../../database/addWorkOrderBurialSite.js'; +import getBurialSites from '../../database/getBurialSites.js'; +export default async function handler(request, response) { + const success = await addWorkOrderBurialSite({ + workOrderId: request.body.workOrderId, + burialSiteId: request.body.burialSiteId + }, request.session.user); + const workOrderLotsResults = await getBurialSites({ + workOrderId: request.body.workOrderId + }, { + limit: -1, + offset: 0, + includeBurialSiteContractCount: false + }); + response.json({ + success, + workOrderBurialSites: workOrderLotsResults.burialSites + }); +} diff --git a/handlers/workOrders-post/doAddWorkOrderBurialSite.ts b/handlers/workOrders-post/doAddWorkOrderBurialSite.ts new file mode 100644 index 00000000..7375ca2a --- /dev/null +++ b/handlers/workOrders-post/doAddWorkOrderBurialSite.ts @@ -0,0 +1,37 @@ +import type { Request, Response } from 'express' + +import addWorkOrderBurialSite from '../../database/addWorkOrderBurialSite.js' +import getBurialSites from '../../database/getBurialSites.js' + +export default async function handler( + request: Request< + unknown, + unknown, + { workOrderId: string; burialSiteId: string } + >, + response: Response +): Promise { + const success = await addWorkOrderBurialSite( + { + workOrderId: request.body.workOrderId, + burialSiteId: request.body.burialSiteId + }, + request.session.user as User + ) + + const workOrderLotsResults = await getBurialSites( + { + workOrderId: request.body.workOrderId + }, + { + limit: -1, + offset: 0, + includeBurialSiteContractCount: false + } + ) + + response.json({ + success, + workOrderBurialSites: workOrderLotsResults.burialSites + }) +} diff --git a/handlers/workOrders-post/doAddWorkOrderBurialSiteContract.d.ts b/handlers/workOrders-post/doAddWorkOrderBurialSiteContract.d.ts new file mode 100644 index 00000000..d5e2e662 --- /dev/null +++ b/handlers/workOrders-post/doAddWorkOrderBurialSiteContract.d.ts @@ -0,0 +1,5 @@ +import type { Request, Response } from 'express'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/workOrders-post/doAddWorkOrderLotOccupancy.js b/handlers/workOrders-post/doAddWorkOrderBurialSiteContract.js similarity index 60% rename from handlers/workOrders-post/doAddWorkOrderLotOccupancy.js rename to handlers/workOrders-post/doAddWorkOrderBurialSiteContract.js index 46903eac..d7e31600 100644 --- a/handlers/workOrders-post/doAddWorkOrderLotOccupancy.js +++ b/handlers/workOrders-post/doAddWorkOrderBurialSiteContract.js @@ -1,21 +1,21 @@ -import addWorkOrderLotOccupancy from '../../database/addWorkOrderLotOccupancy.js'; +import addWorkOrderBurialSiteContract from '../../database/addWorkOrderBurialSiteContract.js'; import getBurialSiteContracts from '../../database/getBurialSiteContracts.js'; export default async function handler(request, response) { - const success = await addWorkOrderLotOccupancy({ + const success = await addWorkOrderBurialSiteContract({ workOrderId: request.body.workOrderId, burialSiteContractId: request.body.burialSiteContractId }, request.session.user); - const workOrderLotOccupanciesResults = await getBurialSiteContracts({ + const results = await getBurialSiteContracts({ workOrderId: request.body.workOrderId }, { limit: -1, offset: 0, - includeOccupants: true, + includeInterments: true, includeFees: false, includeTransactions: false }); response.json({ success, - workOrderLotOccupancies: workOrderLotOccupanciesResults.lotOccupancies + workOrderBurialSiteContracts: results.burialSiteContracts }); } diff --git a/handlers/workOrders-post/doAddWorkOrderBurialSiteContract.ts b/handlers/workOrders-post/doAddWorkOrderBurialSiteContract.ts new file mode 100644 index 00000000..0b42f6ca --- /dev/null +++ b/handlers/workOrders-post/doAddWorkOrderBurialSiteContract.ts @@ -0,0 +1,39 @@ +import type { Request, Response } from 'express' + +import addWorkOrderBurialSiteContract from '../../database/addWorkOrderBurialSiteContract.js' +import getBurialSiteContracts from '../../database/getBurialSiteContracts.js' + +export default async function handler( + request: Request< + unknown, + unknown, + { workOrderId: string; burialSiteContractId: string } + >, + response: Response +): Promise { + const success = await addWorkOrderBurialSiteContract( + { + workOrderId: request.body.workOrderId, + burialSiteContractId: request.body.burialSiteContractId + }, + request.session.user as User + ) + + const results = await getBurialSiteContracts( + { + workOrderId: request.body.workOrderId + }, + { + limit: -1, + offset: 0, + includeInterments: true, + includeFees: false, + includeTransactions: false + } + ) + + response.json({ + success, + workOrderBurialSiteContracts: results.burialSiteContracts + }) +} diff --git a/handlers/workOrders-post/doAddWorkOrderLot.d.ts b/handlers/workOrders-post/doAddWorkOrderLot.d.ts deleted file mode 100644 index 19d32e4d..00000000 --- a/handlers/workOrders-post/doAddWorkOrderLot.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/workOrders-post/doAddWorkOrderLot.js b/handlers/workOrders-post/doAddWorkOrderLot.js deleted file mode 100644 index a527c151..00000000 --- a/handlers/workOrders-post/doAddWorkOrderLot.js +++ /dev/null @@ -1,19 +0,0 @@ -import addWorkOrderLot from '../../database/addWorkOrderLot.js'; -import getLots from '../../database/getLots.js'; -export default async function handler(request, response) { - const success = await addWorkOrderLot({ - workOrderId: request.body.workOrderId, - lotId: request.body.lotId - }, request.session.user); - const workOrderLotsResults = await getLots({ - workOrderId: request.body.workOrderId - }, { - limit: -1, - offset: 0, - includeLotOccupancyCount: false - }); - response.json({ - success, - workOrderLots: workOrderLotsResults.lots - }); -} diff --git a/handlers/workOrders-post/doAddWorkOrderLot.ts b/handlers/workOrders-post/doAddWorkOrderLot.ts deleted file mode 100644 index e48f76d7..00000000 --- a/handlers/workOrders-post/doAddWorkOrderLot.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { Request, Response } from 'express' - -import addWorkOrderLot from '../../database/addWorkOrderLot.js' -import getLots from '../../database/getLots.js' - -export default async function handler( - request: Request, - response: Response -): Promise { - const success = await addWorkOrderLot( - { - workOrderId: request.body.workOrderId as string, - lotId: request.body.lotId as string - }, - request.session.user as User - ) - - const workOrderLotsResults = await getLots( - { - workOrderId: request.body.workOrderId as string - }, - { - limit: -1, - offset: 0, - includeLotOccupancyCount: false - } - ) - - response.json({ - success, - workOrderLots: workOrderLotsResults.lots - }) -} diff --git a/handlers/workOrders-post/doAddWorkOrderLotOccupancy.d.ts b/handlers/workOrders-post/doAddWorkOrderLotOccupancy.d.ts deleted file mode 100644 index 19d32e4d..00000000 --- a/handlers/workOrders-post/doAddWorkOrderLotOccupancy.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/workOrders-post/doAddWorkOrderLotOccupancy.ts b/handlers/workOrders-post/doAddWorkOrderLotOccupancy.ts deleted file mode 100644 index d043b426..00000000 --- a/handlers/workOrders-post/doAddWorkOrderLotOccupancy.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { Request, Response } from 'express' - -import addWorkOrderLotOccupancy from '../../database/addWorkOrderLotOccupancy.js' -import getBurialSiteContracts from '../../database/getBurialSiteContracts.js' - -export default async function handler( - request: Request, - response: Response -): Promise { - const success = await addWorkOrderLotOccupancy( - { - workOrderId: request.body.workOrderId as string, - burialSiteContractId: request.body.burialSiteContractId as string - }, - request.session.user as User - ) - - const workOrderLotOccupanciesResults = await getBurialSiteContracts( - { - workOrderId: request.body.workOrderId as string - }, - { - limit: -1, - offset: 0, - includeOccupants: true, - includeFees: false, - includeTransactions: false - } - ) - - response.json({ - success, - workOrderLotOccupancies: workOrderLotOccupanciesResults.lotOccupancies - }) -} diff --git a/handlers/workOrders-post/doDeleteWorkOrderBurialSite.d.ts b/handlers/workOrders-post/doDeleteWorkOrderBurialSite.d.ts new file mode 100644 index 00000000..b088724b --- /dev/null +++ b/handlers/workOrders-post/doDeleteWorkOrderBurialSite.d.ts @@ -0,0 +1,5 @@ +import type { Request, Response } from 'express'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/workOrders-post/doDeleteWorkOrderBurialSite.js b/handlers/workOrders-post/doDeleteWorkOrderBurialSite.js new file mode 100644 index 00000000..1a9acf2f --- /dev/null +++ b/handlers/workOrders-post/doDeleteWorkOrderBurialSite.js @@ -0,0 +1,16 @@ +import deleteWorkOrderBurialSite from '../../database/deleteWorkOrderBurialSite.js'; +import getBurialSites from '../../database/getBurialSites.js'; +export default async function handler(request, response) { + const success = await deleteWorkOrderBurialSite(request.body.workOrderId, request.body.burialSiteId, request.session.user); + const results = await getBurialSites({ + workOrderId: request.body.workOrderId + }, { + limit: -1, + offset: 0, + includeBurialSiteContractCount: false + }); + response.json({ + success, + workOrderBurialSites: results.burialSites + }); +} diff --git a/handlers/workOrders-post/doDeleteWorkOrderBurialSite.ts b/handlers/workOrders-post/doDeleteWorkOrderBurialSite.ts new file mode 100644 index 00000000..23b36a55 --- /dev/null +++ b/handlers/workOrders-post/doDeleteWorkOrderBurialSite.ts @@ -0,0 +1,31 @@ +import type { Request, Response } from 'express' + +import deleteWorkOrderBurialSite from '../../database/deleteWorkOrderBurialSite.js' +import getBurialSites from '../../database/getBurialSites.js' + +export default async function handler( + request: Request, + response: Response +): Promise { + const success = await deleteWorkOrderBurialSite( + request.body.workOrderId, + request.body.burialSiteId, + request.session.user as User + ) + + const results = await getBurialSites( + { + workOrderId: request.body.workOrderId + }, + { + limit: -1, + offset: 0, + includeBurialSiteContractCount: false + } + ) + + response.json({ + success, + workOrderBurialSites: results.burialSites + }) +} diff --git a/handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.d.ts b/handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.d.ts new file mode 100644 index 00000000..d5e2e662 --- /dev/null +++ b/handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.d.ts @@ -0,0 +1,5 @@ +import type { Request, Response } from 'express'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.js b/handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.js new file mode 100644 index 00000000..a1f8db72 --- /dev/null +++ b/handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.js @@ -0,0 +1,18 @@ +import deleteWorkOrderBurialSiteContract from '../../database/deleteWorkOrderBurialSiteContract.js'; +import getBurialSiteContracts from '../../database/getBurialSiteContracts.js'; +export default async function handler(request, response) { + const success = await deleteWorkOrderBurialSiteContract(request.body.workOrderId, request.body.burialSiteContractId, request.session.user); + const workOrderBurialSiteContracts = await getBurialSiteContracts({ + workOrderId: request.body.workOrderId + }, { + limit: -1, + offset: 0, + includeInterments: true, + includeFees: false, + includeTransactions: false + }); + response.json({ + success, + workOrderBurialSiteContracts: workOrderBurialSiteContracts.burialSiteContracts + }); +} diff --git a/handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.ts b/handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.ts new file mode 100644 index 00000000..c021c269 --- /dev/null +++ b/handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.ts @@ -0,0 +1,38 @@ +import type { Request, Response } from 'express' + +import deleteWorkOrderBurialSiteContract from '../../database/deleteWorkOrderBurialSiteContract.js' +import getBurialSiteContracts from '../../database/getBurialSiteContracts.js' + +export default async function handler( + request: Request< + unknown, + unknown, + { workOrderId: string; burialSiteContractId: string } + >, + response: Response +): Promise { + const success = await deleteWorkOrderBurialSiteContract( + request.body.workOrderId, + request.body.burialSiteContractId, + request.session.user as User + ) + + const workOrderBurialSiteContracts = await getBurialSiteContracts( + { + workOrderId: request.body.workOrderId + }, + { + limit: -1, + offset: 0, + includeInterments: true, + includeFees: false, + includeTransactions: false + } + ) + + response.json({ + success, + workOrderBurialSiteContracts: + workOrderBurialSiteContracts.burialSiteContracts + }) +} diff --git a/handlers/workOrders-post/doDeleteWorkOrderLot.d.ts b/handlers/workOrders-post/doDeleteWorkOrderLot.d.ts deleted file mode 100644 index 19d32e4d..00000000 --- a/handlers/workOrders-post/doDeleteWorkOrderLot.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/workOrders-post/doDeleteWorkOrderLot.js b/handlers/workOrders-post/doDeleteWorkOrderLot.js deleted file mode 100644 index 7a104a22..00000000 --- a/handlers/workOrders-post/doDeleteWorkOrderLot.js +++ /dev/null @@ -1,16 +0,0 @@ -import deleteWorkOrderLot from '../../database/deleteWorkOrderLot.js'; -import getLots from '../../database/getLots.js'; -export default async function handler(request, response) { - const success = await deleteWorkOrderLot(request.body.workOrderId, request.body.lotId, request.session.user); - const workOrderLotsResults = await getLots({ - workOrderId: request.body.workOrderId - }, { - limit: -1, - offset: 0, - includeLotOccupancyCount: false - }); - response.json({ - success, - workOrderLots: workOrderLotsResults.lots - }); -} diff --git a/handlers/workOrders-post/doDeleteWorkOrderLot.ts b/handlers/workOrders-post/doDeleteWorkOrderLot.ts deleted file mode 100644 index 6fcde8fc..00000000 --- a/handlers/workOrders-post/doDeleteWorkOrderLot.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { Request, Response } from 'express' - -import deleteWorkOrderLot from '../../database/deleteWorkOrderLot.js' -import getLots from '../../database/getLots.js' - -export default async function handler( - request: Request, - response: Response -): Promise { - const success = await deleteWorkOrderLot( - request.body.workOrderId as string, - request.body.lotId as string, - request.session.user as User - ) - - const workOrderLotsResults = await getLots( - { - workOrderId: request.body.workOrderId as string - }, - { - limit: -1, - offset: 0, - includeLotOccupancyCount: false - } - ) - - response.json({ - success, - workOrderLots: workOrderLotsResults.lots - }) -} diff --git a/handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.d.ts b/handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.d.ts deleted file mode 100644 index 19d32e4d..00000000 --- a/handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.js b/handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.js deleted file mode 100644 index 3e164ef6..00000000 --- a/handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.js +++ /dev/null @@ -1,18 +0,0 @@ -import deleteWorkOrderLotOccupancy from '../../database/deleteWorkOrderLotOccupancy.js'; -import getBurialSiteContracts from '../../database/getBurialSiteContracts.js'; -export default async function handler(request, response) { - const success = await deleteWorkOrderLotOccupancy(request.body.workOrderId, request.body.burialSiteContractId, request.session.user); - const workOrderLotOccupancies = await getBurialSiteContracts({ - workOrderId: request.body.workOrderId - }, { - limit: -1, - offset: 0, - includeOccupants: true, - includeFees: false, - includeTransactions: false - }); - response.json({ - success, - workOrderLotOccupancies: workOrderLotOccupancies.lotOccupancies - }); -} diff --git a/handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.ts b/handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.ts deleted file mode 100644 index cfaabd54..00000000 --- a/handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { Request, Response } from 'express' - -import deleteWorkOrderLotOccupancy from '../../database/deleteWorkOrderLotOccupancy.js' -import getBurialSiteContracts from '../../database/getBurialSiteContracts.js' - -export default async function handler( - request: Request, - response: Response -): Promise { - const success = await deleteWorkOrderLotOccupancy( - request.body.workOrderId as string, - request.body.burialSiteContractId as string, - request.session.user as User - ) - - const workOrderLotOccupancies = await getBurialSiteContracts( - { - workOrderId: request.body.workOrderId as string - }, - { - limit: -1, - offset: 0, - includeOccupants: true, - includeFees: false, - includeTransactions: false - } - ) - - response.json({ - success, - workOrderLotOccupancies: workOrderLotOccupancies.lotOccupancies - }) -} - diff --git a/handlers/workOrders-post/doSearchWorkOrders.js b/handlers/workOrders-post/doSearchWorkOrders.js index 221dd41c..5786efab 100644 --- a/handlers/workOrders-post/doSearchWorkOrders.js +++ b/handlers/workOrders-post/doSearchWorkOrders.js @@ -3,7 +3,7 @@ export default async function handler(request, response) { const result = await getWorkOrders(request.body, { limit: request.body.limit, offset: request.body.offset, - includeLotsAndLotOccupancies: true + includeBurialSites: true }); response.json({ count: result.count, diff --git a/handlers/workOrders-post/doSearchWorkOrders.ts b/handlers/workOrders-post/doSearchWorkOrders.ts index c0b1a029..7f35d38b 100644 --- a/handlers/workOrders-post/doSearchWorkOrders.ts +++ b/handlers/workOrders-post/doSearchWorkOrders.ts @@ -12,7 +12,7 @@ export default async function handler( const result = await getWorkOrders(request.body as GetWorkOrdersFilters, { limit: request.body.limit, offset: request.body.offset, - includeLotsAndLotOccupancies: true + includeBurialSites: true }) response.json({ diff --git a/handlers/workOrders-post/doUpdateBurialSiteStatus.d.ts b/handlers/workOrders-post/doUpdateBurialSiteStatus.d.ts new file mode 100644 index 00000000..87151a8c --- /dev/null +++ b/handlers/workOrders-post/doUpdateBurialSiteStatus.d.ts @@ -0,0 +1,6 @@ +import type { Request, Response } from 'express'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/workOrders-post/doUpdateBurialSiteStatus.js b/handlers/workOrders-post/doUpdateBurialSiteStatus.js new file mode 100644 index 00000000..63faac7a --- /dev/null +++ b/handlers/workOrders-post/doUpdateBurialSiteStatus.js @@ -0,0 +1,16 @@ +import getBurialSites from '../../database/getBurialSites.js'; +import { updateBurialSiteStatus } from '../../database/updateBurialSite.js'; +export default async function handler(request, response) { + const success = await updateBurialSiteStatus(request.body.lotId, request.body.burialSiteStatusId, request.session.user); + const results = await getBurialSites({ + workOrderId: request.body.workOrderId + }, { + limit: -1, + offset: 0, + includeBurialSiteContractCount: true + }); + response.json({ + success, + workOrderBurialSites: results.burialSites + }); +} diff --git a/handlers/workOrders-post/doUpdateBurialSiteStatus.ts b/handlers/workOrders-post/doUpdateBurialSiteStatus.ts new file mode 100644 index 00000000..d2f0452e --- /dev/null +++ b/handlers/workOrders-post/doUpdateBurialSiteStatus.ts @@ -0,0 +1,35 @@ +import type { Request, Response } from 'express' + +import getBurialSites from '../../database/getBurialSites.js' +import { updateBurialSiteStatus } from '../../database/updateBurialSite.js' + +export default async function handler( + request: Request< + unknown, + unknown, + { lotId: string; burialSiteStatusId: string; workOrderId: string } + >, + response: Response +): Promise { + const success = await updateBurialSiteStatus( + request.body.lotId, + request.body.burialSiteStatusId, + request.session.user as User + ) + + const results = await getBurialSites( + { + workOrderId: request.body.workOrderId + }, + { + limit: -1, + offset: 0, + includeBurialSiteContractCount: true + } + ) + + response.json({ + success, + workOrderBurialSites: results.burialSites + }) +} diff --git a/handlers/workOrders-post/doUpdateLotStatus.d.ts b/handlers/workOrders-post/doUpdateLotStatus.d.ts deleted file mode 100644 index 19d32e4d..00000000 --- a/handlers/workOrders-post/doUpdateLotStatus.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/workOrders-post/doUpdateLotStatus.js b/handlers/workOrders-post/doUpdateLotStatus.js deleted file mode 100644 index 0dc16c1e..00000000 --- a/handlers/workOrders-post/doUpdateLotStatus.js +++ /dev/null @@ -1,16 +0,0 @@ -import getLots from '../../database/getLots.js'; -import { updateLotStatus } from '../../database/updateLot.js'; -export default async function handler(request, response) { - const success = await updateLotStatus(request.body.lotId, request.body.burialSiteStatusId, request.session.user); - const workOrderLotsResults = await getLots({ - workOrderId: request.body.workOrderId - }, { - limit: -1, - offset: 0, - includeLotOccupancyCount: true - }); - response.json({ - success, - workOrderLots: workOrderLotsResults.lots - }); -} diff --git a/handlers/workOrders-post/doUpdateLotStatus.ts b/handlers/workOrders-post/doUpdateLotStatus.ts deleted file mode 100644 index a3934972..00000000 --- a/handlers/workOrders-post/doUpdateLotStatus.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { Request, Response } from 'express' - -import getLots from '../../database/getLots.js' -import { updateLotStatus } from '../../database/updateLot.js' - -export default async function handler( - request: Request, - response: Response -): Promise { - const success = await updateLotStatus( - request.body.lotId as string, - request.body.burialSiteStatusId as string, - request.session.user as User - ) - - const workOrderLotsResults = await getLots( - { - workOrderId: request.body.workOrderId as string - }, - { - limit: -1, - offset: 0, - includeLotOccupancyCount: true - } - ) - - response.json({ - success, - workOrderLots: workOrderLotsResults.lots - }) -} diff --git a/helpers/burialSiteContracts.helpers.d.ts b/helpers/burialSiteContracts.helpers.d.ts new file mode 100644 index 00000000..47eb5108 --- /dev/null +++ b/helpers/burialSiteContracts.helpers.d.ts @@ -0,0 +1,4 @@ +import type { BurialSiteContract, BurialSiteContractFee } from '../types/recordTypes.js'; +export declare function getFieldValueByContractTypeField(burialSiteContract: BurialSiteContract, occupancyTypeField: string): string | undefined; +export declare function getFeesByFeeCategory(burialSiteContract: BurialSiteContract, feeCategory: string, feeCategoryContains?: boolean): BurialSiteContractFee[]; +export declare function getTransactionTotal(burialSiteContract: BurialSiteContract): number; diff --git a/helpers/functions.lotOccupancy.js b/helpers/burialSiteContracts.helpers.js similarity index 61% rename from helpers/functions.lotOccupancy.js rename to helpers/burialSiteContracts.helpers.js index d11f1117..f4af7c6b 100644 --- a/helpers/functions.lotOccupancy.js +++ b/helpers/burialSiteContracts.helpers.js @@ -1,16 +1,11 @@ -export function filterOccupantsByLotOccupantType(burialSiteContract, lotOccupantType) { - const lotOccupantTypeLowerCase = lotOccupantType.toLowerCase(); - return (burialSiteContract.burialSiteContractOccupants ?? []).filter((possibleOccupant) => possibleOccupant.lotOccupantType.toLowerCase() === - lotOccupantTypeLowerCase); -} -export function getFieldValueByOccupancyTypeField(burialSiteContract, occupancyTypeField) { +export function getFieldValueByContractTypeField(burialSiteContract, occupancyTypeField) { const occupancyTypeFieldLowerCase = occupancyTypeField.toLowerCase(); - const field = (burialSiteContract.burialSiteContractFields ?? []).find((possibleField) => possibleField.occupancyTypeField.toLowerCase() === + const field = (burialSiteContract.burialSiteContractFields ?? []).find((possibleField) => possibleField.contractTypeField.toLowerCase() === occupancyTypeFieldLowerCase); if (field === undefined) { return undefined; } - return field.burialSiteContractFieldValue; + return field.fieldValue; } export function getFeesByFeeCategory(burialSiteContract, feeCategory, feeCategoryContains = false) { const feeCategoryLowerCase = feeCategory.toLowerCase(); @@ -23,7 +18,8 @@ export function getFeesByFeeCategory(burialSiteContract, feeCategory, feeCategor } export function getTransactionTotal(burialSiteContract) { let transactionTotal = 0; - for (const transaction of burialSiteContract.burialSiteContractTransactions ?? []) { + for (const transaction of burialSiteContract.burialSiteContractTransactions ?? + []) { transactionTotal += transaction.transactionAmount; } return transactionTotal; diff --git a/helpers/burialSiteContracts.helpers.ts b/helpers/burialSiteContracts.helpers.ts new file mode 100644 index 00000000..402748c9 --- /dev/null +++ b/helpers/burialSiteContracts.helpers.ts @@ -0,0 +1,54 @@ +import type { + BurialSiteContract, + BurialSiteContractFee +} from '../types/recordTypes.js' + +export function getFieldValueByContractTypeField( + burialSiteContract: BurialSiteContract, + occupancyTypeField: string +): string | undefined { + const occupancyTypeFieldLowerCase = occupancyTypeField.toLowerCase() + + const field = (burialSiteContract.burialSiteContractFields ?? []).find( + (possibleField) => + (possibleField.contractTypeField as string).toLowerCase() === + occupancyTypeFieldLowerCase + ) + + if (field === undefined) { + return undefined + } + + return field.fieldValue +} + +export function getFeesByFeeCategory( + burialSiteContract: BurialSiteContract, + feeCategory: string, + feeCategoryContains = false +): BurialSiteContractFee[] { + const feeCategoryLowerCase = feeCategory.toLowerCase() + + return (burialSiteContract.burialSiteContractFees ?? []).filter( + (possibleFee) => + feeCategoryContains + ? (possibleFee.feeCategory as string) + .toLowerCase() + .includes(feeCategoryLowerCase) + : (possibleFee.feeCategory as string).toLowerCase() === + feeCategoryLowerCase + ) +} + +export function getTransactionTotal( + burialSiteContract: BurialSiteContract +): number { + let transactionTotal = 0 + + for (const transaction of burialSiteContract.burialSiteContractTransactions ?? + []) { + transactionTotal += transaction.transactionAmount + } + + return transactionTotal +} diff --git a/helpers/functions.cache.d.ts b/helpers/functions.cache.d.ts index 9dacbfcc..e03d2586 100644 --- a/helpers/functions.cache.d.ts +++ b/helpers/functions.cache.d.ts @@ -17,4 +17,6 @@ export declare function getWorkOrderMilestoneTypeById(workOrderMilestoneTypeId: export declare function getWorkOrderMilestoneTypeByWorkOrderMilestoneType(workOrderMilestoneTypeString: string): Promise; export declare function preloadCaches(): Promise; export declare function clearCaches(): void; -export declare function clearCacheByTableName(tableName: string, relayMessage?: boolean): void; +type CacheTableNames = 'BurialSiteStatuses' | 'BurialSiteTypes' | 'BurialSiteTypeFields' | 'ContractTypes' | 'ContractTypeFields' | 'ContractTypePrints' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes'; +export declare function clearCacheByTableName(tableName: CacheTableNames, relayMessage?: boolean): void; +export {}; diff --git a/helpers/functions.cache.js b/helpers/functions.cache.js index bab645eb..4683897d 100644 --- a/helpers/functions.cache.js +++ b/helpers/functions.cache.js @@ -177,6 +177,7 @@ export function clearCacheByTableName(tableName, relayMessage = true) { clearWorkOrderTypesCache(); break; } + // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check default: { return; } diff --git a/helpers/functions.cache.ts b/helpers/functions.cache.ts index c6a257c6..9ff0c8da 100644 --- a/helpers/functions.cache.ts +++ b/helpers/functions.cache.ts @@ -271,8 +271,18 @@ function clearWorkOrderMilestoneTypesCache(): void { workOrderMilestoneTypes = undefined } +type CacheTableNames = + | 'BurialSiteStatuses' + | 'BurialSiteTypes' + | 'BurialSiteTypeFields' + | 'ContractTypes' + | 'ContractTypeFields' + | 'ContractTypePrints' + | 'WorkOrderMilestoneTypes' + | 'WorkOrderTypes' + export function clearCacheByTableName( - tableName: string, + tableName: CacheTableNames, relayMessage = true ): void { switch (tableName) { @@ -304,6 +314,7 @@ export function clearCacheByTableName( break } + // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check default: { return } @@ -330,6 +341,9 @@ export function clearCacheByTableName( process.on('message', (message: WorkerMessage) => { if (message.messageType === 'clearCache' && message.pid !== process.pid) { debug(`Clearing cache: ${(message as ClearCacheWorkerMessage).tableName}`) - clearCacheByTableName((message as ClearCacheWorkerMessage).tableName, false) + clearCacheByTableName( + (message as ClearCacheWorkerMessage).tableName as CacheTableNames, + false + ) } }) diff --git a/helpers/functions.fee.d.ts b/helpers/functions.fee.d.ts index d01241a0..129ced63 100644 --- a/helpers/functions.fee.d.ts +++ b/helpers/functions.fee.d.ts @@ -1,3 +1,3 @@ -import type { Fee, LotOccupancy } from '../types/recordTypes.js'; -export declare function calculateFeeAmount(fee: Fee, burialSiteContract: LotOccupancy): number; +import type { BurialSiteContract, Fee } from '../types/recordTypes.js'; +export declare function calculateFeeAmount(fee: Fee, burialSiteContract: BurialSiteContract): number; export declare function calculateTaxAmount(fee: Fee, feeAmount: number): number; diff --git a/helpers/functions.fee.ts b/helpers/functions.fee.ts index e3319b80..78a1a240 100644 --- a/helpers/functions.fee.ts +++ b/helpers/functions.fee.ts @@ -1,8 +1,8 @@ -import type { Fee, LotOccupancy } from '../types/recordTypes.js' +import type { BurialSiteContract, Fee } from '../types/recordTypes.js' export function calculateFeeAmount( fee: Fee, - burialSiteContract: LotOccupancy + burialSiteContract: BurialSiteContract ): number { return fee.feeFunction ? 0 : fee.feeAmount ?? 0 } diff --git a/helpers/functions.lotOccupancy.d.ts b/helpers/functions.lotOccupancy.d.ts deleted file mode 100644 index 04458ecd..00000000 --- a/helpers/functions.lotOccupancy.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { LotOccupancy, LotOccupancyFee, LotOccupancyOccupant } from '../types/recordTypes.js'; -export declare function filterOccupantsByLotOccupantType(burialSiteContract: LotOccupancy, lotOccupantType: string): LotOccupancyOccupant[]; -export declare function getFieldValueByOccupancyTypeField(burialSiteContract: LotOccupancy, occupancyTypeField: string): string | undefined; -export declare function getFeesByFeeCategory(burialSiteContract: LotOccupancy, feeCategory: string, feeCategoryContains?: boolean): LotOccupancyFee[]; -export declare function getTransactionTotal(burialSiteContract: LotOccupancy): number; diff --git a/helpers/functions.lotOccupancy.ts b/helpers/functions.lotOccupancy.ts deleted file mode 100644 index e75d0fcc..00000000 --- a/helpers/functions.lotOccupancy.ts +++ /dev/null @@ -1,64 +0,0 @@ -import type { - LotOccupancy, - LotOccupancyFee, - LotOccupancyOccupant -} from '../types/recordTypes.js' - -export function filterOccupantsByLotOccupantType( - burialSiteContract: LotOccupancy, - lotOccupantType: string -): LotOccupancyOccupant[] { - const lotOccupantTypeLowerCase = lotOccupantType.toLowerCase() - - return (burialSiteContract.burialSiteContractOccupants ?? []).filter( - (possibleOccupant) => - (possibleOccupant.lotOccupantType as string).toLowerCase() === - lotOccupantTypeLowerCase - ) -} - -export function getFieldValueByOccupancyTypeField( - burialSiteContract: LotOccupancy, - occupancyTypeField: string -): string | undefined { - const occupancyTypeFieldLowerCase = occupancyTypeField.toLowerCase() - - const field = (burialSiteContract.burialSiteContractFields ?? []).find( - (possibleField) => - (possibleField.occupancyTypeField as string).toLowerCase() === - occupancyTypeFieldLowerCase - ) - - if (field === undefined) { - return undefined - } - - return field.burialSiteContractFieldValue -} - -export function getFeesByFeeCategory( - burialSiteContract: LotOccupancy, - feeCategory: string, - feeCategoryContains = false -): LotOccupancyFee[] { - const feeCategoryLowerCase = feeCategory.toLowerCase() - - return (burialSiteContract.burialSiteContractFees ?? []).filter((possibleFee) => - feeCategoryContains - ? (possibleFee.feeCategory as string) - .toLowerCase() - .includes(feeCategoryLowerCase) - : (possibleFee.feeCategory as string).toLowerCase() === - feeCategoryLowerCase - ) -} - -export function getTransactionTotal(burialSiteContract: LotOccupancy): number { - let transactionTotal = 0 - - for (const transaction of burialSiteContract.burialSiteContractTransactions ?? []) { - transactionTotal += transaction.transactionAmount - } - - return transactionTotal -} diff --git a/helpers/functions.print.js b/helpers/functions.print.js index adf13620..0108044e 100644 --- a/helpers/functions.print.js +++ b/helpers/functions.print.js @@ -2,8 +2,8 @@ import * as dateTimeFunctions from '@cityssm/utils-datetime'; import getBurialSite from '../database/getBurialSite.js'; import getBurialSiteContract from '../database/getBurialSiteContract.js'; import getWorkOrder from '../database/getWorkOrder.js'; +import * as burialSiteContractFunctions from './burialSiteContracts.helpers.js'; import * as configFunctions from './config.helpers.js'; -import * as burialSiteContractFunctions from './functions.burialSiteContract.js'; const screenPrintConfigs = { burialSiteContract: { title: `Burial Site Contract Print`, diff --git a/helpers/functions.print.ts b/helpers/functions.print.ts index 40818a83..bbce6ea2 100644 --- a/helpers/functions.print.ts +++ b/helpers/functions.print.ts @@ -5,8 +5,8 @@ import getBurialSiteContract from '../database/getBurialSiteContract.js' import getWorkOrder from '../database/getWorkOrder.js' import type { BurialSite, BurialSiteContract, WorkOrder } from '../types/recordTypes.js' +import * as burialSiteContractFunctions from './burialSiteContracts.helpers.js' import * as configFunctions from './config.helpers.js' -import * as burialSiteContractFunctions from './functions.burialSiteContract.js' interface PrintConfig { title: string diff --git a/helpers/functions.sqlFilters.js b/helpers/functions.sqlFilters.js index c41e1f2d..dc01d2e1 100644 --- a/helpers/functions.sqlFilters.js +++ b/helpers/functions.sqlFilters.js @@ -37,6 +37,7 @@ export function getOccupancyTimeWhereClause(occupancyTime, lotOccupanciesTableAl let sqlWhereClause = ''; const sqlParameters = []; const currentDateString = dateToInteger(new Date()); + // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check switch (occupancyTime ?? '') { case 'current': { sqlWhereClause += ` and ${lotOccupanciesTableAlias}.contractStartDate <= ? diff --git a/helpers/functions.sqlFilters.ts b/helpers/functions.sqlFilters.ts index 56ebe1cb..a9ebf1dc 100644 --- a/helpers/functions.sqlFilters.ts +++ b/helpers/functions.sqlFilters.ts @@ -63,6 +63,7 @@ export function getOccupancyTimeWhereClause( const currentDateString = dateToInteger(new Date()) + // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check switch (occupancyTime ?? '') { case 'current': { sqlWhereClause += ` and ${lotOccupanciesTableAlias}.contractStartDate <= ? diff --git a/public/javascripts/adminDatabase.d.ts b/public/javascripts/adminDatabase.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/adminDatabase.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/adminDatabase.js b/public/javascripts/adminDatabase.js deleted file mode 100644 index 29220e32..00000000 --- a/public/javascripts/adminDatabase.js +++ /dev/null @@ -1,70 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - function doBackup() { - cityssm.postJSON(`${los.urlPrefix}/admin/doBackupDatabase`, {}, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - bulmaJS.alert({ - title: 'Database Backed Up Successfully', - message: `Backed up to ${responseJSON.fileName}
    - To request a copy of the backup, contact your application administrator.`, - messageIsHtml: true, - contextualColorName: 'success' - }); - } - else { - bulmaJS.alert({ - title: 'Error Backing Up Database', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function doCleanup() { - cityssm.postJSON(`${los.urlPrefix}/admin/doCleanupDatabase`, {}, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - bulmaJS.alert({ - title: 'Database Cleaned Up Successfully', - message: `${responseJSON.inactivatedRecordCount} records inactivated, - ${responseJSON.purgedRecordCount} permanently deleted.`, - contextualColorName: 'success' - }); - } - else { - bulmaJS.alert({ - title: 'Error Cleaning Database', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - document - .querySelector('#button--cleanupDatabase') - ?.addEventListener('click', () => { - bulmaJS.confirm({ - title: 'Cleanup Database', - message: 'Are you sure you want to cleanup up the database?', - okButton: { - text: 'Yes, Cleanup Database', - callbackFunction: doCleanup - } - }); - }); - document - .querySelector('#button--backupDatabase') - ?.addEventListener('click', () => { - bulmaJS.confirm({ - title: 'Backup Database', - message: 'Are you sure you want to backup up the database?', - okButton: { - text: 'Yes, Backup Database', - callbackFunction: doBackup - } - }); - }); -})(); diff --git a/public/javascripts/adminFees.d.ts b/public/javascripts/adminFees.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/adminFees.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/adminFees.js b/public/javascripts/adminFees.js deleted file mode 100644 index cbb80585..00000000 --- a/public/javascripts/adminFees.js +++ /dev/null @@ -1,659 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - const feeCategoriesContainerElement = document.querySelector('#container--feeCategories'); - let feeCategories = exports.feeCategories; - delete exports.feeCategories; - function getFeeCategory(feeCategoryId) { - return feeCategories.find((currentFeeCategory) => currentFeeCategory.feeCategoryId === feeCategoryId); - } - function getFee(feeCategory, feeId) { - return feeCategory.fees.find((currentFee) => currentFee.feeId === feeId); - } - function renderFeeCategories() { - if (feeCategories.length === 0) { - feeCategoriesContainerElement.innerHTML = `
    -

    There are no available fees.

    -
    `; - return; - } - feeCategoriesContainerElement.innerHTML = ''; - for (const feeCategory of feeCategories) { - const feeCategoryContainerElement = document.createElement('section'); - feeCategoryContainerElement.className = 'panel container--feeCategory'; - feeCategoryContainerElement.dataset.feeCategoryId = - feeCategory.feeCategoryId.toString(); - // eslint-disable-next-line no-unsanitized/property - feeCategoryContainerElement.innerHTML = `
    -
    -
    -

    ${cityssm.escapeHTML(feeCategory.feeCategory ?? '')}

    - ${feeCategory.isGroupedFee - ? 'Grouped Fee' - : ''} -
    -
    -
    - ${feeCategory.fees.length === 0 - ? `
    - -
    ` - : ''} -
    - -
    -
    - -
    -
    - ${los.getMoveUpDownButtonFieldHTML('button--moveFeeCategoryUp', 'button--moveFeeCategoryDown')} -
    -
    -
    -
    `; - if (feeCategory.fees.length === 0) { - feeCategoryContainerElement.insertAdjacentHTML('beforeend', `
    -
    -

    - There are no fees in the - "${cityssm.escapeHTML(feeCategory.feeCategory ?? '')}" - category. -

    -
    -
    `); - feeCategoryContainerElement - .querySelector('.button--deleteFeeCategory') - ?.addEventListener('click', confirmDeleteFeeCategory); - } - for (const fee of feeCategory.fees) { - const panelBlockElement = document.createElement('div'); - panelBlockElement.className = 'panel-block is-block container--fee'; - panelBlockElement.dataset.feeId = fee.feeId.toString(); - const hasTagsBlock = (fee.isRequired ?? false) || - fee.occupancyTypeId !== undefined || - fee.burialSiteTypeId !== undefined; - // eslint-disable-next-line no-unsanitized/property - panelBlockElement.innerHTML = `
    -
    -

    - ${cityssm.escapeHTML(fee.feeName ?? '')}
    - - ${ - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - cityssm - .escapeHTML(fee.feeDescription ?? '') - .replaceAll('\n', '
    ')} -
    -

    - ${hasTagsBlock - ? `

    - ${fee.isRequired ?? false - ? 'Required' - : ''} - ${(fee.occupancyTypeId ?? -1) === -1 - ? '' - : ` - - ${cityssm.escapeHTML(fee.occupancyType ?? '')} - `} - ${(fee.burialSiteTypeId ?? -1) === -1 - ? '' - : ` - - ${cityssm.escapeHTML(fee.lotType ?? '')} - `} -

    ` - : ''} -
    -
    -
    -
    - ${fee.feeFunction - ? `${cityssm.escapeHTML(fee.feeFunction)}
    - Fee Function` - : ` - $${(fee.feeAmount ?? 0).toFixed(2)}
    - Fee -
    `} -
    -
    - ${fee.taxPercentage - ? `${fee.taxPercentage.toString()}%` - : `$${(fee.taxAmount ?? 0).toFixed(2)}`}
    - Tax -
    -
    - ${fee.includeQuantity - ? `${cityssm.escapeHTML(fee.quantityUnit ?? '')}
    - Quantity` - : ''} -
    -
    -
    -
    - ${los.getMoveUpDownButtonFieldHTML('button--moveFeeUp', 'button--moveFeeDown')} -
    -
    `; - panelBlockElement - .querySelector('.a--editFee') - ?.addEventListener('click', openEditFee); - panelBlockElement - .querySelector('.a--editFeeAmount') - ?.addEventListener('click', openEditFeeAmount); - panelBlockElement.querySelector('.button--moveFeeUp').addEventListener('click', moveFee); - panelBlockElement.querySelector('.button--moveFeeDown').addEventListener('click', moveFee); - feeCategoryContainerElement.append(panelBlockElement); - } - feeCategoryContainerElement - .querySelector('.button--editFeeCategory') - ?.addEventListener('click', openEditFeeCategory); - feeCategoryContainerElement - .querySelector('.button--addFee') - ?.addEventListener('click', openAddFee); - feeCategoryContainerElement.querySelector('.button--moveFeeCategoryUp').addEventListener('click', moveFeeCategory); - feeCategoryContainerElement.querySelector('.button--moveFeeCategoryDown').addEventListener('click', moveFeeCategory); - feeCategoriesContainerElement.append(feeCategoryContainerElement); - } - } - /* - * Fee Categories - */ - document - .querySelector('#button--addFeeCategory') - ?.addEventListener('click', () => { - let addCloseModalFunction; - function doAddFeeCategory(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doAddFeeCategory`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; - addCloseModalFunction(); - renderFeeCategories(); - } - else { - bulmaJS.alert({ - title: 'Error Creating Fee Category', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('adminFees-addFeeCategory', { - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - modalElement.querySelector('#feeCategoryAdd--feeCategory').focus(); - addCloseModalFunction = closeModalFunction; - modalElement - .querySelector('form') - ?.addEventListener('submit', doAddFeeCategory); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - document.querySelector('#button--addFeeCategory').focus(); - } - }); - }); - function openEditFeeCategory(clickEvent) { - const feeCategoryId = Number.parseInt(clickEvent.currentTarget.closest('.container--feeCategory').dataset.feeCategoryId ?? '', 10); - const feeCategory = getFeeCategory(feeCategoryId); - let editCloseModalFunction; - function doUpdateFeeCategory(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateFeeCategory`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; - editCloseModalFunction(); - renderFeeCategories(); - } - else { - bulmaJS.alert({ - title: 'Error Updating Fee Category', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('adminFees-editFeeCategory', { - onshow(modalElement) { - ; - modalElement.querySelector('#feeCategoryEdit--feeCategoryId').value = feeCategory.feeCategoryId.toString(); - modalElement.querySelector('#feeCategoryEdit--feeCategory').value = feeCategory.feeCategory; - if (feeCategory.isGroupedFee) { - ; - modalElement.querySelector('#feeCategoryEdit--isGroupedFee').checked = true; - } - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - editCloseModalFunction = closeModalFunction; - modalElement - .querySelector('form') - ?.addEventListener('submit', doUpdateFeeCategory); - modalElement.querySelector('#feeCategoryEdit--feeCategory').focus(); - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function confirmDeleteFeeCategory(clickEvent) { - const feeCategoryId = Number.parseInt(clickEvent.currentTarget.closest('.container--feeCategory').dataset.feeCategoryId ?? '', 10); - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteFeeCategory`, { - feeCategoryId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; - renderFeeCategories(); - } - else { - bulmaJS.alert({ - title: 'Error Updating Fee Category', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: 'Delete Fee Category?', - message: 'Are you sure you want to delete this fee category?', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete the Fee Category', - callbackFunction: doDelete - } - }); - } - function moveFeeCategory(clickEvent) { - const buttonElement = clickEvent.currentTarget; - const feeCategoryId = buttonElement.closest('.container--feeCategory').dataset - .feeCategoryId ?? ''; - cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' - ? 'doMoveFeeCategoryUp' - : 'doMoveFeeCategoryDown'}`, { - feeCategoryId, - moveToEnd: clickEvent.shiftKey ? '1' : '0' - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; - renderFeeCategories(); - } - else { - bulmaJS.alert({ - title: 'Error Moving Fee Category', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - /* - * Fees - */ - function openAddFee(clickEvent) { - const feeCategoryId = Number.parseInt(clickEvent.currentTarget.closest('.container--feeCategory').dataset.feeCategoryId ?? '', 10); - let addCloseModalFunction; - function doAddFee(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doAddFee`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; - addCloseModalFunction(); - renderFeeCategories(); - } - else { - bulmaJS.alert({ - title: 'Error Adding Fee', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('adminFees-addFee', { - onshow(modalElement) { - const feeCategoryElement = modalElement.querySelector('#feeAdd--feeCategoryId'); - for (const feeCategory of feeCategories) { - const optionElement = document.createElement('option'); - optionElement.value = feeCategory.feeCategoryId.toString(); - optionElement.textContent = feeCategory.feeCategory; - if (feeCategory.feeCategoryId === feeCategoryId) { - optionElement.selected = true; - } - feeCategoryElement.append(optionElement); - } - const occupancyTypeElement = modalElement.querySelector('#feeAdd--occupancyTypeId'); - for (const occupancyType of exports.occupancyTypes) { - const optionElement = document.createElement('option'); - optionElement.value = occupancyType.occupancyTypeId.toString(); - optionElement.textContent = occupancyType.occupancyType; - occupancyTypeElement.append(optionElement); - } - const lotTypeElement = modalElement.querySelector('#feeAdd--burialSiteTypeId'); - for (const lotType of exports.lotTypes) { - const optionElement = document.createElement('option'); - optionElement.value = lotType.burialSiteTypeId.toString(); - optionElement.textContent = lotType.lotType; - lotTypeElement.append(optionElement); - } - ; - modalElement.querySelector('#feeAdd--taxPercentage').value = exports.taxPercentageDefault.toString(); - los.populateAliases(modalElement); - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - addCloseModalFunction = closeModalFunction; - modalElement.querySelector('form')?.addEventListener('submit', doAddFee); - modalElement.querySelector('#feeAdd--feeName').focus(); - modalElement.querySelector('#feeAdd--feeFunction').addEventListener('change', () => { - const feeAmountElement = modalElement.querySelector('#feeAdd--feeAmount'); - const feeFunctionElement = modalElement.querySelector('#feeAdd--feeFunction'); - if (feeFunctionElement.value === '') { - feeFunctionElement - .closest('.select') - ?.classList.remove('is-success'); - feeAmountElement.classList.add('is-success'); - feeAmountElement.disabled = false; - } - else { - feeFunctionElement.closest('.select')?.classList.add('is-success'); - feeAmountElement.classList.remove('is-success'); - feeAmountElement.disabled = true; - } - }); - modalElement - .querySelector('#feeAdd--taxPercentage') - ?.addEventListener('keyup', () => { - const taxAmountElement = modalElement.querySelector('#feeAdd--taxAmount'); - const taxPercentageElement = modalElement.querySelector('#feeAdd--taxPercentage'); - if (taxPercentageElement.value === '') { - taxPercentageElement.classList.remove('is-success'); - taxAmountElement.classList.add('is-success'); - taxAmountElement.disabled = false; - } - else { - taxPercentageElement.classList.add('is-success'); - taxAmountElement.classList.remove('is-success'); - taxAmountElement.disabled = true; - } - }); - modalElement - .querySelector('#feeAdd--includeQuantity') - ?.addEventListener('change', () => { - ; - modalElement.querySelector('#feeAdd--quantityUnit').disabled = - modalElement.querySelector('#feeAdd--includeQuantity').value === ''; - }); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function openEditFeeAmount(clickEvent) { - clickEvent.preventDefault(); - const feeContainerElement = clickEvent.currentTarget.closest('.container--fee'); - const feeId = Number.parseInt(feeContainerElement.dataset.feeId ?? '', 10); - const feeCategoryId = Number.parseInt(feeContainerElement.closest('.container--feeCategory') - .dataset.feeCategoryId ?? ''); - const feeCategory = getFeeCategory(feeCategoryId); - const fee = getFee(feeCategory, feeId); - let editCloseModalFunction; - function doUpdateFeeAmount(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateFeeAmount`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; - editCloseModalFunction(); - renderFeeCategories(); - } - else { - bulmaJS.alert({ - title: 'Error Updating Fee Amount', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('adminFees-editFeeAmount', { - onshow(modalElement) { - ; - modalElement.querySelector('#feeAmountEdit--feeId').value = fee.feeId.toString(); - modalElement.querySelector('#feeAmountEdit--feeCategory').textContent = feeCategory.feeCategory; - modalElement.querySelector('#feeAmountEdit--feeName').textContent = fee.feeName ?? ''; - modalElement.querySelector('#feeAmountEdit--feeAmount').value = fee.feeAmount?.toFixed(2) ?? '0'; - }, - onshown(modalElement, closeModalFunction) { - ; - modalElement.querySelector('#feeAmountEdit--feeAmount').select(); - editCloseModalFunction = closeModalFunction; - modalElement - .querySelector('form') - ?.addEventListener('submit', doUpdateFeeAmount); - } - }); - } - function openEditFee(clickEvent) { - clickEvent.preventDefault(); - const feeContainerElement = clickEvent.currentTarget.closest('.container--fee'); - const feeId = Number.parseInt(feeContainerElement.dataset.feeId ?? '', 10); - const feeCategoryId = Number.parseInt(feeContainerElement.closest('.container--feeCategory') - .dataset.feeCategoryId ?? ''); - const feeCategory = getFeeCategory(feeCategoryId); - const fee = getFee(feeCategory, feeId); - let editCloseModalFunction; - let editModalElement; - function doUpdateFee(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateFee`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; - editCloseModalFunction(); - renderFeeCategories(); - } - else { - bulmaJS.alert({ - title: 'Error Updating Fee', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function confirmDeleteFee(clickEvent) { - clickEvent.preventDefault(); - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteFee`, { - feeId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; - editCloseModalFunction(); - renderFeeCategories(); - } - else { - bulmaJS.alert({ - title: 'Error Deleting Fee', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: 'Delete Fee?', - message: 'Are you sure you want to delete this fee?', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete the Fee', - callbackFunction: doDelete - } - }); - } - function toggleFeeFields() { - const feeAmountElement = editModalElement.querySelector('#feeEdit--feeAmount'); - const feeFunctionElement = editModalElement.querySelector('#feeEdit--feeFunction'); - if (feeFunctionElement.value === '') { - feeFunctionElement.closest('.select')?.classList.remove('is-success'); - feeAmountElement.classList.add('is-success'); - feeAmountElement.disabled = false; - } - else { - feeFunctionElement.closest('.select')?.classList.add('is-success'); - feeAmountElement.classList.remove('is-success'); - feeAmountElement.disabled = true; - } - } - function toggleTaxFields() { - const taxAmountElement = editModalElement.querySelector('#feeEdit--taxAmount'); - const taxPercentageElement = editModalElement.querySelector('#feeEdit--taxPercentage'); - if (taxPercentageElement.value === '') { - taxPercentageElement.classList.remove('is-success'); - taxAmountElement.classList.add('is-success'); - taxAmountElement.disabled = false; - } - else { - taxPercentageElement.classList.add('is-success'); - taxAmountElement.classList.remove('is-success'); - taxAmountElement.disabled = true; - } - } - function toggleQuantityFields() { - const includeQuantityValue = editModalElement.querySelector('#feeEdit--includeQuantity').value; - editModalElement.querySelector('#feeEdit--quantityUnit').disabled = includeQuantityValue === ''; - } - cityssm.openHtmlModal('adminFees-editFee', { - onshow(modalElement) { - editModalElement = modalElement; - modalElement.querySelector('#feeEdit--feeId').value = fee.feeId.toString(); - const feeCategoryElement = modalElement.querySelector('#feeEdit--feeCategoryId'); - for (const feeCategory of feeCategories) { - const optionElement = document.createElement('option'); - optionElement.value = feeCategory.feeCategoryId.toString(); - optionElement.textContent = feeCategory.feeCategory; - if (feeCategory.feeCategoryId === feeCategoryId) { - optionElement.selected = true; - } - feeCategoryElement.append(optionElement); - } - ; - modalElement.querySelector('#feeEdit--feeName').value = fee.feeName ?? ''; - modalElement.querySelector('#feeEdit--feeAccount').value = fee.feeAccount ?? ''; - modalElement.querySelector('#feeEdit--feeDescription').value = fee.feeDescription ?? ''; - const occupancyTypeElement = modalElement.querySelector('#feeEdit--occupancyTypeId'); - for (const occupancyType of exports.occupancyTypes) { - const optionElement = document.createElement('option'); - optionElement.value = occupancyType.occupancyTypeId.toString(); - optionElement.textContent = occupancyType.occupancyType; - if (occupancyType.occupancyTypeId === fee.occupancyTypeId) { - optionElement.selected = true; - } - occupancyTypeElement.append(optionElement); - } - const lotTypeElement = modalElement.querySelector('#feeEdit--burialSiteTypeId'); - for (const lotType of exports.lotTypes) { - const optionElement = document.createElement('option'); - optionElement.value = lotType.burialSiteTypeId.toString(); - optionElement.textContent = lotType.lotType; - if (lotType.burialSiteTypeId === fee.burialSiteTypeId) { - optionElement.selected = true; - } - lotTypeElement.append(optionElement); - } - ; - modalElement.querySelector('#feeEdit--feeAmount').value = fee.feeAmount ? fee.feeAmount.toFixed(2) : ''; - modalElement - .querySelector('#feeEdit--feeFunction') - ?.addEventListener('change', toggleFeeFields); - toggleFeeFields(); - modalElement.querySelector('#feeEdit--taxAmount').value = fee.taxAmount ? fee.taxAmount.toFixed(2) : ''; - const taxPercentageElement = modalElement.querySelector('#feeEdit--taxPercentage'); - taxPercentageElement.value = fee.taxPercentage - ? fee.taxPercentage.toString() - : ''; - taxPercentageElement.addEventListener('keyup', toggleTaxFields); - toggleTaxFields(); - const includeQuantityElement = modalElement.querySelector('#feeEdit--includeQuantity'); - if (fee.includeQuantity ?? false) { - includeQuantityElement.value = '1'; - } - includeQuantityElement.addEventListener('change', toggleQuantityFields); - modalElement.querySelector('#feeEdit--quantityUnit').value = fee.quantityUnit ?? ''; - toggleQuantityFields(); - if (fee.isRequired ?? false) { - ; - modalElement.querySelector('#feeEdit--isRequired').value = '1'; - } - los.populateAliases(modalElement); - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - editCloseModalFunction = closeModalFunction; - modalElement - .querySelector('form') - ?.addEventListener('submit', doUpdateFee); - bulmaJS.init(modalElement); - modalElement - .querySelector('.button--deleteFee') - ?.addEventListener('click', confirmDeleteFee); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function moveFee(clickEvent) { - const buttonElement = clickEvent.currentTarget; - const feeContainerElement = buttonElement.closest('.container--fee'); - const feeId = feeContainerElement.dataset.feeId ?? ''; - cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' - ? 'doMoveFeeUp' - : 'doMoveFeeDown'}`, { - feeId, - moveToEnd: clickEvent.shiftKey ? '1' : '0' - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - feeCategories = responseJSON.feeCategories; - renderFeeCategories(); - } - else { - bulmaJS.alert({ - title: 'Error Moving Fee', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - /* - * Initialize - */ - renderFeeCategories(); -})(); diff --git a/public/javascripts/adminLotTypes.d.ts b/public/javascripts/adminLotTypes.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/adminLotTypes.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/adminLotTypes.js b/public/javascripts/adminLotTypes.js deleted file mode 100644 index 64db0de5..00000000 --- a/public/javascripts/adminLotTypes.js +++ /dev/null @@ -1,409 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - const containerElement = document.querySelector('#container--lotTypes'); - let lotTypes = exports.lotTypes; - delete exports.lotTypes; - const expandedLotTypes = new Set(); - function toggleLotTypeFields(clickEvent) { - const toggleButtonElement = clickEvent.currentTarget; - const lotTypeElement = toggleButtonElement.closest('.container--lotType'); - const burialSiteTypeId = Number.parseInt(lotTypeElement.dataset.burialSiteTypeId ?? '', 10); - if (expandedLotTypes.has(burialSiteTypeId)) { - expandedLotTypes.delete(burialSiteTypeId); - } - else { - expandedLotTypes.add(burialSiteTypeId); - } - // eslint-disable-next-line no-unsanitized/property - toggleButtonElement.innerHTML = expandedLotTypes.has(burialSiteTypeId) - ? '' - : ''; - const panelBlockElements = lotTypeElement.querySelectorAll('.panel-block'); - for (const panelBlockElement of panelBlockElements) { - panelBlockElement.classList.toggle('is-hidden'); - } - } - function lotTypeResponseHandler(rawResponseJSON) { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotTypes = responseJSON.lotTypes; - renderLotTypes(); - } - else { - bulmaJS.alert({ - title: `Error Updating ${los.escapedAliases.Lot} Type`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - } - function deleteLotType(clickEvent) { - const burialSiteTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--lotType').dataset.burialSiteTypeId ?? '', 10); - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteLotType`, { - burialSiteTypeId - }, lotTypeResponseHandler); - } - bulmaJS.confirm({ - title: `Delete ${los.escapedAliases.Lot} Type`, - message: `Are you sure you want to delete this ${los.escapedAliases.lot} type?`, - contextualColorName: 'warning', - okButton: { - text: `Yes, Delete ${los.escapedAliases.Lot} Type`, - callbackFunction: doDelete - } - }); - } - function openEditLotType(clickEvent) { - const burialSiteTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--lotType').dataset.burialSiteTypeId ?? '', 10); - const lotType = lotTypes.find((currentLotType) => burialSiteTypeId === currentLotType.burialSiteTypeId); - let editCloseModalFunction; - function doEdit(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateLotType`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - lotTypeResponseHandler(responseJSON); - if (responseJSON.success) { - editCloseModalFunction(); - } - }); - } - cityssm.openHtmlModal('adminLotTypes-editLotType', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#lotTypeEdit--burialSiteTypeId').value = burialSiteTypeId.toString(); - modalElement.querySelector('#lotTypeEdit--lotType').value = lotType.lotType; - }, - onshown(modalElement, closeModalFunction) { - editCloseModalFunction = closeModalFunction; - modalElement.querySelector('#lotTypeEdit--lotType').focus(); - modalElement.querySelector('form')?.addEventListener('submit', doEdit); - bulmaJS.toggleHtmlClipped(); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function openAddLotTypeField(clickEvent) { - const burialSiteTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--lotType').dataset.burialSiteTypeId ?? '', 10); - let addCloseModalFunction; - function doAdd(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doAddLotTypeField`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - expandedLotTypes.add(burialSiteTypeId); - lotTypeResponseHandler(responseJSON); - if (responseJSON.success) { - addCloseModalFunction(); - openEditLotTypeField(burialSiteTypeId, responseJSON.lotTypeFieldId); - } - }); - } - cityssm.openHtmlModal('adminLotTypes-addLotTypeField', { - onshow(modalElement) { - los.populateAliases(modalElement); - if (burialSiteTypeId) { - ; - modalElement.querySelector('#lotTypeFieldAdd--burialSiteTypeId').value = burialSiteTypeId.toString(); - } - }, - onshown(modalElement, closeModalFunction) { - addCloseModalFunction = closeModalFunction; - modalElement.querySelector('#lotTypeFieldAdd--lotTypeField').focus(); - modalElement.querySelector('form')?.addEventListener('submit', doAdd); - bulmaJS.toggleHtmlClipped(); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function moveLotType(clickEvent) { - const buttonElement = clickEvent.currentTarget; - const burialSiteTypeId = buttonElement.closest('.container--lotType').dataset.burialSiteTypeId; - cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' - ? 'doMoveLotTypeUp' - : 'doMoveLotTypeDown'}`, { - burialSiteTypeId, - moveToEnd: clickEvent.shiftKey ? '1' : '0' - }, lotTypeResponseHandler); - } - function openEditLotTypeField(burialSiteTypeId, lotTypeFieldId) { - const lotType = lotTypes.find((currentLotType) => currentLotType.burialSiteTypeId === burialSiteTypeId); - const lotTypeField = (lotType.lotTypeFields ?? []).find((currentLotTypeField) => currentLotTypeField.lotTypeFieldId === lotTypeFieldId); - let fieldTypeElement; - let minimumLengthElement; - let maximumLengthElement; - let patternElement; - let lotTypeFieldValuesElement; - let editCloseModalFunction; - function updateMaximumLengthMin() { - maximumLengthElement.min = minimumLengthElement.value; - } - function toggleInputFields() { - switch (fieldTypeElement.value) { - case 'date': { - minimumLengthElement.disabled = true; - maximumLengthElement.disabled = true; - patternElement.disabled = true; - lotTypeFieldValuesElement.disabled = true; - break; - } - case 'select': { - minimumLengthElement.disabled = true; - maximumLengthElement.disabled = true; - patternElement.disabled = true; - lotTypeFieldValuesElement.disabled = false; - break; - } - default: { - minimumLengthElement.disabled = false; - maximumLengthElement.disabled = false; - patternElement.disabled = false; - lotTypeFieldValuesElement.disabled = true; - break; - } - } - } - function doUpdate(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateLotTypeField`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - lotTypeResponseHandler(responseJSON); - if (responseJSON.success) { - editCloseModalFunction(); - } - }); - } - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteLotTypeField`, { - lotTypeFieldId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - lotTypeResponseHandler(responseJSON); - if (responseJSON.success) { - editCloseModalFunction(); - } - }); - } - function confirmDoDelete() { - bulmaJS.confirm({ - title: 'Delete Field', - message: 'Are you sure you want to delete this field? Note that historical records that make use of this field will not be affected.', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete Field', - callbackFunction: doDelete - } - }); - } - cityssm.openHtmlModal('adminLotTypes-editLotTypeField', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#lotTypeFieldEdit--lotTypeFieldId').value = lotTypeField.lotTypeFieldId.toString(); - modalElement.querySelector('#lotTypeFieldEdit--lotTypeField').value = lotTypeField.lotTypeField ?? ''; - modalElement.querySelector('#lotTypeFieldEdit--isRequired').value = lotTypeField.isRequired ? '1' : '0'; - fieldTypeElement = modalElement.querySelector('#lotTypeFieldEdit--fieldType'); - fieldTypeElement.value = lotTypeField.fieldType; - minimumLengthElement = modalElement.querySelector('#lotTypeFieldEdit--minimumLength'); - minimumLengthElement.value = - lotTypeField.minimumLength?.toString() ?? ''; - maximumLengthElement = modalElement.querySelector('#lotTypeFieldEdit--maximumLength'); - maximumLengthElement.value = - lotTypeField.maximumLength?.toString() ?? ''; - patternElement = modalElement.querySelector('#lotTypeFieldEdit--pattern'); - patternElement.value = lotTypeField.pattern ?? ''; - lotTypeFieldValuesElement = modalElement.querySelector('#lotTypeFieldEdit--lotTypeFieldValues'); - lotTypeFieldValuesElement.value = lotTypeField.lotTypeFieldValues ?? ''; - toggleInputFields(); - }, - onshown(modalElement, closeModalFunction) { - editCloseModalFunction = closeModalFunction; - bulmaJS.init(modalElement); - bulmaJS.toggleHtmlClipped(); - cityssm.enableNavBlocker(); - modalElement.querySelector('form')?.addEventListener('submit', doUpdate); - minimumLengthElement.addEventListener('keyup', updateMaximumLengthMin); - updateMaximumLengthMin(); - fieldTypeElement.addEventListener('change', toggleInputFields); - modalElement - .querySelector('#button--deleteLotTypeField') - ?.addEventListener('click', confirmDoDelete); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - cityssm.disableNavBlocker(); - } - }); - } - function openEditLotTypeFieldByClick(clickEvent) { - clickEvent.preventDefault(); - const lotTypeFieldId = Number.parseInt(clickEvent.currentTarget.closest('.container--lotTypeField').dataset.lotTypeFieldId ?? '', 10); - const burialSiteTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--lotType').dataset.burialSiteTypeId ?? '', 10); - openEditLotTypeField(burialSiteTypeId, lotTypeFieldId); - } - function moveLotTypeField(clickEvent) { - const buttonElement = clickEvent.currentTarget; - const lotTypeFieldId = buttonElement.closest('.container--lotTypeField').dataset.lotTypeFieldId; - cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' - ? 'doMoveLotTypeFieldUp' - : 'doMoveLotTypeFieldDown'}`, { - lotTypeFieldId, - moveToEnd: clickEvent.shiftKey ? '1' : '0' - }, lotTypeResponseHandler); - } - function renderLotTypeFields(panelElement, burialSiteTypeId, lotTypeFields) { - if (lotTypeFields.length === 0) { - // eslint-disable-next-line no-unsanitized/method - panelElement.insertAdjacentHTML('beforeend', `
    -

    There are no additional fields.

    -
    `); - } - else { - for (const lotTypeField of lotTypeFields) { - const panelBlockElement = document.createElement('div'); - panelBlockElement.className = - 'panel-block is-block container--lotTypeField'; - if (!expandedLotTypes.has(burialSiteTypeId)) { - panelBlockElement.classList.add('is-hidden'); - } - panelBlockElement.dataset.lotTypeFieldId = - lotTypeField.lotTypeFieldId.toString(); - // eslint-disable-next-line no-unsanitized/property - panelBlockElement.innerHTML = `
    - -
    -
    - ${los.getMoveUpDownButtonFieldHTML('button--moveLotTypeFieldUp', 'button--moveLotTypeFieldDown')} -
    -
    -
    `; - panelBlockElement - .querySelector('.button--editLotTypeField') - ?.addEventListener('click', openEditLotTypeFieldByClick); - panelBlockElement.querySelector('.button--moveLotTypeFieldUp').addEventListener('click', moveLotTypeField); - panelBlockElement.querySelector('.button--moveLotTypeFieldDown').addEventListener('click', moveLotTypeField); - panelElement.append(panelBlockElement); - } - } - } - function renderLotTypes() { - containerElement.innerHTML = ''; - if (lotTypes.length === 0) { - // eslint-disable-next-line no-unsanitized/method - containerElement.insertAdjacentHTML('afterbegin', `
    There are no active ${los.escapedAliases.lot} types.

    -
    `); - return; - } - for (const lotType of lotTypes) { - const lotTypeContainer = document.createElement('div'); - lotTypeContainer.className = 'panel container--lotType'; - lotTypeContainer.dataset.burialSiteTypeId = lotType.burialSiteTypeId.toString(); - // eslint-disable-next-line no-unsanitized/property - lotTypeContainer.innerHTML = `
    -
    -
    -
    - -
    -
    -

    ${cityssm.escapeHTML(lotType.lotType)}

    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - ${los.getMoveUpDownButtonFieldHTML('button--moveLotTypeUp', 'button--moveLotTypeDown')} -
    -
    -
    -
    `; - renderLotTypeFields(lotTypeContainer, lotType.burialSiteTypeId, lotType.lotTypeFields ?? []); - lotTypeContainer - .querySelector('.button--toggleLotTypeFields') - ?.addEventListener('click', toggleLotTypeFields); - lotTypeContainer - .querySelector('.button--deleteLotType') - ?.addEventListener('click', deleteLotType); - lotTypeContainer - .querySelector('.button--editLotType') - ?.addEventListener('click', openEditLotType); - lotTypeContainer - .querySelector('.button--addLotTypeField') - ?.addEventListener('click', openAddLotTypeField); - lotTypeContainer.querySelector('.button--moveLotTypeUp').addEventListener('click', moveLotType); - lotTypeContainer.querySelector('.button--moveLotTypeDown').addEventListener('click', moveLotType); - containerElement.append(lotTypeContainer); - } - } - document - .querySelector('#button--addLotType') - ?.addEventListener('click', () => { - let addCloseModalFunction; - function doAdd(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doAddLotType`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - addCloseModalFunction(); - lotTypes = responseJSON.lotTypes; - renderLotTypes(); - } - else { - bulmaJS.alert({ - title: `Error Adding ${los.escapedAliases.Lot} Type`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('adminLotTypes-addLotType', { - onshow(modalElement) { - los.populateAliases(modalElement); - }, - onshown(modalElement, closeModalFunction) { - addCloseModalFunction = closeModalFunction; - modalElement.querySelector('#lotTypeAdd--lotType').focus(); - modalElement.querySelector('form')?.addEventListener('submit', doAdd); - bulmaJS.toggleHtmlClipped(); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - }); - renderLotTypes(); -})(); diff --git a/public/javascripts/adminOccupancyTypes.d.ts b/public/javascripts/adminOccupancyTypes.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/adminOccupancyTypes.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/adminOccupancyTypes.js b/public/javascripts/adminOccupancyTypes.js deleted file mode 100644 index e7e14bc0..00000000 --- a/public/javascripts/adminOccupancyTypes.js +++ /dev/null @@ -1,602 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - const occupancyTypesContainerElement = document.querySelector('#container--occupancyTypes'); - const ContractTypePrintsContainerElement = document.querySelector('#container--ContractTypePrints'); - let occupancyTypes = exports.occupancyTypes; - delete exports.occupancyTypes; - let allOccupancyTypeFields = exports.allOccupancyTypeFields; - delete exports.allOccupancyTypeFields; - const expandedOccupancyTypes = new Set(); - function toggleOccupancyTypeFields(clickEvent) { - const toggleButtonElement = clickEvent.currentTarget; - const occupancyTypeElement = toggleButtonElement.closest('.container--occupancyType'); - const occupancyTypeId = Number.parseInt(occupancyTypeElement.dataset.occupancyTypeId ?? '', 10); - if (expandedOccupancyTypes.has(occupancyTypeId)) { - expandedOccupancyTypes.delete(occupancyTypeId); - } - else { - expandedOccupancyTypes.add(occupancyTypeId); - } - // eslint-disable-next-line no-unsanitized/property - toggleButtonElement.innerHTML = expandedOccupancyTypes.has(occupancyTypeId) - ? '' - : ''; - const panelBlockElements = occupancyTypeElement.querySelectorAll('.panel-block'); - for (const panelBlockElement of panelBlockElements) { - panelBlockElement.classList.toggle('is-hidden'); - } - } - function occupancyTypeResponseHandler(rawResponseJSON) { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - occupancyTypes = responseJSON.occupancyTypes; - allOccupancyTypeFields = responseJSON.allOccupancyTypeFields; - renderOccupancyTypes(); - } - else { - bulmaJS.alert({ - title: `Error Updating ${los.escapedAliases.Occupancy} Type`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - } - function deleteOccupancyType(clickEvent) { - const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--occupancyType').dataset.occupancyTypeId ?? '', 10); - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteOccupancyType`, { - occupancyTypeId - }, occupancyTypeResponseHandler); - } - bulmaJS.confirm({ - title: `Delete ${los.escapedAliases.Occupancy} Type`, - message: `Are you sure you want to delete this ${los.escapedAliases.occupancy} type?`, - contextualColorName: 'warning', - okButton: { - text: `Yes, Delete ${los.escapedAliases.Occupancy} Type`, - callbackFunction: doDelete - } - }); - } - function openEditOccupancyType(clickEvent) { - const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--occupancyType').dataset.occupancyTypeId ?? '', 10); - const occupancyType = occupancyTypes.find((currentOccupancyType) => occupancyTypeId === currentOccupancyType.occupancyTypeId); - let editCloseModalFunction; - function doEdit(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateOccupancyType`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - occupancyTypeResponseHandler(responseJSON); - if (responseJSON.success) { - editCloseModalFunction(); - } - }); - } - cityssm.openHtmlModal('adminOccupancyTypes-editOccupancyType', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#occupancyTypeEdit--occupancyTypeId').value = occupancyTypeId.toString(); - modalElement.querySelector('#occupancyTypeEdit--occupancyType').value = occupancyType.occupancyType; - }, - onshown(modalElement, closeModalFunction) { - editCloseModalFunction = closeModalFunction; - modalElement.querySelector('#occupancyTypeEdit--occupancyType').focus(); - modalElement.querySelector('form')?.addEventListener('submit', doEdit); - bulmaJS.toggleHtmlClipped(); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function openAddOccupancyTypeField(clickEvent) { - const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--occupancyType').dataset.occupancyTypeId ?? '', 10); - let addCloseModalFunction; - function doAdd(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doAddOccupancyTypeField`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - expandedOccupancyTypes.add(occupancyTypeId); - occupancyTypeResponseHandler(responseJSON); - if (responseJSON.success) { - addCloseModalFunction(); - openEditOccupancyTypeField(occupancyTypeId, responseJSON.occupancyTypeFieldId ?? 0); - } - }); - } - cityssm.openHtmlModal('adminOccupancyTypes-addOccupancyTypeField', { - onshow(modalElement) { - los.populateAliases(modalElement); - if (occupancyTypeId) { - ; - modalElement.querySelector('#occupancyTypeFieldAdd--occupancyTypeId').value = occupancyTypeId.toString(); - } - }, - onshown(modalElement, closeModalFunction) { - addCloseModalFunction = closeModalFunction; - modalElement.querySelector('#occupancyTypeFieldAdd--occupancyTypeField').focus(); - modalElement.querySelector('form')?.addEventListener('submit', doAdd); - bulmaJS.toggleHtmlClipped(); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function moveOccupancyType(clickEvent) { - const buttonElement = clickEvent.currentTarget; - const occupancyTypeId = clickEvent.currentTarget.closest('.container--occupancyType').dataset.occupancyTypeId; - cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' - ? 'doMoveOccupancyTypeUp' - : 'doMoveOccupancyTypeDown'}`, { - occupancyTypeId, - moveToEnd: clickEvent.shiftKey ? '1' : '0' - }, occupancyTypeResponseHandler); - } - function openEditOccupancyTypeField(occupancyTypeId, occupancyTypeFieldId) { - let occupancyType; - if (occupancyTypeId) { - occupancyType = occupancyTypes.find((currentOccupancyType) => currentOccupancyType.occupancyTypeId === occupancyTypeId); - } - const occupancyTypeField = (occupancyType - ? occupancyType.occupancyTypeFields ?? [] - : allOccupancyTypeFields).find((currentOccupancyTypeField) => currentOccupancyTypeField.occupancyTypeFieldId === occupancyTypeFieldId); - let fieldTypeElement; - let minimumLengthElement; - let maximumLengthElement; - let patternElement; - let occupancyTypeFieldValuesElement; - let editCloseModalFunction; - function updateMaximumLengthMin() { - maximumLengthElement.min = minimumLengthElement.value; - } - function toggleInputFields() { - switch (fieldTypeElement.value) { - case 'date': { - minimumLengthElement.disabled = true; - maximumLengthElement.disabled = true; - patternElement.disabled = true; - occupancyTypeFieldValuesElement.disabled = true; - break; - } - case 'select': { - minimumLengthElement.disabled = true; - maximumLengthElement.disabled = true; - patternElement.disabled = true; - occupancyTypeFieldValuesElement.disabled = false; - break; - } - default: { - minimumLengthElement.disabled = false; - maximumLengthElement.disabled = false; - patternElement.disabled = false; - occupancyTypeFieldValuesElement.disabled = true; - break; - } - } - } - function doUpdate(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateOccupancyTypeField`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - occupancyTypeResponseHandler(responseJSON); - if (responseJSON.success) { - editCloseModalFunction(); - } - }); - } - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteOccupancyTypeField`, { - occupancyTypeFieldId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - occupancyTypeResponseHandler(responseJSON); - if (responseJSON.success) { - editCloseModalFunction(); - } - }); - } - function confirmDoDelete() { - bulmaJS.confirm({ - title: 'Delete Field', - message: 'Are you sure you want to delete this field? Note that historical records that make use of this field will not be affected.', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete Field', - callbackFunction: doDelete - } - }); - } - cityssm.openHtmlModal('adminOccupancyTypes-editOccupancyTypeField', { - onshow: (modalElement) => { - los.populateAliases(modalElement); - modalElement.querySelector('#occupancyTypeFieldEdit--occupancyTypeFieldId').value = occupancyTypeField.occupancyTypeFieldId.toString(); - modalElement.querySelector('#occupancyTypeFieldEdit--occupancyTypeField').value = occupancyTypeField.occupancyTypeField ?? ''; - modalElement.querySelector('#occupancyTypeFieldEdit--isRequired').value = occupancyTypeField.isRequired ?? false ? '1' : '0'; - fieldTypeElement = modalElement.querySelector('#occupancyTypeFieldEdit--fieldType'); - fieldTypeElement.value = occupancyTypeField.fieldType; - minimumLengthElement = modalElement.querySelector('#occupancyTypeFieldEdit--minimumLength'); - minimumLengthElement.value = - occupancyTypeField.minimumLength?.toString() ?? ''; - maximumLengthElement = modalElement.querySelector('#occupancyTypeFieldEdit--maximumLength'); - maximumLengthElement.value = - occupancyTypeField.maximumLength?.toString() ?? ''; - patternElement = modalElement.querySelector('#occupancyTypeFieldEdit--pattern'); - patternElement.value = occupancyTypeField.pattern ?? ''; - occupancyTypeFieldValuesElement = modalElement.querySelector('#occupancyTypeFieldEdit--occupancyTypeFieldValues'); - occupancyTypeFieldValuesElement.value = - occupancyTypeField.occupancyTypeFieldValues ?? ''; - toggleInputFields(); - }, - onshown: (modalElement, closeModalFunction) => { - editCloseModalFunction = closeModalFunction; - bulmaJS.init(modalElement); - bulmaJS.toggleHtmlClipped(); - cityssm.enableNavBlocker(); - modalElement.querySelector('form')?.addEventListener('submit', doUpdate); - minimumLengthElement.addEventListener('keyup', updateMaximumLengthMin); - updateMaximumLengthMin(); - fieldTypeElement.addEventListener('change', toggleInputFields); - modalElement - .querySelector('#button--deleteOccupancyTypeField') - ?.addEventListener('click', confirmDoDelete); - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - cityssm.disableNavBlocker(); - } - }); - } - function openEditOccupancyTypeFieldByClick(clickEvent) { - clickEvent.preventDefault(); - const occupancyTypeFieldId = Number.parseInt(clickEvent.currentTarget.closest('.container--occupancyTypeField').dataset.occupancyTypeFieldId ?? '', 10); - const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest('.container--occupancyType').dataset.occupancyTypeId ?? '', 10); - openEditOccupancyTypeField(occupancyTypeId, occupancyTypeFieldId); - } - function moveOccupancyTypeField(clickEvent) { - const buttonElement = clickEvent.currentTarget; - const occupancyTypeFieldId = clickEvent.currentTarget.closest('.container--occupancyTypeField').dataset.occupancyTypeFieldId; - cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' - ? 'doMoveOccupancyTypeFieldUp' - : // eslint-disable-next-line no-secrets/no-secrets - 'doMoveOccupancyTypeFieldDown'}`, { - occupancyTypeFieldId, - moveToEnd: clickEvent.shiftKey ? '1' : '0' - }, occupancyTypeResponseHandler); - } - function renderOccupancyTypeFields(panelElement, occupancyTypeId, occupancyTypeFields) { - if (occupancyTypeFields.length === 0) { - // eslint-disable-next-line no-unsanitized/method - panelElement.insertAdjacentHTML('beforeend', `
    -

    There are no additional fields.

    -
    `); - } - else { - for (const occupancyTypeField of occupancyTypeFields) { - const panelBlockElement = document.createElement('div'); - panelBlockElement.className = - 'panel-block is-block container--occupancyTypeField'; - if (occupancyTypeId && !expandedOccupancyTypes.has(occupancyTypeId)) { - panelBlockElement.classList.add('is-hidden'); - } - panelBlockElement.dataset.occupancyTypeFieldId = - occupancyTypeField.occupancyTypeFieldId.toString(); - // eslint-disable-next-line no-unsanitized/property - panelBlockElement.innerHTML = `
    - -
    -
    - ${los.getMoveUpDownButtonFieldHTML('button--moveOccupancyTypeFieldUp', 'button--moveOccupancyTypeFieldDown')} -
    -
    -
    `; - panelBlockElement - .querySelector('.button--editOccupancyTypeField') - ?.addEventListener('click', openEditOccupancyTypeFieldByClick); - panelBlockElement.querySelector('.button--moveOccupancyTypeFieldUp').addEventListener('click', moveOccupancyTypeField); - panelBlockElement.querySelector('.button--moveOccupancyTypeFieldDown').addEventListener('click', moveOccupancyTypeField); - panelElement.append(panelBlockElement); - } - } - } - function openAddOccupancyTypePrint(clickEvent) { - const occupancyTypeId = clickEvent.currentTarget.closest('.container--occupancyTypePrintList').dataset.occupancyTypeId ?? ''; - let closeAddModalFunction; - function doAdd(formEvent) { - formEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doAddOccupancyTypePrint`, formEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - closeAddModalFunction(); - } - occupancyTypeResponseHandler(responseJSON); - }); - } - cityssm.openHtmlModal('adminOccupancyTypes-addOccupancyTypePrint', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#occupancyTypePrintAdd--occupancyTypeId').value = occupancyTypeId; - const printSelectElement = modalElement.querySelector('#occupancyTypePrintAdd--printEJS'); - for (const [printEJS, printTitle] of Object.entries(exports.occupancyTypePrintTitles)) { - const optionElement = document.createElement('option'); - optionElement.value = printEJS; - optionElement.textContent = printTitle; - printSelectElement.append(optionElement); - } - }, - onshown(modalElement, closeModalFunction) { - closeAddModalFunction = closeModalFunction; - modalElement.querySelector('form')?.addEventListener('submit', doAdd); - } - }); - } - function moveOccupancyTypePrint(clickEvent) { - const buttonElement = clickEvent.currentTarget; - const printEJS = buttonElement.closest('.container--occupancyTypePrint').dataset.printEJS; - const occupancyTypeId = buttonElement.closest('.container--occupancyTypePrintList').dataset.occupancyTypeId; - cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' - ? // eslint-disable-next-line no-secrets/no-secrets - 'doMoveOccupancyTypePrintUp' - : // eslint-disable-next-line no-secrets/no-secrets - 'doMoveOccupancyTypePrintDown'}`, { - occupancyTypeId, - printEJS, - moveToEnd: clickEvent.shiftKey ? '1' : '0' - }, occupancyTypeResponseHandler); - } - function deleteOccupancyTypePrint(clickEvent) { - clickEvent.preventDefault(); - const printEJS = clickEvent.currentTarget.closest('.container--occupancyTypePrint').dataset.printEJS; - const occupancyTypeId = clickEvent.currentTarget.closest('.container--occupancyTypePrintList').dataset.occupancyTypeId; - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteOccupancyTypePrint`, { - occupancyTypeId, - printEJS - }, occupancyTypeResponseHandler); - } - bulmaJS.confirm({ - title: 'Delete Print', - message: 'Are you sure you want to remove this print option?', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Remove Print', - callbackFunction: doDelete - } - }); - } - function renderContractTypePrints(panelElement, occupancyTypeId, ContractTypePrints) { - if (ContractTypePrints.length === 0) { - panelElement.insertAdjacentHTML('beforeend', `
    -
    -

    There are no prints associated with this record.

    -
    -
    `); - } - else { - for (const printEJS of ContractTypePrints) { - const panelBlockElement = document.createElement('div'); - panelBlockElement.className = - 'panel-block is-block container--occupancyTypePrint'; - panelBlockElement.dataset.printEJS = printEJS; - const printTitle = printEJS === '*' - ? '(All Available Prints)' - : exports.occupancyTypePrintTitles[printEJS]; - let printIconClass = 'fa-star'; - if (printEJS.startsWith('pdf/')) { - printIconClass = 'fa-file-pdf'; - } - else if (printEJS.startsWith('screen/')) { - printIconClass = 'fa-file'; - } - // eslint-disable-next-line no-unsanitized/property - panelBlockElement.innerHTML = `
    -
    -
    - -
    -
    - ${cityssm.escapeHTML(printTitle || printEJS)} -
    -
    -
    -
    - ${los.getMoveUpDownButtonFieldHTML('button--moveOccupancyTypePrintUp', 'button--moveOccupancyTypePrintDown')} -
    -
    - -
    -
    -
    `; - panelBlockElement.querySelector('.button--moveOccupancyTypePrintUp').addEventListener('click', moveOccupancyTypePrint); - panelBlockElement.querySelector('.button--moveOccupancyTypePrintDown').addEventListener('click', moveOccupancyTypePrint); - panelBlockElement - .querySelector('.button--deleteOccupancyTypePrint') - ?.addEventListener('click', deleteOccupancyTypePrint); - panelElement.append(panelBlockElement); - } - } - } - function renderOccupancyTypes() { - // eslint-disable-next-line no-unsanitized/property - occupancyTypesContainerElement.innerHTML = `
    -
    -
    -
    -
    -

    (All ${los.escapedAliases.Occupancy} Types)

    -
    -
    -
    -
    - -
    -
    -
    -
    -
    `; - ContractTypePrintsContainerElement.innerHTML = ''; - renderOccupancyTypeFields(occupancyTypesContainerElement.querySelector('#container--allOccupancyTypeFields'), undefined, allOccupancyTypeFields); - occupancyTypesContainerElement - .querySelector('.button--addOccupancyTypeField') - ?.addEventListener('click', openAddOccupancyTypeField); - if (occupancyTypes.length === 0) { - // eslint-disable-next-line no-unsanitized/method - occupancyTypesContainerElement.insertAdjacentHTML('afterbegin', `
    There are no active ${los.escapedAliases.occupancy} types.

    -
    `); - // eslint-disable-next-line no-unsanitized/method - ContractTypePrintsContainerElement.insertAdjacentHTML('afterbegin', `
    There are no active ${los.escapedAliases.occupancy} types.

    -
    `); - return; - } - for (const occupancyType of occupancyTypes) { - /* - * Types and Fields - */ - const occupancyTypeContainer = document.createElement('div'); - occupancyTypeContainer.className = 'panel container--occupancyType'; - occupancyTypeContainer.dataset.occupancyTypeId = - occupancyType.occupancyTypeId.toString(); - // eslint-disable-next-line no-unsanitized/property - occupancyTypeContainer.innerHTML = `
    -
    -
    -
    - -
    -
    -

    ${cityssm.escapeHTML(occupancyType.occupancyType)}

    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - ${los.getMoveUpDownButtonFieldHTML('button--moveOccupancyTypeUp', 'button--moveOccupancyTypeDown')} -
    -
    -
    -
    `; - renderOccupancyTypeFields(occupancyTypeContainer, occupancyType.occupancyTypeId, occupancyType.occupancyTypeFields ?? []); - occupancyTypeContainer - .querySelector('.button--toggleOccupancyTypeFields') - ?.addEventListener('click', toggleOccupancyTypeFields); - occupancyTypeContainer - .querySelector('.button--deleteOccupancyType') - ?.addEventListener('click', deleteOccupancyType); - occupancyTypeContainer - .querySelector('.button--editOccupancyType') - ?.addEventListener('click', openEditOccupancyType); - occupancyTypeContainer - .querySelector('.button--addOccupancyTypeField') - ?.addEventListener('click', openAddOccupancyTypeField); - occupancyTypeContainer.querySelector('.button--moveOccupancyTypeUp').addEventListener('click', moveOccupancyType); - occupancyTypeContainer.querySelector('.button--moveOccupancyTypeDown').addEventListener('click', moveOccupancyType); - occupancyTypesContainerElement.append(occupancyTypeContainer); - /* - * Prints - */ - const occupancyTypePrintContainer = document.createElement('div'); - occupancyTypePrintContainer.className = - 'panel container--occupancyTypePrintList'; - occupancyTypePrintContainer.dataset.occupancyTypeId = - occupancyType.occupancyTypeId.toString(); - occupancyTypePrintContainer.innerHTML = `
    -
    -
    -
    -

    ${cityssm.escapeHTML(occupancyType.occupancyType)}

    -
    -
    -
    -
    - -
    -
    -
    -
    `; - renderContractTypePrints(occupancyTypePrintContainer, occupancyType.occupancyTypeId, occupancyType.ContractTypePrints ?? []); - occupancyTypePrintContainer - .querySelector('.button--addOccupancyTypePrint') - ?.addEventListener('click', openAddOccupancyTypePrint); - ContractTypePrintsContainerElement.append(occupancyTypePrintContainer); - } - } - document - .querySelector('#button--addOccupancyType') - ?.addEventListener('click', () => { - let addCloseModalFunction; - function doAdd(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doAddOccupancyType`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - addCloseModalFunction(); - occupancyTypes = responseJSON.occupancyTypes; - renderOccupancyTypes(); - } - else { - bulmaJS.alert({ - title: `Error Adding ${los.escapedAliases.Occupancy} Type`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('adminOccupancyTypes-addOccupancyType', { - onshow(modalElement) { - los.populateAliases(modalElement); - }, - onshown(modalElement, closeModalFunction) { - addCloseModalFunction = closeModalFunction; - modalElement.querySelector('#occupancyTypeAdd--occupancyType').focus(); - modalElement.querySelector('form')?.addEventListener('submit', doAdd); - bulmaJS.toggleHtmlClipped(); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - }); - renderOccupancyTypes(); -})(); diff --git a/public/javascripts/adminTables.d.ts b/public/javascripts/adminTables.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/adminTables.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/adminTables.js b/public/javascripts/adminTables.js deleted file mode 100644 index acc7a199..00000000 --- a/public/javascripts/adminTables.js +++ /dev/null @@ -1,716 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - function refreshFontAwesomeIcon(changeEvent) { - const inputElement = changeEvent.currentTarget; - const fontAwesomeIconClass = inputElement.value; - (inputElement - .closest('.field') - ?.querySelectorAll('.button.is-static'))[1].innerHTML = - ``; - } - /** - * Work Order Types - */ - ; - (() => { - let workOrderTypes = exports.workOrderTypes; - delete exports.workOrderTypes; - function updateWorkOrderType(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateWorkOrderType`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes; - bulmaJS.alert({ - message: 'Work Order Type Updated Successfully', - contextualColorName: 'success' - }); - } - else { - bulmaJS.alert({ - title: 'Error Updating Work Order Type', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function deleteWorkOrderType(clickEvent) { - const tableRowElement = clickEvent.currentTarget.closest('tr'); - const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteWorkOrderType`, { - workOrderTypeId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes; - if (workOrderTypes.length === 0) { - renderWorkOrderTypes(); - } - else { - tableRowElement.remove(); - } - bulmaJS.alert({ - message: 'Work Order Type Deleted Successfully', - contextualColorName: 'success' - }); - } - else { - bulmaJS.alert({ - title: 'Error Deleting Work Order Type', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: 'Delete Work Order Type', - message: `Are you sure you want to delete this work order type?
    - Note that no work orders will be removed.`, - messageIsHtml: true, - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete Work Order Type', - callbackFunction: doDelete - } - }); - } - function moveWorkOrderType(clickEvent) { - const buttonElement = clickEvent.currentTarget; - const tableRowElement = buttonElement.closest('tr'); - const workOrderTypeId = tableRowElement.dataset.workOrderTypeId; - cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' - ? 'doMoveWorkOrderTypeUp' - : 'doMoveWorkOrderTypeDown'}`, { - workOrderTypeId, - moveToEnd: clickEvent.shiftKey ? '1' : '0' - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes; - renderWorkOrderTypes(); - } - else { - bulmaJS.alert({ - title: 'Error Moving Work Order Type', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function renderWorkOrderTypes() { - const containerElement = document.querySelector('#container--workOrderTypes'); - if (workOrderTypes.length === 0) { - containerElement.innerHTML = `
    `; - return; - } - containerElement.innerHTML = ''; - for (const workOrderType of workOrderTypes) { - const tableRowElement = document.createElement('tr'); - tableRowElement.dataset.workOrderTypeId = - workOrderType.workOrderTypeId.toString(); - // eslint-disable-next-line no-unsanitized/property - tableRowElement.innerHTML = ``; - tableRowElement - .querySelector('form') - ?.addEventListener('submit', updateWorkOrderType); - tableRowElement.querySelector('.button--moveWorkOrderTypeUp').addEventListener('click', moveWorkOrderType); - tableRowElement.querySelector('.button--moveWorkOrderTypeDown').addEventListener('click', moveWorkOrderType); - tableRowElement - .querySelector('.button--deleteWorkOrderType') - ?.addEventListener('click', deleteWorkOrderType); - containerElement.append(tableRowElement); - } - } - ; - document.querySelector('#form--addWorkOrderType').addEventListener('submit', (submitEvent) => { - submitEvent.preventDefault(); - const formElement = submitEvent.currentTarget; - cityssm.postJSON(`${los.urlPrefix}/admin/doAddWorkOrderType`, formElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderTypes = responseJSON.workOrderTypes; - renderWorkOrderTypes(); - formElement.reset(); - formElement.querySelector('input')?.focus(); - } - else { - bulmaJS.alert({ - title: 'Error Adding Work Order Type', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - }); - renderWorkOrderTypes(); - })(); - (() => { - let workOrderMilestoneTypes = exports.workOrderMilestoneTypes; - delete exports.workOrderMilestoneTypes; - function updateWorkOrderMilestoneType(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateWorkOrderMilestoneType`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; - bulmaJS.alert({ - message: 'Work Order Milestone Type Updated Successfully', - contextualColorName: 'success' - }); - } - else { - bulmaJS.alert({ - title: 'Error Updating Work Order Milestone Type', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function deleteWorkOrderMilestoneType(clickEvent) { - const tableRowElement = clickEvent.currentTarget.closest('tr'); - const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteWorkOrderMilestoneType`, { - workOrderMilestoneTypeId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; - if (workOrderMilestoneTypes.length === 0) { - renderWorkOrderMilestoneTypes(); - } - else { - tableRowElement.remove(); - } - bulmaJS.alert({ - message: 'Work Order Milestone Type Deleted Successfully', - contextualColorName: 'success' - }); - } - else { - bulmaJS.alert({ - title: 'Error Deleting Work Order Milestone Type', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: 'Delete Work Order Milestone Type', - message: `Are you sure you want to delete this work order milestone type?
    - Note that no work orders will be removed.`, - messageIsHtml: true, - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete Work Order Milestone Type', - callbackFunction: doDelete - } - }); - } - function moveWorkOrderMilestoneType(clickEvent) { - const buttonElement = clickEvent.currentTarget; - const tableRowElement = buttonElement.closest('tr'); - const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId; - cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' - ? 'doMoveWorkOrderMilestoneTypeUp' - : 'doMoveWorkOrderMilestoneTypeDown'}`, { - workOrderMilestoneTypeId, - moveToEnd: clickEvent.shiftKey ? '1' : '0' - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; - renderWorkOrderMilestoneTypes(); - } - else { - bulmaJS.alert({ - title: 'Error Moving Work Order Milestone Type', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function renderWorkOrderMilestoneTypes() { - const containerElement = document.querySelector('#container--workOrderMilestoneTypes'); - if (workOrderMilestoneTypes.length === 0) { - containerElement.innerHTML = ``; - return; - } - containerElement.innerHTML = ''; - for (const workOrderMilestoneType of workOrderMilestoneTypes) { - const tableRowElement = document.createElement('tr'); - tableRowElement.dataset.workOrderMilestoneTypeId = - workOrderMilestoneType.workOrderMilestoneTypeId.toString(); - // eslint-disable-next-line no-unsanitized/property, no-secrets/no-secrets - tableRowElement.innerHTML = ``; - tableRowElement - .querySelector('form') - ?.addEventListener('submit', updateWorkOrderMilestoneType); - tableRowElement.querySelector('.button--moveWorkOrderMilestoneTypeUp').addEventListener('click', moveWorkOrderMilestoneType); - tableRowElement.querySelector('.button--moveWorkOrderMilestoneTypeDown').addEventListener('click', moveWorkOrderMilestoneType); - tableRowElement - .querySelector('.button--deleteWorkOrderMilestoneType') - ?.addEventListener('click', deleteWorkOrderMilestoneType); - containerElement.append(tableRowElement); - } - } - ; - document.querySelector('#form--addWorkOrderMilestoneType').addEventListener('submit', (submitEvent) => { - submitEvent.preventDefault(); - const formElement = submitEvent.currentTarget; - cityssm.postJSON(`${los.urlPrefix}/admin/doAddWorkOrderMilestoneType`, formElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes; - renderWorkOrderMilestoneTypes(); - formElement.reset(); - formElement.querySelector('input')?.focus(); - } - else { - bulmaJS.alert({ - title: 'Error Adding Work Order Milestone Type', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - }); - renderWorkOrderMilestoneTypes(); - })(); - (() => { - let lotStatuses = exports.lotStatuses; - delete exports.lotStatuses; - function updateLotStatus(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateLotStatus`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses; - bulmaJS.alert({ - message: `${los.escapedAliases.Lot} Status Updated Successfully`, - contextualColorName: 'success' - }); - } - else { - bulmaJS.alert({ - title: `Error Updating ${los.escapedAliases.Lot} Status`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function deleteLotStatus(clickEvent) { - const tableRowElement = clickEvent.currentTarget.closest('tr'); - const burialSiteStatusId = tableRowElement.dataset.burialSiteStatusId; - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteLotStatus`, { - burialSiteStatusId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses; - if (lotStatuses.length === 0) { - renderLotStatuses(); - } - else { - tableRowElement.remove(); - } - bulmaJS.alert({ - message: `${los.escapedAliases.Lot} Status Deleted Successfully`, - contextualColorName: 'success' - }); - } - else { - bulmaJS.alert({ - title: `Error Deleting ${los.escapedAliases.Lot} Status`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: `Delete ${los.escapedAliases.Lot} Status`, - message: `Are you sure you want to delete this status?
    - Note that no ${los.escapedAliases.lot} will be removed.`, - messageIsHtml: true, - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete Status', - callbackFunction: doDelete - } - }); - } - function moveLotStatus(clickEvent) { - const buttonElement = clickEvent.currentTarget; - const tableRowElement = buttonElement.closest('tr'); - const burialSiteStatusId = tableRowElement.dataset.burialSiteStatusId; - cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' - ? 'doMoveLotStatusUp' - : 'doMoveLotStatusDown'}`, { - burialSiteStatusId, - moveToEnd: clickEvent.shiftKey ? '1' : '0' - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses; - renderLotStatuses(); - } - else { - bulmaJS.alert({ - title: `Error Moving ${los.escapedAliases.Lot} Status`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function renderLotStatuses() { - const containerElement = document.querySelector('#container--lotStatuses'); - if (lotStatuses.length === 0) { - // eslint-disable-next-line no-unsanitized/property - containerElement.innerHTML = ``; - return; - } - containerElement.innerHTML = ''; - for (const lotStatus of lotStatuses) { - const tableRowElement = document.createElement('tr'); - tableRowElement.dataset.burialSiteStatusId = lotStatus.burialSiteStatusId.toString(); - // eslint-disable-next-line no-unsanitized/property - tableRowElement.innerHTML = ``; - tableRowElement - .querySelector('form') - ?.addEventListener('submit', updateLotStatus); - tableRowElement.querySelector('.button--moveLotStatusUp').addEventListener('click', moveLotStatus); - tableRowElement.querySelector('.button--moveLotStatusDown').addEventListener('click', moveLotStatus); - tableRowElement - .querySelector('.button--deleteLotStatus') - ?.addEventListener('click', deleteLotStatus); - containerElement.append(tableRowElement); - } - } - ; - document.querySelector('#form--addLotStatus').addEventListener('submit', (submitEvent) => { - submitEvent.preventDefault(); - const formElement = submitEvent.currentTarget; - cityssm.postJSON(`${los.urlPrefix}/admin/doAddLotStatus`, formElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotStatuses = responseJSON.lotStatuses; - renderLotStatuses(); - formElement.reset(); - formElement.querySelector('input')?.focus(); - } - else { - bulmaJS.alert({ - title: `Error Adding ${los.escapedAliases.Lot} Status`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - }); - renderLotStatuses(); - })(); - (() => { - let lotOccupantTypes = exports.lotOccupantTypes; - delete exports.lotOccupantTypes; - function updateLotOccupantType(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateLotOccupantType`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes; - bulmaJS.alert({ - message: `${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type Updated Successfully`, - contextualColorName: 'success' - }); - } - else { - bulmaJS.alert({ - title: `Error Updating ${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function deleteLotOccupantType(clickEvent) { - const tableRowElement = clickEvent.currentTarget.closest('tr'); - const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/admin/doDeleteLotOccupantType`, { - lotOccupantTypeId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes; - if (lotOccupantTypes.length === 0) { - renderLotOccupantTypes(); - } - else { - tableRowElement.remove(); - } - bulmaJS.alert({ - message: `${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type Deleted Successfully`, - contextualColorName: 'success' - }); - } - else { - bulmaJS.alert({ - title: `Error Deleting ${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: `Delete ${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type`, - message: `Are you sure you want to delete this ${los.escapedAliases.lot} ${los.escapedAliases.occupant} type?
    - Note that no ${los.escapedAliases.lot} ${los.escapedAliases.occupants} will be removed.`, - messageIsHtml: true, - contextualColorName: 'warning', - okButton: { - text: `Yes, Delete ${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type`, - callbackFunction: doDelete - } - }); - } - function moveLotOccupantType(clickEvent) { - const buttonElement = clickEvent.currentTarget; - const tableRowElement = buttonElement.closest('tr'); - const lotOccupantTypeId = tableRowElement.dataset.lotOccupantTypeId; - cityssm.postJSON(`${los.urlPrefix}/admin/${buttonElement.dataset.direction === 'up' - ? 'doMoveLotOccupantTypeUp' - : 'doMoveLotOccupantTypeDown'}`, { - lotOccupantTypeId, - moveToEnd: clickEvent.shiftKey ? '1' : '0' - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes; - renderLotOccupantTypes(); - } - else { - bulmaJS.alert({ - title: `Error Moving ${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function renderLotOccupantTypes() { - const containerElement = document.querySelector('#container--lotOccupantTypes'); - if (lotOccupantTypes.length === 0) { - // eslint-disable-next-line no-unsanitized/property - containerElement.innerHTML = ``; - return; - } - containerElement.innerHTML = ''; - for (const lotOccupantType of lotOccupantTypes) { - const tableRowElement = document.createElement('tr'); - tableRowElement.dataset.lotOccupantTypeId = - lotOccupantType.lotOccupantTypeId.toString(); - const formId = `form--lotOccupantType-${lotOccupantType.lotOccupantTypeId.toString()}`; - // eslint-disable-next-line no-unsanitized/property - tableRowElement.innerHTML = ``; - const fontAwesomeInputElement = tableRowElement.querySelector("input[name='fontAwesomeIconClass']"); - fontAwesomeInputElement.addEventListener('keyup', refreshFontAwesomeIcon); - fontAwesomeInputElement.addEventListener('change', refreshFontAwesomeIcon); - tableRowElement - .querySelector('form') - ?.addEventListener('submit', updateLotOccupantType); - tableRowElement.querySelector('.button--moveLotOccupantTypeUp').addEventListener('click', moveLotOccupantType); - tableRowElement.querySelector('.button--moveLotOccupantTypeDown').addEventListener('click', moveLotOccupantType); - tableRowElement - .querySelector('.button--deleteLotOccupantType') - ?.addEventListener('click', deleteLotOccupantType); - containerElement.append(tableRowElement); - } - } - ; - document.querySelector('#form--addLotOccupantType').addEventListener('submit', (submitEvent) => { - submitEvent.preventDefault(); - const formElement = submitEvent.currentTarget; - cityssm.postJSON(`${los.urlPrefix}/admin/doAddLotOccupantType`, formElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupantTypes = responseJSON.lotOccupantTypes; - renderLotOccupantTypes(); - formElement.reset(); - formElement.querySelector('input')?.focus(); - } - else { - bulmaJS.alert({ - title: `Error Adding ${los.escapedAliases.Lot} ${los.escapedAliases.Occupant} Type`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - }); - renderLotOccupantTypes(); - })(); -})(); diff --git a/public/javascripts/lotEdit.ts b/public/javascripts/burialSite.edit.ts similarity index 97% rename from public/javascripts/lotEdit.ts rename to public/javascripts/burialSite.edit.ts index 859ff0e5..c8561d86 100644 --- a/public/javascripts/lotEdit.ts +++ b/public/javascripts/burialSite.edit.ts @@ -38,11 +38,11 @@ declare const exports: Record const formElement = document.querySelector('#form--lot') as HTMLFormElement - function updateLot(formEvent: SubmitEvent): void { + function updateBurialSite(formEvent: SubmitEvent): void { formEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/lots/${isCreate ? 'doCreateLot' : 'doUpdateLot'}`, + `${los.urlPrefix}/lots/${isCreate ? 'doCreateBurialSite' : 'doUpdateBurialSite'}`, formElement, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { @@ -73,7 +73,7 @@ declare const exports: Record ) } - formElement.addEventListener('submit', updateLot) + formElement.addEventListener('submit', updateBurialSite) const formInputElements = formElement.querySelectorAll('input, select') @@ -90,7 +90,7 @@ declare const exports: Record function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/lots/doDeleteLot`, + `${los.urlPrefix}/lots/doDeleteBurialSite`, { lotId }, @@ -295,7 +295,7 @@ declare const exports: Record submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/lots/doUpdateLotComment`, + `${los.urlPrefix}/lots/doUpdateBurialSiteComment`, editFormElement, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { @@ -388,7 +388,7 @@ declare const exports: Record function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/lots/doDeleteLotComment`, + `${los.urlPrefix}/lots/doDeleteBurialSiteComment`, { lotId, lotCommentId @@ -497,7 +497,7 @@ declare const exports: Record formEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/lots/doAddLotComment`, + `${los.urlPrefix}/lots/doAddBurialSiteComment`, formEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { diff --git a/public/javascripts/lotSearch.js b/public/javascripts/burialSite.search.js similarity index 100% rename from public/javascripts/lotSearch.js rename to public/javascripts/burialSite.search.js diff --git a/public/javascripts/lotSearch.ts b/public/javascripts/burialSite.search.ts similarity index 96% rename from public/javascripts/lotSearch.ts rename to public/javascripts/burialSite.search.ts index bba3fa96..323db3b0 100644 --- a/public/javascripts/lotSearch.ts +++ b/public/javascripts/burialSite.search.ts @@ -111,14 +111,14 @@ declare const exports: Record ?.addEventListener('click', nextAndGetLots) } - function getLots(): void { + function getBurialSites(): void { // eslint-disable-next-line no-unsanitized/property searchResultsContainerElement.innerHTML = los.getLoadingParagraphHTML( `Loading ${los.escapedAliases.Lots}...` ) cityssm.postJSON( - `${los.urlPrefix}/lots/doSearchLots`, + `${los.urlPrefix}/lots/doSearchBurialSites`, searchFilterFormElement, renderLots ) @@ -126,7 +126,7 @@ declare const exports: Record function resetOffsetAndGetLots(): void { offsetElement.value = '0' - getLots() + getBurialSites() } function previousAndGetLots(): void { @@ -134,14 +134,14 @@ declare const exports: Record Number.parseInt(offsetElement.value, 10) - limit, 0 ).toString() - getLots() + getBurialSites() } function nextAndGetLots(): void { offsetElement.value = ( Number.parseInt(offsetElement.value, 10) + limit ).toString() - getLots() + getBurialSites() } const filterElements = @@ -155,5 +155,5 @@ declare const exports: Record formEvent.preventDefault() }) - getLots() + getBurialSites() })() diff --git a/public/javascripts/lotView.ts b/public/javascripts/burialSite.view.ts similarity index 100% rename from public/javascripts/lotView.ts rename to public/javascripts/burialSite.view.ts diff --git a/public/javascripts/lotOccupancyEdit.ts b/public/javascripts/burialSiteContract.edit.ts similarity index 98% rename from public/javascripts/lotOccupancyEdit.ts rename to public/javascripts/burialSiteContract.edit.ts index 4386d694..865203c3 100644 --- a/public/javascripts/lotOccupancyEdit.ts +++ b/public/javascripts/burialSiteContract.edit.ts @@ -58,7 +58,7 @@ declare const exports: Record formEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/contracts/${isCreate ? 'doCreateLotOccupancy' : 'doUpdateLotOccupancy'}`, + `${los.urlPrefix}/contracts/${isCreate ? 'doCreateBurialSiteOccupancy' : 'doUpdateBurialSiteContract'}`, formElement, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { @@ -101,7 +101,7 @@ declare const exports: Record function doCopy(): void { cityssm.postJSON( - `${los.urlPrefix}/contracts/doCopyLotOccupancy`, + `${los.urlPrefix}/contracts/doCopyBurialSiteContract`, { burialSiteContractId }, @@ -161,7 +161,7 @@ declare const exports: Record function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/contracts/doDeleteLotOccupancy`, + `${los.urlPrefix}/contracts/doDeleteBurialSiteContract`, { burialSiteContractId }, @@ -501,7 +501,7 @@ declare const exports: Record los.getLoadingParagraphHTML('Searching...') cityssm.postJSON( - `${los.urlPrefix}/lots/doSearchLots`, + `${los.urlPrefix}/lots/doSearchBurialSites`, lotSelectFormElement, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { @@ -563,7 +563,7 @@ declare const exports: Record ).value cityssm.postJSON( - `${los.urlPrefix}/lots/doCreateLot`, + `${los.urlPrefix}/lots/doCreateBurialSite`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { @@ -781,7 +781,7 @@ declare const exports: Record submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/contracts/doUpdateLotOccupancyOccupant`, + `${los.urlPrefix}/contracts/doUpdateBurialSiteContractOccupant`, editFormElement, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { @@ -986,7 +986,7 @@ declare const exports: Record function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/contracts/doDeleteLotOccupancyOccupant`, + `${los.urlPrefix}/contracts/doDeleteBurialSiteContractOccupant`, { burialSiteContractId, lotOccupantIndex @@ -1471,7 +1471,7 @@ declare const exports: Record submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/contracts/doUpdateLotOccupancyComment`, + `${los.urlPrefix}/contracts/doUpdateBurialSiteContractComment`, editFormElement, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { @@ -1568,7 +1568,7 @@ declare const exports: Record function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/contracts/doDeleteLotOccupancyComment`, + `${los.urlPrefix}/contracts/doDeleteBurialSiteContractComment`, { burialSiteContractId, burialSiteContractCommentId @@ -1681,7 +1681,7 @@ declare const exports: Record submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/contracts/doAddLotOccupancyComment`, + `${los.urlPrefix}/contracts/doAddBurialSiteContractComment`, addFormElement, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { @@ -1785,7 +1785,7 @@ declare const exports: Record formEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/contracts/doUpdateLotOccupancyFeeQuantity`, + `${los.urlPrefix}/contracts/doUpdateBurialSiteContractFeeQuantity`, formEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { @@ -1860,7 +1860,7 @@ declare const exports: Record function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/contracts/doDeleteLotOccupancyFee`, + `${los.urlPrefix}/contracts/doDeleteBurialSiteContractFee`, { burialSiteContractId, feeId @@ -2044,7 +2044,7 @@ declare const exports: Record ) cityssm.postJSON( - `${los.urlPrefix}/contracts/doAddLotOccupancyFeeCategory`, + `${los.urlPrefix}/contracts/doAddBurialSiteContractFeeCategory`, { burialSiteContractId, feeCategoryId @@ -2354,7 +2354,7 @@ declare const exports: Record formEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/contracts/doUpdateLotOccupancyTransaction`, + `${los.urlPrefix}/contracts/doUpdateBurialSiteContractTransaction`, formEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { @@ -2447,7 +2447,7 @@ declare const exports: Record function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/contracts/doDeleteLotOccupancyTransaction`, + `${los.urlPrefix}/contracts/doDeleteBurialSiteContractTransaction`, { burialSiteContractId, transactionIndex diff --git a/public/javascripts/lotOccupancySearch.ts b/public/javascripts/burialSiteContract.search.ts similarity index 100% rename from public/javascripts/lotOccupancySearch.ts rename to public/javascripts/burialSiteContract.search.ts diff --git a/public/javascripts/adminLotTypes.ts b/public/javascripts/burialSiteTypes.admin.ts similarity index 97% rename from public/javascripts/adminLotTypes.ts rename to public/javascripts/burialSiteTypes.admin.ts index 5b06f8c4..f807463f 100644 --- a/public/javascripts/adminLotTypes.ts +++ b/public/javascripts/burialSiteTypes.admin.ts @@ -89,7 +89,7 @@ type ResponseJSON = function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/admin/doDeleteLotType`, + `${los.urlPrefix}/admin/doDeleteBurialSiteType`, { burialSiteTypeId }, @@ -128,7 +128,7 @@ type ResponseJSON = submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/admin/doUpdateLotType`, + `${los.urlPrefix}/admin/doUpdateBurialSiteType`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON @@ -189,7 +189,7 @@ type ResponseJSON = submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/admin/doAddLotTypeField`, + `${los.urlPrefix}/admin/doAddBurialSiteTypeField`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON @@ -248,8 +248,8 @@ type ResponseJSON = cityssm.postJSON( `${los.urlPrefix}/admin/${ buttonElement.dataset.direction === 'up' - ? 'doMoveLotTypeUp' - : 'doMoveLotTypeDown' + ? 'doMoveBurialSiteTypeUp' + : 'doMoveBurialSiteTypeDown' }`, { burialSiteTypeId, @@ -314,7 +314,7 @@ type ResponseJSON = submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/admin/doUpdateLotTypeField`, + `${los.urlPrefix}/admin/doUpdateBurialSiteTypeField`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON @@ -329,7 +329,7 @@ type ResponseJSON = function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/admin/doDeleteLotTypeField`, + `${los.urlPrefix}/admin/doDeleteBurialSiteTypeField`, { lotTypeFieldId }, @@ -469,8 +469,8 @@ type ResponseJSON = cityssm.postJSON( `${los.urlPrefix}/admin/${ buttonElement.dataset.direction === 'up' - ? 'doMoveLotTypeFieldUp' - : 'doMoveLotTypeFieldDown' + ? 'doMoveBurialSiteTypeFieldUp' + : 'doMoveBurialSiteTypeFieldDown' }`, { lotTypeFieldId, diff --git a/public/javascripts/mapEdit.ts b/public/javascripts/cemetery.edit.ts similarity index 100% rename from public/javascripts/mapEdit.ts rename to public/javascripts/cemetery.edit.ts diff --git a/public/javascripts/mapSearch.ts b/public/javascripts/cemetery.search.ts similarity index 100% rename from public/javascripts/mapSearch.ts rename to public/javascripts/cemetery.search.ts diff --git a/public/javascripts/mapView.ts b/public/javascripts/cemetery.view.ts similarity index 100% rename from public/javascripts/mapView.ts rename to public/javascripts/cemetery.view.ts diff --git a/public/javascripts/adminOccupancyTypes.ts b/public/javascripts/contractTypes.admin.ts similarity index 97% rename from public/javascripts/adminOccupancyTypes.ts rename to public/javascripts/contractTypes.admin.ts index 89019625..52c3a6ec 100644 --- a/public/javascripts/adminOccupancyTypes.ts +++ b/public/javascripts/contractTypes.admin.ts @@ -107,7 +107,7 @@ type ResponseJSON = function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/admin/doDeleteOccupancyType`, + `${los.urlPrefix}/admin/doDeleteContractType`, { contractTypeId }, @@ -147,7 +147,7 @@ type ResponseJSON = submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/admin/doUpdateOccupancyType`, + `${los.urlPrefix}/admin/doUpdateContractType`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON @@ -208,7 +208,7 @@ type ResponseJSON = submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/admin/doAddOccupancyTypeField`, + `${los.urlPrefix}/admin/doAddContractTypeField`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON @@ -269,8 +269,8 @@ type ResponseJSON = cityssm.postJSON( `${los.urlPrefix}/admin/${ buttonElement.dataset.direction === 'up' - ? 'doMoveOccupancyTypeUp' - : 'doMoveOccupancyTypeDown' + ? 'doMoveContractTypeUp' + : 'doMoveContractTypeDown' }`, { contractTypeId, @@ -344,7 +344,7 @@ type ResponseJSON = submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/admin/doUpdateOccupancyTypeField`, + `${los.urlPrefix}/admin/doUpdateContractTypeField`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON @@ -359,7 +359,7 @@ type ResponseJSON = function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/admin/doDeleteOccupancyTypeField`, + `${los.urlPrefix}/admin/doDeleteContractTypeField`, { contractTypeFieldId }, @@ -502,9 +502,9 @@ type ResponseJSON = cityssm.postJSON( `${los.urlPrefix}/admin/${ buttonElement.dataset.direction === 'up' - ? 'doMoveOccupancyTypeFieldUp' + ? 'doMoveContractTypeFieldUp' : // eslint-disable-next-line no-secrets/no-secrets - 'doMoveOccupancyTypeFieldDown' + 'doMoveContractTypeFieldDown' }`, { contractTypeFieldId, @@ -596,7 +596,7 @@ type ResponseJSON = formEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/admin/doAddOccupancyTypePrint`, + `${los.urlPrefix}/admin/doAddContractTypePrint`, formEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON @@ -655,9 +655,9 @@ type ResponseJSON = `${los.urlPrefix}/admin/${ buttonElement.dataset.direction === 'up' ? // eslint-disable-next-line no-secrets/no-secrets - 'doMoveOccupancyTypePrintUp' + 'doMoveContractTypePrintUp' : // eslint-disable-next-line no-secrets/no-secrets - 'doMoveOccupancyTypePrintDown' + 'doMoveContractTypePrintDown' }`, { contractTypeId, @@ -685,7 +685,7 @@ type ResponseJSON = function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/admin/doDeleteOccupancyTypePrint`, + `${los.urlPrefix}/admin/doDeleteContractTypePrint`, { contractTypeId, printEJS @@ -987,7 +987,7 @@ type ResponseJSON = submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/admin/doAddOccupancyType`, + `${los.urlPrefix}/admin/doAddContractType`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON diff --git a/public/javascripts/adminDatabase.ts b/public/javascripts/database.admin.ts similarity index 100% rename from public/javascripts/adminDatabase.ts rename to public/javascripts/database.admin.ts diff --git a/public/javascripts/adminFees.ts b/public/javascripts/fees.admin.ts similarity index 100% rename from public/javascripts/adminFees.ts rename to public/javascripts/fees.admin.ts diff --git a/public/javascripts/lotEdit.d.ts b/public/javascripts/lotEdit.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/lotEdit.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/lotEdit.js b/public/javascripts/lotEdit.js deleted file mode 100644 index ebefb2eb..00000000 --- a/public/javascripts/lotEdit.js +++ /dev/null @@ -1,367 +0,0 @@ -"use strict"; -// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair -/* eslint-disable unicorn/prefer-module */ -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - const lotId = document.querySelector('#lot--lotId') - .value; - const isCreate = lotId === ''; - // Main form - let refreshAfterSave = isCreate; - function setUnsavedChanges() { - los.setUnsavedChanges(); - document - .querySelector("button[type='submit'][form='form--lot']") - ?.classList.remove('is-light'); - } - function clearUnsavedChanges() { - los.clearUnsavedChanges(); - document - .querySelector("button[type='submit'][form='form--lot']") - ?.classList.add('is-light'); - } - const formElement = document.querySelector('#form--lot'); - function updateLot(formEvent) { - formEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/lots/${isCreate ? 'doCreateLot' : 'doUpdateLot'}`, formElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - clearUnsavedChanges(); - if (isCreate || refreshAfterSave) { - window.location.href = los.getLotURL(responseJSON.lotId, true, true); - } - else { - bulmaJS.alert({ - message: `${los.escapedAliases.Lot} Updated Successfully`, - contextualColorName: 'success' - }); - } - } - else { - bulmaJS.alert({ - title: `Error Updating ${los.escapedAliases.Lot}`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - formElement.addEventListener('submit', updateLot); - const formInputElements = formElement.querySelectorAll('input, select'); - for (const formInputElement of formInputElements) { - formInputElement.addEventListener('change', setUnsavedChanges); - } - los.initializeUnlockFieldButtons(formElement); - document - .querySelector('#button--deleteLot') - ?.addEventListener('click', (clickEvent) => { - clickEvent.preventDefault(); - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/lots/doDeleteLot`, { - lotId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - clearUnsavedChanges(); - window.location.href = los.getLotURL(); - } - else { - bulmaJS.alert({ - title: `Error Deleting ${los.escapedAliases.Lot}`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: `Delete ${los.escapedAliases.Lot}`, - message: `Are you sure you want to delete this ${los.escapedAliases.lot}?`, - contextualColorName: 'warning', - okButton: { - text: `Yes, Delete ${los.escapedAliases.Lot}`, - callbackFunction: doDelete - } - }); - }); - // Lot Type - const burialSiteTypeIdElement = document.querySelector('#lot--burialSiteTypeId'); - if (isCreate) { - const lotFieldsContainerElement = document.querySelector('#container--lotFields'); - burialSiteTypeIdElement.addEventListener('change', () => { - if (burialSiteTypeIdElement.value === '') { - // eslint-disable-next-line no-unsanitized/property - lotFieldsContainerElement.innerHTML = `
    -

    Select the ${los.escapedAliases.lot} type to load the available fields.

    -
    `; - return; - } - cityssm.postJSON(`${los.urlPrefix}/lots/doGetLotTypeFields`, { - burialSiteTypeId: burialSiteTypeIdElement.value - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.lotTypeFields.length === 0) { - // eslint-disable-next-line no-unsanitized/property - lotFieldsContainerElement.innerHTML = `
    -

    - There are no additional fields for this ${los.escapedAliases.lot} type. -

    -
    `; - return; - } - lotFieldsContainerElement.innerHTML = ''; - let lotTypeFieldIds = ''; - for (const lotTypeField of responseJSON.lotTypeFields) { - lotTypeFieldIds += `,${lotTypeField.lotTypeFieldId.toString()}`; - const fieldName = `lotFieldValue_${lotTypeField.lotTypeFieldId.toString()}`; - const fieldId = `lot--${fieldName}`; - const fieldElement = document.createElement('div'); - fieldElement.className = 'field'; - // eslint-disable-next-line no-unsanitized/property - fieldElement.innerHTML = ` -
    `; - fieldElement.querySelector('label').textContent = lotTypeField.lotTypeField; - if (lotTypeField.lotTypeFieldValues === '') { - const inputElement = document.createElement('input'); - inputElement.className = 'input'; - inputElement.id = fieldId; - inputElement.name = fieldName; - inputElement.type = 'text'; - inputElement.required = lotTypeField.isRequired; - inputElement.minLength = lotTypeField.minimumLength; - inputElement.maxLength = lotTypeField.maximumLength; - if ((lotTypeField.pattern ?? '') !== '') { - inputElement.pattern = lotTypeField.pattern ?? ''; - } - fieldElement.querySelector('.control')?.append(inputElement); - } - else { - // eslint-disable-next-line no-unsanitized/property - ; - fieldElement.querySelector('.control').innerHTML = `
    - -
    `; - const selectElement = fieldElement.querySelector('select'); - selectElement.required = lotTypeField.isRequired; - const optionValues = lotTypeField.lotTypeFieldValues.split('\n'); - for (const optionValue of optionValues) { - const optionElement = document.createElement('option'); - optionElement.value = optionValue; - optionElement.textContent = optionValue; - selectElement.append(optionElement); - } - } - lotFieldsContainerElement.append(fieldElement); - } - lotFieldsContainerElement.insertAdjacentHTML('beforeend', ``); - }); - }); - } - else { - const originalburialSiteTypeId = burialSiteTypeIdElement.value; - burialSiteTypeIdElement.addEventListener('change', () => { - if (burialSiteTypeIdElement.value !== originalburialSiteTypeId) { - bulmaJS.confirm({ - title: 'Confirm Change', - message: `Are you sure you want to change the ${los.escapedAliases.lot} type?\n - This change affects the additional fields associated with this record.`, - contextualColorName: 'warning', - okButton: { - text: 'Yes, Keep the Change', - callbackFunction() { - refreshAfterSave = true; - } - }, - cancelButton: { - text: 'Revert the Change', - callbackFunction() { - burialSiteTypeIdElement.value = originalburialSiteTypeId; - } - } - }); - } - }); - } - // Comments - let lotComments = exports.lotComments; - delete exports.lotComments; - function openEditLotComment(clickEvent) { - const lotCommentId = Number.parseInt(clickEvent.currentTarget.closest('tr')?.dataset - .lotCommentId ?? '', 10); - const lotComment = lotComments.find((currentLotComment) => { - return currentLotComment.lotCommentId === lotCommentId; - }); - let editFormElement; - let editCloseModalFunction; - function editComment(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/lots/doUpdateLotComment`, editFormElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotComments = responseJSON.lotComments; - editCloseModalFunction(); - renderLotComments(); - } - else { - bulmaJS.alert({ - title: 'Error Updating Comment', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('lot-editComment', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#lotCommentEdit--lotId').value = lotId; - modalElement.querySelector('#lotCommentEdit--lotCommentId').value = lotCommentId.toString(); - modalElement.querySelector('#lotCommentEdit--lotComment').value = lotComment.lotComment ?? ''; - const lotCommentDateStringElement = modalElement.querySelector('#lotCommentEdit--lotCommentDateString'); - lotCommentDateStringElement.value = - lotComment.lotCommentDateString ?? ''; - const currentDateString = cityssm.dateToString(new Date()); - lotCommentDateStringElement.max = - lotComment.lotCommentDateString <= currentDateString - ? currentDateString - : lotComment.lotCommentDateString ?? ''; - modalElement.querySelector('#lotCommentEdit--lotCommentTimeString').value = lotComment.lotCommentTimeString ?? ''; - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - los.initializeDatePickers(modalElement); - modalElement.querySelector('#lotCommentEdit--lotComment').focus(); - editFormElement = modalElement.querySelector('form'); - editFormElement.addEventListener('submit', editComment); - editCloseModalFunction = closeModalFunction; - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function deleteLotComment(clickEvent) { - const lotCommentId = Number.parseInt(clickEvent.currentTarget.closest('tr')?.dataset - .lotCommentId ?? '', 10); - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/lots/doDeleteLotComment`, { - lotId, - lotCommentId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotComments = responseJSON.lotComments; - renderLotComments(); - } - else { - bulmaJS.alert({ - title: 'Error Removing Comment', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: 'Remove Comment?', - message: 'Are you sure you want to remove this comment?', - okButton: { - text: 'Yes, Remove Comment', - callbackFunction: doDelete - }, - contextualColorName: 'warning' - }); - } - function renderLotComments() { - const containerElement = document.querySelector('#container--lotComments'); - if (lotComments.length === 0) { - containerElement.innerHTML = `
    -

    There are no comments to display.

    -
    `; - return; - } - const tableElement = document.createElement('table'); - tableElement.className = 'table is-fullwidth is-striped is-hoverable'; - tableElement.innerHTML = `
    - - - - - - `; - for (const lotComment of lotComments) { - const tableRowElement = document.createElement('tr'); - tableRowElement.dataset.lotCommentId = lotComment.lotCommentId?.toString(); - // eslint-disable-next-line no-unsanitized/property - tableRowElement.innerHTML = ``; - tableRowElement - .querySelector('.button--edit') - ?.addEventListener('click', openEditLotComment); - tableRowElement - .querySelector('.button--delete') - ?.addEventListener('click', deleteLotComment); - tableElement.querySelector('tbody')?.append(tableRowElement); - } - containerElement.innerHTML = ''; - containerElement.append(tableElement); - } - function openAddCommentModal() { - let addCommentCloseModalFunction; - function doAddComment(formEvent) { - formEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/lots/doAddLotComment`, formEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotComments = responseJSON.lotComments; - renderLotComments(); - addCommentCloseModalFunction(); - } - }); - } - cityssm.openHtmlModal('lot-addComment', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#lotCommentAdd--lotId').value = lotId; - modalElement - .querySelector('form') - ?.addEventListener('submit', doAddComment); - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - addCommentCloseModalFunction = closeModalFunction; - modalElement.querySelector('#lotCommentAdd--lotComment').focus(); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - document.querySelector('#lotComments--add').focus(); - } - }); - } - if (!isCreate) { - document - .querySelector('#lotComments--add') - ?.addEventListener('click', openAddCommentModal); - renderLotComments(); - } -})(); diff --git a/public/javascripts/lotOccupancyEdit.d.ts b/public/javascripts/lotOccupancyEdit.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/lotOccupancyEdit.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/lotOccupancyEdit.js b/public/javascripts/lotOccupancyEdit.js deleted file mode 100644 index b0032df2..00000000 --- a/public/javascripts/lotOccupancyEdit.js +++ /dev/null @@ -1,1735 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - const lotOccupancyId = document.querySelector('#lotOccupancy--lotOccupancyId').value; - const isCreate = lotOccupancyId === ''; - /* - * Main form - */ - let refreshAfterSave = isCreate; - function setUnsavedChanges() { - los.setUnsavedChanges(); - document - .querySelector("button[type='submit'][form='form--lotOccupancy']") - ?.classList.remove('is-light'); - } - function clearUnsavedChanges() { - los.clearUnsavedChanges(); - document - .querySelector("button[type='submit'][form='form--lotOccupancy']") - ?.classList.add('is-light'); - } - const formElement = document.querySelector('#form--lotOccupancy'); - formElement.addEventListener('submit', (formEvent) => { - formEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/${isCreate ? 'doCreateLotOccupancy' : 'doUpdateLotOccupancy'}`, formElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - clearUnsavedChanges(); - if (isCreate || refreshAfterSave) { - globalThis.location.href = los.getLotOccupancyURL(responseJSON.lotOccupancyId, true, true); - } - else { - bulmaJS.alert({ - message: `${los.escapedAliases.Occupancy} Updated Successfully`, - contextualColorName: 'success' - }); - } - } - else { - bulmaJS.alert({ - title: `Error Saving ${los.escapedAliases.Occupancy}`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - }); - const formInputElements = formElement.querySelectorAll('input, select'); - for (const formInputElement of formInputElements) { - formInputElement.addEventListener('change', setUnsavedChanges); - } - function doCopy() { - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doCopyLotOccupancy`, { - lotOccupancyId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - clearUnsavedChanges(); - globalThis.location.href = los.getLotOccupancyURL(responseJSON.lotOccupancyId, true); - } - else { - bulmaJS.alert({ - title: 'Error Copying Record', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - document - .querySelector('#button--copyLotOccupancy') - ?.addEventListener('click', (clickEvent) => { - clickEvent.preventDefault(); - if (los.hasUnsavedChanges()) { - bulmaJS.alert({ - title: 'Unsaved Changes', - message: 'Please save all unsaved changes before continuing.', - contextualColorName: 'warning' - }); - } - else { - bulmaJS.confirm({ - title: `Copy ${los.escapedAliases.Occupancy} Record as New`, - message: 'Are you sure you want to copy this record to a new record?', - contextualColorName: 'info', - okButton: { - text: 'Yes, Copy', - callbackFunction: doCopy - } - }); - } - }); - document - .querySelector('#button--deleteLotOccupancy') - ?.addEventListener('click', (clickEvent) => { - clickEvent.preventDefault(); - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doDeleteLotOccupancy`, { - lotOccupancyId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - clearUnsavedChanges(); - globalThis.location.href = los.getLotOccupancyURL(); - } - else { - bulmaJS.alert({ - title: 'Error Deleting Record', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: `Delete ${los.escapedAliases.Occupancy} Record`, - message: 'Are you sure you want to delete this record?', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete', - callbackFunction: doDelete - } - }); - }); - document - .querySelector('#button--createWorkOrder') - ?.addEventListener('click', (clickEvent) => { - clickEvent.preventDefault(); - let createCloseModalFunction; - function doCreate(formEvent) { - formEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/workOrders/doCreateWorkOrder`, formEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - createCloseModalFunction(); - bulmaJS.confirm({ - title: 'Work Order Created Successfully', - message: 'Would you like to open the work order now?', - contextualColorName: 'success', - okButton: { - text: 'Yes, Open the Work Order', - callbackFunction: () => { - globalThis.location.href = los.getWorkOrderURL(responseJSON.workOrderId, true); - } - } - }); - } - else { - bulmaJS.alert({ - title: 'Error Creating Work Order', - message: responseJSON.errorMessage, - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('lotOccupancy-createWorkOrder', { - onshow(modalElement) { - ; - modalElement.querySelector('#workOrderCreate--lotOccupancyId').value = lotOccupancyId; - modalElement.querySelector('#workOrderCreate--workOrderOpenDateString').value = cityssm.dateToString(new Date()); - const workOrderTypeSelectElement = modalElement.querySelector('#workOrderCreate--workOrderTypeId'); - const workOrderTypes = exports - .workOrderTypes; - if (workOrderTypes.length === 1) { - workOrderTypeSelectElement.innerHTML = ''; - } - for (const workOrderType of workOrderTypes) { - const optionElement = document.createElement('option'); - optionElement.value = workOrderType.workOrderTypeId.toString(); - optionElement.textContent = workOrderType.workOrderType ?? ''; - workOrderTypeSelectElement.append(optionElement); - } - }, - onshown(modalElement, closeModalFunction) { - createCloseModalFunction = closeModalFunction; - bulmaJS.toggleHtmlClipped(); - modalElement.querySelector('#workOrderCreate--workOrderTypeId').focus(); - modalElement - .querySelector('form') - ?.addEventListener('submit', doCreate); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - document.querySelector('#button--createWorkOrder').focus(); - } - }); - }); - // Occupancy Type - const occupancyTypeIdElement = document.querySelector('#lotOccupancy--occupancyTypeId'); - if (isCreate) { - const lotOccupancyFieldsContainerElement = document.querySelector('#container--lotOccupancyFields'); - occupancyTypeIdElement.addEventListener('change', () => { - if (occupancyTypeIdElement.value === '') { - // eslint-disable-next-line no-unsanitized/property - lotOccupancyFieldsContainerElement.innerHTML = `
    -

    Select the ${los.escapedAliases.occupancy} type to load the available fields.

    -
    `; - return; - } - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doGetOccupancyTypeFields`, { - occupancyTypeId: occupancyTypeIdElement.value - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.occupancyTypeFields.length === 0) { - // eslint-disable-next-line no-unsanitized/property - lotOccupancyFieldsContainerElement.innerHTML = `
    -

    There are no additional fields for this ${los.escapedAliases.occupancy} type.

    -
    `; - return; - } - lotOccupancyFieldsContainerElement.innerHTML = ''; - let occupancyTypeFieldIds = ''; - for (const occupancyTypeField of responseJSON.occupancyTypeFields) { - occupancyTypeFieldIds += `,${occupancyTypeField.occupancyTypeFieldId.toString()}`; - const fieldName = `lotOccupancyFieldValue_${occupancyTypeField.occupancyTypeFieldId.toString()}`; - const fieldId = `lotOccupancy--${fieldName}`; - const fieldElement = document.createElement('div'); - fieldElement.className = 'field'; - fieldElement.innerHTML = `
    `; - fieldElement.querySelector('label').textContent = occupancyTypeField.occupancyTypeField; - if (occupancyTypeField.fieldType === 'select' || - (occupancyTypeField.occupancyTypeFieldValues ?? '') !== '') { - ; - fieldElement.querySelector('.control').innerHTML = `
    - -
    `; - const selectElement = fieldElement.querySelector('select'); - selectElement.required = occupancyTypeField.isRequired; - const optionValues = occupancyTypeField.occupancyTypeFieldValues.split('\n'); - for (const optionValue of optionValues) { - const optionElement = document.createElement('option'); - optionElement.value = optionValue; - optionElement.textContent = optionValue; - selectElement.append(optionElement); - } - } - else { - const inputElement = document.createElement('input'); - inputElement.className = 'input'; - inputElement.id = fieldId; - inputElement.name = fieldName; - inputElement.type = occupancyTypeField.fieldType; - inputElement.required = occupancyTypeField.isRequired; - inputElement.minLength = - occupancyTypeField.minimumLength; - inputElement.maxLength = - occupancyTypeField.maximumLength; - if ((occupancyTypeField.pattern ?? '') !== '') { - inputElement.pattern = occupancyTypeField.pattern; - } - ; - fieldElement.querySelector('.control').append(inputElement); - } - console.log(fieldElement); - lotOccupancyFieldsContainerElement.append(fieldElement); - } - lotOccupancyFieldsContainerElement.insertAdjacentHTML('beforeend', - // eslint-disable-next-line no-secrets/no-secrets - ``); - }); - }); - } - else { - const originalOccupancyTypeId = occupancyTypeIdElement.value; - occupancyTypeIdElement.addEventListener('change', () => { - if (occupancyTypeIdElement.value !== originalOccupancyTypeId) { - bulmaJS.confirm({ - title: 'Confirm Change', - message: `Are you sure you want to change the ${los.escapedAliases.occupancy} type?\n - This change affects the additional fields associated with this record, and may also affect the available fees.`, - contextualColorName: 'warning', - okButton: { - text: 'Yes, Keep the Change', - callbackFunction: () => { - refreshAfterSave = true; - } - }, - cancelButton: { - text: 'Revert the Change', - callbackFunction: () => { - occupancyTypeIdElement.value = originalOccupancyTypeId; - } - } - }); - } - }); - } - // Lot Selector - const lotNameElement = document.querySelector('#lotOccupancy--lotName'); - lotNameElement.addEventListener('click', (clickEvent) => { - const currentLotName = clickEvent.currentTarget.value; - let lotSelectCloseModalFunction; - let lotSelectModalElement; - let lotSelectFormElement; - let lotSelectResultsElement; - function renderSelectedLotAndClose(lotId, lotName) { - ; - document.querySelector('#lotOccupancy--lotId').value = lotId.toString(); - document.querySelector('#lotOccupancy--lotName').value = lotName; - setUnsavedChanges(); - lotSelectCloseModalFunction(); - } - function selectExistingLot(clickEvent) { - clickEvent.preventDefault(); - const selectedLotElement = clickEvent.currentTarget; - renderSelectedLotAndClose(selectedLotElement.dataset.lotId ?? '', selectedLotElement.dataset.lotName ?? ''); - } - function searchLots() { - // eslint-disable-next-line no-unsanitized/property - lotSelectResultsElement.innerHTML = - los.getLoadingParagraphHTML('Searching...'); - cityssm.postJSON(`${los.urlPrefix}/lots/doSearchLots`, lotSelectFormElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.count === 0) { - lotSelectResultsElement.innerHTML = `
    -

    No results.

    -
    `; - return; - } - const panelElement = document.createElement('div'); - panelElement.className = 'panel'; - for (const lot of responseJSON.lots) { - const panelBlockElement = document.createElement('a'); - panelBlockElement.className = 'panel-block is-block'; - panelBlockElement.href = '#'; - panelBlockElement.dataset.lotId = lot.lotId.toString(); - panelBlockElement.dataset.lotName = lot.lotName; - // eslint-disable-next-line no-unsanitized/property - panelBlockElement.innerHTML = `
    -
    - ${cityssm.escapeHTML(lot.lotName ?? '')}
    - ${cityssm.escapeHTML(lot.mapName ?? '')} -
    -
    - ${cityssm.escapeHTML(lot.lotStatus)}
    - - ${lot.lotOccupancyCount > 0 ? 'Currently Occupied' : ''} - -
    -
    `; - panelBlockElement.addEventListener('click', selectExistingLot); - panelElement.append(panelBlockElement); - } - lotSelectResultsElement.innerHTML = ''; - lotSelectResultsElement.append(panelElement); - }); - } - function createLotAndSelect(submitEvent) { - submitEvent.preventDefault(); - const lotName = lotSelectModalElement.querySelector('#lotCreate--lotName').value; - cityssm.postJSON(`${los.urlPrefix}/lots/doCreateLot`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - renderSelectedLotAndClose(responseJSON.lotId ?? '', lotName); - } - else { - bulmaJS.alert({ - title: `Error Creating ${los.escapedAliases.Lot}`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('lotOccupancy-selectLot', { - onshow(modalElement) { - los.populateAliases(modalElement); - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - lotSelectModalElement = modalElement; - lotSelectCloseModalFunction = closeModalFunction; - bulmaJS.init(modalElement); - // search Tab - const lotNameFilterElement = modalElement.querySelector('#lotSelect--lotName'); - if (document.querySelector('#lotOccupancy--lotId') - .value !== '') { - lotNameFilterElement.value = currentLotName; - } - lotNameFilterElement.focus(); - lotNameFilterElement.addEventListener('change', searchLots); - const occupancyStatusFilterElement = modalElement.querySelector('#lotSelect--occupancyStatus'); - occupancyStatusFilterElement.addEventListener('change', searchLots); - if (currentLotName !== '') { - occupancyStatusFilterElement.value = ''; - } - lotSelectFormElement = modalElement.querySelector('#form--lotSelect'); - lotSelectResultsElement = modalElement.querySelector('#resultsContainer--lotSelect'); - lotSelectFormElement.addEventListener('submit', (submitEvent) => { - submitEvent.preventDefault(); - }); - searchLots(); - // Create Tab - if (exports.lotNamePattern) { - const regex = exports.lotNamePattern; - modalElement.querySelector('#lotCreate--lotName').pattern = regex.source; - } - const lotTypeElement = modalElement.querySelector('#lotCreate--burialSiteTypeId'); - for (const lotType of exports.lotTypes) { - const optionElement = document.createElement('option'); - optionElement.value = lotType.burialSiteTypeId.toString(); - optionElement.textContent = lotType.lotType; - lotTypeElement.append(optionElement); - } - const lotStatusElement = modalElement.querySelector('#lotCreate--burialSiteStatusId'); - for (const lotStatus of exports.lotStatuses) { - const optionElement = document.createElement('option'); - optionElement.value = lotStatus.burialSiteStatusId.toString(); - optionElement.textContent = lotStatus.lotStatus; - lotStatusElement.append(optionElement); - } - const mapElement = modalElement.querySelector('#lotCreate--mapId'); - for (const map of exports.maps) { - const optionElement = document.createElement('option'); - optionElement.value = map.mapId.toString(); - optionElement.textContent = - (map.mapName ?? '') === '' ? '(No Name)' : map.mapName ?? ''; - mapElement.append(optionElement); - } - ; - modalElement.querySelector('#form--lotCreate').addEventListener('submit', createLotAndSelect); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - }); - document - .querySelector('.is-lot-view-button') - ?.addEventListener('click', () => { - const lotId = document.querySelector('#lotOccupancy--lotId').value; - if (lotId === '') { - bulmaJS.alert({ - message: `No ${los.escapedAliases.lot} selected.`, - contextualColorName: 'info' - }); - } - else { - window.open(`${los.urlPrefix}/lots/${lotId}`); - } - }); - document - .querySelector('.is-clear-lot-button') - ?.addEventListener('click', () => { - if (lotNameElement.disabled) { - bulmaJS.alert({ - message: 'You need to unlock the field before clearing it.', - contextualColorName: 'info' - }); - } - else { - lotNameElement.value = `(No ${los.escapedAliases.Lot})`; - document.querySelector('#lotOccupancy--lotId').value = ''; - setUnsavedChanges(); - } - }); - // Start Date - los.initializeDatePickers(formElement); - document - .querySelector('#lotOccupancy--occupancyStartDateString') - ?.addEventListener('change', () => { - const endDatePicker = document.querySelector('#lotOccupancy--occupancyEndDateString').bulmaCalendar.datePicker; - endDatePicker.min = document.querySelector('#lotOccupancy--occupancyStartDateString').value; - endDatePicker.refresh(); - }); - los.initializeUnlockFieldButtons(formElement); - (() => { - let lotOccupancyOccupants = exports.lotOccupancyOccupants; - delete exports.lotOccupancyOccupants; - function openEditLotOccupancyOccupant(clickEvent) { - const lotOccupantIndex = Number.parseInt(clickEvent.currentTarget.closest('tr')?.dataset - .lotOccupantIndex ?? '', 10); - const lotOccupancyOccupant = lotOccupancyOccupants.find((currentLotOccupancyOccupant) => { - return (currentLotOccupancyOccupant.lotOccupantIndex === lotOccupantIndex); - }); - let editFormElement; - let editCloseModalFunction; - function editOccupant(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doUpdateLotOccupancyOccupant`, editFormElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyOccupants = responseJSON.lotOccupancyOccupants; - editCloseModalFunction(); - renderLotOccupancyOccupants(); - } - else { - bulmaJS.alert({ - title: `Error Updating ${los.escapedAliases.Occupant}`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('lotOccupancy-editOccupant', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#lotOccupancyOccupantEdit--lotOccupancyId').value = lotOccupancyId; - modalElement.querySelector('#lotOccupancyOccupantEdit--lotOccupantIndex').value = lotOccupantIndex.toString(); - const lotOccupantTypeSelectElement = modalElement.querySelector('#lotOccupancyOccupantEdit--lotOccupantTypeId'); - let lotOccupantTypeSelected = false; - for (const lotOccupantType of exports.lotOccupantTypes) { - const optionElement = document.createElement('option'); - optionElement.value = lotOccupantType.lotOccupantTypeId.toString(); - optionElement.textContent = lotOccupantType.lotOccupantType; - optionElement.dataset.occupantCommentTitle = - lotOccupantType.occupantCommentTitle; - optionElement.dataset.fontAwesomeIconClass = - lotOccupantType.fontAwesomeIconClass; - if (lotOccupantType.lotOccupantTypeId === - lotOccupancyOccupant.lotOccupantTypeId) { - optionElement.selected = true; - lotOccupantTypeSelected = true; - } - lotOccupantTypeSelectElement.append(optionElement); - } - if (!lotOccupantTypeSelected) { - const optionElement = document.createElement('option'); - optionElement.value = - lotOccupancyOccupant.lotOccupantTypeId?.toString() ?? ''; - optionElement.textContent = - lotOccupancyOccupant.lotOccupantType ?? ''; - optionElement.dataset.occupantCommentTitle = - lotOccupancyOccupant.occupantCommentTitle; - optionElement.dataset.fontAwesomeIconClass = - lotOccupancyOccupant.fontAwesomeIconClass; - optionElement.selected = true; - lotOccupantTypeSelectElement.append(optionElement); - } - ; - modalElement.querySelector('#lotOccupancyOccupantEdit--fontAwesomeIconClass').innerHTML = - ``; - modalElement.querySelector('#lotOccupancyOccupantEdit--occupantName').value = lotOccupancyOccupant.occupantName ?? ''; - modalElement.querySelector('#lotOccupancyOccupantEdit--occupantFamilyName').value = lotOccupancyOccupant.occupantFamilyName ?? ''; - modalElement.querySelector('#lotOccupancyOccupantEdit--occupantAddress1').value = lotOccupancyOccupant.occupantAddress1 ?? ''; - modalElement.querySelector('#lotOccupancyOccupantEdit--occupantAddress2').value = lotOccupancyOccupant.occupantAddress2 ?? ''; - modalElement.querySelector('#lotOccupancyOccupantEdit--occupantCity').value = lotOccupancyOccupant.occupantCity ?? ''; - modalElement.querySelector('#lotOccupancyOccupantEdit--occupantProvince').value = lotOccupancyOccupant.occupantProvince ?? ''; - modalElement.querySelector('#lotOccupancyOccupantEdit--occupantPostalCode').value = lotOccupancyOccupant.occupantPostalCode ?? ''; - modalElement.querySelector('#lotOccupancyOccupantEdit--occupantPhoneNumber').value = lotOccupancyOccupant.occupantPhoneNumber ?? ''; - modalElement.querySelector('#lotOccupancyOccupantEdit--occupantEmailAddress').value = lotOccupancyOccupant.occupantEmailAddress ?? ''; - modalElement.querySelector('#lotOccupancyOccupantEdit--occupantCommentTitle').textContent = - (lotOccupancyOccupant.occupantCommentTitle ?? '') === '' - ? 'Comment' - : lotOccupancyOccupant.occupantCommentTitle ?? ''; - modalElement.querySelector('#lotOccupancyOccupantEdit--occupantComment').value = lotOccupancyOccupant.occupantComment ?? ''; - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - const lotOccupantTypeIdElement = modalElement.querySelector('#lotOccupancyOccupantEdit--lotOccupantTypeId'); - lotOccupantTypeIdElement.focus(); - lotOccupantTypeIdElement.addEventListener('change', () => { - const fontAwesomeIconClass = lotOccupantTypeIdElement.selectedOptions[0].dataset - .fontAwesomeIconClass ?? 'user'; - modalElement.querySelector('#lotOccupancyOccupantEdit--fontAwesomeIconClass').innerHTML = - ``; - let occupantCommentTitle = lotOccupantTypeIdElement.selectedOptions[0].dataset - .occupantCommentTitle ?? ''; - if (occupantCommentTitle === '') { - occupantCommentTitle = 'Comment'; - } - ; - modalElement.querySelector('#lotOccupancyOccupantEdit--occupantCommentTitle').textContent = occupantCommentTitle; - }); - editFormElement = modalElement.querySelector('form'); - editFormElement.addEventListener('submit', editOccupant); - editCloseModalFunction = closeModalFunction; - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function deleteLotOccupancyOccupant(clickEvent) { - const lotOccupantIndex = clickEvent.currentTarget.closest('tr')?.dataset.lotOccupantIndex; - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doDeleteLotOccupancyOccupant`, { - lotOccupancyId, - lotOccupantIndex - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyOccupants = responseJSON.lotOccupancyOccupants; - renderLotOccupancyOccupants(); - } - else { - bulmaJS.alert({ - title: `Error Removing ${los.escapedAliases.Occupant}`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: `Remove ${los.escapedAliases.Occupant}?`, - message: `Are you sure you want to remove this ${los.escapedAliases.occupant}?`, - okButton: { - text: `Yes, Remove ${los.escapedAliases.Occupant}`, - callbackFunction: doDelete - }, - contextualColorName: 'warning' - }); - } - function renderLotOccupancyOccupants() { - const occupantsContainer = document.querySelector('#container--lotOccupancyOccupants'); - cityssm.clearElement(occupantsContainer); - if (lotOccupancyOccupants.length === 0) { - // eslint-disable-next-line no-unsanitized/property - occupantsContainer.innerHTML = `
    -

    There are no ${los.escapedAliases.occupants} associated with this record.

    -
    `; - return; - } - const tableElement = document.createElement('table'); - tableElement.className = 'table is-fullwidth is-striped is-hoverable'; - // eslint-disable-next-line no-unsanitized/property - tableElement.innerHTML = ` - - - - - - - `; - for (const lotOccupancyOccupant of lotOccupancyOccupants) { - const tableRowElement = document.createElement('tr'); - tableRowElement.dataset.lotOccupantIndex = - lotOccupancyOccupant.lotOccupantIndex?.toString(); - // eslint-disable-next-line no-unsanitized/property - tableRowElement.innerHTML = ``; - tableRowElement - .querySelector('.button--edit') - ?.addEventListener('click', openEditLotOccupancyOccupant); - tableRowElement - .querySelector('.button--delete') - ?.addEventListener('click', deleteLotOccupancyOccupant); - tableElement.querySelector('tbody')?.append(tableRowElement); - } - occupantsContainer.append(tableElement); - } - if (isCreate) { - const lotOccupantTypeIdElement = document.querySelector('#lotOccupancy--lotOccupantTypeId'); - lotOccupantTypeIdElement.addEventListener('change', () => { - const occupantFields = formElement.querySelectorAll("[data-table='LotOccupancyOccupant']"); - for (const occupantField of occupantFields) { - occupantField.disabled = lotOccupantTypeIdElement.value === ''; - } - let occupantCommentTitle = lotOccupantTypeIdElement.selectedOptions[0].dataset - .occupantCommentTitle ?? ''; - if (occupantCommentTitle === '') { - occupantCommentTitle = 'Comment'; - } - ; - formElement.querySelector('#lotOccupancy--occupantCommentTitle').textContent = occupantCommentTitle; - }); - } - else { - renderLotOccupancyOccupants(); - } - document - .querySelector('#button--addOccupant') - ?.addEventListener('click', () => { - let addCloseModalFunction; - let addFormElement; - let searchFormElement; - let searchResultsElement; - function addOccupant(formOrObject) { - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doAddLotOccupancyOccupant`, formOrObject, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyOccupants = responseJSON.lotOccupancyOccupants; - addCloseModalFunction(); - renderLotOccupancyOccupants(); - } - else { - bulmaJS.alert({ - title: `Error Adding ${los.escapedAliases.Occupant}`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function addOccupantFromForm(submitEvent) { - submitEvent.preventDefault(); - addOccupant(addFormElement); - } - let pastOccupantSearchResults = []; - function addOccupantFromCopy(clickEvent) { - clickEvent.preventDefault(); - const panelBlockElement = clickEvent.currentTarget; - const occupant = pastOccupantSearchResults[Number.parseInt(panelBlockElement.dataset.index ?? '', 10)]; - const lotOccupantTypeId = (panelBlockElement - .closest('.modal') - ?.querySelector('#lotOccupancyOccupantCopy--lotOccupantTypeId')).value; - if (lotOccupantTypeId === '') { - bulmaJS.alert({ - title: `No ${los.escapedAliases.Occupant} Type Selected`, - message: `Select a type to apply to the newly added ${los.escapedAliases.occupant}.`, - contextualColorName: 'warning' - }); - } - else { - occupant.lotOccupantTypeId = Number.parseInt(lotOccupantTypeId, 10); - occupant.lotOccupancyId = Number.parseInt(lotOccupancyId, 10); - addOccupant(occupant); - } - } - function searchOccupants(event) { - event.preventDefault(); - if (searchFormElement.querySelector('#lotOccupancyOccupantCopy--searchFilter').value === '') { - searchResultsElement.innerHTML = `
    -

    Enter a partial name or address in the search field above.

    -
    `; - return; - } - // eslint-disable-next-line no-unsanitized/property - searchResultsElement.innerHTML = - los.getLoadingParagraphHTML('Searching...'); - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doSearchPastOccupants`, searchFormElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - pastOccupantSearchResults = responseJSON.occupants; - const panelElement = document.createElement('div'); - panelElement.className = 'panel'; - for (const [index, occupant] of pastOccupantSearchResults.entries()) { - const panelBlockElement = document.createElement('a'); - panelBlockElement.className = 'panel-block is-block'; - panelBlockElement.href = '#'; - panelBlockElement.dataset.index = index.toString(); - // eslint-disable-next-line no-unsanitized/property - panelBlockElement.innerHTML = ` - ${cityssm.escapeHTML(occupant.occupantName ?? '')} ${cityssm.escapeHTML(occupant.occupantFamilyName ?? '')} -
    -
    -
    - ${cityssm.escapeHTML(occupant.occupantAddress1 ?? '')}
    - ${(occupant.occupantAddress2 ?? '') === '' - ? '' - : `${cityssm.escapeHTML(occupant.occupantAddress2 ?? '')}
    `}${cityssm.escapeHTML(occupant.occupantCity ?? '')}, ${cityssm.escapeHTML(occupant.occupantProvince ?? '')}
    - ${cityssm.escapeHTML(occupant.occupantPostalCode ?? '')} -
    -
    - ${(occupant.occupantPhoneNumber ?? '') === '' - ? '' - : `${cityssm.escapeHTML(occupant.occupantPhoneNumber ?? '')}
    `} - ${cityssm.escapeHTML(occupant.occupantEmailAddress ?? '')}
    -
    -
    `; - panelBlockElement.addEventListener('click', addOccupantFromCopy); - panelElement.append(panelBlockElement); - } - searchResultsElement.innerHTML = ''; - searchResultsElement.append(panelElement); - }); - } - cityssm.openHtmlModal('lotOccupancy-addOccupant', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#lotOccupancyOccupantAdd--lotOccupancyId').value = lotOccupancyId; - const lotOccupantTypeSelectElement = modalElement.querySelector('#lotOccupancyOccupantAdd--lotOccupantTypeId'); - const lotOccupantTypeCopySelectElement = modalElement.querySelector('#lotOccupancyOccupantCopy--lotOccupantTypeId'); - for (const lotOccupantType of exports.lotOccupantTypes) { - const optionElement = document.createElement('option'); - optionElement.value = lotOccupantType.lotOccupantTypeId.toString(); - optionElement.textContent = lotOccupantType.lotOccupantType; - optionElement.dataset.occupantCommentTitle = - lotOccupantType.occupantCommentTitle; - optionElement.dataset.fontAwesomeIconClass = - lotOccupantType.fontAwesomeIconClass; - lotOccupantTypeSelectElement.append(optionElement); - lotOccupantTypeCopySelectElement.append(optionElement.cloneNode(true)); - } - ; - modalElement.querySelector('#lotOccupancyOccupantAdd--occupantCity').value = exports.occupantCityDefault; - modalElement.querySelector('#lotOccupancyOccupantAdd--occupantProvince').value = exports.occupantProvinceDefault; - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - bulmaJS.init(modalElement); - const lotOccupantTypeIdElement = modalElement.querySelector('#lotOccupancyOccupantAdd--lotOccupantTypeId'); - lotOccupantTypeIdElement.focus(); - lotOccupantTypeIdElement.addEventListener('change', () => { - const fontAwesomeIconClass = lotOccupantTypeIdElement.selectedOptions[0].dataset - .fontAwesomeIconClass ?? 'user'; - modalElement.querySelector('#lotOccupancyOccupantAdd--fontAwesomeIconClass').innerHTML = - ``; - let occupantCommentTitle = lotOccupantTypeIdElement.selectedOptions[0].dataset - .occupantCommentTitle ?? ''; - if (occupantCommentTitle === '') { - occupantCommentTitle = 'Comment'; - } - ; - modalElement.querySelector('#lotOccupancyOccupantAdd--occupantCommentTitle').textContent = occupantCommentTitle; - }); - addFormElement = modalElement.querySelector('#form--lotOccupancyOccupantAdd'); - addFormElement.addEventListener('submit', addOccupantFromForm); - searchResultsElement = modalElement.querySelector('#lotOccupancyOccupantCopy--searchResults'); - searchFormElement = modalElement.querySelector('#form--lotOccupancyOccupantCopy'); - searchFormElement.addEventListener('submit', (formEvent) => { - formEvent.preventDefault(); - }); - modalElement.querySelector('#lotOccupancyOccupantCopy--searchFilter').addEventListener('change', searchOccupants); - addCloseModalFunction = closeModalFunction; - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - document.querySelector('#button--addOccupant').focus(); - } - }); - }); - })(); - if (!isCreate) { - /** - * Comments - */ - ; - (() => { - let lotOccupancyComments = exports.lotOccupancyComments; - delete exports.lotOccupancyComments; - function openEditLotOccupancyComment(clickEvent) { - const lotOccupancyCommentId = Number.parseInt(clickEvent.currentTarget.closest('tr')?.dataset - .lotOccupancyCommentId ?? '', 10); - const lotOccupancyComment = lotOccupancyComments.find((currentLotOccupancyComment) => { - return (currentLotOccupancyComment.lotOccupancyCommentId === - lotOccupancyCommentId); - }); - let editFormElement; - let editCloseModalFunction; - function editComment(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doUpdateLotOccupancyComment`, editFormElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyComments = responseJSON.lotOccupancyComments ?? []; - editCloseModalFunction(); - renderLotOccupancyComments(); - } - else { - bulmaJS.alert({ - title: 'Error Updating Comment', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('lotOccupancy-editComment', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#lotOccupancyCommentEdit--lotOccupancyId').value = lotOccupancyId; - modalElement.querySelector('#lotOccupancyCommentEdit--lotOccupancyCommentId').value = lotOccupancyCommentId.toString(); - modalElement.querySelector('#lotOccupancyCommentEdit--lotOccupancyComment').value = lotOccupancyComment.lotOccupancyComment ?? ''; - const lotOccupancyCommentDateStringElement = modalElement.querySelector('#lotOccupancyCommentEdit--lotOccupancyCommentDateString'); - lotOccupancyCommentDateStringElement.value = - lotOccupancyComment.lotOccupancyCommentDateString ?? ''; - const currentDateString = cityssm.dateToString(new Date()); - lotOccupancyCommentDateStringElement.max = - lotOccupancyComment.lotOccupancyCommentDateString <= - currentDateString - ? currentDateString - : lotOccupancyComment.lotOccupancyCommentDateString ?? ''; - modalElement.querySelector('#lotOccupancyCommentEdit--lotOccupancyCommentTimeString').value = lotOccupancyComment.lotOccupancyCommentTimeString ?? ''; - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - los.initializeDatePickers(modalElement); - modalElement.querySelector('#lotOccupancyCommentEdit--lotOccupancyComment').focus(); - editFormElement = modalElement.querySelector('form'); - editFormElement.addEventListener('submit', editComment); - editCloseModalFunction = closeModalFunction; - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function deleteLotOccupancyComment(clickEvent) { - const lotOccupancyCommentId = Number.parseInt(clickEvent.currentTarget.closest('tr')?.dataset - .lotOccupancyCommentId ?? '', 10); - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doDeleteLotOccupancyComment`, { - lotOccupancyId, - lotOccupancyCommentId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyComments = responseJSON.lotOccupancyComments; - renderLotOccupancyComments(); - } - else { - bulmaJS.alert({ - title: 'Error Removing Comment', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: 'Remove Comment?', - message: 'Are you sure you want to remove this comment?', - okButton: { - text: 'Yes, Remove Comment', - callbackFunction: doDelete - }, - contextualColorName: 'warning' - }); - } - function renderLotOccupancyComments() { - const containerElement = document.querySelector('#container--lotOccupancyComments'); - if (lotOccupancyComments.length === 0) { - containerElement.innerHTML = `
    -

    There are no comments associated with this record.

    -
    `; - return; - } - const tableElement = document.createElement('table'); - tableElement.className = 'table is-fullwidth is-striped is-hoverable'; - tableElement.innerHTML = ` - - - - - - `; - for (const lotOccupancyComment of lotOccupancyComments) { - const tableRowElement = document.createElement('tr'); - tableRowElement.dataset.lotOccupancyCommentId = - lotOccupancyComment.lotOccupancyCommentId?.toString(); - tableRowElement.innerHTML = ` - - - `; - tableRowElement - .querySelector('.button--edit') - ?.addEventListener('click', openEditLotOccupancyComment); - tableRowElement - .querySelector('.button--delete') - ?.addEventListener('click', deleteLotOccupancyComment); - tableElement.querySelector('tbody')?.append(tableRowElement); - } - containerElement.innerHTML = ''; - containerElement.append(tableElement); - } - document - .querySelector('#button--addComment') - ?.addEventListener('click', () => { - let addFormElement; - let addCloseModalFunction; - function addComment(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doAddLotOccupancyComment`, addFormElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyComments = responseJSON.lotOccupancyComments; - addCloseModalFunction(); - renderLotOccupancyComments(); - } - else { - bulmaJS.alert({ - title: 'Error Adding Comment', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('lotOccupancy-addComment', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#lotOccupancyCommentAdd--lotOccupancyId').value = lotOccupancyId; - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - modalElement.querySelector('#lotOccupancyCommentAdd--lotOccupancyComment').focus(); - addFormElement = modalElement.querySelector('form'); - addFormElement.addEventListener('submit', addComment); - addCloseModalFunction = closeModalFunction; - }, - onremoved: () => { - bulmaJS.toggleHtmlClipped(); - document.querySelector('#button--addComment').focus(); - } - }); - }); - renderLotOccupancyComments(); - })(); - (() => { - let lotOccupancyFees = exports.lotOccupancyFees; - delete exports.lotOccupancyFees; - const lotOccupancyFeesContainerElement = document.querySelector('#container--lotOccupancyFees'); - function getFeeGrandTotal() { - let feeGrandTotal = 0; - for (const lotOccupancyFee of lotOccupancyFees) { - feeGrandTotal += - ((lotOccupancyFee.feeAmount ?? 0) + - (lotOccupancyFee.taxAmount ?? 0)) * - (lotOccupancyFee.quantity ?? 0); - } - return feeGrandTotal; - } - function editLotOccupancyFeeQuantity(clickEvent) { - const feeId = Number.parseInt(clickEvent.currentTarget.closest('tr')?.dataset - .feeId ?? '', 10); - const fee = lotOccupancyFees.find((possibleFee) => { - return possibleFee.feeId === feeId; - }); - let updateCloseModalFunction; - function doUpdateQuantity(formEvent) { - formEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doUpdateLotOccupancyFeeQuantity`, formEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyFees = responseJSON.lotOccupancyFees; - renderLotOccupancyFees(); - updateCloseModalFunction(); - } - else { - bulmaJS.alert({ - title: 'Error Updating Quantity', - message: 'Please try again.', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('lotOccupancy-editFeeQuantity', { - onshow(modalElement) { - ; - modalElement.querySelector('#lotOccupancyFeeQuantity--lotOccupancyId').value = lotOccupancyId; - modalElement.querySelector('#lotOccupancyFeeQuantity--feeId').value = fee.feeId.toString(); - modalElement.querySelector('#lotOccupancyFeeQuantity--quantity').valueAsNumber = fee.quantity ?? 0; - modalElement.querySelector('#lotOccupancyFeeQuantity--quantityUnit').textContent = fee.quantityUnit ?? ''; - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - updateCloseModalFunction = closeModalFunction; - modalElement.querySelector('#lotOccupancyFeeQuantity--quantity').focus(); - modalElement - .querySelector('form') - ?.addEventListener('submit', doUpdateQuantity); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function deleteLotOccupancyFee(clickEvent) { - const feeId = clickEvent.currentTarget.closest('.container--lotOccupancyFee').dataset.feeId; - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doDeleteLotOccupancyFee`, { - lotOccupancyId, - feeId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - lotOccupancyFees = responseJSON.lotOccupancyFees; - renderLotOccupancyFees(); - } - else { - bulmaJS.alert({ - title: 'Error Deleting Fee', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: 'Delete Fee', - message: 'Are you sure you want to delete this fee?', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete Fee', - callbackFunction: doDelete - } - }); - } - function renderLotOccupancyFees() { - if (lotOccupancyFees.length === 0) { - lotOccupancyFeesContainerElement.innerHTML = `
    -

    There are no fees associated with this record.

    -
    `; - renderLotOccupancyTransactions(); - return; - } - // eslint-disable-next-line no-secrets/no-secrets - lotOccupancyFeesContainerElement.innerHTML = `
    - ${escapeHTML(getConfigProperty('aliases.lot'))} - - ${escapeHTML(getConfigProperty('aliases.map'))} - - ${escapeHTML(getConfigProperty('aliases.lot'))} Type - Burial SiteCemeteryBurial Site Type Status
    - - ${escapeHTML(lot.lotName ?? '')} + + ${escapeHTML(burialSite.burialSiteName ?? '')} ${escapeHTML(lot.cemeteryName ?? '')}${escapeHTML(lot.lotType ?? '')}${escapeHTML(lot.lotStatus ?? '')}${escapeHTML(burialSite.cemeteryName ?? '')}${escapeHTML(burialSite.burialSiteType ?? '')}${escapeHTML(burialSite.burialSiteStatus ?? '')}
    -

    There are no active work order types.

    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    - ${los.getMoveUpDownButtonFieldHTML('button--moveWorkOrderTypeUp', 'button--moveWorkOrderTypeDown', false)} -
    -
    - -
    -
    -
    -
    -

    There are no active work order milestone types.

    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    - ${los.getMoveUpDownButtonFieldHTML('button--moveWorkOrderMilestoneTypeUp', 'button--moveWorkOrderMilestoneTypeDown', false)} -
    -
    - -
    -
    -
    -
    -

    There are no active ${los.escapedAliases.lot} statuses.

    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    - ${los.getMoveUpDownButtonFieldHTML('button--moveLotStatusUp', 'button--moveLotStatusDown', false)} -
    -
    - -
    -
    -
    -
    -

    There are no active ${los.escapedAliases.lot} ${los.escapedAliases.occupant} types.

    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - fa- -
    -
    - -
    -
    - - - -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - -
    -
    -
    -
    - ${los.getMoveUpDownButtonFieldHTML('button--moveLotOccupantTypeUp', 'button--moveLotOccupantTypeDown', false)} -
    -
    - -
    -
    -
    CommentorComment DateCommentOptions
    - ${cityssm.escapeHTML(lotComment.recordCreate_userName ?? '')} - - ${lotComment.lotCommentDateString} - ${lotComment.lotCommentTime === 0 - ? '' - : ` ${lotComment.lotCommentTimePeriodString}`} - - ${cityssm.escapeHTML(lotComment.lotComment ?? '')} - -
    - - -
    -
    ${los.escapedAliases.Occupant}AddressOther ContactCommentOptions
    - ${cityssm.escapeHTML((lotOccupancyOccupant.occupantName ?? '') === '' && - (lotOccupancyOccupant.occupantFamilyName ?? '') === '' - ? '(No Name)' - : `${lotOccupancyOccupant.occupantName} ${lotOccupancyOccupant.occupantFamilyName}`)}
    - - - ${cityssm.escapeHTML(lotOccupancyOccupant.lotOccupantType ?? '')} - -
    - ${(lotOccupancyOccupant.occupantAddress1 ?? '') === '' - ? '' - : `${cityssm.escapeHTML(lotOccupancyOccupant.occupantAddress1 ?? '')}
    `} - ${(lotOccupancyOccupant.occupantAddress2 ?? '') === '' - ? '' - : `${cityssm.escapeHTML(lotOccupancyOccupant.occupantAddress2 ?? '')}
    `} - ${(lotOccupancyOccupant.occupantCity ?? '') === '' - ? '' - : `${cityssm.escapeHTML(lotOccupancyOccupant.occupantCity ?? '')}, `} - ${cityssm.escapeHTML(lotOccupancyOccupant.occupantProvince ?? '')}
    - ${cityssm.escapeHTML(lotOccupancyOccupant.occupantPostalCode ?? '')} -
    - ${(lotOccupancyOccupant.occupantPhoneNumber ?? '') === '' - ? '' - : `${cityssm.escapeHTML(lotOccupancyOccupant.occupantPhoneNumber ?? '')}
    `} - ${(lotOccupancyOccupant.occupantEmailAddress ?? '') === '' - ? '' - : cityssm.escapeHTML(lotOccupancyOccupant.occupantEmailAddress ?? '')} -
    - - ${cityssm.escapeHTML(lotOccupancyOccupant.occupantComment ?? '')} - - -
    - - -
    -
    CommentorComment DateCommentOptions
    ${cityssm.escapeHTML(lotOccupancyComment.recordCreate_userName ?? '')} - ${cityssm.escapeHTML(lotOccupancyComment.lotOccupancyCommentDateString ?? '')} - ${cityssm.escapeHTML(lotOccupancyComment.lotOccupancyCommentTime === 0 - ? '' - : lotOccupancyComment.lotOccupancyCommentTimePeriodString ?? '')} - ${cityssm.escapeHTML(lotOccupancyComment.lotOccupancyComment ?? '')} -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - -
    FeeUnit Cost×QuantityequalsTotalOptions
    Subtotal
    Tax
    Grand Total
    `; - let feeAmountTotal = 0; - let taxAmountTotal = 0; - for (const lotOccupancyFee of lotOccupancyFees) { - const tableRowElement = document.createElement('tr'); - tableRowElement.className = 'container--lotOccupancyFee'; - tableRowElement.dataset.feeId = lotOccupancyFee.feeId.toString(); - tableRowElement.dataset.includeQuantity = - lotOccupancyFee.includeQuantity ?? false ? '1' : '0'; - // eslint-disable-next-line no-unsanitized/property - tableRowElement.innerHTML = `
    - ${cityssm.escapeHTML(lotOccupancyFee.feeName ?? '')}
    - ${cityssm.escapeHTML(lotOccupancyFee.feeCategory ?? '')} -
    - $${lotOccupancyFee.feeAmount?.toFixed(2)} - ×${lotOccupancyFee.quantity?.toString()}= - $${((lotOccupancyFee.feeAmount ?? 0) * (lotOccupancyFee.quantity ?? 0)).toFixed(2)} - -
    - ${lotOccupancyFee.includeQuantity ?? false - ? `` - : ''} - -
    -
    - - - - - - - - - - - - -
    Date${los.escapedAliases.ExternalReceiptNumber}AmountOptions
    Transaction Total
    `; - let transactionGrandTotal = 0; - for (const lotOccupancyTransaction of lotOccupancyTransactions) { - transactionGrandTotal += lotOccupancyTransaction.transactionAmount; - const tableRowElement = document.createElement('tr'); - tableRowElement.className = 'container--lotOccupancyTransaction'; - tableRowElement.dataset.transactionIndex = - lotOccupancyTransaction.transactionIndex?.toString(); - let externalReceiptNumberHTML = ''; - if (lotOccupancyTransaction.externalReceiptNumber !== '') { - externalReceiptNumberHTML = cityssm.escapeHTML(lotOccupancyTransaction.externalReceiptNumber ?? ''); - if (los.dynamicsGPIntegrationIsEnabled) { - if (lotOccupancyTransaction.dynamicsGPDocument === undefined) { - externalReceiptNumberHTML += ` - - `; - } - else if (lotOccupancyTransaction.dynamicsGPDocument.documentTotal.toFixed(2) === lotOccupancyTransaction.transactionAmount.toFixed(2)) { - externalReceiptNumberHTML += ` - - `; - } - else { - externalReceiptNumberHTML += ` - - `; - } - } - externalReceiptNumberHTML += '
    '; - } - // eslint-disable-next-line no-unsanitized/property - tableRowElement.innerHTML = `
    - ${cityssm.escapeHTML(lotOccupancyTransaction.transactionDateString ?? '')} - - ${externalReceiptNumberHTML} - ${cityssm.escapeHTML(lotOccupancyTransaction.transactionNote ?? '')} - - $${cityssm.escapeHTML(lotOccupancyTransaction.transactionAmount.toFixed(2))} - -
    - - -
    -
    - ${occupancyTimeHTML} - - - ${cityssm.escapeHTML(lotOccupancy.occupancyType ?? '')} -
    - #${lotOccupancy.lotOccupancyId} -
    - ${(lotOccupancy.lotId ?? -1) === -1 - ? `(No ${los.escapedAliases.Lot})` - : `${cityssm.escapeHTML(lotOccupancy.lotName ?? '')}`}
    - ${cityssm.escapeHTML(lotOccupancy.mapName ?? '')} -
    - ${lotOccupancy.occupancyStartDateString} - - ${lotOccupancy.occupancyEndDate - ? lotOccupancy.occupancyEndDateString - : '(No End Date)'} - - ${occupantsHTML === '' - ? '' - : `
      ${occupantsHTML}
    `} -
    - ${feeIconHTML} - - ${lotOccupancy.printEJS - ? ` - - ` - : ''}
    - - - - - - - - - - -
    ${los.escapedAliases.Occupancy} Type${los.escapedAliases.Lot}${los.escapedAliases.OccupancyStartDate}End Date${los.escapedAliases.Occupants}Fees and TransactionsPrint
    `; - searchResultsContainerElement - .querySelector('table') - ?.append(resultsTbodyElement); - // eslint-disable-next-line no-unsanitized/method - searchResultsContainerElement.insertAdjacentHTML('beforeend', los.getSearchResultsPagerHTML(limit, responseJSON.offset, responseJSON.count)); - searchResultsContainerElement - .querySelector("button[data-page='previous']") - ?.addEventListener('click', previousAndGetLotOccupancies); - searchResultsContainerElement - .querySelector("button[data-page='next']") - ?.addEventListener('click', nextAndGetLotOccupancies); - } - function getLotOccupancies() { - // eslint-disable-next-line no-unsanitized/property - searchResultsContainerElement.innerHTML = los.getLoadingParagraphHTML(`Loading ${los.escapedAliases.Occupancies}...`); - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doSearchLotOccupancies`, searchFilterFormElement, renderLotOccupancies); - } - function resetOffsetAndGetLotOccupancies() { - offsetElement.value = '0'; - getLotOccupancies(); - } - function previousAndGetLotOccupancies() { - offsetElement.value = Math.max(Number.parseInt(offsetElement.value, 10) - limit, 0).toString(); - getLotOccupancies(); - } - function nextAndGetLotOccupancies() { - offsetElement.value = (Number.parseInt(offsetElement.value, 10) + limit).toString(); - getLotOccupancies(); - } - const filterElements = searchFilterFormElement.querySelectorAll('input, select'); - for (const filterElement of filterElements) { - filterElement.addEventListener('change', resetOffsetAndGetLotOccupancies); - } - searchFilterFormElement.addEventListener('submit', (formEvent) => { - formEvent.preventDefault(); - }); - getLotOccupancies(); -})(); diff --git a/public/javascripts/lotSearch.d.ts b/public/javascripts/lotSearch.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/lotSearch.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/lotView.d.ts b/public/javascripts/lotView.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/lotView.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/lotView.js b/public/javascripts/lotView.js deleted file mode 100644 index b5a2727d..00000000 --- a/public/javascripts/lotView.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const mapContainerElement = document.querySelector('#lot--map'); - if (mapContainerElement !== null) { - ; - exports.los.highlightMap(mapContainerElement, mapContainerElement.dataset.mapKey ?? '', 'success'); - } -})(); diff --git a/public/javascripts/mapEdit.d.ts b/public/javascripts/mapEdit.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/mapEdit.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/mapEdit.js b/public/javascripts/mapEdit.js deleted file mode 100644 index bddcb4fa..00000000 --- a/public/javascripts/mapEdit.js +++ /dev/null @@ -1,82 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - const mapId = document.querySelector('#map--mapId') - .value; - const isCreate = mapId === ''; - const mapForm = document.querySelector('#form--map'); - function setUnsavedChanges() { - los.setUnsavedChanges(); - document - .querySelector("button[type='submit'][form='form--map']") - ?.classList.remove('is-light'); - } - function clearUnsavedChanges() { - los.clearUnsavedChanges(); - document - .querySelector("button[type='submit'][form='form--map']") - ?.classList.add('is-light'); - } - function updateMap(formEvent) { - formEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/maps/${isCreate ? 'doCreateMap' : 'doUpdateMap'}`, mapForm, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - clearUnsavedChanges(); - if (isCreate) { - globalThis.location.href = los.getMapURL(responseJSON.mapId, true); - } - else { - bulmaJS.alert({ - message: `${los.escapedAliases.Map} Updated Successfully`, - contextualColorName: 'success' - }); - } - } - else { - bulmaJS.alert({ - title: `Error Updating ${los.escapedAliases.Map}`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - mapForm.addEventListener('submit', updateMap); - const inputElements = mapForm.querySelectorAll('input, select'); - for (const inputElement of inputElements) { - inputElement.addEventListener('change', setUnsavedChanges); - } - document - .querySelector('#button--deleteMap') - ?.addEventListener('click', (clickEvent) => { - clickEvent.preventDefault(); - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/maps/doDeleteMap`, { - mapId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - globalThis.location.href = los.getMapURL(); - } - else { - bulmaJS.alert({ - title: `Error Deleting ${los.escapedAliases.Map}`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: `Delete ${los.escapedAliases.Map}`, - message: `Are you sure you want to delete this ${los.escapedAliases.map} and all related ${los.escapedAliases.lots}?`, - contextualColorName: 'warning', - okButton: { - text: `Yes, Delete ${los.escapedAliases.Map}`, - callbackFunction: doDelete - } - }); - }); -})(); diff --git a/public/javascripts/mapSearch.d.ts b/public/javascripts/mapSearch.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/mapSearch.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/mapSearch.js b/public/javascripts/mapSearch.js deleted file mode 100644 index 30ddf3f9..00000000 --- a/public/javascripts/mapSearch.js +++ /dev/null @@ -1,101 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - const maps = exports.maps; - const searchFilterElement = document.querySelector('#searchFilter--map'); - const searchResultsContainerElement = document.querySelector('#container--searchResults'); - function renderResults() { - // eslint-disable-next-line no-unsanitized/property - searchResultsContainerElement.innerHTML = los.getLoadingParagraphHTML(`Loading ${los.escapedAliases.Maps}...`); - let searchResultCount = 0; - const searchResultsTbodyElement = document.createElement('tbody'); - const filterStringSplit = searchFilterElement.value - .trim() - .toLowerCase() - .split(' '); - for (const map of maps) { - const mapSearchString = `${map.mapName ?? ''} ${map.mapDescription ?? ''} ${map.mapAddress1 ?? ''} ${map.mapAddress2 ?? ''}`.toLowerCase(); - let showMap = true; - for (const filterStringPiece of filterStringSplit) { - if (!mapSearchString.includes(filterStringPiece)) { - showMap = false; - break; - } - } - if (!showMap) { - continue; - } - searchResultCount += 1; - // eslint-disable-next-line no-unsanitized/method - searchResultsTbodyElement.insertAdjacentHTML('beforeend', ` - - `); - } - searchResultsContainerElement.innerHTML = ''; - if (searchResultCount === 0) { - // eslint-disable-next-line no-unsanitized/property - searchResultsContainerElement.innerHTML = `
    -

    There are no ${los.escapedAliases.maps} that meet the search criteria.

    -
    `; - } - else { - const searchResultsTableElement = document.createElement('table'); - searchResultsTableElement.className = - 'table is-fullwidth is-striped is-hoverable has-sticky-header'; - // eslint-disable-next-line no-unsanitized/property - searchResultsTableElement.innerHTML = ` - - - - - - - `; - searchResultsTableElement.append(searchResultsTbodyElement); - searchResultsContainerElement.append(searchResultsTableElement); - } - } - searchFilterElement.addEventListener('keyup', renderResults); - document - .querySelector('#form--searchFilters') - ?.addEventListener('submit', (formEvent) => { - formEvent.preventDefault(); - renderResults(); - }); - renderResults(); -})(); diff --git a/public/javascripts/mapView.d.ts b/public/javascripts/mapView.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/mapView.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/mapView.js b/public/javascripts/mapView.js deleted file mode 100644 index b58e5b8c..00000000 --- a/public/javascripts/mapView.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair -/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call */ -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const mapContainerElement = document.querySelector('#map--leaflet'); - if (mapContainerElement !== null) { - const mapLatitude = Number.parseFloat(mapContainerElement.dataset.mapLatitude ?? ''); - const mapLongitude = Number.parseFloat(mapContainerElement.dataset.mapLongitude ?? ''); - const mapCoordinates = [mapLatitude, mapLongitude]; - // eslint-disable-next-line unicorn/no-array-callback-reference - const map = L.map(mapContainerElement); - map.setView(mapCoordinates, 15); - L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { - maxZoom: 19, - attribution: '© OpenStreetMap' - }).addTo(map); - L.marker(mapCoordinates).addTo(map); - } -})(); diff --git a/public/javascripts/reportSearch.ts b/public/javascripts/report.search.ts similarity index 100% rename from public/javascripts/reportSearch.ts rename to public/javascripts/report.search.ts diff --git a/public/javascripts/reportSearch.d.ts b/public/javascripts/reportSearch.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/public/javascripts/reportSearch.js b/public/javascripts/reportSearch.js deleted file mode 100644 index ba0bae8e..00000000 --- a/public/javascripts/reportSearch.js +++ /dev/null @@ -1,28 +0,0 @@ -; -(() => { - const menuTabElements = document.querySelectorAll('.menu a'); - const tabContainerElements = document.querySelectorAll('.tabs-container > div'); - function selectTab(clickEvent) { - clickEvent.preventDefault(); - // Remove .is-active from all tabs - for (const menuTabElement of menuTabElements) { - menuTabElement.classList.remove('is-active'); - } - // Set .is-active on clicked tab - const selectedTabElement = clickEvent.currentTarget; - selectedTabElement.classList.add('is-active'); - // Hide all but selected tab - const selectedTabContainerId = selectedTabElement.href.slice(Math.max(0, selectedTabElement.href.indexOf('#') + 1)); - for (const tabContainerElement of tabContainerElements) { - if (tabContainerElement.id === selectedTabContainerId) { - tabContainerElement.classList.remove('is-hidden'); - } - else { - tabContainerElement.classList.add('is-hidden'); - } - } - } - for (const menuTabElement of menuTabElements) { - menuTabElement.addEventListener('click', selectTab); - } -})(); diff --git a/public/javascripts/adminTables.ts b/public/javascripts/tables.admin.ts similarity index 98% rename from public/javascripts/adminTables.ts rename to public/javascripts/tables.admin.ts index 4b81a2c6..c9d9604c 100644 --- a/public/javascripts/adminTables.ts +++ b/public/javascripts/tables.admin.ts @@ -530,11 +530,11 @@ declare const bulmaJS: BulmaJS errorMessage: string } - function updateLotStatus(submitEvent: SubmitEvent): void { + function updateBurialSiteStatus(submitEvent: SubmitEvent): void { submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/admin/doUpdateLotStatus`, + `${los.urlPrefix}/admin/doUpdateBurialSiteStatus`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON @@ -566,7 +566,7 @@ declare const bulmaJS: BulmaJS function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/admin/doDeleteLotStatus`, + `${los.urlPrefix}/admin/doDeleteBurialSiteStatus`, { burialSiteStatusId }, @@ -620,8 +620,8 @@ declare const bulmaJS: BulmaJS cityssm.postJSON( `${los.urlPrefix}/admin/${ buttonElement.dataset.direction === 'up' - ? 'doMoveLotStatusUp' - : 'doMoveLotStatusDown' + ? 'doMoveBurialSiteStatusUp' + : 'doMoveBurialSiteStatusDown' }`, { burialSiteStatusId, @@ -703,7 +703,7 @@ declare const bulmaJS: BulmaJS tableRowElement .querySelector('form') - ?.addEventListener('submit', updateLotStatus) + ?.addEventListener('submit', updateBurialSiteStatus) ;( tableRowElement.querySelector( '.button--moveLotStatusUp' @@ -730,7 +730,7 @@ declare const bulmaJS: BulmaJS const formElement = submitEvent.currentTarget as HTMLFormElement cityssm.postJSON( - `${los.urlPrefix}/admin/doAddLotStatus`, + `${los.urlPrefix}/admin/doAddBurialSiteStatus`, formElement, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON @@ -771,11 +771,11 @@ declare const bulmaJS: BulmaJS errorMessage: string } - function updateLotOccupantType(submitEvent: SubmitEvent): void { + function updateBurialSiteOccupantType(submitEvent: SubmitEvent): void { submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/admin/doUpdateLotOccupantType`, + `${los.urlPrefix}/admin/doUpdateBurialSiteOccupantType`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as ResponseJSON @@ -807,7 +807,7 @@ declare const bulmaJS: BulmaJS function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/admin/doDeleteLotOccupantType`, + `${los.urlPrefix}/admin/doDeleteBurialSiteOccupantType`, { lotOccupantTypeId }, @@ -990,7 +990,7 @@ declare const bulmaJS: BulmaJS tableRowElement .querySelector('form') - ?.addEventListener('submit', updateLotOccupantType) + ?.addEventListener('submit', updateBurialSiteOccupantType) ;( tableRowElement.querySelector( '.button--moveLotOccupantTypeUp' diff --git a/public/javascripts/workOrderEdit.ts b/public/javascripts/workOrder.edit.ts similarity index 98% rename from public/javascripts/workOrderEdit.ts rename to public/javascripts/workOrder.edit.ts index 80b63cb3..f6141e42 100644 --- a/public/javascripts/workOrderEdit.ts +++ b/public/javascripts/workOrder.edit.ts @@ -220,9 +220,9 @@ declare const exports: Record let workOrderLots = exports.workOrderLots as Lot[] delete exports.workOrderLots - let workOrderLotOccupancies = - exports.workOrderLotOccupancies as LotOccupancy[] - delete exports.workOrderLotOccupancies + let workOrderBurialSiteContracts = + exports.workOrderBurialSiteContracts as LotOccupancy[] + delete exports.workOrderBurialSiteContracts function deleteLotOccupancy(clickEvent: Event): void { const burialSiteContractId = ( @@ -233,7 +233,7 @@ declare const exports: Record function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/workOrders/doDeleteWorkOrderLotOccupancy`, + `${los.urlPrefix}/workOrders/doDeleteWorkOrderBurialSiteContract`, { workOrderId, burialSiteContractId @@ -242,11 +242,11 @@ declare const exports: Record const responseJSON = rawResponseJSON as { success: boolean errorMessage?: string - workOrderLotOccupancies: LotOccupancy[] + workOrderBurialSiteContracts: LotOccupancy[] } if (responseJSON.success) { - workOrderLotOccupancies = responseJSON.workOrderLotOccupancies + workOrderBurialSiteContracts = responseJSON.workOrderBurialSiteContracts renderRelatedLotsAndOccupancies() } else { bulmaJS.alert({ @@ -275,7 +275,7 @@ declare const exports: Record callbackFunction?: (success: boolean) => void ): void { cityssm.postJSON( - `${los.urlPrefix}/workOrders/doAddWorkOrderLot`, + `${los.urlPrefix}/workOrders/doAddWorkOrderBurialSite`, { workOrderId, lotId @@ -310,7 +310,7 @@ declare const exports: Record callbackFunction?: (success?: boolean) => void ): void { cityssm.postJSON( - `${los.urlPrefix}/workOrders/doAddWorkOrderLotOccupancy`, + `${los.urlPrefix}/workOrders/doAddWorkOrderBurialSiteContract`, { workOrderId, burialSiteContractId @@ -319,11 +319,11 @@ declare const exports: Record const responseJSON = rawResponseJSON as { success: boolean errorMessage?: string - workOrderLotOccupancies: LotOccupancy[] + workOrderBurialSiteContracts: LotOccupancy[] } if (responseJSON.success) { - workOrderLotOccupancies = responseJSON.workOrderLotOccupancies + workOrderBurialSiteContracts = responseJSON.workOrderBurialSiteContracts renderRelatedLotsAndOccupancies() } else { bulmaJS.alert({ @@ -355,9 +355,9 @@ declare const exports: Record document.querySelector( ".tabs a[href='#relatedTab--lotOccupancies'] .tag" ) as HTMLElement - ).textContent = workOrderLotOccupancies.length.toString() + ).textContent = workOrderBurialSiteContracts.length.toString() - if (workOrderLotOccupancies.length === 0) { + if (workOrderBurialSiteContracts.length === 0) { // eslint-disable-next-line no-unsanitized/property occupanciesContainerElement.innerHTML = `

    There are no ${los.escapedAliases.occupancies} associated with this work order.

    @@ -382,7 +382,7 @@ declare const exports: Record const currentDateString = cityssm.dateToString(new Date()) - for (const burialSiteContract of workOrderLotOccupancies) { + for (const burialSiteContract of workOrderBurialSiteContracts) { const rowElement = document.createElement('tr') rowElement.className = 'container--burialSiteContract' rowElement.dataset.burialSiteContractId = @@ -506,11 +506,11 @@ declare const exports: Record let editCloseModalFunction: () => void - function doUpdateLotStatus(submitEvent: SubmitEvent): void { + function doUpdateBurialSiteStatus(submitEvent: SubmitEvent): void { submitEvent.preventDefault() cityssm.postJSON( - `${los.urlPrefix}/workOrders/doUpdateLotStatus`, + `${los.urlPrefix}/workOrders/doUpdateBurialSiteStatus`, submitEvent.currentTarget, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { @@ -592,7 +592,7 @@ declare const exports: Record modalElement .querySelector('form') - ?.addEventListener('submit', doUpdateLotStatus) + ?.addEventListener('submit', doUpdateBurialSiteStatus) }, onremoved() { bulmaJS.toggleHtmlClipped() @@ -609,7 +609,7 @@ declare const exports: Record function doDelete(): void { cityssm.postJSON( - `${los.urlPrefix}/workOrders/doDeleteWorkOrderLot`, + `${los.urlPrefix}/workOrders/doDeleteWorkOrderBurialSite`, { workOrderId, lotId @@ -946,7 +946,7 @@ declare const exports: Record los.getLoadingParagraphHTML('Searching...') cityssm.postJSON( - `${los.urlPrefix}/lots/doSearchLots`, + `${los.urlPrefix}/lots/doSearchBurialSites`, searchFormElement, (rawResponseJSON) => { const responseJSON = rawResponseJSON as { lots: Lot[] } diff --git a/public/javascripts/workOrderMilestoneCalendar.ts b/public/javascripts/workOrder.milestoneCalendar.ts similarity index 98% rename from public/javascripts/workOrderMilestoneCalendar.ts rename to public/javascripts/workOrder.milestoneCalendar.ts index 32ea76cf..16ea02b2 100644 --- a/public/javascripts/workOrderMilestoneCalendar.ts +++ b/public/javascripts/workOrder.milestoneCalendar.ts @@ -90,7 +90,7 @@ declare const exports: Record ` } - for (const burialSiteContract of milestone.workOrderLotOccupancies ?? []) { + for (const burialSiteContract of milestone.workOrderBurialSiteContracts ?? []) { for (const occupant of burialSiteContract.burialSiteContractOccupants ?? []) { burialSiteContractHTML += `
  • { - const los = exports.los; - const workOrderId = document.querySelector('#workOrderEdit--workOrderId').value; - const isCreate = workOrderId === ''; - const workOrderFormElement = document.querySelector('#form--workOrderEdit'); - los.initializeDatePickers(workOrderFormElement - .querySelector('#workOrderEdit--workOrderOpenDateString') - ?.closest('.field')); - los.initializeUnlockFieldButtons(workOrderFormElement); - function setUnsavedChanges() { - los.setUnsavedChanges(); - document - .querySelector("button[type='submit'][form='form--workOrderEdit']") - ?.classList.remove('is-light'); - } - function clearUnsavedChanges() { - los.clearUnsavedChanges(); - document - .querySelector("button[type='submit'][form='form--workOrderEdit']") - ?.classList.add('is-light'); - } - workOrderFormElement.addEventListener('submit', (submitEvent) => { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/workOrders/${isCreate ? 'doCreateWorkOrder' : 'doUpdateWorkOrder'}`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - clearUnsavedChanges(); - if (isCreate) { - globalThis.location.href = los.getWorkOrderURL(responseJSON.workOrderId, true); - } - else { - bulmaJS.alert({ - message: 'Work Order Updated Successfully', - contextualColorName: 'success' - }); - } - } - else { - bulmaJS.alert({ - title: 'Error Updating Work Order', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - }); - const inputElements = workOrderFormElement.querySelectorAll('input, select, textarea'); - for (const inputElement of inputElements) { - inputElement.addEventListener('change', setUnsavedChanges); - } - /* - * Work Order Options - */ - function doClose() { - cityssm.postJSON(`${los.urlPrefix}/workOrders/doCloseWorkOrder`, { - workOrderId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - clearUnsavedChanges(); - globalThis.location.href = los.getWorkOrderURL(workOrderId); - } - else { - bulmaJS.alert({ - title: 'Error Closing Work Order', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/workOrders/doDeleteWorkOrder`, { - workOrderId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - clearUnsavedChanges(); - globalThis.location.href = `${los.urlPrefix}/workOrders`; - } - else { - bulmaJS.alert({ - title: 'Error Deleting Work Order', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - let workOrderMilestones; - document - .querySelector('#button--closeWorkOrder') - ?.addEventListener('click', () => { - const hasOpenMilestones = workOrderMilestones.some((milestone) => !milestone.workOrderMilestoneCompletionDate); - if (hasOpenMilestones) { - bulmaJS.alert({ - title: 'Outstanding Milestones', - message: `You cannot close a work order with outstanding milestones. - Either complete the outstanding milestones, or remove them from the work order.`, - contextualColorName: 'warning' - }); - /* - // Disable closing work orders with open milestones - bulmaJS.confirm({ - title: "Close Work Order with Outstanding Milestones", - message: - "Are you sure you want to close this work order with outstanding milestones?", - contextualColorName: "danger", - okButton: { - text: "Yes, Close Work Order", - callbackFunction: doClose - } - }); - */ - } - else { - bulmaJS.confirm({ - title: 'Close Work Order', - message: los.hasUnsavedChanges() - ? 'Are you sure you want to close this work order with unsaved changes?' - : 'Are you sure you want to close this work order?', - contextualColorName: los.hasUnsavedChanges() ? 'warning' : 'info', - okButton: { - text: 'Yes, Close Work Order', - callbackFunction: doClose - } - }); - } - }); - document - .querySelector('#button--deleteWorkOrder') - ?.addEventListener('click', (clickEvent) => { - clickEvent.preventDefault(); - bulmaJS.confirm({ - title: 'Delete Work Order', - message: 'Are you sure you want to delete this work order?', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete Work Order', - callbackFunction: doDelete - } - }); - }); - /** - * Related Lots - */ - if (!isCreate) { - ; - (() => { - let workOrderLots = exports.workOrderLots; - delete exports.workOrderLots; - let workOrderLotOccupancies = exports.workOrderLotOccupancies; - delete exports.workOrderLotOccupancies; - function deleteLotOccupancy(clickEvent) { - const lotOccupancyId = clickEvent.currentTarget.closest('.container--lotOccupancy').dataset.lotOccupancyId; - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/workOrders/doDeleteWorkOrderLotOccupancy`, { - workOrderId, - lotOccupancyId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderLotOccupancies = responseJSON.workOrderLotOccupancies; - renderRelatedLotsAndOccupancies(); - } - else { - bulmaJS.alert({ - title: 'Error Deleting Relationship', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: `Delete ${los.escapedAliases.Occupancy} Relationship`, - message: `Are you sure you want to remove the relationship to this ${los.escapedAliases.occupancy} record from this work order? Note that the record will remain.`, - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete Relationship', - callbackFunction: doDelete - } - }); - } - function addLot(lotId, callbackFunction) { - cityssm.postJSON(`${los.urlPrefix}/workOrders/doAddWorkOrderLot`, { - workOrderId, - lotId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderLots = responseJSON.workOrderLots; - renderRelatedLotsAndOccupancies(); - } - else { - bulmaJS.alert({ - title: `Error Adding ${los.escapedAliases.Lot}`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - if (callbackFunction !== undefined) { - callbackFunction(responseJSON.success); - } - }); - } - function addLotOccupancy(lotOccupancyId, callbackFunction) { - cityssm.postJSON(`${los.urlPrefix}/workOrders/doAddWorkOrderLotOccupancy`, { - workOrderId, - lotOccupancyId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderLotOccupancies = responseJSON.workOrderLotOccupancies; - renderRelatedLotsAndOccupancies(); - } - else { - bulmaJS.alert({ - title: `Error Adding ${los.escapedAliases.Occupancy}`, - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - if (callbackFunction !== undefined) { - callbackFunction(responseJSON.success); - } - }); - } - function addLotFromLotOccupancy(clickEvent) { - const lotId = clickEvent.currentTarget.dataset.lotId ?? ''; - addLot(lotId); - } - function renderRelatedOccupancies() { - const occupanciesContainerElement = document.querySelector('#container--lotOccupancies'); - document.querySelector(".tabs a[href='#relatedTab--lotOccupancies'] .tag").textContent = workOrderLotOccupancies.length.toString(); - if (workOrderLotOccupancies.length === 0) { - // eslint-disable-next-line no-unsanitized/property - occupanciesContainerElement.innerHTML = `
    -

    There are no ${los.escapedAliases.occupancies} associated with this work order.

    -
    `; - return; - } - // eslint-disable-next-line no-unsanitized/property - occupanciesContainerElement.innerHTML = `
  • - - ${cityssm.escapeHTML((map.mapName ?? '') === '' ? '(No Name)' : map.mapName ?? '')} -
    - - ${cityssm.escapeHTML(map.mapDescription ?? '')} - -
    - ${(map.mapAddress1 ?? '') === '' - ? '' - : `${cityssm.escapeHTML(map.mapAddress1 ?? '')}
    `} - ${(map.mapAddress2 ?? '') === '' - ? '' - : `${cityssm.escapeHTML(map.mapAddress2 ?? '')}
    `} - ${map.mapCity || map.mapProvince - ? `${cityssm.escapeHTML(map.mapCity ?? '')}, ${cityssm.escapeHTML(map.mapProvince ?? '')}
    ` - : ''} - ${(map.mapPostalCode ?? '') === '' - ? '' - : cityssm.escapeHTML(map.mapPostalCode ?? '')} -
    - ${cityssm.escapeHTML(map.mapPhoneNumber ?? '')} - - ${map.mapLatitude && map.mapLongitude - ? ` - - ` - : ''} - - ${(map.mapSVG ?? '') === '' - ? '' - : ''} - - ${map.lotCount} -
    ${los.escapedAliases.Map}AddressPhone NumberCoordinatesImage${los.escapedAliases.Lot} Count
    - - - - - - - - - - -
    ${los.escapedAliases.Occupancy} Type${los.escapedAliases.Lot}${los.escapedAliases.OccupancyStartDate}End Date${los.escapedAliases.Occupants}
    `; - const currentDateString = cityssm.dateToString(new Date()); - for (const lotOccupancy of workOrderLotOccupancies) { - const rowElement = document.createElement('tr'); - rowElement.className = 'container--lotOccupancy'; - rowElement.dataset.lotOccupancyId = - lotOccupancy.lotOccupancyId.toString(); - const isActive = !(lotOccupancy.occupancyEndDate && - lotOccupancy.occupancyEndDateString < currentDateString); - const hasLotRecord = lotOccupancy.lotId && - workOrderLots.some((lot) => lotOccupancy.lotId === lot.lotId); - // eslint-disable-next-line no-unsanitized/property - rowElement.innerHTML = ` - ${isActive - ? `` - : ``} - - - ${cityssm.escapeHTML(lotOccupancy.occupancyType ?? '')} -
    - #${lotOccupancy.lotOccupancyId} - `; - if (lotOccupancy.lotId) { - // eslint-disable-next-line no-unsanitized/method - rowElement.insertAdjacentHTML('beforeend', ` - ${cityssm.escapeHTML(lotOccupancy.lotName ?? '')} - ${hasLotRecord - ? '' - : ` `} - `); - } - else { - // eslint-disable-next-line no-unsanitized/method - rowElement.insertAdjacentHTML('beforeend', `(No ${los.escapedAliases.Lot})`); - } - let occupantsHTML = ''; - for (const occupant of lotOccupancy.lotOccupancyOccupants) { - occupantsHTML += `
  • - - - - ${cityssm.escapeHTML(occupant.occupantName ?? '')} - ${cityssm.escapeHTML(occupant.occupantFamilyName ?? '')} -
  • `; - } - // eslint-disable-next-line no-unsanitized/method - rowElement.insertAdjacentHTML('beforeend', ` - ${lotOccupancy.occupancyStartDateString} - - ${lotOccupancy.occupancyEndDate - ? lotOccupancy.occupancyEndDateString - : '(No End Date)'} - - ${lotOccupancy.lotOccupancyOccupants.length === 0 - ? `(No ${los.escapedAliases.Occupants})` - : `
      ${occupantsHTML}
    `} - - - `); - rowElement - .querySelector('.button--addLot') - ?.addEventListener('click', addLotFromLotOccupancy); - rowElement - .querySelector('.button--deleteLotOccupancy') - ?.addEventListener('click', deleteLotOccupancy); - occupanciesContainerElement.querySelector('tbody')?.append(rowElement); - } - } - function openEditLotStatus(clickEvent) { - const lotId = Number.parseInt(clickEvent.currentTarget.closest('.container--lot').dataset.lotId ?? '', 10); - const lot = workOrderLots.find((possibleLot) => possibleLot.lotId === lotId); - let editCloseModalFunction; - function doUpdateLotStatus(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/workOrders/doUpdateLotStatus`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderLots = responseJSON.workOrderLots; - renderRelatedLotsAndOccupancies(); - editCloseModalFunction(); - } - else { - bulmaJS.alert({ - title: 'Error Deleting Relationship', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('lot-editLotStatus', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#lotStatusEdit--lotId').value = lotId.toString(); - modalElement.querySelector('#lotStatusEdit--lotName').value = lot.lotName ?? ''; - const lotStatusElement = modalElement.querySelector('#lotStatusEdit--burialSiteStatusId'); - let lotStatusFound = false; - for (const lotStatus of exports.lotStatuses) { - const optionElement = document.createElement('option'); - optionElement.value = lotStatus.burialSiteStatusId.toString(); - optionElement.textContent = lotStatus.lotStatus; - if (lotStatus.burialSiteStatusId === lot.burialSiteStatusId) { - lotStatusFound = true; - } - lotStatusElement.append(optionElement); - } - if (!lotStatusFound && lot.burialSiteStatusId) { - const optionElement = document.createElement('option'); - optionElement.value = lot.burialSiteStatusId.toString(); - optionElement.textContent = lot.lotStatus ?? ''; - lotStatusElement.append(optionElement); - } - if (lot.burialSiteStatusId) { - lotStatusElement.value = lot.burialSiteStatusId.toString(); - } - // eslint-disable-next-line no-unsanitized/method - modalElement - .querySelector('form') - ?.insertAdjacentHTML('beforeend', ``); - }, - onshown(modalElement, closeModalFunction) { - editCloseModalFunction = closeModalFunction; - bulmaJS.toggleHtmlClipped(); - modalElement - .querySelector('form') - ?.addEventListener('submit', doUpdateLotStatus); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function deleteLot(clickEvent) { - const lotId = clickEvent.currentTarget.closest('.container--lot').dataset.lotId; - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/workOrders/doDeleteWorkOrderLot`, { - workOrderId, - lotId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderLots = responseJSON.workOrderLots; - renderRelatedLotsAndOccupancies(); - } - else { - bulmaJS.alert({ - title: 'Error Deleting Relationship', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: `Delete ${los.escapedAliases.Occupancy} Relationship`, - message: `Are you sure you want to remove the relationship to this ${los.escapedAliases.occupancy} record from this work order? Note that the record will remain.`, - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete Relationship', - callbackFunction: doDelete - } - }); - } - function renderRelatedLots() { - const lotsContainerElement = document.querySelector('#container--lots'); - document.querySelector(".tabs a[href='#relatedTab--lots'] .tag").textContent = workOrderLots.length.toString(); - if (workOrderLots.length === 0) { - // eslint-disable-next-line no-unsanitized/property - lotsContainerElement.innerHTML = `
    -

    There are no ${los.escapedAliases.lots} associated with this work order.

    -
    `; - return; - } - // eslint-disable-next-line no-unsanitized/property - lotsContainerElement.innerHTML = ` - - - - - - - - -
    ${los.escapedAliases.Lot}${los.escapedAliases.Map}${los.escapedAliases.Lot} TypeStatus
    `; - for (const lot of workOrderLots) { - const rowElement = document.createElement('tr'); - rowElement.className = 'container--lot'; - rowElement.dataset.lotId = lot.lotId.toString(); - // eslint-disable-next-line no-unsanitized/property - rowElement.innerHTML = ` - - ${cityssm.escapeHTML(lot.lotName ?? '')} - - - ${cityssm.escapeHTML(lot.mapName ?? '')} - - ${cityssm.escapeHTML(lot.lotType ?? '')} - - ${lot.burialSiteStatusId - ? cityssm.escapeHTML(lot.lotStatus ?? '') - : '(No Status)'} - - - - `; - rowElement - .querySelector('.button--editLotStatus') - ?.addEventListener('click', openEditLotStatus); - rowElement - .querySelector('.button--deleteLot') - ?.addEventListener('click', deleteLot); - lotsContainerElement.querySelector('tbody')?.append(rowElement); - } - } - function renderRelatedLotsAndOccupancies() { - renderRelatedOccupancies(); - renderRelatedLots(); - } - renderRelatedLotsAndOccupancies(); - function doAddLotOccupancy(clickEvent) { - const rowElement = clickEvent.currentTarget.closest('tr'); - const lotOccupancyId = rowElement.dataset.lotOccupancyId ?? ''; - addLotOccupancy(lotOccupancyId, (success) => { - if (success) { - rowElement.remove(); - } - }); - } - document - .querySelector('#button--addLotOccupancy') - ?.addEventListener('click', () => { - let searchFormElement; - let searchResultsContainerElement; - function doSearch(event) { - if (event) { - event.preventDefault(); - } - // eslint-disable-next-line no-unsanitized/property - searchResultsContainerElement.innerHTML = - los.getLoadingParagraphHTML('Searching...'); - cityssm.postJSON(`${los.urlPrefix}/lotOccupancies/doSearchLotOccupancies`, searchFormElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.lotOccupancies.length === 0) { - searchResultsContainerElement.innerHTML = `
    -

    There are no records that meet the search criteria.

    -
    `; - return; - } - // eslint-disable-next-line no-unsanitized/property - searchResultsContainerElement.innerHTML = ` - - - - - - - - - -
    ${los.escapedAliases.Occupancy} Type${los.escapedAliases.Lot}${los.escapedAliases.OccupancyStartDate}End Date${los.escapedAliases.Occupants}
    `; - for (const lotOccupancy of responseJSON.lotOccupancies) { - const rowElement = document.createElement('tr'); - rowElement.className = 'container--lotOccupancy'; - rowElement.dataset.lotOccupancyId = - lotOccupancy.lotOccupancyId.toString(); - rowElement.innerHTML = ` - - - - ${cityssm.escapeHTML(lotOccupancy.occupancyType ?? '')} - `; - if (lotOccupancy.lotId) { - rowElement.insertAdjacentHTML('beforeend', `${cityssm.escapeHTML(lotOccupancy.lotName ?? '')}`); - } - else { - // eslint-disable-next-line no-unsanitized/method - rowElement.insertAdjacentHTML('beforeend', `(No ${los.escapedAliases.Lot})`); - } - // eslint-disable-next-line no-unsanitized/method - rowElement.insertAdjacentHTML('beforeend', ` - ${lotOccupancy.occupancyStartDateString} - - ${lotOccupancy.occupancyEndDate - ? lotOccupancy.occupancyEndDateString - : '(No End Date)'} - - ${lotOccupancy.lotOccupancyOccupants.length === 0 - ? ` - (No ${cityssm.escapeHTML(los.escapedAliases.Occupants)}) - ` - : cityssm.escapeHTML(`${lotOccupancy.lotOccupancyOccupants[0].occupantName} - ${lotOccupancy.lotOccupancyOccupants[0] - .occupantFamilyName}`) + - (lotOccupancy.lotOccupancyOccupants.length > 1 - ? ` plus - ${(lotOccupancy.lotOccupancyOccupants.length - 1).toString()}` - : '')}`); - rowElement - .querySelector('.button--addLotOccupancy') - ?.addEventListener('click', doAddLotOccupancy); - searchResultsContainerElement - .querySelector('tbody') - ?.append(rowElement); - } - }); - } - cityssm.openHtmlModal('workOrder-addLotOccupancy', { - onshow(modalElement) { - los.populateAliases(modalElement); - searchFormElement = modalElement.querySelector('form'); - searchResultsContainerElement = modalElement.querySelector('#resultsContainer--lotOccupancyAdd'); - modalElement.querySelector('#lotOccupancySearch--notWorkOrderId').value = workOrderId; - modalElement.querySelector('#lotOccupancySearch--occupancyEffectiveDateString').value = document.querySelector('#workOrderEdit--workOrderOpenDateString').value; - doSearch(); - }, - onshown(modalElement) { - bulmaJS.toggleHtmlClipped(); - const occupantNameElement = modalElement.querySelector('#lotOccupancySearch--occupantName'); - occupantNameElement.addEventListener('change', doSearch); - occupantNameElement.focus(); - modalElement.querySelector('#lotOccupancySearch--lotName').addEventListener('change', doSearch); - searchFormElement.addEventListener('submit', doSearch); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - document.querySelector('#button--addLotOccupancy').focus(); - } - }); - }); - function doAddLot(clickEvent) { - const rowElement = clickEvent.currentTarget.closest('tr'); - const lotId = rowElement.dataset.lotId ?? ''; - addLot(lotId, (success) => { - if (success) { - rowElement.remove(); - } - }); - } - document - .querySelector('#button--addLot') - ?.addEventListener('click', () => { - let searchFormElement; - let searchResultsContainerElement; - function doSearch(event) { - if (event) { - event.preventDefault(); - } - // eslint-disable-next-line no-unsanitized/property - searchResultsContainerElement.innerHTML = - los.getLoadingParagraphHTML('Searching...'); - cityssm.postJSON(`${los.urlPrefix}/lots/doSearchLots`, searchFormElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.lots.length === 0) { - searchResultsContainerElement.innerHTML = `
    -

    There are no records that meet the search criteria.

    -
    `; - return; - } - // eslint-disable-next-line no-unsanitized/property - searchResultsContainerElement.innerHTML = ` - - - - - - - - -
    ${los.escapedAliases.Lot}${los.escapedAliases.Map}${los.escapedAliases.Lot} TypeStatus
    `; - for (const lot of responseJSON.lots) { - const rowElement = document.createElement('tr'); - rowElement.className = 'container--lot'; - rowElement.dataset.lotId = lot.lotId.toString(); - rowElement.innerHTML = ` - - - ${cityssm.escapeHTML(lot.lotName ?? '')} - - ${cityssm.escapeHTML(lot.mapName ?? '')} - - ${cityssm.escapeHTML(lot.lotType ?? '')} - - ${cityssm.escapeHTML(lot.lotStatus ?? '')} - `; - rowElement - .querySelector('.button--addLot') - ?.addEventListener('click', doAddLot); - searchResultsContainerElement - .querySelector('tbody') - ?.append(rowElement); - } - }); - } - cityssm.openHtmlModal('workOrder-addLot', { - onshow(modalElement) { - los.populateAliases(modalElement); - searchFormElement = modalElement.querySelector('form'); - searchResultsContainerElement = modalElement.querySelector('#resultsContainer--lotAdd'); - modalElement.querySelector('#lotSearch--notWorkOrderId').value = workOrderId; - const lotStatusElement = modalElement.querySelector('#lotSearch--burialSiteStatusId'); - for (const lotStatus of exports.lotStatuses) { - const optionElement = document.createElement('option'); - optionElement.value = lotStatus.burialSiteStatusId.toString(); - optionElement.textContent = lotStatus.lotStatus; - lotStatusElement.append(optionElement); - } - doSearch(); - }, - onshown(modalElement) { - bulmaJS.toggleHtmlClipped(); - const lotNameElement = modalElement.querySelector('#lotSearch--lotName'); - lotNameElement.addEventListener('change', doSearch); - lotNameElement.focus(); - modalElement - .querySelector('#lotSearch--burialSiteStatusId') - ?.addEventListener('change', doSearch); - searchFormElement.addEventListener('submit', doSearch); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - document.querySelector('#button--addLot').focus(); - } - }); - }); - })(); - } - /** - * Comments - */ - ; - (() => { - let workOrderComments = exports.workOrderComments; - delete exports.workOrderComments; - function openEditWorkOrderComment(clickEvent) { - const workOrderCommentId = Number.parseInt(clickEvent.currentTarget.closest('tr')?.dataset - .workOrderCommentId ?? '', 10); - const workOrderComment = workOrderComments.find((currentComment) => currentComment.workOrderCommentId === workOrderCommentId); - let editFormElement; - let editCloseModalFunction; - function editComment(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/workOrders/doUpdateWorkOrderComment`, editFormElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderComments = responseJSON.workOrderComments; - editCloseModalFunction(); - renderWorkOrderComments(); - } - else { - bulmaJS.alert({ - title: 'Error Updating Comment', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - cityssm.openHtmlModal('workOrder-editComment', { - onshow(modalElement) { - ; - modalElement.querySelector('#workOrderCommentEdit--workOrderId').value = workOrderId; - modalElement.querySelector('#workOrderCommentEdit--workOrderCommentId').value = workOrderCommentId.toString(); - modalElement.querySelector('#workOrderCommentEdit--workOrderComment').value = workOrderComment.workOrderComment ?? ''; - const workOrderCommentDateStringElement = modalElement.querySelector('#workOrderCommentEdit--workOrderCommentDateString'); - workOrderCommentDateStringElement.value = - workOrderComment.workOrderCommentDateString ?? ''; - const currentDateString = cityssm.dateToString(new Date()); - workOrderCommentDateStringElement.max = - workOrderComment.workOrderCommentDateString <= currentDateString - ? currentDateString - : workOrderComment.workOrderCommentDateString ?? ''; - modalElement.querySelector('#workOrderCommentEdit--workOrderCommentTimeString').value = workOrderComment.workOrderCommentTimeString ?? ''; - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - los.initializeDatePickers(modalElement); - modalElement.querySelector('#workOrderCommentEdit--workOrderComment').focus(); - editFormElement = modalElement.querySelector('form'); - editFormElement.addEventListener('submit', editComment); - editCloseModalFunction = closeModalFunction; - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function deleteWorkOrderComment(clickEvent) { - const workOrderCommentId = Number.parseInt(clickEvent.currentTarget.closest('tr')?.dataset - .workOrderCommentId ?? '', 10); - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/workOrders/doDeleteWorkOrderComment`, { - workOrderId, - workOrderCommentId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderComments = responseJSON.workOrderComments; - renderWorkOrderComments(); - } - else { - bulmaJS.alert({ - title: 'Error Removing Comment', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: 'Remove Comment?', - message: 'Are you sure you want to remove this comment?', - okButton: { - text: 'Yes, Remove Comment', - callbackFunction: doDelete - }, - contextualColorName: 'warning' - }); - } - function renderWorkOrderComments() { - const containerElement = document.querySelector('#container--workOrderComments'); - if (workOrderComments.length === 0) { - containerElement.innerHTML = `
    -

    There are no comments to display.

    -
    `; - return; - } - const tableElement = document.createElement('table'); - tableElement.className = 'table is-fullwidth is-striped is-hoverable'; - tableElement.innerHTML = ` - Commentor - Comment Date - Comment - Options - - `; - for (const workOrderComment of workOrderComments) { - const tableRowElement = document.createElement('tr'); - tableRowElement.dataset.workOrderCommentId = - workOrderComment.workOrderCommentId?.toString(); - // eslint-disable-next-line no-unsanitized/property - tableRowElement.innerHTML = ` - ${cityssm.escapeHTML(workOrderComment.recordCreate_userName ?? '')} - - ${workOrderComment.workOrderCommentDateString} - ${workOrderComment.workOrderCommentTime === 0 - ? '' - : workOrderComment.workOrderCommentTimePeriodString} - - ${cityssm.escapeHTML(workOrderComment.workOrderComment ?? '')} - -
    - - -
    - `; - tableRowElement - .querySelector('.button--edit') - ?.addEventListener('click', openEditWorkOrderComment); - tableRowElement - .querySelector('.button--delete') - ?.addEventListener('click', deleteWorkOrderComment); - tableElement.querySelector('tbody')?.append(tableRowElement); - } - containerElement.innerHTML = ''; - containerElement.append(tableElement); - } - function openAddCommentModal() { - let addCommentCloseModalFunction; - function doAddComment(formEvent) { - formEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/workOrders/doAddWorkOrderComment`, formEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderComments = responseJSON.workOrderComments; - renderWorkOrderComments(); - addCommentCloseModalFunction(); - } - }); - } - cityssm.openHtmlModal('workOrder-addComment', { - onshow(modalElement) { - los.populateAliases(modalElement); - modalElement.querySelector('#workOrderCommentAdd--workOrderId').value = workOrderId; - modalElement - .querySelector('form') - ?.addEventListener('submit', doAddComment); - }, - onshown(modalElement, closeModalFunction) { - bulmaJS.toggleHtmlClipped(); - addCommentCloseModalFunction = closeModalFunction; - modalElement.querySelector('#workOrderCommentAdd--workOrderComment').focus(); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - document.querySelector('#workOrderComments--add').focus(); - } - }); - } - document - .querySelector('#workOrderComments--add') - ?.addEventListener('click', openAddCommentModal); - if (!isCreate) { - renderWorkOrderComments(); - } - })(); - /* - * Milestones - */ - function clearPanelBlockElements(panelElement) { - for (const panelBlockElement of panelElement.querySelectorAll('.panel-block')) { - panelBlockElement.remove(); - } - } - function refreshConflictingMilestones(workOrderMilestoneDateString, targetPanelElement) { - // Clear panel-block elements - clearPanelBlockElements(targetPanelElement); - // eslint-disable-next-line no-unsanitized/method - targetPanelElement.insertAdjacentHTML('beforeend', `
    - ${los.getLoadingParagraphHTML('Loading conflicting milestones...')} -
    `); - cityssm.postJSON(`${los.urlPrefix}/workOrders/doGetWorkOrderMilestones`, { - workOrderMilestoneDateFilter: 'date', - workOrderMilestoneDateString - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - const workOrderMilestones = responseJSON.workOrderMilestones.filter((possibleMilestone) => possibleMilestone.workOrderId.toString() !== workOrderId); - clearPanelBlockElements(targetPanelElement); - for (const milestone of workOrderMilestones) { - targetPanelElement.insertAdjacentHTML('beforeend', `
    -
    -
    - ${cityssm.escapeHTML(milestone.workOrderMilestoneTime === 0 ? 'No Time' : milestone.workOrderMilestoneTimePeriodString ?? '')}
    - ${cityssm.escapeHTML(milestone.workOrderMilestoneType ?? '')} -
    -
    - ${cityssm.escapeHTML(milestone.workOrderNumber ?? '')}
    - - ${cityssm.escapeHTML(milestone.workOrderDescription ?? '')} - -
    -
    -
    `); - } - if (workOrderMilestones.length === 0) { - targetPanelElement.insertAdjacentHTML('beforeend', `
    -
    -

    - There are no milestones on other work orders scheduled for - ${cityssm.escapeHTML(workOrderMilestoneDateString)}. -

    -
    -
    `); - } - }); - } - function processMilestoneResponse(rawResponseJSON) { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - workOrderMilestones = responseJSON.workOrderMilestones; - renderMilestones(); - } - else { - bulmaJS.alert({ - title: 'Error Reopening Milestone', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - } - function completeMilestone(clickEvent) { - clickEvent.preventDefault(); - const currentDateString = cityssm.dateToString(new Date()); - const workOrderMilestoneId = Number.parseInt(clickEvent.currentTarget.closest('.container--milestone').dataset.workOrderMilestoneId ?? '', 10); - const workOrderMilestone = workOrderMilestones.find((currentMilestone) => currentMilestone.workOrderMilestoneId === workOrderMilestoneId); - function doComplete() { - cityssm.postJSON(`${los.urlPrefix}/workOrders/doCompleteWorkOrderMilestone`, { - workOrderId, - workOrderMilestoneId - }, processMilestoneResponse); - } - bulmaJS.confirm({ - title: 'Complete Milestone', - message: `Are you sure you want to complete this milestone? - ${workOrderMilestone.workOrderMilestoneDateString !== undefined && - workOrderMilestone.workOrderMilestoneDateString !== '' && - workOrderMilestone.workOrderMilestoneDateString > currentDateString - ? '
    Note that this milestone is expected to be completed in the future.' - : ''}`, - messageIsHtml: true, - contextualColorName: 'warning', - okButton: { - text: 'Yes, Complete Milestone', - callbackFunction: doComplete - } - }); - } - function reopenMilestone(clickEvent) { - clickEvent.preventDefault(); - const workOrderMilestoneId = clickEvent.currentTarget.closest('.container--milestone').dataset.workOrderMilestoneId; - function doReopen() { - cityssm.postJSON(`${los.urlPrefix}/workOrders/doReopenWorkOrderMilestone`, { - workOrderId, - workOrderMilestoneId - }, processMilestoneResponse); - } - bulmaJS.confirm({ - title: 'Reopen Milestone', - message: 'Are you sure you want to remove the completion status from this milestone, and reopen it?', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Reopen Milestone', - callbackFunction: doReopen - } - }); - } - function deleteMilestone(clickEvent) { - clickEvent.preventDefault(); - const workOrderMilestoneId = clickEvent.currentTarget.closest('.container--milestone').dataset.workOrderMilestoneId; - function doDelete() { - cityssm.postJSON(`${los.urlPrefix}/workOrders/doDeleteWorkOrderMilestone`, { - workOrderMilestoneId, - workOrderId - }, processMilestoneResponse); - } - bulmaJS.confirm({ - title: 'Delete Milestone', - message: 'Are you sure you want to delete this milestone?', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Delete Milestone', - callbackFunction: doDelete - } - }); - } - function editMilestone(clickEvent) { - clickEvent.preventDefault(); - const workOrderMilestoneId = Number.parseInt(clickEvent.currentTarget.closest('.container--milestone').dataset.workOrderMilestoneId ?? '', 10); - const workOrderMilestone = workOrderMilestones.find((currentMilestone) => currentMilestone.workOrderMilestoneId === workOrderMilestoneId); - let editCloseModalFunction; - let workOrderMilestoneDateStringElement; - function doEdit(submitEvent) { - submitEvent.preventDefault(); - cityssm.postJSON(`${los.urlPrefix}/workOrders/doUpdateWorkOrderMilestone`, submitEvent.currentTarget, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - processMilestoneResponse(responseJSON); - if (responseJSON.success) { - editCloseModalFunction(); - } - }); - } - cityssm.openHtmlModal('workOrder-editMilestone', { - onshow(modalElement) { - ; - modalElement.querySelector('#milestoneEdit--workOrderId').value = workOrderId; - modalElement.querySelector('#milestoneEdit--workOrderMilestoneId').value = workOrderMilestone.workOrderMilestoneId?.toString() ?? ''; - const milestoneTypeElement = modalElement.querySelector('#milestoneEdit--workOrderMilestoneTypeId'); - let milestoneTypeFound = false; - for (const milestoneType of exports.workOrderMilestoneTypes) { - const optionElement = document.createElement('option'); - optionElement.value = - milestoneType.workOrderMilestoneTypeId.toString(); - optionElement.textContent = milestoneType.workOrderMilestoneType; - if (milestoneType.workOrderMilestoneTypeId === - workOrderMilestone.workOrderMilestoneTypeId) { - optionElement.selected = true; - milestoneTypeFound = true; - } - milestoneTypeElement.append(optionElement); - } - if (!milestoneTypeFound && - workOrderMilestone.workOrderMilestoneTypeId) { - const optionElement = document.createElement('option'); - optionElement.value = - workOrderMilestone.workOrderMilestoneTypeId.toString(); - optionElement.textContent = - workOrderMilestone.workOrderMilestoneType ?? ''; - optionElement.selected = true; - milestoneTypeElement.append(optionElement); - } - workOrderMilestoneDateStringElement = modalElement.querySelector('#milestoneEdit--workOrderMilestoneDateString'); - workOrderMilestoneDateStringElement.value = - workOrderMilestone.workOrderMilestoneDateString ?? ''; - if (workOrderMilestone.workOrderMilestoneTime) { - ; - modalElement.querySelector('#milestoneEdit--workOrderMilestoneTimeString').value = workOrderMilestone.workOrderMilestoneTimeString ?? ''; - } - ; - modalElement.querySelector('#milestoneEdit--workOrderMilestoneDescription').value = workOrderMilestone.workOrderMilestoneDescription ?? ''; - }, - onshown(modalElement, closeModalFunction) { - editCloseModalFunction = closeModalFunction; - bulmaJS.toggleHtmlClipped(); - los.initializeDatePickers(modalElement); - // los.initializeTimePickers(modalElement); - modalElement.querySelector('form')?.addEventListener('submit', doEdit); - const conflictingMilestonePanelElement = document.querySelector('#milestoneEdit--conflictingMilestonesPanel'); - workOrderMilestoneDateStringElement.addEventListener('change', () => { - refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement); - }); - refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - } - }); - } - function renderMilestones() { - // Clear milestones panel - const milestonesPanelElement = document.querySelector('#panel--milestones'); - const panelBlockElementsToDelete = milestonesPanelElement.querySelectorAll('.panel-block'); - for (const panelBlockToDelete of panelBlockElementsToDelete) { - panelBlockToDelete.remove(); - } - for (const milestone of workOrderMilestones) { - const panelBlockElement = document.createElement('div'); - panelBlockElement.className = 'panel-block is-block container--milestone'; - panelBlockElement.dataset.workOrderMilestoneId = - milestone.workOrderMilestoneId?.toString(); - // eslint-disable-next-line no-unsanitized/property - panelBlockElement.innerHTML = `
    -
    - ${milestone.workOrderMilestoneCompletionDate - ? ` - - ` - : ``} -
    - ${milestone.workOrderMilestoneTypeId - ? `${cityssm.escapeHTML(milestone.workOrderMilestoneType ?? '')}
    ` - : ''} - ${milestone.workOrderMilestoneDate === 0 - ? '(No Set Date)' - : milestone.workOrderMilestoneDateString} - ${milestone.workOrderMilestoneTime - ? ` ${milestone.workOrderMilestoneTimePeriodString}` - : ''}
    - - ${cityssm.escapeHTML(milestone.workOrderMilestoneDescription ?? '')} - -
    - -
    `; - panelBlockElement - .querySelector('.button--reopenMilestone') - ?.addEventListener('click', reopenMilestone); - panelBlockElement - .querySelector('.button--editMilestone') - ?.addEventListener('click', editMilestone); - panelBlockElement - .querySelector('.button--completeMilestone') - ?.addEventListener('click', completeMilestone); - panelBlockElement - .querySelector('.button--deleteMilestone') - ?.addEventListener('click', deleteMilestone); - milestonesPanelElement.append(panelBlockElement); - } - bulmaJS.init(milestonesPanelElement); - } - if (!isCreate) { - workOrderMilestones = exports.workOrderMilestones; - delete exports.workOrderMilestones; - renderMilestones(); - document - .querySelector('#button--addMilestone') - ?.addEventListener('click', () => { - let addFormElement; - let workOrderMilestoneDateStringElement; - let addCloseModalFunction; - function doAdd(submitEvent) { - if (submitEvent) { - submitEvent.preventDefault(); - } - const currentDateString = cityssm.dateToString(new Date()); - function _doAdd() { - cityssm.postJSON(`${los.urlPrefix}/workOrders/doAddWorkOrderMilestone`, addFormElement, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - processMilestoneResponse(responseJSON); - if (responseJSON.success) { - addCloseModalFunction(); - } - }); - } - const milestoneDateString = workOrderMilestoneDateStringElement.value; - if (milestoneDateString !== '' && - milestoneDateString < currentDateString) { - bulmaJS.confirm({ - title: 'Milestone Date in the Past', - message: 'Are you sure you want to create a milestone with a date in the past?', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Create a Past Milestone', - callbackFunction: _doAdd - } - }); - } - else { - _doAdd(); - } - } - cityssm.openHtmlModal('workOrder-addMilestone', { - onshow(modalElement) { - ; - modalElement.querySelector('#milestoneAdd--workOrderId').value = workOrderId; - const milestoneTypeElement = modalElement.querySelector('#milestoneAdd--workOrderMilestoneTypeId'); - for (const milestoneType of exports.workOrderMilestoneTypes) { - const optionElement = document.createElement('option'); - optionElement.value = - milestoneType.workOrderMilestoneTypeId.toString(); - optionElement.textContent = milestoneType.workOrderMilestoneType; - milestoneTypeElement.append(optionElement); - } - workOrderMilestoneDateStringElement = modalElement.querySelector('#milestoneAdd--workOrderMilestoneDateString'); - workOrderMilestoneDateStringElement.valueAsDate = new Date(); - }, - onshown(modalElement, closeModalFunction) { - addCloseModalFunction = closeModalFunction; - los.initializeDatePickers(modalElement); - // los.initializeTimePickers(modalElement); - bulmaJS.toggleHtmlClipped(); - modalElement.querySelector('#milestoneAdd--workOrderMilestoneTypeId').focus(); - addFormElement = modalElement.querySelector('form'); - addFormElement.addEventListener('submit', doAdd); - const conflictingMilestonePanelElement = document.querySelector('#milestoneAdd--conflictingMilestonesPanel'); - workOrderMilestoneDateStringElement.addEventListener('change', () => { - refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement); - }); - refreshConflictingMilestones(workOrderMilestoneDateStringElement.value, conflictingMilestonePanelElement); - }, - onremoved() { - bulmaJS.toggleHtmlClipped(); - document.querySelector('#button--addMilestone').focus(); - } - }); - }); - } -})(); diff --git a/public/javascripts/workOrderMilestoneCalendar.d.ts b/public/javascripts/workOrderMilestoneCalendar.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/workOrderMilestoneCalendar.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/workOrderMilestoneCalendar.js b/public/javascripts/workOrderMilestoneCalendar.js deleted file mode 100644 index ca7e37b5..00000000 --- a/public/javascripts/workOrderMilestoneCalendar.js +++ /dev/null @@ -1,118 +0,0 @@ -"use strict"; -// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair -/* eslint-disable unicorn/prefer-module */ -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - const workOrderSearchFiltersFormElement = document.querySelector('#form--searchFilters'); - const workOrderMilestoneDateFilterElement = workOrderSearchFiltersFormElement.querySelector('#searchFilter--workOrderMilestoneDateFilter'); - const workOrderMilestoneDateStringElement = workOrderSearchFiltersFormElement.querySelector('#searchFilter--workOrderMilestoneDateString'); - const milestoneCalendarContainerElement = document.querySelector('#container--milestoneCalendar'); - function renderMilestones(workOrderMilestones) { - if (workOrderMilestones.length === 0) { - milestoneCalendarContainerElement.innerHTML = `
    -

    There are no milestones that meet the search criteria.

    -
    `; - return; - } - milestoneCalendarContainerElement.innerHTML = ''; - const currentDate = cityssm.dateToString(new Date()); - let currentPanelElement; - let currentPanelDateString = 'x'; - for (const milestone of workOrderMilestones) { - if (currentPanelDateString !== milestone.workOrderMilestoneDateString) { - if (currentPanelElement) { - milestoneCalendarContainerElement.append(currentPanelElement); - } - currentPanelElement = document.createElement('div'); - currentPanelElement.className = 'panel'; - currentPanelElement.innerHTML = `

    - ${cityssm.escapeHTML(milestone.workOrderMilestoneDate === 0 - ? 'No Set Date' - : milestone.workOrderMilestoneDateString ?? '')} -

    `; - currentPanelDateString = milestone.workOrderMilestoneDateString ?? ''; - } - const panelBlockElement = document.createElement('div'); - panelBlockElement.className = 'panel-block is-block'; - if (!milestone.workOrderMilestoneCompletionDate && - milestone.workOrderMilestoneDateString !== '' && - milestone.workOrderMilestoneDateString < currentDate) { - panelBlockElement.classList.add('has-background-warning-light'); - } - let lotOccupancyHTML = ''; - for (const lot of milestone.workOrderLots ?? []) { - lotOccupancyHTML += `
  • - - - - ${cityssm.escapeHTML(lot.lotName ?? '')} -
  • `; - } - for (const lotOccupancy of milestone.workOrderLotOccupancies ?? []) { - for (const occupant of lotOccupancy.lotOccupancyOccupants ?? []) { - lotOccupancyHTML += `
  • - - - - ${cityssm.escapeHTML(occupant.occupantName ?? '')} - ${cityssm.escapeHTML(occupant.occupantFamilyName ?? '')} -
  • `; - } - } - // eslint-disable-next-line no-unsanitized/property - panelBlockElement.innerHTML = `
    -
    - - ${milestone.workOrderMilestoneCompletionDate - ? '' - : ''} - -
    - ${milestone.workOrderMilestoneTime === 0 - ? '' - : `${milestone.workOrderMilestoneTimePeriodString}
    `} - ${milestone.workOrderMilestoneTypeId - ? `${cityssm.escapeHTML(milestone.workOrderMilestoneType ?? '')}
    ` - : ''} - - ${cityssm.escapeHTML(milestone.workOrderMilestoneDescription ?? '')} - -
    - - - ${cityssm.escapeHTML(milestone.workOrderNumber ?? '')} -
    - ${cityssm.escapeHTML(milestone.workOrderDescription ?? '')} -
    - ${lotOccupancyHTML === '' - ? '' - : `
      ${lotOccupancyHTML}
    `}
    `; - currentPanelElement.append(panelBlockElement); - } - milestoneCalendarContainerElement.append(currentPanelElement); - } - function getMilestones(event) { - if (event) { - event.preventDefault(); - } - // eslint-disable-next-line no-unsanitized/property - milestoneCalendarContainerElement.innerHTML = los.getLoadingParagraphHTML('Loading Milestones...'); - cityssm.postJSON(`${los.urlPrefix}/workOrders/doGetWorkOrderMilestones`, workOrderSearchFiltersFormElement, (responseJSON) => { - renderMilestones(responseJSON.workOrderMilestones); - }); - } - workOrderMilestoneDateFilterElement.addEventListener('change', () => { - ; - workOrderMilestoneDateStringElement.closest('fieldset').disabled = workOrderMilestoneDateFilterElement.value !== 'date'; - getMilestones(); - }); - los.initializeDatePickers(workOrderSearchFiltersFormElement); - workOrderMilestoneDateStringElement.addEventListener('change', getMilestones); - workOrderSearchFiltersFormElement.addEventListener('submit', getMilestones); - getMilestones(); -})(); diff --git a/public/javascripts/workOrderOutlook.d.ts b/public/javascripts/workOrderOutlook.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/workOrderOutlook.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/workOrderOutlook.js b/public/javascripts/workOrderOutlook.js deleted file mode 100644 index 2313ce94..00000000 --- a/public/javascripts/workOrderOutlook.js +++ /dev/null @@ -1,46 +0,0 @@ -"use strict"; -// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair -/* eslint-disable unicorn/prefer-module */ -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - const workOrderTypeIdsElement = document.querySelector('#icsFilters--workOrderTypeIds'); - const workOrderMilestoneTypeIdsElement = document.querySelector('#icsFilters--workOrderMilestoneTypeIds'); - const calendarLinkElement = document.querySelector('#icsFilters--calendarURL'); - function updateCalendarURL() { - let url = `${window.location.href.slice(0, Math.max(0, window.location.href.indexOf(window.location.pathname) + 1)) + los.urlPrefix}api/${los.apiKey}/milestoneICS/?`; - if (!workOrderTypeIdsElement.disabled && - workOrderTypeIdsElement.selectedOptions.length > 0) { - url += 'workOrderTypeIds='; - for (const optionElement of workOrderTypeIdsElement.selectedOptions) { - url += `${optionElement.value},`; - } - url = `${url.slice(0, -1)}&`; - } - if (!workOrderMilestoneTypeIdsElement.disabled && - workOrderMilestoneTypeIdsElement.selectedOptions.length > 0) { - url += 'workOrderMilestoneTypeIds='; - for (const optionElement of workOrderMilestoneTypeIdsElement.selectedOptions) { - url += `${optionElement.value},`; - } - url = `${url.slice(0, -1)}&`; - } - calendarLinkElement.value = url.slice(0, -1); - } - ; - document.querySelector('#icsFilters--workOrderTypeIds-all').addEventListener('change', (changeEvent) => { - workOrderTypeIdsElement.disabled = changeEvent.currentTarget.checked; - }); - document.querySelector('#icsFilters--workOrderMilestoneTypeIds-all').addEventListener('change', (changeEvent) => { - workOrderMilestoneTypeIdsElement.disabled = changeEvent.currentTarget.checked; - }); - const inputSelectElements = document.querySelector('#panel--icsFilters').querySelectorAll('input, select'); - for (const element of inputSelectElements) { - element.addEventListener('change', updateCalendarURL); - } - updateCalendarURL(); - calendarLinkElement.addEventListener('click', () => { - calendarLinkElement.focus(); - calendarLinkElement.select(); - }); -})(); diff --git a/public/javascripts/workOrderSearch.d.ts b/public/javascripts/workOrderSearch.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/workOrderSearch.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/workOrderSearch.js b/public/javascripts/workOrderSearch.js deleted file mode 100644 index e0e62d81..00000000 --- a/public/javascripts/workOrderSearch.js +++ /dev/null @@ -1,180 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - const workOrderPrints = exports.workOrderPrints; - const searchFilterFormElement = document.querySelector('#form--searchFilters'); - los.initializeDatePickers(searchFilterFormElement); - const searchResultsContainerElement = document.querySelector('#container--searchResults'); - const limit = Number.parseInt(document.querySelector('#searchFilter--limit').value, 10); - const offsetElement = document.querySelector('#searchFilter--offset'); - function renderWorkOrders(rawResponseJSON) { - const responseJSON = rawResponseJSON; - if (responseJSON.workOrders.length === 0) { - searchResultsContainerElement.innerHTML = `
    -

    There are no work orders that meet the search criteria.

    -
    `; - return; - } - const resultsTbodyElement = document.createElement('tbody'); - for (const workOrder of responseJSON.workOrders) { - let relatedHTML = ''; - for (const lot of workOrder.workOrderLots ?? []) { - relatedHTML += `
  • - - - - ${cityssm.escapeHTML((lot.lotName ?? '') === '' - ? `(No ${los.escapedAliases.Lot} Name)` - : lot.lotName ?? '')} -
  • `; - } - for (const occupancy of workOrder.workOrderLotOccupancies ?? []) { - for (const occupant of occupancy.lotOccupancyOccupants ?? []) { - relatedHTML += `
  • - - - - ${cityssm.escapeHTML((occupant.occupantName ?? '') === '' && - (occupant.occupantFamilyName ?? '') === '' - ? '(No Name)' - : `${occupant.occupantName} ${occupant.occupantFamilyName}`)} -
  • `; - } - } - // eslint-disable-next-line no-unsanitized/method - resultsTbodyElement.insertAdjacentHTML('beforeend', ` - - - ${workOrder.workOrderNumber?.trim() === '' - ? '(No Number)' - : cityssm.escapeHTML(workOrder.workOrderNumber ?? '')} - - - ${cityssm.escapeHTML(workOrder.workOrderType ?? '')}
    - - ${cityssm.escapeHTML(workOrder.workOrderDescription ?? '')} - - - ${relatedHTML === '' - ? '' - : `
      ${relatedHTML}
    `} - -
      -
    • - - - - ${workOrder.workOrderOpenDateString} -
    • -
    • - - - - ${workOrder.workOrderCloseDate - ? workOrder.workOrderCloseDateString - : `(No ${los.escapedAliases.WorkOrderCloseDate})`} -
    • -
    - - ${workOrder.workOrderMilestoneCount === 0 - ? '-' - : `${(workOrder.workOrderMilestoneCompletionCount ?? '').toString()} - / - ${(workOrder.workOrderMilestoneCount ?? '').toString()}`} - - ${workOrderPrints.length > 0 - ? ` - - - - ` - : ''}`); - } - // eslint-disable-next-line no-unsanitized/property - searchResultsContainerElement.innerHTML = ` - - - - - - - ${workOrderPrints.length > 0 ? '' : ''} - -
    Work Order NumberDescriptionRelatedDateProgress
    `; - // eslint-disable-next-line no-unsanitized/method - searchResultsContainerElement.insertAdjacentHTML('beforeend', los.getSearchResultsPagerHTML(limit, responseJSON.offset, responseJSON.count)); - searchResultsContainerElement - .querySelector('table') - ?.append(resultsTbodyElement); - searchResultsContainerElement - .querySelector("button[data-page='previous']") - ?.addEventListener('click', previousAndGetWorkOrders); - searchResultsContainerElement - .querySelector("button[data-page='next']") - ?.addEventListener('click', nextAndGetWorkOrders); - } - function getWorkOrders() { - // eslint-disable-next-line no-unsanitized/property - searchResultsContainerElement.innerHTML = los.getLoadingParagraphHTML('Loading Work Orders...'); - cityssm.postJSON(`${los.urlPrefix}/workOrders/doSearchWorkOrders`, searchFilterFormElement, renderWorkOrders); - } - function resetOffsetAndGetWorkOrders() { - offsetElement.value = '0'; - getWorkOrders(); - } - function previousAndGetWorkOrders() { - offsetElement.value = Math.max(Number.parseInt(offsetElement.value, 10) - limit, 0).toString(); - getWorkOrders(); - } - function nextAndGetWorkOrders() { - offsetElement.value = (Number.parseInt(offsetElement.value, 10) + limit).toString(); - getWorkOrders(); - } - const filterElements = searchFilterFormElement.querySelectorAll('input, select'); - for (const filterElement of filterElements) { - filterElement.addEventListener('change', resetOffsetAndGetWorkOrders); - } - searchFilterFormElement.addEventListener('submit', (formEvent) => { - formEvent.preventDefault(); - }); - // eslint-disable-next-line no-secrets/no-secrets - /* - const workOrderOpenDateStringElement = document.querySelector("#searchFilter--workOrderOpenDateString") as HTMLInputElement; - - document.querySelector("#button--workOrderOpenDateString-previous").addEventListener("click", () => { - - if (workOrderOpenDateStringElement.value === "") { - workOrderOpenDateStringElement.valueAsDate = new Date(); - } else { - const openDate = workOrderOpenDateStringElement.valueAsDate; - openDate.setDate(openDate.getDate() - 1); - workOrderOpenDateStringElement.valueAsDate = openDate; - } - - resetOffsetAndGetWorkOrders(); - }); - - document.querySelector("#button--workOrderOpenDateString-next").addEventListener("click", () => { - - if (workOrderOpenDateStringElement.value === "") { - workOrderOpenDateStringElement.valueAsDate = new Date(); - } else { - const openDate = workOrderOpenDateStringElement.valueAsDate; - openDate.setDate(openDate.getDate() + 1); - workOrderOpenDateStringElement.valueAsDate = openDate; - } - - resetOffsetAndGetWorkOrders(); - }); - */ - getWorkOrders(); -})(); diff --git a/public/javascripts/workOrderView.d.ts b/public/javascripts/workOrderView.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/public/javascripts/workOrderView.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/public/javascripts/workOrderView.js b/public/javascripts/workOrderView.js deleted file mode 100644 index e9929751..00000000 --- a/public/javascripts/workOrderView.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -(() => { - const los = exports.los; - const reopenWorkOrderButtonElement = document.querySelector('#button--reopenWorkOrder'); - if (reopenWorkOrderButtonElement !== null) { - const workOrderId = reopenWorkOrderButtonElement.dataset.workOrderId ?? ''; - reopenWorkOrderButtonElement.addEventListener('click', () => { - function doReopen() { - cityssm.postJSON(`${los.urlPrefix}/workOrders/doReopenWorkOrder`, { - workOrderId - }, (rawResponseJSON) => { - const responseJSON = rawResponseJSON; - if (responseJSON.success) { - globalThis.location.href = los.getWorkOrderURL(workOrderId, true, true); - } - else { - bulmaJS.alert({ - title: 'Error Reopening Work Order', - message: responseJSON.errorMessage ?? '', - contextualColorName: 'danger' - }); - } - }); - } - bulmaJS.confirm({ - title: 'Reopen Work Order', - message: 'Are you sure you want to remove the close date from this work order and reopen it?', - contextualColorName: 'warning', - okButton: { - text: 'Yes, Reopen Work Order', - callbackFunction: doReopen - } - }); - }); - } -})(); diff --git a/routes/admin.js b/routes/admin.js index 8c7b39d9..1a799fa1 100644 --- a/routes/admin.js +++ b/routes/admin.js @@ -1,65 +1,60 @@ import { Router } from 'express'; import handler_burialSiteTypes from '../handlers/admin-get/burialSiteTypes.js'; +import handler_contractTypes from '../handlers/admin-get/contractTypes.js'; import handler_database from '../handlers/admin-get/database.js'; import handler_fees from '../handlers/admin-get/fees.js'; import handler_ntfyStartup from '../handlers/admin-get/ntfyStartup.js'; -import handler_occupancyTypes from '../handlers/admin-get/occupancyTypes.js'; import handler_tables from '../handlers/admin-get/tables.js'; +import handler_doAddBurialSiteStatus from '../handlers/admin-post/doAddBurialSiteStatus.js'; +import handler_doAddBurialSiteType from '../handlers/admin-post/doAddBurialSiteType.js'; +import handler_doAddBurialSiteTypeField from '../handlers/admin-post/doAddBurialSiteTypeField.js'; +import handler_doAddContractType from '../handlers/admin-post/doAddContractType.js'; +import handler_doAddContractTypeField from '../handlers/admin-post/doAddContractTypeField.js'; +import handler_doAddContractTypePrint from '../handlers/admin-post/doAddContractTypePrint.js'; import handler_doAddFee from '../handlers/admin-post/doAddFee.js'; import handler_doAddFeeCategory from '../handlers/admin-post/doAddFeeCategory.js'; -import handler_doAddLotOccupantType from '../handlers/admin-post/doAddLotOccupantType.js'; -import handler_doAddLotStatus from '../handlers/admin-post/doAddLotStatus.js'; -import handler_doAddLotType from '../handlers/admin-post/doAddBurialSiteType.js'; -import handler_doAddLotTypeField from '../handlers/admin-post/doAddLotTypeField.js'; -import handler_doAddOccupancyType from '../handlers/admin-post/doAddOccupancyType.js'; -import handler_doAddOccupancyTypeField from '../handlers/admin-post/doAddOccupancyTypeField.js'; -import handler_doAddOccupancyTypePrint from '../handlers/admin-post/doAddOccupancyTypePrint.js'; import handler_doAddWorkOrderMilestoneType from '../handlers/admin-post/doAddWorkOrderMilestoneType.js'; import handler_doAddWorkOrderType from '../handlers/admin-post/doAddWorkOrderType.js'; import handler_doBackupDatabase from '../handlers/admin-post/doBackupDatabase.js'; import handler_doCleanupDatabase from '../handlers/admin-post/doCleanupDatabase.js'; +import handler_doDeleteBurialSiteStatus from '../handlers/admin-post/doDeleteBurialSiteStatus.js'; +import handler_doDeleteBurialSiteType from '../handlers/admin-post/doDeleteBurialSiteType.js'; +import handler_doDeleteBurialSiteTypeField from '../handlers/admin-post/doDeleteBurialSiteTypeField.js'; +import handler_doDeleteContractType from '../handlers/admin-post/doDeleteContractType.js'; +import handler_doDeleteContractTypeField from '../handlers/admin-post/doDeleteContractTypeField.js'; +import handler_doDeleteContractTypePrint from '../handlers/admin-post/doDeleteContractTypePrint.js'; import handler_doDeleteFee from '../handlers/admin-post/doDeleteFee.js'; import handler_doDeleteFeeCategory from '../handlers/admin-post/doDeleteFeeCategory.js'; -import handler_doDeleteLotOccupantType from '../handlers/admin-post/doDeleteLotOccupantType.js'; -import handler_doDeleteLotStatus from '../handlers/admin-post/doDeleteLotStatus.js'; -import handler_doDeleteLotType from '../handlers/admin-post/doDeleteLotType.js'; -import handler_doDeleteLotTypeField from '../handlers/admin-post/doDeleteLotTypeField.js'; -import handler_doDeleteOccupancyType from '../handlers/admin-post/doDeleteOccupancyType.js'; -import handler_doDeleteOccupancyTypeField from '../handlers/admin-post/doDeleteOccupancyTypeField.js'; -import handler_doDeleteOccupancyTypePrint from '../handlers/admin-post/doDeleteOccupancyTypePrint.js'; import handler_doDeleteWorkOrderMilestoneType from '../handlers/admin-post/doDeleteWorkOrderMilestoneType.js'; import handler_doDeleteWorkOrderType from '../handlers/admin-post/doDeleteWorkOrderType.js'; +import handler_doMoveBurialSiteStatusDown from '../handlers/admin-post/doMoveBurialSiteStatusDown.js'; +import handler_doMoveBurialSiteStatusUp from '../handlers/admin-post/doMoveBurialSiteStatusUp.js'; +import handler_doMoveBurialSiteTypeDown from '../handlers/admin-post/doMoveBurialSiteTypeDown.js'; +import handler_doMoveBurialSiteTypeFieldDown from '../handlers/admin-post/doMoveBurialSiteTypeFieldDown.js'; +import handler_doMoveBurialSiteTypeFieldUp from '../handlers/admin-post/doMoveBurialSiteTypeFieldUp.js'; +import handler_doMoveBurialSiteTypeUp from '../handlers/admin-post/doMoveBurialSiteTypeUp.js'; +import handler_doMoveContractTypeDown from '../handlers/admin-post/doMoveContractTypeDown.js'; +import handler_doMoveContractTypeFieldDown from '../handlers/admin-post/doMoveContractTypeFieldDown.js'; +import handler_doMoveContractTypeFieldUp from '../handlers/admin-post/doMoveContractTypeFieldUp.js'; +import handler_doMoveContractTypePrintDown from '../handlers/admin-post/doMoveContractTypePrintDown.js'; +import handler_doMoveContractTypePrintUp from '../handlers/admin-post/doMoveContractTypePrintUp.js'; +import handler_doMoveContractTypeUp from '../handlers/admin-post/doMoveContractTypeUp.js'; import handler_doMoveFeeCategoryDown from '../handlers/admin-post/doMoveFeeCategoryDown.js'; import handler_doMoveFeeCategoryUp from '../handlers/admin-post/doMoveFeeCategoryUp.js'; import handler_doMoveFeeDown from '../handlers/admin-post/doMoveFeeDown.js'; import handler_doMoveFeeUp from '../handlers/admin-post/doMoveFeeUp.js'; -import handler_doMoveLotOccupantTypeDown from '../handlers/admin-post/doMoveLotOccupantTypeDown.js'; -import handler_doMoveLotOccupantTypeUp from '../handlers/admin-post/doMoveLotOccupantTypeUp.js'; -import handler_doMoveLotStatusDown from '../handlers/admin-post/doMoveLotStatusDown.js'; -import handler_doMoveLotStatusUp from '../handlers/admin-post/doMoveLotStatusUp.js'; -import handler_doMoveLotTypeDown from '../handlers/admin-post/doMoveLotTypeDown.js'; -import handler_doMoveLotTypeFieldDown from '../handlers/admin-post/doMoveLotTypeFieldDown.js'; -import handler_doMoveLotTypeFieldUp from '../handlers/admin-post/doMoveLotTypeFieldUp.js'; -import handler_doMoveLotTypeUp from '../handlers/admin-post/doMoveBurialSiteTypeUp.js'; -import handler_doMoveOccupancyTypeDown from '../handlers/admin-post/doMoveOccupancyTypeDown.js'; -import handler_doMoveOccupancyTypeFieldDown from '../handlers/admin-post/doMoveContractTypeFieldDown.js'; -import handler_doMoveOccupancyTypeFieldUp from '../handlers/admin-post/doMoveContractTypeFieldUp.js'; -import handler_doMoveOccupancyTypePrintDown from '../handlers/admin-post/doMoveOccupancyTypePrintDown.js'; -import handler_doMoveOccupancyTypePrintUp from '../handlers/admin-post/doMoveOccupancyTypePrintUp.js'; -import handler_doMoveOccupancyTypeUp from '../handlers/admin-post/doMoveContractTypeUp.js'; import handler_doMoveWorkOrderMilestoneTypeDown from '../handlers/admin-post/doMoveWorkOrderMilestoneTypeDown.js'; import handler_doMoveWorkOrderMilestoneTypeUp from '../handlers/admin-post/doMoveWorkOrderMilestoneTypeUp.js'; import handler_doMoveWorkOrderTypeDown from '../handlers/admin-post/doMoveWorkOrderTypeDown.js'; import handler_doMoveWorkOrderTypeUp from '../handlers/admin-post/doMoveWorkOrderTypeUp.js'; +import handler_doUpdateBurialSiteStatus from '../handlers/admin-post/doUpdateBurialSiteStatus.js'; +import handler_updateBurialSiteType from '../handlers/admin-post/doUpdateBurialSiteType.js'; +import handler_doUpdateBurialSiteTypeField from '../handlers/admin-post/doUpdateBurialSiteTypeField.js'; +import handler_doUpdateContractType from '../handlers/admin-post/doUpdateContractType.js'; +import handler_doUpdateContractTypeField from '../handlers/admin-post/doUpdateContractTypeField.js'; import handler_doUpdateFee from '../handlers/admin-post/doUpdateFee.js'; import handler_doUpdateFeeAmount from '../handlers/admin-post/doUpdateFeeAmount.js'; import handler_doUpdateFeeCategory from '../handlers/admin-post/doUpdateFeeCategory.js'; -import handler_doUpdateLotOccupantType from '../handlers/admin-post/doUpdateLotOccupantType.js'; -import handler_doUpdateLotStatus from '../handlers/admin-post/doUpdateLotStatus.js'; -import handler_doUpdateLotType from '../handlers/admin-post/doUpdateBurialSiteType.js'; -import handler_doUpdateLotTypeField from '../handlers/admin-post/doUpdateLotTypeField.js'; -import handler_doUpdateOccupancyType from '../handlers/admin-post/doUpdateOccupancyType.js'; -import handler_doUpdateOccupancyTypeField from '../handlers/admin-post/doUpdateContractTypeField.js'; import handler_doUpdateWorkOrderMilestoneType from '../handlers/admin-post/doUpdateWorkOrderMilestoneType.js'; import handler_doUpdateWorkOrderType from '../handlers/admin-post/doUpdateWorkOrderType.js'; // Ntfy Startup @@ -80,40 +75,42 @@ router.post('/doMoveFeeUp', handler_doMoveFeeUp); router.post('/doMoveFeeDown', handler_doMoveFeeDown); router.post('/doDeleteFee', handler_doDeleteFee); /* - * Occupancy Type Management + * Contract Type Management */ -router.get('/occupancyTypes', handler_occupancyTypes); -router.post('/doAddOccupancyType', handler_doAddOccupancyType); -router.post('/doUpdateOccupancyType', handler_doUpdateOccupancyType); -router.post('/doMoveOccupancyTypeUp', handler_doMoveOccupancyTypeUp); -router.post('/doMoveOccupancyTypeDown', handler_doMoveOccupancyTypeDown); -router.post('/doDeleteOccupancyType', handler_doDeleteOccupancyType); -// Occupancy Type Fields -router.post('/doAddOccupancyTypeField', handler_doAddOccupancyTypeField); -router.post('/doUpdateOccupancyTypeField', handler_doUpdateOccupancyTypeField); -router.post('/doMoveOccupancyTypeFieldUp', handler_doMoveOccupancyTypeFieldUp); -router.post('/doMoveOccupancyTypeFieldDown', handler_doMoveOccupancyTypeFieldDown); -router.post('/doDeleteOccupancyTypeField', handler_doDeleteOccupancyTypeField); -// Occupancy Type Prints -router.post('/doAddOccupancyTypePrint', handler_doAddOccupancyTypePrint); -router.post('/doMoveOccupancyTypePrintUp', handler_doMoveOccupancyTypePrintUp); -router.post('/doMoveOccupancyTypePrintDown', handler_doMoveOccupancyTypePrintDown); -router.post('/doDeleteOccupancyTypePrint', handler_doDeleteOccupancyTypePrint); +router.get('/contractTypes', handler_contractTypes); +router.post('/doAddContractType', handler_doAddContractType); +router.post('/doUpdateContractType', handler_doUpdateContractType); +router.post('/doMoveContractTypeUp', handler_doMoveContractTypeUp); +router.post('/doMoveContractTypeDown', handler_doMoveContractTypeDown); +router.post('/doDeleteContractType', handler_doDeleteContractType); +// Contract Type Fields +router.post('/doAddContractTypeField', handler_doAddContractTypeField); +router.post('/doUpdateContractTypeField', handler_doUpdateContractTypeField); +router.post('/doMoveContractTypeFieldUp', handler_doMoveContractTypeFieldUp); +router.post('/doMoveContractTypeFieldDown', handler_doMoveContractTypeFieldDown); +router.post('/doDeleteContractTypeField', handler_doDeleteContractTypeField); +// Contract Type Prints +router.post('/doAddContractTypePrint', handler_doAddContractTypePrint); +router.post('/doMoveContractTypePrintUp', handler_doMoveContractTypePrintUp); +router.post('/doMoveContractTypePrintDown', handler_doMoveContractTypePrintDown); +router.post('/doDeleteContractTypePrint', handler_doDeleteContractTypePrint); /* - * Lot Type Management + * Burial Site Type Management */ -router.get('/lotTypes', handler_burialSiteTypes); -router.post('/doAddLotType', handler_doAddLotType); -router.post('/doUpdateLotType', handler_doUpdateLotType); -router.post('/doMoveLotTypeUp', handler_doMoveLotTypeUp); -router.post('/doMoveLotTypeDown', handler_doMoveLotTypeDown); -router.post('/doDeleteLotType', handler_doDeleteLotType); -// Lot Type Fields -router.post('/doAddLotTypeField', handler_doAddLotTypeField); -router.post('/doUpdateLotTypeField', handler_doUpdateLotTypeField); -router.post('/doMoveLotTypeFieldUp', handler_doMoveLotTypeFieldUp); -router.post('/doMoveLotTypeFieldDown', handler_doMoveLotTypeFieldDown); -router.post('/doDeleteLotTypeField', handler_doDeleteLotTypeField); +router.get('/burialSiteTypes', handler_burialSiteTypes); +router.post('/doAddBurialSiteType', handler_doAddBurialSiteType); +router.post('/doUpdateBurialSiteType', handler_updateBurialSiteType); +router.post('/doMoveBurialSiteTypeUp', handler_doMoveBurialSiteTypeUp); +router.post('/doMoveBurialSiteTypeDown', handler_doMoveBurialSiteTypeDown); +router.post('/doDeleteBurialSiteType', handler_doDeleteBurialSiteType); +// Burial Site Type Fields +router.post('/doAddBurialSiteTypeField', handler_doAddBurialSiteTypeField); +router.post('/doUpdateBurialSiteTypeField', handler_doUpdateBurialSiteTypeField); +router.post('/doMoveBurialSiteTypeFieldUp', handler_doMoveBurialSiteTypeFieldUp); +router.post( +// eslint-disable-next-line no-secrets/no-secrets +'/doMoveBurialSiteTypeFieldDown', handler_doMoveBurialSiteTypeFieldDown); +router.post('/doDeleteBurialSiteTypeField', handler_doDeleteBurialSiteTypeField); /* * Config Tables */ @@ -130,18 +127,12 @@ router.post('/doUpdateWorkOrderMilestoneType', handler_doUpdateWorkOrderMileston router.post('/doMoveWorkOrderMilestoneTypeUp', handler_doMoveWorkOrderMilestoneTypeUp); router.post('/doMoveWorkOrderMilestoneTypeDown', handler_doMoveWorkOrderMilestoneTypeDown); router.post('/doDeleteWorkOrderMilestoneType', handler_doDeleteWorkOrderMilestoneType); -// Config Tables - Lot Statuses -router.post('/doAddLotStatus', handler_doAddLotStatus); -router.post('/doUpdateLotStatus', handler_doUpdateLotStatus); -router.post('/doMoveLotStatusUp', handler_doMoveLotStatusUp); -router.post('/doMoveLotStatusDown', handler_doMoveLotStatusDown); -router.post('/doDeleteLotStatus', handler_doDeleteLotStatus); -// Config Tables - Lot Occupant Types -router.post('/doAddLotOccupantType', handler_doAddLotOccupantType); -router.post('/doUpdateLotOccupantType', handler_doUpdateLotOccupantType); -router.post('/doMoveLotOccupantTypeUp', handler_doMoveLotOccupantTypeUp); -router.post('/doMoveLotOccupantTypeDown', handler_doMoveLotOccupantTypeDown); -router.post('/doDeleteLotOccupantType', handler_doDeleteLotOccupantType); +// Config Tables - Burial Site Statuses +router.post('/doAddBurialSiteStatus', handler_doAddBurialSiteStatus); +router.post('/doUpdateBurialSiteStatus', handler_doUpdateBurialSiteStatus); +router.post('/doMoveBurialSiteStatusUp', handler_doMoveBurialSiteStatusUp); +router.post('/doMoveBurialSiteStatusDown', handler_doMoveBurialSiteStatusDown); +router.post('/doDeleteBurialSiteStatus', handler_doDeleteBurialSiteStatus); /* * Database Maintenance */ diff --git a/routes/admin.ts b/routes/admin.ts index 55044cb5..46552521 100644 --- a/routes/admin.ts +++ b/routes/admin.ts @@ -1,66 +1,61 @@ import { Router } from 'express' import handler_burialSiteTypes from '../handlers/admin-get/burialSiteTypes.js' +import handler_contractTypes from '../handlers/admin-get/contractTypes.js' import handler_database from '../handlers/admin-get/database.js' import handler_fees from '../handlers/admin-get/fees.js' import handler_ntfyStartup from '../handlers/admin-get/ntfyStartup.js' -import handler_occupancyTypes from '../handlers/admin-get/occupancyTypes.js' import handler_tables from '../handlers/admin-get/tables.js' +import handler_doAddBurialSiteStatus from '../handlers/admin-post/doAddBurialSiteStatus.js' +import handler_doAddBurialSiteType from '../handlers/admin-post/doAddBurialSiteType.js' +import handler_doAddBurialSiteTypeField from '../handlers/admin-post/doAddBurialSiteTypeField.js' +import handler_doAddContractType from '../handlers/admin-post/doAddContractType.js' +import handler_doAddContractTypeField from '../handlers/admin-post/doAddContractTypeField.js' +import handler_doAddContractTypePrint from '../handlers/admin-post/doAddContractTypePrint.js' import handler_doAddFee from '../handlers/admin-post/doAddFee.js' import handler_doAddFeeCategory from '../handlers/admin-post/doAddFeeCategory.js' -import handler_doAddLotOccupantType from '../handlers/admin-post/doAddLotOccupantType.js' -import handler_doAddLotStatus from '../handlers/admin-post/doAddLotStatus.js' -import handler_doAddLotType from '../handlers/admin-post/doAddBurialSiteType.js' -import handler_doAddLotTypeField from '../handlers/admin-post/doAddLotTypeField.js' -import handler_doAddOccupancyType from '../handlers/admin-post/doAddOccupancyType.js' -import handler_doAddOccupancyTypeField from '../handlers/admin-post/doAddOccupancyTypeField.js' -import handler_doAddOccupancyTypePrint from '../handlers/admin-post/doAddOccupancyTypePrint.js' import handler_doAddWorkOrderMilestoneType from '../handlers/admin-post/doAddWorkOrderMilestoneType.js' import handler_doAddWorkOrderType from '../handlers/admin-post/doAddWorkOrderType.js' import handler_doBackupDatabase from '../handlers/admin-post/doBackupDatabase.js' import handler_doCleanupDatabase from '../handlers/admin-post/doCleanupDatabase.js' +import handler_doDeleteBurialSiteStatus from '../handlers/admin-post/doDeleteBurialSiteStatus.js' +import handler_doDeleteBurialSiteType from '../handlers/admin-post/doDeleteBurialSiteType.js' +import handler_doDeleteBurialSiteTypeField from '../handlers/admin-post/doDeleteBurialSiteTypeField.js' +import handler_doDeleteContractType from '../handlers/admin-post/doDeleteContractType.js' +import handler_doDeleteContractTypeField from '../handlers/admin-post/doDeleteContractTypeField.js' +import handler_doDeleteContractTypePrint from '../handlers/admin-post/doDeleteContractTypePrint.js' import handler_doDeleteFee from '../handlers/admin-post/doDeleteFee.js' import handler_doDeleteFeeCategory from '../handlers/admin-post/doDeleteFeeCategory.js' -import handler_doDeleteLotOccupantType from '../handlers/admin-post/doDeleteLotOccupantType.js' -import handler_doDeleteLotStatus from '../handlers/admin-post/doDeleteLotStatus.js' -import handler_doDeleteLotType from '../handlers/admin-post/doDeleteLotType.js' -import handler_doDeleteLotTypeField from '../handlers/admin-post/doDeleteLotTypeField.js' -import handler_doDeleteOccupancyType from '../handlers/admin-post/doDeleteOccupancyType.js' -import handler_doDeleteOccupancyTypeField from '../handlers/admin-post/doDeleteOccupancyTypeField.js' -import handler_doDeleteOccupancyTypePrint from '../handlers/admin-post/doDeleteOccupancyTypePrint.js' import handler_doDeleteWorkOrderMilestoneType from '../handlers/admin-post/doDeleteWorkOrderMilestoneType.js' import handler_doDeleteWorkOrderType from '../handlers/admin-post/doDeleteWorkOrderType.js' +import handler_doMoveBurialSiteStatusDown from '../handlers/admin-post/doMoveBurialSiteStatusDown.js' +import handler_doMoveBurialSiteStatusUp from '../handlers/admin-post/doMoveBurialSiteStatusUp.js' +import handler_doMoveBurialSiteTypeDown from '../handlers/admin-post/doMoveBurialSiteTypeDown.js' +import handler_doMoveBurialSiteTypeFieldDown from '../handlers/admin-post/doMoveBurialSiteTypeFieldDown.js' +import handler_doMoveBurialSiteTypeFieldUp from '../handlers/admin-post/doMoveBurialSiteTypeFieldUp.js' +import handler_doMoveBurialSiteTypeUp from '../handlers/admin-post/doMoveBurialSiteTypeUp.js' +import handler_doMoveContractTypeDown from '../handlers/admin-post/doMoveContractTypeDown.js' +import handler_doMoveContractTypeFieldDown from '../handlers/admin-post/doMoveContractTypeFieldDown.js' +import handler_doMoveContractTypeFieldUp from '../handlers/admin-post/doMoveContractTypeFieldUp.js' +import handler_doMoveContractTypePrintDown from '../handlers/admin-post/doMoveContractTypePrintDown.js' +import handler_doMoveContractTypePrintUp from '../handlers/admin-post/doMoveContractTypePrintUp.js' +import handler_doMoveContractTypeUp from '../handlers/admin-post/doMoveContractTypeUp.js' import handler_doMoveFeeCategoryDown from '../handlers/admin-post/doMoveFeeCategoryDown.js' import handler_doMoveFeeCategoryUp from '../handlers/admin-post/doMoveFeeCategoryUp.js' import handler_doMoveFeeDown from '../handlers/admin-post/doMoveFeeDown.js' import handler_doMoveFeeUp from '../handlers/admin-post/doMoveFeeUp.js' -import handler_doMoveLotOccupantTypeDown from '../handlers/admin-post/doMoveLotOccupantTypeDown.js' -import handler_doMoveLotOccupantTypeUp from '../handlers/admin-post/doMoveLotOccupantTypeUp.js' -import handler_doMoveLotStatusDown from '../handlers/admin-post/doMoveLotStatusDown.js' -import handler_doMoveLotStatusUp from '../handlers/admin-post/doMoveLotStatusUp.js' -import handler_doMoveLotTypeDown from '../handlers/admin-post/doMoveLotTypeDown.js' -import handler_doMoveLotTypeFieldDown from '../handlers/admin-post/doMoveLotTypeFieldDown.js' -import handler_doMoveLotTypeFieldUp from '../handlers/admin-post/doMoveLotTypeFieldUp.js' -import handler_doMoveLotTypeUp from '../handlers/admin-post/doMoveBurialSiteTypeUp.js' -import handler_doMoveOccupancyTypeDown from '../handlers/admin-post/doMoveOccupancyTypeDown.js' -import handler_doMoveOccupancyTypeFieldDown from '../handlers/admin-post/doMoveContractTypeFieldDown.js' -import handler_doMoveOccupancyTypeFieldUp from '../handlers/admin-post/doMoveContractTypeFieldUp.js' -import handler_doMoveOccupancyTypePrintDown from '../handlers/admin-post/doMoveOccupancyTypePrintDown.js' -import handler_doMoveOccupancyTypePrintUp from '../handlers/admin-post/doMoveOccupancyTypePrintUp.js' -import handler_doMoveOccupancyTypeUp from '../handlers/admin-post/doMoveContractTypeUp.js' import handler_doMoveWorkOrderMilestoneTypeDown from '../handlers/admin-post/doMoveWorkOrderMilestoneTypeDown.js' import handler_doMoveWorkOrderMilestoneTypeUp from '../handlers/admin-post/doMoveWorkOrderMilestoneTypeUp.js' import handler_doMoveWorkOrderTypeDown from '../handlers/admin-post/doMoveWorkOrderTypeDown.js' import handler_doMoveWorkOrderTypeUp from '../handlers/admin-post/doMoveWorkOrderTypeUp.js' +import handler_doUpdateBurialSiteStatus from '../handlers/admin-post/doUpdateBurialSiteStatus.js' +import handler_updateBurialSiteType from '../handlers/admin-post/doUpdateBurialSiteType.js' +import handler_doUpdateBurialSiteTypeField from '../handlers/admin-post/doUpdateBurialSiteTypeField.js' +import handler_doUpdateContractType from '../handlers/admin-post/doUpdateContractType.js' +import handler_doUpdateContractTypeField from '../handlers/admin-post/doUpdateContractTypeField.js' import handler_doUpdateFee from '../handlers/admin-post/doUpdateFee.js' import handler_doUpdateFeeAmount from '../handlers/admin-post/doUpdateFeeAmount.js' import handler_doUpdateFeeCategory from '../handlers/admin-post/doUpdateFeeCategory.js' -import handler_doUpdateLotOccupantType from '../handlers/admin-post/doUpdateLotOccupantType.js' -import handler_doUpdateLotStatus from '../handlers/admin-post/doUpdateLotStatus.js' -import handler_doUpdateLotType from '../handlers/admin-post/doUpdateBurialSiteType.js' -import handler_doUpdateLotTypeField from '../handlers/admin-post/doUpdateLotTypeField.js' -import handler_doUpdateOccupancyType from '../handlers/admin-post/doUpdateOccupancyType.js' -import handler_doUpdateOccupancyTypeField from '../handlers/admin-post/doUpdateContractTypeField.js' import handler_doUpdateWorkOrderMilestoneType from '../handlers/admin-post/doUpdateWorkOrderMilestoneType.js' import handler_doUpdateWorkOrderType from '../handlers/admin-post/doUpdateWorkOrderType.js' @@ -97,76 +92,74 @@ router.post('/doMoveFeeDown', handler_doMoveFeeDown) router.post('/doDeleteFee', handler_doDeleteFee) /* - * Occupancy Type Management + * Contract Type Management */ -router.get('/occupancyTypes', handler_occupancyTypes) +router.get('/contractTypes', handler_contractTypes) -router.post('/doAddOccupancyType', handler_doAddOccupancyType) +router.post('/doAddContractType', handler_doAddContractType) -router.post('/doUpdateOccupancyType', handler_doUpdateOccupancyType) +router.post('/doUpdateContractType', handler_doUpdateContractType) -router.post('/doMoveOccupancyTypeUp', handler_doMoveOccupancyTypeUp) +router.post('/doMoveContractTypeUp', handler_doMoveContractTypeUp) -router.post('/doMoveOccupancyTypeDown', handler_doMoveOccupancyTypeDown) +router.post('/doMoveContractTypeDown', handler_doMoveContractTypeDown) -router.post('/doDeleteOccupancyType', handler_doDeleteOccupancyType) +router.post('/doDeleteContractType', handler_doDeleteContractType) -// Occupancy Type Fields +// Contract Type Fields -router.post('/doAddOccupancyTypeField', handler_doAddOccupancyTypeField) +router.post('/doAddContractTypeField', handler_doAddContractTypeField) -router.post('/doUpdateOccupancyTypeField', handler_doUpdateOccupancyTypeField) +router.post('/doUpdateContractTypeField', handler_doUpdateContractTypeField) -router.post('/doMoveOccupancyTypeFieldUp', handler_doMoveOccupancyTypeFieldUp) +router.post('/doMoveContractTypeFieldUp', handler_doMoveContractTypeFieldUp) -router.post( - '/doMoveOccupancyTypeFieldDown', - handler_doMoveOccupancyTypeFieldDown -) +router.post('/doMoveContractTypeFieldDown', handler_doMoveContractTypeFieldDown) -router.post('/doDeleteOccupancyTypeField', handler_doDeleteOccupancyTypeField) +router.post('/doDeleteContractTypeField', handler_doDeleteContractTypeField) -// Occupancy Type Prints +// Contract Type Prints -router.post('/doAddOccupancyTypePrint', handler_doAddOccupancyTypePrint) +router.post('/doAddContractTypePrint', handler_doAddContractTypePrint) -router.post('/doMoveOccupancyTypePrintUp', handler_doMoveOccupancyTypePrintUp) +router.post('/doMoveContractTypePrintUp', handler_doMoveContractTypePrintUp) -router.post( - '/doMoveOccupancyTypePrintDown', - handler_doMoveOccupancyTypePrintDown -) +router.post('/doMoveContractTypePrintDown', handler_doMoveContractTypePrintDown) -router.post('/doDeleteOccupancyTypePrint', handler_doDeleteOccupancyTypePrint) +router.post('/doDeleteContractTypePrint', handler_doDeleteContractTypePrint) /* - * Lot Type Management + * Burial Site Type Management */ -router.get('/lotTypes', handler_burialSiteTypes) +router.get('/burialSiteTypes', handler_burialSiteTypes) -router.post('/doAddLotType', handler_doAddLotType) +router.post('/doAddBurialSiteType', handler_doAddBurialSiteType) -router.post('/doUpdateLotType', handler_doUpdateLotType) +router.post('/doUpdateBurialSiteType', handler_updateBurialSiteType) -router.post('/doMoveLotTypeUp', handler_doMoveLotTypeUp) +router.post('/doMoveBurialSiteTypeUp', handler_doMoveBurialSiteTypeUp) -router.post('/doMoveLotTypeDown', handler_doMoveLotTypeDown) +router.post('/doMoveBurialSiteTypeDown', handler_doMoveBurialSiteTypeDown) -router.post('/doDeleteLotType', handler_doDeleteLotType) +router.post('/doDeleteBurialSiteType', handler_doDeleteBurialSiteType) -// Lot Type Fields +// Burial Site Type Fields -router.post('/doAddLotTypeField', handler_doAddLotTypeField) +router.post('/doAddBurialSiteTypeField', handler_doAddBurialSiteTypeField) -router.post('/doUpdateLotTypeField', handler_doUpdateLotTypeField) +router.post('/doUpdateBurialSiteTypeField', handler_doUpdateBurialSiteTypeField) -router.post('/doMoveLotTypeFieldUp', handler_doMoveLotTypeFieldUp) +router.post('/doMoveBurialSiteTypeFieldUp', handler_doMoveBurialSiteTypeFieldUp) -router.post('/doMoveLotTypeFieldDown', handler_doMoveLotTypeFieldDown) +router.post( + // eslint-disable-next-line no-secrets/no-secrets + '/doMoveBurialSiteTypeFieldDown', + handler_doMoveBurialSiteTypeFieldDown +) -router.post('/doDeleteLotTypeField', handler_doDeleteLotTypeField) +router.post('/doDeleteBurialSiteTypeField', handler_doDeleteBurialSiteTypeField) /* * Config Tables @@ -185,6 +178,7 @@ router.post('/doMoveWorkOrderTypeUp', handler_doMoveWorkOrderTypeUp) router.post('/doMoveWorkOrderTypeDown', handler_doMoveWorkOrderTypeDown) router.post('/doDeleteWorkOrderType', handler_doDeleteWorkOrderType) + // Config Tables - Work Order Milestone Types router.post( @@ -213,29 +207,17 @@ router.post( handler_doDeleteWorkOrderMilestoneType ) -// Config Tables - Lot Statuses +// Config Tables - Burial Site Statuses -router.post('/doAddLotStatus', handler_doAddLotStatus) +router.post('/doAddBurialSiteStatus', handler_doAddBurialSiteStatus) -router.post('/doUpdateLotStatus', handler_doUpdateLotStatus) +router.post('/doUpdateBurialSiteStatus', handler_doUpdateBurialSiteStatus) -router.post('/doMoveLotStatusUp', handler_doMoveLotStatusUp) +router.post('/doMoveBurialSiteStatusUp', handler_doMoveBurialSiteStatusUp) -router.post('/doMoveLotStatusDown', handler_doMoveLotStatusDown) +router.post('/doMoveBurialSiteStatusDown', handler_doMoveBurialSiteStatusDown) -router.post('/doDeleteLotStatus', handler_doDeleteLotStatus) - -// Config Tables - Lot Occupant Types - -router.post('/doAddLotOccupantType', handler_doAddLotOccupantType) - -router.post('/doUpdateLotOccupantType', handler_doUpdateLotOccupantType) - -router.post('/doMoveLotOccupantTypeUp', handler_doMoveLotOccupantTypeUp) - -router.post('/doMoveLotOccupantTypeDown', handler_doMoveLotOccupantTypeDown) - -router.post('/doDeleteLotOccupantType', handler_doDeleteLotOccupantType) +router.post('/doDeleteBurialSiteStatus', handler_doDeleteBurialSiteStatus) /* * Database Maintenance diff --git a/routes/burialSites.js b/routes/burialSites.js index 60c5f364..cbd58272 100644 --- a/routes/burialSites.js +++ b/routes/burialSites.js @@ -5,21 +5,21 @@ import handler_next from '../handlers/burialSites-get/next.js'; import handler_previous from '../handlers/burialSites-get/previous.js'; import handler_search from '../handlers/burialSites-get/search.js'; import handler_view from '../handlers/burialSites-get/view.js'; -import handler_doAddLotComment from '../handlers/burialSites-post/doAddLotComment.js'; -import handler_doCreateLot from '../handlers/burialSites-post/doCreateLot.js'; -import handler_doDeleteLot from '../handlers/burialSites-post/doDeleteLot.js'; -import handler_doDeleteLotComment from '../handlers/burialSites-post/doDeleteLotComment.js'; +import handler_doAddBurialSiteComment from '../handlers/burialSites-post/doAddBurialSiteComment.js'; +import handler_doCreateBurialSite from '../handlers/burialSites-post/doCreateBurialSite.js'; +import handler_doDeleteBurialSite from '../handlers/burialSites-post/doDeleteBurialSite.js'; +import handler_doDeleteBurialSiteComment from '../handlers/burialSites-post/doDeleteBurialSiteComment.js'; import handler_doGetBurialSiteTypeFields from '../handlers/burialSites-post/doGetBurialSiteTypeFields.js'; -import handler_doSearchLots from '../handlers/burialSites-post/doSearchLots.js'; -import handler_doUpdateLot from '../handlers/burialSites-post/doUpdateLot.js'; -import handler_doUpdateLotComment from '../handlers/burialSites-post/doUpdateLotComment.js'; +import handler_doSearchBurialSites from '../handlers/burialSites-post/doSearchBurialSites.js'; +import handler_doUpdateBurialSite from '../handlers/burialSites-post/doUpdateBurialSite.js'; +import handler_doUpdateBurialSiteComment from '../handlers/burialSites-post/doUpdateBurialSiteComment.js'; import { updateGetHandler, updatePostHandler } from '../handlers/permissions.js'; export const router = Router(); /* * Lot Search */ router.get('/', handler_search); -router.post('/doSearchLots', handler_doSearchLots); +router.post('/doSearchBurialSites', handler_doSearchBurialSites); /* * Lot View / Edit */ @@ -29,10 +29,10 @@ router.get('/:lotId/next', handler_next); router.get('/:lotId/previous', handler_previous); router.get('/:lotId/edit', updateGetHandler, handler_edit); router.post('/doGetBurialSiteTypeFields', updatePostHandler, handler_doGetBurialSiteTypeFields); -router.post('/doCreateLot', updatePostHandler, handler_doCreateLot); -router.post('/doUpdateLot', updatePostHandler, handler_doUpdateLot); -router.post('/doDeleteLot', updatePostHandler, handler_doDeleteLot); -router.post('/doAddLotComment', updatePostHandler, handler_doAddLotComment); -router.post('/doUpdateLotComment', updatePostHandler, handler_doUpdateLotComment); -router.post('/doDeleteLotComment', updatePostHandler, handler_doDeleteLotComment); +router.post('/doCreateBurialSite', updatePostHandler, handler_doCreateBurialSite); +router.post('/doUpdateBurialSite', updatePostHandler, handler_doUpdateBurialSite); +router.post('/doDeleteBurialSite', updatePostHandler, handler_doDeleteBurialSite); +router.post('/doAddBurialSiteComment', updatePostHandler, handler_doAddBurialSiteComment); +router.post('/doUpdateBurialSiteComment', updatePostHandler, handler_doUpdateBurialSiteComment); +router.post('/doDeleteBurialSiteComment', updatePostHandler, handler_doDeleteBurialSiteComment); export default router; diff --git a/routes/burialSites.ts b/routes/burialSites.ts index 1c4231b4..2602be8a 100644 --- a/routes/burialSites.ts +++ b/routes/burialSites.ts @@ -6,14 +6,14 @@ import handler_next from '../handlers/burialSites-get/next.js' import handler_previous from '../handlers/burialSites-get/previous.js' import handler_search from '../handlers/burialSites-get/search.js' import handler_view from '../handlers/burialSites-get/view.js' -import handler_doAddLotComment from '../handlers/burialSites-post/doAddLotComment.js' -import handler_doCreateLot from '../handlers/burialSites-post/doCreateLot.js' -import handler_doDeleteLot from '../handlers/burialSites-post/doDeleteLot.js' -import handler_doDeleteLotComment from '../handlers/burialSites-post/doDeleteLotComment.js' +import handler_doAddBurialSiteComment from '../handlers/burialSites-post/doAddBurialSiteComment.js' +import handler_doCreateBurialSite from '../handlers/burialSites-post/doCreateBurialSite.js' +import handler_doDeleteBurialSite from '../handlers/burialSites-post/doDeleteBurialSite.js' +import handler_doDeleteBurialSiteComment from '../handlers/burialSites-post/doDeleteBurialSiteComment.js' import handler_doGetBurialSiteTypeFields from '../handlers/burialSites-post/doGetBurialSiteTypeFields.js' -import handler_doSearchLots from '../handlers/burialSites-post/doSearchLots.js' -import handler_doUpdateLot from '../handlers/burialSites-post/doUpdateLot.js' -import handler_doUpdateLotComment from '../handlers/burialSites-post/doUpdateLotComment.js' +import handler_doSearchBurialSites from '../handlers/burialSites-post/doSearchBurialSites.js' +import handler_doUpdateBurialSite from '../handlers/burialSites-post/doUpdateBurialSite.js' +import handler_doUpdateBurialSiteComment from '../handlers/burialSites-post/doUpdateBurialSiteComment.js' import { updateGetHandler, updatePostHandler } from '../handlers/permissions.js' export const router = Router() @@ -24,7 +24,7 @@ export const router = Router() router.get('/', handler_search) -router.post('/doSearchLots', handler_doSearchLots) +router.post('/doSearchBurialSites', handler_doSearchBurialSites) /* * Lot View / Edit @@ -47,39 +47,39 @@ router.post( ) router.post( - '/doCreateLot', + '/doCreateBurialSite', updatePostHandler, - handler_doCreateLot + handler_doCreateBurialSite ) router.post( - '/doUpdateLot', + '/doUpdateBurialSite', updatePostHandler, - handler_doUpdateLot + handler_doUpdateBurialSite ) router.post( - '/doDeleteLot', + '/doDeleteBurialSite', updatePostHandler, - handler_doDeleteLot + handler_doDeleteBurialSite ) router.post( - '/doAddLotComment', + '/doAddBurialSiteComment', updatePostHandler, - handler_doAddLotComment + handler_doAddBurialSiteComment ) router.post( - '/doUpdateLotComment', + '/doUpdateBurialSiteComment', updatePostHandler, - handler_doUpdateLotComment + handler_doUpdateBurialSiteComment ) router.post( - '/doDeleteLotComment', + '/doDeleteBurialSiteComment', updatePostHandler, - handler_doDeleteLotComment + handler_doDeleteBurialSiteComment ) export default router diff --git a/routes/cemeteries.js b/routes/cemeteries.js index d8629786..83716921 100644 --- a/routes/cemeteries.js +++ b/routes/cemeteries.js @@ -5,9 +5,9 @@ import handler_next from '../handlers/cemeteries-get/next.js'; import handler_previous from '../handlers/cemeteries-get/previous.js'; import handler_search from '../handlers/cemeteries-get/search.js'; import handler_view from '../handlers/cemeteries-get/view.js'; -import handler_doCreateMap from '../handlers/cemeteries-post/doCreateCemetery.js'; -import handler_doDeleteMap from '../handlers/cemeteries-post/doDeleteCemetery.js'; -import handler_doUpdateMap from '../handlers/cemeteries-post/doUpdateCemetery.js'; +import handler_doCreateCemetery from '../handlers/cemeteries-post/doCreateCemetery.js'; +import handler_doDeleteCemetery from '../handlers/cemeteries-post/doDeleteCemetery.js'; +import handler_doUpdateCemetery from '../handlers/cemeteries-post/doUpdateCemetery.js'; import { updateGetHandler, updatePostHandler } from '../handlers/permissions.js'; export const router = Router(); router.get('/', handler_search); @@ -16,7 +16,7 @@ router.get('/:cemeteryId', handler_view); router.get('/:cemeteryId/next', handler_next); router.get('/:cemeteryId/previous', handler_previous); router.get('/:cemeteryId/edit', updateGetHandler, handler_edit); -router.post('/doCreateCemetery', updatePostHandler, handler_doCreateMap); -router.post('/doUpdateCemetery', updatePostHandler, handler_doUpdateMap); -router.post('/doDeleteCemetery', updatePostHandler, handler_doDeleteMap); +router.post('/doCreateCemetery', updatePostHandler, handler_doCreateCemetery); +router.post('/doUpdateCemetery', updatePostHandler, handler_doUpdateCemetery); +router.post('/doDeleteCemetery', updatePostHandler, handler_doDeleteCemetery); export default router; diff --git a/routes/cemeteries.ts b/routes/cemeteries.ts index 4d9b2780..ee6b4090 100644 --- a/routes/cemeteries.ts +++ b/routes/cemeteries.ts @@ -6,9 +6,9 @@ import handler_next from '../handlers/cemeteries-get/next.js' import handler_previous from '../handlers/cemeteries-get/previous.js' import handler_search from '../handlers/cemeteries-get/search.js' import handler_view from '../handlers/cemeteries-get/view.js' -import handler_doCreateMap from '../handlers/cemeteries-post/doCreateCemetery.js' -import handler_doDeleteMap from '../handlers/cemeteries-post/doDeleteCemetery.js' -import handler_doUpdateMap from '../handlers/cemeteries-post/doUpdateCemetery.js' +import handler_doCreateCemetery from '../handlers/cemeteries-post/doCreateCemetery.js' +import handler_doDeleteCemetery from '../handlers/cemeteries-post/doDeleteCemetery.js' +import handler_doUpdateCemetery from '../handlers/cemeteries-post/doUpdateCemetery.js' import { updateGetHandler, updatePostHandler } from '../handlers/permissions.js' export const router = Router() @@ -28,19 +28,19 @@ router.get('/:cemeteryId/edit', updateGetHandler, handler_edit) router.post( '/doCreateCemetery', updatePostHandler, - handler_doCreateMap + handler_doCreateCemetery ) router.post( '/doUpdateCemetery', updatePostHandler, - handler_doUpdateMap + handler_doUpdateCemetery ) router.post( '/doDeleteCemetery', updatePostHandler, - handler_doDeleteMap + handler_doDeleteCemetery ) export default router diff --git a/routes/contracts.js b/routes/contracts.js index c2df98ee..7faeda81 100644 --- a/routes/contracts.js +++ b/routes/contracts.js @@ -3,65 +3,56 @@ import handler_edit from '../handlers/contracts-get/edit.js'; import handler_new from '../handlers/contracts-get/new.js'; import handler_search from '../handlers/contracts-get/search.js'; import handler_view from '../handlers/contracts-get/view.js'; -import handler_doAddLotOccupancyComment from '../handlers/contracts-post/doAddLotOccupancyComment.js'; -import handler_doAddLotOccupancyFee from '../handlers/contracts-post/doAddBurialSiteContractFee.js'; -import handler_doAddLotOccupancyFeeCategory from '../handlers/contracts-post/doAddLotOccupancyFeeCategory.js'; -import handler_doAddLotOccupancyOccupant from '../handlers/contracts-post/doAddLotOccupancyOccupant.js'; -import handler_doAddLotOccupancyTransaction from '../handlers/contracts-post/doAddBurialSiteContractTransaction.js'; -import handler_doCopyLotOccupancy from '../handlers/contracts-post/doCopyLotOccupancy.js'; -import handler_doCreateLotOccupancy from '../handlers/contracts-post/doCreateBurialSiteContract.js'; -import handler_doDeleteLotOccupancy from '../handlers/contracts-post/doDeleteLotOccupancy.js'; -import handler_doDeleteLotOccupancyComment from '../handlers/contracts-post/doDeleteLotOccupancyComment.js'; -import handler_doDeleteLotOccupancyFee from '../handlers/contracts-post/doDeleteLotOccupancyFee.js'; -import handler_doDeleteLotOccupancyOccupant from '../handlers/contracts-post/doDeleteLotOccupancyOccupant.js'; -import handler_doDeleteLotOccupancyTransaction from '../handlers/contracts-post/doDeleteBurialSiteContractTransaction.js'; +import handler_doAddBurialSiteContractComment from '../handlers/contracts-post/doAddBurialSiteContractComment.js'; +import handler_doAddBurialSiteContractFee from '../handlers/contracts-post/doAddBurialSiteContractFee.js'; +import handler_doAddBurialSiteContractFeeCategory from '../handlers/contracts-post/doAddBurialSiteContractFeeCategory.js'; +import handler_doAddBurialSiteContractTransaction from '../handlers/contracts-post/doAddBurialSiteContractTransaction.js'; +import handler_doCopyBurialSiteContract from '../handlers/contracts-post/doCopyBurialSiteContract.js'; +import handler_doCreateBurialSiteContract from '../handlers/contracts-post/doCreateBurialSiteContract.js'; +import handler_doDeleteBurialSiteContract from '../handlers/contracts-post/doDeleteBurialSiteContract.js'; +import handler_doDeleteBurialSiteContractComment from '../handlers/contracts-post/doDeleteBurialSiteContractComment.js'; +import handler_doDeleteBurialSiteContractFee from '../handlers/contracts-post/doDeleteBurialSiteContractFee.js'; +import handler_doDeleteBurialSiteContractTransaction from '../handlers/contracts-post/doDeleteBurialSiteContractTransaction.js'; +import handler_doGetContractTypeFields from '../handlers/contracts-post/doGetContractTypeFields.js'; import handler_doGetDynamicsGPDocument from '../handlers/contracts-post/doGetDynamicsGPDocument.js'; import handler_doGetFees from '../handlers/contracts-post/doGetFees.js'; -import handler_doGetContractTypeFields from '../handlers/contracts-post/doGetContractTypeFields.js'; -import handler_doSearchLotOccupancies from '../handlers/contracts-post/doSearchBurialSiteContracts.js'; -import handler_doSearchPastOccupants from '../handlers/contracts-post/doSearchPastOccupants.js'; -import handler_doUpdateLotOccupancy from '../handlers/contracts-post/doUpdateLotOccupancy.js'; -import handler_doUpdateLotOccupancyComment from '../handlers/contracts-post/doUpdateBurialSiteContractComment.js'; -import handler_doUpdateLotOccupancyFeeQuantity from '../handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.js'; -import handler_doUpdateLotOccupancyOccupant from '../handlers/contracts-post/doUpdateLotOccupancyOccupant.js'; -import handler_doUpdateLotOccupancyTransaction from '../handlers/contracts-post/doUpdateBurialSiteContractTransaction.js'; +import handler_doSearchBurialSiteContracts from '../handlers/contracts-post/doSearchBurialSiteContracts.js'; +import handler_doUpdateBurialSiteContract from '../handlers/contracts-post/doUpdateBurialSiteContract.js'; +import handler_doUpdateBurialSiteContractComment from '../handlers/contracts-post/doUpdateBurialSiteContractComment.js'; +import handler_doUpdateBurialSiteContractFeeQuantity from '../handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.js'; +import handler_doUpdateBurialSiteContractTransaction from '../handlers/contracts-post/doUpdateBurialSiteContractTransaction.js'; import { updateGetHandler, updatePostHandler } from '../handlers/permissions.js'; import { getConfigProperty } from '../helpers/config.helpers.js'; export const router = Router(); // Search router.get('/', handler_search); -router.post('/doSearchLotOccupancies', handler_doSearchLotOccupancies); +router.post('/doSearchBurialSiteContracts', handler_doSearchBurialSiteContracts); // Create router.get('/new', updateGetHandler, handler_new); router.post('/doGetContractTypeFields', updatePostHandler, handler_doGetContractTypeFields); -router.post('/doCreateLotOccupancy', updatePostHandler, handler_doCreateLotOccupancy); +router.post('/doCreateBurialSiteContract', updatePostHandler, handler_doCreateBurialSiteContract); // View router.get('/:burialSiteContractId', handler_view); // Edit router.get('/:burialSiteContractId/edit', updateGetHandler, handler_edit); -router.post('/doUpdateLotOccupancy', updatePostHandler, handler_doUpdateLotOccupancy); -router.post('/doCopyLotOccupancy', updatePostHandler, handler_doCopyLotOccupancy); -router.post('/doDeleteLotOccupancy', updatePostHandler, handler_doDeleteLotOccupancy); -// Occupants -router.post('/doSearchPastOccupants', updatePostHandler, handler_doSearchPastOccupants); -router.post('/doAddLotOccupancyOccupant', updatePostHandler, handler_doAddLotOccupancyOccupant); -router.post('/doUpdateLotOccupancyOccupant', updatePostHandler, handler_doUpdateLotOccupancyOccupant); -router.post('/doDeleteLotOccupancyOccupant', updatePostHandler, handler_doDeleteLotOccupancyOccupant); +router.post('/doUpdateBurialSiteContract', updatePostHandler, handler_doUpdateBurialSiteContract); +router.post('/doCopyBurialSiteContract', updatePostHandler, handler_doCopyBurialSiteContract); +router.post('/doDeleteBurialSiteContract', updatePostHandler, handler_doDeleteBurialSiteContract); // Comments -router.post('/doAddLotOccupancyComment', updatePostHandler, handler_doAddLotOccupancyComment); -router.post('/doUpdateLotOccupancyComment', updatePostHandler, handler_doUpdateLotOccupancyComment); -router.post('/doDeleteLotOccupancyComment', updatePostHandler, handler_doDeleteLotOccupancyComment); +router.post('/doAddBurialSiteContractComment', updatePostHandler, handler_doAddBurialSiteContractComment); +router.post('/doUpdateBurialSiteContractComment', updatePostHandler, handler_doUpdateBurialSiteContractComment); +router.post('/doDeleteBurialSiteContractComment', updatePostHandler, handler_doDeleteBurialSiteContractComment); // Fees router.post('/doGetFees', updatePostHandler, handler_doGetFees); -router.post('/doAddLotOccupancyFee', updatePostHandler, handler_doAddLotOccupancyFee); -router.post('/doAddLotOccupancyFeeCategory', updatePostHandler, handler_doAddLotOccupancyFeeCategory); -router.post('/doUpdateLotOccupancyFeeQuantity', updatePostHandler, handler_doUpdateLotOccupancyFeeQuantity); -router.post('/doDeleteLotOccupancyFee', updatePostHandler, handler_doDeleteLotOccupancyFee); +router.post('/doAddBurialSiteContractFee', updatePostHandler, handler_doAddBurialSiteContractFee); +router.post('/doAddBurialSiteContractFeeCategory', updatePostHandler, handler_doAddBurialSiteContractFeeCategory); +router.post('/doUpdateBurialSiteContractFeeQuantity', updatePostHandler, handler_doUpdateBurialSiteContractFeeQuantity); +router.post('/doDeleteBurialSiteContractFee', updatePostHandler, handler_doDeleteBurialSiteContractFee); // Transactions if (getConfigProperty('settings.dynamicsGP.integrationIsEnabled')) { router.post('/doGetDynamicsGPDocument', updatePostHandler, handler_doGetDynamicsGPDocument); } -router.post('/doAddLotOccupancyTransaction', updatePostHandler, handler_doAddLotOccupancyTransaction); -router.post('/doUpdateLotOccupancyTransaction', updatePostHandler, handler_doUpdateLotOccupancyTransaction); -router.post('/doDeleteLotOccupancyTransaction', updatePostHandler, handler_doDeleteLotOccupancyTransaction); +router.post('/doAddBurialSiteContractTransaction', updatePostHandler, handler_doAddBurialSiteContractTransaction); +router.post('/doUpdateBurialSiteContractTransaction', updatePostHandler, handler_doUpdateBurialSiteContractTransaction); +router.post('/doDeleteBurialSiteContractTransaction', updatePostHandler, handler_doDeleteBurialSiteContractTransaction); export default router; diff --git a/routes/contracts.ts b/routes/contracts.ts index 5203af39..5443d3f4 100644 --- a/routes/contracts.ts +++ b/routes/contracts.ts @@ -4,28 +4,24 @@ import handler_edit from '../handlers/contracts-get/edit.js' import handler_new from '../handlers/contracts-get/new.js' import handler_search from '../handlers/contracts-get/search.js' import handler_view from '../handlers/contracts-get/view.js' -import handler_doAddLotOccupancyComment from '../handlers/contracts-post/doAddLotOccupancyComment.js' -import handler_doAddLotOccupancyFee from '../handlers/contracts-post/doAddBurialSiteContractFee.js' -import handler_doAddLotOccupancyFeeCategory from '../handlers/contracts-post/doAddLotOccupancyFeeCategory.js' -import handler_doAddLotOccupancyOccupant from '../handlers/contracts-post/doAddLotOccupancyOccupant.js' -import handler_doAddLotOccupancyTransaction from '../handlers/contracts-post/doAddBurialSiteContractTransaction.js' -import handler_doCopyLotOccupancy from '../handlers/contracts-post/doCopyLotOccupancy.js' -import handler_doCreateLotOccupancy from '../handlers/contracts-post/doCreateBurialSiteContract.js' -import handler_doDeleteLotOccupancy from '../handlers/contracts-post/doDeleteLotOccupancy.js' -import handler_doDeleteLotOccupancyComment from '../handlers/contracts-post/doDeleteLotOccupancyComment.js' -import handler_doDeleteLotOccupancyFee from '../handlers/contracts-post/doDeleteLotOccupancyFee.js' -import handler_doDeleteLotOccupancyOccupant from '../handlers/contracts-post/doDeleteLotOccupancyOccupant.js' -import handler_doDeleteLotOccupancyTransaction from '../handlers/contracts-post/doDeleteBurialSiteContractTransaction.js' +import handler_doAddBurialSiteContractComment from '../handlers/contracts-post/doAddBurialSiteContractComment.js' +import handler_doAddBurialSiteContractFee from '../handlers/contracts-post/doAddBurialSiteContractFee.js' +import handler_doAddBurialSiteContractFeeCategory from '../handlers/contracts-post/doAddBurialSiteContractFeeCategory.js' +import handler_doAddBurialSiteContractTransaction from '../handlers/contracts-post/doAddBurialSiteContractTransaction.js' +import handler_doCopyBurialSiteContract from '../handlers/contracts-post/doCopyBurialSiteContract.js' +import handler_doCreateBurialSiteContract from '../handlers/contracts-post/doCreateBurialSiteContract.js' +import handler_doDeleteBurialSiteContract from '../handlers/contracts-post/doDeleteBurialSiteContract.js' +import handler_doDeleteBurialSiteContractComment from '../handlers/contracts-post/doDeleteBurialSiteContractComment.js' +import handler_doDeleteBurialSiteContractFee from '../handlers/contracts-post/doDeleteBurialSiteContractFee.js' +import handler_doDeleteBurialSiteContractTransaction from '../handlers/contracts-post/doDeleteBurialSiteContractTransaction.js' +import handler_doGetContractTypeFields from '../handlers/contracts-post/doGetContractTypeFields.js' import handler_doGetDynamicsGPDocument from '../handlers/contracts-post/doGetDynamicsGPDocument.js' import handler_doGetFees from '../handlers/contracts-post/doGetFees.js' -import handler_doGetContractTypeFields from '../handlers/contracts-post/doGetContractTypeFields.js' -import handler_doSearchLotOccupancies from '../handlers/contracts-post/doSearchBurialSiteContracts.js' -import handler_doSearchPastOccupants from '../handlers/contracts-post/doSearchPastOccupants.js' -import handler_doUpdateLotOccupancy from '../handlers/contracts-post/doUpdateLotOccupancy.js' -import handler_doUpdateLotOccupancyComment from '../handlers/contracts-post/doUpdateBurialSiteContractComment.js' -import handler_doUpdateLotOccupancyFeeQuantity from '../handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.js' -import handler_doUpdateLotOccupancyOccupant from '../handlers/contracts-post/doUpdateLotOccupancyOccupant.js' -import handler_doUpdateLotOccupancyTransaction from '../handlers/contracts-post/doUpdateBurialSiteContractTransaction.js' +import handler_doSearchBurialSiteContracts from '../handlers/contracts-post/doSearchBurialSiteContracts.js' +import handler_doUpdateBurialSiteContract from '../handlers/contracts-post/doUpdateBurialSiteContract.js' +import handler_doUpdateBurialSiteContractComment from '../handlers/contracts-post/doUpdateBurialSiteContractComment.js' +import handler_doUpdateBurialSiteContractFeeQuantity from '../handlers/contracts-post/doUpdateBurialSiteContractFeeQuantity.js' +import handler_doUpdateBurialSiteContractTransaction from '../handlers/contracts-post/doUpdateBurialSiteContractTransaction.js' import { updateGetHandler, updatePostHandler } from '../handlers/permissions.js' import { getConfigProperty } from '../helpers/config.helpers.js' @@ -36,8 +32,8 @@ export const router = Router() router.get('/', handler_search) router.post( - '/doSearchLotOccupancies', - handler_doSearchLotOccupancies + '/doSearchBurialSiteContracts', + handler_doSearchBurialSiteContracts ) // Create @@ -51,9 +47,9 @@ router.post( ) router.post( - '/doCreateLotOccupancy', + '/doCreateBurialSiteContract', updatePostHandler, - handler_doCreateLotOccupancy + handler_doCreateBurialSiteContract ) // View @@ -69,67 +65,41 @@ router.get( ) router.post( - '/doUpdateLotOccupancy', + '/doUpdateBurialSiteContract', updatePostHandler, - handler_doUpdateLotOccupancy + handler_doUpdateBurialSiteContract ) router.post( - '/doCopyLotOccupancy', + '/doCopyBurialSiteContract', updatePostHandler, - handler_doCopyLotOccupancy + handler_doCopyBurialSiteContract ) router.post( - '/doDeleteLotOccupancy', + '/doDeleteBurialSiteContract', updatePostHandler, - handler_doDeleteLotOccupancy -) - -// Occupants - -router.post( - '/doSearchPastOccupants', - updatePostHandler, - handler_doSearchPastOccupants -) - -router.post( - '/doAddLotOccupancyOccupant', - updatePostHandler, - handler_doAddLotOccupancyOccupant -) - -router.post( - '/doUpdateLotOccupancyOccupant', - updatePostHandler, - handler_doUpdateLotOccupancyOccupant -) - -router.post( - '/doDeleteLotOccupancyOccupant', - updatePostHandler, - handler_doDeleteLotOccupancyOccupant + handler_doDeleteBurialSiteContract ) // Comments router.post( - '/doAddLotOccupancyComment', + '/doAddBurialSiteContractComment', updatePostHandler, - handler_doAddLotOccupancyComment + handler_doAddBurialSiteContractComment ) router.post( - '/doUpdateLotOccupancyComment', + '/doUpdateBurialSiteContractComment', updatePostHandler, - handler_doUpdateLotOccupancyComment + handler_doUpdateBurialSiteContractComment ) router.post( - '/doDeleteLotOccupancyComment', + '/doDeleteBurialSiteContractComment', updatePostHandler, - handler_doDeleteLotOccupancyComment + handler_doDeleteBurialSiteContractComment ) // Fees @@ -141,27 +111,27 @@ router.post( ) router.post( - '/doAddLotOccupancyFee', + '/doAddBurialSiteContractFee', updatePostHandler, - handler_doAddLotOccupancyFee + handler_doAddBurialSiteContractFee ) router.post( - '/doAddLotOccupancyFeeCategory', + '/doAddBurialSiteContractFeeCategory', updatePostHandler, - handler_doAddLotOccupancyFeeCategory + handler_doAddBurialSiteContractFeeCategory ) router.post( - '/doUpdateLotOccupancyFeeQuantity', + '/doUpdateBurialSiteContractFeeQuantity', updatePostHandler, - handler_doUpdateLotOccupancyFeeQuantity + handler_doUpdateBurialSiteContractFeeQuantity ) router.post( - '/doDeleteLotOccupancyFee', + '/doDeleteBurialSiteContractFee', updatePostHandler, - handler_doDeleteLotOccupancyFee + handler_doDeleteBurialSiteContractFee ) // Transactions @@ -175,21 +145,21 @@ if (getConfigProperty('settings.dynamicsGP.integrationIsEnabled')) { } router.post( - '/doAddLotOccupancyTransaction', + '/doAddBurialSiteContractTransaction', updatePostHandler, - handler_doAddLotOccupancyTransaction + handler_doAddBurialSiteContractTransaction ) router.post( - '/doUpdateLotOccupancyTransaction', + '/doUpdateBurialSiteContractTransaction', updatePostHandler, - handler_doUpdateLotOccupancyTransaction + handler_doUpdateBurialSiteContractTransaction ) router.post( - '/doDeleteLotOccupancyTransaction', + '/doDeleteBurialSiteContractTransaction', updatePostHandler, - handler_doDeleteLotOccupancyTransaction + handler_doDeleteBurialSiteContractTransaction ) export default router diff --git a/routes/workOrders.js b/routes/workOrders.js index ad125157..68211340 100644 --- a/routes/workOrders.js +++ b/routes/workOrders.js @@ -6,23 +6,23 @@ import handler_new from '../handlers/workOrders-get/new.js'; import handler_outlook from '../handlers/workOrders-get/outlook.js'; import handler_search from '../handlers/workOrders-get/search.js'; import handler_view from '../handlers/workOrders-get/view.js'; +import handler_doAddWorkOrderBurialSite from '../handlers/workOrders-post/doAddWorkOrderBurialSite.js'; +import handler_doAddWorkOrderBurialSiteContract from '../handlers/workOrders-post/doAddWorkOrderBurialSiteContract.js'; import handler_doAddWorkOrderComment from '../handlers/workOrders-post/doAddWorkOrderComment.js'; -import handler_doAddWorkOrderLot from '../handlers/workOrders-post/doAddWorkOrderLot.js'; -import handler_doAddWorkOrderLotOccupancy from '../handlers/workOrders-post/doAddWorkOrderLotOccupancy.js'; import handler_doAddWorkOrderMilestone from '../handlers/workOrders-post/doAddWorkOrderMilestone.js'; import handler_doCloseWorkOrder from '../handlers/workOrders-post/doCloseWorkOrder.js'; import handler_doCompleteWorkOrderMilestone from '../handlers/workOrders-post/doCompleteWorkOrderMilestone.js'; import handler_doCreateWorkOrder from '../handlers/workOrders-post/doCreateWorkOrder.js'; import handler_doDeleteWorkOrder from '../handlers/workOrders-post/doDeleteWorkOrder.js'; +import handler_doDeleteWorkOrderBurialSite from '../handlers/workOrders-post/doDeleteWorkOrderBurialSite.js'; +import handler_doDeleteWorkOrderBurialSiteContract from '../handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.js'; import handler_doDeleteWorkOrderComment from '../handlers/workOrders-post/doDeleteWorkOrderComment.js'; -import handler_doDeleteWorkOrderLot from '../handlers/workOrders-post/doDeleteWorkOrderLot.js'; -import handler_doDeleteWorkOrderLotOccupancy from '../handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.js'; import handler_doDeleteWorkOrderMilestone from '../handlers/workOrders-post/doDeleteWorkOrderMilestone.js'; import handler_doGetWorkOrderMilestones from '../handlers/workOrders-post/doGetWorkOrderMilestones.js'; import handler_doReopenWorkOrder from '../handlers/workOrders-post/doReopenWorkOrder.js'; import handler_doReopenWorkOrderMilestone from '../handlers/workOrders-post/doReopenWorkOrderMilestone.js'; import handler_doSearchWorkOrders from '../handlers/workOrders-post/doSearchWorkOrders.js'; -import handler_doUpdateLotStatus from '../handlers/workOrders-post/doUpdateLotStatus.js'; +import handler_doUpdateBurialSiteStatus from '../handlers/workOrders-post/doUpdateBurialSiteStatus.js'; import handler_doUpdateWorkOrder from '../handlers/workOrders-post/doUpdateWorkOrder.js'; import handler_doUpdateWorkOrderComment from '../handlers/workOrders-post/doUpdateWorkOrderComment.js'; import handler_doUpdateWorkOrderMilestone from '../handlers/workOrders-post/doUpdateWorkOrderMilestone.js'; @@ -46,12 +46,12 @@ router.get('/:workOrderId/edit', updateGetHandler, handler_edit); router.post('/doUpdateWorkOrder', updatePostHandler, handler_doUpdateWorkOrder); router.post('/doCloseWorkOrder', updatePostHandler, handler_doCloseWorkOrder); router.post('/doDeleteWorkOrder', updatePostHandler, handler_doDeleteWorkOrder); -// Lot Occupancy -router.post('/doAddWorkOrderLotOccupancy', updatePostHandler, handler_doAddWorkOrderLotOccupancy); -router.post('/doDeleteWorkOrderLotOccupancy', updatePostHandler, handler_doDeleteWorkOrderLotOccupancy); -router.post('/doAddWorkOrderLot', updatePostHandler, handler_doAddWorkOrderLot); -router.post('/doUpdateLotStatus', updatePostHandler, handler_doUpdateLotStatus); -router.post('/doDeleteWorkOrderLot', updatePostHandler, handler_doDeleteWorkOrderLot); +// Burial Site Contract +router.post('/doAddWorkOrderBurialSiteContract', updatePostHandler, handler_doAddWorkOrderBurialSiteContract); +router.post('/doDeleteWorkOrderBurialSiteContract', updatePostHandler, handler_doDeleteWorkOrderBurialSiteContract); +router.post('/doAddWorkOrderBurialSite', updatePostHandler, handler_doAddWorkOrderBurialSite); +router.post('/doUpdateBurialSiteStatus', updatePostHandler, handler_doUpdateBurialSiteStatus); +router.post('/doDeleteWorkOrderBurialSite', updatePostHandler, handler_doDeleteWorkOrderBurialSite); // Comments router.post('/doAddWorkOrderComment', updatePostHandler, handler_doAddWorkOrderComment); router.post('/doUpdateWorkOrderComment', updatePostHandler, handler_doUpdateWorkOrderComment); diff --git a/routes/workOrders.ts b/routes/workOrders.ts index 1cb22ed6..e12aed6a 100644 --- a/routes/workOrders.ts +++ b/routes/workOrders.ts @@ -7,23 +7,23 @@ import handler_new from '../handlers/workOrders-get/new.js' import handler_outlook from '../handlers/workOrders-get/outlook.js' import handler_search from '../handlers/workOrders-get/search.js' import handler_view from '../handlers/workOrders-get/view.js' +import handler_doAddWorkOrderBurialSite from '../handlers/workOrders-post/doAddWorkOrderBurialSite.js' +import handler_doAddWorkOrderBurialSiteContract from '../handlers/workOrders-post/doAddWorkOrderBurialSiteContract.js' import handler_doAddWorkOrderComment from '../handlers/workOrders-post/doAddWorkOrderComment.js' -import handler_doAddWorkOrderLot from '../handlers/workOrders-post/doAddWorkOrderLot.js' -import handler_doAddWorkOrderLotOccupancy from '../handlers/workOrders-post/doAddWorkOrderLotOccupancy.js' import handler_doAddWorkOrderMilestone from '../handlers/workOrders-post/doAddWorkOrderMilestone.js' import handler_doCloseWorkOrder from '../handlers/workOrders-post/doCloseWorkOrder.js' import handler_doCompleteWorkOrderMilestone from '../handlers/workOrders-post/doCompleteWorkOrderMilestone.js' import handler_doCreateWorkOrder from '../handlers/workOrders-post/doCreateWorkOrder.js' import handler_doDeleteWorkOrder from '../handlers/workOrders-post/doDeleteWorkOrder.js' +import handler_doDeleteWorkOrderBurialSite from '../handlers/workOrders-post/doDeleteWorkOrderBurialSite.js' +import handler_doDeleteWorkOrderBurialSiteContract from '../handlers/workOrders-post/doDeleteWorkOrderBurialSiteContract.js' import handler_doDeleteWorkOrderComment from '../handlers/workOrders-post/doDeleteWorkOrderComment.js' -import handler_doDeleteWorkOrderLot from '../handlers/workOrders-post/doDeleteWorkOrderLot.js' -import handler_doDeleteWorkOrderLotOccupancy from '../handlers/workOrders-post/doDeleteWorkOrderLotOccupancy.js' import handler_doDeleteWorkOrderMilestone from '../handlers/workOrders-post/doDeleteWorkOrderMilestone.js' import handler_doGetWorkOrderMilestones from '../handlers/workOrders-post/doGetWorkOrderMilestones.js' import handler_doReopenWorkOrder from '../handlers/workOrders-post/doReopenWorkOrder.js' import handler_doReopenWorkOrderMilestone from '../handlers/workOrders-post/doReopenWorkOrderMilestone.js' import handler_doSearchWorkOrders from '../handlers/workOrders-post/doSearchWorkOrders.js' -import handler_doUpdateLotStatus from '../handlers/workOrders-post/doUpdateLotStatus.js' +import handler_doUpdateBurialSiteStatus from '../handlers/workOrders-post/doUpdateBurialSiteStatus.js' import handler_doUpdateWorkOrder from '../handlers/workOrders-post/doUpdateWorkOrder.js' import handler_doUpdateWorkOrderComment from '../handlers/workOrders-post/doUpdateWorkOrderComment.js' import handler_doUpdateWorkOrderMilestone from '../handlers/workOrders-post/doUpdateWorkOrderMilestone.js' @@ -68,28 +68,28 @@ router.post('/doCloseWorkOrder', updatePostHandler, handler_doCloseWorkOrder) router.post('/doDeleteWorkOrder', updatePostHandler, handler_doDeleteWorkOrder) -// Lot Occupancy +// Burial Site Contract router.post( - '/doAddWorkOrderLotOccupancy', + '/doAddWorkOrderBurialSiteContract', updatePostHandler, - handler_doAddWorkOrderLotOccupancy + handler_doAddWorkOrderBurialSiteContract ) router.post( - '/doDeleteWorkOrderLotOccupancy', + '/doDeleteWorkOrderBurialSiteContract', updatePostHandler, - handler_doDeleteWorkOrderLotOccupancy + handler_doDeleteWorkOrderBurialSiteContract ) -router.post('/doAddWorkOrderLot', updatePostHandler, handler_doAddWorkOrderLot) +router.post('/doAddWorkOrderBurialSite', updatePostHandler, handler_doAddWorkOrderBurialSite) -router.post('/doUpdateLotStatus', updatePostHandler, handler_doUpdateLotStatus) +router.post('/doUpdateBurialSiteStatus', updatePostHandler, handler_doUpdateBurialSiteStatus) router.post( - '/doDeleteWorkOrderLot', + '/doDeleteWorkOrderBurialSite', updatePostHandler, - handler_doDeleteWorkOrderLot + handler_doDeleteWorkOrderBurialSite ) // Comments diff --git a/temp/legacy.importFromCSV.js b/temp/legacy.importFromCSV.js index a8c11c03..76d599a3 100644 --- a/temp/legacy.importFromCSV.js +++ b/temp/legacy.importFromCSV.js @@ -13,7 +13,7 @@ import addMap from '../database/addMap.js'; import addOrUpdateLotOccupancyField from '../database/addOrUpdateLotOccupancyField.js'; import addWorkOrder from '../database/addWorkOrder.js'; import addWorkOrderLot from '../database/addWorkOrderLot.js'; -import addWorkOrderLotOccupancy from '../database/addWorkOrderLotOccupancy.js'; +import addWorkOrderBurialSiteContract from '../database/addWorkOrderBurialSiteContract.js'; import addWorkOrderMilestone from '../database/addWorkOrderMilestone.js'; import closeWorkOrder from '../database/closeWorkOrder.js'; import getLot, { getLotByLotName } from '../database/getLot.js'; @@ -21,7 +21,7 @@ import getBurialSiteContracts from '../database/getBurialSiteContracts.js'; import getMapFromDatabase from '../database/getMap.js'; import getWorkOrder, { getWorkOrderByWorkOrderNumber } from '../database/getWorkOrder.js'; import reopenWorkOrder from '../database/reopenWorkOrder.js'; -import { updateLotStatus } from '../database/updateLot.js'; +import { updateBurialSiteStatus } from '../database/updateBurialSite.js'; import * as importData from './legacy.importFromCsv.data.js'; import * as importIds from './legacy.importFromCsv.ids.js'; const user = { @@ -253,7 +253,7 @@ async function importFromMasterCSV() { }, user); } if (contractEndDateString === '') { - await updateLotStatus(lotId ?? '', importIds.reservedburialSiteStatusId, user); + await updateBurialSiteStatus(lotId ?? '', importIds.reservedburialSiteStatusId, user); } } let deceasedcontractStartDateString; @@ -402,7 +402,7 @@ async function importFromMasterCSV() { burialSiteContractComment: `Imported Contract #${masterRow.CM_WORK_ORDER}` }, user); } - await updateLotStatus(lotId ?? '', importIds.takenburialSiteStatusId, user); + await updateBurialSiteStatus(lotId ?? '', importIds.takenburialSiteStatusId, user); if (masterRow.CM_PRENEED_OWNER !== '') { await addBurialSiteContractOccupant({ burialSiteContractId: deceasedburialSiteContractId, @@ -482,7 +482,7 @@ async function importFromPrepaidCSV() { } } if (lot && lot.burialSiteStatusId === importIds.availableburialSiteStatusId) { - await updateLotStatus(lot.lotId, importIds.reservedburialSiteStatusId, user); + await updateBurialSiteStatus(lot.lotId, importIds.reservedburialSiteStatusId, user); } const contractStartDateString = formatDateString(prepaidRow.CMPP_PURCH_YR, prepaidRow.CMPP_PURCH_MON, prepaidRow.CMPP_PURCH_DAY); let burialSiteContractId; @@ -713,7 +713,7 @@ async function importFromWorkOrderCSV() { }); lot = await getLotByLotName(lotName); if (lot) { - await updateLotStatus(lot.lotId, importIds.takenburialSiteStatusId, user); + await updateBurialSiteStatus(lot.lotId, importIds.takenburialSiteStatusId, user); } else { const map = await getMap({ cemetery: workOrderRow.WO_CEMETERY }); @@ -852,7 +852,7 @@ async function importFromWorkOrderCSV() { }, user); } } - await addWorkOrderLotOccupancy({ + await addWorkOrderBurialSiteContract({ workOrderId: workOrder.workOrderId, burialSiteContractId }, user); diff --git a/temp/legacy.importFromCSV.ts b/temp/legacy.importFromCSV.ts index 6df3b143..a6b7b784 100644 --- a/temp/legacy.importFromCSV.ts +++ b/temp/legacy.importFromCSV.ts @@ -20,7 +20,7 @@ import addMap from '../database/addMap.js' import addOrUpdateLotOccupancyField from '../database/addOrUpdateLotOccupancyField.js' import addWorkOrder from '../database/addWorkOrder.js' import addWorkOrderLot from '../database/addWorkOrderLot.js' -import addWorkOrderLotOccupancy from '../database/addWorkOrderLotOccupancy.js' +import addWorkOrderBurialSiteContract from '../database/addWorkOrderBurialSiteContract.js' import addWorkOrderMilestone from '../database/addWorkOrderMilestone.js' import closeWorkOrder from '../database/closeWorkOrder.js' import getLot, { getLotByLotName } from '../database/getLot.js' @@ -30,7 +30,7 @@ import getWorkOrder, { getWorkOrderByWorkOrderNumber } from '../database/getWorkOrder.js' import reopenWorkOrder from '../database/reopenWorkOrder.js' -import { updateLotStatus } from '../database/updateLot.js' +import { updateBurialSiteStatus } from '../database/updateBurialSite.js' import type * as recordTypes from '../types/recordTypes.js' import * as importData from './legacy.importFromCsv.data.js' @@ -511,7 +511,7 @@ async function importFromMasterCSV(): Promise { } if (contractEndDateString === '') { - await updateLotStatus( + await updateBurialSiteStatus( lotId ?? '', importIds.reservedburialSiteStatusId, user @@ -771,7 +771,7 @@ async function importFromMasterCSV(): Promise { ) } - await updateLotStatus(lotId ?? '', importIds.takenburialSiteStatusId, user) + await updateBurialSiteStatus(lotId ?? '', importIds.takenburialSiteStatusId, user) if (masterRow.CM_PRENEED_OWNER !== '') { await addBurialSiteContractOccupant( @@ -874,7 +874,7 @@ async function importFromPrepaidCSV(): Promise { } if (lot && lot.burialSiteStatusId === importIds.availableburialSiteStatusId) { - await updateLotStatus(lot.lotId, importIds.reservedburialSiteStatusId, user) + await updateBurialSiteStatus(lot.lotId, importIds.reservedburialSiteStatusId, user) } const contractStartDateString = formatDateString( @@ -1200,7 +1200,7 @@ async function importFromWorkOrderCSV(): Promise { lot = await getLotByLotName(lotName) if (lot) { - await updateLotStatus(lot.lotId, importIds.takenburialSiteStatusId, user) + await updateBurialSiteStatus(lot.lotId, importIds.takenburialSiteStatusId, user) } else { const map = await getMap({ cemetery: workOrderRow.WO_CEMETERY }) @@ -1438,7 +1438,7 @@ async function importFromWorkOrderCSV(): Promise { } } - await addWorkOrderLotOccupancy( + await addWorkOrderBurialSiteContract( { workOrderId: workOrder.workOrderId!, burialSiteContractId diff --git a/temp/so.exportMaps.d.ts b/temp/so.exportMaps.d.ts deleted file mode 100644 index cb0ff5c3..00000000 --- a/temp/so.exportMaps.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/temp/so.exportMaps.js b/temp/so.exportMaps.js deleted file mode 100644 index 8bb25cb0..00000000 --- a/temp/so.exportMaps.js +++ /dev/null @@ -1,36 +0,0 @@ -import fs from 'node:fs'; -import * as sql from '@cityssm/mssql-multi-pool'; -import { soMSSQL } from './config.js'; -async function importMaps() { - let pool; - try { - pool = await sql.connect(soMSSQL); - const result = await pool.query(`select m.ID as cemeteryId, m.Name as cemeteryName, - l.ID as layerId, l.Name as layerName, l.Image as layerImage - from Legacy_Maps m - left join Legacy_Layers l on m.ID = l.Map_ID`); - for (const layer of result.recordset) { - const imageBuffer = layer.layerImage; - const fileName = `${layer.cemeteryName} - ${layer.layerName} (${layer.cemeteryId}, ${layer.layerId}).wmf`; - fs.writeFile(`./temp/wmf/${fileName}`, imageBuffer, (error) => { - if (error) { - console.log(error); - } - }); - } - } - catch { - // ignore - } - finally { - try { - if (pool !== undefined) { - await pool.close(); - } - } - catch { - // ignore - } - } -} -await importMaps(); diff --git a/temp/so.exportMaps.ts b/temp/so.exportMaps.ts deleted file mode 100644 index 22774bf9..00000000 --- a/temp/so.exportMaps.ts +++ /dev/null @@ -1,53 +0,0 @@ -import fs from 'node:fs' - -import * as sql from '@cityssm/mssql-multi-pool' -import type * as sqlTypes from 'mssql' - -import { soMSSQL } from './config.js' - -interface MapLayer { - cemeteryId: string - cemeteryName: string - layerId: string - layerName: string - layerImage: string -} - -async function importMaps(): Promise { - let pool: sqlTypes.ConnectionPool | undefined - - try { - pool = await sql.connect(soMSSQL) - - const result = await pool.query( - `select m.ID as cemeteryId, m.Name as cemeteryName, - l.ID as layerId, l.Name as layerName, l.Image as layerImage - from Legacy_Maps m - left join Legacy_Layers l on m.ID = l.Map_ID` - ) as sqlTypes.IResult - - for (const layer of result.recordset) { - const imageBuffer = layer.layerImage as unknown as Buffer - - const fileName = `${layer.cemeteryName} - ${layer.layerName} (${layer.cemeteryId}, ${layer.layerId}).wmf` - - fs.writeFile(`./temp/wmf/${fileName}`, imageBuffer, (error) => { - if (error) { - console.log(error) - } - }) - } - } catch { - // ignore - } finally { - try { - if (pool !== undefined) { - await pool.close() - } - } catch { - // ignore - } - } -} - -await importMaps() diff --git a/test/functions.js b/test/functions.js index 07543edf..5b3f8445 100644 --- a/test/functions.js +++ b/test/functions.js @@ -13,9 +13,9 @@ describe('functions.cache', () => { before(() => { cacheFunctions.clearCaches(); }); - describe('Lot Statuses', () => { - it('returns Lot Statuses', async () => { - cacheFunctions.clearCacheByTableName('LotStatuses'); + describe('Burial Site Statuses', () => { + it('returns Burial Site Statuses', async () => { + cacheFunctions.clearCacheByTableName('BurialSiteStatuses'); const lotStatuses = await cacheFunctions.getBurialSiteStatuses(); assert.ok(lotStatuses.length > 0); for (const lotStatus of lotStatuses) { diff --git a/test/functions.ts b/test/functions.ts index 56fe4c71..90f9ba5e 100644 --- a/test/functions.ts +++ b/test/functions.ts @@ -17,9 +17,9 @@ describe('functions.cache', () => { cacheFunctions.clearCaches() }) - describe('Lot Statuses', () => { - it('returns Lot Statuses', async () => { - cacheFunctions.clearCacheByTableName('LotStatuses') + describe('Burial Site Statuses', () => { + it('returns Burial Site Statuses', async () => { + cacheFunctions.clearCacheByTableName('BurialSiteStatuses') const lotStatuses = await cacheFunctions.getBurialSiteStatuses() diff --git a/types/recordTypes.d.ts b/types/recordTypes.d.ts index 98b53395..000fb56b 100644 --- a/types/recordTypes.d.ts +++ b/types/recordTypes.d.ts @@ -281,7 +281,7 @@ export interface WorkOrder extends Record { workOrderComments?: WorkOrderComment[]; workOrderBurialSites?: BurialSite[]; workOrderBurialSiteCount?: number; - workOrderBurialSiteContract?: BurialSiteContract[]; + workOrderBurialSiteContracts?: BurialSiteContract[]; } declare global { export interface User { diff --git a/types/recordTypes.ts b/types/recordTypes.ts index 5fb73836..5e951ba4 100644 --- a/types/recordTypes.ts +++ b/types/recordTypes.ts @@ -379,7 +379,7 @@ export interface WorkOrder extends Record { workOrderBurialSites?: BurialSite[] workOrderBurialSiteCount?: number - workOrderBurialSiteContract?: BurialSiteContract[] + workOrderBurialSiteContracts?: BurialSiteContract[] } /*