From 061c1fa43af7ae0f01ddb99aee2d3fbd4b3b1419 Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Tue, 25 Mar 2025 14:40:22 -0400 Subject: [PATCH] linting --- bin/wwwProcess.ts | 2 +- database/getFees.d.ts | 2 +- database/getFees.ts | 2 +- database/getReportData.d.ts | 2 +- database/getReportData.ts | 6 +- database/getWorkOrder.d.ts | 4 +- database/getWorkOrder.ts | 8 +- database/getWorkOrderComments.ts | 3 +- database/getWorkOrderMilestones.d.ts | 8 +- database/getWorkOrderMilestones.js | 125 +++--- database/getWorkOrderMilestones.ts | 221 +++++----- database/getWorkOrders.d.ts | 4 +- database/getWorkOrders.js | 194 +++++---- database/getWorkOrders.ts | 290 ++++++------- database/initializeDatabase.js | 10 +- database/initializeDatabase.ts | 49 ++- database/moveBurialSiteTypeField.js | 10 +- database/moveBurialSiteTypeField.ts | 28 +- database/moveContractTypeField.js | 14 +- database/moveContractTypeField.ts | 32 +- database/pool.ts | 2 +- database/updateBurialSite.d.ts | 10 +- database/updateBurialSite.ts | 10 +- database/updateBurialSiteComment.d.ts | 4 +- database/updateBurialSiteComment.ts | 4 +- types/configTypes.d.ts | 10 +- types/configTypes.ts | 24 +- types/recordTypes.d.ts | 524 +++++++++++------------ types/recordTypes.ts | 571 +++++++++++++------------- 29 files changed, 1114 insertions(+), 1059 deletions(-) diff --git a/bin/wwwProcess.ts b/bin/wwwProcess.ts index ff6fcf1c..9d486862 100644 --- a/bin/wwwProcess.ts +++ b/bin/wwwProcess.ts @@ -19,8 +19,8 @@ if (process.send === undefined) { } interface ServerError extends Error { - syscall: string code: string + syscall: string } function onError(error: ServerError): void { diff --git a/database/getFees.d.ts b/database/getFees.d.ts index 97dace36..587bfce6 100644 --- a/database/getFees.d.ts +++ b/database/getFees.d.ts @@ -1,8 +1,8 @@ import type { PoolConnection } from 'better-sqlite-pool'; import type { Fee } from '../types/recordTypes.js'; interface GetFeesFilters { - contractTypeId?: number | string; burialSiteTypeId?: number | string; + contractTypeId?: number | string; } export default function getFees(feeCategoryId: number, additionalFilters: GetFeesFilters, connectedDatabase?: PoolConnection): Promise; export {}; diff --git a/database/getFees.ts b/database/getFees.ts index b5d10d47..f7d57191 100644 --- a/database/getFees.ts +++ b/database/getFees.ts @@ -6,8 +6,8 @@ import { acquireConnection } from './pool.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' interface GetFeesFilters { - contractTypeId?: number | string burialSiteTypeId?: number | string + contractTypeId?: number | string } export default async function getFees( diff --git a/database/getReportData.d.ts b/database/getReportData.d.ts index 3702f415..f2b0d345 100644 --- a/database/getReportData.d.ts +++ b/database/getReportData.d.ts @@ -1,2 +1,2 @@ export type ReportParameters = Record; -export default function getReportData(reportName: string, reportParameters?: ReportParameters): Promise; +export default function getReportData(reportName: string, reportParameters?: ReportParameters): Promise; diff --git a/database/getReportData.ts b/database/getReportData.ts index b4158147..bdc5b63d 100644 --- a/database/getReportData.ts +++ b/database/getReportData.ts @@ -1,6 +1,6 @@ import { - dateIntegerToString, type DateString, + dateIntegerToString, dateStringToInteger, dateToInteger, timeIntegerToString @@ -37,6 +37,7 @@ const simpleReports: Record<`${string}-all` | `${string}-formatted`, string> = { 'contractTransactions-all': 'select * from ContractTransactions', 'contractTypeFields-all': 'select * from ContractTypeFields', 'contractTypes-all': 'select * from ContractTypes', + 'feeCategories-all': 'select * from FeeCategories', 'fees-all': 'select * from Fees', @@ -50,6 +51,7 @@ const simpleReports: Record<`${string}-all` | `${string}-formatted`, string> = { where recordDelete_timeMillis is null`, 'intermentContainerTypes-all': 'select * from IntermentContainerTypes', + 'workOrderBurialSites-all': 'select * from WorkOrderBurialSites', 'workOrderComments-all': 'select * from WorkOrderComments', 'workOrderMilestones-all': 'select * from WorkOrderMilestones', @@ -61,7 +63,7 @@ const simpleReports: Record<`${string}-all` | `${string}-formatted`, string> = { export default async function getReportData( reportName: string, reportParameters: ReportParameters = {} -): Promise { +): Promise { let sql = '' const sqlParameters: unknown[] = [] diff --git a/database/getWorkOrder.d.ts b/database/getWorkOrder.d.ts index 6f760878..2fed6f37 100644 --- a/database/getWorkOrder.d.ts +++ b/database/getWorkOrder.d.ts @@ -5,6 +5,6 @@ interface WorkOrderOptions { includeComments: boolean; includeMilestones: boolean; } -export default function getWorkOrder(workOrderId: number | string, options: WorkOrderOptions, connectedDatabase?: PoolConnection): Promise; -export declare function getWorkOrderByWorkOrderNumber(workOrderNumber: string): Promise; +export default function getWorkOrder(workOrderId: number | string, options: WorkOrderOptions, connectedDatabase?: PoolConnection): Promise; +export declare function getWorkOrderByWorkOrderNumber(workOrderNumber: string): Promise; export {}; diff --git a/database/getWorkOrder.ts b/database/getWorkOrder.ts index b1e0d397..10787638 100644 --- a/database/getWorkOrder.ts +++ b/database/getWorkOrder.ts @@ -30,7 +30,7 @@ export default async function getWorkOrder( workOrderId: number | string, options: WorkOrderOptions, connectedDatabase?: PoolConnection -): Promise { +): Promise { return await _getWorkOrder( `${baseSQL} and w.workOrderId = ?`, workOrderId, @@ -41,7 +41,7 @@ export default async function getWorkOrder( export async function getWorkOrderByWorkOrderNumber( workOrderNumber: string -): Promise { +): Promise { return await _getWorkOrder( `${baseSQL} and w.workOrderNumber = ?`, workOrderNumber, @@ -58,14 +58,14 @@ async function _getWorkOrder( workOrderIdOrWorkOrderNumber: number | string, options: WorkOrderOptions, connectedDatabase?: PoolConnection -): Promise { +): Promise { const database = connectedDatabase ?? (await acquireConnection()) database.function('userFn_dateIntegerToString', dateIntegerToString) const workOrder = database.prepare(sql).get(workOrderIdOrWorkOrderNumber) as - | undefined | WorkOrder + | undefined if (workOrder !== undefined) { if (options.includeBurialSites) { diff --git a/database/getWorkOrderComments.ts b/database/getWorkOrderComments.ts index eae61b9d..cbab58c4 100644 --- a/database/getWorkOrderComments.ts +++ b/database/getWorkOrderComments.ts @@ -1,9 +1,10 @@ +import type { PoolConnection } from 'better-sqlite-pool' + import { dateIntegerToString, timeIntegerToPeriodString, timeIntegerToString } from '@cityssm/utils-datetime' -import type { PoolConnection } from 'better-sqlite-pool' import type { WorkOrderComment } from '../types/recordTypes.js' diff --git a/database/getWorkOrderMilestones.d.ts b/database/getWorkOrderMilestones.d.ts index 69010a77..c64503e4 100644 --- a/database/getWorkOrderMilestones.d.ts +++ b/database/getWorkOrderMilestones.d.ts @@ -1,12 +1,12 @@ -import { type DateString } from '@cityssm/utils-datetime'; import type { PoolConnection } from 'better-sqlite-pool'; +import { type DateString } from '@cityssm/utils-datetime'; import type { WorkOrderMilestone } from '../types/recordTypes.js'; export interface WorkOrderMilestoneFilters { workOrderId?: number | string; - workOrderMilestoneDateFilter?: 'upcomingMissed' | 'recent' | 'date' | 'blank' | 'notBlank'; - workOrderMilestoneDateString?: '' | DateString; - workOrderTypeIds?: string; workOrderMilestoneTypeIds?: string; + workOrderTypeIds?: string; + workOrderMilestoneDateFilter?: 'blank' | 'date' | 'notBlank' | 'recent' | 'upcomingMissed'; + workOrderMilestoneDateString?: '' | DateString; } interface WorkOrderMilestoneOptions { includeWorkOrders?: boolean; diff --git a/database/getWorkOrderMilestones.js b/database/getWorkOrderMilestones.js index f130059b..a03b1e37 100644 --- a/database/getWorkOrderMilestones.js +++ b/database/getWorkOrderMilestones.js @@ -1,75 +1,17 @@ import { dateIntegerToString, dateStringToInteger, dateToInteger, timeIntegerToPeriodString, timeIntegerToString } from '@cityssm/utils-datetime'; import { getConfigProperty } from '../helpers/config.helpers.js'; -import getContracts from './getContracts.js'; import getBurialSites from './getBurialSites.js'; +import getContracts from './getContracts.js'; import { acquireConnection } from './pool.js'; // eslint-disable-next-line security/detect-unsafe-regex const commaSeparatedNumbersRegex = /^\d+(?:,\d+)*$/; -function buildWhereClause(filters) { - let sqlWhereClause = ' where m.recordDelete_timeMillis is null and w.recordDelete_timeMillis is null'; - const sqlParameters = []; - if ((filters.workOrderId ?? '') !== '') { - sqlWhereClause += ' and m.workOrderId = ?'; - sqlParameters.push(filters.workOrderId); - } - const date = new Date(); - const currentDateNumber = dateToInteger(date); - date.setDate(date.getDate() - - getConfigProperty('settings.workOrders.workOrderMilestoneDateRecentBeforeDays')); - const recentBeforeDateNumber = dateToInteger(date); - date.setDate(date.getDate() + - getConfigProperty('settings.workOrders.workOrderMilestoneDateRecentBeforeDays') + - getConfigProperty('settings.workOrders.workOrderMilestoneDateRecentAfterDays')); - const recentAfterDateNumber = dateToInteger(date); - switch (filters.workOrderMilestoneDateFilter) { - case 'upcomingMissed': { - sqlWhereClause += - ' and (m.workOrderMilestoneCompletionDate is null or m.workOrderMilestoneDate >= ?)'; - sqlParameters.push(currentDateNumber); - break; - } - case 'recent': { - sqlWhereClause += - ' and m.workOrderMilestoneDate >= ? and m.workOrderMilestoneDate <= ?'; - sqlParameters.push(recentBeforeDateNumber, recentAfterDateNumber); - break; - } - case 'blank': { - sqlWhereClause += ' and m.workOrderMilestoneDate = 0'; - break; - } - case 'notBlank': { - sqlWhereClause += ' and m.workOrderMilestoneDate > 0'; - break; - } - } - if (filters.workOrderMilestoneDateString !== undefined && - filters.workOrderMilestoneDateString !== '') { - sqlWhereClause += ' and m.workOrderMilestoneDate = ?'; - sqlParameters.push(dateStringToInteger(filters.workOrderMilestoneDateString)); - } - if (filters.workOrderTypeIds !== undefined && - filters.workOrderTypeIds !== '' && - commaSeparatedNumbersRegex.test(filters.workOrderTypeIds)) { - sqlWhereClause += ` and w.workOrderTypeId in (${filters.workOrderTypeIds})`; - } - if (filters.workOrderMilestoneTypeIds !== undefined && - filters.workOrderMilestoneTypeIds !== '' && - commaSeparatedNumbersRegex.test(filters.workOrderMilestoneTypeIds)) { - sqlWhereClause += ` and m.workOrderMilestoneTypeId in (${filters.workOrderMilestoneTypeIds})`; - } - return { - sqlWhereClause, - sqlParameters - }; -} export default async function getWorkOrderMilestones(filters, options, connectedDatabase) { const database = connectedDatabase ?? (await acquireConnection()); database.function('userFn_dateIntegerToString', dateIntegerToString); database.function('userFn_timeIntegerToString', timeIntegerToString); database.function('userFn_timeIntegerToPeriodString', timeIntegerToPeriodString); // Filters - const { sqlWhereClause, sqlParameters } = buildWhereClause(filters); + const { sqlParameters, sqlWhereClause } = buildWhereClause(filters); // Order By let orderByClause = ''; switch (options.orderBy) { @@ -135,12 +77,11 @@ export default async function getWorkOrderMilestones(filters, options, connected }, { limit: -1, offset: 0, - includeInterments: true, includeFees: false, + includeInterments: true, includeTransactions: false }, database); - workOrderMilestone.workOrderContracts = - contracts.contracts; + workOrderMilestone.workOrderContracts = contracts.contracts; } } if (connectedDatabase === undefined) { @@ -148,3 +89,61 @@ export default async function getWorkOrderMilestones(filters, options, connected } return workOrderMilestones; } +function buildWhereClause(filters) { + let sqlWhereClause = ' where m.recordDelete_timeMillis is null and w.recordDelete_timeMillis is null'; + const sqlParameters = []; + if ((filters.workOrderId ?? '') !== '') { + sqlWhereClause += ' and m.workOrderId = ?'; + sqlParameters.push(filters.workOrderId); + } + const date = new Date(); + const currentDateNumber = dateToInteger(date); + date.setDate(date.getDate() - + getConfigProperty('settings.workOrders.workOrderMilestoneDateRecentBeforeDays')); + const recentBeforeDateNumber = dateToInteger(date); + date.setDate(date.getDate() + + getConfigProperty('settings.workOrders.workOrderMilestoneDateRecentBeforeDays') + + getConfigProperty('settings.workOrders.workOrderMilestoneDateRecentAfterDays')); + const recentAfterDateNumber = dateToInteger(date); + switch (filters.workOrderMilestoneDateFilter) { + case 'blank': { + sqlWhereClause += ' and m.workOrderMilestoneDate = 0'; + break; + } + case 'notBlank': { + sqlWhereClause += ' and m.workOrderMilestoneDate > 0'; + break; + } + case 'recent': { + sqlWhereClause += + ' and m.workOrderMilestoneDate >= ? and m.workOrderMilestoneDate <= ?'; + sqlParameters.push(recentBeforeDateNumber, recentAfterDateNumber); + break; + } + case 'upcomingMissed': { + sqlWhereClause += + ' and (m.workOrderMilestoneCompletionDate is null or m.workOrderMilestoneDate >= ?)'; + sqlParameters.push(currentDateNumber); + break; + } + } + if (filters.workOrderMilestoneDateString !== undefined && + filters.workOrderMilestoneDateString !== '') { + sqlWhereClause += ' and m.workOrderMilestoneDate = ?'; + sqlParameters.push(dateStringToInteger(filters.workOrderMilestoneDateString)); + } + if (filters.workOrderTypeIds !== undefined && + filters.workOrderTypeIds !== '' && + commaSeparatedNumbersRegex.test(filters.workOrderTypeIds)) { + sqlWhereClause += ` and w.workOrderTypeId in (${filters.workOrderTypeIds})`; + } + if (filters.workOrderMilestoneTypeIds !== undefined && + filters.workOrderMilestoneTypeIds !== '' && + commaSeparatedNumbersRegex.test(filters.workOrderMilestoneTypeIds)) { + sqlWhereClause += ` and m.workOrderMilestoneTypeId in (${filters.workOrderMilestoneTypeIds})`; + } + return { + sqlParameters, + sqlWhereClause + }; +} diff --git a/database/getWorkOrderMilestones.ts b/database/getWorkOrderMilestones.ts index 448df80b..277cb591 100644 --- a/database/getWorkOrderMilestones.ts +++ b/database/getWorkOrderMilestones.ts @@ -1,3 +1,5 @@ +import type { PoolConnection } from 'better-sqlite-pool' + import { type DateString, dateIntegerToString, @@ -6,26 +8,26 @@ import { timeIntegerToPeriodString, timeIntegerToString } from '@cityssm/utils-datetime' -import type { PoolConnection } from 'better-sqlite-pool' import { getConfigProperty } from '../helpers/config.helpers.js' import type { WorkOrderMilestone } from '../types/recordTypes.js' -import getContracts from './getContracts.js' import getBurialSites from './getBurialSites.js' +import getContracts from './getContracts.js' import { acquireConnection } from './pool.js' export interface WorkOrderMilestoneFilters { workOrderId?: number | string - workOrderMilestoneDateFilter?: - | 'upcomingMissed' - | 'recent' - | 'date' - | 'blank' - | 'notBlank' - workOrderMilestoneDateString?: '' | DateString - workOrderTypeIds?: string workOrderMilestoneTypeIds?: string + workOrderTypeIds?: string + + workOrderMilestoneDateFilter?: + | 'blank' + | 'date' + | 'notBlank' + | 'recent' + | 'upcomingMissed' + workOrderMilestoneDateString?: '' | DateString } interface WorkOrderMilestoneOptions { @@ -36,101 +38,6 @@ interface WorkOrderMilestoneOptions { // eslint-disable-next-line security/detect-unsafe-regex const commaSeparatedNumbersRegex = /^\d+(?:,\d+)*$/ -function buildWhereClause(filters: WorkOrderMilestoneFilters): { - sqlWhereClause: string - sqlParameters: unknown[] -} { - let sqlWhereClause = - ' where m.recordDelete_timeMillis is null and w.recordDelete_timeMillis is null' - const sqlParameters: unknown[] = [] - - if ((filters.workOrderId ?? '') !== '') { - sqlWhereClause += ' and m.workOrderId = ?' - sqlParameters.push(filters.workOrderId) - } - - const date = new Date() - const currentDateNumber = dateToInteger(date) - - date.setDate( - date.getDate() - - getConfigProperty( - 'settings.workOrders.workOrderMilestoneDateRecentBeforeDays' - ) - ) - - const recentBeforeDateNumber = dateToInteger(date) - - date.setDate( - date.getDate() + - getConfigProperty( - 'settings.workOrders.workOrderMilestoneDateRecentBeforeDays' - ) + - getConfigProperty( - 'settings.workOrders.workOrderMilestoneDateRecentAfterDays' - ) - ) - - const recentAfterDateNumber = dateToInteger(date) - - switch (filters.workOrderMilestoneDateFilter) { - case 'upcomingMissed': { - sqlWhereClause += - ' and (m.workOrderMilestoneCompletionDate is null or m.workOrderMilestoneDate >= ?)' - sqlParameters.push(currentDateNumber) - break - } - - case 'recent': { - sqlWhereClause += - ' and m.workOrderMilestoneDate >= ? and m.workOrderMilestoneDate <= ?' - sqlParameters.push(recentBeforeDateNumber, recentAfterDateNumber) - break - } - - case 'blank': { - sqlWhereClause += ' and m.workOrderMilestoneDate = 0' - break - } - - case 'notBlank': { - sqlWhereClause += ' and m.workOrderMilestoneDate > 0' - break - } - } - - if ( - filters.workOrderMilestoneDateString !== undefined && - filters.workOrderMilestoneDateString !== '' - ) { - sqlWhereClause += ' and m.workOrderMilestoneDate = ?' - sqlParameters.push( - dateStringToInteger(filters.workOrderMilestoneDateString) - ) - } - - if ( - filters.workOrderTypeIds !== undefined && - filters.workOrderTypeIds !== '' && - commaSeparatedNumbersRegex.test(filters.workOrderTypeIds) - ) { - sqlWhereClause += ` and w.workOrderTypeId in (${filters.workOrderTypeIds})` - } - - if ( - filters.workOrderMilestoneTypeIds !== undefined && - filters.workOrderMilestoneTypeIds !== '' && - commaSeparatedNumbersRegex.test(filters.workOrderMilestoneTypeIds) - ) { - sqlWhereClause += ` and m.workOrderMilestoneTypeId in (${filters.workOrderMilestoneTypeIds})` - } - - return { - sqlWhereClause, - sqlParameters - } -} - export default async function getWorkOrderMilestones( filters: WorkOrderMilestoneFilters, options: WorkOrderMilestoneOptions, @@ -146,7 +53,7 @@ export default async function getWorkOrderMilestones( ) // Filters - const { sqlWhereClause, sqlParameters } = buildWhereClause(filters) + const { sqlParameters, sqlWhereClause } = buildWhereClause(filters) // Order By let orderByClause = '' @@ -214,6 +121,7 @@ export default async function getWorkOrderMilestones( { limit: -1, offset: 0, + includeContractCount: false }, database @@ -228,15 +136,15 @@ export default async function getWorkOrderMilestones( { limit: -1, offset: 0, - includeInterments: true, + includeFees: false, + includeInterments: true, includeTransactions: false }, database ) - workOrderMilestone.workOrderContracts = - contracts.contracts + workOrderMilestone.workOrderContracts = contracts.contracts } } @@ -246,3 +154,98 @@ export default async function getWorkOrderMilestones( return workOrderMilestones } + +function buildWhereClause(filters: WorkOrderMilestoneFilters): { + sqlParameters: unknown[] + sqlWhereClause: string +} { + let sqlWhereClause = + ' where m.recordDelete_timeMillis is null and w.recordDelete_timeMillis is null' + const sqlParameters: unknown[] = [] + + if ((filters.workOrderId ?? '') !== '') { + sqlWhereClause += ' and m.workOrderId = ?' + sqlParameters.push(filters.workOrderId) + } + + const date = new Date() + const currentDateNumber = dateToInteger(date) + + date.setDate( + date.getDate() - + getConfigProperty( + 'settings.workOrders.workOrderMilestoneDateRecentBeforeDays' + ) + ) + + const recentBeforeDateNumber = dateToInteger(date) + + date.setDate( + date.getDate() + + getConfigProperty( + 'settings.workOrders.workOrderMilestoneDateRecentBeforeDays' + ) + + getConfigProperty( + 'settings.workOrders.workOrderMilestoneDateRecentAfterDays' + ) + ) + + const recentAfterDateNumber = dateToInteger(date) + + switch (filters.workOrderMilestoneDateFilter) { + case 'blank': { + sqlWhereClause += ' and m.workOrderMilestoneDate = 0' + break + } + + case 'notBlank': { + sqlWhereClause += ' and m.workOrderMilestoneDate > 0' + break + } + + case 'recent': { + sqlWhereClause += + ' and m.workOrderMilestoneDate >= ? and m.workOrderMilestoneDate <= ?' + sqlParameters.push(recentBeforeDateNumber, recentAfterDateNumber) + break + } + + case 'upcomingMissed': { + sqlWhereClause += + ' and (m.workOrderMilestoneCompletionDate is null or m.workOrderMilestoneDate >= ?)' + sqlParameters.push(currentDateNumber) + break + } + } + + if ( + filters.workOrderMilestoneDateString !== undefined && + filters.workOrderMilestoneDateString !== '' + ) { + sqlWhereClause += ' and m.workOrderMilestoneDate = ?' + sqlParameters.push( + dateStringToInteger(filters.workOrderMilestoneDateString) + ) + } + + if ( + filters.workOrderTypeIds !== undefined && + filters.workOrderTypeIds !== '' && + commaSeparatedNumbersRegex.test(filters.workOrderTypeIds) + ) { + sqlWhereClause += ` and w.workOrderTypeId in (${filters.workOrderTypeIds})` + } + + if ( + filters.workOrderMilestoneTypeIds !== undefined && + filters.workOrderMilestoneTypeIds !== '' && + commaSeparatedNumbersRegex.test(filters.workOrderMilestoneTypeIds) + ) { + sqlWhereClause += ` and m.workOrderMilestoneTypeId in (${filters.workOrderMilestoneTypeIds})` + } + + return { + sqlParameters, + sqlWhereClause + } +} diff --git a/database/getWorkOrders.d.ts b/database/getWorkOrders.d.ts index f7e832bb..923a04b2 100644 --- a/database/getWorkOrders.d.ts +++ b/database/getWorkOrders.d.ts @@ -2,11 +2,11 @@ import type { PoolConnection } from 'better-sqlite-pool'; import type { WorkOrder } from '../types/recordTypes.js'; export interface GetWorkOrdersFilters { workOrderTypeId?: number | string; - workOrderOpenStatus?: '' | 'open' | 'closed'; workOrderOpenDateString?: string; - deceasedName?: string; + workOrderOpenStatus?: '' | 'closed' | 'open'; burialSiteName?: string; contractId?: number | string; + deceasedName?: string; } interface GetWorkOrdersOptions { limit: number; diff --git a/database/getWorkOrders.js b/database/getWorkOrders.js index df3f780b..d213fe95 100644 --- a/database/getWorkOrders.js +++ b/database/getWorkOrders.js @@ -5,109 +5,14 @@ import getContracts from './getContracts.js'; import getWorkOrderComments from './getWorkOrderComments.js'; import getWorkOrderMilestones from './getWorkOrderMilestones.js'; import { acquireConnection } from './pool.js'; -function buildWhereClause(filters) { - let sqlWhereClause = ' where w.recordDelete_timeMillis is null'; - const sqlParameters = []; - if ((filters.workOrderTypeId ?? '') !== '') { - sqlWhereClause += ' and w.workOrderTypeId = ?'; - sqlParameters.push(filters.workOrderTypeId); - } - if ((filters.workOrderOpenStatus ?? '') !== '') { - if (filters.workOrderOpenStatus === 'open') { - sqlWhereClause += ' and w.workOrderCloseDate is null'; - } - else if (filters.workOrderOpenStatus === 'closed') { - sqlWhereClause += ' and w.workOrderCloseDate is not null'; - } - } - if ((filters.workOrderOpenDateString ?? '') !== '') { - sqlWhereClause += ' and w.workOrderOpenDate = ?'; - sqlParameters.push(dateStringToInteger(filters.workOrderOpenDateString)); - } - const deceasedNameFilters = getDeceasedNameWhereClause(filters.deceasedName, 'o'); - if (deceasedNameFilters.sqlParameters.length > 0) { - sqlWhereClause += - ` and w.workOrderId in ( - select workOrderId from WorkOrderContracts o - where recordDelete_timeMillis is null - and o.contractId in ( - select contractId from ContractInterments o where recordDelete_timeMillis is null - ${deceasedNameFilters.sqlWhereClause} - ))`; - sqlParameters.push(...deceasedNameFilters.sqlParameters); - } - const burialSiteNameFilters = getBurialSiteNameWhereClause(filters.burialSiteName, '', 'l'); - if (burialSiteNameFilters.sqlParameters.length > 0) { - sqlWhereClause += - ` and w.workOrderId in ( - select workOrderId from WorkOrderBurialSites - where recordDelete_timeMillis is null - and burialSiteId in ( - select burialSiteId from BurialSites l - where recordDelete_timeMillis is null - ${burialSiteNameFilters.sqlWhereClause} - ))`; - sqlParameters.push(...burialSiteNameFilters.sqlParameters); - } - if ((filters.contractId ?? '') !== '') { - sqlWhereClause += - ' and w.workOrderId in (select workOrderId from WorkOrderContracts where recordDelete_timeMillis is null and contractId = ?)'; - sqlParameters.push(filters.contractId); - } - return { - sqlWhereClause, - sqlParameters - }; -} -async function addInclusions(workOrder, options, database) { - if (options.includeComments ?? false) { - workOrder.workOrderComments = await getWorkOrderComments(workOrder.workOrderId, database); - } - if (options.includeBurialSites ?? false) { - if (workOrder.workOrderBurialSiteCount === 0) { - workOrder.workOrderBurialSites = []; - } - else { - const workOrderBurialSitesResults = await getBurialSites({ - workOrderId: workOrder.workOrderId - }, { - limit: -1, - offset: 0, - includeContractCount: false - }, database); - workOrder.workOrderBurialSites = workOrderBurialSitesResults.burialSites; - } - const contracts = await getContracts({ - workOrderId: workOrder.workOrderId - }, { - limit: -1, - offset: 0, - includeInterments: true, - includeFees: false, - includeTransactions: false - }, database); - workOrder.workOrderContracts = contracts.contracts; - } - if (options.includeMilestones ?? false) { - workOrder.workOrderMilestones = - workOrder.workOrderMilestoneCount === 0 - ? [] - : await getWorkOrderMilestones({ - workOrderId: workOrder.workOrderId - }, { - orderBy: 'date' - }, database); - } - return workOrder; -} export async function getWorkOrders(filters, options, connectedDatabase) { const database = connectedDatabase ?? (await acquireConnection()); database.function('userFn_dateIntegerToString', dateIntegerToString); - const { sqlWhereClause, sqlParameters } = buildWhereClause(filters); + const { sqlParameters, sqlWhereClause } = buildWhereClause(filters); const count = database .prepare(`select count(*) as recordCount - from WorkOrders w - ${sqlWhereClause}`) + from WorkOrders w + ${sqlWhereClause}`) .get(sqlParameters).recordCount; let workOrders = []; if (count > 0) { @@ -157,4 +62,97 @@ export async function getWorkOrders(filters, options, connectedDatabase) { workOrders }; } +async function addInclusions(workOrder, options, database) { + if (options.includeComments ?? false) { + workOrder.workOrderComments = await getWorkOrderComments(workOrder.workOrderId, database); + } + if (options.includeBurialSites ?? false) { + if (workOrder.workOrderBurialSiteCount === 0) { + workOrder.workOrderBurialSites = []; + } + else { + const workOrderBurialSitesResults = await getBurialSites({ + workOrderId: workOrder.workOrderId + }, { + limit: -1, + offset: 0, + includeContractCount: false + }, database); + workOrder.workOrderBurialSites = workOrderBurialSitesResults.burialSites; + } + const contracts = await getContracts({ + workOrderId: workOrder.workOrderId + }, { + limit: -1, + offset: 0, + includeFees: false, + includeInterments: true, + includeTransactions: false + }, database); + workOrder.workOrderContracts = contracts.contracts; + } + if (options.includeMilestones ?? false) { + workOrder.workOrderMilestones = + workOrder.workOrderMilestoneCount === 0 + ? [] + : await getWorkOrderMilestones({ + workOrderId: workOrder.workOrderId + }, { + orderBy: 'date' + }, database); + } + return workOrder; +} +function buildWhereClause(filters) { + let sqlWhereClause = ' where w.recordDelete_timeMillis is null'; + const sqlParameters = []; + if ((filters.workOrderTypeId ?? '') !== '') { + sqlWhereClause += ' and w.workOrderTypeId = ?'; + sqlParameters.push(filters.workOrderTypeId); + } + if ((filters.workOrderOpenStatus ?? '') !== '') { + if (filters.workOrderOpenStatus === 'open') { + sqlWhereClause += ' and w.workOrderCloseDate is null'; + } + else if (filters.workOrderOpenStatus === 'closed') { + sqlWhereClause += ' and w.workOrderCloseDate is not null'; + } + } + if ((filters.workOrderOpenDateString ?? '') !== '') { + sqlWhereClause += ' and w.workOrderOpenDate = ?'; + sqlParameters.push(dateStringToInteger(filters.workOrderOpenDateString)); + } + const deceasedNameFilters = getDeceasedNameWhereClause(filters.deceasedName, 'o'); + if (deceasedNameFilters.sqlParameters.length > 0) { + sqlWhereClause += ` and w.workOrderId in ( + select workOrderId from WorkOrderContracts o + where recordDelete_timeMillis is null + and o.contractId in ( + select contractId from ContractInterments o where recordDelete_timeMillis is null + ${deceasedNameFilters.sqlWhereClause} + ))`; + sqlParameters.push(...deceasedNameFilters.sqlParameters); + } + const burialSiteNameFilters = getBurialSiteNameWhereClause(filters.burialSiteName, '', 'l'); + if (burialSiteNameFilters.sqlParameters.length > 0) { + sqlWhereClause += ` and w.workOrderId in ( + select workOrderId from WorkOrderBurialSites + where recordDelete_timeMillis is null + and burialSiteId in ( + select burialSiteId from BurialSites l + where recordDelete_timeMillis is null + ${burialSiteNameFilters.sqlWhereClause} + ))`; + sqlParameters.push(...burialSiteNameFilters.sqlParameters); + } + if ((filters.contractId ?? '') !== '') { + sqlWhereClause += + ' and w.workOrderId in (select workOrderId from WorkOrderContracts where recordDelete_timeMillis is null and contractId = ?)'; + sqlParameters.push(filters.contractId); + } + return { + sqlParameters, + sqlWhereClause + }; +} export default getWorkOrders; diff --git a/database/getWorkOrders.ts b/database/getWorkOrders.ts index b21255d2..bcc64680 100644 --- a/database/getWorkOrders.ts +++ b/database/getWorkOrders.ts @@ -1,9 +1,10 @@ +import type { PoolConnection } from 'better-sqlite-pool' + import { type DateString, dateIntegerToString, dateStringToInteger } from '@cityssm/utils-datetime' -import type { PoolConnection } from 'better-sqlite-pool' import { getBurialSiteNameWhereClause, @@ -19,156 +20,24 @@ import { acquireConnection } from './pool.js' export interface GetWorkOrdersFilters { workOrderTypeId?: number | string - workOrderOpenStatus?: '' | 'open' | 'closed' + workOrderOpenDateString?: string - deceasedName?: string + workOrderOpenStatus?: '' | 'closed' | 'open' + burialSiteName?: string contractId?: number | string + deceasedName?: string } interface GetWorkOrdersOptions { limit: number offset: number + includeBurialSites?: boolean includeComments?: boolean includeMilestones?: boolean } -function buildWhereClause(filters: GetWorkOrdersFilters): { - sqlWhereClause: string - sqlParameters: unknown[] -} { - let sqlWhereClause = ' where w.recordDelete_timeMillis is null' - const sqlParameters: unknown[] = [] - - if ((filters.workOrderTypeId ?? '') !== '') { - sqlWhereClause += ' and w.workOrderTypeId = ?' - sqlParameters.push(filters.workOrderTypeId) - } - - if ((filters.workOrderOpenStatus ?? '') !== '') { - if (filters.workOrderOpenStatus === 'open') { - sqlWhereClause += ' and w.workOrderCloseDate is null' - } else if (filters.workOrderOpenStatus === 'closed') { - sqlWhereClause += ' and w.workOrderCloseDate is not null' - } - } - - if ((filters.workOrderOpenDateString ?? '') !== '') { - sqlWhereClause += ' and w.workOrderOpenDate = ?' - sqlParameters.push( - dateStringToInteger(filters.workOrderOpenDateString as DateString) - ) - } - - const deceasedNameFilters = getDeceasedNameWhereClause( - filters.deceasedName, - 'o' - ) - if (deceasedNameFilters.sqlParameters.length > 0) { - sqlWhereClause += - ` and w.workOrderId in ( - select workOrderId from WorkOrderContracts o - where recordDelete_timeMillis is null - and o.contractId in ( - select contractId from ContractInterments o where recordDelete_timeMillis is null - ${deceasedNameFilters.sqlWhereClause} - ))` - sqlParameters.push(...deceasedNameFilters.sqlParameters) - } - - const burialSiteNameFilters = getBurialSiteNameWhereClause(filters.burialSiteName, '', 'l') - if (burialSiteNameFilters.sqlParameters.length > 0) { - sqlWhereClause += - ` and w.workOrderId in ( - select workOrderId from WorkOrderBurialSites - where recordDelete_timeMillis is null - and burialSiteId in ( - select burialSiteId from BurialSites l - where recordDelete_timeMillis is null - ${burialSiteNameFilters.sqlWhereClause} - ))` - sqlParameters.push(...burialSiteNameFilters.sqlParameters) - } - - if ((filters.contractId ?? '') !== '') { - sqlWhereClause += - ' and w.workOrderId in (select workOrderId from WorkOrderContracts where recordDelete_timeMillis is null and contractId = ?)' - sqlParameters.push(filters.contractId) - } - - return { - sqlWhereClause, - sqlParameters - } -} - -async function addInclusions( - workOrder: WorkOrder, - options: GetWorkOrdersOptions, - database: PoolConnection -): Promise { - if (options.includeComments ?? false) { - workOrder.workOrderComments = await getWorkOrderComments( - workOrder.workOrderId, - database - ) - } - - if (options.includeBurialSites ?? false) { - if (workOrder.workOrderBurialSiteCount === 0) { - workOrder.workOrderBurialSites = [] - } else { - const workOrderBurialSitesResults = await getBurialSites( - { - workOrderId: workOrder.workOrderId - }, - { - limit: -1, - offset: 0, - includeContractCount: false - }, - database - ) - - workOrder.workOrderBurialSites = workOrderBurialSitesResults.burialSites - } - - const contracts = await getContracts( - { - workOrderId: workOrder.workOrderId - }, - { - limit: -1, - offset: 0, - includeInterments: true, - includeFees: false, - includeTransactions: false - }, - database - ) - - workOrder.workOrderContracts = contracts.contracts - } - - if (options.includeMilestones ?? false) { - workOrder.workOrderMilestones = - workOrder.workOrderMilestoneCount === 0 - ? [] - : await getWorkOrderMilestones( - { - workOrderId: workOrder.workOrderId - }, - { - orderBy: 'date' - }, - database - ) - } - - return workOrder -} - export async function getWorkOrders( filters: GetWorkOrdersFilters, options: GetWorkOrdersOptions, @@ -178,14 +47,14 @@ export async function getWorkOrders( database.function('userFn_dateIntegerToString', dateIntegerToString) - const { sqlWhereClause, sqlParameters } = buildWhereClause(filters) + const { sqlParameters, sqlWhereClause } = buildWhereClause(filters) const count: number = ( database .prepare( `select count(*) as recordCount - from WorkOrders w - ${sqlWhereClause}` + from WorkOrders w + ${sqlWhereClause}` ) .get(sqlParameters) as { recordCount: number } ).recordCount @@ -249,4 +118,143 @@ export async function getWorkOrders( } } +async function addInclusions( + workOrder: WorkOrder, + options: GetWorkOrdersOptions, + database: PoolConnection +): Promise { + if (options.includeComments ?? false) { + workOrder.workOrderComments = await getWorkOrderComments( + workOrder.workOrderId, + database + ) + } + + if (options.includeBurialSites ?? false) { + if (workOrder.workOrderBurialSiteCount === 0) { + workOrder.workOrderBurialSites = [] + } else { + const workOrderBurialSitesResults = await getBurialSites( + { + workOrderId: workOrder.workOrderId + }, + { + limit: -1, + offset: 0, + + includeContractCount: false + }, + database + ) + + workOrder.workOrderBurialSites = workOrderBurialSitesResults.burialSites + } + + const contracts = await getContracts( + { + workOrderId: workOrder.workOrderId + }, + { + limit: -1, + offset: 0, + + includeFees: false, + includeInterments: true, + includeTransactions: false + }, + database + ) + + workOrder.workOrderContracts = contracts.contracts + } + + if (options.includeMilestones ?? false) { + workOrder.workOrderMilestones = + workOrder.workOrderMilestoneCount === 0 + ? [] + : await getWorkOrderMilestones( + { + workOrderId: workOrder.workOrderId + }, + { + orderBy: 'date' + }, + database + ) + } + + return workOrder +} + +function buildWhereClause(filters: GetWorkOrdersFilters): { + sqlParameters: unknown[] + sqlWhereClause: string +} { + let sqlWhereClause = ' where w.recordDelete_timeMillis is null' + const sqlParameters: unknown[] = [] + + if ((filters.workOrderTypeId ?? '') !== '') { + sqlWhereClause += ' and w.workOrderTypeId = ?' + sqlParameters.push(filters.workOrderTypeId) + } + + if ((filters.workOrderOpenStatus ?? '') !== '') { + if (filters.workOrderOpenStatus === 'open') { + sqlWhereClause += ' and w.workOrderCloseDate is null' + } else if (filters.workOrderOpenStatus === 'closed') { + sqlWhereClause += ' and w.workOrderCloseDate is not null' + } + } + + if ((filters.workOrderOpenDateString ?? '') !== '') { + sqlWhereClause += ' and w.workOrderOpenDate = ?' + sqlParameters.push( + dateStringToInteger(filters.workOrderOpenDateString as DateString) + ) + } + + const deceasedNameFilters = getDeceasedNameWhereClause( + filters.deceasedName, + 'o' + ) + if (deceasedNameFilters.sqlParameters.length > 0) { + sqlWhereClause += ` and w.workOrderId in ( + select workOrderId from WorkOrderContracts o + where recordDelete_timeMillis is null + and o.contractId in ( + select contractId from ContractInterments o where recordDelete_timeMillis is null + ${deceasedNameFilters.sqlWhereClause} + ))` + sqlParameters.push(...deceasedNameFilters.sqlParameters) + } + + const burialSiteNameFilters = getBurialSiteNameWhereClause( + filters.burialSiteName, + '', + 'l' + ) + if (burialSiteNameFilters.sqlParameters.length > 0) { + sqlWhereClause += ` and w.workOrderId in ( + select workOrderId from WorkOrderBurialSites + where recordDelete_timeMillis is null + and burialSiteId in ( + select burialSiteId from BurialSites l + where recordDelete_timeMillis is null + ${burialSiteNameFilters.sqlWhereClause} + ))` + sqlParameters.push(...burialSiteNameFilters.sqlParameters) + } + + if ((filters.contractId ?? '') !== '') { + sqlWhereClause += + ' and w.workOrderId in (select workOrderId from WorkOrderContracts where recordDelete_timeMillis is null and contractId = ?)' + sqlParameters.push(filters.contractId) + } + + return { + sqlParameters, + sqlWhereClause + } +} + export default getWorkOrders diff --git a/database/initializeDatabase.js b/database/initializeDatabase.js index 13a591a2..6c9e6b54 100644 --- a/database/initializeDatabase.js +++ b/database/initializeDatabase.js @@ -377,9 +377,9 @@ const createStatements = [ const initializingUser = { userName: 'databaseInit', userProperties: { + apiKey: '', canUpdate: true, - isAdmin: true, - apiKey: '' + isAdmin: true } }; export async function initializeDatabase() { @@ -449,9 +449,11 @@ async function initializeData() { intermentContainerTypeKey: 'WS', orderNumber: 5 }, initializingUser); - await addIntermentContainerType({ intermentContainerType: 'Steel Vault', + await addIntermentContainerType({ + intermentContainerType: 'Steel Vault', intermentContainerTypeKey: 'SV', - orderNumber: 6 }, initializingUser); + orderNumber: 6 + }, initializingUser); await addIntermentContainerType({ intermentContainerType: 'Urn', intermentContainerTypeKey: 'U', diff --git a/database/initializeDatabase.ts b/database/initializeDatabase.ts index 1aa71a5a..c55de282 100644 --- a/database/initializeDatabase.ts +++ b/database/initializeDatabase.ts @@ -434,9 +434,9 @@ const createStatements = [ const initializingUser: User = { userName: 'databaseInit', userProperties: { + apiKey: '', canUpdate: true, - isAdmin: true, - apiKey: '' + isAdmin: true } } @@ -555,9 +555,11 @@ async function initializeData(): Promise { ) await addIntermentContainerType( - { intermentContainerType: 'Steel Vault', + { + intermentContainerType: 'Steel Vault', intermentContainerTypeKey: 'SV', - orderNumber: 6 }, + orderNumber: 6 + }, initializingUser ) @@ -573,23 +575,32 @@ async function initializeData(): Promise { // Committal Types - await addCommittalType({ - committalType: 'Graveside', - committalTypeKey: 'GS', - orderNumber: 1 - }, initializingUser) + await addCommittalType( + { + committalType: 'Graveside', + committalTypeKey: 'GS', + orderNumber: 1 + }, + initializingUser + ) - await addCommittalType({ - committalType: 'Chapel', - committalTypeKey: 'CS', - orderNumber: 2 - }, initializingUser) + await addCommittalType( + { + committalType: 'Chapel', + committalTypeKey: 'CS', + orderNumber: 2 + }, + initializingUser + ) - await addCommittalType({ - committalType: 'Church', - committalTypeKey: 'CH', - orderNumber: 3 - }, initializingUser) + await addCommittalType( + { + committalType: 'Church', + committalTypeKey: 'CH', + orderNumber: 3 + }, + initializingUser + ) /* * Fee Categories diff --git a/database/moveBurialSiteTypeField.js b/database/moveBurialSiteTypeField.js index 2c048831..a8060079 100644 --- a/database/moveBurialSiteTypeField.js +++ b/database/moveBurialSiteTypeField.js @@ -1,11 +1,6 @@ import { clearCacheByTableName } from '../helpers/functions.cache.js'; import { acquireConnection } from './pool.js'; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'; -function getCurrentField(burialSiteTypeFieldId, connectedDatabase) { - return connectedDatabase - .prepare('select burialSiteTypeId, orderNumber from BurialSiteTypeFields where burialSiteTypeFieldId = ?') - .get(burialSiteTypeFieldId); -} export async function moveBurialSiteTypeFieldDown(burialSiteTypeFieldId) { const database = await acquireConnection(); const currentField = getCurrentField(burialSiteTypeFieldId, database); @@ -79,3 +74,8 @@ export async function moveBurialSiteTypeFieldUpToTop(burialSiteTypeFieldId) { clearCacheByTableName('BurialSiteTypeFields'); return true; } +function getCurrentField(burialSiteTypeFieldId, connectedDatabase) { + return connectedDatabase + .prepare('select burialSiteTypeId, orderNumber from BurialSiteTypeFields where burialSiteTypeFieldId = ?') + .get(burialSiteTypeFieldId); +} diff --git a/database/moveBurialSiteTypeField.ts b/database/moveBurialSiteTypeField.ts index a2bf93e9..c984c3d8 100644 --- a/database/moveBurialSiteTypeField.ts +++ b/database/moveBurialSiteTypeField.ts @@ -5,20 +5,6 @@ import { clearCacheByTableName } from '../helpers/functions.cache.js' import { acquireConnection } from './pool.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' -function getCurrentField( - burialSiteTypeFieldId: number | string, - connectedDatabase: PoolConnection -): { burialSiteTypeId?: number; orderNumber: number } { - return connectedDatabase - .prepare( - 'select burialSiteTypeId, orderNumber from BurialSiteTypeFields where burialSiteTypeFieldId = ?' - ) - .get(burialSiteTypeFieldId) as { - burialSiteTypeId?: number - orderNumber: number - } -} - export async function moveBurialSiteTypeFieldDown( burialSiteTypeFieldId: number | string ): Promise { @@ -161,3 +147,17 @@ export async function moveBurialSiteTypeFieldUpToTop( return true } + +function getCurrentField( + burialSiteTypeFieldId: number | string, + connectedDatabase: PoolConnection +): { burialSiteTypeId?: number; orderNumber: number } { + return connectedDatabase + .prepare( + 'select burialSiteTypeId, orderNumber from BurialSiteTypeFields where burialSiteTypeFieldId = ?' + ) + .get(burialSiteTypeFieldId) as { + burialSiteTypeId?: number + orderNumber: number + } +} diff --git a/database/moveContractTypeField.js b/database/moveContractTypeField.js index 743e89f2..04f9d0d8 100644 --- a/database/moveContractTypeField.js +++ b/database/moveContractTypeField.js @@ -1,13 +1,6 @@ import { clearCacheByTableName } from '../helpers/functions.cache.js'; import { acquireConnection } from './pool.js'; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'; -function getCurrentField(contractTypeFieldId, connectedDatabase) { - return connectedDatabase - .prepare(`select contractTypeId, orderNumber - from ContractTypeFields - where contractTypeFieldId = ?`) - .get(contractTypeFieldId); -} export async function moveContractTypeFieldDown(contractTypeFieldId) { const database = await acquireConnection(); const currentField = getCurrentField(contractTypeFieldId, database); @@ -100,3 +93,10 @@ export async function moveContractTypeFieldUpToTop(contractTypeFieldId) { clearCacheByTableName('ContractTypeFields'); return true; } +function getCurrentField(contractTypeFieldId, connectedDatabase) { + return connectedDatabase + .prepare(`select contractTypeId, orderNumber + from ContractTypeFields + where contractTypeFieldId = ?`) + .get(contractTypeFieldId); +} diff --git a/database/moveContractTypeField.ts b/database/moveContractTypeField.ts index 4ec00e69..60650caa 100644 --- a/database/moveContractTypeField.ts +++ b/database/moveContractTypeField.ts @@ -5,22 +5,6 @@ import { clearCacheByTableName } from '../helpers/functions.cache.js' import { acquireConnection } from './pool.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' -function getCurrentField( - contractTypeFieldId: number | string, - connectedDatabase: PoolConnection -): { contractTypeId?: number; orderNumber: number } { - return connectedDatabase - .prepare( - `select contractTypeId, orderNumber - from ContractTypeFields - where contractTypeFieldId = ?` - ) - .get(contractTypeFieldId) as { - contractTypeId?: number - orderNumber: number - } -} - export async function moveContractTypeFieldDown( contractTypeFieldId: number | string ): Promise { @@ -198,3 +182,19 @@ export async function moveContractTypeFieldUpToTop( return true } + +function getCurrentField( + contractTypeFieldId: number | string, + connectedDatabase: PoolConnection +): { contractTypeId?: number; orderNumber: number } { + return connectedDatabase + .prepare( + `select contractTypeId, orderNumber + from ContractTypeFields + where contractTypeFieldId = ?` + ) + .get(contractTypeFieldId) as { + contractTypeId?: number + orderNumber: number + } +} diff --git a/database/pool.ts b/database/pool.ts index 9d5c38b7..a1ec8455 100644 --- a/database/pool.ts +++ b/database/pool.ts @@ -1,4 +1,4 @@ -import { Pool, type PoolConnection } from 'better-sqlite-pool' +import { type PoolConnection, Pool } from 'better-sqlite-pool' import Debug from 'debug' import exitHook from 'exit-hook' diff --git a/database/updateBurialSite.d.ts b/database/updateBurialSite.d.ts index 5bf50bf6..e487703b 100644 --- a/database/updateBurialSite.d.ts +++ b/database/updateBurialSite.d.ts @@ -1,18 +1,18 @@ export interface UpdateBurialSiteForm { - burialSiteId: string | number; + burialSiteId: number | string; burialSiteNameSegment1?: string; burialSiteNameSegment2?: string; burialSiteNameSegment3?: string; burialSiteNameSegment4?: string; burialSiteNameSegment5?: string; - burialSiteTypeId: string | number; - burialSiteStatusId: string | number; - cemeteryId: string | number; + burialSiteStatusId: number | string; + burialSiteTypeId: number | string; + cemeteryId: number | string; cemeterySvgId: string; burialSiteLatitude: string; burialSiteLongitude: string; - burialSiteTypeFieldIds?: string; [fieldValue_burialSiteTypeFieldId: string]: unknown; + burialSiteTypeFieldIds?: string; } /** * Updates a burial site. diff --git a/database/updateBurialSite.ts b/database/updateBurialSite.ts index 841271e7..9d8117c5 100644 --- a/database/updateBurialSite.ts +++ b/database/updateBurialSite.ts @@ -6,7 +6,7 @@ import getCemetery from './getCemetery.js' import { acquireConnection } from './pool.js' export interface UpdateBurialSiteForm { - burialSiteId: string | number + burialSiteId: number | string burialSiteNameSegment1?: string burialSiteNameSegment2?: string @@ -14,17 +14,17 @@ export interface UpdateBurialSiteForm { burialSiteNameSegment4?: string burialSiteNameSegment5?: string - burialSiteTypeId: string | number - burialSiteStatusId: string | number + burialSiteStatusId: number | string + burialSiteTypeId: number | string - cemeteryId: string | number + cemeteryId: number | string cemeterySvgId: string burialSiteLatitude: string burialSiteLongitude: string - burialSiteTypeFieldIds?: string [fieldValue_burialSiteTypeFieldId: string]: unknown + burialSiteTypeFieldIds?: string } /** diff --git a/database/updateBurialSiteComment.d.ts b/database/updateBurialSiteComment.d.ts index 8fafef92..69948c0d 100644 --- a/database/updateBurialSiteComment.d.ts +++ b/database/updateBurialSiteComment.d.ts @@ -1,8 +1,8 @@ import { type DateString, type TimeString } from '@cityssm/utils-datetime'; export interface UpdateBurialSiteCommentForm { - burialSiteCommentId: string | number; + burialSiteCommentId: number | string; + comment: string; commentDateString: DateString; commentTimeString: TimeString; - comment: string; } export default function updateBurialSiteComment(commentForm: UpdateBurialSiteCommentForm, user: User): Promise; diff --git a/database/updateBurialSiteComment.ts b/database/updateBurialSiteComment.ts index fdee0858..c0fb1b15 100644 --- a/database/updateBurialSiteComment.ts +++ b/database/updateBurialSiteComment.ts @@ -8,10 +8,10 @@ import { import { acquireConnection } from './pool.js' export interface UpdateBurialSiteCommentForm { - burialSiteCommentId: string | number + burialSiteCommentId: number | string + comment: string commentDateString: DateString commentTimeString: TimeString - comment: string } export default async function updateBurialSiteComment( diff --git a/types/configTypes.d.ts b/types/configTypes.d.ts index 262eb2c7..62ec90ff 100644 --- a/types/configTypes.d.ts +++ b/types/configTypes.d.ts @@ -16,16 +16,16 @@ export interface Config { }; aliases: { externalReceiptNumber?: string; - workOrderOpenDate?: string; workOrderCloseDate?: string; + workOrderOpenDate?: string; }; settings: { cityDefault?: string; provinceDefault?: string; - latitudeMin?: number; latitudeMax?: number; - longitudeMin?: number; + latitudeMin?: number; longitudeMax?: number; + longitudeMin?: number; fees: { taxPercentageDefault?: number; }; @@ -96,10 +96,10 @@ export interface ConfigBurialSiteNameSegments { isAvailable?: boolean; isRequired?: boolean; label?: string; + maxLength?: number; + minLength?: number; prefix?: string; suffix?: string; - minLength?: number; - maxLength?: number; }>>; } export {}; diff --git a/types/configTypes.ts b/types/configTypes.ts index 0d10219b..02ee4f81 100644 --- a/types/configTypes.ts +++ b/types/configTypes.ts @@ -2,37 +2,47 @@ import type { config as MSSQLConfig } from 'mssql' export interface Config { application: ConfigApplication + session: ConfigSession + reverseProxy: { disableCompression?: boolean disableEtag?: boolean urlPrefix?: string } + activeDirectory?: ConfigActiveDirectory + users: { testing?: Array<`*${string}`> canLogin?: string[] canUpdate?: string[] isAdmin?: string[] } + aliases: { externalReceiptNumber?: string - workOrderOpenDate?: string workOrderCloseDate?: string + workOrderOpenDate?: string } + settings: { cityDefault?: string provinceDefault?: string - latitudeMin?: number + latitudeMax?: number - longitudeMin?: number + latitudeMin?: number longitudeMax?: number + longitudeMin?: number + fees: { taxPercentageDefault?: number } + burialSites: { burialSiteNameSegments?: ConfigBurialSiteNameSegments } + contracts: { burialSiteIdIsRequired?: boolean contractEndDateIsRequired?: boolean @@ -40,6 +50,7 @@ export interface Config { deathAgePeriods?: string[] prints?: string[] } + workOrders: { workOrderNumberLength?: number workOrderMilestoneDateRecentBeforeDays?: number @@ -47,12 +58,15 @@ export interface Config { calendarEmailAddress?: string prints?: string[] } + adminCleanup: { recordDeleteAgeDays?: number } + printPdf: { contentDisposition?: 'attachment' | 'inline' } + dynamicsGP?: { integrationIsEnabled: boolean mssqlConfig?: MSSQLConfig @@ -109,10 +123,10 @@ export interface ConfigBurialSiteNameSegments { isAvailable?: boolean isRequired?: boolean label?: string + maxLength?: number + minLength?: number prefix?: string suffix?: string - minLength?: number - maxLength?: number } > > diff --git a/types/recordTypes.d.ts b/types/recordTypes.d.ts index 3f3994c4..7a715ef6 100644 --- a/types/recordTypes.d.ts +++ b/types/recordTypes.d.ts @@ -1,32 +1,245 @@ import type { DateString, TimeString } from '@cityssm/utils-datetime'; -export interface Record { - recordCreate_userName?: string; - recordCreate_timeMillis?: number; - recordCreate_dateString?: string; - recordUpdate_userName?: string; - recordUpdate_timeMillis?: number; - recordUpdate_dateString?: string; - recordUpdate_timeString?: string; - recordDelete_userName?: string; - recordDelete_timeMillis?: number; - recordDelete_dateString?: string; +export interface BurialSite extends Record { + burialSiteId: number; + burialSiteName?: string; + burialSiteNameSegment1?: string; + burialSiteNameSegment2?: string; + burialSiteNameSegment3?: string; + burialSiteNameSegment4?: string; + burialSiteNameSegment5?: string; + burialSiteType?: string; + burialSiteTypeId?: number; + cemetery?: Cemetery; + cemeteryId?: number; + cemeteryName?: string; + cemeterySvg?: string; + cemeterySvgId?: string; + burialSiteLatitude?: number; + burialSiteLongitude?: number; + burialSiteStatus?: string; + burialSiteStatusId?: number; + burialSiteFields?: BurialSiteField[]; + contractCount?: number; + contracts?: Contract[]; + burialSiteComments?: BurialSiteComment[]; +} +export interface BurialSiteComment extends Record { + burialSiteCommentId?: number; + burialSiteId?: number; + commentDate?: number; + commentDateString?: string; + commentTime?: number; + commentTimePeriodString?: string; + commentTimeString?: string; + comment?: string; +} +export interface BurialSiteField extends BurialSiteTypeField, Record { + burialSiteFieldValue?: string; + burialSiteId?: number; +} +export interface BurialSiteStatus extends Record { + burialSiteStatusId: number; + burialSiteStatus: string; + orderNumber?: number; +} +export interface BurialSiteType extends Record { + burialSiteTypeId: number; + burialSiteType: string; + burialSiteTypeFields?: BurialSiteTypeField[]; + orderNumber?: number; +} +export interface BurialSiteTypeField extends Record { + burialSiteTypeFieldId: number; + burialSiteTypeField?: string; + burialSiteType: BurialSiteType; + burialSiteTypeId?: number; + fieldType: string; + fieldValues?: string; + isRequired?: boolean; + maxLength?: number; + minLength?: number; + pattern?: string; + orderNumber?: number; } export interface Cemetery extends Record { cemeteryId?: number; - cemeteryName?: string; - cemeteryKey?: string; cemeteryDescription?: string; + cemeteryKey?: string; + cemeteryName?: string; cemeteryLatitude?: number; cemeteryLongitude?: number; cemeterySvg?: string; cemeteryAddress1?: string; cemeteryAddress2?: string; cemeteryCity?: string; - cemeteryProvince?: string; cemeteryPostalCode?: string; + cemeteryProvince?: string; cemeteryPhoneNumber?: string; burialSiteCount?: number; } +export interface CommittalType extends Record { + committalTypeId: number; + committalType: string; + committalTypeKey: string; + orderNumber?: number; +} +export interface Contract extends Record { + contractId: number; + contractType: string; + contractTypeId: number; + isPreneed: boolean; + printEJS?: string; + burialSiteId?: number; + burialSiteName?: string; + burialSiteType?: string; + burialSiteTypeId?: number; + cemeteryId?: number; + cemeteryName?: string; + contractStartDate: number; + contractStartDateString: string; + contractEndDate?: number; + contractEndDateString?: string; + purchaserName: string; + purchaserAddress1: string; + purchaserAddress2: string; + purchaserCity: string; + purchaserPostalCode: string; + purchaserProvince: string; + purchaserEmail: string; + purchaserPhoneNumber: string; + purchaserRelationship: string; + funeralDirectorName: string; + funeralHomeId: number | null; + funeralHomeName: string | null; + funeralHomeKey?: string; + funeralHomeAddress1?: string; + funeralHomeAddress2?: string; + funeralHomeCity?: string; + funeralHomePostalCode?: string; + funeralHomeProvince?: string; + funeralDate?: number; + funeralDateString?: DateString; + funeralTime?: number; + funeralTimePeriodString?: string; + funeralTimeString?: TimeString; + committalType?: string; + committalTypeId?: number; + contractComments?: ContractComment[]; + contractFees?: ContractFee[]; + contractFields?: ContractField[]; + contractInterments?: ContractInterment[]; + contractTransactions?: ContractTransaction[]; + workOrders?: WorkOrder[]; +} +export interface ContractComment extends Record { + contractCommentId: number; + contractId?: number; + commentDate: number; + commentDateString: string; + commentTime: number; + commentTimePeriodString: string; + commentTimeString: string; + comment: string; +} +export interface ContractFee extends Fee, Record { + contractId?: number; + quantity?: number; +} +export interface ContractField extends ContractTypeField, Record { + contractId: number; + contractTypeFieldId: number; + fieldValue?: string; +} +export interface ContractInterment extends Record { + contractId?: number; + intermentNumber?: number; + deceasedName?: string; + deceasedAddress1?: string; + deceasedAddress2?: string; + deceasedCity?: string; + deceasedPostalCode?: string; + deceasedProvince?: string; + birthDate?: number; + birthDateString?: DateString; + birthPlace?: string; + deathAge?: number | null; + deathAgePeriod?: string; + deathDate?: number; + deathDateString?: DateString; + deathPlace?: string; + intermentContainerType?: string; + intermentContainerTypeId?: number; + isCremationType?: boolean; + contractIdCount?: number; + recordUpdate_timeMillisMax?: number; +} +export interface ContractTransaction extends Record { + contractId?: number; + transactionIndex?: number; + transactionDate?: number; + transactionDateString?: string; + transactionTime?: number; + transactionTimeString?: string; + dynamicsGPDocument?: DynamicsGPDocument; + externalReceiptNumber?: string; + transactionAmount: number; + transactionNote?: string; +} +export interface ContractType extends Record { + contractTypeId: number; + contractType: string; + isPreneed: boolean; + contractTypeFields?: ContractTypeField[]; + contractTypePrints?: string[]; + orderNumber?: number; +} +export interface ContractTypeField { + contractTypeFieldId: number; + contractTypeField?: string; + contractTypeId?: number; + fieldType: string; + fieldValues?: string; + isRequired?: boolean; + maxLength?: number; + minLength?: number; + pattern?: string; + orderNumber?: number; +} +export interface DynamicsGPDocument { + documentType: 'Cash Receipt' | 'Invoice'; + documentDate: Date; + documentDescription: string[]; + documentNumber: string; + documentTotal: number; +} +export interface Fee extends Record { + feeId: number; + feeCategory?: string; + feeCategoryId: number; + feeAccount?: string; + feeDescription?: string; + feeName?: string; + contractType?: string; + contractTypeId?: number; + burialSiteType?: string; + burialSiteTypeId?: number; + includeQuantity?: boolean; + quantityUnit?: string; + feeAmount?: number; + feeFunction?: string; + taxAmount?: number; + taxPercentage?: number; + isRequired?: boolean; + orderNumber: number; + contractFeeCount?: number; +} +export interface FeeCategory extends Record { + feeCategoryId: number; + feeCategory: string; + fees: Fee[]; + isGroupedFee: boolean; + orderNumber?: number; +} export interface FuneralHome extends Record { funeralHomeId?: number; funeralHomeKey?: string; @@ -38,139 +251,6 @@ export interface FuneralHome extends Record { funeralHomePostalCode?: string; funeralHomePhoneNumber?: string; } -export interface BurialSiteType extends Record { - burialSiteTypeId: number; - burialSiteType: string; - orderNumber?: number; - burialSiteTypeFields?: BurialSiteTypeField[]; -} -export interface BurialSiteTypeField extends Record { - burialSiteTypeFieldId: number; - burialSiteTypeField?: string; - burialSiteTypeId?: number; - burialSiteType: BurialSiteType; - fieldType: string; - fieldValues?: string; - isRequired?: boolean; - pattern?: string; - minLength?: number; - maxLength?: number; - orderNumber?: number; -} -export interface BurialSiteStatus extends Record { - burialSiteStatusId: number; - burialSiteStatus: string; - orderNumber?: number; -} -export interface BurialSite extends Record { - burialSiteId: number; - burialSiteNameSegment1?: string; - burialSiteNameSegment2?: string; - burialSiteNameSegment3?: string; - burialSiteNameSegment4?: string; - burialSiteNameSegment5?: string; - burialSiteName?: string; - burialSiteTypeId?: number; - burialSiteType?: string; - cemeteryId?: number; - cemeteryName?: string; - cemetery?: Cemetery; - cemeterySvg?: string; - cemeterySvgId?: string; - burialSiteLatitude?: number; - burialSiteLongitude?: number; - burialSiteStatusId?: number; - burialSiteStatus?: string; - burialSiteFields?: BurialSiteField[]; - contractCount?: number; - contracts?: Contract[]; - burialSiteComments?: BurialSiteComment[]; -} -export interface BurialSiteComment extends Record { - burialSiteCommentId?: number; - burialSiteId?: number; - commentDate?: number; - commentDateString?: string; - commentTime?: number; - commentTimeString?: string; - commentTimePeriodString?: string; - comment?: string; -} -export interface BurialSiteField extends BurialSiteTypeField, Record { - burialSiteId?: number; - burialSiteFieldValue?: string; -} -export interface ContractType extends Record { - contractTypeId: number; - contractType: string; - isPreneed: boolean; - orderNumber?: number; - contractTypeFields?: ContractTypeField[]; - contractTypePrints?: string[]; -} -export interface ContractTypeField { - contractTypeFieldId: number; - contractTypeId?: number; - contractTypeField?: string; - fieldType: string; - fieldValues?: string; - isRequired?: boolean; - pattern?: string; - minLength?: number; - maxLength?: number; - orderNumber?: number; -} -export interface FeeCategory extends Record { - feeCategoryId: number; - feeCategory: string; - fees: Fee[]; - isGroupedFee: boolean; - orderNumber?: number; -} -export interface Fee extends Record { - feeId: number; - feeCategoryId: number; - feeCategory?: string; - feeName?: string; - feeDescription?: string; - feeAccount?: string; - contractTypeId?: number; - contractType?: string; - burialSiteTypeId?: number; - burialSiteType?: string; - includeQuantity?: boolean; - quantityUnit?: string; - feeAmount?: number; - feeFunction?: string; - taxAmount?: number; - taxPercentage?: number; - isRequired?: boolean; - orderNumber: number; - contractFeeCount?: number; -} -export interface ContractFee extends Fee, Record { - contractId?: number; - quantity?: number; -} -export interface ContractTransaction extends Record { - contractId?: number; - transactionIndex?: number; - transactionDate?: number; - transactionDateString?: string; - transactionTime?: number; - transactionTimeString?: string; - transactionAmount: number; - externalReceiptNumber?: string; - transactionNote?: string; - dynamicsGPDocument?: DynamicsGPDocument; -} -export interface DynamicsGPDocument { - documentType: 'Invoice' | 'Cash Receipt'; - documentNumber: string; - documentDate: Date; - documentDescription: string[]; - documentTotal: number; -} export interface IntermentContainerType extends Record { intermentContainerTypeId: number; intermentContainerType: string; @@ -178,107 +258,35 @@ export interface IntermentContainerType extends Record { isCremationType: boolean; orderNumber?: number; } -export interface CommittalType extends Record { - committalTypeId: number; - committalType: string; - committalTypeKey: string; - orderNumber?: number; +export interface Record { + recordCreate_userName?: string; + recordCreate_timeMillis?: number; + recordCreate_dateString?: string; + recordUpdate_userName?: string; + recordUpdate_timeMillis?: number; + recordUpdate_dateString?: string; + recordUpdate_timeString?: string; + recordDelete_userName?: string; + recordDelete_timeMillis?: number; + recordDelete_dateString?: string; } -export interface ContractInterment extends Record { - contractId?: number; - intermentNumber?: number; - deceasedName?: string; - deceasedAddress1?: string; - deceasedAddress2?: string; - deceasedCity?: string; - deceasedProvince?: string; - deceasedPostalCode?: string; - birthDate?: number; - birthDateString?: DateString; - birthPlace?: string; - deathDate?: number; - deathDateString?: DateString; - deathPlace?: string; - deathAge?: number | null; - deathAgePeriod?: string; - intermentContainerTypeId?: number; - intermentContainerType?: string; - isCremationType?: boolean; - contractIdCount?: number; - recordUpdate_timeMillisMax?: number; -} -export interface ContractComment extends Record { - contractCommentId: number; - contractId?: number; - commentDate: number; - commentDateString: string; - commentTime: number; - commentTimeString: string; - commentTimePeriodString: string; - comment: string; -} -export interface ContractField extends ContractTypeField, Record { - contractId: number; - contractTypeFieldId: number; - fieldValue?: string; -} -export interface Contract extends Record { - contractId: number; - contractTypeId: number; - contractType: string; - isPreneed: boolean; - printEJS?: string; - burialSiteId?: number; - burialSiteTypeId?: number; - burialSiteType?: string; - burialSiteName?: string; - cemeteryId?: number; - cemeteryName?: string; - contractStartDate: number; - contractStartDateString: string; - contractEndDate?: number; - contractEndDateString?: string; - purchaserName: string; - purchaserAddress1: string; - purchaserAddress2: string; - purchaserCity: string; - purchaserProvince: string; - purchaserPostalCode: string; - purchaserPhoneNumber: string; - purchaserEmail: string; - purchaserRelationship: string; - funeralHomeId: number | null; - funeralDirectorName: string; - funeralHomeName: string | null; - funeralHomeKey?: string; - funeralHomeAddress1?: string; - funeralHomeAddress2?: string; - funeralHomeCity?: string; - funeralHomeProvince?: string; - funeralHomePostalCode?: string; - funeralDate?: number; - funeralDateString?: DateString; - funeralTime?: number; - funeralTimeString?: TimeString; - funeralTimePeriodString?: string; - committalTypeId?: number; - committalType?: string; - contractFields?: ContractField[]; - contractComments?: ContractComment[]; - contractInterments?: ContractInterment[]; - contractFees?: ContractFee[]; - contractTransactions?: ContractTransaction[]; - workOrders?: WorkOrder[]; -} -export interface WorkOrderType extends Record { - workOrderTypeId: number; +export interface WorkOrder extends Record { + workOrderId: number; + workOrderTypeId?: number; workOrderType?: string; - orderNumber?: number; -} -export interface WorkOrderMilestoneType extends Record { - workOrderMilestoneTypeId: number; - workOrderMilestoneType: string; - orderNumber?: number; + workOrderNumber?: string; + workOrderDescription?: string; + workOrderOpenDate?: number; + workOrderOpenDateString?: string; + workOrderCloseDate?: number; + workOrderCloseDateString?: string; + workOrderMilestones?: WorkOrderMilestone[]; + workOrderMilestoneCount?: number; + workOrderMilestoneCompletionCount?: number; + workOrderComments?: WorkOrderComment[]; + workOrderBurialSites?: BurialSite[]; + workOrderBurialSiteCount?: number; + workOrderContracts?: Contract[]; } export interface WorkOrderComment extends Record { workOrderCommentId?: number; @@ -307,23 +315,15 @@ export interface WorkOrderMilestone extends Record, WorkOrder { workOrderMilestoneCompletionTimePeriodString?: string; workOrderRecordUpdate_timeMillis?: number; } -export interface WorkOrder extends Record { - workOrderId: number; - workOrderTypeId?: number; +export interface WorkOrderMilestoneType extends Record { + workOrderMilestoneTypeId: number; + workOrderMilestoneType: string; + orderNumber?: number; +} +export interface WorkOrderType extends Record { + workOrderTypeId: number; workOrderType?: string; - workOrderNumber?: string; - workOrderDescription?: string; - workOrderOpenDate?: number; - workOrderOpenDateString?: string; - workOrderCloseDate?: number; - workOrderCloseDateString?: string; - workOrderMilestones?: WorkOrderMilestone[]; - workOrderMilestoneCount?: number; - workOrderMilestoneCompletionCount?: number; - workOrderComments?: WorkOrderComment[]; - workOrderBurialSites?: BurialSite[]; - workOrderBurialSiteCount?: number; - workOrderContracts?: Contract[]; + orderNumber?: number; } declare global { export interface User { diff --git a/types/recordTypes.ts b/types/recordTypes.ts index 311a54f5..0ac7f2bc 100644 --- a/types/recordTypes.ts +++ b/types/recordTypes.ts @@ -1,110 +1,29 @@ import type { DateString, TimeString } from '@cityssm/utils-datetime' -export interface Record { - recordCreate_userName?: string - recordCreate_timeMillis?: number - recordCreate_dateString?: string - - recordUpdate_userName?: string - recordUpdate_timeMillis?: number - recordUpdate_dateString?: string - recordUpdate_timeString?: string - - recordDelete_userName?: string - recordDelete_timeMillis?: number - recordDelete_dateString?: string -} - -/* - * SUNRISE DB TYPES - */ - -export interface Cemetery extends Record { - cemeteryId?: number - cemeteryName?: string - cemeteryKey?: string - cemeteryDescription?: string - - cemeteryLatitude?: number - cemeteryLongitude?: number - cemeterySvg?: string - - cemeteryAddress1?: string - cemeteryAddress2?: string - cemeteryCity?: string - cemeteryProvince?: string - cemeteryPostalCode?: string - cemeteryPhoneNumber?: string - - burialSiteCount?: number -} - -export interface FuneralHome extends Record { - funeralHomeId?: number - funeralHomeKey?: string - funeralHomeName?: string - funeralHomeAddress1?: string - funeralHomeAddress2?: string - funeralHomeCity?: string - funeralHomeProvince?: string - funeralHomePostalCode?: string - funeralHomePhoneNumber?: string -} - -export interface BurialSiteType extends Record { - burialSiteTypeId: number - burialSiteType: string - orderNumber?: number - burialSiteTypeFields?: BurialSiteTypeField[] -} - -export interface BurialSiteTypeField extends Record { - burialSiteTypeFieldId: number - burialSiteTypeField?: string - - burialSiteTypeId?: number - burialSiteType: BurialSiteType - - fieldType: string - fieldValues?: string - isRequired?: boolean - pattern?: string - minLength?: number - maxLength?: number - - orderNumber?: number -} - -export interface BurialSiteStatus extends Record { - burialSiteStatusId: number - burialSiteStatus: string - orderNumber?: number -} - export interface BurialSite extends Record { burialSiteId: number + burialSiteName?: string burialSiteNameSegment1?: string burialSiteNameSegment2?: string burialSiteNameSegment3?: string burialSiteNameSegment4?: string burialSiteNameSegment5?: string - burialSiteName?: string - burialSiteTypeId?: number burialSiteType?: string + burialSiteTypeId?: number + cemetery?: Cemetery cemeteryId?: number cemeteryName?: string - cemetery?: Cemetery cemeterySvg?: string cemeterySvgId?: string burialSiteLatitude?: number burialSiteLongitude?: number - burialSiteStatusId?: number burialSiteStatus?: string + burialSiteStatusId?: number burialSiteFields?: BurialSiteField[] @@ -122,63 +41,269 @@ export interface BurialSiteComment extends Record { commentDateString?: string commentTime?: number - commentTimeString?: string commentTimePeriodString?: string + commentTimeString?: string comment?: string } export interface BurialSiteField extends BurialSiteTypeField, Record { - burialSiteId?: number burialSiteFieldValue?: string + burialSiteId?: number } -export interface ContractType extends Record { - contractTypeId: number - contractType: string - isPreneed: boolean +export interface BurialSiteStatus extends Record { + burialSiteStatusId: number + + burialSiteStatus: string orderNumber?: number - contractTypeFields?: ContractTypeField[] - contractTypePrints?: string[] } -export interface ContractTypeField { - contractTypeFieldId: number - contractTypeId?: number - contractTypeField?: string +export interface BurialSiteType extends Record { + burialSiteTypeId: number + + burialSiteType: string + burialSiteTypeFields?: BurialSiteTypeField[] + orderNumber?: number +} + +export interface BurialSiteTypeField extends Record { + burialSiteTypeFieldId: number + + burialSiteTypeField?: string + + burialSiteType: BurialSiteType + burialSiteTypeId?: number fieldType: string fieldValues?: string isRequired?: boolean - pattern?: string - minLength?: number maxLength?: number + minLength?: number + pattern?: string + orderNumber?: number } -export interface FeeCategory extends Record { - feeCategoryId: number - feeCategory: string - fees: Fee[] - isGroupedFee: boolean +export interface Cemetery extends Record { + cemeteryId?: number + + cemeteryDescription?: string + cemeteryKey?: string + cemeteryName?: string + + cemeteryLatitude?: number + cemeteryLongitude?: number + cemeterySvg?: string + + cemeteryAddress1?: string + cemeteryAddress2?: string + cemeteryCity?: string + cemeteryPostalCode?: string + cemeteryProvince?: string + + cemeteryPhoneNumber?: string + + burialSiteCount?: number +} + +export interface CommittalType extends Record { + committalTypeId: number + + committalType: string + committalTypeKey: string + orderNumber?: number } +export interface Contract extends Record { + contractId: number + + contractType: string + contractTypeId: number + isPreneed: boolean + + printEJS?: string + + burialSiteId?: number + burialSiteName?: string + burialSiteType?: string + burialSiteTypeId?: number + + cemeteryId?: number + cemeteryName?: string + + contractStartDate: number + contractStartDateString: string + + contractEndDate?: number + contractEndDateString?: string + + purchaserName: string + + purchaserAddress1: string + purchaserAddress2: string + purchaserCity: string + purchaserPostalCode: string + purchaserProvince: string + + purchaserEmail: string + purchaserPhoneNumber: string + purchaserRelationship: string + + funeralDirectorName: string + funeralHomeId: number | null + funeralHomeName: string | null + + funeralHomeKey?: string + + funeralHomeAddress1?: string + funeralHomeAddress2?: string + funeralHomeCity?: string + funeralHomePostalCode?: string + funeralHomeProvince?: string + + funeralDate?: number + funeralDateString?: DateString + + funeralTime?: number + funeralTimePeriodString?: string + funeralTimeString?: TimeString + + committalType?: string + committalTypeId?: number + + contractComments?: ContractComment[] + contractFees?: ContractFee[] + contractFields?: ContractField[] + contractInterments?: ContractInterment[] + contractTransactions?: ContractTransaction[] + workOrders?: WorkOrder[] +} + +export interface ContractComment extends Record { + contractCommentId: number + contractId?: number + + commentDate: number + commentDateString: string + + commentTime: number + commentTimePeriodString: string + commentTimeString: string + + comment: string +} + +export interface ContractFee extends Fee, Record { + contractId?: number + quantity?: number +} + +export interface ContractField extends ContractTypeField, Record { + contractId: number + contractTypeFieldId: number + fieldValue?: string +} + +export interface ContractInterment extends Record { + contractId?: number + intermentNumber?: number + + deceasedName?: string + + deceasedAddress1?: string + deceasedAddress2?: string + deceasedCity?: string + deceasedPostalCode?: string + deceasedProvince?: string + + birthDate?: number + birthDateString?: DateString + birthPlace?: string + + deathAge?: number | null + deathAgePeriod?: string + deathDate?: number + deathDateString?: DateString + deathPlace?: string + + intermentContainerType?: string + intermentContainerTypeId?: number + isCremationType?: boolean + + contractIdCount?: number + recordUpdate_timeMillisMax?: number +} + +export interface ContractTransaction extends Record { + contractId?: number + transactionIndex?: number + + transactionDate?: number + transactionDateString?: string + + transactionTime?: number + transactionTimeString?: string + + dynamicsGPDocument?: DynamicsGPDocument + externalReceiptNumber?: string + transactionAmount: number + transactionNote?: string +} + +export interface ContractType extends Record { + contractTypeId: number + + contractType: string + isPreneed: boolean + + contractTypeFields?: ContractTypeField[] + contractTypePrints?: string[] + + orderNumber?: number +} + +export interface ContractTypeField { + contractTypeFieldId: number + + contractTypeField?: string + contractTypeId?: number + + fieldType: string + fieldValues?: string + isRequired?: boolean + maxLength?: number + minLength?: number + pattern?: string + + orderNumber?: number +} + +export interface DynamicsGPDocument { + documentType: 'Cash Receipt' | 'Invoice' + + documentDate: Date + documentDescription: string[] + documentNumber: string + documentTotal: number +} + export interface Fee extends Record { feeId: number - feeCategoryId: number feeCategory?: string + feeCategoryId: number - feeName?: string - feeDescription?: string feeAccount?: string + feeDescription?: string + feeName?: string - contractTypeId?: number contractType?: string + contractTypeId?: number - burialSiteTypeId?: number burialSiteType?: string + burialSiteTypeId?: number includeQuantity?: boolean quantityUnit?: string @@ -196,30 +321,25 @@ export interface Fee extends Record { contractFeeCount?: number } -export interface ContractFee extends Fee, Record { - contractId?: number - quantity?: number +export interface FeeCategory extends Record { + feeCategoryId: number + + feeCategory: string + fees: Fee[] + isGroupedFee: boolean + orderNumber?: number } -export interface ContractTransaction extends Record { - contractId?: number - transactionIndex?: number - transactionDate?: number - transactionDateString?: string - transactionTime?: number - transactionTimeString?: string - transactionAmount: number - externalReceiptNumber?: string - transactionNote?: string - dynamicsGPDocument?: DynamicsGPDocument -} - -export interface DynamicsGPDocument { - documentType: 'Invoice' | 'Cash Receipt' - documentNumber: string - documentDate: Date - documentDescription: string[] - documentTotal: number +export interface FuneralHome extends Record { + funeralHomeId?: number + funeralHomeKey?: string + funeralHomeName?: string + funeralHomeAddress1?: string + funeralHomeAddress2?: string + funeralHomeCity?: string + funeralHomeProvince?: string + funeralHomePostalCode?: string + funeralHomePhoneNumber?: string } export interface IntermentContainerType extends Record { @@ -230,138 +350,50 @@ export interface IntermentContainerType extends Record { orderNumber?: number } -export interface CommittalType extends Record { - committalTypeId: number - committalType: string - committalTypeKey: string - orderNumber?: number -} +export interface Record { + recordCreate_userName?: string + recordCreate_timeMillis?: number + recordCreate_dateString?: string -export interface ContractInterment extends Record { - contractId?: number - intermentNumber?: number + recordUpdate_userName?: string + recordUpdate_timeMillis?: number + recordUpdate_dateString?: string + recordUpdate_timeString?: string - deceasedName?: string - deceasedAddress1?: string - deceasedAddress2?: string - deceasedCity?: string - deceasedProvince?: string - deceasedPostalCode?: string - - birthDate?: number - birthDateString?: DateString - birthPlace?: string - - deathDate?: number - deathDateString?: DateString - deathPlace?: string - deathAge?: number | null - deathAgePeriod?: string - - intermentContainerTypeId?: number - intermentContainerType?: string - isCremationType?: boolean - - contractIdCount?: number - recordUpdate_timeMillisMax?: number -} - -export interface ContractComment extends Record { - contractCommentId: number - contractId?: number - - commentDate: number - commentDateString: string - - commentTime: number - commentTimeString: string - commentTimePeriodString: string - - comment: string -} - -export interface ContractField extends ContractTypeField, Record { - contractId: number - contractTypeFieldId: number - fieldValue?: string -} - -export interface Contract extends Record { - contractId: number - - contractTypeId: number - contractType: string - isPreneed: boolean - - printEJS?: string - - burialSiteId?: number - burialSiteTypeId?: number - burialSiteType?: string - burialSiteName?: string - - cemeteryId?: number - cemeteryName?: string - - contractStartDate: number - contractStartDateString: string - - contractEndDate?: number - contractEndDateString?: string - - purchaserName: string - purchaserAddress1: string - purchaserAddress2: string - purchaserCity: string - purchaserProvince: string - purchaserPostalCode: string - purchaserPhoneNumber: string - purchaserEmail: string - purchaserRelationship: string - - funeralHomeId: number | null - funeralDirectorName: string - funeralHomeName: string | null - - funeralHomeKey?: string - funeralHomeAddress1?: string - funeralHomeAddress2?: string - funeralHomeCity?: string - funeralHomeProvince?: string - funeralHomePostalCode?: string - - funeralDate?: number - funeralDateString?: DateString - - funeralTime?: number - funeralTimeString?: TimeString - funeralTimePeriodString?: string - - committalTypeId?: number - committalType?: string - - contractFields?: ContractField[] - contractComments?: ContractComment[] - contractInterments?: ContractInterment[] - contractFees?: ContractFee[] - contractTransactions?: ContractTransaction[] - workOrders?: WorkOrder[] + recordDelete_userName?: string + recordDelete_timeMillis?: number + recordDelete_dateString?: string } /* * WORK ORDERS */ -export interface WorkOrderType extends Record { - workOrderTypeId: number - workOrderType?: string - orderNumber?: number -} +export interface WorkOrder extends Record { + workOrderId: number -export interface WorkOrderMilestoneType extends Record { - workOrderMilestoneTypeId: number - workOrderMilestoneType: string - orderNumber?: number + workOrderTypeId?: number + workOrderType?: string + + workOrderNumber?: string + workOrderDescription?: string + + workOrderOpenDate?: number + workOrderOpenDateString?: string + + workOrderCloseDate?: number + workOrderCloseDateString?: string + + workOrderMilestones?: WorkOrderMilestone[] + workOrderMilestoneCount?: number + workOrderMilestoneCompletionCount?: number + + workOrderComments?: WorkOrderComment[] + + workOrderBurialSites?: BurialSite[] + workOrderBurialSiteCount?: number + + workOrderContracts?: Contract[] } export interface WorkOrderComment extends Record { @@ -403,31 +435,16 @@ export interface WorkOrderMilestone extends Record, WorkOrder { workOrderRecordUpdate_timeMillis?: number } -export interface WorkOrder extends Record { - workOrderId: number +export interface WorkOrderMilestoneType extends Record { + workOrderMilestoneTypeId: number + workOrderMilestoneType: string + orderNumber?: number +} - workOrderTypeId?: number +export interface WorkOrderType extends Record { + workOrderTypeId: number workOrderType?: string - - workOrderNumber?: string - workOrderDescription?: string - - workOrderOpenDate?: number - workOrderOpenDateString?: string - - workOrderCloseDate?: number - workOrderCloseDateString?: string - - workOrderMilestones?: WorkOrderMilestone[] - workOrderMilestoneCount?: number - workOrderMilestoneCompletionCount?: number - - workOrderComments?: WorkOrderComment[] - - workOrderBurialSites?: BurialSite[] - workOrderBurialSiteCount?: number - - workOrderContracts?: Contract[] + orderNumber?: number } /*