deepsource-autofix-76c6eb20
Dan Gowans 2023-01-11 15:54:32 -05:00
parent 991ad5bc82
commit 263c316573
72 changed files with 1850 additions and 1755 deletions

View File

@ -1,4 +1,4 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface AddOccupancyTypeFieldForm { interface AddOccupancyTypeFieldForm {
occupancyTypeId?: string | number; occupancyTypeId?: string | number;
occupancyTypeField: string; occupancyTypeField: string;

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { clearCacheByTableName } from "../functions.cache.js"; import { clearCacheByTableName } from '../functions.cache.js';
export function addOccupancyTypeField(occupancyTypeFieldForm, requestSession) { export function addOccupancyTypeField(occupancyTypeFieldForm, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
@ -13,9 +13,9 @@ export function addOccupancyTypeField(occupancyTypeFieldForm, requestSession) {
recordCreate_userName, recordCreate_timeMillis, recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis) recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
.run(occupancyTypeFieldForm.occupancyTypeId || undefined, occupancyTypeFieldForm.occupancyTypeField, occupancyTypeFieldForm.occupancyTypeFieldValues || "", occupancyTypeFieldForm.isRequired ? 1 : 0, occupancyTypeFieldForm.pattern || "", occupancyTypeFieldForm.minimumLength || 0, occupancyTypeFieldForm.maximumLength || 100, occupancyTypeFieldForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis); .run(occupancyTypeFieldForm.occupancyTypeId ?? undefined, occupancyTypeFieldForm.occupancyTypeField, occupancyTypeFieldForm.occupancyTypeFieldValues ?? '', occupancyTypeFieldForm.isRequired === '' ? 0 : 1, occupancyTypeFieldForm.pattern ?? '', occupancyTypeFieldForm.minimumLength ?? 0, occupancyTypeFieldForm.maximumLength ?? 100, occupancyTypeFieldForm.orderNumber ?? -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
database.close(); database.close();
clearCacheByTableName("OccupancyTypeFields"); clearCacheByTableName('OccupancyTypeFields');
return result.lastInsertRowid; return result.lastInsertRowid;
} }
export default addOccupancyTypeField; export default addOccupancyTypeField;

View File

@ -1,28 +1,28 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
import { clearCacheByTableName } from "../functions.cache.js"; import { clearCacheByTableName } from '../functions.cache.js'
interface AddOccupancyTypeFieldForm { interface AddOccupancyTypeFieldForm {
occupancyTypeId?: string | number; occupancyTypeId?: string | number
occupancyTypeField: string; occupancyTypeField: string
occupancyTypeFieldValues?: string; occupancyTypeFieldValues?: string
isRequired?: string; isRequired?: string
pattern?: string; pattern?: string
minimumLength: string | number; minimumLength: string | number
maximumLength: string | number; maximumLength: string | number
orderNumber?: number; orderNumber?: number
} }
export function addOccupancyTypeField( export function addOccupancyTypeField(
occupancyTypeFieldForm: AddOccupancyTypeFieldForm, occupancyTypeFieldForm: AddOccupancyTypeFieldForm,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): number { ): number {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const result = database const result = database
.prepare( .prepare(
@ -36,25 +36,25 @@ export function addOccupancyTypeField(
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
) )
.run( .run(
occupancyTypeFieldForm.occupancyTypeId || undefined, occupancyTypeFieldForm.occupancyTypeId ?? undefined,
occupancyTypeFieldForm.occupancyTypeField, occupancyTypeFieldForm.occupancyTypeField,
occupancyTypeFieldForm.occupancyTypeFieldValues || "", occupancyTypeFieldForm.occupancyTypeFieldValues ?? '',
occupancyTypeFieldForm.isRequired ? 1 : 0, occupancyTypeFieldForm.isRequired === '' ? 0 : 1,
occupancyTypeFieldForm.pattern || "", occupancyTypeFieldForm.pattern ?? '',
occupancyTypeFieldForm.minimumLength || 0, occupancyTypeFieldForm.minimumLength ?? 0,
occupancyTypeFieldForm.maximumLength || 100, occupancyTypeFieldForm.maximumLength ?? 100,
occupancyTypeFieldForm.orderNumber || -1, occupancyTypeFieldForm.orderNumber ?? -1,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis rightNowMillis
); )
database.close(); database.close()
clearCacheByTableName("OccupancyTypeFields"); clearCacheByTableName('OccupancyTypeFields')
return result.lastInsertRowid as number; return result.lastInsertRowid as number
} }
export default addOccupancyTypeField; export default addOccupancyTypeField

View File

@ -1,4 +1,4 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface OccupancyTypePrintForm { interface OccupancyTypePrintForm {
occupancyTypeId: string | number; occupancyTypeId: string | number;
printEJS: string; printEJS: string;

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { clearCacheByTableName } from "../functions.cache.js"; import { clearCacheByTableName } from '../functions.cache.js';
export function addOccupancyTypePrint(occupancyTypePrintForm, requestSession) { export function addOccupancyTypePrint(occupancyTypePrintForm, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
@ -20,10 +20,10 @@ export function addOccupancyTypePrint(occupancyTypePrintForm, requestSession) {
recordCreate_userName, recordCreate_timeMillis, recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis) recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?)`) values (?, ?, ?, ?, ?, ?, ?)`)
.run(occupancyTypePrintForm.occupancyTypeId, occupancyTypePrintForm.printEJS, occupancyTypePrintForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis); .run(occupancyTypePrintForm.occupancyTypeId, occupancyTypePrintForm.printEJS, occupancyTypePrintForm.orderNumber ?? -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
} }
database.close(); database.close();
clearCacheByTableName("OccupancyTypePrints"); clearCacheByTableName('OccupancyTypePrints');
return result.changes > 0; return result.changes > 0;
} }
export default addOccupancyTypePrint; export default addOccupancyTypePrint;

View File

@ -1,24 +1,24 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { clearCacheByTableName } from "../functions.cache.js"; import { clearCacheByTableName } from '../functions.cache.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface OccupancyTypePrintForm { interface OccupancyTypePrintForm {
occupancyTypeId: string | number; occupancyTypeId: string | number
printEJS: string; printEJS: string
orderNumber?: number; orderNumber?: number
} }
export function addOccupancyTypePrint( export function addOccupancyTypePrint(
occupancyTypePrintForm: OccupancyTypePrintForm, occupancyTypePrintForm: OccupancyTypePrintForm,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): boolean { ): boolean {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
let result = database let result = database
.prepare( .prepare(
@ -31,11 +31,11 @@ export function addOccupancyTypePrint(
and printEJS = ?` and printEJS = ?`
) )
.run( .run(
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
occupancyTypePrintForm.occupancyTypeId, occupancyTypePrintForm.occupancyTypeId,
occupancyTypePrintForm.printEJS occupancyTypePrintForm.printEJS
); )
if (result.changes === 0) { if (result.changes === 0) {
result = database result = database
@ -49,19 +49,19 @@ export function addOccupancyTypePrint(
.run( .run(
occupancyTypePrintForm.occupancyTypeId, occupancyTypePrintForm.occupancyTypeId,
occupancyTypePrintForm.printEJS, occupancyTypePrintForm.printEJS,
occupancyTypePrintForm.orderNumber || -1, occupancyTypePrintForm.orderNumber ?? -1,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis rightNowMillis
); )
} }
database.close(); database.close()
clearCacheByTableName("OccupancyTypePrints"); clearCacheByTableName('OccupancyTypePrints')
return result.changes > 0; return result.changes > 0
} }
export default addOccupancyTypePrint; export default addOccupancyTypePrint

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface LotFieldForm { interface LotFieldForm {
lotId: string | number; lotId: string | number;
lotTypeFieldId: string | number; lotTypeFieldId: string | number;

View File

@ -1,7 +1,7 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function addOrUpdateLotField(lotFieldForm, requestSession, connectedDatabase) { export function addOrUpdateLotField(lotFieldForm, requestSession, connectedDatabase) {
const database = connectedDatabase || sqlite(databasePath); const database = connectedDatabase ?? sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
let result = database let result = database
.prepare(`update LotFields .prepare(`update LotFields

View File

@ -1,13 +1,13 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface LotFieldForm { interface LotFieldForm {
lotId: string | number; lotId: string | number
lotTypeFieldId: string | number; lotTypeFieldId: string | number
lotFieldValue: string; lotFieldValue: string
} }
export function addOrUpdateLotField( export function addOrUpdateLotField(
@ -15,9 +15,9 @@ export function addOrUpdateLotField(
requestSession: recordTypes.PartialSession, requestSession: recordTypes.PartialSession,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): boolean { ): boolean {
const database = connectedDatabase || sqlite(databasePath); const database = connectedDatabase ?? sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
let result = database let result = database
.prepare( .prepare(
@ -32,11 +32,11 @@ export function addOrUpdateLotField(
) )
.run( .run(
lotFieldForm.lotFieldValue, lotFieldForm.lotFieldValue,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
lotFieldForm.lotId, lotFieldForm.lotId,
lotFieldForm.lotTypeFieldId lotFieldForm.lotTypeFieldId
); )
if (result.changes === 0) { if (result.changes === 0) {
result = database result = database
@ -51,18 +51,18 @@ export function addOrUpdateLotField(
lotFieldForm.lotId, lotFieldForm.lotId,
lotFieldForm.lotTypeFieldId, lotFieldForm.lotTypeFieldId,
lotFieldForm.lotFieldValue, lotFieldForm.lotFieldValue,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis rightNowMillis
); )
} }
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return result.changes > 0; return result.changes > 0
} }
export default addOrUpdateLotField; export default addOrUpdateLotField

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface LotOccupancyFieldForm { interface LotOccupancyFieldForm {
lotOccupancyId: string | number; lotOccupancyId: string | number;
occupancyTypeFieldId: string | number; occupancyTypeFieldId: string | number;

View File

@ -1,7 +1,7 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function addOrUpdateLotOccupancyField(lotOccupancyFieldForm, requestSession, connectedDatabase) { export function addOrUpdateLotOccupancyField(lotOccupancyFieldForm, requestSession, connectedDatabase) {
const database = connectedDatabase || sqlite(databasePath); const database = connectedDatabase ?? sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
let result = database let result = database
.prepare(`update LotOccupancyFields .prepare(`update LotOccupancyFields

View File

@ -1,13 +1,13 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface LotOccupancyFieldForm { interface LotOccupancyFieldForm {
lotOccupancyId: string | number; lotOccupancyId: string | number
occupancyTypeFieldId: string | number; occupancyTypeFieldId: string | number
lotOccupancyFieldValue: string; lotOccupancyFieldValue: string
} }
export function addOrUpdateLotOccupancyField( export function addOrUpdateLotOccupancyField(
@ -15,9 +15,9 @@ export function addOrUpdateLotOccupancyField(
requestSession: recordTypes.PartialSession, requestSession: recordTypes.PartialSession,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): boolean { ): boolean {
const database = connectedDatabase || sqlite(databasePath); const database = connectedDatabase ?? sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
let result = database let result = database
.prepare( .prepare(
@ -32,11 +32,11 @@ export function addOrUpdateLotOccupancyField(
) )
.run( .run(
lotOccupancyFieldForm.lotOccupancyFieldValue, lotOccupancyFieldForm.lotOccupancyFieldValue,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
lotOccupancyFieldForm.lotOccupancyId, lotOccupancyFieldForm.lotOccupancyId,
lotOccupancyFieldForm.occupancyTypeFieldId lotOccupancyFieldForm.occupancyTypeFieldId
); )
if (result.changes === 0) { if (result.changes === 0) {
result = database result = database
@ -51,18 +51,18 @@ export function addOrUpdateLotOccupancyField(
lotOccupancyFieldForm.lotOccupancyId, lotOccupancyFieldForm.lotOccupancyId,
lotOccupancyFieldForm.occupancyTypeFieldId, lotOccupancyFieldForm.occupancyTypeFieldId,
lotOccupancyFieldForm.lotOccupancyFieldValue, lotOccupancyFieldForm.lotOccupancyFieldValue,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis rightNowMillis
); )
} }
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return result.changes > 0; return result.changes > 0
} }
export default addOrUpdateLotOccupancyField; export default addOrUpdateLotOccupancyField

View File

@ -1,4 +1,4 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
declare type RecordTable = "FeeCategories" | "LotStatuses" | "LotTypes" | "OccupancyTypes" | "WorkOrderMilestoneTypes" | "WorkOrderTypes"; declare type RecordTable = 'FeeCategories' | 'LotStatuses' | 'LotTypes' | 'OccupancyTypes' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes';
export declare function addRecord(recordTable: RecordTable, recordName: string, orderNumber: number, requestSession: recordTypes.PartialSession): number; export declare function addRecord(recordTable: RecordTable, recordName: string, orderNumber: number, requestSession: recordTypes.PartialSession): number;
export {}; export {};

View File

@ -1,13 +1,13 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { clearCacheByTableName } from "../functions.cache.js"; import { clearCacheByTableName } from '../functions.cache.js';
const recordNameColumns = new Map(); const recordNameColumns = new Map();
recordNameColumns.set("FeeCategories", "feeCategory"); recordNameColumns.set('FeeCategories', 'feeCategory');
recordNameColumns.set("LotStatuses", "lotStatus"); recordNameColumns.set('LotStatuses', 'lotStatus');
recordNameColumns.set("LotTypes", "lotType"); recordNameColumns.set('LotTypes', 'lotType');
recordNameColumns.set("OccupancyTypes", "occupancyType"); recordNameColumns.set('OccupancyTypes', 'occupancyType');
recordNameColumns.set("WorkOrderMilestoneTypes", "workOrderMilestoneType"); recordNameColumns.set('WorkOrderMilestoneTypes', 'workOrderMilestoneType');
recordNameColumns.set("WorkOrderTypes", "workOrderType"); recordNameColumns.set('WorkOrderTypes', 'workOrderType');
export function addRecord(recordTable, recordName, orderNumber, requestSession) { export function addRecord(recordTable, recordName, orderNumber, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();

View File

@ -1,25 +1,25 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
import { clearCacheByTableName } from "../functions.cache.js"; import { clearCacheByTableName } from '../functions.cache.js'
type RecordTable = type RecordTable =
| "FeeCategories" | 'FeeCategories'
| "LotStatuses" | 'LotStatuses'
| "LotTypes" | 'LotTypes'
| "OccupancyTypes" | 'OccupancyTypes'
| "WorkOrderMilestoneTypes" | 'WorkOrderMilestoneTypes'
| "WorkOrderTypes"; | 'WorkOrderTypes'
const recordNameColumns: Map<RecordTable, string> = new Map(); const recordNameColumns: Map<RecordTable, string> = new Map()
recordNameColumns.set("FeeCategories", "feeCategory"); recordNameColumns.set('FeeCategories', 'feeCategory')
recordNameColumns.set("LotStatuses", "lotStatus"); recordNameColumns.set('LotStatuses', 'lotStatus')
recordNameColumns.set("LotTypes", "lotType"); recordNameColumns.set('LotTypes', 'lotType')
recordNameColumns.set("OccupancyTypes", "occupancyType"); recordNameColumns.set('OccupancyTypes', 'occupancyType')
recordNameColumns.set("WorkOrderMilestoneTypes", "workOrderMilestoneType"); recordNameColumns.set('WorkOrderMilestoneTypes', 'workOrderMilestoneType')
recordNameColumns.set("WorkOrderTypes", "workOrderType"); recordNameColumns.set('WorkOrderTypes', 'workOrderType')
export function addRecord( export function addRecord(
recordTable: RecordTable, recordTable: RecordTable,
@ -27,14 +27,14 @@ export function addRecord(
orderNumber: number, orderNumber: number,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): number { ): number {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const result = database const result = database
.prepare( .prepare(
`insert into ${recordTable} ( `insert into ${recordTable} (
${recordNameColumns.get(recordTable)}, orderNumber, ${recordNameColumns.get(recordTable)!}, orderNumber,
recordCreate_userName, recordCreate_timeMillis, recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis) recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?)` values (?, ?, ?, ?, ?, ?)`
@ -42,15 +42,15 @@ export function addRecord(
.run( .run(
recordName, recordName,
orderNumber, orderNumber,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis rightNowMillis
); )
database.close(); database.close()
clearCacheByTableName(recordTable); clearCacheByTableName(recordTable)
return result.lastInsertRowid as number; return result.lastInsertRowid as number
} }

View File

@ -1,4 +1,4 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface AddWorkOrderForm { interface AddWorkOrderForm {
workOrderTypeId: number | string; workOrderTypeId: number | string;
workOrderNumber?: string; workOrderNumber?: string;

View File

@ -1,8 +1,8 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { getNextWorkOrderNumber } from "./getNextWorkOrderNumber.js"; import { getNextWorkOrderNumber } from './getNextWorkOrderNumber.js';
import { addWorkOrderLotOccupancy } from "./addWorkOrderLotOccupancy.js"; import { addWorkOrderLotOccupancy } from './addWorkOrderLotOccupancy.js';
import { dateStringToInteger, dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { dateStringToInteger, dateToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function addWorkOrder(workOrderForm, requestSession) { export function addWorkOrder(workOrderForm, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNow = new Date(); const rightNow = new Date();

View File

@ -1,35 +1,38 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { getNextWorkOrderNumber } from "./getNextWorkOrderNumber.js"; import { getNextWorkOrderNumber } from './getNextWorkOrderNumber.js'
import { addWorkOrderLotOccupancy } from "./addWorkOrderLotOccupancy.js"; import { addWorkOrderLotOccupancy } from './addWorkOrderLotOccupancy.js'
import { dateStringToInteger, dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import {
dateStringToInteger,
dateToInteger
} from '@cityssm/expressjs-server-js/dateTimeFns.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface AddWorkOrderForm { interface AddWorkOrderForm {
workOrderTypeId: number | string; workOrderTypeId: number | string
workOrderNumber?: string; workOrderNumber?: string
workOrderDescription: string; workOrderDescription: string
workOrderOpenDateString?: string; workOrderOpenDateString?: string
workOrderCloseDateString?: string; workOrderCloseDateString?: string
lotOccupancyId?: string; lotOccupancyId?: string
} }
export function addWorkOrder( export function addWorkOrder(
workOrderForm: AddWorkOrderForm, workOrderForm: AddWorkOrderForm,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): number { ): number {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNow = new Date(); const rightNow = new Date()
let workOrderNumber = workOrderForm.workOrderNumber; let workOrderNumber = workOrderForm.workOrderNumber
if (!workOrderNumber) { if (!workOrderNumber) {
workOrderNumber = getNextWorkOrderNumber(database); workOrderNumber = getNextWorkOrderNumber(database)
} }
const result = database const result = database
@ -51,13 +54,13 @@ export function addWorkOrder(
workOrderForm.workOrderCloseDateString workOrderForm.workOrderCloseDateString
? dateStringToInteger(workOrderForm.workOrderCloseDateString) ? dateStringToInteger(workOrderForm.workOrderCloseDateString)
: undefined, : undefined,
requestSession.user.userName, requestSession.user!.userName,
rightNow.getTime(), rightNow.getTime(),
requestSession.user.userName, requestSession.user!.userName,
rightNow.getTime() rightNow.getTime()
); )
const workOrderId = result.lastInsertRowid as number; const workOrderId = result.lastInsertRowid as number
if (workOrderForm.lotOccupancyId) { if (workOrderForm.lotOccupancyId) {
addWorkOrderLotOccupancy( addWorkOrderLotOccupancy(
@ -67,12 +70,12 @@ export function addWorkOrder(
}, },
requestSession, requestSession,
database database
); )
} }
database.close(); database.close()
return workOrderId; return workOrderId
} }
export default addWorkOrder; export default addWorkOrder

View File

@ -1,4 +1,4 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface AddWorkOrderCommentForm { interface AddWorkOrderCommentForm {
workOrderId: string; workOrderId: string;
workOrderComment: string; workOrderComment: string;

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import * as dateTimeFunctions from "@cityssm/expressjs-server-js/dateTimeFns.js"; import * as dateTimeFunctions from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function addWorkOrderComment(workOrderCommentForm, requestSession) { export function addWorkOrderComment(workOrderCommentForm, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNow = new Date(); const rightNow = new Date();

View File

@ -1,23 +1,23 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import * as dateTimeFunctions from "@cityssm/expressjs-server-js/dateTimeFns.js"; import * as dateTimeFunctions from '@cityssm/expressjs-server-js/dateTimeFns.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface AddWorkOrderCommentForm { interface AddWorkOrderCommentForm {
workOrderId: string; workOrderId: string
workOrderComment: string; workOrderComment: string
} }
export function addWorkOrderComment( export function addWorkOrderComment(
workOrderCommentForm: AddWorkOrderCommentForm, workOrderCommentForm: AddWorkOrderCommentForm,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): number { ): number {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNow = new Date(); const rightNow = new Date()
const result = database const result = database
.prepare( .prepare(
@ -34,15 +34,15 @@ export function addWorkOrderComment(
dateTimeFunctions.dateToInteger(rightNow), dateTimeFunctions.dateToInteger(rightNow),
dateTimeFunctions.dateToTimeInteger(rightNow), dateTimeFunctions.dateToTimeInteger(rightNow),
workOrderCommentForm.workOrderComment, workOrderCommentForm.workOrderComment,
requestSession.user.userName, requestSession.user!.userName,
rightNow.getTime(), rightNow.getTime(),
requestSession.user.userName, requestSession.user!.userName,
rightNow.getTime() rightNow.getTime()
); )
database.close(); database.close()
return result.lastInsertRowid as number; return result.lastInsertRowid as number
} }
export default addWorkOrderComment; export default addWorkOrderComment

View File

@ -1,4 +1,4 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface AddWorkOrderLotForm { interface AddWorkOrderLotForm {
workOrderId: number | string; workOrderId: number | string;
lotId: number | string; lotId: number | string;

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function addWorkOrderLot(workOrderLotForm, requestSession) { export function addWorkOrderLot(workOrderLotForm, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();

View File

@ -1,21 +1,21 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface AddWorkOrderLotForm { interface AddWorkOrderLotForm {
workOrderId: number | string; workOrderId: number | string
lotId: number | string; lotId: number | string
} }
export function addWorkOrderLot( export function addWorkOrderLot(
workOrderLotForm: AddWorkOrderLotForm, workOrderLotForm: AddWorkOrderLotForm,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): boolean { ): boolean {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const row: { recordDelete_timeMillis?: number } = database const row: { recordDelete_timeMillis?: number } = database
.prepare( .prepare(
@ -24,7 +24,7 @@ export function addWorkOrderLot(
where workOrderId = ? where workOrderId = ?
and lotId = ?` and lotId = ?`
) )
.get(workOrderLotForm.workOrderId, workOrderLotForm.lotId); .get(workOrderLotForm.workOrderId, workOrderLotForm.lotId)
if (row) { if (row) {
if (row.recordDelete_timeMillis) { if (row.recordDelete_timeMillis) {
@ -41,13 +41,13 @@ export function addWorkOrderLot(
and lotId = ?` and lotId = ?`
) )
.run( .run(
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
workOrderLotForm.workOrderId, workOrderLotForm.workOrderId,
workOrderLotForm.lotId workOrderLotForm.lotId
); )
} }
} else { } else {
database database
@ -61,16 +61,16 @@ export function addWorkOrderLot(
.run( .run(
workOrderLotForm.workOrderId, workOrderLotForm.workOrderId,
workOrderLotForm.lotId, workOrderLotForm.lotId,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis rightNowMillis
); )
} }
database.close(); database.close()
return true; return true
} }
export default addWorkOrderLot; export default addWorkOrderLot

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface AddWorkOrderLotOccupancyForm { interface AddWorkOrderLotOccupancyForm {
workOrderId: number | string; workOrderId: number | string;
lotOccupancyId: number | string; lotOccupancyId: number | string;

View File

@ -1,7 +1,7 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function addWorkOrderLotOccupancy(workOrderLotOccupancyForm, requestSession, connectedDatabase) { export function addWorkOrderLotOccupancy(workOrderLotOccupancyForm, requestSession, connectedDatabase) {
const database = connectedDatabase || sqlite(databasePath); const database = connectedDatabase ?? sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
const row = database const row = database
.prepare(`select recordDelete_timeMillis .prepare(`select recordDelete_timeMillis

View File

@ -1,12 +1,12 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface AddWorkOrderLotOccupancyForm { interface AddWorkOrderLotOccupancyForm {
workOrderId: number | string; workOrderId: number | string
lotOccupancyId: number | string; lotOccupancyId: number | string
} }
export function addWorkOrderLotOccupancy( export function addWorkOrderLotOccupancy(
@ -14,9 +14,9 @@ export function addWorkOrderLotOccupancy(
requestSession: recordTypes.PartialSession, requestSession: recordTypes.PartialSession,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): boolean { ): boolean {
const database = connectedDatabase || sqlite(databasePath); const database = connectedDatabase ?? sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const row: { recordDelete_timeMillis?: number } = database const row: { recordDelete_timeMillis?: number } = database
.prepare( .prepare(
@ -25,7 +25,10 @@ export function addWorkOrderLotOccupancy(
where workOrderId = ? where workOrderId = ?
and lotOccupancyId = ?` and lotOccupancyId = ?`
) )
.get(workOrderLotOccupancyForm.workOrderId, workOrderLotOccupancyForm.lotOccupancyId); .get(
workOrderLotOccupancyForm.workOrderId,
workOrderLotOccupancyForm.lotOccupancyId
)
if (row) { if (row) {
if (row.recordDelete_timeMillis) { if (row.recordDelete_timeMillis) {
@ -42,13 +45,13 @@ export function addWorkOrderLotOccupancy(
and lotOccupancyId = ?` and lotOccupancyId = ?`
) )
.run( .run(
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
workOrderLotOccupancyForm.workOrderId, workOrderLotOccupancyForm.workOrderId,
workOrderLotOccupancyForm.lotOccupancyId workOrderLotOccupancyForm.lotOccupancyId
); )
} }
} else { } else {
database database
@ -62,18 +65,18 @@ export function addWorkOrderLotOccupancy(
.run( .run(
workOrderLotOccupancyForm.workOrderId, workOrderLotOccupancyForm.workOrderId,
workOrderLotOccupancyForm.lotOccupancyId, workOrderLotOccupancyForm.lotOccupancyId,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis rightNowMillis
); )
} }
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return true; return true
} }
export default addWorkOrderLotOccupancy; export default addWorkOrderLotOccupancy

View File

@ -1,4 +1,4 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface AddWorkOrderMilestoneForm { interface AddWorkOrderMilestoneForm {
workOrderId: string | number; workOrderId: string | number;
workOrderMilestoneTypeId?: number | string; workOrderMilestoneTypeId?: number | string;

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { dateStringToInteger, timeStringToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { dateStringToInteger, timeStringToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function addWorkOrderMilestone(milestoneForm, requestSession) { export function addWorkOrderMilestone(milestoneForm, requestSession) {
const rightNow = new Date(); const rightNow = new Date();
const database = sqlite(databasePath); const database = sqlite(databasePath);
@ -13,7 +13,7 @@ export function addWorkOrderMilestone(milestoneForm, requestSession) {
recordCreate_userName, recordCreate_timeMillis, recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis) recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
.run(milestoneForm.workOrderId, milestoneForm.workOrderMilestoneTypeId || undefined, dateStringToInteger(milestoneForm.workOrderMilestoneDateString), milestoneForm.workOrderMilestoneTimeString .run(milestoneForm.workOrderId, milestoneForm.workOrderMilestoneTypeId ?? undefined, dateStringToInteger(milestoneForm.workOrderMilestoneDateString), milestoneForm.workOrderMilestoneTimeString
? timeStringToInteger(milestoneForm.workOrderMilestoneTimeString) ? timeStringToInteger(milestoneForm.workOrderMilestoneTimeString)
: 0, milestoneForm.workOrderMilestoneDescription, milestoneForm.workOrderMilestoneCompletionDateString : 0, milestoneForm.workOrderMilestoneDescription, milestoneForm.workOrderMilestoneCompletionDateString
? dateStringToInteger(milestoneForm.workOrderMilestoneCompletionDateString) ? dateStringToInteger(milestoneForm.workOrderMilestoneCompletionDateString)

View File

@ -1,31 +1,33 @@
import sqlite from "better-sqlite3"; /* eslint-disable @typescript-eslint/indent */
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { import {
dateStringToInteger, dateStringToInteger,
timeStringToInteger timeStringToInteger
} from "@cityssm/expressjs-server-js/dateTimeFns.js"; } from '@cityssm/expressjs-server-js/dateTimeFns.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface AddWorkOrderMilestoneForm { interface AddWorkOrderMilestoneForm {
workOrderId: string | number; workOrderId: string | number
workOrderMilestoneTypeId?: number | string; workOrderMilestoneTypeId?: number | string
workOrderMilestoneDateString: string; workOrderMilestoneDateString: string
workOrderMilestoneTimeString?: string; workOrderMilestoneTimeString?: string
workOrderMilestoneDescription: string; workOrderMilestoneDescription: string
workOrderMilestoneCompletionDateString?: string; workOrderMilestoneCompletionDateString?: string
workOrderMilestoneCompletionTimeString?: string; workOrderMilestoneCompletionTimeString?: string
} }
export function addWorkOrderMilestone( export function addWorkOrderMilestone(
milestoneForm: AddWorkOrderMilestoneForm, milestoneForm: AddWorkOrderMilestoneForm,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): number { ): number {
const rightNow = new Date(); const rightNow = new Date()
const database = sqlite(databasePath); const database = sqlite(databasePath)
const result = database const result = database
.prepare( .prepare(
@ -40,27 +42,31 @@ export function addWorkOrderMilestone(
) )
.run( .run(
milestoneForm.workOrderId, milestoneForm.workOrderId,
milestoneForm.workOrderMilestoneTypeId || undefined, milestoneForm.workOrderMilestoneTypeId ?? undefined,
dateStringToInteger(milestoneForm.workOrderMilestoneDateString), dateStringToInteger(milestoneForm.workOrderMilestoneDateString),
milestoneForm.workOrderMilestoneTimeString milestoneForm.workOrderMilestoneTimeString
? timeStringToInteger(milestoneForm.workOrderMilestoneTimeString) ? timeStringToInteger(milestoneForm.workOrderMilestoneTimeString)
: 0, : 0,
milestoneForm.workOrderMilestoneDescription, milestoneForm.workOrderMilestoneDescription,
milestoneForm.workOrderMilestoneCompletionDateString milestoneForm.workOrderMilestoneCompletionDateString
? dateStringToInteger(milestoneForm.workOrderMilestoneCompletionDateString) ? dateStringToInteger(
milestoneForm.workOrderMilestoneCompletionDateString
)
: undefined, : undefined,
milestoneForm.workOrderMilestoneCompletionTimeString milestoneForm.workOrderMilestoneCompletionTimeString
? timeStringToInteger(milestoneForm.workOrderMilestoneCompletionTimeString) ? timeStringToInteger(
milestoneForm.workOrderMilestoneCompletionTimeString
)
: undefined, : undefined,
requestSession.user.userName, requestSession.user!.userName,
rightNow.getTime(), rightNow.getTime(),
requestSession.user.userName, requestSession.user!.userName,
rightNow.getTime() rightNow.getTime()
); )
database.close(); database.close()
return result.lastInsertRowid as number; return result.lastInsertRowid as number
} }
export default addWorkOrderMilestone; export default addWorkOrderMilestone

View File

@ -1,4 +1,4 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function cleanupDatabase(requestSession: recordTypes.PartialSession): { export declare function cleanupDatabase(requestSession: recordTypes.PartialSession): {
inactivedRecordCount: number; inactivedRecordCount: number;
purgedRecordCount: number; purgedRecordCount: number;

View File

@ -1,11 +1,13 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import * as configFunctions from "../functions.config.js"; import * as configFunctions from '../functions.config.js';
export function cleanupDatabase(requestSession) { export function cleanupDatabase(requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
const recordDelete_timeMillisMin = rightNowMillis - const recordDeleteTimeMillisMin = rightNowMillis -
configFunctions.getProperty("settings.adminCleanup.recordDeleteAgeDays") * 86400 * 1000; configFunctions.getProperty('settings.adminCleanup.recordDeleteAgeDays') *
86400 *
1000;
let inactivedRecordCount = 0; let inactivedRecordCount = 0;
let purgedRecordCount = 0; let purgedRecordCount = 0;
inactivedRecordCount += database inactivedRecordCount += database
@ -17,8 +19,8 @@ export function cleanupDatabase(requestSession) {
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`) select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from WorkOrderComments where recordDelete_timeMillis <= ?") .prepare('delete from WorkOrderComments where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update WorkOrderLotOccupancies .prepare(`update WorkOrderLotOccupancies
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -28,8 +30,8 @@ export function cleanupDatabase(requestSession) {
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`) select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from WorkOrderLotOccupancies where recordDelete_timeMillis <= ?") .prepare('delete from WorkOrderLotOccupancies where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update WorkOrderLots .prepare(`update WorkOrderLots
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -39,8 +41,8 @@ export function cleanupDatabase(requestSession) {
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`) select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from WorkOrderLots where recordDelete_timeMillis <= ?") .prepare('delete from WorkOrderLots where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update WorkOrderMilestones .prepare(`update WorkOrderMilestones
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -50,8 +52,8 @@ export function cleanupDatabase(requestSession) {
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`) select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from WorkOrderMilestones where recordDelete_timeMillis <= ?") .prepare('delete from WorkOrderMilestones where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare(`delete from WorkOrders .prepare(`delete from WorkOrders
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
@ -59,18 +61,18 @@ export function cleanupDatabase(requestSession) {
and workOrderId not in (select workOrderId from WorkOrderLotOccupancies) and workOrderId not in (select workOrderId from WorkOrderLotOccupancies)
and workOrderId not in (select workOrderId from WorkOrderLots) and workOrderId not in (select workOrderId from WorkOrderLots)
and workOrderId not in (select workOrderId from WorkOrderMilestones)`) and workOrderId not in (select workOrderId from WorkOrderMilestones)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare(`delete from WorkOrderMilestoneTypes .prepare(`delete from WorkOrderMilestoneTypes
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and workOrderMilestoneTypeId not in ( and workOrderMilestoneTypeId not in (
select workOrderMilestoneTypeId from WorkOrderMilestones)`) select workOrderMilestoneTypeId from WorkOrderMilestones)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare(`delete from WorkOrderTypes .prepare(`delete from WorkOrderTypes
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and workOrderTypeId not in (select workOrderTypeId from WorkOrders)`) and workOrderTypeId not in (select workOrderTypeId from WorkOrders)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update LotOccupancyComments .prepare(`update LotOccupancyComments
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -80,8 +82,8 @@ export function cleanupDatabase(requestSession) {
select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`) select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotOccupancyComments where recordDelete_timeMillis <= ?") .prepare('delete from LotOccupancyComments where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update LotOccupancyFields .prepare(`update LotOccupancyFields
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -90,8 +92,8 @@ export function cleanupDatabase(requestSession) {
and lotOccupancyId in (select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`) and lotOccupancyId in (select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotOccupancyFields where recordDelete_timeMillis <= ?") .prepare('delete from LotOccupancyFields where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update LotOccupancyOccupants .prepare(`update LotOccupancyOccupants
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -100,14 +102,14 @@ export function cleanupDatabase(requestSession) {
and lotOccupancyId in (select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`) and lotOccupancyId in (select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotOccupancyOccupants where recordDelete_timeMillis <= ?") .prepare('delete from LotOccupancyOccupants where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotOccupancyFees where recordDelete_timeMillis <= ?") .prepare('delete from LotOccupancyFees where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotOccupancyTransactions where recordDelete_timeMillis <= ?") .prepare('delete from LotOccupancyTransactions where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare(`delete from LotOccupancies .prepare(`delete from LotOccupancies
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
@ -117,7 +119,7 @@ export function cleanupDatabase(requestSession) {
and lotOccupancyId not in (select lotOccupancyId from LotOccupancyOccupants) and lotOccupancyId not in (select lotOccupancyId from LotOccupancyOccupants)
and lotOccupancyId not in (select lotOccupancyId from LotOccupancyTransactions) and lotOccupancyId not in (select lotOccupancyId from LotOccupancyTransactions)
and lotOccupancyId not in (select lotOccupancyId from WorkOrderLotOccupancies)`) and lotOccupancyId not in (select lotOccupancyId from WorkOrderLotOccupancies)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update Fees .prepare(`update Fees
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -129,12 +131,12 @@ export function cleanupDatabase(requestSession) {
.prepare(`delete from Fees .prepare(`delete from Fees
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and feeId not in (select feeId from LotOccupancyFees)`) and feeId not in (select feeId from LotOccupancyFees)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare(`delete from FeeCategories .prepare(`delete from FeeCategories
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and feeCategoryId not in (select feeCategoryId from Fees)`) and feeCategoryId not in (select feeCategoryId from Fees)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update OccupancyTypeFields .prepare(`update OccupancyTypeFields
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -146,7 +148,7 @@ export function cleanupDatabase(requestSession) {
.prepare(`delete from OccupancyTypeFields .prepare(`delete from OccupancyTypeFields
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields)`) and occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update OccupancyTypePrints .prepare(`update OccupancyTypePrints
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -155,8 +157,8 @@ export function cleanupDatabase(requestSession) {
and occupancyTypeId in (select occupancyTypeId from OccupancyTypes where recordDelete_timeMillis is not null)`) and occupancyTypeId in (select occupancyTypeId from OccupancyTypes where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from OccupancyTypePrints where recordDelete_timeMillis <= ?") .prepare('delete from OccupancyTypePrints where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare(`delete from OccupancyTypes .prepare(`delete from OccupancyTypes
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
@ -164,12 +166,12 @@ export function cleanupDatabase(requestSession) {
and occupancyTypeId not in (select occupancyTypeId from OccupancyTypePrints) and occupancyTypeId not in (select occupancyTypeId from OccupancyTypePrints)
and occupancyTypeId not in (select occupancyTypeId from LotOccupancies) and occupancyTypeId not in (select occupancyTypeId from LotOccupancies)
and occupancyTypeId not in (select occupancyTypeId from Fees)`) and occupancyTypeId not in (select occupancyTypeId from Fees)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare(`delete from LotOccupantTypes .prepare(`delete from LotOccupantTypes
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and lotOccupantTypeId not in (select lotOccupantTypeId from LotOccupancyOccupants)`) and lotOccupantTypeId not in (select lotOccupantTypeId from LotOccupancyOccupants)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update LotComments .prepare(`update LotComments
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -178,8 +180,8 @@ export function cleanupDatabase(requestSession) {
and lotId in (select lotId from Lots where recordDelete_timeMillis is not null)`) and lotId in (select lotId from Lots where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotComments where recordDelete_timeMillis <= ?") .prepare('delete from LotComments where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update LotFields .prepare(`update LotFields
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -188,8 +190,8 @@ export function cleanupDatabase(requestSession) {
and lotId in (select lotId from Lots where recordDelete_timeMillis is not null)`) and lotId in (select lotId from Lots where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotFields where recordDelete_timeMillis <= ?") .prepare('delete from LotFields where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update Lots .prepare(`update Lots
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -204,12 +206,12 @@ export function cleanupDatabase(requestSession) {
and lotId not in (select lotId from LotFields) and lotId not in (select lotId from LotFields)
and lotId not in (select lotId from LotOccupancies) and lotId not in (select lotId from LotOccupancies)
and lotId not in (select lotId from WorkOrderLots)`) and lotId not in (select lotId from WorkOrderLots)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare(`delete from LotStatuses .prepare(`delete from LotStatuses
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and lotStatusId not in (select lotStatusId from Lots)`) and lotStatusId not in (select lotStatusId from Lots)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database inactivedRecordCount += database
.prepare(`update LotTypeFields .prepare(`update LotTypeFields
set recordDelete_userName = ?, set recordDelete_userName = ?,
@ -221,12 +223,12 @@ export function cleanupDatabase(requestSession) {
.prepare(`delete from LotTypeFields .prepare(`delete from LotTypeFields
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and lotTypeFieldId not in (select lotTypeFieldId from LotFields)`) and lotTypeFieldId not in (select lotTypeFieldId from LotFields)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database purgedRecordCount += database
.prepare(`delete from LotTypes .prepare(`delete from LotTypes
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and lotTypeId not in (select lotTypeId from Lots)`) and lotTypeId not in (select lotTypeId from Lots)`)
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes;
database.close(); database.close();
return { return {
inactivedRecordCount, inactivedRecordCount,

View File

@ -1,21 +1,26 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import * as configFunctions from "../functions.config.js"; import * as configFunctions from '../functions.config.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function cleanupDatabase(requestSession: recordTypes.PartialSession) { export function cleanupDatabase(requestSession: recordTypes.PartialSession): {
const database = sqlite(databasePath); inactivedRecordCount: number
purgedRecordCount: number
} {
const database = sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const recordDelete_timeMillisMin = const recordDeleteTimeMillisMin =
rightNowMillis - rightNowMillis -
configFunctions.getProperty("settings.adminCleanup.recordDeleteAgeDays") * 86_400 * 1000; configFunctions.getProperty('settings.adminCleanup.recordDeleteAgeDays') *
86_400 *
1000
let inactivedRecordCount = 0; let inactivedRecordCount = 0
let purgedRecordCount = 0; let purgedRecordCount = 0
/* /*
* Work Order Comments * Work Order Comments
@ -30,11 +35,11 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and workOrderId in ( and workOrderId in (
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)` select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from WorkOrderComments where recordDelete_timeMillis <= ?") .prepare('delete from WorkOrderComments where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Work Order Lot Occupancies * Work Order Lot Occupancies
@ -49,11 +54,13 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and workOrderId in ( and workOrderId in (
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)` select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from WorkOrderLotOccupancies where recordDelete_timeMillis <= ?") .prepare(
.run(recordDelete_timeMillisMin).changes; 'delete from WorkOrderLotOccupancies where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/* /*
* Work Order Lots * Work Order Lots
@ -68,11 +75,11 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and workOrderId in ( and workOrderId in (
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)` select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from WorkOrderLots where recordDelete_timeMillis <= ?") .prepare('delete from WorkOrderLots where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Work Order Milestones * Work Order Milestones
@ -87,11 +94,13 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and workOrderId in ( and workOrderId in (
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)` select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from WorkOrderMilestones where recordDelete_timeMillis <= ?") .prepare(
.run(recordDelete_timeMillisMin).changes; 'delete from WorkOrderMilestones where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/* /*
* Work Orders * Work Orders
@ -106,7 +115,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and workOrderId not in (select workOrderId from WorkOrderLots) and workOrderId not in (select workOrderId from WorkOrderLots)
and workOrderId not in (select workOrderId from WorkOrderMilestones)` and workOrderId not in (select workOrderId from WorkOrderMilestones)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Work Order Milestone Types * Work Order Milestone Types
@ -119,7 +128,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and workOrderMilestoneTypeId not in ( and workOrderMilestoneTypeId not in (
select workOrderMilestoneTypeId from WorkOrderMilestones)` select workOrderMilestoneTypeId from WorkOrderMilestones)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Work Order Types * Work Order Types
@ -131,7 +140,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and workOrderTypeId not in (select workOrderTypeId from WorkOrders)` and workOrderTypeId not in (select workOrderTypeId from WorkOrders)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Lot Occupancy Comments * Lot Occupancy Comments
@ -146,11 +155,13 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and lotOccupancyId in ( and lotOccupancyId in (
select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)` select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotOccupancyComments where recordDelete_timeMillis <= ?") .prepare(
.run(recordDelete_timeMillisMin).changes; 'delete from LotOccupancyComments where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/* /*
* Lot Occupancy Fields * Lot Occupancy Fields
@ -164,11 +175,13 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and lotOccupancyId in (select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)` and lotOccupancyId in (select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotOccupancyFields where recordDelete_timeMillis <= ?") .prepare(
.run(recordDelete_timeMillisMin).changes; 'delete from LotOccupancyFields where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/* /*
* Lot Occupancy Occupants * Lot Occupancy Occupants
@ -182,11 +195,13 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and lotOccupancyId in (select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)` and lotOccupancyId in (select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotOccupancyOccupants where recordDelete_timeMillis <= ?") .prepare(
.run(recordDelete_timeMillisMin).changes; 'delete from LotOccupancyOccupants where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/* /*
* Lot Occupancy Fees/Transactions * Lot Occupancy Fees/Transactions
@ -194,12 +209,14 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
*/ */
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotOccupancyFees where recordDelete_timeMillis <= ?") .prepare('delete from LotOccupancyFees where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotOccupancyTransactions where recordDelete_timeMillis <= ?") .prepare(
.run(recordDelete_timeMillisMin).changes; 'delete from LotOccupancyTransactions where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/* /*
* Lot Occupancies * Lot Occupancies
@ -216,7 +233,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and lotOccupancyId not in (select lotOccupancyId from LotOccupancyTransactions) and lotOccupancyId not in (select lotOccupancyId from LotOccupancyTransactions)
and lotOccupancyId not in (select lotOccupancyId from WorkOrderLotOccupancies)` and lotOccupancyId not in (select lotOccupancyId from WorkOrderLotOccupancies)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Fees * Fees
@ -230,7 +247,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and feeCategoryId in (select feeCategoryId from FeeCategories where recordDelete_timeMillis is not null)` and feeCategoryId in (select feeCategoryId from FeeCategories where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare( .prepare(
@ -238,7 +255,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and feeId not in (select feeId from LotOccupancyFees)` and feeId not in (select feeId from LotOccupancyFees)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Fee Categories * Fee Categories
@ -250,7 +267,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and feeCategoryId not in (select feeCategoryId from Fees)` and feeCategoryId not in (select feeCategoryId from Fees)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Occupancy Type Fields * Occupancy Type Fields
@ -264,7 +281,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and occupancyTypeId in (select occupancyTypeId from OccupancyTypes where recordDelete_timeMillis is not null)` and occupancyTypeId in (select occupancyTypeId from OccupancyTypes where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare( .prepare(
@ -272,7 +289,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields)` and occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Occupancy Type Prints * Occupancy Type Prints
@ -286,11 +303,13 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and occupancyTypeId in (select occupancyTypeId from OccupancyTypes where recordDelete_timeMillis is not null)` and occupancyTypeId in (select occupancyTypeId from OccupancyTypes where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from OccupancyTypePrints where recordDelete_timeMillis <= ?") .prepare(
.run(recordDelete_timeMillisMin).changes; 'delete from OccupancyTypePrints where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/* /*
* Occupancy Types * Occupancy Types
@ -305,7 +324,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and occupancyTypeId not in (select occupancyTypeId from LotOccupancies) and occupancyTypeId not in (select occupancyTypeId from LotOccupancies)
and occupancyTypeId not in (select occupancyTypeId from Fees)` and occupancyTypeId not in (select occupancyTypeId from Fees)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Lot Occupant Types * Lot Occupant Types
@ -317,7 +336,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and lotOccupantTypeId not in (select lotOccupantTypeId from LotOccupancyOccupants)` and lotOccupantTypeId not in (select lotOccupantTypeId from LotOccupancyOccupants)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Lot Comments * Lot Comments
@ -331,11 +350,11 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and lotId in (select lotId from Lots where recordDelete_timeMillis is not null)` and lotId in (select lotId from Lots where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotComments where recordDelete_timeMillis <= ?") .prepare('delete from LotComments where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Lot Fields * Lot Fields
@ -349,11 +368,11 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and lotId in (select lotId from Lots where recordDelete_timeMillis is not null)` and lotId in (select lotId from Lots where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare("delete from LotFields where recordDelete_timeMillis <= ?") .prepare('delete from LotFields where recordDelete_timeMillis <= ?')
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Lots * Lots
@ -367,7 +386,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and mapId in (select mapId from Maps where recordDelete_timeMillis is not null)` and mapId in (select mapId from Maps where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare( .prepare(
@ -378,7 +397,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and lotId not in (select lotId from LotOccupancies) and lotId not in (select lotId from LotOccupancies)
and lotId not in (select lotId from WorkOrderLots)` and lotId not in (select lotId from WorkOrderLots)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Lot Statuses * Lot Statuses
@ -390,7 +409,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and lotStatusId not in (select lotStatusId from Lots)` and lotStatusId not in (select lotStatusId from Lots)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Lot Type Fields * Lot Type Fields
@ -404,7 +423,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and lotTypeId in (select lotTypeId from LotTypes where recordDelete_timeMillis is not null)` and lotTypeId in (select lotTypeId from LotTypes where recordDelete_timeMillis is not null)`
) )
.run(requestSession.user.userName, rightNowMillis).changes; .run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database purgedRecordCount += database
.prepare( .prepare(
@ -412,7 +431,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and lotTypeFieldId not in (select lotTypeFieldId from LotFields)` and lotTypeFieldId not in (select lotTypeFieldId from LotFields)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
/* /*
* Lot Types * Lot Types
@ -424,14 +443,14 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ? where recordDelete_timeMillis <= ?
and lotTypeId not in (select lotTypeId from Lots)` and lotTypeId not in (select lotTypeId from Lots)`
) )
.run(recordDelete_timeMillisMin).changes; .run(recordDeleteTimeMillisMin).changes
database.close(); database.close()
return { return {
inactivedRecordCount, inactivedRecordCount,
purgedRecordCount purgedRecordCount
}; }
} }
export default cleanupDatabase; export default cleanupDatabase

View File

@ -1,4 +1,4 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface AddWorkOrderForm { interface AddWorkOrderForm {
workOrderId: number | string; workOrderId: number | string;
workOrderCloseDateString?: string; workOrderCloseDateString?: string;

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { dateStringToInteger, dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { dateStringToInteger, dateToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function closeWorkOrder(workOrderForm, requestSession) { export function closeWorkOrder(workOrderForm, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNow = new Date(); const rightNow = new Date();

View File

@ -1,23 +1,26 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { dateStringToInteger, dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import {
dateStringToInteger,
dateToInteger
} from '@cityssm/expressjs-server-js/dateTimeFns.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface AddWorkOrderForm { interface AddWorkOrderForm {
workOrderId: number | string; workOrderId: number | string
workOrderCloseDateString?: string; workOrderCloseDateString?: string
} }
export function closeWorkOrder( export function closeWorkOrder(
workOrderForm: AddWorkOrderForm, workOrderForm: AddWorkOrderForm,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): boolean { ): boolean {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNow = new Date(); const rightNow = new Date()
const result = database const result = database
.prepare( .prepare(
@ -31,14 +34,14 @@ export function closeWorkOrder(
workOrderForm.workOrderCloseDateString workOrderForm.workOrderCloseDateString
? dateStringToInteger(workOrderForm.workOrderCloseDateString) ? dateStringToInteger(workOrderForm.workOrderCloseDateString)
: dateToInteger(new Date()), : dateToInteger(new Date()),
requestSession.user.userName, requestSession.user!.userName,
rightNow.getTime(), rightNow.getTime(),
workOrderForm.workOrderId workOrderForm.workOrderId
); )
database.close(); database.close()
return result.changes > 0; return result.changes > 0
} }
export default closeWorkOrder; export default closeWorkOrder

View File

@ -1,4 +1,4 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface CompleteWorkOrderMilestoneForm { interface CompleteWorkOrderMilestoneForm {
workOrderMilestoneId: string | number; workOrderMilestoneId: string | number;
workOrderMilestoneCompletionDateString?: string; workOrderMilestoneCompletionDateString?: string;

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { dateStringToInteger, dateToInteger, dateToTimeInteger, timeStringToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { dateStringToInteger, dateToInteger, dateToTimeInteger, timeStringToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function completeWorkOrderMilestone(milestoneForm, requestSession) { export function completeWorkOrderMilestone(milestoneForm, requestSession) {
const rightNow = new Date(); const rightNow = new Date();
const database = sqlite(databasePath); const database = sqlite(databasePath);

View File

@ -1,29 +1,31 @@
import sqlite from "better-sqlite3"; /* eslint-disable @typescript-eslint/indent */
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { import {
dateStringToInteger, dateStringToInteger,
dateToInteger, dateToInteger,
dateToTimeInteger, dateToTimeInteger,
timeStringToInteger timeStringToInteger
} from "@cityssm/expressjs-server-js/dateTimeFns.js"; } from '@cityssm/expressjs-server-js/dateTimeFns.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface CompleteWorkOrderMilestoneForm { interface CompleteWorkOrderMilestoneForm {
workOrderMilestoneId: string | number; workOrderMilestoneId: string | number
workOrderMilestoneCompletionDateString?: string; workOrderMilestoneCompletionDateString?: string
workOrderMilestoneCompletionTimeString?: string; workOrderMilestoneCompletionTimeString?: string
} }
export function completeWorkOrderMilestone( export function completeWorkOrderMilestone(
milestoneForm: CompleteWorkOrderMilestoneForm, milestoneForm: CompleteWorkOrderMilestoneForm,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): boolean { ): boolean {
const rightNow = new Date(); const rightNow = new Date()
const database = sqlite(databasePath); const database = sqlite(databasePath)
const result = database const result = database
.prepare( .prepare(
@ -36,19 +38,23 @@ export function completeWorkOrderMilestone(
) )
.run( .run(
milestoneForm.workOrderMilestoneCompletionDateString milestoneForm.workOrderMilestoneCompletionDateString
? dateStringToInteger(milestoneForm.workOrderMilestoneCompletionDateString) ? dateStringToInteger(
milestoneForm.workOrderMilestoneCompletionDateString
)
: dateToInteger(rightNow), : dateToInteger(rightNow),
milestoneForm.workOrderMilestoneCompletionTimeString milestoneForm.workOrderMilestoneCompletionTimeString
? timeStringToInteger(milestoneForm.workOrderMilestoneCompletionTimeString) ? timeStringToInteger(
milestoneForm.workOrderMilestoneCompletionTimeString
)
: dateToTimeInteger(rightNow), : dateToTimeInteger(rightNow),
requestSession.user.userName, requestSession.user!.userName,
rightNow.getTime(), rightNow.getTime(),
milestoneForm.workOrderMilestoneId milestoneForm.workOrderMilestoneId
); )
database.close(); database.close()
return result.changes > 0; return result.changes > 0
} }
export default completeWorkOrderMilestone; export default completeWorkOrderMilestone

View File

@ -1,3 +1,3 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function copyLotOccupancy(oldLotOccupancyId: number | string, requestSession: recordTypes.PartialSession): number; export declare function copyLotOccupancy(oldLotOccupancyId: number | string, requestSession: recordTypes.PartialSession): number;
export default copyLotOccupancy; export default copyLotOccupancy;

View File

@ -1,20 +1,20 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { getLotOccupancy } from "./getLotOccupancy.js"; import { getLotOccupancy } from './getLotOccupancy.js';
import { addLotOccupancy } from "./addLotOccupancy.js"; import { addLotOccupancy } from './addLotOccupancy.js';
import { addLotOccupancyOccupant } from "./addLotOccupancyOccupant.js"; import { addLotOccupancyOccupant } from './addLotOccupancyOccupant.js';
import { dateToString } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { dateToString } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function copyLotOccupancy(oldLotOccupancyId, requestSession) { export function copyLotOccupancy(oldLotOccupancyId, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const oldLotOccupancy = getLotOccupancy(oldLotOccupancyId, database); const oldLotOccupancy = getLotOccupancy(oldLotOccupancyId, database);
const newLotOccupancyId = addLotOccupancy({ const newLotOccupancyId = addLotOccupancy({
lotId: oldLotOccupancy.lotId || "", lotId: oldLotOccupancy.lotId ?? '',
occupancyTypeId: oldLotOccupancy.occupancyTypeId, occupancyTypeId: oldLotOccupancy.occupancyTypeId,
occupancyStartDateString: dateToString(new Date()), occupancyStartDateString: dateToString(new Date()),
occupancyEndDateString: "" occupancyEndDateString: ''
}, requestSession, database); }, requestSession, database);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
for (const occupancyField of oldLotOccupancy.lotOccupancyFields) { for (const occupancyField of oldLotOccupancy.lotOccupancyFields ?? []) {
database database
.prepare(`insert into LotOccupancyFields ( .prepare(`insert into LotOccupancyFields (
lotOccupancyId, occupancyTypeFieldId, lotOccupancyFieldValue, lotOccupancyId, occupancyTypeFieldId, lotOccupancyFieldValue,
@ -23,7 +23,7 @@ export function copyLotOccupancy(oldLotOccupancyId, requestSession) {
values (?, ?, ?, ?, ?, ?, ?)`) values (?, ?, ?, ?, ?, ?, ?)`)
.run(newLotOccupancyId, occupancyField.occupancyTypeFieldId, occupancyField.lotOccupancyFieldValue, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis); .run(newLotOccupancyId, occupancyField.occupancyTypeFieldId, occupancyField.lotOccupancyFieldValue, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
} }
for (const occupant of oldLotOccupancy.lotOccupancyOccupants) { for (const occupant of oldLotOccupancy.lotOccupancyOccupants ?? []) {
addLotOccupancyOccupant({ addLotOccupancyOccupant({
lotOccupancyId: newLotOccupancyId, lotOccupancyId: newLotOccupancyId,
lotOccupantTypeId: occupant.lotOccupantTypeId, lotOccupantTypeId: occupant.lotOccupantTypeId,

View File

@ -1,41 +1,41 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { getLotOccupancy } from "./getLotOccupancy.js"; import { getLotOccupancy } from './getLotOccupancy.js'
import { addLotOccupancy } from "./addLotOccupancy.js"; import { addLotOccupancy } from './addLotOccupancy.js'
import { addLotOccupancyOccupant } from "./addLotOccupancyOccupant.js"; import { addLotOccupancyOccupant } from './addLotOccupancyOccupant.js'
import { dateToString } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { dateToString } from '@cityssm/expressjs-server-js/dateTimeFns.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function copyLotOccupancy( export function copyLotOccupancy(
oldLotOccupancyId: number | string, oldLotOccupancyId: number | string,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): number { ): number {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const oldLotOccupancy = getLotOccupancy(oldLotOccupancyId, database); const oldLotOccupancy = getLotOccupancy(oldLotOccupancyId, database)!
const newLotOccupancyId = addLotOccupancy( const newLotOccupancyId = addLotOccupancy(
{ {
lotId: oldLotOccupancy.lotId || "", lotId: oldLotOccupancy.lotId ?? '',
occupancyTypeId: oldLotOccupancy.occupancyTypeId, occupancyTypeId: oldLotOccupancy.occupancyTypeId!,
occupancyStartDateString: dateToString(new Date()), occupancyStartDateString: dateToString(new Date()),
occupancyEndDateString: "" occupancyEndDateString: ''
}, },
requestSession, requestSession,
database database
); )
/* /*
* Copy Fields * Copy Fields
*/ */
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
for (const occupancyField of oldLotOccupancy.lotOccupancyFields) { for (const occupancyField of oldLotOccupancy.lotOccupancyFields ?? []) {
database database
.prepare( .prepare(
`insert into LotOccupancyFields ( `insert into LotOccupancyFields (
@ -48,39 +48,39 @@ export function copyLotOccupancy(
newLotOccupancyId, newLotOccupancyId,
occupancyField.occupancyTypeFieldId, occupancyField.occupancyTypeFieldId,
occupancyField.lotOccupancyFieldValue, occupancyField.lotOccupancyFieldValue,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis, rightNowMillis,
requestSession.user.userName, requestSession.user!.userName,
rightNowMillis rightNowMillis
); )
} }
/* /*
* Copy Occupants * Copy Occupants
*/ */
for (const occupant of oldLotOccupancy.lotOccupancyOccupants) { for (const occupant of oldLotOccupancy.lotOccupancyOccupants ?? []) {
addLotOccupancyOccupant( addLotOccupancyOccupant(
{ {
lotOccupancyId: newLotOccupancyId, lotOccupancyId: newLotOccupancyId,
lotOccupantTypeId: occupant.lotOccupantTypeId, lotOccupantTypeId: occupant.lotOccupantTypeId!,
occupantName: occupant.occupantName, occupantName: occupant.occupantName!,
occupantAddress1: occupant.occupantAddress1, occupantAddress1: occupant.occupantAddress1!,
occupantAddress2: occupant.occupantAddress2, occupantAddress2: occupant.occupantAddress2!,
occupantCity: occupant.occupantCity, occupantCity: occupant.occupantCity!,
occupantProvince: occupant.occupantProvince, occupantProvince: occupant.occupantProvince!,
occupantPostalCode: occupant.occupantPostalCode, occupantPostalCode: occupant.occupantPostalCode!,
occupantPhoneNumber: occupant.occupantPhoneNumber, occupantPhoneNumber: occupant.occupantPhoneNumber!,
occupantEmailAddress: occupant.occupantEmailAddress occupantEmailAddress: occupant.occupantEmailAddress!
}, },
requestSession, requestSession,
database database
); )
} }
database.close(); database.close()
return newLotOccupancyId; return newLotOccupancyId
} }
export default copyLotOccupancy; export default copyLotOccupancy

View File

@ -1,4 +1,4 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function deleteLotField(lotId: number | string, lotTypeFieldId: number | string, requestSession: recordTypes.PartialSession, connectedDatabase?: sqlite.Database): boolean; export declare function deleteLotField(lotId: number | string, lotTypeFieldId: number | string, requestSession: recordTypes.PartialSession, connectedDatabase?: sqlite.Database): boolean;
export default deleteLotField; export default deleteLotField;

View File

@ -1,7 +1,7 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function deleteLotField(lotId, lotTypeFieldId, requestSession, connectedDatabase) { export function deleteLotField(lotId, lotTypeFieldId, requestSession, connectedDatabase) {
const database = connectedDatabase || sqlite(databasePath); const database = connectedDatabase ?? sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
const result = database const result = database
.prepare(`update LotFields .prepare(`update LotFields

View File

@ -1,8 +1,8 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function deleteLotField( export function deleteLotField(
lotId: number | string, lotId: number | string,
@ -10,9 +10,9 @@ export function deleteLotField(
requestSession: recordTypes.PartialSession, requestSession: recordTypes.PartialSession,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): boolean { ): boolean {
const database = connectedDatabase || sqlite(databasePath); const database = connectedDatabase ?? sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const result = database const result = database
.prepare( .prepare(
@ -22,13 +22,13 @@ export function deleteLotField(
where lotId = ? where lotId = ?
and lotTypeFieldId = ?` and lotTypeFieldId = ?`
) )
.run(requestSession.user.userName, rightNowMillis, lotId, lotTypeFieldId); .run(requestSession.user!.userName, rightNowMillis, lotId, lotTypeFieldId)
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return result.changes > 0; return result.changes > 0
} }
export default deleteLotField; export default deleteLotField

View File

@ -1,3 +1,3 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function deleteLotOccupancyFee(lotOccupancyId: number | string, feeId: number | string, requestSession: recordTypes.PartialSession): boolean; export declare function deleteLotOccupancyFee(lotOccupancyId: number | string, feeId: number | string, requestSession: recordTypes.PartialSession): boolean;
export default deleteLotOccupancyFee; export default deleteLotOccupancyFee;

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function deleteLotOccupancyFee(lotOccupancyId, feeId, requestSession) { export function deleteLotOccupancyFee(lotOccupancyId, feeId, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();

View File

@ -1,17 +1,17 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function deleteLotOccupancyFee( export function deleteLotOccupancyFee(
lotOccupancyId: number | string, lotOccupancyId: number | string,
feeId: number | string, feeId: number | string,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): boolean { ): boolean {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const result = database const result = database
.prepare( .prepare(
@ -21,11 +21,11 @@ export function deleteLotOccupancyFee(
where lotOccupancyId = ? where lotOccupancyId = ?
and feeId = ?` and feeId = ?`
) )
.run(requestSession.user.userName, rightNowMillis, lotOccupancyId, feeId); .run(requestSession.user!.userName, rightNowMillis, lotOccupancyId, feeId)
database.close(); database.close()
return result.changes > 0; return result.changes > 0
} }
export default deleteLotOccupancyFee; export default deleteLotOccupancyFee

View File

@ -1,4 +1,4 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function deleteLotOccupancyField(lotOccupancyId: number | string, occupancyTypeFieldId: number | string, requestSession: recordTypes.PartialSession, connectedDatabase?: sqlite.Database): boolean; export declare function deleteLotOccupancyField(lotOccupancyId: number | string, occupancyTypeFieldId: number | string, requestSession: recordTypes.PartialSession, connectedDatabase?: sqlite.Database): boolean;
export default deleteLotOccupancyField; export default deleteLotOccupancyField;

View File

@ -1,7 +1,7 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function deleteLotOccupancyField(lotOccupancyId, occupancyTypeFieldId, requestSession, connectedDatabase) { export function deleteLotOccupancyField(lotOccupancyId, occupancyTypeFieldId, requestSession, connectedDatabase) {
const database = connectedDatabase || sqlite(databasePath); const database = connectedDatabase ?? sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
const result = database const result = database
.prepare(`update LotOccupancyFields .prepare(`update LotOccupancyFields

View File

@ -1,8 +1,8 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function deleteLotOccupancyField( export function deleteLotOccupancyField(
lotOccupancyId: number | string, lotOccupancyId: number | string,
@ -10,9 +10,9 @@ export function deleteLotOccupancyField(
requestSession: recordTypes.PartialSession, requestSession: recordTypes.PartialSession,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): boolean { ): boolean {
const database = connectedDatabase || sqlite(databasePath); const database = connectedDatabase ?? sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const result = database const result = database
.prepare( .prepare(
@ -22,13 +22,18 @@ export function deleteLotOccupancyField(
where lotOccupancyId = ? where lotOccupancyId = ?
and occupancyTypeFieldId = ?` and occupancyTypeFieldId = ?`
) )
.run(requestSession.user.userName, rightNowMillis, lotOccupancyId, occupancyTypeFieldId); .run(
requestSession.user!.userName,
rightNowMillis,
lotOccupancyId,
occupancyTypeFieldId
)
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return result.changes > 0; return result.changes > 0
} }
export default deleteLotOccupancyField; export default deleteLotOccupancyField

View File

@ -1,3 +1,3 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function deleteLotOccupancyOccupant(lotOccupancyId: number | string, lotOccupantIndex: number | string, requestSession: recordTypes.PartialSession): boolean; export declare function deleteLotOccupancyOccupant(lotOccupancyId: number | string, lotOccupantIndex: number | string, requestSession: recordTypes.PartialSession): boolean;
export default deleteLotOccupancyOccupant; export default deleteLotOccupancyOccupant;

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function deleteLotOccupancyOccupant(lotOccupancyId, lotOccupantIndex, requestSession) { export function deleteLotOccupancyOccupant(lotOccupancyId, lotOccupantIndex, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();

View File

@ -1,17 +1,17 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function deleteLotOccupancyOccupant( export function deleteLotOccupancyOccupant(
lotOccupancyId: number | string, lotOccupancyId: number | string,
lotOccupantIndex: number | string, lotOccupantIndex: number | string,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): boolean { ): boolean {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const result = database const result = database
.prepare( .prepare(
@ -21,11 +21,16 @@ export function deleteLotOccupancyOccupant(
where lotOccupancyId = ? where lotOccupancyId = ?
and lotOccupantIndex = ?` and lotOccupantIndex = ?`
) )
.run(requestSession.user.userName, rightNowMillis, lotOccupancyId, lotOccupantIndex); .run(
requestSession.user!.userName,
rightNowMillis,
lotOccupancyId,
lotOccupantIndex
)
database.close(); database.close()
return result.changes > 0; return result.changes > 0
} }
export default deleteLotOccupancyOccupant; export default deleteLotOccupancyOccupant

View File

@ -1,3 +1,3 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function deleteLotOccupancyTransaction(lotOccupancyId: number | string, transactionIndex: number | string, requestSession: recordTypes.PartialSession): boolean; export declare function deleteLotOccupancyTransaction(lotOccupancyId: number | string, transactionIndex: number | string, requestSession: recordTypes.PartialSession): boolean;
export default deleteLotOccupancyTransaction; export default deleteLotOccupancyTransaction;

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function deleteLotOccupancyTransaction(lotOccupancyId, transactionIndex, requestSession) { export function deleteLotOccupancyTransaction(lotOccupancyId, transactionIndex, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();

View File

@ -1,17 +1,17 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function deleteLotOccupancyTransaction( export function deleteLotOccupancyTransaction(
lotOccupancyId: number | string, lotOccupancyId: number | string,
transactionIndex: number | string, transactionIndex: number | string,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): boolean { ): boolean {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const result = database const result = database
.prepare( .prepare(
@ -21,11 +21,16 @@ export function deleteLotOccupancyTransaction(
where lotOccupancyId = ? where lotOccupancyId = ?
and transactionIndex = ?` and transactionIndex = ?`
) )
.run(requestSession.user.userName, rightNowMillis, lotOccupancyId, transactionIndex); .run(
requestSession.user!.userName,
rightNowMillis,
lotOccupancyId,
transactionIndex
)
database.close(); database.close()
return result.changes > 0; return result.changes > 0
} }
export default deleteLotOccupancyTransaction; export default deleteLotOccupancyTransaction

View File

@ -1,3 +1,3 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function deleteOccupancyTypePrint(occupancyTypeId: number | string, printEJS: string, requestSession: recordTypes.PartialSession): boolean; export declare function deleteOccupancyTypePrint(occupancyTypeId: number | string, printEJS: string, requestSession: recordTypes.PartialSession): boolean;
export default deleteOccupancyTypePrint; export default deleteOccupancyTypePrint;

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { clearCacheByTableName } from "../functions.cache.js"; import { clearCacheByTableName } from '../functions.cache.js';
export function deleteOccupancyTypePrint(occupancyTypeId, printEJS, requestSession) { export function deleteOccupancyTypePrint(occupancyTypeId, printEJS, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
@ -12,7 +12,7 @@ export function deleteOccupancyTypePrint(occupancyTypeId, printEJS, requestSessi
and printEJS = ?`) and printEJS = ?`)
.run(requestSession.user.userName, rightNowMillis, occupancyTypeId, printEJS); .run(requestSession.user.userName, rightNowMillis, occupancyTypeId, printEJS);
database.close(); database.close();
clearCacheByTableName("OccupancyTypePrints"); clearCacheByTableName('OccupancyTypePrints');
return result.changes > 0; return result.changes > 0;
} }
export default deleteOccupancyTypePrint; export default deleteOccupancyTypePrint;

View File

@ -1,19 +1,19 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { clearCacheByTableName } from "../functions.cache.js"; import { clearCacheByTableName } from '../functions.cache.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function deleteOccupancyTypePrint( export function deleteOccupancyTypePrint(
occupancyTypeId: number | string, occupancyTypeId: number | string,
printEJS: string, printEJS: string,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): boolean { ): boolean {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const result = database const result = database
.prepare( .prepare(
@ -23,13 +23,18 @@ export function deleteOccupancyTypePrint(
where occupancyTypeId = ? where occupancyTypeId = ?
and printEJS = ?` and printEJS = ?`
) )
.run(requestSession.user.userName, rightNowMillis, occupancyTypeId, printEJS); .run(
requestSession.user!.userName,
rightNowMillis,
occupancyTypeId,
printEJS
)
database.close(); database.close()
clearCacheByTableName("OccupancyTypePrints"); clearCacheByTableName('OccupancyTypePrints')
return result.changes > 0; return result.changes > 0
} }
export default deleteOccupancyTypePrint; export default deleteOccupancyTypePrint

View File

@ -1,4 +1,4 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
declare type RecordTable = "FeeCategories" | "Fees" | "Lots" | "LotComments" | "LotOccupancies" | "LotOccupancyComments" | "LotOccupantTypes" | "LotStatuses" | "LotTypes" | "LotTypeFields" | "Maps" | "OccupancyTypes" | "OccupancyTypeFields" | "WorkOrders" | "WorkOrderComments" | "WorkOrderMilestones" | "WorkOrderMilestoneTypes" | "WorkOrderTypes"; declare type RecordTable = 'FeeCategories' | 'Fees' | 'Lots' | 'LotComments' | 'LotOccupancies' | 'LotOccupancyComments' | 'LotOccupantTypes' | 'LotStatuses' | 'LotTypes' | 'LotTypeFields' | 'Maps' | 'OccupancyTypes' | 'OccupancyTypeFields' | 'WorkOrders' | 'WorkOrderComments' | 'WorkOrderMilestones' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes';
export declare function deleteRecord(recordTable: RecordTable, recordId: number | string, requestSession: recordTypes.PartialSession): boolean; export declare function deleteRecord(recordTable: RecordTable, recordId: number | string, requestSession: recordTypes.PartialSession): boolean;
export {}; export {};

View File

@ -1,37 +1,44 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { clearCacheByTableName } from "../functions.cache.js"; import { clearCacheByTableName } from '../functions.cache.js';
const recordIdColumns = new Map(); const recordIdColumns = new Map();
recordIdColumns.set("FeeCategories", "feeCategoryId"); recordIdColumns.set('FeeCategories', 'feeCategoryId');
recordIdColumns.set("Fees", "feeId"); recordIdColumns.set('Fees', 'feeId');
recordIdColumns.set("Lots", "lotId"); recordIdColumns.set('Lots', 'lotId');
recordIdColumns.set("LotComments", "lotCommentId"); recordIdColumns.set('LotComments', 'lotCommentId');
recordIdColumns.set("LotOccupancies", "lotOccupancyId"); recordIdColumns.set('LotOccupancies', 'lotOccupancyId');
recordIdColumns.set("LotOccupancyComments", "lotOccupancyCommentId"); recordIdColumns.set('LotOccupancyComments', 'lotOccupancyCommentId');
recordIdColumns.set("LotOccupantTypes", "lotOccupantTypeId"); recordIdColumns.set('LotOccupantTypes', 'lotOccupantTypeId');
recordIdColumns.set("LotStatuses", "lotStatusId"); recordIdColumns.set('LotStatuses', 'lotStatusId');
recordIdColumns.set("LotTypes", "lotTypeId"); recordIdColumns.set('LotTypes', 'lotTypeId');
recordIdColumns.set("LotTypeFields", "lotTypeId"); recordIdColumns.set('LotTypeFields', 'lotTypeId');
recordIdColumns.set("Maps", "mapId"); recordIdColumns.set('Maps', 'mapId');
recordIdColumns.set("OccupancyTypes", "occupancyTypeId"); recordIdColumns.set('OccupancyTypes', 'occupancyTypeId');
recordIdColumns.set("OccupancyTypeFields", "occupancyTypeFieldId"); recordIdColumns.set('OccupancyTypeFields', 'occupancyTypeFieldId');
recordIdColumns.set("WorkOrders", "workOrderId"); recordIdColumns.set('WorkOrders', 'workOrderId');
recordIdColumns.set("WorkOrderComments", "workOrderCommentId"); recordIdColumns.set('WorkOrderComments', 'workOrderCommentId');
recordIdColumns.set("WorkOrderMilestones", "workOrderMilestoneId"); recordIdColumns.set('WorkOrderMilestones', 'workOrderMilestoneId');
recordIdColumns.set("WorkOrderMilestoneTypes", "workOrderMilestoneTypeId"); recordIdColumns.set('WorkOrderMilestoneTypes', 'workOrderMilestoneTypeId');
recordIdColumns.set("WorkOrderTypes", "workOrderTypeId"); recordIdColumns.set('WorkOrderTypes', 'workOrderTypeId');
const relatedTables = new Map(); const relatedTables = new Map();
relatedTables.set("FeeCategories", ["Fees"]); relatedTables.set('FeeCategories', ['Fees']);
relatedTables.set("Lots", ["LotFields", "LotComments"]); relatedTables.set('Lots', ['LotFields', 'LotComments']);
relatedTables.set("LotOccupancies", ["LotOccupancyOccupants", "LotOccupancyFields", "LotOccupancyComments"]); relatedTables.set('LotOccupancies', [
relatedTables.set("LotTypes", ["LotTypeFields"]); 'LotOccupancyOccupants',
relatedTables.set("Maps", ["Lots"]); 'LotOccupancyFields',
relatedTables.set("OccupancyTypes", ["OccupancyTypePrints", "OccupancyTypeFields"]); 'LotOccupancyComments'
relatedTables.set("WorkOrders", [ ]);
"WorkOrderMilestones", relatedTables.set('LotTypes', ['LotTypeFields']);
"WorkOrderLots", relatedTables.set('Maps', ['Lots']);
"WorkOrderLotOccupancies", relatedTables.set('OccupancyTypes', [
"WorkOrderComments" 'OccupancyTypePrints',
'OccupancyTypeFields'
]);
relatedTables.set('WorkOrders', [
'WorkOrderMilestones',
'WorkOrderLots',
'WorkOrderLotOccupancies',
'WorkOrderComments'
]); ]);
export function deleteRecord(recordTable, recordId, requestSession) { export function deleteRecord(recordTable, recordId, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
@ -43,7 +50,7 @@ export function deleteRecord(recordTable, recordId, requestSession) {
where ${recordIdColumns.get(recordTable)} = ? where ${recordIdColumns.get(recordTable)} = ?
and recordDelete_timeMillis is null`) and recordDelete_timeMillis is null`)
.run(requestSession.user.userName, rightNowMillis, recordId); .run(requestSession.user.userName, rightNowMillis, recordId);
for (const relatedTable of relatedTables.get(recordTable) || []) { for (const relatedTable of relatedTables.get(recordTable) ?? []) {
database database
.prepare(`update ${relatedTable} .prepare(`update ${relatedTable}
set recordDelete_userName = ?, set recordDelete_userName = ?,

View File

@ -1,99 +1,106 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { clearCacheByTableName } from "../functions.cache.js"; import { clearCacheByTableName } from '../functions.cache.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
type RecordTable = type RecordTable =
| "FeeCategories" | 'FeeCategories'
| "Fees" | 'Fees'
| "Lots" | 'Lots'
| "LotComments" | 'LotComments'
| "LotOccupancies" | 'LotOccupancies'
| "LotOccupancyComments" | 'LotOccupancyComments'
| "LotOccupantTypes" | 'LotOccupantTypes'
| "LotStatuses" | 'LotStatuses'
| "LotTypes" | 'LotTypes'
| "LotTypeFields" | 'LotTypeFields'
| "Maps" | 'Maps'
| "OccupancyTypes" | 'OccupancyTypes'
| "OccupancyTypeFields" | 'OccupancyTypeFields'
| "WorkOrders" | 'WorkOrders'
| "WorkOrderComments" | 'WorkOrderComments'
| "WorkOrderMilestones" | 'WorkOrderMilestones'
| "WorkOrderMilestoneTypes" | 'WorkOrderMilestoneTypes'
| "WorkOrderTypes"; | 'WorkOrderTypes'
const recordIdColumns: Map<RecordTable, string> = new Map(); const recordIdColumns: Map<RecordTable, string> = new Map()
recordIdColumns.set("FeeCategories", "feeCategoryId"); recordIdColumns.set('FeeCategories', 'feeCategoryId')
recordIdColumns.set("Fees", "feeId"); recordIdColumns.set('Fees', 'feeId')
recordIdColumns.set("Lots", "lotId"); recordIdColumns.set('Lots', 'lotId')
recordIdColumns.set("LotComments", "lotCommentId"); recordIdColumns.set('LotComments', 'lotCommentId')
recordIdColumns.set("LotOccupancies", "lotOccupancyId"); recordIdColumns.set('LotOccupancies', 'lotOccupancyId')
recordIdColumns.set("LotOccupancyComments", "lotOccupancyCommentId"); recordIdColumns.set('LotOccupancyComments', 'lotOccupancyCommentId')
recordIdColumns.set("LotOccupantTypes", "lotOccupantTypeId"); recordIdColumns.set('LotOccupantTypes', 'lotOccupantTypeId')
recordIdColumns.set("LotStatuses", "lotStatusId"); recordIdColumns.set('LotStatuses', 'lotStatusId')
recordIdColumns.set("LotTypes", "lotTypeId"); recordIdColumns.set('LotTypes', 'lotTypeId')
recordIdColumns.set("LotTypeFields", "lotTypeId"); recordIdColumns.set('LotTypeFields', 'lotTypeId')
recordIdColumns.set("Maps", "mapId"); recordIdColumns.set('Maps', 'mapId')
recordIdColumns.set("OccupancyTypes", "occupancyTypeId"); recordIdColumns.set('OccupancyTypes', 'occupancyTypeId')
recordIdColumns.set("OccupancyTypeFields", "occupancyTypeFieldId"); recordIdColumns.set('OccupancyTypeFields', 'occupancyTypeFieldId')
recordIdColumns.set("WorkOrders", "workOrderId"); recordIdColumns.set('WorkOrders', 'workOrderId')
recordIdColumns.set("WorkOrderComments", "workOrderCommentId"); recordIdColumns.set('WorkOrderComments', 'workOrderCommentId')
recordIdColumns.set("WorkOrderMilestones", "workOrderMilestoneId"); recordIdColumns.set('WorkOrderMilestones', 'workOrderMilestoneId')
recordIdColumns.set("WorkOrderMilestoneTypes", "workOrderMilestoneTypeId"); recordIdColumns.set('WorkOrderMilestoneTypes', 'workOrderMilestoneTypeId')
recordIdColumns.set("WorkOrderTypes", "workOrderTypeId"); recordIdColumns.set('WorkOrderTypes', 'workOrderTypeId')
const relatedTables: Map<RecordTable, string[]> = new Map(); const relatedTables: Map<RecordTable, string[]> = new Map()
relatedTables.set("FeeCategories", ["Fees"]); relatedTables.set('FeeCategories', ['Fees'])
relatedTables.set("Lots", ["LotFields", "LotComments"]); relatedTables.set('Lots', ['LotFields', 'LotComments'])
relatedTables.set("LotOccupancies", ["LotOccupancyOccupants", "LotOccupancyFields", "LotOccupancyComments"]); relatedTables.set('LotOccupancies', [
relatedTables.set("LotTypes", ["LotTypeFields"]); 'LotOccupancyOccupants',
relatedTables.set("Maps", ["Lots"]); 'LotOccupancyFields',
relatedTables.set("OccupancyTypes", ["OccupancyTypePrints", "OccupancyTypeFields"]); 'LotOccupancyComments'
relatedTables.set("WorkOrders", [ ])
"WorkOrderMilestones", relatedTables.set('LotTypes', ['LotTypeFields'])
"WorkOrderLots", relatedTables.set('Maps', ['Lots'])
"WorkOrderLotOccupancies", relatedTables.set('OccupancyTypes', [
"WorkOrderComments" 'OccupancyTypePrints',
]); 'OccupancyTypeFields'
])
relatedTables.set('WorkOrders', [
'WorkOrderMilestones',
'WorkOrderLots',
'WorkOrderLotOccupancies',
'WorkOrderComments'
])
export function deleteRecord( export function deleteRecord(
recordTable: RecordTable, recordTable: RecordTable,
recordId: number | string, recordId: number | string,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): boolean { ): boolean {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const result = database const result = database
.prepare( .prepare(
`update ${recordTable} `update ${recordTable}
set recordDelete_userName = ?, set recordDelete_userName = ?,
recordDelete_timeMillis = ? recordDelete_timeMillis = ?
where ${recordIdColumns.get(recordTable)} = ? where ${recordIdColumns.get(recordTable)!} = ?
and recordDelete_timeMillis is null` and recordDelete_timeMillis is null`
) )
.run(requestSession.user.userName, rightNowMillis, recordId); .run(requestSession.user!.userName, rightNowMillis, recordId)
for (const relatedTable of relatedTables.get(recordTable) || []) { for (const relatedTable of relatedTables.get(recordTable) ?? []) {
database database
.prepare( .prepare(
`update ${relatedTable} `update ${relatedTable}
set recordDelete_userName = ?, set recordDelete_userName = ?,
recordDelete_timeMillis = ? recordDelete_timeMillis = ?
where ${recordIdColumns.get(recordTable)} = ? where ${recordIdColumns.get(recordTable)!} = ?
and recordDelete_timeMillis is null` and recordDelete_timeMillis is null`
) )
.run(requestSession.user.userName, rightNowMillis, recordId); .run(requestSession.user!.userName, rightNowMillis, recordId)
} }
database.close(); database.close()
clearCacheByTableName(recordTable); clearCacheByTableName(recordTable)
return result.changes > 0; return result.changes > 0
} }

View File

@ -1,3 +1,3 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function deleteWorkOrderLot(workOrderId: number | string, lotId: number | string, requestSession: recordTypes.PartialSession): boolean; export declare function deleteWorkOrderLot(workOrderId: number | string, lotId: number | string, requestSession: recordTypes.PartialSession): boolean;
export default deleteWorkOrderLot; export default deleteWorkOrderLot;

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function deleteWorkOrderLot(workOrderId, lotId, requestSession) { export function deleteWorkOrderLot(workOrderId, lotId, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();

View File

@ -1,17 +1,17 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function deleteWorkOrderLot( export function deleteWorkOrderLot(
workOrderId: number | string, workOrderId: number | string,
lotId: number | string, lotId: number | string,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): boolean { ): boolean {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const result = database const result = database
.prepare( .prepare(
@ -21,11 +21,11 @@ export function deleteWorkOrderLot(
where workOrderId = ? where workOrderId = ?
and lotId = ?` and lotId = ?`
) )
.run(requestSession.user.userName, rightNowMillis, workOrderId, lotId); .run(requestSession.user!.userName, rightNowMillis, workOrderId, lotId)
database.close(); database.close()
return result.changes > 0; return result.changes > 0
} }
export default deleteWorkOrderLot; export default deleteWorkOrderLot

View File

@ -1,3 +1,3 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function deleteWorkOrderLotOccupancy(workOrderId: number | string, lotOccupancyId: number | string, requestSession: recordTypes.PartialSession): boolean; export declare function deleteWorkOrderLotOccupancy(workOrderId: number | string, lotOccupancyId: number | string, requestSession: recordTypes.PartialSession): boolean;
export default deleteWorkOrderLotOccupancy; export default deleteWorkOrderLotOccupancy;

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function deleteWorkOrderLotOccupancy(workOrderId, lotOccupancyId, requestSession) { export function deleteWorkOrderLotOccupancy(workOrderId, lotOccupancyId, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();

View File

@ -1,17 +1,17 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function deleteWorkOrderLotOccupancy( export function deleteWorkOrderLotOccupancy(
workOrderId: number | string, workOrderId: number | string,
lotOccupancyId: number | string, lotOccupancyId: number | string,
requestSession: recordTypes.PartialSession requestSession: recordTypes.PartialSession
): boolean { ): boolean {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const rightNowMillis = Date.now(); const rightNowMillis = Date.now()
const result = database const result = database
.prepare( .prepare(
@ -21,11 +21,16 @@ export function deleteWorkOrderLotOccupancy(
where workOrderId = ? where workOrderId = ?
and lotOccupancyId = ?` and lotOccupancyId = ?`
) )
.run(requestSession.user.userName, rightNowMillis, workOrderId, lotOccupancyId); .run(
requestSession.user!.userName,
rightNowMillis,
workOrderId,
lotOccupancyId
)
database.close(); database.close()
return result.changes > 0; return result.changes > 0
} }
export default deleteWorkOrderLotOccupancy; export default deleteWorkOrderLotOccupancy

View File

@ -1,14 +1,14 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface GetLotOccupanciesFilters { interface GetLotOccupanciesFilters {
lotId?: number | string; lotId?: number | string;
occupancyTime?: "" | "past" | "current" | "future"; occupancyTime?: '' | 'past' | 'current' | 'future';
occupancyStartDateString?: string; occupancyStartDateString?: string;
occupancyEffectiveDateString?: string; occupancyEffectiveDateString?: string;
occupantName?: string; occupantName?: string;
occupancyTypeId?: number | string; occupancyTypeId?: number | string;
mapId?: number | string; mapId?: number | string;
lotNameSearchType?: "" | "startsWith" | "endsWith"; lotNameSearchType?: '' | 'startsWith' | 'endsWith';
lotName?: string; lotName?: string;
lotTypeId?: number | string; lotTypeId?: number | string;
workOrderId?: number | string; workOrderId?: number | string;

View File

@ -1,60 +1,60 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { dateIntegerToString, dateStringToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { dateIntegerToString, dateStringToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
import * as configFunctions from "../functions.config.js"; import * as configFunctions from '../functions.config.js';
import { getOccupancyTypeById } from "../functions.cache.js"; import { getOccupancyTypeById } from '../functions.cache.js';
import { getLotOccupancyOccupants } from "./getLotOccupancyOccupants.js"; import { getLotOccupancyOccupants } from './getLotOccupancyOccupants.js';
import { getLotNameWhereClause, getOccupancyTimeWhereClause, getOccupantNameWhereClause } from "../functions.sqlFilters.js"; import { getLotNameWhereClause, getOccupancyTimeWhereClause, getOccupantNameWhereClause } from '../functions.sqlFilters.js';
function buildWhereClause(filters) { function buildWhereClause(filters) {
let sqlWhereClause = " where o.recordDelete_timeMillis is null"; let sqlWhereClause = ' where o.recordDelete_timeMillis is null';
const sqlParameters = []; const sqlParameters = [];
if (filters.lotId) { if (filters.lotId) {
sqlWhereClause += " and o.lotId = ?"; sqlWhereClause += ' and o.lotId = ?';
sqlParameters.push(filters.lotId); sqlParameters.push(filters.lotId);
} }
const lotNameFilters = getLotNameWhereClause(filters.lotName, filters.lotNameSearchType, "l"); const lotNameFilters = getLotNameWhereClause(filters.lotName, filters.lotNameSearchType ?? '', 'l');
sqlWhereClause += lotNameFilters.sqlWhereClause; sqlWhereClause += lotNameFilters.sqlWhereClause;
sqlParameters.push(...lotNameFilters.sqlParameters); sqlParameters.push(...lotNameFilters.sqlParameters);
const occupantNameFilters = getOccupantNameWhereClause(filters.occupantName, "o"); const occupantNameFilters = getOccupantNameWhereClause(filters.occupantName, 'o');
if (occupantNameFilters.sqlParameters.length > 0) { if (occupantNameFilters.sqlParameters.length > 0) {
sqlWhereClause += sqlWhereClause +=
" and o.lotOccupancyId in (select lotOccupancyId from LotOccupancyOccupants o where recordDelete_timeMillis is null" + ' and o.lotOccupancyId in (select lotOccupancyId from LotOccupancyOccupants o where recordDelete_timeMillis is null' +
occupantNameFilters.sqlWhereClause + occupantNameFilters.sqlWhereClause +
")"; ')';
sqlParameters.push(...occupantNameFilters.sqlParameters); sqlParameters.push(...occupantNameFilters.sqlParameters);
} }
if (filters.occupancyTypeId) { if (filters.occupancyTypeId) {
sqlWhereClause += " and o.occupancyTypeId = ?"; sqlWhereClause += ' and o.occupancyTypeId = ?';
sqlParameters.push(filters.occupancyTypeId); sqlParameters.push(filters.occupancyTypeId);
} }
const occupancyTimeFilters = getOccupancyTimeWhereClause(filters.occupancyTime, "o"); const occupancyTimeFilters = getOccupancyTimeWhereClause(filters.occupancyTime ?? '', 'o');
sqlWhereClause += occupancyTimeFilters.sqlWhereClause; sqlWhereClause += occupancyTimeFilters.sqlWhereClause;
sqlParameters.push(...occupancyTimeFilters.sqlParameters); sqlParameters.push(...occupancyTimeFilters.sqlParameters);
if (filters.occupancyStartDateString) { if (filters.occupancyStartDateString) {
sqlWhereClause += " and o.occupancyStartDate = ?"; sqlWhereClause += ' and o.occupancyStartDate = ?';
sqlParameters.push(dateStringToInteger(filters.occupancyStartDateString)); sqlParameters.push(dateStringToInteger(filters.occupancyStartDateString));
} }
if (filters.occupancyEffectiveDateString) { if (filters.occupancyEffectiveDateString) {
sqlWhereClause += sqlWhereClause +=
" and (o.occupancyStartDate <= ? and (o.occupancyEndDate is null or o.occupancyEndDate >= ?))"; ' and (o.occupancyStartDate <= ? and (o.occupancyEndDate is null or o.occupancyEndDate >= ?))';
sqlParameters.push(dateStringToInteger(filters.occupancyEffectiveDateString), dateStringToInteger(filters.occupancyEffectiveDateString)); sqlParameters.push(dateStringToInteger(filters.occupancyEffectiveDateString), dateStringToInteger(filters.occupancyEffectiveDateString));
} }
if (filters.mapId) { if (filters.mapId) {
sqlWhereClause += " and l.mapId = ?"; sqlWhereClause += ' and l.mapId = ?';
sqlParameters.push(filters.mapId); sqlParameters.push(filters.mapId);
} }
if (filters.lotTypeId) { if (filters.lotTypeId) {
sqlWhereClause += " and l.lotTypeId = ?"; sqlWhereClause += ' and l.lotTypeId = ?';
sqlParameters.push(filters.lotTypeId); sqlParameters.push(filters.lotTypeId);
} }
if (filters.workOrderId) { if (filters.workOrderId) {
sqlWhereClause += sqlWhereClause +=
" and o.lotOccupancyId in (select lotOccupancyId from WorkOrderLotOccupancies where recordDelete_timeMillis is null and workOrderId = ?)"; ' and o.lotOccupancyId in (select lotOccupancyId from WorkOrderLotOccupancies where recordDelete_timeMillis is null and workOrderId = ?)';
sqlParameters.push(filters.workOrderId); sqlParameters.push(filters.workOrderId);
} }
if (filters.notWorkOrderId) { if (filters.notWorkOrderId) {
sqlWhereClause += sqlWhereClause +=
" and o.lotOccupancyId not in (select lotOccupancyId from WorkOrderLotOccupancies where recordDelete_timeMillis is null and workOrderId = ?)"; ' and o.lotOccupancyId not in (select lotOccupancyId from WorkOrderLotOccupancies where recordDelete_timeMillis is null and workOrderId = ?)';
sqlParameters.push(filters.notWorkOrderId); sqlParameters.push(filters.notWorkOrderId);
} }
return { return {
@ -63,19 +63,19 @@ function buildWhereClause(filters) {
}; };
} }
export function getLotOccupancies(filters, options, connectedDatabase) { export function getLotOccupancies(filters, options, connectedDatabase) {
const database = connectedDatabase || const database = connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); });
database.function("userFn_dateIntegerToString", dateIntegerToString); database.function('userFn_dateIntegerToString', dateIntegerToString);
const { sqlWhereClause, sqlParameters } = buildWhereClause(filters); const { sqlWhereClause, sqlParameters } = buildWhereClause(filters);
let count = options.limit; let count = options.limit;
const isLimited = options.limit !== -1; const isLimited = options.limit !== -1;
if (isLimited) { if (isLimited) {
count = database count = database
.prepare("select count(*) as recordCount" + .prepare('select count(*) as recordCount' +
" from LotOccupancies o" + ' from LotOccupancies o' +
" left join Lots l on o.lotId = l.lotId" + ' left join Lots l on o.lotId = l.lotId' +
sqlWhereClause) sqlWhereClause)
.get(sqlParameters).recordCount; .get(sqlParameters).recordCount;
} }
@ -95,7 +95,7 @@ export function getLotOccupancies(filters, options, connectedDatabase) {
left join Maps m on l.mapId = m.mapId left join Maps m on l.mapId = m.mapId
${sqlWhereClause} ${sqlWhereClause}
order by o.occupancyStartDate desc, ifnull(o.occupancyEndDate, 99999999) desc, l.lotName, o.lotId, o.lotOccupancyId desc` + order by o.occupancyStartDate desc, ifnull(o.occupancyEndDate, 99999999) desc, l.lotName, o.lotId, o.lotOccupancyId desc` +
(isLimited ? ` limit ${options.limit} offset ${options.offset}` : "")) (isLimited ? ` limit ${options.limit} offset ${options.offset}` : ''))
.all(sqlParameters); .all(sqlParameters);
if (!isLimited) { if (!isLimited) {
count = lotOccupancies.length; count = lotOccupancies.length;
@ -103,8 +103,8 @@ export function getLotOccupancies(filters, options, connectedDatabase) {
for (const lotOccupancy of lotOccupancies) { for (const lotOccupancy of lotOccupancies) {
const occupancyType = getOccupancyTypeById(lotOccupancy.occupancyTypeId); const occupancyType = getOccupancyTypeById(lotOccupancy.occupancyTypeId);
if (occupancyType) { if (occupancyType) {
lotOccupancy.printEJS = occupancyType.occupancyTypePrints.includes("*") lotOccupancy.printEJS = (occupancyType.occupancyTypePrints ?? []).includes('*')
? configFunctions.getProperty("settings.lotOccupancy.prints")[0] ? configFunctions.getProperty('settings.lotOccupancy.prints')[0]
: occupancyType.occupancyTypePrints[0]; : occupancyType.occupancyTypePrints[0];
} }
if (options.includeOccupants) { if (options.includeOccupants) {

View File

@ -1,119 +1,131 @@
import sqlite from "better-sqlite3"; /* eslint-disable @typescript-eslint/indent */
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { import {
dateIntegerToString, dateIntegerToString,
dateStringToInteger dateStringToInteger
} from "@cityssm/expressjs-server-js/dateTimeFns.js"; } from '@cityssm/expressjs-server-js/dateTimeFns.js'
import * as configFunctions from "../functions.config.js"; import * as configFunctions from '../functions.config.js'
import { getOccupancyTypeById } from "../functions.cache.js"; import { getOccupancyTypeById } from '../functions.cache.js'
import { getLotOccupancyOccupants } from "./getLotOccupancyOccupants.js"; import { getLotOccupancyOccupants } from './getLotOccupancyOccupants.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
import { import {
getLotNameWhereClause, getLotNameWhereClause,
getOccupancyTimeWhereClause, getOccupancyTimeWhereClause,
getOccupantNameWhereClause getOccupantNameWhereClause
} from "../functions.sqlFilters.js"; } from '../functions.sqlFilters.js'
interface GetLotOccupanciesFilters { interface GetLotOccupanciesFilters {
lotId?: number | string; lotId?: number | string
occupancyTime?: "" | "past" | "current" | "future"; occupancyTime?: '' | 'past' | 'current' | 'future'
occupancyStartDateString?: string; occupancyStartDateString?: string
occupancyEffectiveDateString?: string; occupancyEffectiveDateString?: string
occupantName?: string; occupantName?: string
occupancyTypeId?: number | string; occupancyTypeId?: number | string
mapId?: number | string; mapId?: number | string
lotNameSearchType?: "" | "startsWith" | "endsWith"; lotNameSearchType?: '' | 'startsWith' | 'endsWith'
lotName?: string; lotName?: string
lotTypeId?: number | string; lotTypeId?: number | string
workOrderId?: number | string; workOrderId?: number | string
notWorkOrderId?: number | string; notWorkOrderId?: number | string
} }
interface GetLotOccupanciesOptions { interface GetLotOccupanciesOptions {
limit: -1 | number; limit: -1 | number
offset: number; offset: number
includeOccupants: boolean; includeOccupants: boolean
} }
function buildWhereClause(filters: GetLotOccupanciesFilters): { function buildWhereClause(filters: GetLotOccupanciesFilters): {
sqlWhereClause: string; sqlWhereClause: string
sqlParameters: unknown[]; sqlParameters: unknown[]
} { } {
let sqlWhereClause = " where o.recordDelete_timeMillis is null"; let sqlWhereClause = ' where o.recordDelete_timeMillis is null'
const sqlParameters: unknown[] = []; const sqlParameters: unknown[] = []
if (filters.lotId) { if (filters.lotId) {
sqlWhereClause += " and o.lotId = ?"; sqlWhereClause += ' and o.lotId = ?'
sqlParameters.push(filters.lotId); sqlParameters.push(filters.lotId)
} }
const lotNameFilters = getLotNameWhereClause(filters.lotName, filters.lotNameSearchType, "l"); const lotNameFilters = getLotNameWhereClause(
sqlWhereClause += lotNameFilters.sqlWhereClause; filters.lotName,
sqlParameters.push(...lotNameFilters.sqlParameters); filters.lotNameSearchType ?? '',
'l'
)
sqlWhereClause += lotNameFilters.sqlWhereClause
sqlParameters.push(...lotNameFilters.sqlParameters)
const occupantNameFilters = getOccupantNameWhereClause(filters.occupantName, "o"); const occupantNameFilters = getOccupantNameWhereClause(
filters.occupantName,
'o'
)
if (occupantNameFilters.sqlParameters.length > 0) { if (occupantNameFilters.sqlParameters.length > 0) {
sqlWhereClause += sqlWhereClause +=
" and o.lotOccupancyId in (select lotOccupancyId from LotOccupancyOccupants o where recordDelete_timeMillis is null" + ' and o.lotOccupancyId in (select lotOccupancyId from LotOccupancyOccupants o where recordDelete_timeMillis is null' +
occupantNameFilters.sqlWhereClause + occupantNameFilters.sqlWhereClause +
")"; ')'
sqlParameters.push(...occupantNameFilters.sqlParameters); sqlParameters.push(...occupantNameFilters.sqlParameters)
} }
if (filters.occupancyTypeId) { if (filters.occupancyTypeId) {
sqlWhereClause += " and o.occupancyTypeId = ?"; sqlWhereClause += ' and o.occupancyTypeId = ?'
sqlParameters.push(filters.occupancyTypeId); sqlParameters.push(filters.occupancyTypeId)
} }
const occupancyTimeFilters = getOccupancyTimeWhereClause(filters.occupancyTime, "o"); const occupancyTimeFilters = getOccupancyTimeWhereClause(
sqlWhereClause += occupancyTimeFilters.sqlWhereClause; filters.occupancyTime ?? '',
sqlParameters.push(...occupancyTimeFilters.sqlParameters); 'o'
)
sqlWhereClause += occupancyTimeFilters.sqlWhereClause
sqlParameters.push(...occupancyTimeFilters.sqlParameters)
if (filters.occupancyStartDateString) { if (filters.occupancyStartDateString) {
sqlWhereClause += " and o.occupancyStartDate = ?"; sqlWhereClause += ' and o.occupancyStartDate = ?'
sqlParameters.push(dateStringToInteger(filters.occupancyStartDateString)); sqlParameters.push(dateStringToInteger(filters.occupancyStartDateString))
} }
if (filters.occupancyEffectiveDateString) { if (filters.occupancyEffectiveDateString) {
sqlWhereClause += sqlWhereClause +=
" and (o.occupancyStartDate <= ? and (o.occupancyEndDate is null or o.occupancyEndDate >= ?))"; ' and (o.occupancyStartDate <= ? and (o.occupancyEndDate is null or o.occupancyEndDate >= ?))'
sqlParameters.push( sqlParameters.push(
dateStringToInteger(filters.occupancyEffectiveDateString), dateStringToInteger(filters.occupancyEffectiveDateString),
dateStringToInteger(filters.occupancyEffectiveDateString) dateStringToInteger(filters.occupancyEffectiveDateString)
); )
} }
if (filters.mapId) { if (filters.mapId) {
sqlWhereClause += " and l.mapId = ?"; sqlWhereClause += ' and l.mapId = ?'
sqlParameters.push(filters.mapId); sqlParameters.push(filters.mapId)
} }
if (filters.lotTypeId) { if (filters.lotTypeId) {
sqlWhereClause += " and l.lotTypeId = ?"; sqlWhereClause += ' and l.lotTypeId = ?'
sqlParameters.push(filters.lotTypeId); sqlParameters.push(filters.lotTypeId)
} }
if (filters.workOrderId) { if (filters.workOrderId) {
sqlWhereClause += sqlWhereClause +=
" and o.lotOccupancyId in (select lotOccupancyId from WorkOrderLotOccupancies where recordDelete_timeMillis is null and workOrderId = ?)"; ' and o.lotOccupancyId in (select lotOccupancyId from WorkOrderLotOccupancies where recordDelete_timeMillis is null and workOrderId = ?)'
sqlParameters.push(filters.workOrderId); sqlParameters.push(filters.workOrderId)
} }
if (filters.notWorkOrderId) { if (filters.notWorkOrderId) {
sqlWhereClause += sqlWhereClause +=
" and o.lotOccupancyId not in (select lotOccupancyId from WorkOrderLotOccupancies where recordDelete_timeMillis is null and workOrderId = ?)"; ' and o.lotOccupancyId not in (select lotOccupancyId from WorkOrderLotOccupancies where recordDelete_timeMillis is null and workOrderId = ?)'
sqlParameters.push(filters.notWorkOrderId); sqlParameters.push(filters.notWorkOrderId)
} }
return { return {
sqlWhereClause, sqlWhereClause,
sqlParameters sqlParameters
}; }
} }
export function getLotOccupancies( export function getLotOccupancies(
@ -121,35 +133,35 @@ export function getLotOccupancies(
options: GetLotOccupanciesOptions, options: GetLotOccupanciesOptions,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): { ): {
count: number; count: number
lotOccupancies: recordTypes.LotOccupancy[]; lotOccupancies: recordTypes.LotOccupancy[]
} { } {
const database = const database =
connectedDatabase || connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); })
database.function("userFn_dateIntegerToString", dateIntegerToString); database.function('userFn_dateIntegerToString', dateIntegerToString)
const { sqlWhereClause, sqlParameters } = buildWhereClause(filters); const { sqlWhereClause, sqlParameters } = buildWhereClause(filters)
let count = options.limit; let count = options.limit
const isLimited = options.limit !== -1; const isLimited = options.limit !== -1
if (isLimited) { if (isLimited) {
count = database count = database
.prepare( .prepare(
"select count(*) as recordCount" + 'select count(*) as recordCount' +
" from LotOccupancies o" + ' from LotOccupancies o' +
" left join Lots l on o.lotId = l.lotId" + ' left join Lots l on o.lotId = l.lotId' +
sqlWhereClause sqlWhereClause
) )
.get(sqlParameters).recordCount; .get(sqlParameters).recordCount
} }
let lotOccupancies: recordTypes.LotOccupancy[] = []; let lotOccupancies: recordTypes.LotOccupancy[] = []
if (count !== 0) { if (count !== 0) {
lotOccupancies = database lotOccupancies = database
@ -167,40 +179,42 @@ export function getLotOccupancies(
left join Maps m on l.mapId = m.mapId left join Maps m on l.mapId = m.mapId
${sqlWhereClause} ${sqlWhereClause}
order by o.occupancyStartDate desc, ifnull(o.occupancyEndDate, 99999999) desc, l.lotName, o.lotId, o.lotOccupancyId desc` + order by o.occupancyStartDate desc, ifnull(o.occupancyEndDate, 99999999) desc, l.lotName, o.lotId, o.lotOccupancyId desc` +
(isLimited ? ` limit ${options.limit} offset ${options.offset}` : "") (isLimited ? ` limit ${options.limit} offset ${options.offset}` : '')
) )
.all(sqlParameters); .all(sqlParameters)
if (!isLimited) { if (!isLimited) {
count = lotOccupancies.length; count = lotOccupancies.length
} }
for (const lotOccupancy of lotOccupancies) { for (const lotOccupancy of lotOccupancies) {
const occupancyType = getOccupancyTypeById(lotOccupancy.occupancyTypeId); const occupancyType = getOccupancyTypeById(lotOccupancy.occupancyTypeId!)
if (occupancyType) { if (occupancyType) {
lotOccupancy.printEJS = occupancyType.occupancyTypePrints.includes("*") lotOccupancy.printEJS = (
? configFunctions.getProperty("settings.lotOccupancy.prints")[0] occupancyType.occupancyTypePrints ?? []
: occupancyType.occupancyTypePrints[0]; ).includes('*')
? configFunctions.getProperty('settings.lotOccupancy.prints')[0]
: occupancyType.occupancyTypePrints![0]
} }
if (options.includeOccupants) { if (options.includeOccupants) {
lotOccupancy.lotOccupancyOccupants = getLotOccupancyOccupants( lotOccupancy.lotOccupancyOccupants = getLotOccupancyOccupants(
lotOccupancy.lotOccupancyId, lotOccupancy.lotOccupancyId!,
database database
); )
} }
} }
} }
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return { return {
count, count,
lotOccupancies lotOccupancies
}; }
} }
export default getLotOccupancies; export default getLotOccupancies