show child cemeteries

pull/11/head
Dan Gowans 2025-04-16 15:14:33 -04:00
parent 966a2fc869
commit cd47832247
8 changed files with 55 additions and 5 deletions

View File

@ -1,2 +1,4 @@
import type { Cemetery } from '../types/recordTypes.js';
export default function getCemeteries(): Promise<Cemetery[]>;
export default function getCemeteries(filters?: {
parentCemeteryId?: number | string;
}): Promise<Cemetery[]>;

View File

@ -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;
}

View File

@ -2,9 +2,18 @@ import type { Cemetery } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
export default async function getCemeteries(): Promise<Cemetery[]> {
export default async function getCemeteries(filters?: {
parentCemeteryId?: number | string
}
): Promise<Cemetery[]> {
const database = await acquireConnection()
const sqlParameters: Array<number | string> = []
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<Cemetery[]> {
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<Cemetery[]> {
p.cemeteryId, p.cemeteryName
order by m.cemeteryName, m.cemeteryId`
)
.all() as Cemetery[]
.all(sqlParameters) as Cemetery[]
database.release()

View File

@ -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();
}

View File

@ -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()
}

View File

@ -84,6 +84,7 @@ export interface Cemetery extends Record {
cemeteryProvince: string;
cemeteryPhoneNumber: string;
burialSiteCount?: number;
childCemeteries?: Cemetery[];
}
export interface CommittalType extends Record {
committalTypeId: number;

View File

@ -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
}

View File

@ -96,6 +96,19 @@
<%= (cemetery.parentCemeteryName ?? '') === '' ? "(No Name)" : cemetery.parentCemeteryName %>
</a>
</div>
<% } else if (cemetery.childCemeteries.length > 0) { %>
<div class="column">
<strong>Child Cemeteries</strong><br />
<ul>
<% for (const childCemetery of cemetery.childCemeteries) { %>
<li>
<a href="<%= urlPrefix %>/cemeteries/<%= childCemetery.cemeteryId %>">
<%= (childCemetery.cemeteryName ?? '') === '' ? "(No Name)" : childCemetery.cemeteryName %>
</a>
</li>
<% } %>
</ul>
</div>
<% } %>
</div>
</div>