parent cemeteries, linting
parent
ed87174c19
commit
9bc85e6a8b
|
|
@ -2,6 +2,7 @@ export interface AddCemeteryForm {
|
|||
cemeteryDescription: string;
|
||||
cemeteryKey: string;
|
||||
cemeteryName: string;
|
||||
parentCemeteryId: string;
|
||||
cemeteryLatitude: string;
|
||||
cemeteryLongitude: string;
|
||||
cemeterySvg: string;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ export interface AddCemeteryForm {
|
|||
cemeteryDescription: string
|
||||
cemeteryKey: string
|
||||
cemeteryName: string
|
||||
parentCemeteryId: string
|
||||
|
||||
cemeteryLatitude: string
|
||||
cemeteryLongitude: 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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -11,14 +11,17 @@ export default async function getCemeteries(): Promise<Cemetery[]> {
|
|||
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[]
|
||||
|
|
|
|||
|
|
@ -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`)
|
||||
|
|
|
|||
|
|
@ -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`
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Contract> {
|
||||
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<Contract> {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<FuneralHome | undefined> {
|
||||
return await _getFuneralHome('funeralHomeId', funeralHomeId)
|
||||
}
|
||||
|
||||
export async function getFuneralHomeByKey(
|
||||
funeralHomeKey: string
|
||||
): Promise<FuneralHome | undefined> {
|
||||
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<FuneralHome | undefined> {
|
||||
return await _getFuneralHome('funeralHomeId', funeralHomeId)
|
||||
}
|
||||
|
||||
export async function getFuneralHomeByKey(
|
||||
funeralHomeKey: string
|
||||
): Promise<FuneralHome | undefined> {
|
||||
return await _getFuneralHome('funeralHomeKey', funeralHomeKey)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<boolean>;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<boolean> {
|
||||
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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -10,19 +10,18 @@ export default async function handler(
|
|||
request: Request<unknown, unknown, UpdateCemeteryForm>,
|
||||
response: Response
|
||||
): Promise<void> {
|
||||
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,
|
||||
|
|
|
|||
|
|
@ -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: `<strong>Cemetery Updated Successfully</strong><br />
|
||||
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 {
|
||||
|
|
|
|||
|
|
@ -71,7 +71,6 @@ declare const exports: Record<string, unknown>
|
|||
const responseJSON = rawResponseJSON as {
|
||||
success: boolean
|
||||
cemeteryId?: number
|
||||
doRebuildBurialSiteNames?: boolean
|
||||
errorMessage?: string
|
||||
}
|
||||
|
||||
|
|
@ -84,20 +83,10 @@ declare const exports: Record<string, unknown>
|
|||
true
|
||||
)
|
||||
} else {
|
||||
if (responseJSON.doRebuildBurialSiteNames ?? false) {
|
||||
bulmaJS.alert({
|
||||
message: `<strong>Cemetery Updated Successfully</strong><br />
|
||||
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({
|
||||
|
|
|
|||
|
|
@ -42,6 +42,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
${cityssm.escapeHTML(cemetery.cemeteryName === ''
|
||||
? '(No Name)'
|
||||
: cemetery.cemeteryName)}
|
||||
${cemetery.cemeteryName === ''
|
||||
? `<span class="icon is-small has-text-danger">
|
||||
<i class="fas fa-exclamation-triangle" aria-hidden="true"></i>
|
||||
</span>`
|
||||
: ''}
|
||||
</a><br />
|
||||
<span class="is-size-7">
|
||||
${cityssm.escapeHTML(cemetery.cemeteryDescription)}
|
||||
|
|
@ -62,6 +67,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
: ''}
|
||||
</td><td>
|
||||
${cityssm.escapeHTML(cemetery.cemeteryPhoneNumber)}
|
||||
</td><td class="has-text-centered">
|
||||
${cemetery.parentCemeteryId === null
|
||||
? ''
|
||||
: `<span data-tooltip="Parent: ${cemetery.parentCemeteryName ?? '(No Name)'}">
|
||||
<i class="fas fa-turn-up" role="img" aria-label="Parent: ${cemetery.parentCemeteryName ?? '(No Name)'}"></i>
|
||||
</span>`}
|
||||
</td><td class="has-text-centered">
|
||||
${cemetery.cemeteryLatitude && cemetery.cemeteryLongitude
|
||||
? `<span data-tooltip="Has Geographic Coordinates">
|
||||
|
|
@ -92,6 +103,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||
<th>Key</th>
|
||||
<th>Address</th>
|
||||
<th>Phone Number</th>
|
||||
<th class="has-text-centered">Parent</th>
|
||||
<th class="has-text-centered">Coordinates</th>
|
||||
<th class="has-text-centered">Image</th>
|
||||
<th class="has-text-right">Burial Site Count</th>
|
||||
|
|
|
|||
|
|
@ -71,6 +71,13 @@ declare const exports: Record<string, unknown>
|
|||
? '(No Name)'
|
||||
: cemetery.cemeteryName
|
||||
)}
|
||||
${
|
||||
cemetery.cemeteryName === ''
|
||||
? `<span class="icon is-small has-text-danger">
|
||||
<i class="fas fa-exclamation-triangle" aria-hidden="true"></i>
|
||||
</span>`
|
||||
: ''
|
||||
}
|
||||
</a><br />
|
||||
<span class="is-size-7">
|
||||
${cityssm.escapeHTML(cemetery.cemeteryDescription)}
|
||||
|
|
@ -97,6 +104,14 @@ declare const exports: Record<string, unknown>
|
|||
}
|
||||
</td><td>
|
||||
${cityssm.escapeHTML(cemetery.cemeteryPhoneNumber)}
|
||||
</td><td class="has-text-centered">
|
||||
${
|
||||
cemetery.parentCemeteryId === null
|
||||
? ''
|
||||
: `<span data-tooltip="Parent: ${cemetery.parentCemeteryName ?? '(No Name)'}">
|
||||
<i class="fas fa-turn-up" role="img" aria-label="Parent: ${cemetery.parentCemeteryName ?? '(No Name)'}"></i>
|
||||
</span>`
|
||||
}
|
||||
</td><td class="has-text-centered">
|
||||
${
|
||||
cemetery.cemeteryLatitude && cemetery.cemeteryLongitude
|
||||
|
|
@ -135,6 +150,7 @@ declare const exports: Record<string, unknown>
|
|||
<th>Key</th>
|
||||
<th>Address</th>
|
||||
<th>Phone Number</th>
|
||||
<th class="has-text-centered">Parent</th>
|
||||
<th class="has-text-centered">Coordinates</th>
|
||||
<th class="has-text-centered">Image</th>
|
||||
<th class="has-text-right">Burial Site Count</th>
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,7 +62,8 @@ export async function getCemeteryIdByKey(
|
|||
cemeteryPostalCode: '',
|
||||
cemeteryProvince: 'ON',
|
||||
|
||||
cemeteryPhoneNumber: ''
|
||||
cemeteryPhoneNumber: '',
|
||||
parentCemeteryId: '',
|
||||
},
|
||||
user
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -127,6 +127,27 @@
|
|||
<textarea class="textarea" id="cemetery--cemeteryDescription" name="cemeteryDescription"><%= cemetery.cemeteryDescription %></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label class="label" for="cemetery--parentCemeteryId">Parent Cemetery</label>
|
||||
<div class="control">
|
||||
<div class="select is-fullwidth">
|
||||
<select id="cemetery--parentCemeteryId" name="parentCemeteryId">
|
||||
<option value="">(No Parent Cemetery)</option>
|
||||
<% for (const parentCemetery of cemeteries) { %>
|
||||
<%
|
||||
if (parentCemetery.cemeteryId === cemetery.cemeteryId || parentCemetery.parentCemeteryId !== null) {
|
||||
// Skip the current cemetery and any cemeteries that are already a parent
|
||||
continue;
|
||||
}
|
||||
%>
|
||||
<option value="<%= parentCemetery.cemeteryId %>" <%= (cemetery.parentCemeteryId === parentCemetery.cemeteryId) ? " selected" : "" %>>
|
||||
<%= parentCemetery.cemeteryName === '' ? '(No Name)' : parentCemetery.cemeteryName %>
|
||||
</option>
|
||||
<% } %>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -89,6 +89,14 @@
|
|||
<%= cemetery.cemeteryPhoneNumber %>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if (cemetery.parentCemeteryId !== null) { %>
|
||||
<div class="column">
|
||||
<strong>Parent Cemetery</strong><br />
|
||||
<a href="<%= urlPrefix %>/cemeteries/<%= cemetery.parentCemeteryId %>">
|
||||
<%= (cemetery.parentCemeteryName ?? '') === '' ? "(No Name)" : cemetery.parentCemeteryName %>
|
||||
</a>
|
||||
</div>
|
||||
<% } %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Reference in New Issue