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'; 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'; import { acquireConnection } from './pool.js';
export default async function getCemeteries() { export default async function getCemeteries(filters) {
const database = await acquireConnection(); const database = await acquireConnection();
const sqlParameters = [];
if (filters?.parentCemeteryId !== undefined) {
sqlParameters.push(filters.parentCemeteryId);
}
const cemeteries = database const cemeteries = database
.prepare(`select m.cemeteryId, m.cemeteryName, m.cemeteryKey, m.cemeteryDescription, .prepare(`select m.cemeteryId, m.cemeteryName, m.cemeteryKey, m.cemeteryDescription,
m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, 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 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 left join BurialSites b on m.cemeteryId = b.cemeteryId and b.recordDelete_timeMillis is null
where m.recordDelete_timeMillis is null where m.recordDelete_timeMillis is null
${filters?.parentCemeteryId === undefined ? '' : 'and m.parentCemeteryId = ?'}
group by m.cemeteryId, m.cemeteryName, m.cemeteryDescription, group by m.cemeteryId, m.cemeteryName, m.cemeteryDescription,
m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg,
m.cemeteryAddress1, m.cemeteryAddress2, m.cemeteryCity, m.cemeteryProvince, m.cemeteryPostalCode, m.cemeteryAddress1, m.cemeteryAddress2, m.cemeteryCity, m.cemeteryProvince, m.cemeteryPostalCode,
m.cemeteryPhoneNumber, m.cemeteryPhoneNumber,
p.cemeteryId, p.cemeteryName p.cemeteryId, p.cemeteryName
order by m.cemeteryName, m.cemeteryId`) order by m.cemeteryName, m.cemeteryId`)
.all(); .all(sqlParameters);
database.release(); database.release();
return cemeteries; return cemeteries;
} }

View File

@ -2,9 +2,18 @@ import type { Cemetery } from '../types/recordTypes.js'
import { acquireConnection } from './pool.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 database = await acquireConnection()
const sqlParameters: Array<number | string> = []
if (filters?.parentCemeteryId !== undefined) {
sqlParameters.push(filters.parentCemeteryId)
}
const cemeteries = database const cemeteries = database
.prepare( .prepare(
`select m.cemeteryId, m.cemeteryName, m.cemeteryKey, m.cemeteryDescription, `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 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 left join BurialSites b on m.cemeteryId = b.cemeteryId and b.recordDelete_timeMillis is null
where m.recordDelete_timeMillis is null where m.recordDelete_timeMillis is null
${filters?.parentCemeteryId === undefined ? '' : 'and m.parentCemeteryId = ?'}
group by m.cemeteryId, m.cemeteryName, m.cemeteryDescription, group by m.cemeteryId, m.cemeteryName, m.cemeteryDescription,
m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg,
m.cemeteryAddress1, m.cemeteryAddress2, m.cemeteryCity, m.cemeteryProvince, m.cemeteryPostalCode, 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 p.cemeteryId, p.cemeteryName
order by m.cemeteryName, m.cemeteryId` order by m.cemeteryName, m.cemeteryId`
) )
.all() as Cemetery[] .all(sqlParameters) as Cemetery[]
database.release() database.release()

View File

@ -1,3 +1,4 @@
import getCemeteries from './getCemeteries.js';
import { acquireConnection } from './pool.js'; import { acquireConnection } from './pool.js';
export default async function getCemetery(cemeteryId, connectedDatabase) { export default async function getCemetery(cemeteryId, connectedDatabase) {
return await _getCemetery('cemeteryId', 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.recordUpdate_userName, m.recordUpdate_timeMillis,
m.recordDelete_userName, m.recordDelete_timeMillis`) m.recordDelete_userName, m.recordDelete_timeMillis`)
.get(cemeteryIdOrKey); .get(cemeteryIdOrKey);
if (cemetery !== undefined) {
cemetery.childCemeteries =
cemetery.parentCemeteryId === null
? await getCemeteries({ parentCemeteryId: cemetery.cemeteryId })
: [];
}
if (connectedDatabase === undefined) { if (connectedDatabase === undefined) {
database.release(); database.release();
} }

View File

@ -2,6 +2,7 @@ import type { PoolConnection } from 'better-sqlite-pool'
import type { Cemetery } from '../types/recordTypes.js' import type { Cemetery } from '../types/recordTypes.js'
import getCemeteries from './getCemeteries.js'
import { acquireConnection } from './pool.js' import { acquireConnection } from './pool.js'
export default async function getCemetery( export default async function getCemetery(
@ -56,6 +57,13 @@ async function _getCemetery(
) )
.get(cemeteryIdOrKey) as Cemetery | undefined .get(cemeteryIdOrKey) as Cemetery | undefined
if (cemetery !== undefined) {
cemetery.childCemeteries =
cemetery.parentCemeteryId === null
? await getCemeteries({ parentCemeteryId: cemetery.cemeteryId })
: []
}
if (connectedDatabase === undefined) { if (connectedDatabase === undefined) {
database.release() database.release()
} }

View File

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

View File

@ -117,6 +117,7 @@ export interface Cemetery extends Record {
cemeteryPhoneNumber: string cemeteryPhoneNumber: string
burialSiteCount?: number burialSiteCount?: number
childCemeteries?: Cemetery[]
} }
export interface CommittalType extends Record { export interface CommittalType extends Record {
@ -358,6 +359,7 @@ export interface FuneralHome extends Record {
export interface IntermentContainerType extends Record { export interface IntermentContainerType extends Record {
intermentContainerTypeId: number intermentContainerTypeId: number
intermentContainerType: string intermentContainerType: string
intermentContainerTypeKey: string intermentContainerTypeKey: string
isCremationType: boolean isCremationType: boolean
@ -452,12 +454,14 @@ export interface WorkOrderMilestone extends Record, WorkOrder {
export interface WorkOrderMilestoneType extends Record { export interface WorkOrderMilestoneType extends Record {
workOrderMilestoneTypeId: number workOrderMilestoneTypeId: number
workOrderMilestoneType: string workOrderMilestoneType: string
orderNumber?: number orderNumber?: number
} }
export interface WorkOrderType extends Record { export interface WorkOrderType extends Record {
workOrderTypeId: number workOrderTypeId: number
workOrderType?: string workOrderType?: string
orderNumber?: number orderNumber?: number
} }

View File

@ -96,6 +96,19 @@
<%= (cemetery.parentCemeteryName ?? '') === '' ? "(No Name)" : cemetery.parentCemeteryName %> <%= (cemetery.parentCemeteryName ?? '') === '' ? "(No Name)" : cemetery.parentCemeteryName %>
</a> </a>
</div> </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>
</div> </div>