diff --git a/database/getCemeteries.d.ts b/database/getCemeteries.d.ts index d027c01e..b930213c 100644 --- a/database/getCemeteries.d.ts +++ b/database/getCemeteries.d.ts @@ -1,2 +1,4 @@ import type { Cemetery } from '../types/recordTypes.js'; -export default function getCemeteries(): Promise; +export default function getCemeteries(filters?: { + parentCemeteryId?: number | string; +}): Promise; diff --git a/database/getCemeteries.js b/database/getCemeteries.js index 0177e531..6839f1d8 100644 --- a/database/getCemeteries.js +++ b/database/getCemeteries.js @@ -1,6 +1,10 @@ import { acquireConnection } from './pool.js'; -export default async function getCemeteries() { +export default async function getCemeteries(filters) { const database = await acquireConnection(); + const sqlParameters = []; + if (filters?.parentCemeteryId !== undefined) { + sqlParameters.push(filters.parentCemeteryId); + } const cemeteries = database .prepare(`select m.cemeteryId, m.cemeteryName, m.cemeteryKey, m.cemeteryDescription, m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, @@ -12,13 +16,14 @@ export default async function getCemeteries() { left join Cemeteries p on m.parentCemeteryId = p.cemeteryId and p.recordDelete_timeMillis is null left join BurialSites b on m.cemeteryId = b.cemeteryId and b.recordDelete_timeMillis is null where m.recordDelete_timeMillis is null + ${filters?.parentCemeteryId === undefined ? '' : 'and m.parentCemeteryId = ?'} group by m.cemeteryId, m.cemeteryName, m.cemeteryDescription, m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, m.cemeteryAddress1, m.cemeteryAddress2, m.cemeteryCity, m.cemeteryProvince, m.cemeteryPostalCode, m.cemeteryPhoneNumber, p.cemeteryId, p.cemeteryName order by m.cemeteryName, m.cemeteryId`) - .all(); + .all(sqlParameters); database.release(); return cemeteries; } diff --git a/database/getCemeteries.ts b/database/getCemeteries.ts index c4691a05..88ce34d7 100644 --- a/database/getCemeteries.ts +++ b/database/getCemeteries.ts @@ -2,9 +2,18 @@ import type { Cemetery } from '../types/recordTypes.js' import { acquireConnection } from './pool.js' -export default async function getCemeteries(): Promise { +export default async function getCemeteries(filters?: { + parentCemeteryId?: number | string +} +): Promise { const database = await acquireConnection() + const sqlParameters: Array = [] + + if (filters?.parentCemeteryId !== undefined) { + sqlParameters.push(filters.parentCemeteryId) + } + const cemeteries = database .prepare( `select m.cemeteryId, m.cemeteryName, m.cemeteryKey, m.cemeteryDescription, @@ -17,6 +26,7 @@ export default async function getCemeteries(): Promise { left join Cemeteries p on m.parentCemeteryId = p.cemeteryId and p.recordDelete_timeMillis is null left join BurialSites b on m.cemeteryId = b.cemeteryId and b.recordDelete_timeMillis is null where m.recordDelete_timeMillis is null + ${filters?.parentCemeteryId === undefined ? '' : 'and m.parentCemeteryId = ?'} group by m.cemeteryId, m.cemeteryName, m.cemeteryDescription, m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, m.cemeteryAddress1, m.cemeteryAddress2, m.cemeteryCity, m.cemeteryProvince, m.cemeteryPostalCode, @@ -24,7 +34,7 @@ export default async function getCemeteries(): Promise { p.cemeteryId, p.cemeteryName order by m.cemeteryName, m.cemeteryId` ) - .all() as Cemetery[] + .all(sqlParameters) as Cemetery[] database.release() diff --git a/database/getCemetery.js b/database/getCemetery.js index efc59de0..05047231 100644 --- a/database/getCemetery.js +++ b/database/getCemetery.js @@ -1,3 +1,4 @@ +import getCemeteries from './getCemeteries.js'; import { acquireConnection } from './pool.js'; export default async function getCemetery(cemeteryId, connectedDatabase) { return await _getCemetery('cemeteryId', cemeteryId, connectedDatabase); @@ -35,6 +36,12 @@ async function _getCemetery(keyColumn, cemeteryIdOrKey, connectedDatabase) { m.recordUpdate_userName, m.recordUpdate_timeMillis, m.recordDelete_userName, m.recordDelete_timeMillis`) .get(cemeteryIdOrKey); + if (cemetery !== undefined) { + cemetery.childCemeteries = + cemetery.parentCemeteryId === null + ? await getCemeteries({ parentCemeteryId: cemetery.cemeteryId }) + : []; + } if (connectedDatabase === undefined) { database.release(); } diff --git a/database/getCemetery.ts b/database/getCemetery.ts index bc32a3d7..de1d85a0 100644 --- a/database/getCemetery.ts +++ b/database/getCemetery.ts @@ -2,6 +2,7 @@ import type { PoolConnection } from 'better-sqlite-pool' import type { Cemetery } from '../types/recordTypes.js' +import getCemeteries from './getCemeteries.js' import { acquireConnection } from './pool.js' export default async function getCemetery( @@ -56,6 +57,13 @@ async function _getCemetery( ) .get(cemeteryIdOrKey) as Cemetery | undefined + if (cemetery !== undefined) { + cemetery.childCemeteries = + cemetery.parentCemeteryId === null + ? await getCemeteries({ parentCemeteryId: cemetery.cemeteryId }) + : [] + } + if (connectedDatabase === undefined) { database.release() } diff --git a/types/recordTypes.d.ts b/types/recordTypes.d.ts index 40c6c448..101b35a6 100644 --- a/types/recordTypes.d.ts +++ b/types/recordTypes.d.ts @@ -84,6 +84,7 @@ export interface Cemetery extends Record { cemeteryProvince: string; cemeteryPhoneNumber: string; burialSiteCount?: number; + childCemeteries?: Cemetery[]; } export interface CommittalType extends Record { committalTypeId: number; diff --git a/types/recordTypes.ts b/types/recordTypes.ts index f072bce2..edfd36ac 100644 --- a/types/recordTypes.ts +++ b/types/recordTypes.ts @@ -117,6 +117,7 @@ export interface Cemetery extends Record { cemeteryPhoneNumber: string burialSiteCount?: number + childCemeteries?: Cemetery[] } export interface CommittalType extends Record { @@ -358,6 +359,7 @@ export interface FuneralHome extends Record { export interface IntermentContainerType extends Record { intermentContainerTypeId: number + intermentContainerType: string intermentContainerTypeKey: string isCremationType: boolean @@ -452,12 +454,14 @@ export interface WorkOrderMilestone extends Record, WorkOrder { export interface WorkOrderMilestoneType extends Record { workOrderMilestoneTypeId: number workOrderMilestoneType: string + orderNumber?: number } export interface WorkOrderType extends Record { workOrderTypeId: number workOrderType?: string + orderNumber?: number } diff --git a/views/cemetery-view.ejs b/views/cemetery-view.ejs index cc46befe..33ba35c9 100644 --- a/views/cemetery-view.ejs +++ b/views/cemetery-view.ejs @@ -96,6 +96,19 @@ <%= (cemetery.parentCemeteryName ?? '') === '' ? "(No Name)" : cemetery.parentCemeteryName %> + <% } else if (cemetery.childCemeteries.length > 0) { %> +
+ Child Cemeteries
+ +
<% } %>