pull/3/head
Dan Gowans 2025-03-25 14:40:22 -04:00
parent beb57e70ab
commit 061c1fa43a
29 changed files with 1114 additions and 1059 deletions

View File

@ -19,8 +19,8 @@ if (process.send === undefined) {
}
interface ServerError extends Error {
syscall: string
code: string
syscall: string
}
function onError(error: ServerError): void {

View File

@ -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<Fee[]>;
export {};

View File

@ -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(

View File

@ -1,2 +1,2 @@
export type ReportParameters = Record<string, number | string>;
export default function getReportData(reportName: string, reportParameters?: ReportParameters): Promise<undefined | unknown[]>;
export default function getReportData(reportName: string, reportParameters?: ReportParameters): Promise<unknown[] | undefined>;

View File

@ -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<undefined | unknown[]> {
): Promise<unknown[] | undefined> {
let sql = ''
const sqlParameters: unknown[] = []

View File

@ -5,6 +5,6 @@ interface WorkOrderOptions {
includeComments: boolean;
includeMilestones: boolean;
}
export default function getWorkOrder(workOrderId: number | string, options: WorkOrderOptions, connectedDatabase?: PoolConnection): Promise<undefined | WorkOrder>;
export declare function getWorkOrderByWorkOrderNumber(workOrderNumber: string): Promise<undefined | WorkOrder>;
export default function getWorkOrder(workOrderId: number | string, options: WorkOrderOptions, connectedDatabase?: PoolConnection): Promise<WorkOrder | undefined>;
export declare function getWorkOrderByWorkOrderNumber(workOrderNumber: string): Promise<WorkOrder | undefined>;
export {};

View File

@ -30,7 +30,7 @@ export default async function getWorkOrder(
workOrderId: number | string,
options: WorkOrderOptions,
connectedDatabase?: PoolConnection
): Promise<undefined | WorkOrder> {
): Promise<WorkOrder | undefined> {
return await _getWorkOrder(
`${baseSQL} and w.workOrderId = ?`,
workOrderId,
@ -41,7 +41,7 @@ export default async function getWorkOrder(
export async function getWorkOrderByWorkOrderNumber(
workOrderNumber: string
): Promise<undefined | WorkOrder> {
): Promise<WorkOrder | undefined> {
return await _getWorkOrder(
`${baseSQL} and w.workOrderNumber = ?`,
workOrderNumber,
@ -58,14 +58,14 @@ async function _getWorkOrder(
workOrderIdOrWorkOrderNumber: number | string,
options: WorkOrderOptions,
connectedDatabase?: PoolConnection
): Promise<undefined | WorkOrder> {
): Promise<WorkOrder | undefined> {
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) {

View File

@ -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'

View File

@ -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;

View File

@ -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
};
}

View File

@ -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
}
}

View File

@ -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;

View File

@ -5,105 +5,10 @@ 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
@ -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;

View File

@ -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<WorkOrder> {
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,7 +47,7 @@ export async function getWorkOrders(
database.function('userFn_dateIntegerToString', dateIntegerToString)
const { sqlWhereClause, sqlParameters } = buildWhereClause(filters)
const { sqlParameters, sqlWhereClause } = buildWhereClause(filters)
const count: number = (
database
@ -249,4 +118,143 @@ export async function getWorkOrders(
}
}
async function addInclusions(
workOrder: WorkOrder,
options: GetWorkOrdersOptions,
database: PoolConnection
): Promise<WorkOrder> {
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

View File

@ -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',

View File

@ -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<void> {
)
await addIntermentContainerType(
{ intermentContainerType: 'Steel Vault',
{
intermentContainerType: 'Steel Vault',
intermentContainerTypeKey: 'SV',
orderNumber: 6 },
orderNumber: 6
},
initializingUser
)
@ -573,23 +575,32 @@ async function initializeData(): Promise<void> {
// Committal Types
await addCommittalType({
await addCommittalType(
{
committalType: 'Graveside',
committalTypeKey: 'GS',
orderNumber: 1
}, initializingUser)
},
initializingUser
)
await addCommittalType({
await addCommittalType(
{
committalType: 'Chapel',
committalTypeKey: 'CS',
orderNumber: 2
}, initializingUser)
},
initializingUser
)
await addCommittalType({
await addCommittalType(
{
committalType: 'Church',
committalTypeKey: 'CH',
orderNumber: 3
}, initializingUser)
},
initializingUser
)
/*
* Fee Categories

View File

@ -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);
}

View File

@ -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<boolean> {
@ -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
}
}

View File

@ -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);
}

View File

@ -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<boolean> {
@ -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
}
}

View File

@ -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'

View File

@ -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.

View File

@ -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
}
/**

View File

@ -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<boolean>;

View File

@ -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(

View File

@ -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 {};

View File

@ -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
}
>
>

524
types/recordTypes.d.ts vendored
View File

@ -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 {

View File

@ -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
}
/*