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 {
occupancyTypeId?: string | number;
occupancyTypeField: string;

View File

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

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { clearCacheByTableName } from "../functions.cache.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { clearCacheByTableName } from '../functions.cache.js';
export function addOccupancyTypePrint(occupancyTypePrintForm, requestSession) {
const database = sqlite(databasePath);
const rightNowMillis = Date.now();
@ -20,10 +20,10 @@ export function addOccupancyTypePrint(occupancyTypePrintForm, requestSession) {
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
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();
clearCacheByTableName("OccupancyTypePrints");
clearCacheByTableName('OccupancyTypePrints');
return result.changes > 0;
}
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 {
occupancyTypeId: string | number;
printEJS: string;
orderNumber?: number;
occupancyTypeId: string | number
printEJS: string
orderNumber?: number
}
export function addOccupancyTypePrint(
occupancyTypePrintForm: OccupancyTypePrintForm,
requestSession: recordTypes.PartialSession
): boolean {
const database = sqlite(databasePath);
const database = sqlite(databasePath)
const rightNowMillis = Date.now();
const rightNowMillis = Date.now()
let result = database
.prepare(
@ -31,11 +31,11 @@ export function addOccupancyTypePrint(
and printEJS = ?`
)
.run(
requestSession.user.userName,
requestSession.user!.userName,
rightNowMillis,
occupancyTypePrintForm.occupancyTypeId,
occupancyTypePrintForm.printEJS
);
)
if (result.changes === 0) {
result = database
@ -49,19 +49,19 @@ export function addOccupancyTypePrint(
.run(
occupancyTypePrintForm.occupancyTypeId,
occupancyTypePrintForm.printEJS,
occupancyTypePrintForm.orderNumber || -1,
requestSession.user.userName,
occupancyTypePrintForm.orderNumber ?? -1,
requestSession.user!.userName,
rightNowMillis,
requestSession.user.userName,
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,5 +1,5 @@
import sqlite from "better-sqlite3";
import type * as recordTypes from "../../types/recordTypes";
import sqlite from 'better-sqlite3';
import type * as recordTypes from '../../types/recordTypes';
interface LotFieldForm {
lotId: string | number;
lotTypeFieldId: string | number;

View File

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

View File

@ -1,7 +1,7 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function addOrUpdateLotOccupancyField(lotOccupancyFieldForm, requestSession, connectedDatabase) {
const database = connectedDatabase || sqlite(databasePath);
const database = connectedDatabase ?? sqlite(databasePath);
const rightNowMillis = Date.now();
let result = database
.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 {
lotOccupancyId: string | number;
occupancyTypeFieldId: string | number;
lotOccupancyFieldValue: string;
lotOccupancyId: string | number
occupancyTypeFieldId: string | number
lotOccupancyFieldValue: string
}
export function addOrUpdateLotOccupancyField(
@ -15,9 +15,9 @@ export function addOrUpdateLotOccupancyField(
requestSession: recordTypes.PartialSession,
connectedDatabase?: sqlite.Database
): boolean {
const database = connectedDatabase || sqlite(databasePath);
const database = connectedDatabase ?? sqlite(databasePath)
const rightNowMillis = Date.now();
const rightNowMillis = Date.now()
let result = database
.prepare(
@ -32,11 +32,11 @@ export function addOrUpdateLotOccupancyField(
)
.run(
lotOccupancyFieldForm.lotOccupancyFieldValue,
requestSession.user.userName,
requestSession.user!.userName,
rightNowMillis,
lotOccupancyFieldForm.lotOccupancyId,
lotOccupancyFieldForm.occupancyTypeFieldId
);
)
if (result.changes === 0) {
result = database
@ -51,18 +51,18 @@ export function addOrUpdateLotOccupancyField(
lotOccupancyFieldForm.lotOccupancyId,
lotOccupancyFieldForm.occupancyTypeFieldId,
lotOccupancyFieldForm.lotOccupancyFieldValue,
requestSession.user.userName,
requestSession.user!.userName,
rightNowMillis,
requestSession.user.userName,
requestSession.user!.userName,
rightNowMillis
);
)
}
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";
declare type RecordTable = "FeeCategories" | "LotStatuses" | "LotTypes" | "OccupancyTypes" | "WorkOrderMilestoneTypes" | "WorkOrderTypes";
import type * as recordTypes from '../../types/recordTypes';
declare type RecordTable = 'FeeCategories' | 'LotStatuses' | 'LotTypes' | 'OccupancyTypes' | 'WorkOrderMilestoneTypes' | 'WorkOrderTypes';
export declare function addRecord(recordTable: RecordTable, recordName: string, orderNumber: number, requestSession: recordTypes.PartialSession): number;
export {};

View File

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

View File

@ -1,8 +1,8 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { getNextWorkOrderNumber } from "./getNextWorkOrderNumber.js";
import { addWorkOrderLotOccupancy } from "./addWorkOrderLotOccupancy.js";
import { dateStringToInteger, dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { getNextWorkOrderNumber } from './getNextWorkOrderNumber.js';
import { addWorkOrderLotOccupancy } from './addWorkOrderLotOccupancy.js';
import { dateStringToInteger, dateToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function addWorkOrder(workOrderForm, requestSession) {
const database = sqlite(databasePath);
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 { addWorkOrderLotOccupancy } from "./addWorkOrderLotOccupancy.js";
import { getNextWorkOrderNumber } from './getNextWorkOrderNumber.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 {
workOrderTypeId: number | string;
workOrderNumber?: string;
workOrderDescription: string;
workOrderOpenDateString?: string;
workOrderCloseDateString?: string;
lotOccupancyId?: string;
workOrderTypeId: number | string
workOrderNumber?: string
workOrderDescription: string
workOrderOpenDateString?: string
workOrderCloseDateString?: string
lotOccupancyId?: string
}
export function addWorkOrder(
workOrderForm: AddWorkOrderForm,
requestSession: recordTypes.PartialSession
): 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) {
workOrderNumber = getNextWorkOrderNumber(database);
workOrderNumber = getNextWorkOrderNumber(database)
}
const result = database
@ -51,13 +54,13 @@ export function addWorkOrder(
workOrderForm.workOrderCloseDateString
? dateStringToInteger(workOrderForm.workOrderCloseDateString)
: undefined,
requestSession.user.userName,
requestSession.user!.userName,
rightNow.getTime(),
requestSession.user.userName,
requestSession.user!.userName,
rightNow.getTime()
);
)
const workOrderId = result.lastInsertRowid as number;
const workOrderId = result.lastInsertRowid as number
if (workOrderForm.lotOccupancyId) {
addWorkOrderLotOccupancy(
@ -67,12 +70,12 @@ export function addWorkOrder(
},
requestSession,
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 {
workOrderId: string;
workOrderComment: string;

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import * as dateTimeFunctions from "@cityssm/expressjs-server-js/dateTimeFns.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import * as dateTimeFunctions from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function addWorkOrderComment(workOrderCommentForm, requestSession) {
const database = sqlite(databasePath);
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 {
workOrderId: string;
workOrderComment: string;
workOrderId: string
workOrderComment: string
}
export function addWorkOrderComment(
workOrderCommentForm: AddWorkOrderCommentForm,
requestSession: recordTypes.PartialSession
): number {
const database = sqlite(databasePath);
const database = sqlite(databasePath)
const rightNow = new Date();
const rightNow = new Date()
const result = database
.prepare(
@ -34,15 +34,15 @@ export function addWorkOrderComment(
dateTimeFunctions.dateToInteger(rightNow),
dateTimeFunctions.dateToTimeInteger(rightNow),
workOrderCommentForm.workOrderComment,
requestSession.user.userName,
requestSession.user!.userName,
rightNow.getTime(),
requestSession.user.userName,
requestSession.user!.userName,
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 {
workOrderId: number | string;
lotId: number | string;

View File

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

View File

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

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { dateStringToInteger, timeStringToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { dateStringToInteger, timeStringToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function addWorkOrderMilestone(milestoneForm, requestSession) {
const rightNow = new Date();
const database = sqlite(databasePath);
@ -13,7 +13,7 @@ export function addWorkOrderMilestone(milestoneForm, requestSession) {
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
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)
: 0, milestoneForm.workOrderMilestoneDescription, 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 {
dateStringToInteger,
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 {
workOrderId: string | number;
workOrderMilestoneTypeId?: number | string;
workOrderMilestoneDateString: string;
workOrderMilestoneTimeString?: string;
workOrderMilestoneDescription: string;
workOrderMilestoneCompletionDateString?: string;
workOrderMilestoneCompletionTimeString?: string;
workOrderId: string | number
workOrderMilestoneTypeId?: number | string
workOrderMilestoneDateString: string
workOrderMilestoneTimeString?: string
workOrderMilestoneDescription: string
workOrderMilestoneCompletionDateString?: string
workOrderMilestoneCompletionTimeString?: string
}
export function addWorkOrderMilestone(
milestoneForm: AddWorkOrderMilestoneForm,
requestSession: recordTypes.PartialSession
): number {
const rightNow = new Date();
const rightNow = new Date()
const database = sqlite(databasePath);
const database = sqlite(databasePath)
const result = database
.prepare(
@ -40,27 +42,31 @@ export function addWorkOrderMilestone(
)
.run(
milestoneForm.workOrderId,
milestoneForm.workOrderMilestoneTypeId || undefined,
milestoneForm.workOrderMilestoneTypeId ?? undefined,
dateStringToInteger(milestoneForm.workOrderMilestoneDateString),
milestoneForm.workOrderMilestoneTimeString
? timeStringToInteger(milestoneForm.workOrderMilestoneTimeString)
: 0,
milestoneForm.workOrderMilestoneDescription,
milestoneForm.workOrderMilestoneCompletionDateString
? dateStringToInteger(milestoneForm.workOrderMilestoneCompletionDateString)
? dateStringToInteger(
milestoneForm.workOrderMilestoneCompletionDateString
)
: undefined,
milestoneForm.workOrderMilestoneCompletionTimeString
? timeStringToInteger(milestoneForm.workOrderMilestoneCompletionTimeString)
? timeStringToInteger(
milestoneForm.workOrderMilestoneCompletionTimeString
)
: undefined,
requestSession.user.userName,
requestSession.user!.userName,
rightNow.getTime(),
requestSession.user.userName,
requestSession.user!.userName,
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): {
inactivedRecordCount: number;
purgedRecordCount: number;

View File

@ -1,11 +1,13 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import * as configFunctions from "../functions.config.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import * as configFunctions from '../functions.config.js';
export function cleanupDatabase(requestSession) {
const database = sqlite(databasePath);
const rightNowMillis = Date.now();
const recordDelete_timeMillisMin = rightNowMillis -
configFunctions.getProperty("settings.adminCleanup.recordDeleteAgeDays") * 86400 * 1000;
const recordDeleteTimeMillisMin = rightNowMillis -
configFunctions.getProperty('settings.adminCleanup.recordDeleteAgeDays') *
86400 *
1000;
let inactivedRecordCount = 0;
let purgedRecordCount = 0;
inactivedRecordCount += database
@ -17,8 +19,8 @@ export function cleanupDatabase(requestSession) {
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database
.prepare("delete from WorkOrderComments where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from WorkOrderComments where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update WorkOrderLotOccupancies
set recordDelete_userName = ?,
@ -28,8 +30,8 @@ export function cleanupDatabase(requestSession) {
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database
.prepare("delete from WorkOrderLotOccupancies where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from WorkOrderLotOccupancies where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update WorkOrderLots
set recordDelete_userName = ?,
@ -39,8 +41,8 @@ export function cleanupDatabase(requestSession) {
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database
.prepare("delete from WorkOrderLots where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from WorkOrderLots where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update WorkOrderMilestones
set recordDelete_userName = ?,
@ -50,8 +52,8 @@ export function cleanupDatabase(requestSession) {
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database
.prepare("delete from WorkOrderMilestones where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from WorkOrderMilestones where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database
.prepare(`delete from WorkOrders
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 WorkOrderLots)
and workOrderId not in (select workOrderId from WorkOrderMilestones)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database
.prepare(`delete from WorkOrderMilestoneTypes
where recordDelete_timeMillis <= ?
and workOrderMilestoneTypeId not in (
select workOrderMilestoneTypeId from WorkOrderMilestones)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database
.prepare(`delete from WorkOrderTypes
where recordDelete_timeMillis <= ?
and workOrderTypeId not in (select workOrderTypeId from WorkOrders)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update LotOccupancyComments
set recordDelete_userName = ?,
@ -80,8 +82,8 @@ export function cleanupDatabase(requestSession) {
select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database
.prepare("delete from LotOccupancyComments where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from LotOccupancyComments where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update LotOccupancyFields
set recordDelete_userName = ?,
@ -90,8 +92,8 @@ export function cleanupDatabase(requestSession) {
and lotOccupancyId in (select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database
.prepare("delete from LotOccupancyFields where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from LotOccupancyFields where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update LotOccupancyOccupants
set recordDelete_userName = ?,
@ -100,14 +102,14 @@ export function cleanupDatabase(requestSession) {
and lotOccupancyId in (select lotOccupancyId from LotOccupancies where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database
.prepare("delete from LotOccupancyOccupants where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from LotOccupancyOccupants where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database
.prepare("delete from LotOccupancyFees where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from LotOccupancyFees where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database
.prepare("delete from LotOccupancyTransactions where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from LotOccupancyTransactions where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database
.prepare(`delete from LotOccupancies
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 LotOccupancyTransactions)
and lotOccupancyId not in (select lotOccupancyId from WorkOrderLotOccupancies)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update Fees
set recordDelete_userName = ?,
@ -129,12 +131,12 @@ export function cleanupDatabase(requestSession) {
.prepare(`delete from Fees
where recordDelete_timeMillis <= ?
and feeId not in (select feeId from LotOccupancyFees)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database
.prepare(`delete from FeeCategories
where recordDelete_timeMillis <= ?
and feeCategoryId not in (select feeCategoryId from Fees)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update OccupancyTypeFields
set recordDelete_userName = ?,
@ -146,7 +148,7 @@ export function cleanupDatabase(requestSession) {
.prepare(`delete from OccupancyTypeFields
where recordDelete_timeMillis <= ?
and occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update OccupancyTypePrints
set recordDelete_userName = ?,
@ -155,8 +157,8 @@ export function cleanupDatabase(requestSession) {
and occupancyTypeId in (select occupancyTypeId from OccupancyTypes where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database
.prepare("delete from OccupancyTypePrints where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from OccupancyTypePrints where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database
.prepare(`delete from OccupancyTypes
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 LotOccupancies)
and occupancyTypeId not in (select occupancyTypeId from Fees)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database
.prepare(`delete from LotOccupantTypes
where recordDelete_timeMillis <= ?
and lotOccupantTypeId not in (select lotOccupantTypeId from LotOccupancyOccupants)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update LotComments
set recordDelete_userName = ?,
@ -178,8 +180,8 @@ export function cleanupDatabase(requestSession) {
and lotId in (select lotId from Lots where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database
.prepare("delete from LotComments where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from LotComments where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update LotFields
set recordDelete_userName = ?,
@ -188,8 +190,8 @@ export function cleanupDatabase(requestSession) {
and lotId in (select lotId from Lots where recordDelete_timeMillis is not null)`)
.run(requestSession.user.userName, rightNowMillis).changes;
purgedRecordCount += database
.prepare("delete from LotFields where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from LotFields where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update Lots
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 LotOccupancies)
and lotId not in (select lotId from WorkOrderLots)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database
.prepare(`delete from LotStatuses
where recordDelete_timeMillis <= ?
and lotStatusId not in (select lotStatusId from Lots)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
inactivedRecordCount += database
.prepare(`update LotTypeFields
set recordDelete_userName = ?,
@ -221,12 +223,12 @@ export function cleanupDatabase(requestSession) {
.prepare(`delete from LotTypeFields
where recordDelete_timeMillis <= ?
and lotTypeFieldId not in (select lotTypeFieldId from LotFields)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
purgedRecordCount += database
.prepare(`delete from LotTypes
where recordDelete_timeMillis <= ?
and lotTypeId not in (select lotTypeId from Lots)`)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes;
database.close();
return {
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) {
const database = sqlite(databasePath);
export function cleanupDatabase(requestSession: recordTypes.PartialSession): {
inactivedRecordCount: number
purgedRecordCount: number
} {
const database = sqlite(databasePath)
const rightNowMillis = Date.now();
const recordDelete_timeMillisMin =
const rightNowMillis = Date.now()
const recordDeleteTimeMillisMin =
rightNowMillis -
configFunctions.getProperty("settings.adminCleanup.recordDeleteAgeDays") * 86_400 * 1000;
configFunctions.getProperty('settings.adminCleanup.recordDeleteAgeDays') *
86_400 *
1000
let inactivedRecordCount = 0;
let purgedRecordCount = 0;
let inactivedRecordCount = 0
let purgedRecordCount = 0
/*
* Work Order Comments
@ -30,11 +35,11 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and workOrderId in (
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`
)
.run(requestSession.user.userName, rightNowMillis).changes;
.run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database
.prepare("delete from WorkOrderComments where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from WorkOrderComments where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes
/*
* Work Order Lot Occupancies
@ -49,11 +54,13 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and workOrderId in (
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`
)
.run(requestSession.user.userName, rightNowMillis).changes;
.run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database
.prepare("delete from WorkOrderLotOccupancies where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare(
'delete from WorkOrderLotOccupancies where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/*
* Work Order Lots
@ -68,11 +75,11 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and workOrderId in (
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`
)
.run(requestSession.user.userName, rightNowMillis).changes;
.run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database
.prepare("delete from WorkOrderLots where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from WorkOrderLots where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes
/*
* Work Order Milestones
@ -87,11 +94,13 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and workOrderId in (
select workOrderId from WorkOrders where recordDelete_timeMillis is not null)`
)
.run(requestSession.user.userName, rightNowMillis).changes;
.run(requestSession.user!.userName, rightNowMillis).changes
purgedRecordCount += database
.prepare("delete from WorkOrderMilestones where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare(
'delete from WorkOrderMilestones where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/*
* 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 WorkOrderMilestones)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
/*
* Work Order Milestone Types
@ -119,7 +128,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
and workOrderMilestoneTypeId not in (
select workOrderMilestoneTypeId from WorkOrderMilestones)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
/*
* Work Order Types
@ -131,7 +140,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ?
and workOrderTypeId not in (select workOrderTypeId from WorkOrders)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
/*
* Lot Occupancy Comments
@ -146,11 +155,13 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
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
.prepare("delete from LotOccupancyComments where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare(
'delete from LotOccupancyComments where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/*
* Lot Occupancy Fields
@ -164,11 +175,13 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is 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
.prepare("delete from LotOccupancyFields where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare(
'delete from LotOccupancyFields where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/*
* Lot Occupancy Occupants
@ -182,11 +195,13 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is 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
.prepare("delete from LotOccupancyOccupants where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare(
'delete from LotOccupancyOccupants where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/*
* Lot Occupancy Fees/Transactions
@ -194,12 +209,14 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
*/
purgedRecordCount += database
.prepare("delete from LotOccupancyFees where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from LotOccupancyFees where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes
purgedRecordCount += database
.prepare("delete from LotOccupancyTransactions where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare(
'delete from LotOccupancyTransactions where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/*
* 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 WorkOrderLotOccupancies)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
/*
* Fees
@ -230,7 +247,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is 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
.prepare(
@ -238,7 +255,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ?
and feeId not in (select feeId from LotOccupancyFees)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
/*
* Fee Categories
@ -250,7 +267,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ?
and feeCategoryId not in (select feeCategoryId from Fees)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
/*
* Occupancy Type Fields
@ -264,7 +281,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is 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
.prepare(
@ -272,7 +289,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ?
and occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
/*
* Occupancy Type Prints
@ -286,11 +303,13 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is 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
.prepare("delete from OccupancyTypePrints where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare(
'delete from OccupancyTypePrints where recordDelete_timeMillis <= ?'
)
.run(recordDeleteTimeMillisMin).changes
/*
* 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 Fees)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
/*
* Lot Occupant Types
@ -317,7 +336,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ?
and lotOccupantTypeId not in (select lotOccupantTypeId from LotOccupancyOccupants)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
/*
* Lot Comments
@ -331,11 +350,11 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is 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
.prepare("delete from LotComments where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from LotComments where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes
/*
* Lot Fields
@ -349,11 +368,11 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is 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
.prepare("delete from LotFields where recordDelete_timeMillis <= ?")
.run(recordDelete_timeMillisMin).changes;
.prepare('delete from LotFields where recordDelete_timeMillis <= ?')
.run(recordDeleteTimeMillisMin).changes
/*
* Lots
@ -367,7 +386,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is 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
.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 WorkOrderLots)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
/*
* Lot Statuses
@ -390,7 +409,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ?
and lotStatusId not in (select lotStatusId from Lots)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
/*
* Lot Type Fields
@ -404,7 +423,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis is 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
.prepare(
@ -412,7 +431,7 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ?
and lotTypeFieldId not in (select lotTypeFieldId from LotFields)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
/*
* Lot Types
@ -424,14 +443,14 @@ export function cleanupDatabase(requestSession: recordTypes.PartialSession) {
where recordDelete_timeMillis <= ?
and lotTypeId not in (select lotTypeId from Lots)`
)
.run(recordDelete_timeMillisMin).changes;
.run(recordDeleteTimeMillisMin).changes
database.close();
database.close()
return {
inactivedRecordCount,
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 {
workOrderId: number | string;
workOrderCloseDateString?: string;

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { dateStringToInteger, dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { dateStringToInteger, dateToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function closeWorkOrder(workOrderForm, requestSession) {
const database = sqlite(databasePath);
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 {
workOrderId: number | string;
workOrderCloseDateString?: string;
workOrderId: number | string
workOrderCloseDateString?: string
}
export function closeWorkOrder(
workOrderForm: AddWorkOrderForm,
requestSession: recordTypes.PartialSession
): boolean {
const database = sqlite(databasePath);
const database = sqlite(databasePath)
const rightNow = new Date();
const rightNow = new Date()
const result = database
.prepare(
@ -31,14 +34,14 @@ export function closeWorkOrder(
workOrderForm.workOrderCloseDateString
? dateStringToInteger(workOrderForm.workOrderCloseDateString)
: dateToInteger(new Date()),
requestSession.user.userName,
requestSession.user!.userName,
rightNow.getTime(),
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 {
workOrderMilestoneId: string | number;
workOrderMilestoneCompletionDateString?: string;

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { dateStringToInteger, dateToInteger, dateToTimeInteger, timeStringToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { dateStringToInteger, dateToInteger, dateToTimeInteger, timeStringToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function completeWorkOrderMilestone(milestoneForm, requestSession) {
const rightNow = new Date();
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 {
dateStringToInteger,
dateToInteger,
dateToTimeInteger,
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 {
workOrderMilestoneId: string | number;
workOrderMilestoneCompletionDateString?: string;
workOrderMilestoneCompletionTimeString?: string;
workOrderMilestoneId: string | number
workOrderMilestoneCompletionDateString?: string
workOrderMilestoneCompletionTimeString?: string
}
export function completeWorkOrderMilestone(
milestoneForm: CompleteWorkOrderMilestoneForm,
requestSession: recordTypes.PartialSession
): boolean {
const rightNow = new Date();
const rightNow = new Date()
const database = sqlite(databasePath);
const database = sqlite(databasePath)
const result = database
.prepare(
@ -36,19 +38,23 @@ export function completeWorkOrderMilestone(
)
.run(
milestoneForm.workOrderMilestoneCompletionDateString
? dateStringToInteger(milestoneForm.workOrderMilestoneCompletionDateString)
? dateStringToInteger(
milestoneForm.workOrderMilestoneCompletionDateString
)
: dateToInteger(rightNow),
milestoneForm.workOrderMilestoneCompletionTimeString
? timeStringToInteger(milestoneForm.workOrderMilestoneCompletionTimeString)
? timeStringToInteger(
milestoneForm.workOrderMilestoneCompletionTimeString
)
: dateToTimeInteger(rightNow),
requestSession.user.userName,
requestSession.user!.userName,
rightNow.getTime(),
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 default copyLotOccupancy;

View File

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

View File

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

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function deleteLotOccupancyFee(lotOccupancyId, feeId, requestSession) {
const database = sqlite(databasePath);
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(
lotOccupancyId: number | string,
feeId: number | string,
requestSession: recordTypes.PartialSession
): boolean {
const database = sqlite(databasePath);
const database = sqlite(databasePath)
const rightNowMillis = Date.now();
const rightNowMillis = Date.now()
const result = database
.prepare(
@ -21,11 +21,11 @@ export function deleteLotOccupancyFee(
where lotOccupancyId = ?
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 type * as recordTypes from "../../types/recordTypes";
import sqlite from 'better-sqlite3';
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 default deleteLotOccupancyField;

View File

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

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function deleteLotOccupancyOccupant(lotOccupancyId, lotOccupantIndex, requestSession) {
const database = sqlite(databasePath);
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(
lotOccupancyId: number | string,
lotOccupantIndex: number | string,
requestSession: recordTypes.PartialSession
): boolean {
const database = sqlite(databasePath);
const database = sqlite(databasePath)
const rightNowMillis = Date.now();
const rightNowMillis = Date.now()
const result = database
.prepare(
@ -21,11 +21,16 @@ export function deleteLotOccupancyOccupant(
where lotOccupancyId = ?
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 default deleteLotOccupancyTransaction;

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function deleteLotOccupancyTransaction(lotOccupancyId, transactionIndex, requestSession) {
const database = sqlite(databasePath);
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(
lotOccupancyId: number | string,
transactionIndex: number | string,
requestSession: recordTypes.PartialSession
): boolean {
const database = sqlite(databasePath);
const database = sqlite(databasePath)
const rightNowMillis = Date.now();
const rightNowMillis = Date.now()
const result = database
.prepare(
@ -21,11 +21,16 @@ export function deleteLotOccupancyTransaction(
where lotOccupancyId = ?
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 default deleteOccupancyTypePrint;

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { clearCacheByTableName } from "../functions.cache.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { clearCacheByTableName } from '../functions.cache.js';
export function deleteOccupancyTypePrint(occupancyTypeId, printEJS, requestSession) {
const database = sqlite(databasePath);
const rightNowMillis = Date.now();
@ -12,7 +12,7 @@ export function deleteOccupancyTypePrint(occupancyTypeId, printEJS, requestSessi
and printEJS = ?`)
.run(requestSession.user.userName, rightNowMillis, occupancyTypeId, printEJS);
database.close();
clearCacheByTableName("OccupancyTypePrints");
clearCacheByTableName('OccupancyTypePrints');
return result.changes > 0;
}
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(
occupancyTypeId: number | string,
printEJS: string,
requestSession: recordTypes.PartialSession
): boolean {
const database = sqlite(databasePath);
const database = sqlite(databasePath)
const rightNowMillis = Date.now();
const rightNowMillis = Date.now()
const result = database
.prepare(
@ -23,13 +23,18 @@ export function deleteOccupancyTypePrint(
where occupancyTypeId = ?
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";
declare type RecordTable = "FeeCategories" | "Fees" | "Lots" | "LotComments" | "LotOccupancies" | "LotOccupancyComments" | "LotOccupantTypes" | "LotStatuses" | "LotTypes" | "LotTypeFields" | "Maps" | "OccupancyTypes" | "OccupancyTypeFields" | "WorkOrders" | "WorkOrderComments" | "WorkOrderMilestones" | "WorkOrderMilestoneTypes" | "WorkOrderTypes";
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';
export declare function deleteRecord(recordTable: RecordTable, recordId: number | string, requestSession: recordTypes.PartialSession): boolean;
export {};

View File

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

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function deleteWorkOrderLot(workOrderId, lotId, requestSession) {
const database = sqlite(databasePath);
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(
workOrderId: number | string,
lotId: number | string,
requestSession: recordTypes.PartialSession
): boolean {
const database = sqlite(databasePath);
const database = sqlite(databasePath)
const rightNowMillis = Date.now();
const rightNowMillis = Date.now()
const result = database
.prepare(
@ -21,11 +21,11 @@ export function deleteWorkOrderLot(
where workOrderId = ?
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 default deleteWorkOrderLotOccupancy;

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function deleteWorkOrderLotOccupancy(workOrderId, lotOccupancyId, requestSession) {
const database = sqlite(databasePath);
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(
workOrderId: number | string,
lotOccupancyId: number | string,
requestSession: recordTypes.PartialSession
): boolean {
const database = sqlite(databasePath);
const database = sqlite(databasePath)
const rightNowMillis = Date.now();
const rightNowMillis = Date.now()
const result = database
.prepare(
@ -21,11 +21,16 @@ export function deleteWorkOrderLotOccupancy(
where workOrderId = ?
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 type * as recordTypes from "../../types/recordTypes";
import sqlite from 'better-sqlite3';
import type * as recordTypes from '../../types/recordTypes';
interface GetLotOccupanciesFilters {
lotId?: number | string;
occupancyTime?: "" | "past" | "current" | "future";
occupancyTime?: '' | 'past' | 'current' | 'future';
occupancyStartDateString?: string;
occupancyEffectiveDateString?: string;
occupantName?: string;
occupancyTypeId?: number | string;
mapId?: number | string;
lotNameSearchType?: "" | "startsWith" | "endsWith";
lotNameSearchType?: '' | 'startsWith' | 'endsWith';
lotName?: string;
lotTypeId?: number | string;
workOrderId?: number | string;

View File

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