pull/11/head
Dan Gowans 2025-04-30 08:45:39 -04:00
parent 3c1d023ccd
commit 656f1b052e
12 changed files with 109 additions and 56 deletions

View File

@ -1,10 +1,11 @@
import { type DateString, type TimeString } from '@cityssm/utils-datetime';
export interface AddWorkOrderMilestoneForm {
workOrderId: number | string;
workOrderMilestoneTypeId: number | string;
workOrderMilestoneDateString: string;
workOrderMilestoneTimeString?: string;
workOrderMilestoneDateString: '' | DateString;
workOrderMilestoneTimeString?: '' | TimeString;
workOrderMilestoneDescription: string;
workOrderMilestoneCompletionDateString?: string;
workOrderMilestoneCompletionTimeString?: string;
workOrderMilestoneCompletionDateString?: '' | DateString;
workOrderMilestoneCompletionTimeString?: '' | TimeString;
}
export default function addWorkOrderMilestone(milestoneForm: AddWorkOrderMilestoneForm, user: User): number;

View File

@ -1,4 +1,6 @@
import {
type DateString,
type TimeString,
dateStringToInteger,
timeStringToInteger
} from '@cityssm/utils-datetime'
@ -10,13 +12,13 @@ export interface AddWorkOrderMilestoneForm {
workOrderId: number | string
workOrderMilestoneTypeId: number | string
workOrderMilestoneDateString: string
workOrderMilestoneTimeString?: string
workOrderMilestoneDateString: '' | DateString
workOrderMilestoneTimeString?: '' | TimeString
workOrderMilestoneDescription: string
workOrderMilestoneCompletionDateString?: string
workOrderMilestoneCompletionTimeString?: string
workOrderMilestoneCompletionDateString?: '' | DateString
workOrderMilestoneCompletionTimeString?: '' | TimeString
}
export default function addWorkOrderMilestone(
@ -48,17 +50,19 @@ export default function addWorkOrderMilestone(
: dateStringToInteger(milestoneForm.workOrderMilestoneDateString),
(milestoneForm.workOrderMilestoneTimeString ?? '') === ''
? 0
: timeStringToInteger(milestoneForm.workOrderMilestoneTimeString!),
: timeStringToInteger(
milestoneForm.workOrderMilestoneTimeString as TimeString
),
milestoneForm.workOrderMilestoneDescription,
(milestoneForm.workOrderMilestoneCompletionDateString ?? '') === ''
? undefined
: dateStringToInteger(
milestoneForm.workOrderMilestoneCompletionDateString!
milestoneForm.workOrderMilestoneCompletionDateString as DateString
),
(milestoneForm.workOrderMilestoneCompletionTimeString ?? '') === ''
? undefined
: timeStringToInteger(
milestoneForm.workOrderMilestoneCompletionTimeString!
milestoneForm.workOrderMilestoneCompletionTimeString as TimeString
),
user.userName,
rightNowMillis,

View File

@ -1,6 +1,7 @@
import { type DateString, type TimeString } from '@cityssm/utils-datetime';
export interface CompleteWorkOrderMilestoneForm {
workOrderMilestoneId: number | string;
workOrderMilestoneCompletionDateString?: string;
workOrderMilestoneCompletionTimeString?: string;
workOrderMilestoneCompletionDateString?: '' | DateString;
workOrderMilestoneCompletionTimeString?: '' | TimeString;
}
export default function completeWorkOrderMilestone(milestoneForm: CompleteWorkOrderMilestoneForm, user: User): boolean;

View File

@ -4,6 +4,12 @@ import { sunriseDB } from '../helpers/database.helpers.js';
export default function completeWorkOrderMilestone(milestoneForm, user) {
const rightNow = new Date();
const database = sqlite(sunriseDB);
const completionDate = (milestoneForm.workOrderMilestoneCompletionDateString ?? '') === ''
? dateToInteger(rightNow)
: dateStringToInteger(milestoneForm.workOrderMilestoneCompletionDateString);
const completionTime = (milestoneForm.workOrderMilestoneCompletionTimeString ?? '') === ''
? dateToTimeInteger(rightNow)
: timeStringToInteger(milestoneForm.workOrderMilestoneCompletionTimeString);
const result = database
.prepare(`update WorkOrderMilestones
set workOrderMilestoneCompletionDate = ?,
@ -11,11 +17,7 @@ export default function completeWorkOrderMilestone(milestoneForm, user) {
recordUpdate_userName = ?,
recordUpdate_timeMillis = ?
where workOrderMilestoneId = ?`)
.run((milestoneForm.workOrderMilestoneCompletionDateString ?? '') === ''
? dateToInteger(rightNow)
: dateStringToInteger(milestoneForm.workOrderMilestoneCompletionDateString), (milestoneForm.workOrderMilestoneCompletionTimeString ?? '') === ''
? dateToTimeInteger(rightNow)
: timeStringToInteger(milestoneForm.workOrderMilestoneCompletionTimeString), user.userName, rightNow.getTime(), milestoneForm.workOrderMilestoneId);
.run(completionDate, completionTime, user.userName, rightNow.getTime(), milestoneForm.workOrderMilestoneId);
database.close();
return result.changes > 0;
}

View File

@ -1,4 +1,6 @@
import {
type DateString,
type TimeString,
dateStringToInteger,
dateToInteger,
dateToTimeInteger,
@ -11,8 +13,8 @@ import { sunriseDB } from '../helpers/database.helpers.js'
export interface CompleteWorkOrderMilestoneForm {
workOrderMilestoneId: number | string
workOrderMilestoneCompletionDateString?: string
workOrderMilestoneCompletionTimeString?: string
workOrderMilestoneCompletionDateString?: '' | DateString
workOrderMilestoneCompletionTimeString?: '' | TimeString
}
export default function completeWorkOrderMilestone(
@ -23,6 +25,20 @@ export default function completeWorkOrderMilestone(
const database = sqlite(sunriseDB)
const completionDate =
(milestoneForm.workOrderMilestoneCompletionDateString ?? '') === ''
? dateToInteger(rightNow)
: dateStringToInteger(
milestoneForm.workOrderMilestoneCompletionDateString as DateString
)
const completionTime =
(milestoneForm.workOrderMilestoneCompletionTimeString ?? '') === ''
? dateToTimeInteger(rightNow)
: timeStringToInteger(
milestoneForm.workOrderMilestoneCompletionTimeString as TimeString
)
const result = database
.prepare(
`update WorkOrderMilestones
@ -33,16 +49,8 @@ export default function completeWorkOrderMilestone(
where workOrderMilestoneId = ?`
)
.run(
(milestoneForm.workOrderMilestoneCompletionDateString ?? '') === ''
? dateToInteger(rightNow)
: dateStringToInteger(
milestoneForm.workOrderMilestoneCompletionDateString!
),
(milestoneForm.workOrderMilestoneCompletionTimeString ?? '') === ''
? dateToTimeInteger(rightNow)
: timeStringToInteger(
milestoneForm.workOrderMilestoneCompletionTimeString!
),
completionDate,
completionTime,
user.userName,
rightNow.getTime(),
milestoneForm.workOrderMilestoneId

View File

@ -1,6 +1,6 @@
import sqlite from 'better-sqlite3';
import { sunriseDB } from '../helpers/database.helpers.js';
import { clearCacheByTableName } from '../helpers/functions.cache.js';
import { cacheTableNames, clearCacheByTableName } from '../helpers/functions.cache.js';
const recordIdColumns = new Map([
['BurialSiteComments', 'burialSiteCommentId'],
['BurialSiteStatuses', 'burialSiteStatusId'],
@ -55,6 +55,9 @@ export function deleteRecord(recordTable, recordId, user) {
.run(user.userName, rightNowMillis, recordId);
}
database.close();
// Clear cache for tables that are cached
if (cacheTableNames.includes(recordTable)) {
clearCacheByTableName(recordTable);
}
return result.changes > 0;
}

View File

@ -1,7 +1,11 @@
import sqlite from 'better-sqlite3'
import { sunriseDB } from '../helpers/database.helpers.js'
import { clearCacheByTableName } from '../helpers/functions.cache.js'
import {
CacheTableNames,
cacheTableNames,
clearCacheByTableName
} from '../helpers/functions.cache.js'
type RecordTable =
| 'BurialSiteComments'
@ -73,7 +77,7 @@ export function deleteRecord(
`update ${recordTable}
set recordDelete_userName = ?,
recordDelete_timeMillis = ?
where ${recordIdColumns.get(recordTable)!} = ?
where ${recordIdColumns.get(recordTable)} = ?
and recordDelete_timeMillis is null`
)
.run(user.userName, rightNowMillis, recordId)
@ -84,7 +88,7 @@ export function deleteRecord(
`update ${relatedTable}
set recordDelete_userName = ?,
recordDelete_timeMillis = ?
where ${recordIdColumns.get(recordTable)!} = ?
where ${recordIdColumns.get(recordTable)} = ?
and recordDelete_timeMillis is null`
)
.run(user.userName, rightNowMillis, recordId)
@ -92,7 +96,10 @@ export function deleteRecord(
database.close()
clearCacheByTableName(recordTable)
// Clear cache for tables that are cached
if (cacheTableNames.includes(recordTable as CacheTableNames)) {
clearCacheByTableName(recordTable as CacheTableNames)
}
return result.changes > 0
}

View File

@ -13,13 +13,17 @@ const recordNameIdColumns = new Map([
]);
export function updateRecord(recordTable, recordId, recordName, user) {
const database = sqlite(sunriseDB);
const columnNames = recordNameIdColumns.get(recordTable);
if (columnNames === undefined) {
throw new Error(`Invalid record table: ${recordTable}`);
}
const result = database
.prepare(`update ${recordTable}
set ${recordNameIdColumns.get(recordTable)[0]} = ?,
set ${columnNames[0]} = ?,
recordUpdate_userName = ?,
recordUpdate_timeMillis = ?
where recordDelete_timeMillis is null
and ${recordNameIdColumns.get(recordTable)[1]} = ?`)
and ${columnNames[1]} = ?`)
.run(recordName, user.userName, Date.now(), recordId);
database.close();
clearCacheByTableName(recordTable);

View File

@ -29,14 +29,20 @@ export function updateRecord(
): boolean {
const database = sqlite(sunriseDB)
const columnNames = recordNameIdColumns.get(recordTable)
if (columnNames === undefined) {
throw new Error(`Invalid record table: ${recordTable}`)
}
const result = database
.prepare(
`update ${recordTable}
set ${recordNameIdColumns.get(recordTable)![0]} = ?,
set ${columnNames[0]} = ?,
recordUpdate_userName = ?,
recordUpdate_timeMillis = ?
where recordDelete_timeMillis is null
and ${recordNameIdColumns.get(recordTable)![1]} = ?`
and ${columnNames[1]} = ?`
)
.run(recordName, user.userName, Date.now(), recordId)

View File

@ -20,7 +20,7 @@ export declare function getWorkOrderMilestoneTypeById(workOrderMilestoneTypeId:
export declare function getWorkOrderMilestoneTypeByWorkOrderMilestoneType(workOrderMilestoneTypeString: string): WorkOrderMilestoneType | undefined;
export declare function getWorkOrderMilestoneTypes(): WorkOrderMilestoneType[];
export declare function preloadCaches(): void;
type CacheTableNames = 'BurialSiteStatuses' | 'BurialSiteTypeFields' | 'BurialSiteTypes' | 'CommittalTypes' | 'ContractTypeFields' | 'ContractTypePrints' | 'ContractTypes' | 'FeeCategories' | 'Fees' | 'IntermentContainerTypes' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes';
export declare const cacheTableNames: readonly ["BurialSiteStatuses", "BurialSiteTypeFields", "BurialSiteTypes", "CommittalTypes", "ContractTypeFields", "ContractTypePrints", "ContractTypes", "FeeCategories", "Fees", "IntermentContainerTypes", "WorkOrderMilestoneTypes", "WorkOrderTypes"];
export type CacheTableNames = typeof cacheTableNames[number];
export declare function clearCacheByTableName(tableName: CacheTableNames, relayMessage?: boolean): void;
export declare function clearCaches(): void;
export {};

View File

@ -170,6 +170,20 @@ export function preloadCaches() {
getWorkOrderTypes();
getWorkOrderMilestoneTypes();
}
export const cacheTableNames = [
'BurialSiteStatuses',
'BurialSiteTypeFields',
'BurialSiteTypes',
'CommittalTypes',
'ContractTypeFields',
'ContractTypePrints',
'ContractTypes',
'FeeCategories',
'Fees',
'IntermentContainerTypes',
'WorkOrderMilestoneTypes',
'WorkOrderTypes'
];
export function clearCacheByTableName(tableName, relayMessage = true) {
switch (tableName) {
case 'BurialSiteStatuses': {

View File

@ -305,19 +305,22 @@ export function preloadCaches(): void {
getWorkOrderMilestoneTypes()
}
type CacheTableNames =
| 'BurialSiteStatuses'
| 'BurialSiteTypeFields'
| 'BurialSiteTypes'
| 'CommittalTypes'
| 'ContractTypeFields'
| 'ContractTypePrints'
| 'ContractTypes'
| 'FeeCategories'
| 'Fees'
| 'IntermentContainerTypes'
| 'WorkOrderMilestoneTypes'
| 'WorkOrderTypes'
export const cacheTableNames = [
'BurialSiteStatuses'
, 'BurialSiteTypeFields'
, 'BurialSiteTypes'
, 'CommittalTypes'
, 'ContractTypeFields'
, 'ContractTypePrints'
, 'ContractTypes'
, 'FeeCategories'
, 'Fees'
, 'IntermentContainerTypes'
, 'WorkOrderMilestoneTypes'
, 'WorkOrderTypes'
] as const
export type CacheTableNames = typeof cacheTableNames[number]
export function clearCacheByTableName(
tableName: CacheTableNames,