From db05999c72b1a2cfd9a9bb66d4f1afa77403141e Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Wed, 30 Apr 2025 14:40:47 -0400 Subject: [PATCH] track burial site capacities alter table BurialSiteTypes add bodyCapacityMax smallint alter table BurialSiteTypes add crematedCapacityMax smallint alter table BurialSites add bodyCapacity smallint alter table BurialSites add crematedCapacity smallint --- data/base.config.js | 1 + data/base.config.ts | 1 + data/configDefaults.d.ts | 2 + data/configDefaults.js | 4 + data/configDefaults.ts | 9 ++- database/addBurialSite.d.ts | 2 + database/addBurialSite.js | 10 ++- database/addBurialSite.ts | 16 +++- database/addBurialSiteType.d.ts | 7 ++ database/addBurialSiteType.js | 20 +++++ database/addBurialSiteType.ts | 50 ++++++++++++ database/addRecord.d.ts | 2 +- database/addRecord.js | 1 - database/addRecord.ts | 2 - database/getBurialSite.js | 3 + database/getBurialSite.ts | 3 + database/getBurialSiteTypes.js | 6 +- database/getBurialSiteTypes.ts | 6 +- database/getBurialSites.d.ts | 2 +- database/getBurialSites.js | 1 + database/getBurialSites.ts | 4 +- database/initializeDatabase.js | 48 ++++++++++-- database/initializeDatabase.ts | 77 +++++++++++++++++-- database/updateBurialSite.d.ts | 2 + database/updateBurialSite.js | 7 +- database/updateBurialSite.ts | 13 ++++ database/updateBurialSiteType.d.ts | 7 ++ database/updateBurialSiteType.js | 23 ++++++ database/updateBurialSiteType.ts | 52 +++++++++++++ database/updateRecord.d.ts | 2 +- database/updateRecord.js | 1 - database/updateRecord.ts | 2 - handlers/admin-post/doAddBurialSiteType.d.ts | 6 +- handlers/admin-post/doAddBurialSiteType.js | 4 +- handlers/admin-post/doAddBurialSiteType.ts | 16 ++-- .../admin-post/doUpdateBurialSiteType.d.ts | 6 +- handlers/admin-post/doUpdateBurialSiteType.js | 4 +- handlers/admin-post/doUpdateBurialSiteType.ts | 16 ++-- handlers/burialSites-get/new.js | 6 +- handlers/burialSites-get/new.ts | 8 +- public/html/adminBurialSiteTypes-add.html | 37 +++++++++ public/html/adminBurialSiteTypes-edit.html | 38 +++++++++ public/javascripts/burialSite.edit.js | 24 ++++++ public/javascripts/burialSite.edit.ts | 52 ++++++++++++- public/javascripts/burialSiteTypes.admin.js | 28 +++++-- public/javascripts/burialSiteTypes.admin.ts | 68 +++++++++++++--- temp/legacyImportFromCsv/index.js | 7 +- temp/legacyImportFromCsv/index.ts | 7 +- types/config.types.d.ts | 4 + types/config.types.ts | 5 ++ types/record.types.d.ts | 6 ++ types/record.types.ts | 9 +++ views/admin-burialSiteTypes.ejs | 2 + views/burialSite-edit.ejs | 53 ++++++++++++- 54 files changed, 699 insertions(+), 93 deletions(-) create mode 100644 database/addBurialSiteType.d.ts create mode 100644 database/addBurialSiteType.js create mode 100644 database/addBurialSiteType.ts create mode 100644 database/updateBurialSiteType.d.ts create mode 100644 database/updateBurialSiteType.js create mode 100644 database/updateBurialSiteType.ts diff --git a/data/base.config.js b/data/base.config.js index 2c01e394..3e386a8d 100644 --- a/data/base.config.js +++ b/data/base.config.js @@ -6,6 +6,7 @@ export const config = { settings: { adminCleanup: {}, burialSites: {}, + burialSiteTypes: {}, cemeteries: {}, contracts: {}, dynamicsGP: { diff --git a/data/base.config.ts b/data/base.config.ts index 30c04045..c9a84d02 100644 --- a/data/base.config.ts +++ b/data/base.config.ts @@ -8,6 +8,7 @@ export const config: Config = { settings: { adminCleanup: {}, burialSites: {}, + burialSiteTypes: {}, cemeteries: {}, contracts: {}, dynamicsGP: { diff --git a/data/configDefaults.d.ts b/data/configDefaults.d.ts index 6aa27d20..73890316 100644 --- a/data/configDefaults.d.ts +++ b/data/configDefaults.d.ts @@ -33,6 +33,8 @@ export declare const configDefaultValues: { 'settings.longitudeMax': number; 'settings.longitudeMin': number; 'settings.cemeteries.refreshImageChanges': boolean; + 'settings.burialSiteTypes.bodyCapacityMaxDefault': number; + 'settings.burialSiteTypes.crematedCapacityMaxDefault': number; 'settings.burialSites.burialSiteNameSegments': ConfigBurialSiteNameSegments; 'settings.burialSites.burialSiteNameSegments.includeCemeteryKey': boolean; 'settings.burialSites.refreshImageChanges': boolean; diff --git a/data/configDefaults.js b/data/configDefaults.js index 6dc9c7af..0a7fa0be 100644 --- a/data/configDefaults.js +++ b/data/configDefaults.js @@ -32,6 +32,10 @@ export const configDefaultValues = { 'settings.longitudeMax': 180, 'settings.longitudeMin': -180, 'settings.cemeteries.refreshImageChanges': false, + // eslint-disable-next-line no-secrets/no-secrets + 'settings.burialSiteTypes.bodyCapacityMaxDefault': 2, + // eslint-disable-next-line no-secrets/no-secrets + 'settings.burialSiteTypes.crematedCapacityMaxDefault': 6, 'settings.burialSites.burialSiteNameSegments': { includeCemeteryKey: false, separator: '-', diff --git a/data/configDefaults.ts b/data/configDefaults.ts index b4011751..94c4bb32 100644 --- a/data/configDefaults.ts +++ b/data/configDefaults.ts @@ -1,6 +1,5 @@ -import type { config as MSSQLConfig } from 'mssql' - import { hoursToMillis } from '@cityssm/to-millis' +import type { config as MSSQLConfig } from 'mssql' import type { ConfigActiveDirectory, @@ -52,6 +51,12 @@ export const configDefaultValues = { 'settings.cemeteries.refreshImageChanges': false, + // eslint-disable-next-line no-secrets/no-secrets + 'settings.burialSiteTypes.bodyCapacityMaxDefault': 2, + + // eslint-disable-next-line no-secrets/no-secrets + 'settings.burialSiteTypes.crematedCapacityMaxDefault': 6, + 'settings.burialSites.burialSiteNameSegments': { includeCemeteryKey: false, separator: '-', diff --git a/database/addBurialSite.d.ts b/database/addBurialSite.d.ts index de8913ed..46c6ac96 100644 --- a/database/addBurialSite.d.ts +++ b/database/addBurialSite.d.ts @@ -6,6 +6,8 @@ export interface AddBurialSiteForm { burialSiteNameSegment5?: string; burialSiteStatusId: number | string; burialSiteTypeId: number | string; + bodyCapacity?: number | string; + crematedCapacity?: number | string; burialSiteImage?: string; cemeteryId: number | string; cemeterySvgId?: string; diff --git a/database/addBurialSite.js b/database/addBurialSite.js index c6e4cc34..02c68e91 100644 --- a/database/addBurialSite.js +++ b/database/addBurialSite.js @@ -10,6 +10,7 @@ import getCemetery from './getCemetery.js'; * @returns The new burial site's id. * @throws If an active burial site with the same name already exists. */ +// eslint-disable-next-line complexity export default function addBurialSite(burialSiteForm, user) { const database = sqlite(sunriseDB); const rightNowMillis = Date.now(); @@ -38,17 +39,22 @@ export default function addBurialSite(burialSiteForm, user) { burialSiteNameSegment5, burialSiteName, burialSiteTypeId, burialSiteStatusId, + bodyCapacity, crematedCapacity, cemeteryId, cemeterySvgId, burialSiteImage, burialSiteLatitude, burialSiteLongitude, recordCreate_userName, recordCreate_timeMillis, recordUpdate_userName, recordUpdate_timeMillis) - values (?, ?, ?, + values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`) .run(burialSiteForm.burialSiteNameSegment1 ?? '', burialSiteForm.burialSiteNameSegment2 ?? '', burialSiteForm.burialSiteNameSegment3 ?? '', burialSiteForm.burialSiteNameSegment4 ?? '', burialSiteForm.burialSiteNameSegment5 ?? '', burialSiteName, burialSiteForm.burialSiteTypeId, burialSiteForm.burialSiteStatusId === '' ? undefined - : burialSiteForm.burialSiteStatusId, burialSiteForm.cemeteryId === '' ? undefined : burialSiteForm.cemeteryId, burialSiteForm.cemeterySvgId, burialSiteForm.burialSiteImage ?? '', burialSiteForm.burialSiteLatitude === '' + : burialSiteForm.burialSiteStatusId, burialSiteForm.bodyCapacity === '' + ? undefined + : burialSiteForm.bodyCapacity, burialSiteForm.crematedCapacity === '' + ? undefined + : burialSiteForm.crematedCapacity, burialSiteForm.cemeteryId === '' ? undefined : burialSiteForm.cemeteryId, burialSiteForm.cemeterySvgId, burialSiteForm.burialSiteImage ?? '', burialSiteForm.burialSiteLatitude === '' ? undefined : burialSiteForm.burialSiteLatitude, burialSiteForm.burialSiteLongitude === '' ? undefined diff --git a/database/addBurialSite.ts b/database/addBurialSite.ts index a3108954..7cfc06e4 100644 --- a/database/addBurialSite.ts +++ b/database/addBurialSite.ts @@ -16,6 +16,9 @@ export interface AddBurialSiteForm { burialSiteStatusId: number | string burialSiteTypeId: number | string + bodyCapacity?: number | string + crematedCapacity?: number | string + burialSiteImage?: string cemeteryId: number | string cemeterySvgId?: string @@ -35,6 +38,7 @@ export interface AddBurialSiteForm { * @returns The new burial site's id. * @throws If an active burial site with the same name already exists. */ +// eslint-disable-next-line complexity export default function addBurialSite( burialSiteForm: AddBurialSiteForm, user: User @@ -80,12 +84,13 @@ export default function addBurialSite( burialSiteNameSegment5, burialSiteName, burialSiteTypeId, burialSiteStatusId, + bodyCapacity, crematedCapacity, cemeteryId, cemeterySvgId, burialSiteImage, burialSiteLatitude, burialSiteLongitude, recordCreate_userName, recordCreate_timeMillis, recordUpdate_userName, recordUpdate_timeMillis) - values (?, ?, ?, + values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` ) @@ -100,6 +105,15 @@ export default function addBurialSite( burialSiteForm.burialSiteStatusId === '' ? undefined : burialSiteForm.burialSiteStatusId, + + burialSiteForm.bodyCapacity === '' + ? undefined + : burialSiteForm.bodyCapacity, + + burialSiteForm.crematedCapacity === '' + ? undefined + : burialSiteForm.crematedCapacity, + burialSiteForm.cemeteryId === '' ? undefined : burialSiteForm.cemeteryId, burialSiteForm.cemeterySvgId, burialSiteForm.burialSiteImage ?? '', diff --git a/database/addBurialSiteType.d.ts b/database/addBurialSiteType.d.ts new file mode 100644 index 00000000..4fb5bf1e --- /dev/null +++ b/database/addBurialSiteType.d.ts @@ -0,0 +1,7 @@ +export interface AddBurialSiteTypeForm { + burialSiteType: string; + bodyCapacityMax: number | string; + crematedCapacityMax: number | string; + orderNumber?: number | string; +} +export default function addBurialSiteType(addForm: AddBurialSiteTypeForm, user: User): number; diff --git a/database/addBurialSiteType.js b/database/addBurialSiteType.js new file mode 100644 index 00000000..188fd03c --- /dev/null +++ b/database/addBurialSiteType.js @@ -0,0 +1,20 @@ +import sqlite from 'better-sqlite3'; +import { sunriseDB } from '../helpers/database.helpers.js'; +import { clearCacheByTableName } from '../helpers/functions.cache.js'; +export default function addBurialSiteType(addForm, user) { + const database = sqlite(sunriseDB); + const rightNowMillis = Date.now(); + const result = database + .prepare(`insert into BurialSiteTypes ( + burialSiteType, bodyCapacityMax, crematedCapacityMax, + orderNumber, + recordCreate_userName, recordCreate_timeMillis, + recordUpdate_userName, recordUpdate_timeMillis) + values (?, ?, ?, ?, ?, ?, ?, ?)`) + .run(addForm.burialSiteType, addForm.bodyCapacityMax === '' ? undefined : addForm.bodyCapacityMax, addForm.crematedCapacityMax === '' + ? undefined + : addForm.crematedCapacityMax, addForm.orderNumber ?? -1, user.userName, rightNowMillis, user.userName, rightNowMillis); + database.close(); + clearCacheByTableName('BurialSiteTypes'); + return result.lastInsertRowid; +} diff --git a/database/addBurialSiteType.ts b/database/addBurialSiteType.ts new file mode 100644 index 00000000..23f009ea --- /dev/null +++ b/database/addBurialSiteType.ts @@ -0,0 +1,50 @@ +import sqlite from 'better-sqlite3' + +import { sunriseDB } from '../helpers/database.helpers.js' +import { clearCacheByTableName } from '../helpers/functions.cache.js' + +export interface AddBurialSiteTypeForm { + burialSiteType: string + + bodyCapacityMax: number | string + crematedCapacityMax: number | string + + orderNumber?: number | string +} + +export default function addBurialSiteType( + addForm: AddBurialSiteTypeForm, + user: User +): number { + const database = sqlite(sunriseDB) + + const rightNowMillis = Date.now() + + const result = database + .prepare( + `insert into BurialSiteTypes ( + burialSiteType, bodyCapacityMax, crematedCapacityMax, + orderNumber, + recordCreate_userName, recordCreate_timeMillis, + recordUpdate_userName, recordUpdate_timeMillis) + values (?, ?, ?, ?, ?, ?, ?, ?)` + ) + .run( + addForm.burialSiteType, + addForm.bodyCapacityMax === '' ? undefined : addForm.bodyCapacityMax, + addForm.crematedCapacityMax === '' + ? undefined + : addForm.crematedCapacityMax, + addForm.orderNumber ?? -1, + user.userName, + rightNowMillis, + user.userName, + rightNowMillis + ) + + database.close() + + clearCacheByTableName('BurialSiteTypes') + + return result.lastInsertRowid as number +} diff --git a/database/addRecord.d.ts b/database/addRecord.d.ts index 7e2f4b79..3c98f130 100644 --- a/database/addRecord.d.ts +++ b/database/addRecord.d.ts @@ -1,3 +1,3 @@ -type RecordTable = 'BurialSiteStatuses' | 'BurialSiteTypes' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes'; +type RecordTable = 'BurialSiteStatuses' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes'; export default function addRecord(recordTable: RecordTable, recordName: string, orderNumber: number | string, user: User): number; export {}; diff --git a/database/addRecord.js b/database/addRecord.js index 39cd84d1..bc9d1286 100644 --- a/database/addRecord.js +++ b/database/addRecord.js @@ -3,7 +3,6 @@ import { sunriseDB } from '../helpers/database.helpers.js'; import { clearCacheByTableName } from '../helpers/functions.cache.js'; const recordNameColumns = new Map([ ['BurialSiteStatuses', 'burialSiteStatus'], - ['BurialSiteTypes', 'burialSiteType'], ['WorkOrderMilestoneTypes', 'workOrderMilestoneType'], ['WorkOrderTypes', 'workOrderType'] ]); diff --git a/database/addRecord.ts b/database/addRecord.ts index 5ff358ef..d8887387 100644 --- a/database/addRecord.ts +++ b/database/addRecord.ts @@ -5,13 +5,11 @@ import { clearCacheByTableName } from '../helpers/functions.cache.js' type RecordTable = | 'BurialSiteStatuses' - | 'BurialSiteTypes' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes' const recordNameColumns = new Map([ ['BurialSiteStatuses', 'burialSiteStatus'], - ['BurialSiteTypes', 'burialSiteType'], ['WorkOrderMilestoneTypes', 'workOrderMilestoneType'], ['WorkOrderTypes', 'workOrderType'] ]) diff --git a/database/getBurialSite.js b/database/getBurialSite.js index fcdea72e..407dcc3a 100644 --- a/database/getBurialSite.js +++ b/database/getBurialSite.js @@ -13,6 +13,9 @@ const baseSQL = `select l.burialSiteId, l.burialSiteName, l.burialSiteStatusId, s.burialSiteStatus, + l.bodyCapacity, l.crematedCapacity, + t.bodyCapacityMax, t.crematedCapacityMax, + l.cemeteryId, m.cemeteryName, m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, l.cemeterySvgId, l.burialSiteImage, diff --git a/database/getBurialSite.ts b/database/getBurialSite.ts index 01d89f3f..53c42638 100644 --- a/database/getBurialSite.ts +++ b/database/getBurialSite.ts @@ -17,6 +17,9 @@ const baseSQL = `select l.burialSiteId, l.burialSiteName, l.burialSiteStatusId, s.burialSiteStatus, + l.bodyCapacity, l.crematedCapacity, + t.bodyCapacityMax, t.crematedCapacityMax, + l.cemeteryId, m.cemeteryName, m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, l.cemeterySvgId, l.burialSiteImage, diff --git a/database/getBurialSiteTypes.js b/database/getBurialSiteTypes.js index 23f5e4d1..83e35bc5 100644 --- a/database/getBurialSiteTypes.js +++ b/database/getBurialSiteTypes.js @@ -4,9 +4,11 @@ import getBurialSiteTypeFields from './getBurialSiteTypeFields.js'; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'; export default function getBurialSiteTypes(includeDeleted = false) { const database = sqlite(sunriseDB); - const updateOrderNumbers = !database.readonly && !includeDeleted; + const updateOrderNumbers = !includeDeleted; const burialSiteTypes = database - .prepare(`select burialSiteTypeId, burialSiteType, orderNumber + .prepare(`select burialSiteTypeId, burialSiteType, + bodyCapacityMax, crematedCapacityMax, + orderNumber from BurialSiteTypes ${includeDeleted ? '' : ' where recordDelete_timeMillis is null '} order by orderNumber, burialSiteType`) diff --git a/database/getBurialSiteTypes.ts b/database/getBurialSiteTypes.ts index 1f897429..f6c122c5 100644 --- a/database/getBurialSiteTypes.ts +++ b/database/getBurialSiteTypes.ts @@ -11,11 +11,13 @@ export default function getBurialSiteTypes( ): BurialSiteType[] { const database = sqlite(sunriseDB) - const updateOrderNumbers = !database.readonly && !includeDeleted + const updateOrderNumbers = !includeDeleted const burialSiteTypes = database .prepare( - `select burialSiteTypeId, burialSiteType, orderNumber + `select burialSiteTypeId, burialSiteType, + bodyCapacityMax, crematedCapacityMax, + orderNumber from BurialSiteTypes ${includeDeleted ? '' : ' where recordDelete_timeMillis is null '} order by orderNumber, burialSiteType` diff --git a/database/getBurialSites.d.ts b/database/getBurialSites.d.ts index cf14762e..89996879 100644 --- a/database/getBurialSites.d.ts +++ b/database/getBurialSites.d.ts @@ -4,8 +4,8 @@ export interface GetBurialSitesFilters { burialSiteNameSearchType?: '' | 'endsWith' | 'startsWith'; burialSiteName?: string; cemeteryId?: number | string; - burialSiteTypeId?: number | string; burialSiteStatusId?: number | string; + burialSiteTypeId?: number | string; contractStatus?: '' | 'occupied' | 'unoccupied'; workOrderId?: number | string; } diff --git a/database/getBurialSites.js b/database/getBurialSites.js index 2240db66..285bf673 100644 --- a/database/getBurialSites.js +++ b/database/getBurialSites.js @@ -37,6 +37,7 @@ export default function getBurialSites(filters, options, connectedDatabase) { l.burialSiteNameSegment5, l.burialSiteName, t.burialSiteType, + l.bodyCapacity, l.crematedCapacity, l.cemeteryId, m.cemeteryName, l.cemeterySvgId, l.burialSiteStatusId, s.burialSiteStatus ${includeContractCount diff --git a/database/getBurialSites.ts b/database/getBurialSites.ts index 20ad86de..d448e74a 100644 --- a/database/getBurialSites.ts +++ b/database/getBurialSites.ts @@ -9,8 +9,9 @@ export interface GetBurialSitesFilters { burialSiteNameSearchType?: '' | 'endsWith' | 'startsWith' burialSiteName?: string cemeteryId?: number | string - burialSiteTypeId?: number | string + burialSiteStatusId?: number | string + burialSiteTypeId?: number | string contractStatus?: '' | 'occupied' | 'unoccupied' workOrderId?: number | string } @@ -75,6 +76,7 @@ export default function getBurialSites( l.burialSiteNameSegment5, l.burialSiteName, t.burialSiteType, + l.bodyCapacity, l.crematedCapacity, l.cemeteryId, m.cemeteryName, l.cemeterySvgId, l.burialSiteStatusId, s.burialSiteStatus ${ diff --git a/database/initializeDatabase.js b/database/initializeDatabase.js index 2aedd996..d02e8421 100644 --- a/database/initializeDatabase.js +++ b/database/initializeDatabase.js @@ -4,6 +4,7 @@ import sqlite from 'better-sqlite3'; import Debug from 'debug'; import { DEBUG_NAMESPACE } from '../debug.config.js'; import { sunriseDB as databasePath } from '../helpers/database.helpers.js'; +import addBurialSiteType from './addBurialSiteType.js'; import addCommittalType from './addCommittalType.js'; import addContractType from './addContractType.js'; import addFeeCategory from './addFeeCategory.js'; @@ -23,6 +24,8 @@ const createStatements = [ `create table if not exists BurialSiteTypes ( burialSiteTypeId integer not null primary key autoincrement, burialSiteType varchar(100) not null, + bodyCapacityMax smallint, + crematedCapacityMax smallint, orderNumber smallint not null default 0, ${recordColumns})`, `create index if not exists idx_BurialSiteTypes_orderNumber @@ -94,6 +97,9 @@ const createStatements = [ burialSiteNameSegment5 varchar(20) not null, burialSiteName varchar(200) not null, + bodyCapacity smallint, + crematedCapacity smallint, + cemeteryId integer, cemeterySvgId varchar(100), burialSiteImage varchar(100) not null default '', @@ -412,12 +418,42 @@ export function initializeDatabase() { } function initializeData() { debug('Initializing data...'); - addRecord('BurialSiteTypes', 'Casket Grave', 1, initializingUser); - addRecord('BurialSiteTypes', 'Columbarium', 2, initializingUser); - addRecord('BurialSiteTypes', 'Mausoleum', 2, initializingUser); - addRecord('BurialSiteTypes', 'Niche Wall', 2, initializingUser); - addRecord('BurialSiteTypes', 'Urn Garden', 2, initializingUser); - addRecord('BurialSiteTypes', 'Crematorium', 2, initializingUser); + addBurialSiteType({ + burialSiteType: 'In-Ground Grave', + bodyCapacityMax: 2, + crematedCapacityMax: 6, + orderNumber: 1 + }, initializingUser); + addBurialSiteType({ + burialSiteType: 'Columbarium', + bodyCapacityMax: 0, + crematedCapacityMax: '', + orderNumber: 2 + }, initializingUser); + addBurialSiteType({ + burialSiteType: 'Mausoleum', + bodyCapacityMax: 2, + crematedCapacityMax: 0, + orderNumber: 2 + }, initializingUser); + addBurialSiteType({ + burialSiteType: 'Niche Wall', + bodyCapacityMax: 0, + crematedCapacityMax: 1, + orderNumber: 2 + }, initializingUser); + addBurialSiteType({ + burialSiteType: 'Urn Garden', + bodyCapacityMax: 0, + crematedCapacityMax: 1, + orderNumber: 2 + }, initializingUser); + addBurialSiteType({ + burialSiteType: 'Crematorium', + bodyCapacityMax: 0, + crematedCapacityMax: 1, + orderNumber: 2 + }, initializingUser); addRecord('BurialSiteStatuses', 'Available', 1, initializingUser); addRecord('BurialSiteStatuses', 'Reserved', 2, initializingUser); addRecord('BurialSiteStatuses', 'Taken', 3, initializingUser); diff --git a/database/initializeDatabase.ts b/database/initializeDatabase.ts index a6864e65..81b40875 100644 --- a/database/initializeDatabase.ts +++ b/database/initializeDatabase.ts @@ -7,6 +7,7 @@ import Debug from 'debug' import { DEBUG_NAMESPACE } from '../debug.config.js' import { sunriseDB as databasePath } from '../helpers/database.helpers.js' +import addBurialSiteType from './addBurialSiteType.js' import addCommittalType from './addCommittalType.js' import addContractType from './addContractType.js' import addFeeCategory from './addFeeCategory.js' @@ -30,6 +31,8 @@ const createStatements = [ `create table if not exists BurialSiteTypes ( burialSiteTypeId integer not null primary key autoincrement, burialSiteType varchar(100) not null, + bodyCapacityMax smallint, + crematedCapacityMax smallint, orderNumber smallint not null default 0, ${recordColumns})`, @@ -112,6 +115,9 @@ const createStatements = [ burialSiteNameSegment5 varchar(20) not null, burialSiteName varchar(200) not null, + bodyCapacity smallint, + crematedCapacity smallint, + cemeteryId integer, cemeterySvgId varchar(100), burialSiteImage varchar(100) not null default '', @@ -482,12 +488,71 @@ export function initializeDatabase(): boolean { function initializeData(): void { debug('Initializing data...') - addRecord('BurialSiteTypes', 'Casket Grave', 1, initializingUser) - addRecord('BurialSiteTypes', 'Columbarium', 2, initializingUser) - addRecord('BurialSiteTypes', 'Mausoleum', 2, initializingUser) - addRecord('BurialSiteTypes', 'Niche Wall', 2, initializingUser) - addRecord('BurialSiteTypes', 'Urn Garden', 2, initializingUser) - addRecord('BurialSiteTypes', 'Crematorium', 2, initializingUser) + addBurialSiteType( + { + burialSiteType: 'In-Ground Grave', + + bodyCapacityMax: 2, + crematedCapacityMax: 6, + orderNumber: 1 + }, + initializingUser + ) + + addBurialSiteType( + { + burialSiteType: 'Columbarium', + + bodyCapacityMax: 0, + crematedCapacityMax: '', + orderNumber: 2 + }, + initializingUser + ) + + addBurialSiteType( + { + burialSiteType: 'Mausoleum', + + bodyCapacityMax: 2, + crematedCapacityMax: 0, + orderNumber: 2 + }, + initializingUser + ) + + addBurialSiteType( + { + burialSiteType: 'Niche Wall', + + bodyCapacityMax: 0, + crematedCapacityMax: 1, + orderNumber: 2 + }, + initializingUser + ) + + addBurialSiteType( + { + burialSiteType: 'Urn Garden', + + bodyCapacityMax: 0, + crematedCapacityMax: 1, + orderNumber: 2 + }, + initializingUser + ) + + addBurialSiteType( + { + burialSiteType: 'Crematorium', + + bodyCapacityMax: 0, + crematedCapacityMax: 1, + orderNumber: 2 + }, + initializingUser + ) addRecord('BurialSiteStatuses', 'Available', 1, initializingUser) addRecord('BurialSiteStatuses', 'Reserved', 2, initializingUser) diff --git a/database/updateBurialSite.d.ts b/database/updateBurialSite.d.ts index 233e7102..e0c85438 100644 --- a/database/updateBurialSite.d.ts +++ b/database/updateBurialSite.d.ts @@ -7,6 +7,8 @@ export interface UpdateBurialSiteForm { burialSiteNameSegment5?: string; burialSiteStatusId: number | string; burialSiteTypeId: number | string; + bodyCapacity?: number | string; + crematedCapacity?: number | string; burialSiteImage: string; cemeteryId: number | string; cemeterySvgId: string; diff --git a/database/updateBurialSite.js b/database/updateBurialSite.js index 5b7af10a..71af9bc8 100644 --- a/database/updateBurialSite.js +++ b/database/updateBurialSite.js @@ -11,6 +11,7 @@ import getCemetery from './getCemetery.js'; * @returns True if the burial site was updated. * @throws If an active burial site with the same name already exists. */ +// eslint-disable-next-line complexity export default function updateBurialSite(updateForm, user) { const database = sqlite(sunriseDB); const cemetery = updateForm.cemeteryId === '' @@ -40,6 +41,8 @@ export default function updateBurialSite(updateForm, user) { burialSiteName = ?, burialSiteTypeId = ?, burialSiteStatusId = ?, + bodyCapacity = ?, + crematedCapacity = ?, cemeteryId = ?, cemeterySvgId = ?, burialSiteImage = ?, @@ -51,7 +54,9 @@ export default function updateBurialSite(updateForm, user) { and recordDelete_timeMillis is null`) .run(updateForm.burialSiteNameSegment1 ?? '', updateForm.burialSiteNameSegment2 ?? '', updateForm.burialSiteNameSegment3 ?? '', updateForm.burialSiteNameSegment4 ?? '', updateForm.burialSiteNameSegment5 ?? '', burialSiteName, updateForm.burialSiteTypeId, updateForm.burialSiteStatusId === '' ? undefined - : updateForm.burialSiteStatusId, updateForm.cemeteryId === '' ? undefined : updateForm.cemeteryId, updateForm.cemeterySvgId, updateForm.burialSiteImage, updateForm.burialSiteLatitude === '' + : updateForm.burialSiteStatusId, updateForm.bodyCapacity === '' ? undefined : updateForm.bodyCapacity, updateForm.crematedCapacity === '' + ? undefined + : updateForm.crematedCapacity, updateForm.cemeteryId === '' ? undefined : updateForm.cemeteryId, updateForm.cemeterySvgId, updateForm.burialSiteImage, updateForm.burialSiteLatitude === '' ? undefined : updateForm.burialSiteLatitude, updateForm.burialSiteLongitude === '' ? undefined diff --git a/database/updateBurialSite.ts b/database/updateBurialSite.ts index 6650bc40..744a1a9b 100644 --- a/database/updateBurialSite.ts +++ b/database/updateBurialSite.ts @@ -19,6 +19,9 @@ export interface UpdateBurialSiteForm { burialSiteStatusId: number | string burialSiteTypeId: number | string + bodyCapacity?: number | string + crematedCapacity?: number | string + burialSiteImage: string cemeteryId: number | string cemeterySvgId: string @@ -37,6 +40,7 @@ export interface UpdateBurialSiteForm { * @returns True if the burial site was updated. * @throws If an active burial site with the same name already exists. */ +// eslint-disable-next-line complexity export default function updateBurialSite( updateForm: UpdateBurialSiteForm, user: User @@ -79,6 +83,8 @@ export default function updateBurialSite( burialSiteName = ?, burialSiteTypeId = ?, burialSiteStatusId = ?, + bodyCapacity = ?, + crematedCapacity = ?, cemeteryId = ?, cemeterySvgId = ?, burialSiteImage = ?, @@ -100,6 +106,13 @@ export default function updateBurialSite( updateForm.burialSiteStatusId === '' ? undefined : updateForm.burialSiteStatusId, + + updateForm.bodyCapacity === '' ? undefined : updateForm.bodyCapacity, + + updateForm.crematedCapacity === '' + ? undefined + : updateForm.crematedCapacity, + updateForm.cemeteryId === '' ? undefined : updateForm.cemeteryId, updateForm.cemeterySvgId, updateForm.burialSiteImage, diff --git a/database/updateBurialSiteType.d.ts b/database/updateBurialSiteType.d.ts new file mode 100644 index 00000000..be1359a6 --- /dev/null +++ b/database/updateBurialSiteType.d.ts @@ -0,0 +1,7 @@ +export interface UpdateBurialSiteTypeForm { + burialSiteTypeId: number | string; + burialSiteType: string; + bodyCapacityMax: number | string; + crematedCapacityMax: number | string; +} +export default function updateBurialSiteType(updateForm: UpdateBurialSiteTypeForm, user: User): boolean; diff --git a/database/updateBurialSiteType.js b/database/updateBurialSiteType.js new file mode 100644 index 00000000..fdcd1a67 --- /dev/null +++ b/database/updateBurialSiteType.js @@ -0,0 +1,23 @@ +import sqlite from 'better-sqlite3'; +import { sunriseDB } from '../helpers/database.helpers.js'; +import { clearCacheByTableName } from '../helpers/functions.cache.js'; +export default function updateBurialSiteType(updateForm, user) { + const database = sqlite(sunriseDB); + const rightNowMillis = Date.now(); + const result = database + .prepare(`update BurialSiteTypes + set burialSiteType = ?, + bodyCapacityMax = ?, + crematedCapacityMax = ?, + recordUpdate_userName = ?, recordUpdate_timeMillis = ? + where recordDelete_timeMillis is null + and burialSiteTypeId = ?`) + .run(updateForm.burialSiteType, updateForm.bodyCapacityMax === '' + ? undefined + : updateForm.bodyCapacityMax, updateForm.crematedCapacityMax === '' + ? undefined + : updateForm.crematedCapacityMax, user.userName, rightNowMillis, updateForm.burialSiteTypeId); + database.close(); + clearCacheByTableName('BurialSiteTypes'); + return result.changes > 0; +} diff --git a/database/updateBurialSiteType.ts b/database/updateBurialSiteType.ts new file mode 100644 index 00000000..0b2a67a1 --- /dev/null +++ b/database/updateBurialSiteType.ts @@ -0,0 +1,52 @@ +import sqlite from 'better-sqlite3' + +import { sunriseDB } from '../helpers/database.helpers.js' +import { clearCacheByTableName } from '../helpers/functions.cache.js' + +export interface UpdateBurialSiteTypeForm { + burialSiteTypeId: number | string + + burialSiteType: string + + bodyCapacityMax: number | string + crematedCapacityMax: number | string +} + +export default function updateBurialSiteType( + updateForm: UpdateBurialSiteTypeForm, + user: User +): boolean { + const database = sqlite(sunriseDB) + + const rightNowMillis = Date.now() + + const result = database + .prepare( + `update BurialSiteTypes + set burialSiteType = ?, + bodyCapacityMax = ?, + crematedCapacityMax = ?, + recordUpdate_userName = ?, recordUpdate_timeMillis = ? + where recordDelete_timeMillis is null + and burialSiteTypeId = ?` + ) + .run( + updateForm.burialSiteType, + updateForm.bodyCapacityMax === '' + ? undefined + : updateForm.bodyCapacityMax, + updateForm.crematedCapacityMax === '' + ? undefined + : updateForm.crematedCapacityMax, + + user.userName, + rightNowMillis, + updateForm.burialSiteTypeId + ) + + database.close() + + clearCacheByTableName('BurialSiteTypes') + + return result.changes > 0 +} diff --git a/database/updateRecord.d.ts b/database/updateRecord.d.ts index 08b50458..67645010 100644 --- a/database/updateRecord.d.ts +++ b/database/updateRecord.d.ts @@ -1,3 +1,3 @@ -type RecordTable = 'BurialSiteStatuses' | 'BurialSiteTypes' | 'CommittalTypes' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes'; +type RecordTable = 'BurialSiteStatuses' | 'CommittalTypes' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes'; export declare function updateRecord(recordTable: RecordTable, recordId: number | string, recordName: string, user: User): boolean; export {}; diff --git a/database/updateRecord.js b/database/updateRecord.js index a848db8b..cd171456 100644 --- a/database/updateRecord.js +++ b/database/updateRecord.js @@ -3,7 +3,6 @@ import { sunriseDB } from '../helpers/database.helpers.js'; import { clearCacheByTableName } from '../helpers/functions.cache.js'; const recordNameIdColumns = new Map([ ['BurialSiteStatuses', ['burialSiteStatus', 'burialSiteStatusId']], - ['BurialSiteTypes', ['burialSiteType', 'burialSiteTypeId']], ['CommittalTypes', ['committalType', 'committalTypeId']], [ 'WorkOrderMilestoneTypes', diff --git a/database/updateRecord.ts b/database/updateRecord.ts index ac67017b..39b19cf5 100644 --- a/database/updateRecord.ts +++ b/database/updateRecord.ts @@ -5,14 +5,12 @@ import { clearCacheByTableName } from '../helpers/functions.cache.js' type RecordTable = | 'BurialSiteStatuses' - | 'BurialSiteTypes' | 'CommittalTypes' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes' const recordNameIdColumns = new Map([ ['BurialSiteStatuses', ['burialSiteStatus', 'burialSiteStatusId']], - ['BurialSiteTypes', ['burialSiteType', 'burialSiteTypeId']], ['CommittalTypes', ['committalType', 'committalTypeId']], [ 'WorkOrderMilestoneTypes', diff --git a/handlers/admin-post/doAddBurialSiteType.d.ts b/handlers/admin-post/doAddBurialSiteType.d.ts index 0b0b183b..658538a9 100644 --- a/handlers/admin-post/doAddBurialSiteType.d.ts +++ b/handlers/admin-post/doAddBurialSiteType.d.ts @@ -1,5 +1,3 @@ import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): void; +import { type AddBurialSiteTypeForm } from '../../database/addBurialSiteType.js'; +export default function handler(request: Request, response: Response): void; diff --git a/handlers/admin-post/doAddBurialSiteType.js b/handlers/admin-post/doAddBurialSiteType.js index 56ab68a6..dbfb58f7 100644 --- a/handlers/admin-post/doAddBurialSiteType.js +++ b/handlers/admin-post/doAddBurialSiteType.js @@ -1,7 +1,7 @@ -import addRecord from '../../database/addRecord.js'; +import addBurialSiteType from '../../database/addBurialSiteType.js'; import { getBurialSiteTypes } from '../../helpers/functions.cache.js'; export default function handler(request, response) { - const burialSiteTypeId = addRecord('BurialSiteTypes', request.body.burialSiteType, request.body.orderNumber ?? -1, request.session.user); + const burialSiteTypeId = addBurialSiteType(request.body, request.session.user); const burialSiteTypes = getBurialSiteTypes(); response.json({ success: true, diff --git a/handlers/admin-post/doAddBurialSiteType.ts b/handlers/admin-post/doAddBurialSiteType.ts index 6e481ff6..632b0151 100644 --- a/handlers/admin-post/doAddBurialSiteType.ts +++ b/handlers/admin-post/doAddBurialSiteType.ts @@ -1,20 +1,16 @@ import type { Request, Response } from 'express' -import addRecord from '../../database/addRecord.js' +import addBurialSiteType, { + type AddBurialSiteTypeForm +} from '../../database/addBurialSiteType.js' import { getBurialSiteTypes } from '../../helpers/functions.cache.js' export default function handler( - request: Request< - unknown, - unknown, - { burialSiteType: string; orderNumber?: number | string } - >, + request: Request, response: Response ): void { - const burialSiteTypeId = addRecord( - 'BurialSiteTypes', - request.body.burialSiteType, - request.body.orderNumber ?? -1, + const burialSiteTypeId = addBurialSiteType( + request.body, request.session.user as User ) diff --git a/handlers/admin-post/doUpdateBurialSiteType.d.ts b/handlers/admin-post/doUpdateBurialSiteType.d.ts index d77f376f..5ac7c48c 100644 --- a/handlers/admin-post/doUpdateBurialSiteType.d.ts +++ b/handlers/admin-post/doUpdateBurialSiteType.d.ts @@ -1,5 +1,3 @@ import type { Request, Response } from 'express'; -export default function handler(request: Request, response: Response): void; +import { type UpdateBurialSiteTypeForm } from '../../database/updateBurialSiteType.js'; +export default function handler(request: Request, response: Response): void; diff --git a/handlers/admin-post/doUpdateBurialSiteType.js b/handlers/admin-post/doUpdateBurialSiteType.js index 1dd9c6d8..826242b8 100644 --- a/handlers/admin-post/doUpdateBurialSiteType.js +++ b/handlers/admin-post/doUpdateBurialSiteType.js @@ -1,7 +1,7 @@ -import { updateRecord } from '../../database/updateRecord.js'; +import updateBurialSiteType from '../../database/updateBurialSiteType.js'; import { getBurialSiteTypes } from '../../helpers/functions.cache.js'; export default function handler(request, response) { - const success = updateRecord('BurialSiteTypes', request.body.burialSiteTypeId, request.body.burialSiteType, request.session.user); + const success = updateBurialSiteType(request.body, request.session.user); const burialSiteTypes = getBurialSiteTypes(); response.json({ success, diff --git a/handlers/admin-post/doUpdateBurialSiteType.ts b/handlers/admin-post/doUpdateBurialSiteType.ts index 5de0ea91..76aac687 100644 --- a/handlers/admin-post/doUpdateBurialSiteType.ts +++ b/handlers/admin-post/doUpdateBurialSiteType.ts @@ -1,20 +1,16 @@ import type { Request, Response } from 'express' -import { updateRecord } from '../../database/updateRecord.js' +import updateBurialSiteType, { + type UpdateBurialSiteTypeForm +} from '../../database/updateBurialSiteType.js' import { getBurialSiteTypes } from '../../helpers/functions.cache.js' export default function handler( - request: Request< - unknown, - unknown, - { burialSiteTypeId: string; burialSiteType: string } - >, + request: Request, response: Response ): void { - const success = updateRecord( - 'BurialSiteTypes', - request.body.burialSiteTypeId, - request.body.burialSiteType, + const success = updateBurialSiteType( + request.body, request.session.user as User ) diff --git a/handlers/burialSites-get/new.js b/handlers/burialSites-get/new.js index 384b426b..9739c7ef 100644 --- a/handlers/burialSites-get/new.js +++ b/handlers/burialSites-get/new.js @@ -4,7 +4,11 @@ import { getBurialSiteImages } from '../../helpers/images.helpers.js'; export default async function handler(request, response) { const burialSite = { burialSiteId: -1, - contracts: [] + contracts: [], + // eslint-disable-next-line unicorn/no-null + bodyCapacity: null, + // eslint-disable-next-line unicorn/no-null + crematedCapacity: null }; const cemeteries = getCemeteries(); if (request.query.cemeteryId !== undefined) { diff --git a/handlers/burialSites-get/new.ts b/handlers/burialSites-get/new.ts index 9007f111..a5aff27a 100644 --- a/handlers/burialSites-get/new.ts +++ b/handlers/burialSites-get/new.ts @@ -14,7 +14,13 @@ export default async function handler( ): Promise { const burialSite: BurialSite = { burialSiteId: -1, - contracts: [] + contracts: [], + + // eslint-disable-next-line unicorn/no-null + bodyCapacity: null, + + // eslint-disable-next-line unicorn/no-null + crematedCapacity: null } const cemeteries = getCemeteries() diff --git a/public/html/adminBurialSiteTypes-add.html b/public/html/adminBurialSiteTypes-add.html index 8d295854..9d7a8633 100644 --- a/public/html/adminBurialSiteTypes-add.html +++ b/public/html/adminBurialSiteTypes-add.html @@ -26,6 +26,43 @@ /> +
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
diff --git a/public/html/adminBurialSiteTypes-edit.html b/public/html/adminBurialSiteTypes-edit.html index 9079eb08..4f6b08bd 100644 --- a/public/html/adminBurialSiteTypes-edit.html +++ b/public/html/adminBurialSiteTypes-edit.html @@ -34,6 +34,44 @@ />
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+