diff --git a/database/addCemetery.d.ts b/database/addCemetery.d.ts index 13ed47f1..6bba5c4c 100644 --- a/database/addCemetery.d.ts +++ b/database/addCemetery.d.ts @@ -2,6 +2,7 @@ export interface AddCemeteryForm { cemeteryDescription: string; cemeteryKey: string; cemeteryName: string; + parentCemeteryId: string; cemeteryLatitude: string; cemeteryLongitude: string; cemeterySvg: string; diff --git a/database/addCemetery.js b/database/addCemetery.js index 315fd088..f3dadb52 100644 --- a/database/addCemetery.js +++ b/database/addCemetery.js @@ -9,10 +9,11 @@ export default async function addCemetery(addForm, user) { cemeteryAddress1, cemeteryAddress2, cemeteryCity, cemeteryProvince, cemeteryPostalCode, cemeteryPhoneNumber, + parentCemeteryId, recordCreate_userName, recordCreate_timeMillis, recordUpdate_userName, recordUpdate_timeMillis) - values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`) - .run(addForm.cemeteryName, addForm.cemeteryKey, addForm.cemeteryDescription, addForm.cemeterySvg, addForm.cemeteryLatitude === '' ? undefined : addForm.cemeteryLatitude, addForm.cemeteryLongitude === '' ? undefined : addForm.cemeteryLongitude, addForm.cemeteryAddress1, addForm.cemeteryAddress2, addForm.cemeteryCity, addForm.cemeteryProvince, addForm.cemeteryPostalCode, addForm.cemeteryPhoneNumber, user.userName, rightNowMillis, user.userName, rightNowMillis); + values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`) + .run(addForm.cemeteryName, addForm.cemeteryKey, addForm.cemeteryDescription, addForm.cemeterySvg, addForm.cemeteryLatitude === '' ? undefined : addForm.cemeteryLatitude, addForm.cemeteryLongitude === '' ? undefined : addForm.cemeteryLongitude, addForm.cemeteryAddress1, addForm.cemeteryAddress2, addForm.cemeteryCity, addForm.cemeteryProvince, addForm.cemeteryPostalCode, addForm.cemeteryPhoneNumber, addForm.parentCemeteryId === '' ? undefined : addForm.parentCemeteryId, user.userName, rightNowMillis, user.userName, rightNowMillis); database.release(); return result.lastInsertRowid; } diff --git a/database/addCemetery.ts b/database/addCemetery.ts index a6c2a58a..def5c39e 100644 --- a/database/addCemetery.ts +++ b/database/addCemetery.ts @@ -4,6 +4,7 @@ export interface AddCemeteryForm { cemeteryDescription: string cemeteryKey: string cemeteryName: string + parentCemeteryId: string cemeteryLatitude: string cemeteryLongitude: string @@ -14,7 +15,7 @@ export interface AddCemeteryForm { cemeteryCity: string cemeteryPostalCode: string cemeteryProvince: string - + cemeteryPhoneNumber: string } @@ -34,9 +35,10 @@ export default async function addCemetery( cemeteryAddress1, cemeteryAddress2, cemeteryCity, cemeteryProvince, cemeteryPostalCode, cemeteryPhoneNumber, + parentCemeteryId, recordCreate_userName, recordCreate_timeMillis, recordUpdate_userName, recordUpdate_timeMillis) - values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` + values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` ) .run( addForm.cemeteryName, @@ -51,6 +53,7 @@ export default async function addCemetery( addForm.cemeteryProvince, addForm.cemeteryPostalCode, addForm.cemeteryPhoneNumber, + addForm.parentCemeteryId === '' ? undefined : addForm.parentCemeteryId, user.userName, rightNowMillis, user.userName, diff --git a/database/getBurialSites.js b/database/getBurialSites.js index b91670aa..3242581d 100644 --- a/database/getBurialSites.js +++ b/database/getBurialSites.js @@ -8,8 +8,8 @@ function buildWhereClause(filters) { sqlWhereClause += burialSiteNameFilters.sqlWhereClause; sqlParameters.push(...burialSiteNameFilters.sqlParameters); if ((filters.cemeteryId ?? '') !== '') { - sqlWhereClause += ' and l.cemeteryId = ?'; - sqlParameters.push(filters.cemeteryId); + sqlWhereClause += ' and (m.cemeteryId = ? or m.parentCemeteryId = ?)'; + sqlParameters.push(filters.cemeteryId, filters.cemeteryId); } if ((filters.burialSiteTypeId ?? '') !== '') { sqlWhereClause += ' and l.burialSiteTypeId = ?'; @@ -47,6 +47,7 @@ export default async function getBurialSites(filters, options, connectedDatabase count = database .prepare(`select count(*) as recordCount from BurialSites l + left join Cemeteries m on l.cemeteryId = m.cemeteryId left join ( select burialSiteId, count(contractId) as contractCount from Contracts where recordDelete_timeMillis is null diff --git a/database/getBurialSites.ts b/database/getBurialSites.ts index 781b496c..e595a139 100644 --- a/database/getBurialSites.ts +++ b/database/getBurialSites.ts @@ -40,8 +40,8 @@ function buildWhereClause(filters: GetBurialSitesFilters): { sqlParameters.push(...burialSiteNameFilters.sqlParameters) if ((filters.cemeteryId ?? '') !== '') { - sqlWhereClause += ' and l.cemeteryId = ?' - sqlParameters.push(filters.cemeteryId) + sqlWhereClause += ' and (m.cemeteryId = ? or m.parentCemeteryId = ?)' + sqlParameters.push(filters.cemeteryId, filters.cemeteryId) } if ((filters.burialSiteTypeId ?? '') !== '') { @@ -94,6 +94,7 @@ export default async function getBurialSites( .prepare( `select count(*) as recordCount from BurialSites l + left join Cemeteries m on l.cemeteryId = m.cemeteryId left join ( select burialSiteId, count(contractId) as contractCount from Contracts where recordDelete_timeMillis is null diff --git a/database/getCemeteries.js b/database/getCemeteries.js index 3a2dd982..0177e531 100644 --- a/database/getCemeteries.js +++ b/database/getCemeteries.js @@ -6,14 +6,17 @@ export default async function getCemeteries() { m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, m.cemeteryAddress1, m.cemeteryAddress2, m.cemeteryCity, m.cemeteryProvince, m.cemeteryPostalCode, m.cemeteryPhoneNumber, + p.cemeteryId as parentCemeteryId, p.cemeteryName as parentCemeteryName, count(b.burialSiteId) as burialSiteCount from Cemeteries m + 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 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 + m.cemeteryPhoneNumber, + p.cemeteryId, p.cemeteryName order by m.cemeteryName, m.cemeteryId`) .all(); database.release(); diff --git a/database/getCemeteries.ts b/database/getCemeteries.ts index 9716edd6..c4691a05 100644 --- a/database/getCemeteries.ts +++ b/database/getCemeteries.ts @@ -11,14 +11,17 @@ export default async function getCemeteries(): Promise { m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, m.cemeteryAddress1, m.cemeteryAddress2, m.cemeteryCity, m.cemeteryProvince, m.cemeteryPostalCode, m.cemeteryPhoneNumber, + p.cemeteryId as parentCemeteryId, p.cemeteryName as parentCemeteryName, count(b.burialSiteId) as burialSiteCount from Cemeteries m + 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 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 + m.cemeteryPhoneNumber, + p.cemeteryId, p.cemeteryName order by m.cemeteryName, m.cemeteryId` ) .all() as Cemetery[] diff --git a/database/getCemetery.js b/database/getCemetery.js index 8b9dd47b..9196ae11 100644 --- a/database/getCemetery.js +++ b/database/getCemetery.js @@ -6,11 +6,13 @@ async function _getCemetery(keyColumn, cemeteryIdOrKey, connectedDatabase) { m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, m.cemeteryAddress1, m.cemeteryAddress2, m.cemeteryCity, m.cemeteryProvince, m.cemeteryPostalCode, m.cemeteryPhoneNumber, + p.cemeteryId as parentCemeteryId, p.cemeteryName as parentCemeteryName, m.recordCreate_userName, m.recordCreate_timeMillis, m.recordUpdate_userName, m.recordUpdate_timeMillis, m.recordDelete_userName, m.recordDelete_timeMillis, count(l.burialSiteId) as burialSiteCount from Cemeteries m + left join Cemeteries p on m.parentCemeteryId = p.cemeteryId and p.recordDelete_timeMillis is null left join BurialSites l on m.cemeteryId = l.cemeteryId and l.recordDelete_timeMillis is null where m.${keyColumn} = ? and m.recordDelete_timeMillis is null @@ -18,6 +20,7 @@ async function _getCemetery(keyColumn, cemeteryIdOrKey, connectedDatabase) { m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, m.cemeteryAddress1, m.cemeteryAddress2, m.cemeteryCity, m.cemeteryProvince, m.cemeteryPostalCode, m.cemeteryPhoneNumber, + p.cemeteryId, p.cemeteryName, m.recordCreate_userName, m.recordCreate_timeMillis, m.recordUpdate_userName, m.recordUpdate_timeMillis, m.recordDelete_userName, m.recordDelete_timeMillis`) diff --git a/database/getCemetery.ts b/database/getCemetery.ts index d3248c34..922140c4 100644 --- a/database/getCemetery.ts +++ b/database/getCemetery.ts @@ -17,11 +17,13 @@ async function _getCemetery( m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, m.cemeteryAddress1, m.cemeteryAddress2, m.cemeteryCity, m.cemeteryProvince, m.cemeteryPostalCode, m.cemeteryPhoneNumber, + p.cemeteryId as parentCemeteryId, p.cemeteryName as parentCemeteryName, m.recordCreate_userName, m.recordCreate_timeMillis, m.recordUpdate_userName, m.recordUpdate_timeMillis, m.recordDelete_userName, m.recordDelete_timeMillis, count(l.burialSiteId) as burialSiteCount from Cemeteries m + left join Cemeteries p on m.parentCemeteryId = p.cemeteryId and p.recordDelete_timeMillis is null left join BurialSites l on m.cemeteryId = l.cemeteryId and l.recordDelete_timeMillis is null where m.${keyColumn} = ? and m.recordDelete_timeMillis is null @@ -29,6 +31,7 @@ async function _getCemetery( m.cemeteryLatitude, m.cemeteryLongitude, m.cemeterySvg, m.cemeteryAddress1, m.cemeteryAddress2, m.cemeteryCity, m.cemeteryProvince, m.cemeteryPostalCode, m.cemeteryPhoneNumber, + p.cemeteryId, p.cemeteryName, m.recordCreate_userName, m.recordCreate_timeMillis, m.recordUpdate_userName, m.recordUpdate_timeMillis, m.recordDelete_userName, m.recordDelete_timeMillis` diff --git a/database/getContract.ts b/database/getContract.ts index 68726bd5..bf9d2d9d 100644 --- a/database/getContract.ts +++ b/database/getContract.ts @@ -1,6 +1,7 @@ -import { dateIntegerToString, timeIntegerToPeriodString, timeIntegerToString } from '@cityssm/utils-datetime' import type { PoolConnection } from 'better-sqlite-pool' +import { dateIntegerToString, timeIntegerToPeriodString, timeIntegerToString } from '@cityssm/utils-datetime' + import type { Contract } from '../types/recordTypes.js' import getContractComments from './getContractComments.js' diff --git a/database/getContractComments.ts b/database/getContractComments.ts index b4213d3a..0f8389db 100644 --- a/database/getContractComments.ts +++ b/database/getContractComments.ts @@ -1,9 +1,10 @@ +import type { PoolConnection } from 'better-sqlite-pool' + import { dateIntegerToString, timeIntegerToPeriodString, timeIntegerToString } from '@cityssm/utils-datetime' -import type { PoolConnection } from 'better-sqlite-pool' import type { ContractComment } from '../types/recordTypes.js' diff --git a/database/getContractInterments.ts b/database/getContractInterments.ts index c70c8ce8..03e944f8 100644 --- a/database/getContractInterments.ts +++ b/database/getContractInterments.ts @@ -1,7 +1,8 @@ +import type { PoolConnection } from 'better-sqlite-pool' + import { dateIntegerToString } from '@cityssm/utils-datetime' -import type { PoolConnection } from 'better-sqlite-pool' import type { ContractInterment } from '../types/recordTypes.js' diff --git a/database/getContractTransactions.ts b/database/getContractTransactions.ts index 41589848..278809f3 100644 --- a/database/getContractTransactions.ts +++ b/database/getContractTransactions.ts @@ -1,8 +1,9 @@ +import type { PoolConnection } from 'better-sqlite-pool' + import { dateIntegerToString, timeIntegerToString } from '@cityssm/utils-datetime' -import type { PoolConnection } from 'better-sqlite-pool' import { getConfigProperty } from '../helpers/config.helpers.js' import { getDynamicsGPDocument } from '../helpers/functions.dynamicsGP.js' diff --git a/database/getContracts.d.ts b/database/getContracts.d.ts index 7b1bdf6d..0ae82270 100644 --- a/database/getContracts.d.ts +++ b/database/getContracts.d.ts @@ -1,20 +1,20 @@ -import { type DateString } from '@cityssm/utils-datetime'; import type { PoolConnection } from 'better-sqlite-pool'; +import { type DateString } from '@cityssm/utils-datetime'; import type { Contract } from '../types/recordTypes.js'; export interface GetContractsFilters { burialSiteId?: number | string; - contractTime?: '' | 'past' | 'current' | 'future'; + contractTime?: '' | 'current' | 'future' | 'past'; contractStartDateString?: DateString; contractEffectiveDateString?: string; deceasedName?: string; contractTypeId?: number | string; cemeteryId?: number | string; - burialSiteNameSearchType?: '' | 'startsWith' | 'endsWith'; burialSiteName?: string; + burialSiteNameSearchType?: '' | 'startsWith' | 'endsWith'; burialSiteTypeId?: number | string; funeralHomeId?: number | string; - workOrderId?: number | string; notWorkOrderId?: number | string; + workOrderId?: number | string; } export interface GetContractsOptions { /** -1 for no limit */ diff --git a/database/getContracts.js b/database/getContracts.js index 09637e2e..b504e34e 100644 --- a/database/getContracts.js +++ b/database/getContracts.js @@ -1,87 +1,11 @@ import { dateIntegerToString, dateStringToInteger, timeIntegerToString } from '@cityssm/utils-datetime'; import { getConfigProperty } from '../helpers/config.helpers.js'; import { getContractTypeById } from '../helpers/functions.cache.js'; -import { getBurialSiteNameWhereClause, getContractTimeWhereClause, getDeceasedNameWhereClause, } from '../helpers/functions.sqlFilters.js'; +import { getBurialSiteNameWhereClause, getContractTimeWhereClause, getDeceasedNameWhereClause } from '../helpers/functions.sqlFilters.js'; import getContractFees from './getContractFees.js'; import getContractInterments from './getContractInterments.js'; import getContractTransactions from './getContractTransactions.js'; import { acquireConnection } from './pool.js'; -// eslint-disable-next-line complexity -function buildWhereClause(filters) { - let sqlWhereClause = ' where o.recordDelete_timeMillis is null'; - const sqlParameters = []; - if ((filters.burialSiteId ?? '') !== '') { - sqlWhereClause += ' and o.burialSiteId = ?'; - sqlParameters.push(filters.burialSiteId); - } - const burialSiteNameFilters = getBurialSiteNameWhereClause(filters.burialSiteName, filters.burialSiteNameSearchType ?? '', 'l'); - sqlWhereClause += burialSiteNameFilters.sqlWhereClause; - sqlParameters.push(...burialSiteNameFilters.sqlParameters); - const deceasedNameFilters = getDeceasedNameWhereClause(filters.deceasedName, 'o'); - if (deceasedNameFilters.sqlParameters.length > 0) { - sqlWhereClause += ` and o.contractId in ( - select contractId from ContractInterments o - where recordDelete_timeMillis is null - ${deceasedNameFilters.sqlWhereClause})`; - sqlParameters.push(...deceasedNameFilters.sqlParameters); - } - if ((filters.contractTypeId ?? '') !== '') { - sqlWhereClause += ' and o.contractTypeId = ?'; - sqlParameters.push(filters.contractTypeId); - } - const contractTimeFilters = getContractTimeWhereClause(filters.contractTime ?? '', 'o'); - sqlWhereClause += contractTimeFilters.sqlWhereClause; - sqlParameters.push(...contractTimeFilters.sqlParameters); - if ((filters.contractStartDateString ?? '') !== '') { - sqlWhereClause += ' and o.contractStartDate = ?'; - sqlParameters.push(dateStringToInteger(filters.contractStartDateString)); - } - if ((filters.contractEffectiveDateString ?? '') !== '') { - sqlWhereClause += ` and ( - o.contractEndDate is null - or (o.contractStartDate <= ? and o.contractEndDate >= ?) - )`; - sqlParameters.push(dateStringToInteger(filters.contractEffectiveDateString), dateStringToInteger(filters.contractEffectiveDateString)); - } - if ((filters.cemeteryId ?? '') !== '') { - sqlWhereClause += ' and l.cemeteryId = ?'; - sqlParameters.push(filters.cemeteryId); - } - if ((filters.burialSiteTypeId ?? '') !== '') { - sqlWhereClause += ' and l.burialSiteTypeId = ?'; - sqlParameters.push(filters.burialSiteTypeId); - } - if ((filters.funeralHomeId ?? '') !== '') { - sqlWhereClause += ' and o.funeralHomeId = ?'; - sqlParameters.push(filters.funeralHomeId); - } - if ((filters.workOrderId ?? '') !== '') { - sqlWhereClause += - ' and o.contractId in (select contractId from WorkOrderContracts where recordDelete_timeMillis is null and workOrderId = ?)'; - sqlParameters.push(filters.workOrderId); - } - if ((filters.notWorkOrderId ?? '') !== '') { - sqlWhereClause += - ' and o.contractId not in (select contractId from WorkOrderContracts where recordDelete_timeMillis is null and workOrderId = ?)'; - sqlParameters.push(filters.notWorkOrderId); - } - return { - sqlWhereClause, - sqlParameters - }; -} -async function addInclusions(contract, options, database) { - if (options.includeFees) { - contract.contractFees = await getContractFees(contract.contractId, database); - } - if (options.includeTransactions) { - contract.contractTransactions = await getContractTransactions(contract.contractId, { includeIntegrations: false }, database); - } - if (options.includeInterments) { - contract.contractInterments = await getContractInterments(contract.contractId, database); - } - return contract; -} export default async function getContracts(filters, options, connectedDatabase) { const database = connectedDatabase ?? (await acquireConnection()); database.function('userFn_dateIntegerToString', dateIntegerToString); @@ -96,6 +20,7 @@ export default async function getContracts(filters, options, connectedDatabase) .prepare(`select count(*) as recordCount from Contracts o left join BurialSites l on o.burialSiteId = l.burialSiteId + left join Cemeteries m on l.cemeteryId = m.cemeteryId ${sqlWhereClause}`) .get(sqlParameters).recordCount; } @@ -154,3 +79,79 @@ export default async function getContracts(filters, options, connectedDatabase) contracts }; } +async function addInclusions(contract, options, database) { + if (options.includeFees) { + contract.contractFees = await getContractFees(contract.contractId, database); + } + if (options.includeTransactions) { + contract.contractTransactions = await getContractTransactions(contract.contractId, { includeIntegrations: false }, database); + } + if (options.includeInterments) { + contract.contractInterments = await getContractInterments(contract.contractId, database); + } + return contract; +} +// eslint-disable-next-line complexity +function buildWhereClause(filters) { + let sqlWhereClause = ' where o.recordDelete_timeMillis is null'; + const sqlParameters = []; + if ((filters.burialSiteId ?? '') !== '') { + sqlWhereClause += ' and o.burialSiteId = ?'; + sqlParameters.push(filters.burialSiteId); + } + const burialSiteNameFilters = getBurialSiteNameWhereClause(filters.burialSiteName, filters.burialSiteNameSearchType ?? '', 'l'); + sqlWhereClause += burialSiteNameFilters.sqlWhereClause; + sqlParameters.push(...burialSiteNameFilters.sqlParameters); + const deceasedNameFilters = getDeceasedNameWhereClause(filters.deceasedName, 'o'); + if (deceasedNameFilters.sqlParameters.length > 0) { + sqlWhereClause += ` and o.contractId in ( + select contractId from ContractInterments o + where recordDelete_timeMillis is null + ${deceasedNameFilters.sqlWhereClause})`; + sqlParameters.push(...deceasedNameFilters.sqlParameters); + } + if ((filters.contractTypeId ?? '') !== '') { + sqlWhereClause += ' and o.contractTypeId = ?'; + sqlParameters.push(filters.contractTypeId); + } + const contractTimeFilters = getContractTimeWhereClause(filters.contractTime ?? '', 'o'); + sqlWhereClause += contractTimeFilters.sqlWhereClause; + sqlParameters.push(...contractTimeFilters.sqlParameters); + if ((filters.contractStartDateString ?? '') !== '') { + sqlWhereClause += ' and o.contractStartDate = ?'; + sqlParameters.push(dateStringToInteger(filters.contractStartDateString)); + } + if ((filters.contractEffectiveDateString ?? '') !== '') { + sqlWhereClause += ` and ( + o.contractEndDate is null + or (o.contractStartDate <= ? and o.contractEndDate >= ?) + )`; + sqlParameters.push(dateStringToInteger(filters.contractEffectiveDateString), dateStringToInteger(filters.contractEffectiveDateString)); + } + if ((filters.cemeteryId ?? '') !== '') { + sqlWhereClause += ' and (m.cemeteryId = ? or m.parentCemeteryId = ?)'; + sqlParameters.push(filters.cemeteryId, filters.cemeteryId); + } + if ((filters.burialSiteTypeId ?? '') !== '') { + sqlWhereClause += ' and l.burialSiteTypeId = ?'; + sqlParameters.push(filters.burialSiteTypeId); + } + if ((filters.funeralHomeId ?? '') !== '') { + sqlWhereClause += ' and o.funeralHomeId = ?'; + sqlParameters.push(filters.funeralHomeId); + } + if ((filters.workOrderId ?? '') !== '') { + sqlWhereClause += + ' and o.contractId in (select contractId from WorkOrderContracts where recordDelete_timeMillis is null and workOrderId = ?)'; + sqlParameters.push(filters.workOrderId); + } + if ((filters.notWorkOrderId ?? '') !== '') { + sqlWhereClause += + ' and o.contractId not in (select contractId from WorkOrderContracts where recordDelete_timeMillis is null and workOrderId = ?)'; + sqlParameters.push(filters.notWorkOrderId); + } + return { + sqlWhereClause, + sqlParameters + }; +} diff --git a/database/getContracts.ts b/database/getContracts.ts index a9b128c6..41f97f16 100644 --- a/database/getContracts.ts +++ b/database/getContracts.ts @@ -1,17 +1,18 @@ +import type { PoolConnection } from 'better-sqlite-pool' + import { type DateString, dateIntegerToString, dateStringToInteger, timeIntegerToString } from '@cityssm/utils-datetime' -import type { PoolConnection } from 'better-sqlite-pool' import { getConfigProperty } from '../helpers/config.helpers.js' import { getContractTypeById } from '../helpers/functions.cache.js' import { getBurialSiteNameWhereClause, getContractTimeWhereClause, - getDeceasedNameWhereClause, + getDeceasedNameWhereClause } from '../helpers/functions.sqlFilters.js' import type { Contract } from '../types/recordTypes.js' @@ -22,18 +23,23 @@ import { acquireConnection } from './pool.js' export interface GetContractsFilters { burialSiteId?: number | string - contractTime?: '' | 'past' | 'current' | 'future' + + contractTime?: '' | 'current' | 'future' | 'past' contractStartDateString?: DateString contractEffectiveDateString?: string + deceasedName?: string contractTypeId?: number | string cemeteryId?: number | string - burialSiteNameSearchType?: '' | 'startsWith' | 'endsWith' + burialSiteName?: string + burialSiteNameSearchType?: '' | 'startsWith' | 'endsWith' + burialSiteTypeId?: number | string funeralHomeId?: number | string - workOrderId?: number | string + notWorkOrderId?: number | string + workOrderId?: number | string } export interface GetContractsOptions { @@ -45,129 +51,6 @@ export interface GetContractsOptions { includeTransactions: boolean } -// eslint-disable-next-line complexity -function buildWhereClause(filters: GetContractsFilters): { - sqlWhereClause: string - sqlParameters: unknown[] -} { - let sqlWhereClause = ' where o.recordDelete_timeMillis is null' - const sqlParameters: unknown[] = [] - - if ((filters.burialSiteId ?? '') !== '') { - sqlWhereClause += ' and o.burialSiteId = ?' - sqlParameters.push(filters.burialSiteId) - } - - const burialSiteNameFilters = getBurialSiteNameWhereClause( - filters.burialSiteName, - filters.burialSiteNameSearchType ?? '', - 'l' - ) - sqlWhereClause += burialSiteNameFilters.sqlWhereClause - sqlParameters.push(...burialSiteNameFilters.sqlParameters) - - const deceasedNameFilters = getDeceasedNameWhereClause( - filters.deceasedName, - 'o' - ) - if (deceasedNameFilters.sqlParameters.length > 0) { - sqlWhereClause += ` and o.contractId in ( - select contractId from ContractInterments o - where recordDelete_timeMillis is null - ${deceasedNameFilters.sqlWhereClause})` - sqlParameters.push(...deceasedNameFilters.sqlParameters) - } - - if ((filters.contractTypeId ?? '') !== '') { - sqlWhereClause += ' and o.contractTypeId = ?' - sqlParameters.push(filters.contractTypeId) - } - - const contractTimeFilters = getContractTimeWhereClause( - filters.contractTime ?? '', - 'o' - ) - sqlWhereClause += contractTimeFilters.sqlWhereClause - sqlParameters.push(...contractTimeFilters.sqlParameters) - - if ((filters.contractStartDateString ?? '') !== '') { - sqlWhereClause += ' and o.contractStartDate = ?' - sqlParameters.push( - dateStringToInteger(filters.contractStartDateString as DateString) - ) - } - - if ((filters.contractEffectiveDateString ?? '') !== '') { - sqlWhereClause += ` and ( - o.contractEndDate is null - or (o.contractStartDate <= ? and o.contractEndDate >= ?) - )` - sqlParameters.push( - dateStringToInteger(filters.contractEffectiveDateString as DateString), - dateStringToInteger(filters.contractEffectiveDateString as DateString) - ) - } - - if ((filters.cemeteryId ?? '') !== '') { - sqlWhereClause += ' and l.cemeteryId = ?' - sqlParameters.push(filters.cemeteryId) - } - - if ((filters.burialSiteTypeId ?? '') !== '') { - sqlWhereClause += ' and l.burialSiteTypeId = ?' - sqlParameters.push(filters.burialSiteTypeId) - } - - if ((filters.funeralHomeId ?? '') !== '') { - sqlWhereClause += ' and o.funeralHomeId = ?' - sqlParameters.push(filters.funeralHomeId) - } - - if ((filters.workOrderId ?? '') !== '') { - sqlWhereClause += - ' and o.contractId in (select contractId from WorkOrderContracts where recordDelete_timeMillis is null and workOrderId = ?)' - sqlParameters.push(filters.workOrderId) - } - - if ((filters.notWorkOrderId ?? '') !== '') { - sqlWhereClause += - ' and o.contractId not in (select contractId from WorkOrderContracts where recordDelete_timeMillis is null and workOrderId = ?)' - sqlParameters.push(filters.notWorkOrderId) - } - - return { - sqlWhereClause, - sqlParameters - } -} - -async function addInclusions( - contract: Contract, - options: GetContractsOptions, - database: PoolConnection -): Promise { - if (options.includeFees) { - contract.contractFees = await getContractFees(contract.contractId, database) - } - - if (options.includeTransactions) { - contract.contractTransactions = await getContractTransactions( - contract.contractId, - { includeIntegrations: false }, - database - ) - } - - if (options.includeInterments) { - contract.contractInterments = await getContractInterments( - contract.contractId, - database - ) - } - - return contract -} - export default async function getContracts( filters: GetContractsFilters, options: GetContractsOptions, @@ -194,6 +77,7 @@ export default async function getContracts( `select count(*) as recordCount from Contracts o left join BurialSites l on o.burialSiteId = l.burialSiteId + left join Cemeteries m on l.cemeteryId = m.cemeteryId ${sqlWhereClause}` ) .get(sqlParameters) as { recordCount: number } @@ -268,3 +152,126 @@ export default async function getContracts( contracts } } + +async function addInclusions( + contract: Contract, + options: GetContractsOptions, + database: PoolConnection +): Promise { + if (options.includeFees) { + contract.contractFees = await getContractFees(contract.contractId, database) + } + + if (options.includeTransactions) { + contract.contractTransactions = await getContractTransactions( + contract.contractId, + { includeIntegrations: false }, + database + ) + } + + if (options.includeInterments) { + contract.contractInterments = await getContractInterments( + contract.contractId, + database + ) + } + + return contract +} + +// eslint-disable-next-line complexity +function buildWhereClause(filters: GetContractsFilters): { + sqlWhereClause: string + sqlParameters: unknown[] +} { + let sqlWhereClause = ' where o.recordDelete_timeMillis is null' + const sqlParameters: unknown[] = [] + + if ((filters.burialSiteId ?? '') !== '') { + sqlWhereClause += ' and o.burialSiteId = ?' + sqlParameters.push(filters.burialSiteId) + } + + const burialSiteNameFilters = getBurialSiteNameWhereClause( + filters.burialSiteName, + filters.burialSiteNameSearchType ?? '', + 'l' + ) + sqlWhereClause += burialSiteNameFilters.sqlWhereClause + sqlParameters.push(...burialSiteNameFilters.sqlParameters) + + const deceasedNameFilters = getDeceasedNameWhereClause( + filters.deceasedName, + 'o' + ) + if (deceasedNameFilters.sqlParameters.length > 0) { + sqlWhereClause += ` and o.contractId in ( + select contractId from ContractInterments o + where recordDelete_timeMillis is null + ${deceasedNameFilters.sqlWhereClause})` + sqlParameters.push(...deceasedNameFilters.sqlParameters) + } + + if ((filters.contractTypeId ?? '') !== '') { + sqlWhereClause += ' and o.contractTypeId = ?' + sqlParameters.push(filters.contractTypeId) + } + + const contractTimeFilters = getContractTimeWhereClause( + filters.contractTime ?? '', + 'o' + ) + sqlWhereClause += contractTimeFilters.sqlWhereClause + sqlParameters.push(...contractTimeFilters.sqlParameters) + + if ((filters.contractStartDateString ?? '') !== '') { + sqlWhereClause += ' and o.contractStartDate = ?' + sqlParameters.push( + dateStringToInteger(filters.contractStartDateString as DateString) + ) + } + + if ((filters.contractEffectiveDateString ?? '') !== '') { + sqlWhereClause += ` and ( + o.contractEndDate is null + or (o.contractStartDate <= ? and o.contractEndDate >= ?) + )` + sqlParameters.push( + dateStringToInteger(filters.contractEffectiveDateString as DateString), + dateStringToInteger(filters.contractEffectiveDateString as DateString) + ) + } + + if ((filters.cemeteryId ?? '') !== '') { + sqlWhereClause += ' and (m.cemeteryId = ? or m.parentCemeteryId = ?)' + sqlParameters.push(filters.cemeteryId, filters.cemeteryId) + } + + if ((filters.burialSiteTypeId ?? '') !== '') { + sqlWhereClause += ' and l.burialSiteTypeId = ?' + sqlParameters.push(filters.burialSiteTypeId) + } + + if ((filters.funeralHomeId ?? '') !== '') { + sqlWhereClause += ' and o.funeralHomeId = ?' + sqlParameters.push(filters.funeralHomeId) + } + + if ((filters.workOrderId ?? '') !== '') { + sqlWhereClause += + ' and o.contractId in (select contractId from WorkOrderContracts where recordDelete_timeMillis is null and workOrderId = ?)' + sqlParameters.push(filters.workOrderId) + } + + if ((filters.notWorkOrderId ?? '') !== '') { + sqlWhereClause += + ' and o.contractId not in (select contractId from WorkOrderContracts where recordDelete_timeMillis is null and workOrderId = ?)' + sqlParameters.push(filters.notWorkOrderId) + } + + return { + sqlWhereClause, + sqlParameters + } +} diff --git a/database/getFeeCategories.d.ts b/database/getFeeCategories.d.ts index 60845f88..6628aadf 100644 --- a/database/getFeeCategories.d.ts +++ b/database/getFeeCategories.d.ts @@ -1,8 +1,8 @@ import type { PoolConnection } from 'better-sqlite-pool'; import type { FeeCategory } from '../types/recordTypes.js'; interface GetFeeCategoriesFilters { - contractTypeId?: number | string; burialSiteTypeId?: number | string; + contractTypeId?: number | string; feeCategoryId?: number | string; } interface GetFeeCategoriesOptions { diff --git a/database/getFeeCategories.ts b/database/getFeeCategories.ts index 6a931f11..ae61c72f 100644 --- a/database/getFeeCategories.ts +++ b/database/getFeeCategories.ts @@ -7,8 +7,8 @@ import { acquireConnection } from './pool.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' interface GetFeeCategoriesFilters { - contractTypeId?: number | string burialSiteTypeId?: number | string + contractTypeId?: number | string feeCategoryId?: number | string } diff --git a/database/getFuneralHome.js b/database/getFuneralHome.js index 7e9f1b34..a8372eaa 100644 --- a/database/getFuneralHome.js +++ b/database/getFuneralHome.js @@ -1,4 +1,10 @@ import { acquireConnection } from './pool.js'; +export default async function getFuneralHome(funeralHomeId) { + return await _getFuneralHome('funeralHomeId', funeralHomeId); +} +export async function getFuneralHomeByKey(funeralHomeKey) { + return await _getFuneralHome('funeralHomeKey', funeralHomeKey); +} async function _getFuneralHome(keyColumn, funeralHomeIdOrKey) { const database = await acquireConnection(); const funeralHome = database @@ -13,9 +19,3 @@ async function _getFuneralHome(keyColumn, funeralHomeIdOrKey) { database.release(); return funeralHome; } -export default async function getFuneralHome(funeralHomeId) { - return await _getFuneralHome('funeralHomeId', funeralHomeId); -} -export async function getFuneralHomeByKey(funeralHomeKey) { - return await _getFuneralHome('funeralHomeKey', funeralHomeKey); -} diff --git a/database/getFuneralHome.ts b/database/getFuneralHome.ts index 8d13543a..33a84b09 100644 --- a/database/getFuneralHome.ts +++ b/database/getFuneralHome.ts @@ -2,6 +2,18 @@ import type { Cemetery, FuneralHome } from '../types/recordTypes.js' import { acquireConnection } from './pool.js' +export default async function getFuneralHome( + funeralHomeId: number | string +): Promise { + return await _getFuneralHome('funeralHomeId', funeralHomeId) +} + +export async function getFuneralHomeByKey( + funeralHomeKey: string +): Promise { + return await _getFuneralHome('funeralHomeKey', funeralHomeKey) +} + async function _getFuneralHome( keyColumn: 'funeralHomeId' | 'funeralHomeKey', funeralHomeIdOrKey: number | string @@ -24,15 +36,3 @@ async function _getFuneralHome( return funeralHome } - -export default async function getFuneralHome( - funeralHomeId: number | string -): Promise { - return await _getFuneralHome('funeralHomeId', funeralHomeId) -} - -export async function getFuneralHomeByKey( - funeralHomeKey: string -): Promise { - return await _getFuneralHome('funeralHomeKey', funeralHomeKey) -} diff --git a/database/initializeDatabase.js b/database/initializeDatabase.js index c0400004..3111028a 100644 --- a/database/initializeDatabase.js +++ b/database/initializeDatabase.js @@ -71,7 +71,9 @@ const createStatements = [ cemeteryProvince varchar(2), cemeteryPostalCode varchar(7), cemeteryPhoneNumber varchar(30), - ${recordColumns})`, + parentCemeteryId integer, + ${recordColumns}, + foreign key (parentCemeteryId) references Cemeteries (cemeteryId))`, /* * Burial Sites */ diff --git a/database/initializeDatabase.ts b/database/initializeDatabase.ts index 8e62bdee..a6f7d1cb 100644 --- a/database/initializeDatabase.ts +++ b/database/initializeDatabase.ts @@ -86,7 +86,9 @@ const createStatements = [ cemeteryProvince varchar(2), cemeteryPostalCode varchar(7), cemeteryPhoneNumber varchar(30), - ${recordColumns})`, + parentCemeteryId integer, + ${recordColumns}, + foreign key (parentCemeteryId) references Cemeteries (cemeteryId))`, /* * Burial Sites diff --git a/database/updateCemetery.d.ts b/database/updateCemetery.d.ts index 18871f16..5aa978c8 100644 --- a/database/updateCemetery.d.ts +++ b/database/updateCemetery.d.ts @@ -3,6 +3,7 @@ export interface UpdateCemeteryForm { cemeteryDescription: string; cemeteryKey: string; cemeteryName: string; + parentCemeteryId: string; cemeteryAddress1: string; cemeteryAddress2: string; cemeteryCity: string; @@ -13,7 +14,4 @@ export interface UpdateCemeteryForm { cemeteryLongitude: string; cemeterySvg: string; } -export default function updateCemetery(updateForm: UpdateCemeteryForm, user: User): Promise<{ - doRebuildBurialSiteNames: boolean; - success: boolean; -}>; +export default function updateCemetery(updateForm: UpdateCemeteryForm, user: User): Promise; diff --git a/database/updateCemetery.js b/database/updateCemetery.js index 9e82ee66..123eb876 100644 --- a/database/updateCemetery.js +++ b/database/updateCemetery.js @@ -1,6 +1,3 @@ -import { buildBurialSiteName } from '../helpers/burialSites.helpers.js'; -import { getConfigProperty } from '../helpers/config.helpers.js'; -import getBurialSites from './getBurialSites.js'; import { acquireConnection } from './pool.js'; export default async function updateCemetery(updateForm, user) { const database = await acquireConnection(); @@ -18,6 +15,7 @@ export default async function updateCemetery(updateForm, user) { cemeteryProvince = ?, cemeteryPostalCode = ?, cemeteryPhoneNumber = ?, + parentCemeteryId = ?, recordUpdate_userName = ?, recordUpdate_timeMillis = ? where cemeteryId = ? @@ -26,27 +24,9 @@ export default async function updateCemetery(updateForm, user) { ? undefined : updateForm.cemeteryLatitude, updateForm.cemeteryLongitude === '' ? undefined - : updateForm.cemeteryLongitude, updateForm.cemeteryAddress1, updateForm.cemeteryAddress2, updateForm.cemeteryCity, updateForm.cemeteryProvince, updateForm.cemeteryPostalCode, updateForm.cemeteryPhoneNumber, user.userName, Date.now(), updateForm.cemeteryId); - /* - * Check if burial site names need to be updated - */ - let doRebuildBurialSiteNames = false; - if (getConfigProperty('settings.burialSites.burialSiteNameSegments.includeCemeteryKey')) { - const burialSites = await getBurialSites({ cemeteryId: updateForm.cemeteryId }, { limit: 1, offset: 0 }, database); - if (burialSites.count > 0 && - buildBurialSiteName(updateForm.cemeteryKey, { - burialSiteNameSegment1: burialSites.burialSites[0].burialSiteNameSegment1, - burialSiteNameSegment2: burialSites.burialSites[0].burialSiteNameSegment2, - burialSiteNameSegment3: burialSites.burialSites[0].burialSiteNameSegment3, - burialSiteNameSegment4: burialSites.burialSites[0].burialSiteNameSegment4, - burialSiteNameSegment5: burialSites.burialSites[0].burialSiteNameSegment5 - }) !== burialSites.burialSites[0].burialSiteName) { - doRebuildBurialSiteNames = true; - } - } + : updateForm.cemeteryLongitude, updateForm.cemeteryAddress1, updateForm.cemeteryAddress2, updateForm.cemeteryCity, updateForm.cemeteryProvince, updateForm.cemeteryPostalCode, updateForm.cemeteryPhoneNumber, updateForm.parentCemeteryId === '' + ? undefined + : updateForm.parentCemeteryId, user.userName, Date.now(), updateForm.cemeteryId); database.release(); - return { - doRebuildBurialSiteNames, - success: result.changes > 0 - }; + return result.changes > 0; } diff --git a/database/updateCemetery.ts b/database/updateCemetery.ts index 14ecaf06..3f38e7b5 100644 --- a/database/updateCemetery.ts +++ b/database/updateCemetery.ts @@ -1,7 +1,3 @@ -import { buildBurialSiteName } from '../helpers/burialSites.helpers.js' -import { getConfigProperty } from '../helpers/config.helpers.js' - -import getBurialSites from './getBurialSites.js' import { acquireConnection } from './pool.js' export interface UpdateCemeteryForm { @@ -10,6 +6,7 @@ export interface UpdateCemeteryForm { cemeteryDescription: string cemeteryKey: string cemeteryName: string + parentCemeteryId: string cemeteryAddress1: string cemeteryAddress2: string @@ -27,7 +24,7 @@ export interface UpdateCemeteryForm { export default async function updateCemetery( updateForm: UpdateCemeteryForm, user: User -): Promise<{ doRebuildBurialSiteNames: boolean; success: boolean; }> { +): Promise { const database = await acquireConnection() const result = database @@ -45,6 +42,7 @@ export default async function updateCemetery( cemeteryProvince = ?, cemeteryPostalCode = ?, cemeteryPhoneNumber = ?, + parentCemeteryId = ?, recordUpdate_userName = ?, recordUpdate_timeMillis = ? where cemeteryId = ? @@ -67,51 +65,15 @@ export default async function updateCemetery( updateForm.cemeteryProvince, updateForm.cemeteryPostalCode, updateForm.cemeteryPhoneNumber, + updateForm.parentCemeteryId === '' + ? undefined + : updateForm.parentCemeteryId, user.userName, Date.now(), updateForm.cemeteryId ) - /* - * Check if burial site names need to be updated - */ - - let doRebuildBurialSiteNames = false - - if ( - getConfigProperty( - 'settings.burialSites.burialSiteNameSegments.includeCemeteryKey' - ) - ) { - const burialSites = await getBurialSites( - { cemeteryId: updateForm.cemeteryId }, - { limit: 1, offset: 0 }, - database - ) - - if ( - burialSites.count > 0 && - buildBurialSiteName(updateForm.cemeteryKey, { - burialSiteNameSegment1: - burialSites.burialSites[0].burialSiteNameSegment1, - burialSiteNameSegment2: - burialSites.burialSites[0].burialSiteNameSegment2, - burialSiteNameSegment3: - burialSites.burialSites[0].burialSiteNameSegment3, - burialSiteNameSegment4: - burialSites.burialSites[0].burialSiteNameSegment4, - burialSiteNameSegment5: - burialSites.burialSites[0].burialSiteNameSegment5 - }) !== burialSites.burialSites[0].burialSiteName - ) { - doRebuildBurialSiteNames = true - } - } - database.release() - return { - doRebuildBurialSiteNames, - success: result.changes > 0 - } + return result.changes > 0 } diff --git a/handlers/cemeteries-get/edit.js b/handlers/cemeteries-get/edit.js index 1d209ab2..e4f394c6 100644 --- a/handlers/cemeteries-get/edit.js +++ b/handlers/cemeteries-get/edit.js @@ -1,5 +1,6 @@ import getBurialSiteStatusSummary from '../../database/getBurialSiteStatusSummary.js'; import getBurialSiteTypeSummary from '../../database/getBurialSiteTypeSummary.js'; +import getCemeteries from '../../database/getCemeteries.js'; import getCemetery from '../../database/getCemetery.js'; import { getConfigProperty } from '../../helpers/config.helpers.js'; import { getCemeterySVGs } from '../../helpers/images.helpers.js'; @@ -9,6 +10,7 @@ export default async function handler(request, response) { response.redirect(`${getConfigProperty('reverseProxy.urlPrefix')}/cemeteries/?error=cemeteryIdNotFound`); return; } + const cemeteries = await getCemeteries(); const cemeterySVGs = await getCemeterySVGs(); const burialSiteTypeSummary = await getBurialSiteTypeSummary({ cemeteryId: cemetery.cemeteryId @@ -22,6 +24,7 @@ export default async function handler(request, response) { cemeterySVGs, isCreate: false, burialSiteStatusSummary, - burialSiteTypeSummary + burialSiteTypeSummary, + cemeteries }); } diff --git a/handlers/cemeteries-get/edit.ts b/handlers/cemeteries-get/edit.ts index eeea5dfc..5381e88a 100644 --- a/handlers/cemeteries-get/edit.ts +++ b/handlers/cemeteries-get/edit.ts @@ -2,6 +2,7 @@ import type { Request, Response } from 'express' import getBurialSiteStatusSummary from '../../database/getBurialSiteStatusSummary.js' import getBurialSiteTypeSummary from '../../database/getBurialSiteTypeSummary.js' +import getCemeteries from '../../database/getCemeteries.js' import getCemetery from '../../database/getCemetery.js' import { getConfigProperty } from '../../helpers/config.helpers.js' import { getCemeterySVGs } from '../../helpers/images.helpers.js' @@ -19,6 +20,8 @@ export default async function handler( return } + const cemeteries = await getCemeteries() + const cemeterySVGs = await getCemeterySVGs() const burialSiteTypeSummary = await getBurialSiteTypeSummary({ @@ -37,6 +40,7 @@ export default async function handler( isCreate: false, burialSiteStatusSummary, - burialSiteTypeSummary + burialSiteTypeSummary, + cemeteries }) } diff --git a/handlers/cemeteries-post/doUpdateCemetery.js b/handlers/cemeteries-post/doUpdateCemetery.js index 663ac6d6..19b6845e 100644 --- a/handlers/cemeteries-post/doUpdateCemetery.js +++ b/handlers/cemeteries-post/doUpdateCemetery.js @@ -2,13 +2,12 @@ import rebuildBurialSiteNames from '../../database/rebuildBurialSiteNames.js'; import updateCemetery from '../../database/updateCemetery.js'; import { clearNextPreviousBurialSiteIdCache } from '../../helpers/burialSites.helpers.js'; export default async function handler(request, response) { - const result = await updateCemetery(request.body, request.session.user); + const success = await updateCemetery(request.body, request.session.user); response.json({ - success: result.success, - cemeteryId: request.body.cemeteryId, - doRebuildBurialSiteNames: result.doRebuildBurialSiteNames + success, + cemeteryId: request.body.cemeteryId }); - if (result.doRebuildBurialSiteNames) { + if (success) { response.on('finish', () => { void rebuildBurialSiteNames(request.body.cemeteryId, request.session.user); clearNextPreviousBurialSiteIdCache(); diff --git a/handlers/cemeteries-post/doUpdateCemetery.ts b/handlers/cemeteries-post/doUpdateCemetery.ts index 775934f7..2002c194 100644 --- a/handlers/cemeteries-post/doUpdateCemetery.ts +++ b/handlers/cemeteries-post/doUpdateCemetery.ts @@ -10,19 +10,18 @@ export default async function handler( request: Request, response: Response ): Promise { - const result = await updateCemetery( + const success = await updateCemetery( request.body, request.session.user as User ) response.json({ - success: result.success, + success, - cemeteryId: request.body.cemeteryId, - doRebuildBurialSiteNames: result.doRebuildBurialSiteNames + cemeteryId: request.body.cemeteryId }) - if (result.doRebuildBurialSiteNames) { + if (success) { response.on('finish', () => { void rebuildBurialSiteNames( request.body.cemeteryId, diff --git a/public/javascripts/cemetery.edit.js b/public/javascripts/cemetery.edit.js index 7000d5bc..07eec6c1 100644 --- a/public/javascripts/cemetery.edit.js +++ b/public/javascripts/cemetery.edit.js @@ -45,20 +45,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); globalThis.location.href = sunrise.getCemeteryURL(responseJSON.cemeteryId, true); } else { - if (responseJSON.doRebuildBurialSiteNames ?? false) { - bulmaJS.alert({ - message: `Cemetery Updated Successfully
- Note that rebuilding burial site names may take a few minutes.`, - messageIsHtml: true, - contextualColorName: 'warning' - }); - } - else { - bulmaJS.alert({ - message: 'Cemetery Updated Successfully', - contextualColorName: 'success' - }); - } + bulmaJS.alert({ + message: 'Cemetery Updated Successfully', + contextualColorName: 'success' + }); } } else { diff --git a/public/javascripts/cemetery.edit.ts b/public/javascripts/cemetery.edit.ts index 0ab88c3f..0fd69ebd 100644 --- a/public/javascripts/cemetery.edit.ts +++ b/public/javascripts/cemetery.edit.ts @@ -71,7 +71,6 @@ declare const exports: Record const responseJSON = rawResponseJSON as { success: boolean cemeteryId?: number - doRebuildBurialSiteNames?: boolean errorMessage?: string } @@ -84,20 +83,10 @@ declare const exports: Record true ) } else { - if (responseJSON.doRebuildBurialSiteNames ?? false) { - bulmaJS.alert({ - message: `Cemetery Updated Successfully
- Note that rebuilding burial site names may take a few minutes.`, - messageIsHtml: true, - contextualColorName: 'warning' - }) - } else { - - bulmaJS.alert({ - message: 'Cemetery Updated Successfully', - contextualColorName: 'success' - }) - } + bulmaJS.alert({ + message: 'Cemetery Updated Successfully', + contextualColorName: 'success' + }) } } else { bulmaJS.alert({ diff --git a/public/javascripts/cemetery.search.js b/public/javascripts/cemetery.search.js index a266a259..41bc8ddb 100644 --- a/public/javascripts/cemetery.search.js +++ b/public/javascripts/cemetery.search.js @@ -42,6 +42,11 @@ Object.defineProperty(exports, "__esModule", { value: true }); ${cityssm.escapeHTML(cemetery.cemeteryName === '' ? '(No Name)' : cemetery.cemeteryName)} + ${cemetery.cemeteryName === '' + ? ` + + ` + : ''}
${cityssm.escapeHTML(cemetery.cemeteryDescription)} @@ -62,6 +67,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); : ''} ${cityssm.escapeHTML(cemetery.cemeteryPhoneNumber)} + + ${cemetery.parentCemeteryId === null + ? '' + : ` + + `} ${cemetery.cemeteryLatitude && cemetery.cemeteryLongitude ? ` @@ -92,6 +103,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); Key Address Phone Number + Parent Coordinates Image Burial Site Count diff --git a/public/javascripts/cemetery.search.ts b/public/javascripts/cemetery.search.ts index 80811d8f..64c0fdc9 100644 --- a/public/javascripts/cemetery.search.ts +++ b/public/javascripts/cemetery.search.ts @@ -71,6 +71,13 @@ declare const exports: Record ? '(No Name)' : cemetery.cemeteryName )} + ${ + cemetery.cemeteryName === '' + ? ` + + ` + : '' + }
${cityssm.escapeHTML(cemetery.cemeteryDescription)} @@ -97,6 +104,14 @@ declare const exports: Record } ${cityssm.escapeHTML(cemetery.cemeteryPhoneNumber)} + + ${ + cemetery.parentCemeteryId === null + ? '' + : ` + + ` + } ${ cemetery.cemeteryLatitude && cemetery.cemeteryLongitude @@ -135,6 +150,7 @@ declare const exports: Record Key Address Phone Number + Parent Coordinates Image Burial Site Count diff --git a/temp/legacyImportFromCsv/data.cemeteries.js b/temp/legacyImportFromCsv/data.cemeteries.js index 7a18c89e..dcb9cb93 100644 --- a/temp/legacyImportFromCsv/data.cemeteries.js +++ b/temp/legacyImportFromCsv/data.cemeteries.js @@ -44,7 +44,8 @@ export async function getCemeteryIdByKey(cemeteryKeyToSearch, user) { cemeteryCity: 'Sault Ste. Marie', cemeteryPostalCode: '', cemeteryProvince: 'ON', - cemeteryPhoneNumber: '' + cemeteryPhoneNumber: '', + parentCemeteryId: '', }, user); cemeteryCache.set(cemeteryKey, cemeteryId); } diff --git a/temp/legacyImportFromCsv/data.cemeteries.ts b/temp/legacyImportFromCsv/data.cemeteries.ts index eb40b86e..5a90ff5e 100644 --- a/temp/legacyImportFromCsv/data.cemeteries.ts +++ b/temp/legacyImportFromCsv/data.cemeteries.ts @@ -62,7 +62,8 @@ export async function getCemeteryIdByKey( cemeteryPostalCode: '', cemeteryProvince: 'ON', - cemeteryPhoneNumber: '' + cemeteryPhoneNumber: '', + parentCemeteryId: '', }, user ) diff --git a/types/recordTypes.d.ts b/types/recordTypes.d.ts index 0c16dd0f..0057b0cf 100644 --- a/types/recordTypes.d.ts +++ b/types/recordTypes.d.ts @@ -67,6 +67,8 @@ export interface Cemetery extends Record { cemeteryDescription: string; cemeteryKey: string; cemeteryName: string; + parentCemeteryId?: number | null; + parentCemeteryName?: string | null; cemeteryLatitude?: number; cemeteryLongitude?: number; cemeterySvg?: string; diff --git a/types/recordTypes.ts b/types/recordTypes.ts index 7e307d41..a35f2603 100644 --- a/types/recordTypes.ts +++ b/types/recordTypes.ts @@ -94,6 +94,9 @@ export interface Cemetery extends Record { cemeteryKey: string cemeteryName: string + parentCemeteryId?: number | null + parentCemeteryName?: string | null + cemeteryLatitude?: number cemeteryLongitude?: number cemeterySvg?: string diff --git a/views/cemetery-edit.ejs b/views/cemetery-edit.ejs index f3f16220..20762356 100644 --- a/views/cemetery-edit.ejs +++ b/views/cemetery-edit.ejs @@ -127,6 +127,27 @@ +
+ +
+
+ +
+
+
diff --git a/views/cemetery-view.ejs b/views/cemetery-view.ejs index 13b942d1..0dc6af43 100644 --- a/views/cemetery-view.ejs +++ b/views/cemetery-view.ejs @@ -89,6 +89,14 @@ <%= cemetery.cemeteryPhoneNumber %> <% } %> + <% if (cemetery.parentCemeteryId !== null) { %> + + <% } %>