diff --git a/data/dataLists.d.ts b/data/dataLists.d.ts index dc79ac64..49bbd8e3 100644 --- a/data/dataLists.d.ts +++ b/data/dataLists.d.ts @@ -1,7 +1,9 @@ export declare const deathAgePeriods: readonly ["Years", "Months", "Days", "Stillborn"]; export declare const purchaserRelationships: readonly ["Spouse", "Husband", "Wife", "Child", "Parent", "Sibling", "Friend", "Self"]; +export declare const directionsOfArrival: readonly ["N", "NE", "E", "SE", "S", "SW", "W", "NW"]; declare const _default: { deathAgePeriods: readonly ["Years", "Months", "Days", "Stillborn"]; + directionsOfArrival: readonly ["N", "NE", "E", "SE", "S", "SW", "W", "NW"]; purchaserRelationships: readonly ["Spouse", "Husband", "Wife", "Child", "Parent", "Sibling", "Friend", "Self"]; }; export default _default; diff --git a/data/dataLists.js b/data/dataLists.js index 460e281b..44e1ca15 100644 --- a/data/dataLists.js +++ b/data/dataLists.js @@ -1,9 +1,4 @@ -export const deathAgePeriods = [ - 'Years', - 'Months', - 'Days', - 'Stillborn' -]; +export const deathAgePeriods = ['Years', 'Months', 'Days', 'Stillborn']; export const purchaserRelationships = [ 'Spouse', 'Husband', @@ -14,7 +9,18 @@ export const purchaserRelationships = [ 'Friend', 'Self' ]; +export const directionsOfArrival = [ + 'N', + 'NE', + 'E', + 'SE', + 'S', + 'SW', + 'W', + 'NW' +]; export default { deathAgePeriods, + directionsOfArrival, purchaserRelationships }; diff --git a/data/dataLists.ts b/data/dataLists.ts index 6ed8b1c9..ec9a07f3 100644 --- a/data/dataLists.ts +++ b/data/dataLists.ts @@ -1,9 +1,4 @@ -export const deathAgePeriods = [ - 'Years', - 'Months', - 'Days', - 'Stillborn' -] as const +export const deathAgePeriods = ['Years', 'Months', 'Days', 'Stillborn'] as const export const purchaserRelationships = [ 'Spouse', @@ -16,7 +11,19 @@ export const purchaserRelationships = [ 'Self' ] as const +export const directionsOfArrival = [ + 'N', + 'NE', + 'E', + 'SE', + 'S', + 'SW', + 'W', + 'NW' +] as const + export default { deathAgePeriods, + directionsOfArrival, purchaserRelationships -} \ No newline at end of file +} diff --git a/database/addContract.d.ts b/database/addContract.d.ts index fbea2b76..487db722 100644 --- a/database/addContract.d.ts +++ b/database/addContract.d.ts @@ -8,6 +8,7 @@ export interface AddContractForm { [fieldValue_contractTypeFieldId: `fieldValue_${string}`]: unknown; contractTypeFieldIds?: string; committalTypeId?: number | string; + directionOfArrival?: string; funeralDateString?: '' | DateString; funeralDirectorName?: string; funeralHomeId?: number | string; diff --git a/database/addContract.js b/database/addContract.js index d358029c..b66052cd 100644 --- a/database/addContract.js +++ b/database/addContract.js @@ -16,17 +16,17 @@ export default function addContract(addForm, user, connectedDatabase) { purchaserPhoneNumber, purchaserEmail, purchaserRelationship, funeralHomeId, funeralDirectorName, funeralDate, funeralTime, - committalTypeId, + directionOfArrival, committalTypeId, recordCreate_userName, recordCreate_timeMillis, recordUpdate_userName, recordUpdate_timeMillis) - values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`) + values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`) .run(addForm.contractTypeId, addForm.burialSiteId === '' ? undefined : addForm.burialSiteId, contractStartDate, addForm.contractEndDateString === '' ? undefined : dateStringToInteger(addForm.contractEndDateString), addForm.purchaserName ?? '', addForm.purchaserAddress1 ?? '', addForm.purchaserAddress2 ?? '', addForm.purchaserCity ?? '', addForm.purchaserProvince ?? '', addForm.purchaserPostalCode ?? '', addForm.purchaserPhoneNumber ?? '', addForm.purchaserEmail ?? '', addForm.purchaserRelationship ?? '', addForm.funeralHomeId === '' ? undefined : addForm.funeralHomeId, addForm.funeralDirectorName ?? '', addForm.funeralDateString === '' ? undefined : dateStringToInteger(addForm.funeralDateString), addForm.funeralTimeString === '' ? undefined - : timeStringToInteger(addForm.funeralTimeString), addForm.committalTypeId === '' ? undefined : addForm.committalTypeId, user.userName, rightNowMillis, user.userName, rightNowMillis); + : timeStringToInteger(addForm.funeralTimeString), addForm.directionOfArrival ?? '', addForm.committalTypeId === '' ? undefined : addForm.committalTypeId, user.userName, rightNowMillis, user.userName, rightNowMillis); const contractId = result.lastInsertRowid; /* * Add contract fields diff --git a/database/addContract.ts b/database/addContract.ts index 04f35fce..842fc0d0 100644 --- a/database/addContract.ts +++ b/database/addContract.ts @@ -20,6 +20,7 @@ export interface AddContractForm { contractTypeFieldIds?: string committalTypeId?: number | string + directionOfArrival?: string funeralDateString?: '' | DateString funeralDirectorName?: string funeralHomeId?: number | string @@ -74,10 +75,10 @@ export default function addContract( purchaserPhoneNumber, purchaserEmail, purchaserRelationship, funeralHomeId, funeralDirectorName, funeralDate, funeralTime, - committalTypeId, + directionOfArrival, committalTypeId, recordCreate_userName, recordCreate_timeMillis, recordUpdate_userName, recordUpdate_timeMillis) - values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` + values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` ) .run( addForm.contractTypeId, @@ -103,6 +104,7 @@ export default function addContract( addForm.funeralTimeString === '' ? undefined : timeStringToInteger(addForm.funeralTimeString as TimeString), + addForm.directionOfArrival ?? '', addForm.committalTypeId === '' ? undefined : addForm.committalTypeId, user.userName, rightNowMillis, diff --git a/database/getBurialSiteDirectionsOfArrival.d.ts b/database/getBurialSiteDirectionsOfArrival.d.ts new file mode 100644 index 00000000..5613079d --- /dev/null +++ b/database/getBurialSiteDirectionsOfArrival.d.ts @@ -0,0 +1,9 @@ +import sqlite from 'better-sqlite3'; +import type { directionsOfArrival } from '../data/dataLists.js'; +export declare const defaultDirectionsOfArrival: { + E: string; + N: string; + S: string; + W: string; +}; +export default function getBurialSiteDirectionsOfArrival(burialSiteId: number | string, connectedDatabase?: sqlite.Database): Partial>; diff --git a/database/getBurialSiteDirectionsOfArrival.js b/database/getBurialSiteDirectionsOfArrival.js new file mode 100644 index 00000000..e3cbaf25 --- /dev/null +++ b/database/getBurialSiteDirectionsOfArrival.js @@ -0,0 +1,39 @@ +import sqlite from 'better-sqlite3'; +import { sunriseDB } from '../helpers/database.helpers.js'; +import getCemeteryDirectionsOfArrival from './getCemeteryDirectionsOfArrival.js'; +export const defaultDirectionsOfArrival = { + E: 'East', + N: 'North', + S: 'South', + W: 'West' +}; +export default function getBurialSiteDirectionsOfArrival(burialSiteId, connectedDatabase) { + const database = connectedDatabase ?? sqlite(sunriseDB, { readonly: true }); + const directionsList = database + .prepare(`select c.parentCemeteryId, + d.directionOfArrival, d.directionOfArrivalDescription + from BurialSites b + left join Cemeteries c on b.cemeteryId = c.cemeteryId + left join CemeteryDirectionsOfArrival d on c.cemeteryId = d.cemeteryId + where b.burialSiteId = ?`) + .all(burialSiteId); + let directions = {}; + if (directionsList.length === 1 && + directionsList[0].directionOfArrival === null && + directionsList[0].parentCemeteryId !== null) { + directions = getCemeteryDirectionsOfArrival(directionsList[0].parentCemeteryId, connectedDatabase); + } + else if (directionsList.length > 0 && directionsList[0].directionOfArrival !== null) { + for (const direction of directionsList) { + directions[direction.directionOfArrival] = + direction.directionOfArrivalDescription ?? ''; + } + } + if (Object.keys(directions).length === 0) { + directions = defaultDirectionsOfArrival; + } + if (connectedDatabase === undefined) { + database.close(); + } + return directions; +} diff --git a/database/getBurialSiteDirectionsOfArrival.ts b/database/getBurialSiteDirectionsOfArrival.ts new file mode 100644 index 00000000..7174a4f9 --- /dev/null +++ b/database/getBurialSiteDirectionsOfArrival.ts @@ -0,0 +1,65 @@ +import sqlite from 'better-sqlite3' + +import type { directionsOfArrival } from '../data/dataLists.js' +import { sunriseDB } from '../helpers/database.helpers.js' + +import getCemeteryDirectionsOfArrival from './getCemeteryDirectionsOfArrival.js' + +export const defaultDirectionsOfArrival = { + E: 'East', + N: 'North', + S: 'South', + W: 'West' +} + +export default function getBurialSiteDirectionsOfArrival( + burialSiteId: number | string, + connectedDatabase?: sqlite.Database +): Partial> { + const database = connectedDatabase ?? sqlite(sunriseDB, { readonly: true }) + + const directionsList = database + .prepare( + `select c.parentCemeteryId, + d.directionOfArrival, d.directionOfArrivalDescription + from BurialSites b + left join Cemeteries c on b.cemeteryId = c.cemeteryId + left join CemeteryDirectionsOfArrival d on c.cemeteryId = d.cemeteryId + where b.burialSiteId = ?` + ) + .all(burialSiteId) as Array<{ + directionOfArrival: (typeof directionsOfArrival)[number] | null + directionOfArrivalDescription: string | null + parentCemeteryId: number | null + }> + + let directions: Partial< + Record<(typeof directionsOfArrival)[number], string> + > = {} + + if ( + directionsList.length === 1 && + directionsList[0].directionOfArrival === null && + directionsList[0].parentCemeteryId !== null + ) { + directions = getCemeteryDirectionsOfArrival( + directionsList[0].parentCemeteryId, + connectedDatabase + ) + } else if (directionsList.length > 0 && directionsList[0].directionOfArrival !== null) { + for (const direction of directionsList) { + directions[direction.directionOfArrival as string] = + direction.directionOfArrivalDescription ?? '' + } + } + + if (Object.keys(directions).length === 0) { + directions = defaultDirectionsOfArrival + } + + if (connectedDatabase === undefined) { + database.close() + } + + return directions +} diff --git a/database/getCemetery.js b/database/getCemetery.js index 88b4315d..c7062ef6 100644 --- a/database/getCemetery.js +++ b/database/getCemetery.js @@ -1,6 +1,7 @@ import sqlite from 'better-sqlite3'; import { sunriseDB } from '../helpers/database.helpers.js'; import getCemeteries from './getCemeteries.js'; +import getCemeteryDirectionsOfArrival from './getCemeteryDirectionsOfArrival.js'; export default function getCemetery(cemeteryId, connectedDatabase) { return _getCemetery('cemeteryId', cemeteryId, connectedDatabase); } @@ -42,6 +43,7 @@ function _getCemetery(keyColumn, cemeteryIdOrKey, connectedDatabase) { cemetery.parentCemeteryId === null ? getCemeteries({ parentCemeteryId: cemetery.cemeteryId }, connectedDatabase) : []; + cemetery.directionsOfArrival = getCemeteryDirectionsOfArrival(cemetery.cemeteryId, connectedDatabase); } if (connectedDatabase === undefined) { database.close(); diff --git a/database/getCemetery.ts b/database/getCemetery.ts index 5e44d51c..f92f30fc 100644 --- a/database/getCemetery.ts +++ b/database/getCemetery.ts @@ -4,6 +4,7 @@ import { sunriseDB } from '../helpers/database.helpers.js' import type { Cemetery } from '../types/record.types.js' import getCemeteries from './getCemeteries.js' +import getCemeteryDirectionsOfArrival from './getCemeteryDirectionsOfArrival.js' export default function getCemetery( cemeteryId: number | string, @@ -65,6 +66,11 @@ function _getCemetery( connectedDatabase ) : [] + + cemetery.directionsOfArrival = getCemeteryDirectionsOfArrival( + cemetery.cemeteryId as number, + connectedDatabase + ) } if (connectedDatabase === undefined) { diff --git a/database/getCemeteryDirectionsOfArrival.d.ts b/database/getCemeteryDirectionsOfArrival.d.ts new file mode 100644 index 00000000..be780412 --- /dev/null +++ b/database/getCemeteryDirectionsOfArrival.d.ts @@ -0,0 +1,3 @@ +import sqlite from 'better-sqlite3'; +import type { directionsOfArrival } from '../data/dataLists.js'; +export default function getCemeteryDirectionsOfArrival(cemeteryId: number | string, connectedDatabase?: sqlite.Database): Partial>; diff --git a/database/getCemeteryDirectionsOfArrival.js b/database/getCemeteryDirectionsOfArrival.js new file mode 100644 index 00000000..08606f2c --- /dev/null +++ b/database/getCemeteryDirectionsOfArrival.js @@ -0,0 +1,19 @@ +import sqlite from 'better-sqlite3'; +import { sunriseDB } from '../helpers/database.helpers.js'; +export default function getCemeteryDirectionsOfArrival(cemeteryId, connectedDatabase) { + const database = connectedDatabase ?? sqlite(sunriseDB, { readonly: true }); + const directionsList = database + .prepare(`select directionOfArrival, directionOfArrivalDescription + from CemeteryDirectionsOfArrival + where cemeteryId = ?`) + .all(cemeteryId); + const directions = {}; + for (const direction of directionsList) { + directions[direction.directionOfArrival] = + direction.directionOfArrivalDescription; + } + if (connectedDatabase === undefined) { + database.close(); + } + return directions; +} diff --git a/database/getCemeteryDirectionsOfArrival.ts b/database/getCemeteryDirectionsOfArrival.ts new file mode 100644 index 00000000..bce5ff2e --- /dev/null +++ b/database/getCemeteryDirectionsOfArrival.ts @@ -0,0 +1,37 @@ +import sqlite from 'better-sqlite3' + +import type { directionsOfArrival } from '../data/dataLists.js' +import { sunriseDB } from '../helpers/database.helpers.js' + +export default function getCemeteryDirectionsOfArrival( + cemeteryId: number | string, + connectedDatabase?: sqlite.Database +): Partial> { + const database = connectedDatabase ?? sqlite(sunriseDB, { readonly: true }) + + const directionsList = database + .prepare( + `select directionOfArrival, directionOfArrivalDescription + from CemeteryDirectionsOfArrival + where cemeteryId = ?` + ) + .all(cemeteryId) as Array<{ + directionOfArrival: (typeof directionsOfArrival)[number] + directionOfArrivalDescription: string + }> + + const directions: Partial< + Record<(typeof directionsOfArrival)[number], string> + > = {} + + for (const direction of directionsList) { + directions[direction.directionOfArrival] = + direction.directionOfArrivalDescription + } + + if (connectedDatabase === undefined) { + database.close() + } + + return directions +} diff --git a/database/getContract.js b/database/getContract.js index 4bf69770..9635bc49 100644 --- a/database/getContract.js +++ b/database/getContract.js @@ -14,23 +14,24 @@ export default async function getContract(contractId, connectedDatabase) { database.function('userFn_timeIntegerToPeriodString', timeIntegerToPeriodString); const contract = database .prepare(`select o.contractId, - o.contractTypeId, t.contractType, t.isPreneed, - o.burialSiteId, l.burialSiteName, l.burialSiteTypeId, - l.cemeteryId, m.cemeteryName, - o.contractStartDate, userFn_dateIntegerToString(o.contractStartDate) as contractStartDateString, - o.contractEndDate, userFn_dateIntegerToString(o.contractEndDate) as contractEndDateString, - o.purchaserName, o.purchaserAddress1, o.purchaserAddress2, - o.purchaserCity, o.purchaserProvince, o.purchaserPostalCode, - o.purchaserPhoneNumber, o.purchaserEmail, o.purchaserRelationship, - o.funeralHomeId, o.funeralDirectorName, f.funeralHomeKey, - f.funeralHomeName, f.funeralHomeAddress1, f.funeralHomeAddress2, - f.funeralHomeCity, f.funeralHomeProvince, f.funeralHomePostalCode, - o.funeralDate, userFn_dateIntegerToString(o.funeralDate) as funeralDateString, - o.funeralTime, - userFn_timeIntegerToString(o.funeralTime) as funeralTimeString, - userFn_timeIntegerToPeriodString(o.funeralTime) as funeralTimePeriodString, - o.committalTypeId, c.committalType, - o.recordUpdate_timeMillis + o.contractTypeId, t.contractType, t.isPreneed, + o.burialSiteId, l.burialSiteName, l.burialSiteTypeId, + l.cemeteryId, m.cemeteryName, + o.contractStartDate, userFn_dateIntegerToString(o.contractStartDate) as contractStartDateString, + o.contractEndDate, userFn_dateIntegerToString(o.contractEndDate) as contractEndDateString, + o.purchaserName, o.purchaserAddress1, o.purchaserAddress2, + o.purchaserCity, o.purchaserProvince, o.purchaserPostalCode, + o.purchaserPhoneNumber, o.purchaserEmail, o.purchaserRelationship, + o.funeralHomeId, o.funeralDirectorName, f.funeralHomeKey, + f.funeralHomeName, f.funeralHomeAddress1, f.funeralHomeAddress2, + f.funeralHomeCity, f.funeralHomeProvince, f.funeralHomePostalCode, + o.funeralDate, userFn_dateIntegerToString(o.funeralDate) as funeralDateString, + o.funeralTime, + userFn_timeIntegerToString(o.funeralTime) as funeralTimeString, + userFn_timeIntegerToPeriodString(o.funeralTime) as funeralTimePeriodString, + o.directionOfArrival, + o.committalTypeId, c.committalType, + o.recordUpdate_timeMillis from Contracts o left join ContractTypes t on o.contractTypeId = t.contractTypeId left join FuneralHomes f on o.funeralHomeId = f.funeralHomeId @@ -38,7 +39,7 @@ export default async function getContract(contractId, connectedDatabase) { left join BurialSites l on o.burialSiteId = l.burialSiteId left join Cemeteries m on l.cemeteryId = m.cemeteryId where o.recordDelete_timeMillis is null - and o.contractId = ?`) + and o.contractId = ?`) .get(contractId); if (contract !== undefined) { contract.contractFields = getContractFields(contractId, database); diff --git a/database/getContract.ts b/database/getContract.ts index 53215ec1..77de0945 100644 --- a/database/getContract.ts +++ b/database/getContract.ts @@ -31,23 +31,24 @@ export default async function getContract( const contract = database .prepare( `select o.contractId, - o.contractTypeId, t.contractType, t.isPreneed, - o.burialSiteId, l.burialSiteName, l.burialSiteTypeId, - l.cemeteryId, m.cemeteryName, - o.contractStartDate, userFn_dateIntegerToString(o.contractStartDate) as contractStartDateString, - o.contractEndDate, userFn_dateIntegerToString(o.contractEndDate) as contractEndDateString, - o.purchaserName, o.purchaserAddress1, o.purchaserAddress2, - o.purchaserCity, o.purchaserProvince, o.purchaserPostalCode, - o.purchaserPhoneNumber, o.purchaserEmail, o.purchaserRelationship, - o.funeralHomeId, o.funeralDirectorName, f.funeralHomeKey, - f.funeralHomeName, f.funeralHomeAddress1, f.funeralHomeAddress2, - f.funeralHomeCity, f.funeralHomeProvince, f.funeralHomePostalCode, - o.funeralDate, userFn_dateIntegerToString(o.funeralDate) as funeralDateString, - o.funeralTime, - userFn_timeIntegerToString(o.funeralTime) as funeralTimeString, - userFn_timeIntegerToPeriodString(o.funeralTime) as funeralTimePeriodString, - o.committalTypeId, c.committalType, - o.recordUpdate_timeMillis + o.contractTypeId, t.contractType, t.isPreneed, + o.burialSiteId, l.burialSiteName, l.burialSiteTypeId, + l.cemeteryId, m.cemeteryName, + o.contractStartDate, userFn_dateIntegerToString(o.contractStartDate) as contractStartDateString, + o.contractEndDate, userFn_dateIntegerToString(o.contractEndDate) as contractEndDateString, + o.purchaserName, o.purchaserAddress1, o.purchaserAddress2, + o.purchaserCity, o.purchaserProvince, o.purchaserPostalCode, + o.purchaserPhoneNumber, o.purchaserEmail, o.purchaserRelationship, + o.funeralHomeId, o.funeralDirectorName, f.funeralHomeKey, + f.funeralHomeName, f.funeralHomeAddress1, f.funeralHomeAddress2, + f.funeralHomeCity, f.funeralHomeProvince, f.funeralHomePostalCode, + o.funeralDate, userFn_dateIntegerToString(o.funeralDate) as funeralDateString, + o.funeralTime, + userFn_timeIntegerToString(o.funeralTime) as funeralTimeString, + userFn_timeIntegerToPeriodString(o.funeralTime) as funeralTimePeriodString, + o.directionOfArrival, + o.committalTypeId, c.committalType, + o.recordUpdate_timeMillis from Contracts o left join ContractTypes t on o.contractTypeId = t.contractTypeId left join FuneralHomes f on o.funeralHomeId = f.funeralHomeId @@ -55,7 +56,7 @@ export default async function getContract( left join BurialSites l on o.burialSiteId = l.burialSiteId left join Cemeteries m on l.cemeteryId = m.cemeteryId where o.recordDelete_timeMillis is null - and o.contractId = ?` + and o.contractId = ?` ) .get(contractId) as Contract | undefined diff --git a/database/initializeDatabase.js b/database/initializeDatabase.js index 48ba4171..2aedd996 100644 --- a/database/initializeDatabase.js +++ b/database/initializeDatabase.js @@ -74,6 +74,12 @@ const createStatements = [ parentCemeteryId integer, ${recordColumns}, foreign key (parentCemeteryId) references Cemeteries (cemeteryId))`, + `create table if not exists CemeteryDirectionsOfArrival ( + cemeteryId integer not null, + directionOfArrival varchar(2) not null, + directionOfArrivalDescription varchar(100) not null, + primary key (cemeteryId, directionOfArrival), + foreign key (cemeteryId) references Cemeteries (cemeteryId)) without rowid`, /* * Burial Sites */ @@ -199,6 +205,7 @@ const createStatements = [ funeralDate integer check (funeralDate > 0), funeralTime integer check (funeralTime >= 0), committalTypeId integer, + directionOfArrival varchar(2), ${recordColumns}, foreign key (burialSiteId) references BurialSites (burialSiteId), diff --git a/database/initializeDatabase.ts b/database/initializeDatabase.ts index a627830e..a6864e65 100644 --- a/database/initializeDatabase.ts +++ b/database/initializeDatabase.ts @@ -90,6 +90,13 @@ const createStatements = [ ${recordColumns}, foreign key (parentCemeteryId) references Cemeteries (cemeteryId))`, + `create table if not exists CemeteryDirectionsOfArrival ( + cemeteryId integer not null, + directionOfArrival varchar(2) not null, + directionOfArrivalDescription varchar(100) not null, + primary key (cemeteryId, directionOfArrival), + foreign key (cemeteryId) references Cemeteries (cemeteryId)) without rowid`, + /* * Burial Sites */ @@ -231,6 +238,7 @@ const createStatements = [ funeralDate integer check (funeralDate > 0), funeralTime integer check (funeralTime >= 0), committalTypeId integer, + directionOfArrival varchar(2), ${recordColumns}, foreign key (burialSiteId) references BurialSites (burialSiteId), diff --git a/database/updateCemetery.d.ts b/database/updateCemetery.d.ts index 23a95ff4..6e22f5dc 100644 --- a/database/updateCemetery.d.ts +++ b/database/updateCemetery.d.ts @@ -1,4 +1,5 @@ -export interface UpdateCemeteryForm { +import { directionsOfArrival } from '../data/dataLists.js'; +export type UpdateCemeteryForm = Partial> & Partial> & { cemeteryId: string; cemeteryDescription: string; cemeteryKey: string; @@ -13,7 +14,7 @@ export interface UpdateCemeteryForm { cemeteryLatitude: string; cemeteryLongitude: string; cemeterySvg: string; -} +}; /** * Updates a cemetery in the database. * Be sure to rebuild burial site names after updating a cemetery. diff --git a/database/updateCemetery.js b/database/updateCemetery.js index 00519497..02823cee 100644 --- a/database/updateCemetery.js +++ b/database/updateCemetery.js @@ -1,4 +1,5 @@ import sqlite from 'better-sqlite3'; +import { directionsOfArrival } from '../data/dataLists.js'; import { sunriseDB } from '../helpers/database.helpers.js'; /** * Updates a cemetery in the database. @@ -35,6 +36,20 @@ export default function updateCemetery(updateForm, user) { : 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 + .prepare(`delete from CemeteryDirectionsOfArrival + where cemeteryId = ?`) + .run(updateForm.cemeteryId); + for (const direction of directionsOfArrival) { + const directionDescriptionName = `directionOfArrivalDescription_${direction}`; + if (directionDescriptionName in updateForm) { + database + .prepare(`insert into CemeteryDirectionsOfArrival ( + cemeteryId, directionOfArrival, directionOfArrivalDescription) + values (?, ?, ?)`) + .run(updateForm.cemeteryId, direction, updateForm[directionDescriptionName] ?? ''); + } + } database.close(); return result.changes > 0; } diff --git a/database/updateCemetery.ts b/database/updateCemetery.ts index c64a2ede..13f7042a 100644 --- a/database/updateCemetery.ts +++ b/database/updateCemetery.ts @@ -1,27 +1,39 @@ import sqlite from 'better-sqlite3' +import { directionsOfArrival } from '../data/dataLists.js' import { sunriseDB } from '../helpers/database.helpers.js' -export interface UpdateCemeteryForm { - cemeteryId: string +export type UpdateCemeteryForm = Partial< + Record< + `directionOfArrival_${(typeof directionsOfArrival)[number]}`, + (typeof directionsOfArrival)[number] + > +> & + Partial< + Record< + `directionOfArrivalDescription_${(typeof directionsOfArrival)[number]}`, + string + > + > & { + cemeteryId: string - cemeteryDescription: string - cemeteryKey: string - cemeteryName: string - parentCemeteryId: string + cemeteryDescription: string + cemeteryKey: string + cemeteryName: string + parentCemeteryId: string - cemeteryAddress1: string - cemeteryAddress2: string - cemeteryCity: string - cemeteryPostalCode: string - cemeteryProvince: string + cemeteryAddress1: string + cemeteryAddress2: string + cemeteryCity: string + cemeteryPostalCode: string + cemeteryProvince: string - cemeteryPhoneNumber: string + cemeteryPhoneNumber: string - cemeteryLatitude: string - cemeteryLongitude: string - cemeterySvg: string -} + cemeteryLatitude: string + cemeteryLongitude: string + cemeterySvg: string + } /** * Updates a cemetery in the database. @@ -82,6 +94,31 @@ export default function updateCemetery( updateForm.cemeteryId ) + database + .prepare( + `delete from CemeteryDirectionsOfArrival + where cemeteryId = ?` + ) + .run(updateForm.cemeteryId) + + for (const direction of directionsOfArrival) { + const directionDescriptionName = `directionOfArrivalDescription_${direction}` + + if (directionDescriptionName in updateForm) { + database + .prepare( + `insert into CemeteryDirectionsOfArrival ( + cemeteryId, directionOfArrival, directionOfArrivalDescription) + values (?, ?, ?)` + ) + .run( + updateForm.cemeteryId, + direction, + updateForm[directionDescriptionName] ?? '' + ) + } + } + database.close() return result.changes > 0 diff --git a/database/updateContract.d.ts b/database/updateContract.d.ts index e935618c..af1afdc6 100644 --- a/database/updateContract.d.ts +++ b/database/updateContract.d.ts @@ -7,6 +7,7 @@ export interface UpdateContractForm { contractStartDateString: DateString; funeralHomeId?: number | string; committalTypeId?: number | string; + directionOfArrival?: string; funeralDateString: '' | DateString; funeralDirectorName: string; funeralTimeString: '' | TimeString; diff --git a/database/updateContract.js b/database/updateContract.js index b6f067df..c8be3ba7 100644 --- a/database/updateContract.js +++ b/database/updateContract.js @@ -16,6 +16,7 @@ export default function updateContract(updateForm, user) { funeralDirectorName = ?, funeralDate = ?, funeralTime = ?, + directionOfArrival = ?, committalTypeId = ?, purchaserName = ?, purchaserAddress1 = ?, @@ -36,7 +37,7 @@ export default function updateContract(updateForm, user) { ? undefined : dateStringToInteger(updateForm.funeralDateString), updateForm.funeralTimeString === '' ? undefined - : timeStringToInteger(updateForm.funeralTimeString), updateForm.committalTypeId === '' + : timeStringToInteger(updateForm.funeralTimeString), updateForm.directionOfArrival ?? '', updateForm.committalTypeId === '' ? undefined : updateForm.committalTypeId, updateForm.purchaserName ?? '', updateForm.purchaserAddress1 ?? '', updateForm.purchaserAddress2 ?? '', updateForm.purchaserCity ?? '', updateForm.purchaserProvince ?? '', updateForm.purchaserPostalCode ?? '', updateForm.purchaserPhoneNumber ?? '', updateForm.purchaserEmail ?? '', updateForm.purchaserRelationship ?? '', user.userName, Date.now(), updateForm.contractId); if (result.changes > 0) { diff --git a/database/updateContract.ts b/database/updateContract.ts index b1d95ebb..cf35652b 100644 --- a/database/updateContract.ts +++ b/database/updateContract.ts @@ -23,6 +23,7 @@ export interface UpdateContractForm { funeralHomeId?: number | string committalTypeId?: number | string + directionOfArrival?: string funeralDateString: '' | DateString funeralDirectorName: string funeralTimeString: '' | TimeString @@ -61,6 +62,7 @@ export default function updateContract( funeralDirectorName = ?, funeralDate = ?, funeralTime = ?, + directionOfArrival = ?, committalTypeId = ?, purchaserName = ?, purchaserAddress1 = ?, @@ -91,6 +93,7 @@ export default function updateContract( updateForm.funeralTimeString === '' ? undefined : timeStringToInteger(updateForm.funeralTimeString), + updateForm.directionOfArrival ?? '', updateForm.committalTypeId === '' ? undefined : updateForm.committalTypeId, diff --git a/handlers/contracts-get/edit.js b/handlers/contracts-get/edit.js index bb133120..0c7e36f1 100644 --- a/handlers/contracts-get/edit.js +++ b/handlers/contracts-get/edit.js @@ -3,6 +3,7 @@ import getContract from '../../database/getContract.js'; import getFuneralHomes from '../../database/getFuneralHomes.js'; import { getConfigProperty } from '../../helpers/config.helpers.js'; import { getBurialSiteStatuses, getBurialSiteTypes, getCommittalTypes, getContractTypePrintsById, getContractTypes, getIntermentContainerTypes, getWorkOrderTypes } from '../../helpers/functions.cache.js'; +import getBurialSiteDirectionsOfArrival, { defaultDirectionsOfArrival } from '../../database/getBurialSiteDirectionsOfArrival.js'; export default async function handler(request, response) { const contract = await getContract(request.params.contractId); if (contract === undefined) { @@ -23,6 +24,9 @@ export default async function handler(request, response) { const burialSiteStatuses = getBurialSiteStatuses(); const burialSiteTypes = getBurialSiteTypes(); const cemeteries = getCemeteries(); + const burialSiteDirectionsOfArrival = contract.burialSiteId === undefined + ? defaultDirectionsOfArrival + : getBurialSiteDirectionsOfArrival(contract.burialSiteId); /* * Work Order Drop Lists */ @@ -38,6 +42,7 @@ export default async function handler(request, response) { burialSiteStatuses, burialSiteTypes, cemeteries, + burialSiteDirectionsOfArrival, workOrderTypes, isCreate: false }); diff --git a/handlers/contracts-get/edit.ts b/handlers/contracts-get/edit.ts index 15522bcd..d767071d 100644 --- a/handlers/contracts-get/edit.ts +++ b/handlers/contracts-get/edit.ts @@ -13,6 +13,9 @@ import { getIntermentContainerTypes, getWorkOrderTypes } from '../../helpers/functions.cache.js' +import getBurialSiteDirectionsOfArrival, { + defaultDirectionsOfArrival +} from '../../database/getBurialSiteDirectionsOfArrival.js' export default async function handler( request: Request, @@ -48,6 +51,11 @@ export default async function handler( const burialSiteTypes = getBurialSiteTypes() const cemeteries = getCemeteries() + const burialSiteDirectionsOfArrival = + contract.burialSiteId === undefined + ? defaultDirectionsOfArrival + : getBurialSiteDirectionsOfArrival(contract.burialSiteId) + /* * Work Order Drop Lists */ @@ -69,6 +77,8 @@ export default async function handler( burialSiteTypes, cemeteries, + burialSiteDirectionsOfArrival, + workOrderTypes, isCreate: false diff --git a/handlers/contracts-get/new.js b/handlers/contracts-get/new.js index e991c3c7..f9e0e54f 100644 --- a/handlers/contracts-get/new.js +++ b/handlers/contracts-get/new.js @@ -1,5 +1,6 @@ import { dateToInteger, dateToString } from '@cityssm/utils-datetime'; import getBurialSite from '../../database/getBurialSite.js'; +import getBurialSiteDirectionsOfArrival, { defaultDirectionsOfArrival } from '../../database/getBurialSiteDirectionsOfArrival.js'; import getCemeteries from '../../database/getCemeteries.js'; import getFuneralHomes from '../../database/getFuneralHomes.js'; import { getConfigProperty } from '../../helpers/config.helpers.js'; @@ -35,6 +36,9 @@ export default async function handler(request, response) { const burialSiteStatuses = getBurialSiteStatuses(); const burialSiteTypes = getBurialSiteTypes(); const cemeteries = getCemeteries(); + const burialSiteDirectionsOfArrival = contract.burialSiteId === undefined + ? defaultDirectionsOfArrival + : getBurialSiteDirectionsOfArrival(contract.burialSiteId); response.render('contract-edit', { headTitle: 'Create a New Contract', contract, @@ -45,6 +49,7 @@ export default async function handler(request, response) { burialSiteStatuses, burialSiteTypes, cemeteries, + burialSiteDirectionsOfArrival, isCreate: true }); } diff --git a/handlers/contracts-get/new.ts b/handlers/contracts-get/new.ts index dd6900c5..dc23f616 100644 --- a/handlers/contracts-get/new.ts +++ b/handlers/contracts-get/new.ts @@ -3,6 +3,7 @@ import type { Request, Response } from 'express' import { dateToInteger, dateToString } from '@cityssm/utils-datetime' import getBurialSite from '../../database/getBurialSite.js' +import getBurialSiteDirectionsOfArrival, { defaultDirectionsOfArrival } from '../../database/getBurialSiteDirectionsOfArrival.js' import getCemeteries from '../../database/getCemeteries.js' import getFuneralHomes from '../../database/getFuneralHomes.js' import { getConfigProperty } from '../../helpers/config.helpers.js' @@ -58,6 +59,11 @@ export default async function handler( const burialSiteTypes = getBurialSiteTypes() const cemeteries = getCemeteries() + const burialSiteDirectionsOfArrival = + contract.burialSiteId === undefined + ? defaultDirectionsOfArrival + : getBurialSiteDirectionsOfArrival(contract.burialSiteId) + response.render('contract-edit', { headTitle: 'Create a New Contract', @@ -72,6 +78,8 @@ export default async function handler( burialSiteTypes, cemeteries, + burialSiteDirectionsOfArrival, + isCreate: true }) } diff --git a/handlers/contracts-post/doGetBurialSiteDirectionsOfArrival.d.ts b/handlers/contracts-post/doGetBurialSiteDirectionsOfArrival.d.ts new file mode 100644 index 00000000..69ed4485 --- /dev/null +++ b/handlers/contracts-post/doGetBurialSiteDirectionsOfArrival.d.ts @@ -0,0 +1,4 @@ +import type { Request, Response } from 'express'; +export default function handler(request: Request, response: Response): void; diff --git a/handlers/contracts-post/doGetBurialSiteDirectionsOfArrival.js b/handlers/contracts-post/doGetBurialSiteDirectionsOfArrival.js new file mode 100644 index 00000000..909cd8af --- /dev/null +++ b/handlers/contracts-post/doGetBurialSiteDirectionsOfArrival.js @@ -0,0 +1,9 @@ +import getBurialSiteDirectionsOfArrival, { defaultDirectionsOfArrival } from '../../database/getBurialSiteDirectionsOfArrival.js'; +export default function handler(request, response) { + const directionsOfArrival = request.body.burialSiteId === '' + ? defaultDirectionsOfArrival + : getBurialSiteDirectionsOfArrival(request.body.burialSiteId); + response.json({ + directionsOfArrival + }); +} diff --git a/handlers/contracts-post/doGetBurialSiteDirectionsOfArrival.ts b/handlers/contracts-post/doGetBurialSiteDirectionsOfArrival.ts new file mode 100644 index 00000000..bf5c9aad --- /dev/null +++ b/handlers/contracts-post/doGetBurialSiteDirectionsOfArrival.ts @@ -0,0 +1,19 @@ +import type { Request, Response } from 'express' + +import getBurialSiteDirectionsOfArrival, { + defaultDirectionsOfArrival +} from '../../database/getBurialSiteDirectionsOfArrival.js' + +export default function handler( + request: Request, + response: Response +): void { + const directionsOfArrival = + request.body.burialSiteId === '' + ? defaultDirectionsOfArrival + : getBurialSiteDirectionsOfArrival(request.body.burialSiteId) + + response.json({ + directionsOfArrival + }) +} diff --git a/public/javascripts/cemetery.edit.js b/public/javascripts/cemetery.edit.js index 642c6e0c..82ee8e9c 100644 --- a/public/javascripts/cemetery.edit.js +++ b/public/javascripts/cemetery.edit.js @@ -96,4 +96,26 @@ Object.defineProperty(exports, "__esModule", { value: true }); } }); }); + /* + * Directions of Arrival + */ + function toggleDirectionOfArrivalDescription(clickEvent) { + const checkboxElement = clickEvent.currentTarget; + const descriptionElement = document.querySelector(`#cemetery--directionOfArrivalDescription_${checkboxElement.value}`); + if (checkboxElement.checked) { + descriptionElement.removeAttribute('disabled'); + descriptionElement.focus(); + } + else { + descriptionElement.setAttribute('disabled', 'disabled'); + // descriptionElement.value = '' + } + setUnsavedChanges(); + } + const directionOfArrivalCheckboxElements = + // eslint-disable-next-line no-secrets/no-secrets + document.querySelectorAll('input[name^="directionOfArrival_"]'); + for (const checkboxElement of directionOfArrivalCheckboxElements) { + checkboxElement.addEventListener('change', toggleDirectionOfArrivalDescription); + } })(); diff --git a/public/javascripts/cemetery.edit.ts b/public/javascripts/cemetery.edit.ts index 6f4d2c2d..fe2d3a92 100644 --- a/public/javascripts/cemetery.edit.ts +++ b/public/javascripts/cemetery.edit.ts @@ -149,4 +149,37 @@ declare const exports: Record } }) }) + + /* + * Directions of Arrival + */ + + function toggleDirectionOfArrivalDescription(clickEvent: Event): void { + const checkboxElement = clickEvent.currentTarget as HTMLInputElement + + const descriptionElement = document.querySelector( + `#cemetery--directionOfArrivalDescription_${checkboxElement.value}` + ) as HTMLInputElement + + if (checkboxElement.checked) { + descriptionElement.removeAttribute('disabled') + descriptionElement.focus() + } else { + descriptionElement.setAttribute('disabled', 'disabled') + // descriptionElement.value = '' + } + + setUnsavedChanges() + } + + const directionOfArrivalCheckboxElements: NodeListOf = + // eslint-disable-next-line no-secrets/no-secrets + document.querySelectorAll('input[name^="directionOfArrival_"]') + + for (const checkboxElement of directionOfArrivalCheckboxElements) { + checkboxElement.addEventListener( + 'change', + toggleDirectionOfArrivalDescription + ) + } })() diff --git a/public/javascripts/contract.edit.js b/public/javascripts/contract.edit.js index a765aa4c..d8b1b1d7 100644 --- a/public/javascripts/contract.edit.js +++ b/public/javascripts/contract.edit.js @@ -231,7 +231,37 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); } // Burial Site Selector + const burialSiteIdElement = document.querySelector('#contract--burialSiteId'); const burialSiteNameElement = document.querySelector('#contract--burialSiteName'); + const directionOfArrivalElement = document.querySelector('#contract--directionOfArrival'); + function refreshDirectionsOfArrival() { + const burialSiteId = burialSiteIdElement.value; + cityssm.postJSON(`${sunrise.urlPrefix}/contracts/doGetBurialSiteDirectionsOfArrival`, { + burialSiteId + }, (rawResponseJSON) => { + const responseJSON = rawResponseJSON; + const currentDirectionOfArrival = directionOfArrivalElement.value; + directionOfArrivalElement.value = ''; + directionOfArrivalElement.innerHTML = + ''; + for (const direction of exports.directionsOfArrival) { + // eslint-disable-next-line security/detect-object-injection + if (responseJSON.directionsOfArrival[direction] !== undefined) { + const optionElement = document.createElement('option'); + optionElement.value = direction; + optionElement.textContent = + direction + + (responseJSON.directionsOfArrival[direction] === '' + ? '' + : ` - ${responseJSON.directionsOfArrival[direction]}`); + if (currentDirectionOfArrival === direction) { + optionElement.selected = true; + } + directionOfArrivalElement.append(optionElement); + } + } + }); + } burialSiteNameElement.addEventListener('click', (clickEvent) => { const currentBurialSiteName = clickEvent.currentTarget .value; @@ -240,11 +270,11 @@ Object.defineProperty(exports, "__esModule", { value: true }); let burialSiteSelectResultsElement; let burialSiteCreateFormElement; function renderSelectedBurialSiteAndClose(burialSiteId, burialSiteName) { - ; - document.querySelector('#contract--burialSiteId').value = burialSiteId.toString(); - document.querySelector('#contract--burialSiteName').value = burialSiteName; + burialSiteIdElement.value = burialSiteId.toString(); + burialSiteNameElement.value = burialSiteName; setUnsavedChanges(); burialSiteSelectCloseModalFunction(); + refreshDirectionsOfArrival(); } function selectExistingBurialSite(selectClickEvent) { selectClickEvent.preventDefault(); @@ -401,6 +431,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); else { burialSiteNameElement.value = '(No Burial Site)'; document.querySelector('#contract--burialSiteId').value = ''; + refreshDirectionsOfArrival(); setUnsavedChanges(); } }); diff --git a/public/javascripts/contract.edit.ts b/public/javascripts/contract.edit.ts index db62ab89..f64410d4 100644 --- a/public/javascripts/contract.edit.ts +++ b/public/javascripts/contract.edit.ts @@ -4,6 +4,7 @@ import type { BulmaJS } from '@cityssm/bulma-js/types.js' import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js' +import type { directionsOfArrival } from '../../data/dataLists.js' import type { BurialSite, BurialSiteStatus, @@ -13,6 +14,7 @@ import type { } from '../../types/record.types.js' import type { Sunrise } from './types.js' +import { ref } from 'process' declare const cityssm: cityssmGlobal declare const bulmaJS: BulmaJS @@ -22,6 +24,8 @@ declare const exports: { burialSiteStatuses: BurialSiteStatus[] burialSiteTypes: BurialSiteType[] cemeteries: Cemetery[] + + directionsOfArrival: typeof directionsOfArrival } ;(() => { const sunrise = exports.sunrise @@ -362,10 +366,60 @@ declare const exports: { // Burial Site Selector + const burialSiteIdElement = document.querySelector( + '#contract--burialSiteId' + ) as HTMLInputElement + const burialSiteNameElement = document.querySelector( '#contract--burialSiteName' ) as HTMLInputElement + const directionOfArrivalElement = document.querySelector( + '#contract--directionOfArrival' + ) as HTMLSelectElement + + function refreshDirectionsOfArrival(): void { + const burialSiteId = burialSiteIdElement.value + + cityssm.postJSON( + `${sunrise.urlPrefix}/contracts/doGetBurialSiteDirectionsOfArrival`, + { + burialSiteId + }, + (rawResponseJSON) => { + const responseJSON = rawResponseJSON as { + directionsOfArrival: Partial> + } + + const currentDirectionOfArrival = directionOfArrivalElement.value + + directionOfArrivalElement.value = '' + directionOfArrivalElement.innerHTML = + '' + + for (const direction of exports.directionsOfArrival) { + // eslint-disable-next-line security/detect-object-injection + if (responseJSON.directionsOfArrival[direction] !== undefined) { + const optionElement = document.createElement('option') + + optionElement.value = direction + optionElement.textContent = + direction + + (responseJSON.directionsOfArrival[direction] === '' + ? '' + : ` - ${responseJSON.directionsOfArrival[direction]}`) + + if (currentDirectionOfArrival === direction) { + optionElement.selected = true + } + + directionOfArrivalElement.append(optionElement) + } + } + } + ) + } + burialSiteNameElement.addEventListener('click', (clickEvent) => { const currentBurialSiteName = (clickEvent.currentTarget as HTMLInputElement) .value @@ -381,15 +435,13 @@ declare const exports: { burialSiteId: number | string, burialSiteName: string ): void { - ;( - document.querySelector('#contract--burialSiteId') as HTMLInputElement - ).value = burialSiteId.toString() - ;( - document.querySelector('#contract--burialSiteName') as HTMLInputElement - ).value = burialSiteName + burialSiteIdElement.value = burialSiteId.toString() + burialSiteNameElement.value = burialSiteName setUnsavedChanges() burialSiteSelectCloseModalFunction() + + refreshDirectionsOfArrival() } function selectExistingBurialSite(selectClickEvent: Event): void { @@ -661,6 +713,7 @@ declare const exports: { document.querySelector('#contract--burialSiteId') as HTMLInputElement ).value = '' + refreshDirectionsOfArrival() setUnsavedChanges() } }) diff --git a/routes/contracts.js b/routes/contracts.js index db9b8d81..fb01fad6 100644 --- a/routes/contracts.js +++ b/routes/contracts.js @@ -17,6 +17,7 @@ import handler_doDeleteContractComment from '../handlers/contracts-post/doDelete import handler_doDeleteContractFee from '../handlers/contracts-post/doDeleteContractFee.js'; import handler_doDeleteContractInterment from '../handlers/contracts-post/doDeleteContractInterment.js'; import handler_doDeleteContractTransaction from '../handlers/contracts-post/doDeleteContractTransaction.js'; +import handler_doGetBurialSiteDirectionsOfArrival from '../handlers/contracts-post/doGetBurialSiteDirectionsOfArrival.js'; import handler_doGetContractTypeFields from '../handlers/contracts-post/doGetContractTypeFields.js'; import handler_doGetDynamicsGPDocument from '../handlers/contracts-post/doGetDynamicsGPDocument.js'; import handler_doGetFees from '../handlers/contracts-post/doGetFees.js'; @@ -45,6 +46,7 @@ router.get('/:contractId/edit', updateGetHandler, handler_edit); router.post('/doUpdateContract', updatePostHandler, handler_doUpdateContract); router.post('/doCopyContract', updatePostHandler, handler_doCopyContract); router.post('/doDeleteContract', updatePostHandler, handler_doDeleteContract); +router.post('/doGetBurialSiteDirectionsOfArrival', updatePostHandler, handler_doGetBurialSiteDirectionsOfArrival); // Interments router.post('/doAddContractInterment', updatePostHandler, handler_doAddContractInterment); router.post('/doUpdateContractInterment', updatePostHandler, handler_doUpdateContractInterment); diff --git a/routes/contracts.ts b/routes/contracts.ts index 27d60535..fb36f2f0 100644 --- a/routes/contracts.ts +++ b/routes/contracts.ts @@ -18,6 +18,7 @@ import handler_doDeleteContractComment from '../handlers/contracts-post/doDelete import handler_doDeleteContractFee from '../handlers/contracts-post/doDeleteContractFee.js' import handler_doDeleteContractInterment from '../handlers/contracts-post/doDeleteContractInterment.js' import handler_doDeleteContractTransaction from '../handlers/contracts-post/doDeleteContractTransaction.js' +import handler_doGetBurialSiteDirectionsOfArrival from '../handlers/contracts-post/doGetBurialSiteDirectionsOfArrival.js' import handler_doGetContractTypeFields from '../handlers/contracts-post/doGetContractTypeFields.js' import handler_doGetDynamicsGPDocument from '../handlers/contracts-post/doGetDynamicsGPDocument.js' import handler_doGetFees from '../handlers/contracts-post/doGetFees.js' @@ -68,6 +69,12 @@ router.post('/doCopyContract', updatePostHandler, handler_doCopyContract) router.post('/doDeleteContract', updatePostHandler, handler_doDeleteContract) +router.post( + '/doGetBurialSiteDirectionsOfArrival', + updatePostHandler, + handler_doGetBurialSiteDirectionsOfArrival +) + // Interments router.post( diff --git a/types/record.types.d.ts b/types/record.types.d.ts index c49b201b..ba259e37 100644 --- a/types/record.types.d.ts +++ b/types/record.types.d.ts @@ -1,4 +1,5 @@ import type { DateString, TimeString } from '@cityssm/utils-datetime'; +import type { directionsOfArrival } from '../data/dataLists.js'; export interface BurialSite extends Record { burialSiteId: number; burialSiteName?: string; @@ -85,6 +86,7 @@ export interface Cemetery extends Record { cemeteryPhoneNumber: string; burialSiteCount?: number; childCemeteries?: Cemetery[]; + directionsOfArrival?: Partial>; } export interface CommittalType extends Record { committalTypeId: number; @@ -133,6 +135,7 @@ export interface Contract extends Record { funeralTimeString?: TimeString; committalType?: string; committalTypeId?: number; + directionOfArrival?: string; contractComments?: ContractComment[]; contractFees?: ContractFee[]; contractFields?: ContractField[]; diff --git a/types/record.types.ts b/types/record.types.ts index 86db7b54..4f7d8fc9 100644 --- a/types/record.types.ts +++ b/types/record.types.ts @@ -1,5 +1,7 @@ import type { DateString, TimeString } from '@cityssm/utils-datetime' +import type { directionsOfArrival } from '../data/dataLists.js' + export interface BurialSite extends Record { burialSiteId: number @@ -118,6 +120,9 @@ export interface Cemetery extends Record { burialSiteCount?: number childCemeteries?: Cemetery[] + directionsOfArrival?: Partial< + globalThis.Record<(typeof directionsOfArrival)[number], string> + > } export interface CommittalType extends Record { @@ -186,6 +191,8 @@ export interface Contract extends Record { committalType?: string committalTypeId?: number + directionOfArrival?: string + contractComments?: ContractComment[] contractFees?: ContractFee[] contractFields?: ContractField[] diff --git a/views/cemetery-edit.ejs b/views/cemetery-edit.ejs index 244e3b9e..12222e8a 100644 --- a/views/cemetery-edit.ejs +++ b/views/cemetery-edit.ejs @@ -260,8 +260,6 @@ - -
@@ -296,6 +294,64 @@
+
+
+
+
+
+
+

Directions of Arrival

+
+
+
+
+
+ + + + + + + + + + <% for (const direction of dataLists.directionsOfArrival) { %> + <% + const directionIsSelected = cemetery.directionsOfArrival[direction] || false; + %> + + + + + <% } %> + +
+ Selected + DirectionDescription
+
+ /> +
+
+ + +
+ " + maxlength="100" + placeholder="Description" + <%= directionIsSelected ? "" : "disabled" %> + /> +
+
+
+
+
diff --git a/views/cemetery-view.ejs b/views/cemetery-view.ejs index 33ba35c9..4ae85132 100644 --- a/views/cemetery-view.ejs +++ b/views/cemetery-view.ejs @@ -66,29 +66,31 @@
- <% if (cemetery.cemeteryDescription && cemetery.cemeteryDescription !== "") { %> -
- Description
- <%= cemetery.cemeteryDescription %> -
- <% } %>
- Address
- <% if (cemetery.cemeteryAddress1 !== "") { %> - <%= cemetery.cemeteryAddress1 %>
+ <% if (cemetery.cemeteryDescription && cemetery.cemeteryDescription !== "") { %> +

+ Description
+ <%= cemetery.cemeteryDescription %> +

<% } %> - <% if (cemetery.cemeteryAddress2 !== "") { %> - <%= cemetery.cemeteryAddress2 %>
+

+ Address
+ <% if (cemetery.cemeteryAddress1 !== "") { %> + <%= cemetery.cemeteryAddress1 %>
+ <% } %> + <% if (cemetery.cemeteryAddress2 !== "") { %> + <%= cemetery.cemeteryAddress2 %>
+ <% } %> + <%= cemetery.cemeteryCity %>, <%= cemetery.cemeteryProvince %>
+ <%= cemetery.cemeteryPostalCode %> +

+ <% if (cemetery.cemeteryPhoneNumber !== "") { %> +

+ Phone Number
+ <%= cemetery.cemeteryPhoneNumber %> +

<% } %> - <%= cemetery.cemeteryCity %>, <%= cemetery.cemeteryProvince %>
- <%= cemetery.cemeteryPostalCode %>
- <% if (cemetery.cemeteryPhoneNumber !== "") { %> -
- Phone Number
- <%= cemetery.cemeteryPhoneNumber %> -
- <% } %> <% if (cemetery.parentCemeteryId !== null) { %>
Parent Cemetery
diff --git a/views/contract-edit.ejs b/views/contract-edit.ejs index 961e4fbd..a6641e1c 100644 --- a/views/contract-edit.ejs +++ b/views/contract-edit.ejs @@ -391,6 +391,30 @@
+
+ +
+
+ +
+
+
@@ -997,6 +1021,7 @@ exports.burialSiteStatuses = <%- JSON.stringify(burialSiteStatuses) %>; exports.burialSiteTypes = <%- JSON.stringify(burialSiteTypes) %>; exports.cemeteries = <%- JSON.stringify(cemeteries) %>; + exports.directionsOfArrival = <%- JSON.stringify(dataLists.directionsOfArrival) %>;