sunrise-cms/database/addContract.ts

185 lines
5.4 KiB
TypeScript

import {
type DateString,
dateStringToInteger
} from '@cityssm/utils-datetime'
import type { PoolConnection } from 'better-sqlite-pool'
import addOrUpdateContractField from './addOrUpdateContractField.js'
import { acquireConnection } from './pool.js'
export interface AddContractForm {
contractTypeId: string | number
burialSiteId: string | number
contractStartDateString: DateString | ''
contractEndDateString: DateString | ''
contractTypeFieldIds?: string
[fieldValue_contractTypeFieldId: `fieldValue_${string}`]: unknown
purchaserName?: string
purchaserAddress1?: string
purchaserAddress2?: string
purchaserCity?: string
purchaserProvince?: string
purchaserPostalCode?: string
purchaserPhoneNumber?: string
purchaserEmail?: string
purchaserRelationship?: string
funeralHomeId?: string | number
funeralDirectorName?: string
deceasedName?: string
deceasedAddress1?: string
deceasedAddress2?: string
deceasedCity?: string
deceasedProvince?: string
deceasedPostalCode?: string
birthDateString?: DateString | ''
birthPlace?: string
deathDateString?: DateString | ''
deathPlace?: string
intermentDateString?: DateString | ''
intermentContainerTypeId?: string | number
intermentCommittalTypeId?: string | number
}
// eslint-disable-next-line complexity
export default async function addContract(
addForm: AddContractForm,
user: User,
connectedDatabase?: PoolConnection
): Promise<number> {
const database = connectedDatabase ?? (await acquireConnection())
const rightNowMillis = Date.now()
const contractStartDate = dateStringToInteger(
addForm.contractStartDateString as DateString
)
const result = database
.prepare(
`insert into Contracts (
contractTypeId, burialSiteId,
contractStartDate, contractEndDate,
purchaserName, purchaserAddress1, purchaserAddress2,
purchaserCity, purchaserProvince, purchaserPostalCode,
purchaserPhoneNumber, purchaserEmail, purchaserRelationship,
funeralHomeId, funeralDirectorName,
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
)
.run(
addForm.contractTypeId,
addForm.burialSiteId === '' ? undefined : addForm.burialSiteId,
contractStartDate,
addForm.contractEndDateString === ''
? undefined
: dateStringToInteger(addForm.contractEndDateString as DateString),
addForm.purchaserName ?? '',
addForm.purchaserAddress1 ?? '',
addForm.purchaserAddress2 ?? '',
addForm.purchaserCity ?? '',
addForm.purchaserProvince ?? '',
addForm.purchaserPostalCode ?? '',
addForm.purchaserPhoneNumber ?? '',
addForm.purchaserEmail ?? '',
addForm.purchaserRelationship ?? '',
addForm.funeralHomeId === '' ? undefined : addForm.funeralHomeId,
addForm.funeralDirectorName ?? '',
user.userName,
rightNowMillis,
user.userName,
rightNowMillis
)
const contractId = result.lastInsertRowid as number
/*
* Add contract fields
*/
const contractTypeFieldIds = (addForm.contractTypeFieldIds ?? '').split(',')
for (const contractTypeFieldId of contractTypeFieldIds) {
const fieldValue = addForm[`fieldValue_${contractTypeFieldId}`] as
| string
| undefined
if ((fieldValue ?? '') !== '') {
await addOrUpdateContractField(
{
contractId,
contractTypeFieldId,
fieldValue: fieldValue ?? ''
},
user,
database
)
}
}
/*
* Add deceased information
*/
if ((addForm.deceasedName ?? '') !== '') {
database
.prepare(
`insert into ContractInterments (
contractId, intermentNumber,
deceasedName, deceasedAddress1, deceasedAddress2,
deceasedCity, deceasedProvince, deceasedPostalCode,
birthDate, deathDate,
birthPlace, deathPlace,
intermentDate,
intermentContainerTypeId, intermentCommittalTypeId,
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
)
.run(
contractId,
1,
addForm.deceasedName ?? '',
addForm.deceasedAddress1 ?? '',
addForm.deceasedAddress2 ?? '',
addForm.deceasedCity ?? '',
addForm.deceasedProvince ?? '',
addForm.deceasedPostalCode ?? '',
addForm.birthDateString === ''
? undefined
: dateStringToInteger(addForm.birthDateString as DateString),
addForm.deathDateString === ''
? undefined
: dateStringToInteger(addForm.deathDateString as DateString),
addForm.birthPlace ?? '',
addForm.deathPlace ?? '',
addForm.intermentDateString === ''
? undefined
: dateStringToInteger(addForm.intermentDateString as DateString),
addForm.intermentContainerTypeId === ''
? undefined
: addForm.intermentContainerTypeId,
addForm.intermentCommittalTypeId === ''
? undefined
: addForm.intermentCommittalTypeId,
user.userName,
rightNowMillis,
user.userName,
rightNowMillis
)
}
if (connectedDatabase === undefined) {
database.release()
}
return contractId
}