code cleanup

deepsource-autofix-76c6eb20
Dan Gowans 2023-12-11 14:49:59 -05:00
parent 40fb015d98
commit 8b4a7c9937
107 changed files with 622 additions and 658 deletions

View File

@ -1,5 +1,6 @@
# Lot Occupancy System # Lot Occupancy System
[![DeepSource](https://app.deepsource.com/gh/cityssm/lot-occupancy-system.svg/?label=active+issues&show_trend=true&token=8rYoZ1g7FoZHstfQmOzvlBn7)](https://app.deepsource.com/gh/cityssm/lot-occupancy-system/)
[![Maintainability](https://api.codeclimate.com/v1/badges/11a8975b332f66e6eec7/maintainability)](https://codeclimate.com/github/cityssm/lot-occupancy-system/maintainability) [![Maintainability](https://api.codeclimate.com/v1/badges/11a8975b332f66e6eec7/maintainability)](https://codeclimate.com/github/cityssm/lot-occupancy-system/maintainability)
[![codecov](https://codecov.io/gh/cityssm/lot-occupancy-system/branch/main/graph/badge.svg?token=1M38ZVCLKE)](https://codecov.io/gh/cityssm/lot-occupancy-system) [![codecov](https://codecov.io/gh/cityssm/lot-occupancy-system/branch/main/graph/badge.svg?token=1M38ZVCLKE)](https://codecov.io/gh/cityssm/lot-occupancy-system)
[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/cityssm/lot-occupancy-system/coverage.yml?branch=main)](https://github.com/cityssm/lot-occupancy-system/actions/workflows/coverage.yml) [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/cityssm/lot-occupancy-system/coverage.yml?branch=main)](https://github.com/cityssm/lot-occupancy-system/actions/workflows/coverage.yml)

View File

@ -1,4 +1,4 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { Fee } from '../types/recordTypes.js';
export declare function getFee(feeId: number | string, connectedDatabase?: PoolConnection): Promise<recordTypes.Fee>; export declare function getFee(feeId: number | string, connectedDatabase?: PoolConnection): Promise<Fee | undefined>;
export default getFee; export default getFee;

View File

@ -1,12 +1,13 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import type * as recordTypes from '../types/recordTypes.js' import type { Fee } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
export async function getFee( export async function getFee(
feeId: number | string, feeId: number | string,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.Fee> { ): Promise<Fee | undefined> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
const fee = database const fee = database
@ -27,7 +28,7 @@ export async function getFee(
where f.recordDelete_timeMillis is null where f.recordDelete_timeMillis is null
and f.feeId = ?` and f.feeId = ?`
) )
.get(feeId) as recordTypes.Fee .get(feeId) as Fee | undefined
if (connectedDatabase === undefined) { if (connectedDatabase === undefined) {
database.release() database.release()

View File

@ -1,4 +1,4 @@
import type * as recordTypes from '../types/recordTypes.js'; import type { FeeCategory } from '../types/recordTypes.js';
interface GetFeeCategoriesFilters { interface GetFeeCategoriesFilters {
occupancyTypeId?: number | string; occupancyTypeId?: number | string;
lotTypeId?: number | string; lotTypeId?: number | string;
@ -6,5 +6,5 @@ interface GetFeeCategoriesFilters {
interface GetFeeCategoriesOptions { interface GetFeeCategoriesOptions {
includeFees?: boolean; includeFees?: boolean;
} }
export declare function getFeeCategories(filters: GetFeeCategoriesFilters, options: GetFeeCategoriesOptions): Promise<recordTypes.FeeCategory[]>; export declare function getFeeCategories(filters: GetFeeCategoriesFilters, options: GetFeeCategoriesOptions): Promise<FeeCategory[]>;
export default getFeeCategories; export default getFeeCategories;

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import { getFees } from './getFees.js'; import { getFees } from './getFees.js';
import { acquireConnection } from './pool.js';
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
export async function getFeeCategories(filters, options) { export async function getFeeCategories(filters, options) {
const updateOrderNumbers = !(filters.lotTypeId || filters.occupancyTypeId) && options.includeFees; const updateOrderNumbers = !(filters.lotTypeId || filters.occupancyTypeId) && options.includeFees;

View File

@ -1,10 +1,9 @@
import { acquireConnection } from './pool.js' import type { FeeCategory } from '../types/recordTypes.js'
import { getFees } from './getFees.js' import { getFees } from './getFees.js'
import { acquireConnection } from './pool.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
import type * as recordTypes from '../types/recordTypes.js'
interface GetFeeCategoriesFilters { interface GetFeeCategoriesFilters {
occupancyTypeId?: number | string occupancyTypeId?: number | string
lotTypeId?: number | string lotTypeId?: number | string
@ -17,7 +16,7 @@ interface GetFeeCategoriesOptions {
export async function getFeeCategories( export async function getFeeCategories(
filters: GetFeeCategoriesFilters, filters: GetFeeCategoriesFilters,
options: GetFeeCategoriesOptions options: GetFeeCategoriesOptions
): Promise<recordTypes.FeeCategory[]> { ): Promise<FeeCategory[]> {
const updateOrderNumbers = const updateOrderNumbers =
!(filters.lotTypeId || filters.occupancyTypeId) && options.includeFees !(filters.lotTypeId || filters.occupancyTypeId) && options.includeFees
@ -54,7 +53,7 @@ export async function getFeeCategories(
sqlWhereClause + sqlWhereClause +
' order by orderNumber, feeCategory' ' order by orderNumber, feeCategory'
) )
.all(sqlParameters) as recordTypes.FeeCategory[] .all(sqlParameters) as FeeCategory[]
if (options.includeFees ?? false) { if (options.includeFees ?? false) {
let expectedOrderNumber = 0 let expectedOrderNumber = 0

View File

@ -1,8 +1,8 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { Fee } from '../types/recordTypes.js';
interface GetFeesFilters { interface GetFeesFilters {
occupancyTypeId?: number | string; occupancyTypeId?: number | string;
lotTypeId?: number | string; lotTypeId?: number | string;
} }
export declare function getFees(feeCategoryId: number, additionalFilters: GetFeesFilters, connectedDatabase?: PoolConnection): Promise<recordTypes.Fee[]>; export declare function getFees(feeCategoryId: number, additionalFilters: GetFeesFilters, connectedDatabase?: PoolConnection): Promise<Fee[]>;
export default getFees; export default getFees;

View File

@ -1,9 +1,9 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import type { Fee } from '../types/recordTypes.js'
import type * as recordTypes from '../types/recordTypes.js' import { acquireConnection } from './pool.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
interface GetFeesFilters { interface GetFeesFilters {
occupancyTypeId?: number | string occupancyTypeId?: number | string
@ -14,7 +14,7 @@ export async function getFees(
feeCategoryId: number, feeCategoryId: number,
additionalFilters: GetFeesFilters, additionalFilters: GetFeesFilters,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.Fee[]> { ): Promise<Fee[]> {
const updateOrderNumbers = !( const updateOrderNumbers = !(
additionalFilters.lotTypeId || additionalFilters.occupancyTypeId additionalFilters.lotTypeId || additionalFilters.occupancyTypeId
) )
@ -63,7 +63,7 @@ export async function getFees(
${sqlWhereClause} ${sqlWhereClause}
order by f.orderNumber, f.feeName` order by f.orderNumber, f.feeName`
) )
.all(sqlParameters) as recordTypes.Fee[] .all(sqlParameters) as Fee[]
if (updateOrderNumbers) { if (updateOrderNumbers) {
let expectedOrderNumber = 0 let expectedOrderNumber = 0

View File

@ -1,4 +1,4 @@
import type * as recordTypes from '../types/recordTypes.js'; import type { Lot } from '../types/recordTypes.js';
export declare function getLotByLotName(lotName: string): Promise<recordTypes.Lot | undefined>; export declare function getLotByLotName(lotName: string): Promise<Lot | undefined>;
export declare function getLot(lotId: number | string): Promise<recordTypes.Lot | undefined>; export declare function getLot(lotId: number | string): Promise<Lot | undefined>;
export default getLot; export default getLot;

View File

@ -1,7 +1,7 @@
import { acquireConnection } from './pool.js';
import { getLotFields } from './getLotFields.js';
import { getLotComments } from './getLotComments.js'; import { getLotComments } from './getLotComments.js';
import { getLotFields } from './getLotFields.js';
import { getLotOccupancies } from './getLotOccupancies.js'; import { getLotOccupancies } from './getLotOccupancies.js';
import { acquireConnection } from './pool.js';
const baseSQL = `select l.lotId, l.lotTypeId, t.lotType, l.lotName, l.lotStatusId, s.lotStatus, const baseSQL = `select l.lotId, l.lotTypeId, t.lotType, l.lotName, l.lotStatusId, s.lotStatus,
l.mapId, m.mapName, m.mapSVG, l.mapKey, l.mapId, m.mapName, m.mapSVG, l.mapKey,
l.lotLatitude, l.lotLongitude l.lotLatitude, l.lotLongitude

View File

@ -1,12 +1,9 @@
import { acquireConnection } from './pool.js' import type { Lot } from '../types/recordTypes.js'
import { getLotFields } from './getLotFields.js'
import { getLotComments } from './getLotComments.js' import { getLotComments } from './getLotComments.js'
import { getLotFields } from './getLotFields.js'
import { getLotOccupancies } from './getLotOccupancies.js' import { getLotOccupancies } from './getLotOccupancies.js'
import { acquireConnection } from './pool.js'
import type * as recordTypes from '../types/recordTypes.js'
const baseSQL = `select l.lotId, l.lotTypeId, t.lotType, l.lotName, l.lotStatusId, s.lotStatus, const baseSQL = `select l.lotId, l.lotTypeId, t.lotType, l.lotName, l.lotStatusId, s.lotStatus,
l.mapId, m.mapName, m.mapSVG, l.mapKey, l.mapId, m.mapName, m.mapSVG, l.mapKey,
@ -20,10 +17,10 @@ const baseSQL = `select l.lotId, l.lotTypeId, t.lotType, l.lotName, l.lotStatusI
async function _getLot( async function _getLot(
sql: string, sql: string,
lotIdOrLotName: number | string lotIdOrLotName: number | string
): Promise<recordTypes.Lot | undefined> { ): Promise<Lot | undefined> {
const database = await acquireConnection() const database = await acquireConnection()
const lot = database.prepare(sql).get(lotIdOrLotName) as recordTypes.Lot | undefined const lot = database.prepare(sql).get(lotIdOrLotName) as Lot | undefined
if (lot !== undefined) { if (lot !== undefined) {
const lotOccupancies = await getLotOccupancies( const lotOccupancies = await getLotOccupancies(
@ -54,13 +51,11 @@ async function _getLot(
export async function getLotByLotName( export async function getLotByLotName(
lotName: string lotName: string
): Promise<recordTypes.Lot | undefined> { ): Promise<Lot | undefined> {
return await _getLot(baseSQL + ' and l.lotName = ?', lotName) return await _getLot(baseSQL + ' and l.lotName = ?', lotName)
} }
export async function getLot( export async function getLot(lotId: number | string): Promise<Lot | undefined> {
lotId: number | string
): Promise<recordTypes.Lot | undefined> {
return await _getLot(baseSQL + ' and l.lotId = ?', lotId) return await _getLot(baseSQL + ' and l.lotId = ?', lotId)
} }

View File

@ -1,4 +1,4 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { LotComment } from '../types/recordTypes.js';
export declare function getLotComments(lotId: number | string, connectedDatabase?: PoolConnection): Promise<recordTypes.LotComment[]>; export declare function getLotComments(lotId: number | string, connectedDatabase?: PoolConnection): Promise<LotComment[]>;
export default getLotComments; export default getLotComments;

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import { dateIntegerToString, timeIntegerToString, timeIntegerToPeriodString } from '@cityssm/utils-datetime'; import { dateIntegerToString, timeIntegerToString, timeIntegerToPeriodString } from '@cityssm/utils-datetime';
import { acquireConnection } from './pool.js';
export async function getLotComments(lotId, connectedDatabase) { export async function getLotComments(lotId, connectedDatabase) {
const database = connectedDatabase ?? (await acquireConnection()); const database = connectedDatabase ?? (await acquireConnection());
database.function('userFn_dateIntegerToString', dateIntegerToString); database.function('userFn_dateIntegerToString', dateIntegerToString);

View File

@ -1,23 +1,26 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool'
import { import {
dateIntegerToString, dateIntegerToString,
timeIntegerToString, timeIntegerToString,
timeIntegerToPeriodString timeIntegerToPeriodString
} from '@cityssm/utils-datetime' } from '@cityssm/utils-datetime'
import type { PoolConnection } from 'better-sqlite-pool'
import type * as recordTypes from '../types/recordTypes.js' import type { LotComment } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
export async function getLotComments( export async function getLotComments(
lotId: number | string, lotId: number | string,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.LotComment[]> { ): Promise<LotComment[]> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
database.function('userFn_dateIntegerToString', dateIntegerToString) database.function('userFn_dateIntegerToString', dateIntegerToString)
database.function('userFn_timeIntegerToString', timeIntegerToString) database.function('userFn_timeIntegerToString', timeIntegerToString)
database.function('userFn_timeIntegerToPeriodString', timeIntegerToPeriodString) database.function(
'userFn_timeIntegerToPeriodString',
timeIntegerToPeriodString
)
const lotComments = database const lotComments = database
.prepare( .prepare(
@ -33,7 +36,7 @@ export async function getLotComments(
and lotId = ? and lotId = ?
order by lotCommentDate desc, lotCommentTime desc, lotCommentId desc` order by lotCommentDate desc, lotCommentTime desc, lotCommentId desc`
) )
.all(lotId) as recordTypes.LotComment[] .all(lotId) as LotComment[]
if (connectedDatabase === undefined) { if (connectedDatabase === undefined) {
database.release() database.release()

View File

@ -1,4 +1,4 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { LotField } from '../types/recordTypes.js';
export declare function getLotFields(lotId: number | string, connectedDatabase?: PoolConnection): Promise<recordTypes.LotField[]>; export declare function getLotFields(lotId: number | string, connectedDatabase?: PoolConnection): Promise<LotField[]>;
export default getLotFields; export default getLotFields;

View File

@ -1,12 +1,13 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import type * as recordTypes from '../types/recordTypes.js' import type { LotField } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
export async function getLotFields( export async function getLotFields(
lotId: number | string, lotId: number | string,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.LotField[]> { ): Promise<LotField[]> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
const lotFields = database const lotFields = database
@ -38,7 +39,7 @@ export async function getLotFields(
and f.lotTypeFieldId not in (select lotTypeFieldId from LotFields where lotId = ? and recordDelete_timeMillis is null) and f.lotTypeFieldId not in (select lotTypeFieldId from LotFields where lotId = ? and recordDelete_timeMillis is null)
order by lotTypeOrderNumber, f.orderNumber, f.lotTypeField` order by lotTypeOrderNumber, f.orderNumber, f.lotTypeField`
) )
.all(lotId, lotId, lotId, lotId) as recordTypes.LotField[] .all(lotId, lotId, lotId, lotId) as LotField[]
if (connectedDatabase === undefined) { if (connectedDatabase === undefined) {
database.release() database.release()

View File

@ -1,5 +1,5 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { LotOccupancy } from '../types/recordTypes.js';
interface GetLotOccupanciesFilters { interface GetLotOccupanciesFilters {
lotId?: number | string; lotId?: number | string;
occupancyTime?: '' | 'past' | 'current' | 'future'; occupancyTime?: '' | 'past' | 'current' | 'future';
@ -23,6 +23,6 @@ interface GetLotOccupanciesOptions {
} }
export declare function getLotOccupancies(filters: GetLotOccupanciesFilters, options: GetLotOccupanciesOptions, connectedDatabase?: PoolConnection): Promise<{ export declare function getLotOccupancies(filters: GetLotOccupanciesFilters, options: GetLotOccupanciesOptions, connectedDatabase?: PoolConnection): Promise<{
count: number; count: number;
lotOccupancies: recordTypes.LotOccupancy[]; lotOccupancies: LotOccupancy[];
}>; }>;
export default getLotOccupancies; export default getLotOccupancies;

View File

@ -1,11 +1,11 @@
import { acquireConnection } from './pool.js';
import { dateIntegerToString, dateStringToInteger } from '@cityssm/utils-datetime'; import { dateIntegerToString, dateStringToInteger } from '@cityssm/utils-datetime';
import * as configFunctions from '../helpers/functions.config.js';
import { getOccupancyTypeById } from '../helpers/functions.cache.js'; import { getOccupancyTypeById } from '../helpers/functions.cache.js';
import { getLotOccupancyOccupants } from './getLotOccupancyOccupants.js'; import * as configFunctions from '../helpers/functions.config.js';
import { getLotOccupancyFees } from './getLotOccupancyFees.js';
import { getLotOccupancyTransactions } from './getLotOccupancyTransactions.js';
import { getLotNameWhereClause, getOccupancyTimeWhereClause, getOccupantNameWhereClause } from '../helpers/functions.sqlFilters.js'; import { getLotNameWhereClause, getOccupancyTimeWhereClause, getOccupantNameWhereClause } from '../helpers/functions.sqlFilters.js';
import { getLotOccupancyFees } from './getLotOccupancyFees.js';
import { getLotOccupancyOccupants } from './getLotOccupancyOccupants.js';
import { getLotOccupancyTransactions } from './getLotOccupancyTransactions.js';
import { acquireConnection } from './pool.js';
function buildWhereClause(filters) { function buildWhereClause(filters) {
let sqlWhereClause = ' where o.recordDelete_timeMillis is null'; let sqlWhereClause = ' where o.recordDelete_timeMillis is null';
const sqlParameters = []; const sqlParameters = [];

View File

@ -1,28 +1,22 @@
/* eslint-disable @typescript-eslint/indent */
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool'
import { import {
dateIntegerToString, dateIntegerToString,
dateStringToInteger dateStringToInteger
} from '@cityssm/utils-datetime' } from '@cityssm/utils-datetime'
import type { PoolConnection } from 'better-sqlite-pool'
import * as configFunctions from '../helpers/functions.config.js'
import { getOccupancyTypeById } from '../helpers/functions.cache.js' import { getOccupancyTypeById } from '../helpers/functions.cache.js'
import * as configFunctions from '../helpers/functions.config.js'
import { getLotOccupancyOccupants } from './getLotOccupancyOccupants.js'
import { getLotOccupancyFees } from './getLotOccupancyFees.js'
import { getLotOccupancyTransactions } from './getLotOccupancyTransactions.js'
import { import {
getLotNameWhereClause, getLotNameWhereClause,
getOccupancyTimeWhereClause, getOccupancyTimeWhereClause,
getOccupantNameWhereClause getOccupantNameWhereClause
} from '../helpers/functions.sqlFilters.js' } from '../helpers/functions.sqlFilters.js'
import type { LotOccupancy } from '../types/recordTypes.js'
import type * as recordTypes from '../types/recordTypes.js' import { getLotOccupancyFees } from './getLotOccupancyFees.js'
import { getLotOccupancyOccupants } from './getLotOccupancyOccupants.js'
import { getLotOccupancyTransactions } from './getLotOccupancyTransactions.js'
import { acquireConnection } from './pool.js'
interface GetLotOccupanciesFilters { interface GetLotOccupanciesFilters {
lotId?: number | string lotId?: number | string
@ -136,10 +130,10 @@ function buildWhereClause(filters: GetLotOccupanciesFilters): {
} }
async function addInclusions( async function addInclusions(
lotOccupancy: recordTypes.LotOccupancy, lotOccupancy: LotOccupancy,
options: GetLotOccupanciesOptions, options: GetLotOccupanciesOptions,
database: PoolConnection database: PoolConnection
): Promise<recordTypes.LotOccupancy> { ): Promise<LotOccupancy> {
if (options.includeFees) { if (options.includeFees) {
lotOccupancy.lotOccupancyFees = await getLotOccupancyFees( lotOccupancy.lotOccupancyFees = await getLotOccupancyFees(
lotOccupancy.lotOccupancyId!, lotOccupancy.lotOccupancyId!,
@ -169,7 +163,7 @@ export async function getLotOccupancies(
filters: GetLotOccupanciesFilters, filters: GetLotOccupanciesFilters,
options: GetLotOccupanciesOptions, options: GetLotOccupanciesOptions,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<{ count: number; lotOccupancies: recordTypes.LotOccupancy[] }> { ): Promise<{ count: number; lotOccupancies: LotOccupancy[] }> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
database.function('userFn_dateIntegerToString', dateIntegerToString) database.function('userFn_dateIntegerToString', dateIntegerToString)
@ -193,7 +187,7 @@ export async function getLotOccupancies(
).recordCount ).recordCount
} }
let lotOccupancies: recordTypes.LotOccupancy[] = [] let lotOccupancies: LotOccupancy[] = []
if (count !== 0) { if (count !== 0) {
lotOccupancies = database lotOccupancies = database
@ -213,7 +207,7 @@ export async function getLotOccupancies(
order by o.occupancyStartDate desc, ifnull(o.occupancyEndDate, 99999999) desc, l.lotName, o.lotId, o.lotOccupancyId desc` + order by o.occupancyStartDate desc, ifnull(o.occupancyEndDate, 99999999) desc, l.lotName, o.lotId, o.lotOccupancyId desc` +
(isLimited ? ` limit ${options.limit} offset ${options.offset}` : '') (isLimited ? ` limit ${options.limit} offset ${options.offset}` : '')
) )
.all(sqlParameters) as recordTypes.LotOccupancy[] .all(sqlParameters) as LotOccupancy[]
if (!isLimited) { if (!isLimited) {
count = lotOccupancies.length count = lotOccupancies.length

View File

@ -1,4 +1,4 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { LotOccupancy } from '../types/recordTypes.js';
export declare function getLotOccupancy(lotOccupancyId: number | string, connectedDatabase?: PoolConnection): Promise<recordTypes.LotOccupancy | undefined>; export declare function getLotOccupancy(lotOccupancyId: number | string, connectedDatabase?: PoolConnection): Promise<LotOccupancy | undefined>;
export default getLotOccupancy; export default getLotOccupancy;

View File

@ -1,11 +1,11 @@
import { acquireConnection } from './pool.js';
import { dateIntegerToString } from '@cityssm/utils-datetime'; import { dateIntegerToString } from '@cityssm/utils-datetime';
import { getLotOccupancyOccupants } from './getLotOccupancyOccupants.js';
import { getLotOccupancyComments } from './getLotOccupancyComments.js'; import { getLotOccupancyComments } from './getLotOccupancyComments.js';
import { getLotOccupancyFields } from './getLotOccupancyFields.js';
import { getLotOccupancyFees } from './getLotOccupancyFees.js'; import { getLotOccupancyFees } from './getLotOccupancyFees.js';
import { getLotOccupancyFields } from './getLotOccupancyFields.js';
import { getLotOccupancyOccupants } from './getLotOccupancyOccupants.js';
import { getLotOccupancyTransactions } from './getLotOccupancyTransactions.js'; import { getLotOccupancyTransactions } from './getLotOccupancyTransactions.js';
import { getWorkOrders } from './getWorkOrders.js'; import { getWorkOrders } from './getWorkOrders.js';
import { acquireConnection } from './pool.js';
export async function getLotOccupancy(lotOccupancyId, connectedDatabase) { export async function getLotOccupancy(lotOccupancyId, connectedDatabase) {
const database = connectedDatabase ?? (await acquireConnection()); const database = connectedDatabase ?? (await acquireConnection());
database.function('userFn_dateIntegerToString', dateIntegerToString); database.function('userFn_dateIntegerToString', dateIntegerToString);

View File

@ -1,21 +1,20 @@
import { acquireConnection } from './pool.js' import { dateIntegerToString } from '@cityssm/utils-datetime'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import { dateIntegerToString } from '@cityssm/utils-datetime' import type { LotOccupancy } from '../types/recordTypes.js'
import { getLotOccupancyOccupants } from './getLotOccupancyOccupants.js'
import { getLotOccupancyComments } from './getLotOccupancyComments.js' import { getLotOccupancyComments } from './getLotOccupancyComments.js'
import { getLotOccupancyFields } from './getLotOccupancyFields.js'
import { getLotOccupancyFees } from './getLotOccupancyFees.js' import { getLotOccupancyFees } from './getLotOccupancyFees.js'
import { getLotOccupancyFields } from './getLotOccupancyFields.js'
import { getLotOccupancyOccupants } from './getLotOccupancyOccupants.js'
import { getLotOccupancyTransactions } from './getLotOccupancyTransactions.js' import { getLotOccupancyTransactions } from './getLotOccupancyTransactions.js'
import { getWorkOrders } from './getWorkOrders.js' import { getWorkOrders } from './getWorkOrders.js'
import { acquireConnection } from './pool.js'
import type * as recordTypes from '../types/recordTypes.js'
export async function getLotOccupancy( export async function getLotOccupancy(
lotOccupancyId: number | string, lotOccupancyId: number | string,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.LotOccupancy | undefined> { ): Promise<LotOccupancy | undefined> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
database.function('userFn_dateIntegerToString', dateIntegerToString) database.function('userFn_dateIntegerToString', dateIntegerToString)
@ -36,7 +35,7 @@ export async function getLotOccupancy(
where o.recordDelete_timeMillis is null where o.recordDelete_timeMillis is null
and o.lotOccupancyId = ?` and o.lotOccupancyId = ?`
) )
.get(lotOccupancyId) as recordTypes.LotOccupancy | undefined .get(lotOccupancyId) as LotOccupancy | undefined
if (lotOccupancy !== undefined) { if (lotOccupancy !== undefined) {
lotOccupancy.lotOccupancyFields = await getLotOccupancyFields( lotOccupancy.lotOccupancyFields = await getLotOccupancyFields(

View File

@ -1,4 +1,4 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { LotOccupancyComment } from '../types/recordTypes.js';
export declare function getLotOccupancyComments(lotOccupancyId: number | string, connectedDatabase?: PoolConnection): Promise<recordTypes.LotOccupancyComment[]>; export declare function getLotOccupancyComments(lotOccupancyId: number | string, connectedDatabase?: PoolConnection): Promise<LotOccupancyComment[]>;
export default getLotOccupancyComments; export default getLotOccupancyComments;

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import { dateIntegerToString, timeIntegerToString, timeIntegerToPeriodString } from '@cityssm/utils-datetime'; import { dateIntegerToString, timeIntegerToString, timeIntegerToPeriodString } from '@cityssm/utils-datetime';
import { acquireConnection } from './pool.js';
export async function getLotOccupancyComments(lotOccupancyId, connectedDatabase) { export async function getLotOccupancyComments(lotOccupancyId, connectedDatabase) {
const database = connectedDatabase ?? (await acquireConnection()); const database = connectedDatabase ?? (await acquireConnection());
database.function('userFn_dateIntegerToString', dateIntegerToString); database.function('userFn_dateIntegerToString', dateIntegerToString);

View File

@ -1,23 +1,26 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool'
import { import {
dateIntegerToString, dateIntegerToString,
timeIntegerToString, timeIntegerToString,
timeIntegerToPeriodString timeIntegerToPeriodString
} from '@cityssm/utils-datetime' } from '@cityssm/utils-datetime'
import type { PoolConnection } from 'better-sqlite-pool'
import type * as recordTypes from '../types/recordTypes.js' import type { LotOccupancyComment } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
export async function getLotOccupancyComments( export async function getLotOccupancyComments(
lotOccupancyId: number | string, lotOccupancyId: number | string,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.LotOccupancyComment[]> { ): Promise<LotOccupancyComment[]> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
database.function('userFn_dateIntegerToString', dateIntegerToString) database.function('userFn_dateIntegerToString', dateIntegerToString)
database.function('userFn_timeIntegerToString', timeIntegerToString) database.function('userFn_timeIntegerToString', timeIntegerToString)
database.function('userFn_timeIntegerToPeriodString', timeIntegerToPeriodString) database.function(
'userFn_timeIntegerToPeriodString',
timeIntegerToPeriodString
)
const lotComments = database const lotComments = database
.prepare( .prepare(
@ -33,7 +36,7 @@ export async function getLotOccupancyComments(
and lotOccupancyId = ? and lotOccupancyId = ?
order by lotOccupancyCommentDate desc, lotOccupancyCommentTime desc, lotOccupancyCommentId desc` order by lotOccupancyCommentDate desc, lotOccupancyCommentTime desc, lotOccupancyCommentId desc`
) )
.all(lotOccupancyId) as recordTypes.LotOccupancyComment[] .all(lotOccupancyId) as LotOccupancyComment[]
if (connectedDatabase === null) { if (connectedDatabase === null) {
database.release() database.release()

View File

@ -1,4 +1,4 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { LotOccupancyFee } from '../types/recordTypes.js';
export declare function getLotOccupancyFees(lotOccupancyId: number | string, connectedDatabase?: PoolConnection): Promise<recordTypes.LotOccupancyFee[]>; export declare function getLotOccupancyFees(lotOccupancyId: number | string, connectedDatabase?: PoolConnection): Promise<LotOccupancyFee[]>;
export default getLotOccupancyFees; export default getLotOccupancyFees;

View File

@ -1,12 +1,13 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import type * as recordTypes from '../types/recordTypes.js' import type { LotOccupancyFee } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
export async function getLotOccupancyFees( export async function getLotOccupancyFees(
lotOccupancyId: number | string, lotOccupancyId: number | string,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.LotOccupancyFee[]> { ): Promise<LotOccupancyFee[]> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
const lotOccupancyFees = database const lotOccupancyFees = database
@ -21,7 +22,7 @@ export async function getLotOccupancyFees(
and o.lotOccupancyId = ? and o.lotOccupancyId = ?
order by o.recordCreate_timeMillis` order by o.recordCreate_timeMillis`
) )
.all(lotOccupancyId) as recordTypes.LotOccupancyFee[] .all(lotOccupancyId) as LotOccupancyFee[]
if (connectedDatabase === undefined) { if (connectedDatabase === undefined) {
database.release() database.release()

View File

@ -1,4 +1,4 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { LotOccupancyField } from '../types/recordTypes.js';
export declare function getLotOccupancyFields(lotOccupancyId: number | string, connectedDatabase?: PoolConnection): Promise<recordTypes.LotOccupancyField[]>; export declare function getLotOccupancyFields(lotOccupancyId: number | string, connectedDatabase?: PoolConnection): Promise<LotOccupancyField[]>;
export default getLotOccupancyFields; export default getLotOccupancyFields;

View File

@ -1,12 +1,13 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import type * as recordTypes from '../types/recordTypes.js' import type { LotOccupancyField } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
export async function getLotOccupancyFields( export async function getLotOccupancyFields(
lotOccupancyId: number | string, lotOccupancyId: number | string,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.LotOccupancyField[]> { ): Promise<LotOccupancyField[]> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
const lotOccupancyFields = database const lotOccupancyFields = database
@ -35,7 +36,12 @@ export async function getLotOccupancyFields(
and f.occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields where lotOccupancyId = ? and recordDelete_timeMillis is null) and f.occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields where lotOccupancyId = ? and recordDelete_timeMillis is null)
order by occupancyTypeOrderNumber, f.orderNumber, f.occupancyTypeField` order by occupancyTypeOrderNumber, f.orderNumber, f.occupancyTypeField`
) )
.all(lotOccupancyId, lotOccupancyId, lotOccupancyId, lotOccupancyId) as recordTypes.LotOccupancyField[] .all(
lotOccupancyId,
lotOccupancyId,
lotOccupancyId,
lotOccupancyId
) as LotOccupancyField[]
if (connectedDatabase === undefined) { if (connectedDatabase === undefined) {
database.release() database.release()

View File

@ -1,4 +1,4 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { LotOccupancyOccupant } from '../types/recordTypes.js';
export declare function getLotOccupancyOccupants(lotOccupancyId: number | string, connectedDatabase?: PoolConnection): Promise<recordTypes.LotOccupancyOccupant[]>; export declare function getLotOccupancyOccupants(lotOccupancyId: number | string, connectedDatabase?: PoolConnection): Promise<LotOccupancyOccupant[]>;
export default getLotOccupancyOccupants; export default getLotOccupancyOccupants;

View File

@ -1,12 +1,13 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import type * as recordTypes from '../types/recordTypes.js' import type { LotOccupancyOccupant } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
export async function getLotOccupancyOccupants( export async function getLotOccupancyOccupants(
lotOccupancyId: number | string, lotOccupancyId: number | string,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.LotOccupancyOccupant[]> { ): Promise<LotOccupancyOccupant[]> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
const lotOccupancyOccupants = database const lotOccupancyOccupants = database
@ -25,7 +26,7 @@ export async function getLotOccupancyOccupants(
and o.lotOccupancyId = ? and o.lotOccupancyId = ?
order by t.orderNumber, t.lotOccupantType, o.occupantName, o.lotOccupantIndex` order by t.orderNumber, t.lotOccupantType, o.occupantName, o.lotOccupantIndex`
) )
.all(lotOccupancyId) as recordTypes.LotOccupancyOccupant[] .all(lotOccupancyId) as LotOccupancyOccupant[]
if (connectedDatabase === undefined) { if (connectedDatabase === undefined) {
database.release() database.release()

View File

@ -1,6 +1,6 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { LotOccupancyTransaction } from '../types/recordTypes.js';
export declare function getLotOccupancyTransactions(lotOccupancyId: number | string, options: { export declare function getLotOccupancyTransactions(lotOccupancyId: number | string, options: {
includeIntegrations: boolean; includeIntegrations: boolean;
}, connectedDatabase?: PoolConnection): Promise<recordTypes.LotOccupancyTransaction[]>; }, connectedDatabase?: PoolConnection): Promise<LotOccupancyTransaction[]>;
export default getLotOccupancyTransactions; export default getLotOccupancyTransactions;

View File

@ -1,7 +1,7 @@
import { acquireConnection } from './pool.js';
import { dateIntegerToString, timeIntegerToString } from '@cityssm/utils-datetime'; import { dateIntegerToString, timeIntegerToString } from '@cityssm/utils-datetime';
import * as configFunctions from '../helpers/functions.config.js'; import * as configFunctions from '../helpers/functions.config.js';
import * as gpFunctions from '../helpers/functions.dynamicsGP.js'; import * as gpFunctions from '../helpers/functions.dynamicsGP.js';
import { acquireConnection } from './pool.js';
export async function getLotOccupancyTransactions(lotOccupancyId, options, connectedDatabase) { export async function getLotOccupancyTransactions(lotOccupancyId, options, connectedDatabase) {
const database = connectedDatabase ?? (await acquireConnection()); const database = connectedDatabase ?? (await acquireConnection());
database.function('userFn_dateIntegerToString', dateIntegerToString); database.function('userFn_dateIntegerToString', dateIntegerToString);
@ -23,7 +23,7 @@ export async function getLotOccupancyTransactions(lotOccupancyId, options, conne
configFunctions.getProperty('settings.dynamicsGP.integrationIsEnabled')) { configFunctions.getProperty('settings.dynamicsGP.integrationIsEnabled')) {
for (const transaction of lotOccupancyTransactions) { for (const transaction of lotOccupancyTransactions) {
if ((transaction.externalReceiptNumber ?? '') !== '') { if ((transaction.externalReceiptNumber ?? '') !== '') {
const gpDocument = await gpFunctions.getDynamicsGPDocument(transaction.externalReceiptNumber); const gpDocument = await gpFunctions.getDynamicsGPDocument(transaction.externalReceiptNumber ?? '');
if (gpDocument !== undefined) { if (gpDocument !== undefined) {
transaction.dynamicsGPDocument = gpDocument; transaction.dynamicsGPDocument = gpDocument;
} }

View File

@ -1,15 +1,14 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool'
import { import {
dateIntegerToString, dateIntegerToString,
timeIntegerToString timeIntegerToString
} from '@cityssm/utils-datetime' } from '@cityssm/utils-datetime'
import type { PoolConnection } from 'better-sqlite-pool'
import * as configFunctions from '../helpers/functions.config.js' import * as configFunctions from '../helpers/functions.config.js'
import * as gpFunctions from '../helpers/functions.dynamicsGP.js' import * as gpFunctions from '../helpers/functions.dynamicsGP.js'
import type { LotOccupancyTransaction } from '../types/recordTypes.js'
import type * as recordTypes from '../types/recordTypes.js' import { acquireConnection } from './pool.js'
export async function getLotOccupancyTransactions( export async function getLotOccupancyTransactions(
lotOccupancyId: number | string, lotOccupancyId: number | string,
@ -17,7 +16,7 @@ export async function getLotOccupancyTransactions(
includeIntegrations: boolean includeIntegrations: boolean
}, },
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.LotOccupancyTransaction[]> { ): Promise<LotOccupancyTransaction[]> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
database.function('userFn_dateIntegerToString', dateIntegerToString) database.function('userFn_dateIntegerToString', dateIntegerToString)
@ -34,7 +33,7 @@ export async function getLotOccupancyTransactions(
and lotOccupancyId = ? and lotOccupancyId = ?
order by transactionDate, transactionTime, transactionIndex` order by transactionDate, transactionTime, transactionIndex`
) )
.all(lotOccupancyId) as recordTypes.LotOccupancyTransaction[] .all(lotOccupancyId) as LotOccupancyTransaction[]
if (connectedDatabase === undefined) { if (connectedDatabase === undefined) {
database.release() database.release()
@ -47,7 +46,7 @@ export async function getLotOccupancyTransactions(
for (const transaction of lotOccupancyTransactions) { for (const transaction of lotOccupancyTransactions) {
if ((transaction.externalReceiptNumber ?? '') !== '') { if ((transaction.externalReceiptNumber ?? '') !== '') {
const gpDocument = await gpFunctions.getDynamicsGPDocument( const gpDocument = await gpFunctions.getDynamicsGPDocument(
transaction.externalReceiptNumber! transaction.externalReceiptNumber ?? ''
) )
if (gpDocument !== undefined) { if (gpDocument !== undefined) {

View File

@ -1,3 +1,3 @@
import type * as recordTypes from '../types/recordTypes.js'; import type { LotOccupantType } from '../types/recordTypes.js';
export declare function getLotOccupantTypes(): Promise<recordTypes.LotOccupantType[]>; export declare function getLotOccupantTypes(): Promise<LotOccupantType[]>;
export default getLotOccupantTypes; export default getLotOccupantTypes;

View File

@ -1,14 +1,9 @@
/* eslint-disable @typescript-eslint/indent */ import type { LotOccupantType } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js' import { acquireConnection } from './pool.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
import type * as recordTypes from '../types/recordTypes.js' export async function getLotOccupantTypes(): Promise<LotOccupantType[]> {
export async function getLotOccupantTypes(): Promise<
recordTypes.LotOccupantType[]
> {
const database = await acquireConnection() const database = await acquireConnection()
const lotOccupantTypes = database const lotOccupantTypes = database
@ -19,7 +14,7 @@ export async function getLotOccupantTypes(): Promise<
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
order by orderNumber, lotOccupantType` order by orderNumber, lotOccupantType`
) )
.all() as recordTypes.LotOccupantType[] .all() as LotOccupantType[]
let expectedOrderNumber = 0 let expectedOrderNumber = 0

View File

@ -1,8 +1,8 @@
import type * as recordTypes from '../types/recordTypes.js'; import type { LotStatus } from '../types/recordTypes.js';
interface GetFilters { interface GetFilters {
mapId?: number | string; mapId?: number | string;
} }
interface LotStatusSummary extends recordTypes.LotStatus { interface LotStatusSummary extends LotStatus {
lotCount: number; lotCount: number;
} }
export declare function getLotStatusSummary(filters: GetFilters): Promise<LotStatusSummary[]>; export declare function getLotStatusSummary(filters: GetFilters): Promise<LotStatusSummary[]>;

View File

@ -1,12 +1,12 @@
import { acquireConnection } from './pool.js' import type { LotStatus } from '../types/recordTypes.js'
import type * as recordTypes from '../types/recordTypes.js' import { acquireConnection } from './pool.js'
interface GetFilters { interface GetFilters {
mapId?: number | string mapId?: number | string
} }
interface LotStatusSummary extends recordTypes.LotStatus { interface LotStatusSummary extends LotStatus {
lotCount: number lotCount: number
} }

View File

@ -1,3 +1,3 @@
import type * as recordTypes from '../types/recordTypes.js'; import type { LotStatus } from '../types/recordTypes.js';
export declare function getLotStatuses(): Promise<recordTypes.LotStatus[]>; export declare function getLotStatuses(): Promise<LotStatus[]>;
export default getLotStatuses; export default getLotStatuses;

View File

@ -1,10 +1,9 @@
import { acquireConnection } from './pool.js' import type { LotStatus } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
import type * as recordTypes from '../types/recordTypes.js' export async function getLotStatuses(): Promise<LotStatus[]> {
export async function getLotStatuses(): Promise<recordTypes.LotStatus[]> {
const database = await acquireConnection() const database = await acquireConnection()
const lotStatuses = database const lotStatuses = database
@ -14,7 +13,7 @@ export async function getLotStatuses(): Promise<recordTypes.LotStatus[]> {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
order by orderNumber, lotStatus` order by orderNumber, lotStatus`
) )
.all() as recordTypes.LotStatus[] .all() as LotStatus[]
let expectedOrderNumber = 0 let expectedOrderNumber = 0

View File

@ -1,4 +1,4 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { LotTypeField } from '../types/recordTypes.js';
export declare function getLotTypeFields(lotTypeId: number, connectedDatabase?: PoolConnection): Promise<recordTypes.LotTypeField[]>; export declare function getLotTypeFields(lotTypeId: number, connectedDatabase?: PoolConnection): Promise<LotTypeField[]>;
export default getLotTypeFields; export default getLotTypeFields;

View File

@ -1,13 +1,14 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import type * as recordTypes from '../types/recordTypes.js' import type { LotTypeField } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
export async function getLotTypeFields( export async function getLotTypeFields(
lotTypeId: number, lotTypeId: number,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.LotTypeField[]> { ): Promise<LotTypeField[]> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
const lotTypeFields = database const lotTypeFields = database
@ -20,7 +21,7 @@ export async function getLotTypeFields(
and lotTypeId = ? and lotTypeId = ?
order by orderNumber, lotTypeField` order by orderNumber, lotTypeField`
) )
.all(lotTypeId) as recordTypes.LotTypeField[] .all(lotTypeId) as LotTypeField[]
let expectedOrderNumber = 0 let expectedOrderNumber = 0

View File

@ -1,8 +1,8 @@
import type * as recordTypes from '../types/recordTypes.js'; import type { LotType } from '../types/recordTypes.js';
interface GetFilters { interface GetFilters {
mapId?: number | string; mapId?: number | string;
} }
interface LotTypeSummary extends recordTypes.LotType { interface LotTypeSummary extends LotType {
lotCount: number; lotCount: number;
} }
export declare function getLotTypeSummary(filters: GetFilters): Promise<LotTypeSummary[]>; export declare function getLotTypeSummary(filters: GetFilters): Promise<LotTypeSummary[]>;

View File

@ -1,12 +1,12 @@
import { acquireConnection } from './pool.js' import type { LotType } from '../types/recordTypes.js'
import type * as recordTypes from '../types/recordTypes.js' import { acquireConnection } from './pool.js'
interface GetFilters { interface GetFilters {
mapId?: number | string mapId?: number | string
} }
interface LotTypeSummary extends recordTypes.LotType { interface LotTypeSummary extends LotType {
lotCount: number lotCount: number
} }

View File

@ -1,3 +1,3 @@
import type * as recordTypes from '../types/recordTypes.js'; import type { LotType } from '../types/recordTypes.js';
export declare function getLotTypes(): Promise<recordTypes.LotType[]>; export declare function getLotTypes(): Promise<LotType[]>;
export default getLotTypes; export default getLotTypes;

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import { getLotTypeFields } from './getLotTypeFields.js'; import { getLotTypeFields } from './getLotTypeFields.js';
import { acquireConnection } from './pool.js';
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
export async function getLotTypes() { export async function getLotTypes() {
const database = await acquireConnection(); const database = await acquireConnection();

View File

@ -1,11 +1,10 @@
import { acquireConnection } from './pool.js' import type { LotType } from '../types/recordTypes.js'
import { getLotTypeFields } from './getLotTypeFields.js' import { getLotTypeFields } from './getLotTypeFields.js'
import { acquireConnection } from './pool.js'
import type * as recordTypes from '../types/recordTypes.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
export async function getLotTypes(): Promise<recordTypes.LotType[]> { export async function getLotTypes(): Promise<LotType[]> {
const database = await acquireConnection() const database = await acquireConnection()
const lotTypes = database const lotTypes = database
@ -15,7 +14,7 @@ export async function getLotTypes(): Promise<recordTypes.LotType[]> {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
order by orderNumber, lotType` order by orderNumber, lotType`
) )
.all() as recordTypes.LotType[] .all() as LotType[]
let expectedTypeOrderNumber = -1 let expectedTypeOrderNumber = -1

View File

@ -1,5 +1,5 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { Lot } from '../types/recordTypes.js';
interface GetLotsFilters { interface GetLotsFilters {
lotNameSearchType?: '' | 'startsWith' | 'endsWith'; lotNameSearchType?: '' | 'startsWith' | 'endsWith';
lotName?: string; lotName?: string;
@ -16,6 +16,6 @@ interface GetLotsOptions {
} }
export declare function getLots(filters: GetLotsFilters, options: GetLotsOptions, connectedDatabase?: PoolConnection): Promise<{ export declare function getLots(filters: GetLotsFilters, options: GetLotsOptions, connectedDatabase?: PoolConnection): Promise<{
count: number; count: number;
lots: recordTypes.Lot[]; lots: Lot[];
}>; }>;
export default getLots; export default getLots;

View File

@ -1,7 +1,7 @@
import { acquireConnection } from './pool.js';
import { dateToInteger } from '@cityssm/utils-datetime'; import { dateToInteger } from '@cityssm/utils-datetime';
import * as configFunctions from '../helpers/functions.config.js'; import * as configFunctions from '../helpers/functions.config.js';
import { getLotNameWhereClause } from '../helpers/functions.sqlFilters.js'; import { getLotNameWhereClause } from '../helpers/functions.sqlFilters.js';
import { acquireConnection } from './pool.js';
function buildWhereClause(filters) { function buildWhereClause(filters) {
let sqlWhereClause = ' where l.recordDelete_timeMillis is null'; let sqlWhereClause = ' where l.recordDelete_timeMillis is null';
const sqlParameters = []; const sqlParameters = [];

View File

@ -1,14 +1,11 @@
/* eslint-disable @typescript-eslint/indent */ import { dateToInteger } from '@cityssm/utils-datetime'
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import { dateToInteger } from '@cityssm/utils-datetime'
import * as configFunctions from '../helpers/functions.config.js' import * as configFunctions from '../helpers/functions.config.js'
import type * as recordTypes from '../types/recordTypes.js'
import { getLotNameWhereClause } from '../helpers/functions.sqlFilters.js' import { getLotNameWhereClause } from '../helpers/functions.sqlFilters.js'
import type { Lot } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
interface GetLotsFilters { interface GetLotsFilters {
lotNameSearchType?: '' | 'startsWith' | 'endsWith' lotNameSearchType?: '' | 'startsWith' | 'endsWith'
@ -81,7 +78,7 @@ export async function getLots(
filters: GetLotsFilters, filters: GetLotsFilters,
options: GetLotsOptions, options: GetLotsOptions,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<{ count: number; lots: recordTypes.Lot[] }> { ): Promise<{ count: number; lots: Lot[] }> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
const { sqlWhereClause, sqlParameters } = buildWhereClause(filters) const { sqlWhereClause, sqlParameters } = buildWhereClause(filters)
@ -109,7 +106,7 @@ export async function getLots(
).recordCount ).recordCount
} }
let lots: recordTypes.Lot[] = [] let lots: Lot[] = []
if (options.limit === -1 || count > 0) { if (options.limit === -1 || count > 0) {
const includeLotOccupancyCount = options.includeLotOccupancyCount ?? true const includeLotOccupancyCount = options.includeLotOccupancyCount ?? true
@ -157,7 +154,7 @@ export async function getLots(
: ` limit ${options.limit.toString()} offset ${options.offset.toString()}` : ` limit ${options.limit.toString()} offset ${options.offset.toString()}`
}` }`
) )
.all(sqlParameters) as recordTypes.Lot[] .all(sqlParameters) as Lot[]
if (options.limit === -1) { if (options.limit === -1) {
count = lots.length count = lots.length

View File

@ -13,7 +13,7 @@ export async function getMap(mapId) {
from Maps m from Maps m
left join Lots l on m.mapId = l.mapId and l.recordDelete_timeMillis is null left join Lots l on m.mapId = l.mapId and l.recordDelete_timeMillis is null
where m.mapId = ? where m.mapId = ?
and m.recordDelete_timeMillis is null and m.recordDelete_timeMillis is null
group by m.mapId, m.mapName, m.mapDescription, group by m.mapId, m.mapName, m.mapDescription,
m.mapLatitude, m.mapLongitude, m.mapSVG, m.mapLatitude, m.mapLongitude, m.mapSVG,
m.mapAddress1, m.mapAddress2, m.mapCity, m.mapProvince, m.mapPostalCode, m.mapAddress1, m.mapAddress2, m.mapCity, m.mapProvince, m.mapPostalCode,

View File

@ -20,7 +20,7 @@ export async function getMap(
from Maps m from Maps m
left join Lots l on m.mapId = l.mapId and l.recordDelete_timeMillis is null left join Lots l on m.mapId = l.mapId and l.recordDelete_timeMillis is null
where m.mapId = ? where m.mapId = ?
and m.recordDelete_timeMillis is null and m.recordDelete_timeMillis is null
group by m.mapId, m.mapName, m.mapDescription, group by m.mapId, m.mapName, m.mapDescription,
m.mapLatitude, m.mapLongitude, m.mapSVG, m.mapLatitude, m.mapLongitude, m.mapSVG,
m.mapAddress1, m.mapAddress2, m.mapCity, m.mapProvince, m.mapPostalCode, m.mapAddress1, m.mapAddress2, m.mapCity, m.mapProvince, m.mapPostalCode,

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import * as configFunctions from '../helpers/functions.config.js'; import * as configFunctions from '../helpers/functions.config.js';
import { acquireConnection } from './pool.js';
export async function getNextLotId(lotId) { export async function getNextLotId(lotId) {
const database = await acquireConnection(); const database = await acquireConnection();
database.function('userFn_lotNameSortName', configFunctions.getProperty('settings.lot.lotNameSortNameFunction')); database.function('userFn_lotNameSortName', configFunctions.getProperty('settings.lot.lotNameSortNameFunction'));

View File

@ -1,7 +1,7 @@
import { acquireConnection } from './pool.js'
import * as configFunctions from '../helpers/functions.config.js' import * as configFunctions from '../helpers/functions.config.js'
import { acquireConnection } from './pool.js'
export async function getNextLotId( export async function getNextLotId(
lotId: number | string lotId: number | string
): Promise<number | undefined> { ): Promise<number | undefined> {

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import * as configFunctions from '../helpers/functions.config.js'; import * as configFunctions from '../helpers/functions.config.js';
import { acquireConnection } from './pool.js';
export async function getNextWorkOrderNumber(connectedDatabase) { export async function getNextWorkOrderNumber(connectedDatabase) {
const database = connectedDatabase ?? (await acquireConnection()); const database = connectedDatabase ?? (await acquireConnection());
const paddingLength = configFunctions.getProperty('settings.workOrders.workOrderNumberLength'); const paddingLength = configFunctions.getProperty('settings.workOrders.workOrderNumberLength');

View File

@ -1,8 +1,9 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import * as configFunctions from '../helpers/functions.config.js' import * as configFunctions from '../helpers/functions.config.js'
import { acquireConnection } from './pool.js'
export async function getNextWorkOrderNumber( export async function getNextWorkOrderNumber(
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<string> { ): Promise<string> {

View File

@ -1,4 +1,4 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { OccupancyTypeField } from '../types/recordTypes.js';
export declare function getOccupancyTypeFields(occupancyTypeId?: number, connectedDatabase?: PoolConnection): Promise<recordTypes.OccupancyTypeField[]>; export declare function getOccupancyTypeFields(occupancyTypeId?: number, connectedDatabase?: PoolConnection): Promise<OccupancyTypeField[]>;
export default getOccupancyTypeFields; export default getOccupancyTypeFields;

View File

@ -1,13 +1,14 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import type * as recordTypes from '../types/recordTypes.js' import type { OccupancyTypeField } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
export async function getOccupancyTypeFields( export async function getOccupancyTypeFields(
occupancyTypeId?: number, occupancyTypeId?: number,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.OccupancyTypeField[]> { ): Promise<OccupancyTypeField[]> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
const sqlParameters: unknown[] = [] const sqlParameters: unknown[] = []
@ -29,7 +30,7 @@ export async function getOccupancyTypeFields(
: ' and occupancyTypeId = ?') + : ' and occupancyTypeId = ?') +
' order by orderNumber, occupancyTypeField' ' order by orderNumber, occupancyTypeField'
) )
.all(sqlParameters) as recordTypes.OccupancyTypeField[] .all(sqlParameters) as OccupancyTypeField[]
let expectedOrderNumber = 0 let expectedOrderNumber = 0
@ -37,7 +38,7 @@ export async function getOccupancyTypeFields(
if (occupancyTypeField.orderNumber !== expectedOrderNumber) { if (occupancyTypeField.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber( updateRecordOrderNumber(
'OccupancyTypeFields', 'OccupancyTypeFields',
occupancyTypeField.occupancyTypeFieldId!, occupancyTypeField.occupancyTypeFieldId,
expectedOrderNumber, expectedOrderNumber,
database database
) )

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import * as configFunctions from '../helpers/functions.config.js'; import * as configFunctions from '../helpers/functions.config.js';
import { acquireConnection } from './pool.js';
const availablePrints = configFunctions.getProperty('settings.lotOccupancy.prints'); const availablePrints = configFunctions.getProperty('settings.lotOccupancy.prints');
const userFunction_configContainsPrintEJS = (printEJS) => { const userFunction_configContainsPrintEJS = (printEJS) => {
if (printEJS === '*' || availablePrints.includes(printEJS)) { if (printEJS === '*' || availablePrints.includes(printEJS)) {

View File

@ -1,8 +1,9 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import * as configFunctions from '../helpers/functions.config.js' import * as configFunctions from '../helpers/functions.config.js'
import { acquireConnection } from './pool.js'
const availablePrints = configFunctions.getProperty( const availablePrints = configFunctions.getProperty(
'settings.lotOccupancy.prints' 'settings.lotOccupancy.prints'
) )

View File

@ -1,3 +1,3 @@
import type * as recordTypes from '../types/recordTypes.js'; import type { OccupancyType } from '../types/recordTypes.js';
export declare function getOccupancyTypes(): Promise<recordTypes.OccupancyType[]>; export declare function getOccupancyTypes(): Promise<OccupancyType[]>;
export default getOccupancyTypes; export default getOccupancyTypes;

View File

@ -1,6 +1,6 @@
import { acquireConnection } from './pool.js';
import { getOccupancyTypeFields } from './getOccupancyTypeFields.js'; import { getOccupancyTypeFields } from './getOccupancyTypeFields.js';
import { getOccupancyTypePrints } from './getOccupancyTypePrints.js'; import { getOccupancyTypePrints } from './getOccupancyTypePrints.js';
import { acquireConnection } from './pool.js';
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
export async function getOccupancyTypes() { export async function getOccupancyTypes() {
const database = await acquireConnection(); const database = await acquireConnection();

View File

@ -1,16 +1,11 @@
/* eslint-disable @typescript-eslint/indent */ import type { OccupancyType } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
import { getOccupancyTypeFields } from './getOccupancyTypeFields.js' import { getOccupancyTypeFields } from './getOccupancyTypeFields.js'
import { getOccupancyTypePrints } from './getOccupancyTypePrints.js' import { getOccupancyTypePrints } from './getOccupancyTypePrints.js'
import { acquireConnection } from './pool.js'
import type * as recordTypes from '../types/recordTypes.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
export async function getOccupancyTypes(): Promise< export async function getOccupancyTypes(): Promise<OccupancyType[]> {
recordTypes.OccupancyType[]
> {
const database = await acquireConnection() const database = await acquireConnection()
const occupancyTypes = database const occupancyTypes = database
@ -20,7 +15,7 @@ export async function getOccupancyTypes(): Promise<
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
order by orderNumber, occupancyType` order by orderNumber, occupancyType`
) )
.all() as recordTypes.OccupancyType[] .all() as OccupancyType[]
let expectedTypeOrderNumber = -1 let expectedTypeOrderNumber = -1

View File

@ -1,9 +1,9 @@
import type * as recordTypes from '../types/recordTypes.js'; import type { LotOccupancyOccupant } from '../types/recordTypes.js';
interface GetPastLotOccupancyOccupantsFilters { interface GetPastLotOccupancyOccupantsFilters {
searchFilter: string; searchFilter: string;
} }
interface GetPastLotOccupancyOccupantsOptions { interface GetPastLotOccupancyOccupantsOptions {
limit: number; limit: number;
} }
export declare function getPastLotOccupancyOccupants(filters: GetPastLotOccupancyOccupantsFilters, options: GetPastLotOccupancyOccupantsOptions): Promise<recordTypes.LotOccupancyOccupant[]>; export declare function getPastLotOccupancyOccupants(filters: GetPastLotOccupancyOccupantsFilters, options: GetPastLotOccupancyOccupantsOptions): Promise<LotOccupancyOccupant[]>;
export default getPastLotOccupancyOccupants; export default getPastLotOccupancyOccupants;

View File

@ -1,6 +1,6 @@
import { acquireConnection } from './pool.js' import type { LotOccupancyOccupant } from '../types/recordTypes.js'
import type * as recordTypes from '../types/recordTypes.js' import { acquireConnection } from './pool.js'
interface GetPastLotOccupancyOccupantsFilters { interface GetPastLotOccupancyOccupantsFilters {
searchFilter: string searchFilter: string
@ -13,7 +13,7 @@ interface GetPastLotOccupancyOccupantsOptions {
export async function getPastLotOccupancyOccupants( export async function getPastLotOccupancyOccupants(
filters: GetPastLotOccupancyOccupantsFilters, filters: GetPastLotOccupancyOccupantsFilters,
options: GetPastLotOccupancyOccupantsOptions options: GetPastLotOccupancyOccupantsOptions
): Promise<recordTypes.LotOccupancyOccupant[]> { ): Promise<LotOccupancyOccupant[]> {
const database = await acquireConnection() const database = await acquireConnection()
let sqlWhereClause = let sqlWhereClause =
@ -63,7 +63,7 @@ export async function getPastLotOccupancyOccupants(
const lotOccupancyOccupants = database const lotOccupancyOccupants = database
.prepare(sql) .prepare(sql)
.all(sqlParameters) as recordTypes.LotOccupancyOccupant[] .all(sqlParameters) as LotOccupancyOccupant[]
database.release() database.release()

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import * as configFunctions from '../helpers/functions.config.js'; import * as configFunctions from '../helpers/functions.config.js';
import { acquireConnection } from './pool.js';
export async function getPreviousLotId(lotId) { export async function getPreviousLotId(lotId) {
const database = await acquireConnection(); const database = await acquireConnection();
database.function('userFn_lotNameSortName', configFunctions.getProperty('settings.lot.lotNameSortNameFunction')); database.function('userFn_lotNameSortName', configFunctions.getProperty('settings.lot.lotNameSortNameFunction'));

View File

@ -1,7 +1,7 @@
import { acquireConnection } from './pool.js'
import * as configFunctions from '../helpers/functions.config.js' import * as configFunctions from '../helpers/functions.config.js'
import { acquireConnection } from './pool.js'
export async function getPreviousLotId( export async function getPreviousLotId(
lotId: number | string lotId: number | string
): Promise<number | undefined> { ): Promise<number | undefined> {

View File

@ -1,40 +1,40 @@
import { acquireConnection } from './pool.js';
import * as configFunctions from '../helpers/functions.config.js';
import * as dateTimeFunctions from '@cityssm/utils-datetime'; import * as dateTimeFunctions from '@cityssm/utils-datetime';
import camelCase from 'camelcase'; import camelCase from 'camelcase';
import * as configFunctions from '../helpers/functions.config.js';
import { acquireConnection } from './pool.js';
const mapCamelCase = camelCase(configFunctions.getProperty('aliases.map')); const mapCamelCase = camelCase(configFunctions.getProperty('aliases.map'));
const mapNameAlias = mapCamelCase + 'Name'; const mapNameAlias = `${mapCamelCase}Name`;
const mapDescriptionAlias = mapCamelCase + 'Description'; const mapDescriptionAlias = `${mapCamelCase}Description`;
const mapAddress1Alias = mapCamelCase + 'Address1'; const mapAddress1Alias = `${mapCamelCase}Address1`;
const mapAddress2Alias = mapCamelCase + 'Address2'; const mapAddress2Alias = `${mapCamelCase}Address2`;
const mapCityAlias = mapCamelCase + 'City'; const mapCityAlias = `${mapCamelCase}City`;
const mapProvinceAlias = mapCamelCase + 'Province'; const mapProvinceAlias = `${mapCamelCase}Province`;
const mapPostalCodeAlias = mapCamelCase + 'PostalCode'; const mapPostalCodeAlias = `${mapCamelCase}PostalCode`;
const mapPhoneNumberAlias = mapCamelCase + 'PhoneNumber'; const mapPhoneNumberAlias = `${mapCamelCase}PhoneNumber`;
const lotCamelCase = camelCase(configFunctions.getProperty('aliases.lot')); const lotCamelCase = camelCase(configFunctions.getProperty('aliases.lot'));
const lotIdAlias = lotCamelCase + 'Id'; const lotIdAlias = `${lotCamelCase}Id`;
const lotNameAlias = lotCamelCase + 'Name'; const lotNameAlias = `${lotCamelCase}Name`;
const lotTypeAlias = lotCamelCase + 'Type'; const lotTypeAlias = `${lotCamelCase}Type`;
const lotStatusAlias = lotCamelCase + 'Status'; const lotStatusAlias = `${lotCamelCase}Status`;
const occupancyCamelCase = camelCase(configFunctions.getProperty('aliases.occupancy')); const occupancyCamelCase = camelCase(configFunctions.getProperty('aliases.occupancy'));
const lotOccupancyIdAlias = occupancyCamelCase + 'Id'; const lotOccupancyIdAlias = `${occupancyCamelCase}Id`;
const occupancyTypeAlias = occupancyCamelCase + 'Type'; const occupancyTypeAlias = `${occupancyCamelCase}Type`;
const occupancyStartDateAlias = occupancyCamelCase + 'StartDate'; const occupancyStartDateAlias = `${occupancyCamelCase}StartDate`;
const occupancyEndDateAlias = occupancyCamelCase + 'EndDate'; const occupancyEndDateAlias = `${occupancyCamelCase}EndDate`;
const occupantCamelCase = camelCase(configFunctions.getProperty('aliases.occupant')); const occupantCamelCase = camelCase(configFunctions.getProperty('aliases.occupant'));
const lotOccupantIndexAlias = occupantCamelCase + 'Index'; const lotOccupantIndexAlias = `${occupantCamelCase}Index`;
const lotOccupantTypeAlias = occupantCamelCase + 'Type'; const lotOccupantTypeAlias = `${occupantCamelCase}Type`;
const occupantNameAlias = occupantCamelCase + 'Name'; const occupantNameAlias = `${occupantCamelCase}Name`;
const occupantFamilyNameAlias = occupantCamelCase + 'FamilyName'; const occupantFamilyNameAlias = `${occupantCamelCase}FamilyName`;
const occupantAddress1Alias = occupantCamelCase + 'Address1'; const occupantAddress1Alias = `${occupantCamelCase}Address1`;
const occupantAddress2Alias = occupantCamelCase + 'Address2'; const occupantAddress2Alias = `${occupantCamelCase}Address2`;
const occupantCityAlias = occupantCamelCase + 'City'; const occupantCityAlias = `${occupantCamelCase}City`;
const occupantProvinceAlias = occupantCamelCase + 'Province'; const occupantProvinceAlias = `${occupantCamelCase}Province`;
const occupantPostalCodeAlias = occupantCamelCase + 'PostalCode'; const occupantPostalCodeAlias = `${occupantCamelCase}PostalCode`;
const occupantPhoneNumberAlias = occupantCamelCase + 'PhoneNumber'; const occupantPhoneNumberAlias = `${occupantCamelCase}PhoneNumber`;
const occupantEmailAddressAlias = occupantCamelCase + 'EmailAddress'; const occupantEmailAddressAlias = `${occupantCamelCase}EmailAddress`;
const occupantCommentTitleAlias = occupantCamelCase + 'CommentTitle'; const occupantCommentTitleAlias = `${occupantCamelCase}CommentTitle`;
const occupantCommentAlias = occupantCamelCase + 'Comment'; const occupantCommentAlias = `${occupantCamelCase}Comment`;
export async function getReportData(reportName, reportParameters = {}) { export async function getReportData(reportName, reportParameters = {}) {
let sql; let sql;
const sqlParameters = []; const sqlParameters = [];

View File

@ -1,54 +1,55 @@
// eslint-disable-next-line eslint-comments/disable-enable-pair
/* eslint-disable no-case-declarations */ /* eslint-disable no-case-declarations */
import { acquireConnection } from './pool.js' import * as dateTimeFunctions from '@cityssm/utils-datetime'
import camelCase from 'camelcase'
import * as configFunctions from '../helpers/functions.config.js' import * as configFunctions from '../helpers/functions.config.js'
import * as dateTimeFunctions from '@cityssm/utils-datetime'
import camelCase from 'camelcase' import { acquireConnection } from './pool.js'
export type ReportParameters = Record<string, string | number> export type ReportParameters = Record<string, string | number>
const mapCamelCase = camelCase(configFunctions.getProperty('aliases.map')) const mapCamelCase = camelCase(configFunctions.getProperty('aliases.map'))
const mapNameAlias = mapCamelCase + 'Name' const mapNameAlias = `${mapCamelCase}Name`
const mapDescriptionAlias = mapCamelCase + 'Description' const mapDescriptionAlias = `${mapCamelCase}Description`
const mapAddress1Alias = mapCamelCase + 'Address1' const mapAddress1Alias = `${mapCamelCase}Address1`
const mapAddress2Alias = mapCamelCase + 'Address2' const mapAddress2Alias = `${mapCamelCase}Address2`
const mapCityAlias = mapCamelCase + 'City' const mapCityAlias = `${mapCamelCase}City`
const mapProvinceAlias = mapCamelCase + 'Province' const mapProvinceAlias = `${mapCamelCase}Province`
const mapPostalCodeAlias = mapCamelCase + 'PostalCode' const mapPostalCodeAlias = `${mapCamelCase}PostalCode`
const mapPhoneNumberAlias = mapCamelCase + 'PhoneNumber' const mapPhoneNumberAlias = `${mapCamelCase}PhoneNumber`
const lotCamelCase = camelCase(configFunctions.getProperty('aliases.lot')) const lotCamelCase = camelCase(configFunctions.getProperty('aliases.lot'))
const lotIdAlias = lotCamelCase + 'Id' const lotIdAlias = `${lotCamelCase}Id`
const lotNameAlias = lotCamelCase + 'Name' const lotNameAlias = `${lotCamelCase}Name`
const lotTypeAlias = lotCamelCase + 'Type' const lotTypeAlias = `${lotCamelCase}Type`
const lotStatusAlias = lotCamelCase + 'Status' const lotStatusAlias = `${lotCamelCase}Status`
const occupancyCamelCase = camelCase( const occupancyCamelCase = camelCase(
configFunctions.getProperty('aliases.occupancy') configFunctions.getProperty('aliases.occupancy')
) )
const lotOccupancyIdAlias = occupancyCamelCase + 'Id' const lotOccupancyIdAlias = `${occupancyCamelCase}Id`
const occupancyTypeAlias = occupancyCamelCase + 'Type' const occupancyTypeAlias = `${occupancyCamelCase}Type`
const occupancyStartDateAlias = occupancyCamelCase + 'StartDate' const occupancyStartDateAlias = `${occupancyCamelCase}StartDate`
const occupancyEndDateAlias = occupancyCamelCase + 'EndDate' const occupancyEndDateAlias = `${occupancyCamelCase}EndDate`
const occupantCamelCase = camelCase( const occupantCamelCase = camelCase(
configFunctions.getProperty('aliases.occupant') configFunctions.getProperty('aliases.occupant')
) )
const lotOccupantIndexAlias = occupantCamelCase + 'Index' const lotOccupantIndexAlias = `${occupantCamelCase}Index`
const lotOccupantTypeAlias = occupantCamelCase + 'Type' const lotOccupantTypeAlias = `${occupantCamelCase}Type`
const occupantNameAlias = occupantCamelCase + 'Name' const occupantNameAlias = `${occupantCamelCase}Name`
const occupantFamilyNameAlias = occupantCamelCase + 'FamilyName' const occupantFamilyNameAlias = `${occupantCamelCase}FamilyName`
const occupantAddress1Alias = occupantCamelCase + 'Address1' const occupantAddress1Alias = `${occupantCamelCase}Address1`
const occupantAddress2Alias = occupantCamelCase + 'Address2' const occupantAddress2Alias = `${occupantCamelCase}Address2`
const occupantCityAlias = occupantCamelCase + 'City' const occupantCityAlias = `${occupantCamelCase}City`
const occupantProvinceAlias = occupantCamelCase + 'Province' const occupantProvinceAlias = `${occupantCamelCase}Province`
const occupantPostalCodeAlias = occupantCamelCase + 'PostalCode' const occupantPostalCodeAlias = `${occupantCamelCase}PostalCode`
const occupantPhoneNumberAlias = occupantCamelCase + 'PhoneNumber' const occupantPhoneNumberAlias = `${occupantCamelCase}PhoneNumber`
const occupantEmailAddressAlias = occupantCamelCase + 'EmailAddress' const occupantEmailAddressAlias = `${occupantCamelCase}EmailAddress`
const occupantCommentTitleAlias = occupantCamelCase + 'CommentTitle' const occupantCommentTitleAlias = `${occupantCamelCase}CommentTitle`
const occupantCommentAlias = occupantCamelCase + 'Comment' const occupantCommentAlias = `${occupantCamelCase}Comment`
export async function getReportData( export async function getReportData(
reportName: string, reportName: string,

View File

@ -1,10 +1,10 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { WorkOrder } from '../types/recordTypes.js';
interface WorkOrderOptions { interface WorkOrderOptions {
includeLotsAndLotOccupancies: boolean; includeLotsAndLotOccupancies: boolean;
includeComments: boolean; includeComments: boolean;
includeMilestones: boolean; includeMilestones: boolean;
} }
export declare function getWorkOrderByWorkOrderNumber(workOrderNumber: string): Promise<recordTypes.WorkOrder | undefined>; export declare function getWorkOrderByWorkOrderNumber(workOrderNumber: string): Promise<WorkOrder | undefined>;
export declare function getWorkOrder(workOrderId: number | string, options: WorkOrderOptions, connectedDatabase?: PoolConnection): Promise<recordTypes.WorkOrder | undefined>; export declare function getWorkOrder(workOrderId: number | string, options: WorkOrderOptions, connectedDatabase?: PoolConnection): Promise<WorkOrder | undefined>;
export default getWorkOrder; export default getWorkOrder;

View File

@ -1,9 +1,9 @@
import { acquireConnection } from './pool.js';
import { dateIntegerToString } from '@cityssm/utils-datetime'; import { dateIntegerToString } from '@cityssm/utils-datetime';
import { getLots } from './getLots.js';
import { getLotOccupancies } from './getLotOccupancies.js'; import { getLotOccupancies } from './getLotOccupancies.js';
import { getLots } from './getLots.js';
import { getWorkOrderComments } from './getWorkOrderComments.js'; import { getWorkOrderComments } from './getWorkOrderComments.js';
import { getWorkOrderMilestones } from './getWorkOrderMilestones.js'; import { getWorkOrderMilestones } from './getWorkOrderMilestones.js';
import { acquireConnection } from './pool.js';
const baseSQL = `select w.workOrderId, const baseSQL = `select w.workOrderId,
w.workOrderTypeId, t.workOrderType, w.workOrderTypeId, t.workOrderType,
w.workOrderNumber, w.workOrderDescription, w.workOrderNumber, w.workOrderDescription,

View File

@ -1,17 +1,13 @@
import { acquireConnection } from './pool.js' import { dateIntegerToString } from '@cityssm/utils-datetime'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import { dateIntegerToString } from '@cityssm/utils-datetime' import type { WorkOrder } from '../types/recordTypes.js'
import { getLots } from './getLots.js'
import { getLotOccupancies } from './getLotOccupancies.js' import { getLotOccupancies } from './getLotOccupancies.js'
import { getLots } from './getLots.js'
import { getWorkOrderComments } from './getWorkOrderComments.js' import { getWorkOrderComments } from './getWorkOrderComments.js'
import { getWorkOrderMilestones } from './getWorkOrderMilestones.js' import { getWorkOrderMilestones } from './getWorkOrderMilestones.js'
import { acquireConnection } from './pool.js'
import type * as recordTypes from '../types/recordTypes.js'
interface WorkOrderOptions { interface WorkOrderOptions {
includeLotsAndLotOccupancies: boolean includeLotsAndLotOccupancies: boolean
@ -34,13 +30,13 @@ async function _getWorkOrder(
workOrderIdOrWorkOrderNumber: number | string, workOrderIdOrWorkOrderNumber: number | string,
options: WorkOrderOptions, options: WorkOrderOptions,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.WorkOrder | undefined> { ): Promise<WorkOrder | undefined> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
database.function('userFn_dateIntegerToString', dateIntegerToString) database.function('userFn_dateIntegerToString', dateIntegerToString)
const workOrder = database.prepare(sql).get(workOrderIdOrWorkOrderNumber) as const workOrder = database.prepare(sql).get(workOrderIdOrWorkOrderNumber) as
| recordTypes.WorkOrder | WorkOrder
| undefined | undefined
if (workOrder !== undefined) { if (workOrder !== undefined) {
@ -79,7 +75,7 @@ async function _getWorkOrder(
if (options.includeComments) { if (options.includeComments) {
workOrder.workOrderComments = await getWorkOrderComments( workOrder.workOrderComments = await getWorkOrderComments(
workOrder.workOrderId as number, workOrder.workOrderId,
database database
) )
} }
@ -107,7 +103,7 @@ async function _getWorkOrder(
export async function getWorkOrderByWorkOrderNumber( export async function getWorkOrderByWorkOrderNumber(
workOrderNumber: string workOrderNumber: string
): Promise<recordTypes.WorkOrder | undefined> { ): Promise<WorkOrder | undefined> {
return await _getWorkOrder( return await _getWorkOrder(
baseSQL + ' and w.workOrderNumber = ?', baseSQL + ' and w.workOrderNumber = ?',
workOrderNumber, workOrderNumber,
@ -123,7 +119,7 @@ export async function getWorkOrder(
workOrderId: number | string, workOrderId: number | string,
options: WorkOrderOptions, options: WorkOrderOptions,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.WorkOrder | undefined> { ): Promise<WorkOrder | undefined> {
return await _getWorkOrder( return await _getWorkOrder(
baseSQL + ' and w.workOrderId = ?', baseSQL + ' and w.workOrderId = ?',
workOrderId, workOrderId,

View File

@ -1,4 +1,4 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { WorkOrderComment } from '../types/recordTypes.js';
export declare function getWorkOrderComments(workOrderId: number | string, connectedDatabase?: PoolConnection): Promise<recordTypes.WorkOrderComment[]>; export declare function getWorkOrderComments(workOrderId: number | string, connectedDatabase?: PoolConnection): Promise<WorkOrderComment[]>;
export default getWorkOrderComments; export default getWorkOrderComments;

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import { dateIntegerToString, timeIntegerToString, timeIntegerToPeriodString } from '@cityssm/utils-datetime'; import { dateIntegerToString, timeIntegerToString, timeIntegerToPeriodString } from '@cityssm/utils-datetime';
import { acquireConnection } from './pool.js';
export async function getWorkOrderComments(workOrderId, connectedDatabase) { export async function getWorkOrderComments(workOrderId, connectedDatabase) {
const database = connectedDatabase ?? (await acquireConnection()); const database = connectedDatabase ?? (await acquireConnection());
database.function('userFn_dateIntegerToString', dateIntegerToString); database.function('userFn_dateIntegerToString', dateIntegerToString);

View File

@ -1,23 +1,26 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool'
import { import {
dateIntegerToString, dateIntegerToString,
timeIntegerToString, timeIntegerToString,
timeIntegerToPeriodString timeIntegerToPeriodString
} from '@cityssm/utils-datetime' } from '@cityssm/utils-datetime'
import type { PoolConnection } from 'better-sqlite-pool'
import type * as recordTypes from '../types/recordTypes.js' import type { WorkOrderComment } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
export async function getWorkOrderComments( export async function getWorkOrderComments(
workOrderId: number | string, workOrderId: number | string,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.WorkOrderComment[]> { ): Promise<WorkOrderComment[]> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
database.function('userFn_dateIntegerToString', dateIntegerToString) database.function('userFn_dateIntegerToString', dateIntegerToString)
database.function('userFn_timeIntegerToString', timeIntegerToString) database.function('userFn_timeIntegerToString', timeIntegerToString)
database.function('userFn_timeIntegerToPeriodString', timeIntegerToPeriodString) database.function(
'userFn_timeIntegerToPeriodString',
timeIntegerToPeriodString
)
const workOrderComments = database const workOrderComments = database
.prepare( .prepare(
@ -33,7 +36,7 @@ export async function getWorkOrderComments(
and workOrderId = ? and workOrderId = ?
order by workOrderCommentDate desc, workOrderCommentTime desc, workOrderCommentId desc` order by workOrderCommentDate desc, workOrderCommentTime desc, workOrderCommentId desc`
) )
.all(workOrderId) as recordTypes.WorkOrderComment[] .all(workOrderId) as WorkOrderComment[]
if (connectedDatabase === undefined) { if (connectedDatabase === undefined) {
database.release() database.release()

View File

@ -1,3 +1,3 @@
import type * as recordTypes from '../types/recordTypes.js'; import type { WorkOrderMilestoneType } from '../types/recordTypes.js';
export declare function getWorkOrderMilestoneTypes(): Promise<recordTypes.WorkOrderMilestoneType[]>; export declare function getWorkOrderMilestoneTypes(): Promise<WorkOrderMilestoneType[]>;
export default getWorkOrderMilestoneTypes; export default getWorkOrderMilestoneTypes;

View File

@ -1,10 +1,14 @@
import { acquireConnection } from './pool.js' // eslint-disable-next-line eslint-comments/disable-enable-pair
/* eslint-disable @typescript-eslint/indent */
import type { WorkOrderMilestoneType } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
import type * as recordTypes from '../types/recordTypes.js' export async function getWorkOrderMilestoneTypes(): Promise<
WorkOrderMilestoneType[]
export async function getWorkOrderMilestoneTypes(): Promise<recordTypes.WorkOrderMilestoneType[]> { > {
const database = await acquireConnection() const database = await acquireConnection()
const workOrderMilestoneTypes = database const workOrderMilestoneTypes = database
@ -14,7 +18,7 @@ export async function getWorkOrderMilestoneTypes(): Promise<recordTypes.WorkOrde
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
order by orderNumber, workOrderMilestoneType` order by orderNumber, workOrderMilestoneType`
) )
.all() as recordTypes.WorkOrderMilestoneType[] .all() as WorkOrderMilestoneType[]
let expectedOrderNumber = 0 let expectedOrderNumber = 0

View File

@ -1,5 +1,5 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { WorkOrderMilestone } from '../types/recordTypes.js';
export interface WorkOrderMilestoneFilters { export interface WorkOrderMilestoneFilters {
workOrderId?: number | string; workOrderId?: number | string;
workOrderMilestoneDateFilter?: 'upcomingMissed' | 'recent' | 'date' | 'blank' | 'notBlank'; workOrderMilestoneDateFilter?: 'upcomingMissed' | 'recent' | 'date' | 'blank' | 'notBlank';
@ -11,5 +11,5 @@ interface WorkOrderMilestoneOptions {
includeWorkOrders?: boolean; includeWorkOrders?: boolean;
orderBy: 'completion' | 'date'; orderBy: 'completion' | 'date';
} }
export declare function getWorkOrderMilestones(filters: WorkOrderMilestoneFilters, options: WorkOrderMilestoneOptions, connectedDatabase?: PoolConnection): Promise<recordTypes.WorkOrderMilestone[]>; export declare function getWorkOrderMilestones(filters: WorkOrderMilestoneFilters, options: WorkOrderMilestoneOptions, connectedDatabase?: PoolConnection): Promise<WorkOrderMilestone[]>;
export default getWorkOrderMilestones; export default getWorkOrderMilestones;

View File

@ -1,8 +1,8 @@
import { acquireConnection } from './pool.js';
import { dateIntegerToString, dateStringToInteger, dateToInteger, timeIntegerToString, timeIntegerToPeriodString } from '@cityssm/utils-datetime'; import { dateIntegerToString, dateStringToInteger, dateToInteger, timeIntegerToString, timeIntegerToPeriodString } from '@cityssm/utils-datetime';
import * as configFunctions from '../helpers/functions.config.js'; import * as configFunctions from '../helpers/functions.config.js';
import { getLots } from './getLots.js';
import { getLotOccupancies } from './getLotOccupancies.js'; import { getLotOccupancies } from './getLotOccupancies.js';
import { getLots } from './getLots.js';
import { acquireConnection } from './pool.js';
const commaSeparatedNumbersRegex = /^\d+(,\d+)*$/; const commaSeparatedNumbersRegex = /^\d+(,\d+)*$/;
function buildWhereClause(filters) { function buildWhereClause(filters) {
let sqlWhereClause = ' where m.recordDelete_timeMillis is null and w.recordDelete_timeMillis is null'; let sqlWhereClause = ' where m.recordDelete_timeMillis is null and w.recordDelete_timeMillis is null';
@ -86,31 +86,33 @@ export async function getWorkOrderMilestones(filters, options, connectedDatabase
break; break;
} }
} }
const sql = 'select m.workOrderMilestoneId,' + const sql = `select m.workOrderMilestoneId,
' m.workOrderMilestoneTypeId, t.workOrderMilestoneType,' + m.workOrderMilestoneTypeId, t.workOrderMilestoneType,
' m.workOrderMilestoneDate, userFn_dateIntegerToString(m.workOrderMilestoneDate) as workOrderMilestoneDateString,' + m.workOrderMilestoneDate,
' m.workOrderMilestoneTime,' + userFn_dateIntegerToString(m.workOrderMilestoneDate) as workOrderMilestoneDateString,
' userFn_timeIntegerToString(m.workOrderMilestoneTime) as workOrderMilestoneTimeString,' + m.workOrderMilestoneTime,
' userFn_timeIntegerToPeriodString(m.workOrderMilestoneTime) as workOrderMilestoneTimePeriodString,' + userFn_timeIntegerToString(m.workOrderMilestoneTime) as workOrderMilestoneTimeString,
' m.workOrderMilestoneDescription,' + userFn_timeIntegerToPeriodString(m.workOrderMilestoneTime) as workOrderMilestoneTimePeriodString,
' m.workOrderMilestoneCompletionDate, userFn_dateIntegerToString(m.workOrderMilestoneCompletionDate) as workOrderMilestoneCompletionDateString,' + m.workOrderMilestoneDescription,
' m.workOrderMilestoneCompletionTime,' + m.workOrderMilestoneCompletionDate,
' userFn_timeIntegerToString(m.workOrderMilestoneCompletionTime) as workOrderMilestoneCompletionTimeString,' + userFn_dateIntegerToString(m.workOrderMilestoneCompletionDate) as workOrderMilestoneCompletionDateString,
' userFn_timeIntegerToPeriodString(m.workOrderMilestoneCompletionTime) as workOrderMilestoneCompletionTimePeriodString,' + m.workOrderMilestoneCompletionTime,
(options.includeWorkOrders ?? false userFn_timeIntegerToString(m.workOrderMilestoneCompletionTime) as workOrderMilestoneCompletionTimeString,
? ' m.workOrderId, w.workOrderNumber, wt.workOrderType, w.workOrderDescription,' + userFn_timeIntegerToPeriodString(m.workOrderMilestoneCompletionTime) as workOrderMilestoneCompletionTimePeriodString,
' w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString,' + ${options.includeWorkOrders ?? false
' w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString,' + ? ` m.workOrderId, w.workOrderNumber, wt.workOrderType, w.workOrderDescription,
' w.recordUpdate_timeMillis as workOrderRecordUpdate_timeMillis,' w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString,
: '') + w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString,
' m.recordCreate_userName, m.recordCreate_timeMillis,' + w.recordUpdate_timeMillis as workOrderRecordUpdate_timeMillis,`
' m.recordUpdate_userName, m.recordUpdate_timeMillis' + : ''}
' from WorkOrderMilestones m' + m.recordCreate_userName, m.recordCreate_timeMillis,
' left join WorkOrderMilestoneTypes t on m.workOrderMilestoneTypeId = t.workOrderMilestoneTypeId' + m.recordUpdate_userName, m.recordUpdate_timeMillis
' left join WorkOrders w on m.workOrderId = w.workOrderId' + from WorkOrderMilestones m
' left join WorkOrderTypes wt on w.workOrderTypeId = wt.workOrderTypeId' + left join WorkOrderMilestoneTypes t on m.workOrderMilestoneTypeId = t.workOrderMilestoneTypeId
sqlWhereClause + left join WorkOrders w on m.workOrderId = w.workOrderId
orderByClause; left join WorkOrderTypes wt on w.workOrderTypeId = wt.workOrderTypeId
${sqlWhereClause}
${orderByClause}`;
const workOrderMilestones = database const workOrderMilestones = database
.prepare(sql) .prepare(sql)
.all(sqlParameters); .all(sqlParameters);

View File

@ -1,8 +1,6 @@
// eslint-disable-next-line eslint-comments/disable-enable-pair
/* eslint-disable @typescript-eslint/indent */ /* eslint-disable @typescript-eslint/indent */
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool'
import { import {
dateIntegerToString, dateIntegerToString,
dateStringToInteger, dateStringToInteger,
@ -10,13 +8,14 @@ import {
timeIntegerToString, timeIntegerToString,
timeIntegerToPeriodString timeIntegerToPeriodString
} from '@cityssm/utils-datetime' } from '@cityssm/utils-datetime'
import type { PoolConnection } from 'better-sqlite-pool'
import * as configFunctions from '../helpers/functions.config.js' import * as configFunctions from '../helpers/functions.config.js'
import type { WorkOrderMilestone } from '../types/recordTypes.js'
import { getLots } from './getLots.js'
import { getLotOccupancies } from './getLotOccupancies.js' import { getLotOccupancies } from './getLotOccupancies.js'
import { getLots } from './getLots.js'
import type * as recordTypes from '../types/recordTypes.js' import { acquireConnection } from './pool.js'
export interface WorkOrderMilestoneFilters { export interface WorkOrderMilestoneFilters {
workOrderId?: number | string workOrderId?: number | string
@ -136,7 +135,7 @@ export async function getWorkOrderMilestones(
filters: WorkOrderMilestoneFilters, filters: WorkOrderMilestoneFilters,
options: WorkOrderMilestoneOptions, options: WorkOrderMilestoneOptions,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<recordTypes.WorkOrderMilestone[]> { ): Promise<WorkOrderMilestone[]> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
database.function('userFn_dateIntegerToString', dateIntegerToString) database.function('userFn_dateIntegerToString', dateIntegerToString)
@ -171,36 +170,39 @@ export async function getWorkOrderMilestones(
} }
// Query // Query
const sql = const sql = `select m.workOrderMilestoneId,
'select m.workOrderMilestoneId,' + m.workOrderMilestoneTypeId, t.workOrderMilestoneType,
' m.workOrderMilestoneTypeId, t.workOrderMilestoneType,' + m.workOrderMilestoneDate,
' m.workOrderMilestoneDate, userFn_dateIntegerToString(m.workOrderMilestoneDate) as workOrderMilestoneDateString,' + userFn_dateIntegerToString(m.workOrderMilestoneDate) as workOrderMilestoneDateString,
' m.workOrderMilestoneTime,' + m.workOrderMilestoneTime,
' userFn_timeIntegerToString(m.workOrderMilestoneTime) as workOrderMilestoneTimeString,' + userFn_timeIntegerToString(m.workOrderMilestoneTime) as workOrderMilestoneTimeString,
' userFn_timeIntegerToPeriodString(m.workOrderMilestoneTime) as workOrderMilestoneTimePeriodString,' + userFn_timeIntegerToPeriodString(m.workOrderMilestoneTime) as workOrderMilestoneTimePeriodString,
' m.workOrderMilestoneDescription,' + m.workOrderMilestoneDescription,
' m.workOrderMilestoneCompletionDate, userFn_dateIntegerToString(m.workOrderMilestoneCompletionDate) as workOrderMilestoneCompletionDateString,' + m.workOrderMilestoneCompletionDate,
' m.workOrderMilestoneCompletionTime,' + userFn_dateIntegerToString(m.workOrderMilestoneCompletionDate) as workOrderMilestoneCompletionDateString,
' userFn_timeIntegerToString(m.workOrderMilestoneCompletionTime) as workOrderMilestoneCompletionTimeString,' + m.workOrderMilestoneCompletionTime,
' userFn_timeIntegerToPeriodString(m.workOrderMilestoneCompletionTime) as workOrderMilestoneCompletionTimePeriodString,' + userFn_timeIntegerToString(m.workOrderMilestoneCompletionTime) as workOrderMilestoneCompletionTimeString,
(options.includeWorkOrders ?? false userFn_timeIntegerToPeriodString(m.workOrderMilestoneCompletionTime) as workOrderMilestoneCompletionTimePeriodString,
? ' m.workOrderId, w.workOrderNumber, wt.workOrderType, w.workOrderDescription,' + ${
' w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString,' + options.includeWorkOrders ?? false
' w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString,' + ? ` m.workOrderId, w.workOrderNumber, wt.workOrderType, w.workOrderDescription,
' w.recordUpdate_timeMillis as workOrderRecordUpdate_timeMillis,' w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString,
: '') + w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString,
' m.recordCreate_userName, m.recordCreate_timeMillis,' + w.recordUpdate_timeMillis as workOrderRecordUpdate_timeMillis,`
' m.recordUpdate_userName, m.recordUpdate_timeMillis' + : ''
' from WorkOrderMilestones m' + }
' left join WorkOrderMilestoneTypes t on m.workOrderMilestoneTypeId = t.workOrderMilestoneTypeId' + m.recordCreate_userName, m.recordCreate_timeMillis,
' left join WorkOrders w on m.workOrderId = w.workOrderId' + m.recordUpdate_userName, m.recordUpdate_timeMillis
' left join WorkOrderTypes wt on w.workOrderTypeId = wt.workOrderTypeId' + from WorkOrderMilestones m
sqlWhereClause + left join WorkOrderMilestoneTypes t on m.workOrderMilestoneTypeId = t.workOrderMilestoneTypeId
orderByClause left join WorkOrders w on m.workOrderId = w.workOrderId
left join WorkOrderTypes wt on w.workOrderTypeId = wt.workOrderTypeId
${sqlWhereClause}
${orderByClause}`
const workOrderMilestones = database const workOrderMilestones = database
.prepare(sql) .prepare(sql)
.all(sqlParameters) as recordTypes.WorkOrderMilestone[] .all(sqlParameters) as WorkOrderMilestone[]
if (options.includeWorkOrders ?? false) { if (options.includeWorkOrders ?? false) {
for (const workOrderMilestone of workOrderMilestones) { for (const workOrderMilestone of workOrderMilestones) {

View File

@ -1,3 +1,3 @@
import type * as recordTypes from '../types/recordTypes.js'; import type { WorkOrderType } from '../types/recordTypes.js';
export declare function getWorkOrderTypes(): Promise<recordTypes.WorkOrderType[]>; export declare function getWorkOrderTypes(): Promise<WorkOrderType[]>;
export default getWorkOrderTypes; export default getWorkOrderTypes;

View File

@ -1,14 +1,12 @@
// eslint-disable-next-line eslint-comments/disable-enable-pair
/* eslint-disable @typescript-eslint/indent */ /* eslint-disable @typescript-eslint/indent */
import { acquireConnection } from './pool.js' import type { WorkOrderType } from '../types/recordTypes.js'
import { acquireConnection } from './pool.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
import type * as recordTypes from '../types/recordTypes.js' export async function getWorkOrderTypes(): Promise<WorkOrderType[]> {
export async function getWorkOrderTypes(): Promise<
recordTypes.WorkOrderType[]
> {
const database = await acquireConnection() const database = await acquireConnection()
const workOrderTypes = database const workOrderTypes = database
@ -18,7 +16,7 @@ export async function getWorkOrderTypes(): Promise<
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
order by orderNumber, workOrderType` order by orderNumber, workOrderType`
) )
.all() as recordTypes.WorkOrderType[] .all() as WorkOrderType[]
let expectedOrderNumber = 0 let expectedOrderNumber = 0

View File

@ -1,5 +1,5 @@
import type { PoolConnection } from 'better-sqlite-pool'; import type { PoolConnection } from 'better-sqlite-pool';
import type * as recordTypes from '../types/recordTypes.js'; import type { WorkOrder } from '../types/recordTypes.js';
interface GetWorkOrdersFilters { interface GetWorkOrdersFilters {
workOrderTypeId?: number | string; workOrderTypeId?: number | string;
workOrderOpenStatus?: '' | 'open' | 'closed'; workOrderOpenStatus?: '' | 'open' | 'closed';
@ -17,6 +17,6 @@ interface GetWorkOrdersOptions {
} }
export declare function getWorkOrders(filters: GetWorkOrdersFilters, options: GetWorkOrdersOptions, connectedDatabase?: PoolConnection): Promise<{ export declare function getWorkOrders(filters: GetWorkOrdersFilters, options: GetWorkOrdersOptions, connectedDatabase?: PoolConnection): Promise<{
count: number; count: number;
workOrders: recordTypes.WorkOrder[]; workOrders: WorkOrder[];
}>; }>;
export default getWorkOrders; export default getWorkOrders;

View File

@ -1,10 +1,10 @@
import { acquireConnection } from './pool.js';
import { dateIntegerToString, dateStringToInteger } from '@cityssm/utils-datetime'; import { dateIntegerToString, dateStringToInteger } from '@cityssm/utils-datetime';
import { getWorkOrderComments } from './getWorkOrderComments.js';
import { getLots } from './getLots.js';
import { getLotOccupancies } from './getLotOccupancies.js';
import { getWorkOrderMilestones } from './getWorkOrderMilestones.js';
import { getLotNameWhereClause, getOccupantNameWhereClause } from '../helpers/functions.sqlFilters.js'; import { getLotNameWhereClause, getOccupantNameWhereClause } from '../helpers/functions.sqlFilters.js';
import { getLotOccupancies } from './getLotOccupancies.js';
import { getLots } from './getLots.js';
import { getWorkOrderComments } from './getWorkOrderComments.js';
import { getWorkOrderMilestones } from './getWorkOrderMilestones.js';
import { acquireConnection } from './pool.js';
function buildWhereClause(filters) { function buildWhereClause(filters) {
let sqlWhereClause = ' where w.recordDelete_timeMillis is null'; let sqlWhereClause = ' where w.recordDelete_timeMillis is null';
const sqlParameters = []; const sqlParameters = [];

View File

@ -1,23 +1,23 @@
// eslint-disable-next-line eslint-comments/disable-enable-pair
/* eslint-disable @typescript-eslint/indent */ /* eslint-disable @typescript-eslint/indent */
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool'
import { import {
dateIntegerToString, dateIntegerToString,
dateStringToInteger dateStringToInteger
} from '@cityssm/utils-datetime' } from '@cityssm/utils-datetime'
import type { PoolConnection } from 'better-sqlite-pool'
import { getWorkOrderComments } from './getWorkOrderComments.js'
import { getLots } from './getLots.js'
import { getLotOccupancies } from './getLotOccupancies.js'
import { getWorkOrderMilestones } from './getWorkOrderMilestones.js'
import type * as recordTypes from '../types/recordTypes.js'
import { import {
getLotNameWhereClause, getLotNameWhereClause,
getOccupantNameWhereClause getOccupantNameWhereClause
} from '../helpers/functions.sqlFilters.js' } from '../helpers/functions.sqlFilters.js'
import type { WorkOrder } from '../types/recordTypes.js'
import { getLotOccupancies } from './getLotOccupancies.js'
import { getLots } from './getLots.js'
import { getWorkOrderComments } from './getWorkOrderComments.js'
import { getWorkOrderMilestones } from './getWorkOrderMilestones.js'
import { acquireConnection } from './pool.js'
interface GetWorkOrdersFilters { interface GetWorkOrdersFilters {
workOrderTypeId?: number | string workOrderTypeId?: number | string
@ -100,10 +100,10 @@ function buildWhereClause(filters: GetWorkOrdersFilters): {
} }
async function addInclusions( async function addInclusions(
workOrder: recordTypes.WorkOrder, workOrder: WorkOrder,
options: GetWorkOrdersOptions, options: GetWorkOrdersOptions,
database: PoolConnection database: PoolConnection
): Promise<recordTypes.WorkOrder> { ): Promise<WorkOrder> {
if (options.includeComments ?? false) { if (options.includeComments ?? false) {
workOrder.workOrderComments = await getWorkOrderComments( workOrder.workOrderComments = await getWorkOrderComments(
workOrder.workOrderId!, workOrder.workOrderId!,
@ -169,7 +169,7 @@ export async function getWorkOrders(
filters: GetWorkOrdersFilters, filters: GetWorkOrdersFilters,
options: GetWorkOrdersOptions, options: GetWorkOrdersOptions,
connectedDatabase?: PoolConnection connectedDatabase?: PoolConnection
): Promise<{ count: number; workOrders: recordTypes.WorkOrder[] }> { ): Promise<{ count: number; workOrders: WorkOrder[] }> {
const database = connectedDatabase ?? (await acquireConnection()) const database = connectedDatabase ?? (await acquireConnection())
database.function('userFn_dateIntegerToString', dateIntegerToString) database.function('userFn_dateIntegerToString', dateIntegerToString)
@ -186,7 +186,7 @@ export async function getWorkOrders(
.get(sqlParameters) as { recordCount: number } .get(sqlParameters) as { recordCount: number }
).recordCount ).recordCount
let workOrders: recordTypes.WorkOrder[] = [] let workOrders: WorkOrder[] = []
if (count > 0) { if (count > 0) {
workOrders = database workOrders = database
@ -221,7 +221,7 @@ export async function getWorkOrders(
: ` limit ${options.limit} offset ${options.offset}` : ` limit ${options.limit} offset ${options.offset}`
}` }`
) )
.all(sqlParameters) as recordTypes.WorkOrder[] .all(sqlParameters) as WorkOrder[]
} }
const hasInclusions = const hasInclusions =

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import { getFee } from './getFee.js'; import { getFee } from './getFee.js';
import { acquireConnection } from './pool.js';
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
export async function moveFeeDown(feeId) { export async function moveFeeDown(feeId) {
const database = await acquireConnection(); const database = await acquireConnection();

View File

@ -1,6 +1,5 @@
import { acquireConnection } from './pool.js'
import { getFee } from './getFee.js' import { getFee } from './getFee.js'
import { acquireConnection } from './pool.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
export async function moveFeeDown(feeId: number | string): Promise<boolean> { export async function moveFeeDown(feeId: number | string): Promise<boolean> {

View File

@ -1,11 +1,10 @@
import { acquireConnection } from './pool.js';
import { clearCacheByTableName } from '../helpers/functions.cache.js'; import { clearCacheByTableName } from '../helpers/functions.cache.js';
import { acquireConnection } from './pool.js';
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
function getCurrentField(lotTypeFieldId, connectedDatabase) { function getCurrentField(lotTypeFieldId, connectedDatabase) {
const currentField = connectedDatabase return connectedDatabase
.prepare('select lotTypeId, orderNumber from LotTypeFields where lotTypeFieldId = ?') .prepare('select lotTypeId, orderNumber from LotTypeFields where lotTypeFieldId = ?')
.get(lotTypeFieldId); .get(lotTypeFieldId);
return currentField;
} }
export async function moveLotTypeFieldDown(lotTypeFieldId) { export async function moveLotTypeFieldDown(lotTypeFieldId) {
const database = await acquireConnection(); const database = await acquireConnection();
@ -26,9 +25,9 @@ export async function moveLotTypeFieldDownToBottom(lotTypeFieldId) {
const currentField = getCurrentField(lotTypeFieldId, database); const currentField = getCurrentField(lotTypeFieldId, database);
const maxOrderNumber = database const maxOrderNumber = database
.prepare(`select max(orderNumber) as maxOrderNumber .prepare(`select max(orderNumber) as maxOrderNumber
from LotTypeFields from LotTypeFields
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and lotTypeId = ?`) and lotTypeId = ?`)
.get(currentField.lotTypeId).maxOrderNumber; .get(currentField.lotTypeId).maxOrderNumber;
if (currentField.orderNumber !== maxOrderNumber) { if (currentField.orderNumber !== maxOrderNumber) {
updateRecordOrderNumber('LotTypeFields', lotTypeFieldId, maxOrderNumber + 1, database); updateRecordOrderNumber('LotTypeFields', lotTypeFieldId, maxOrderNumber + 1, database);
@ -70,10 +69,10 @@ export async function moveLotTypeFieldUpToTop(lotTypeFieldId) {
updateRecordOrderNumber('LotTypeFields', lotTypeFieldId, -1, database); updateRecordOrderNumber('LotTypeFields', lotTypeFieldId, -1, database);
database database
.prepare(`update LotTypeFields .prepare(`update LotTypeFields
set orderNumber = orderNumber + 1 set orderNumber = orderNumber + 1
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and lotTypeId = ? and lotTypeId = ?
and orderNumber < ?`) and orderNumber < ?`)
.run(currentField.lotTypeId, currentField.orderNumber); .run(currentField.lotTypeId, currentField.orderNumber);
} }
database.release(); database.release();

View File

@ -1,20 +1,19 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import { clearCacheByTableName } from '../helpers/functions.cache.js' import { clearCacheByTableName } from '../helpers/functions.cache.js'
import { acquireConnection } from './pool.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
function getCurrentField( function getCurrentField(
lotTypeFieldId: number | string, lotTypeFieldId: number | string,
connectedDatabase: PoolConnection connectedDatabase: PoolConnection
): { lotTypeId?: number; orderNumber: number } { ): { lotTypeId?: number; orderNumber: number } {
const currentField = connectedDatabase return connectedDatabase
.prepare( .prepare(
'select lotTypeId, orderNumber from LotTypeFields where lotTypeFieldId = ?' 'select lotTypeId, orderNumber from LotTypeFields where lotTypeFieldId = ?'
) )
.get(lotTypeFieldId) as { lotTypeId?: number; orderNumber: number } .get(lotTypeFieldId) as { lotTypeId?: number; orderNumber: number }
return currentField
} }
export async function moveLotTypeFieldDown( export async function moveLotTypeFieldDown(
@ -58,9 +57,9 @@ export async function moveLotTypeFieldDownToBottom(
database database
.prepare( .prepare(
`select max(orderNumber) as maxOrderNumber `select max(orderNumber) as maxOrderNumber
from LotTypeFields from LotTypeFields
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and lotTypeId = ?` and lotTypeId = ?`
) )
.get(currentField.lotTypeId) as { maxOrderNumber: number } .get(currentField.lotTypeId) as { maxOrderNumber: number }
).maxOrderNumber ).maxOrderNumber
@ -140,10 +139,10 @@ export async function moveLotTypeFieldUpToTop(
database database
.prepare( .prepare(
`update LotTypeFields `update LotTypeFields
set orderNumber = orderNumber + 1 set orderNumber = orderNumber + 1
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and lotTypeId = ? and lotTypeId = ?
and orderNumber < ?` and orderNumber < ?`
) )
.run(currentField.lotTypeId, currentField.orderNumber) .run(currentField.lotTypeId, currentField.orderNumber)
} }

View File

@ -1,27 +1,24 @@
import { acquireConnection } from './pool.js';
import { clearCacheByTableName } from '../helpers/functions.cache.js'; import { clearCacheByTableName } from '../helpers/functions.cache.js';
import { acquireConnection } from './pool.js';
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
function getCurrentField(occupancyTypeFieldId, connectedDatabase) { function getCurrentField(occupancyTypeFieldId, connectedDatabase) {
const currentField = connectedDatabase return connectedDatabase
.prepare(`select occupancyTypeId, orderNumber .prepare(`select occupancyTypeId, orderNumber
from OccupancyTypeFields from OccupancyTypeFields
where occupancyTypeFieldId = ?`) where occupancyTypeFieldId = ?`)
.get(occupancyTypeFieldId); .get(occupancyTypeFieldId);
return currentField;
} }
export async function moveOccupancyTypeFieldDown(occupancyTypeFieldId) { export async function moveOccupancyTypeFieldDown(occupancyTypeFieldId) {
const database = await acquireConnection(); const database = await acquireConnection();
const currentField = getCurrentField(occupancyTypeFieldId, database); const currentField = getCurrentField(occupancyTypeFieldId, database);
database database
.prepare('update OccupancyTypeFields' + .prepare(`update OccupancyTypeFields
' set orderNumber = orderNumber - 1' + set orderNumber = orderNumber - 1
' where recordDelete_timeMillis is null' + where recordDelete_timeMillis is null
(currentField.occupancyTypeId ${currentField.occupancyTypeId === undefined
? " and occupancyTypeId = '" + ? ' and occupancyTypeId is null'
currentField.occupancyTypeId.toString() + : ` and occupancyTypeId = '${currentField.occupancyTypeId.toString()}'`}
"'" and orderNumber = ? + 1`)
: ' and occupancyTypeId is null') +
' and orderNumber = ? + 1')
.run(currentField.orderNumber); .run(currentField.orderNumber);
const success = updateRecordOrderNumber('OccupancyTypeFields', occupancyTypeFieldId, currentField.orderNumber + 1, database); const success = updateRecordOrderNumber('OccupancyTypeFields', occupancyTypeFieldId, currentField.orderNumber + 1, database);
database.release(); database.release();
@ -36,24 +33,23 @@ export async function moveOccupancyTypeFieldDownToBottom(occupancyTypeFieldId) {
occupancyTypeParameters.push(currentField.occupancyTypeId); occupancyTypeParameters.push(currentField.occupancyTypeId);
} }
const maxOrderNumber = database const maxOrderNumber = database
.prepare('select max(orderNumber) as maxOrderNumber' + .prepare(`select max(orderNumber) as maxOrderNumber
' from OccupancyTypeFields' + from OccupancyTypeFields
' where recordDelete_timeMillis is null' + where recordDelete_timeMillis is null
(currentField.occupancyTypeId ${currentField.occupancyTypeId === undefined
? ' and occupancyTypeId = ?' ? ' and occupancyTypeId is null'
: ' and occupancyTypeId is null')) : ' and occupancyTypeId = ?'}`)
.get(occupancyTypeParameters).maxOrderNumber; .get(occupancyTypeParameters).maxOrderNumber;
if (currentField.orderNumber !== maxOrderNumber) { if (currentField.orderNumber !== maxOrderNumber) {
updateRecordOrderNumber('OccupancyTypeFields', occupancyTypeFieldId, maxOrderNumber + 1, database); updateRecordOrderNumber('OccupancyTypeFields', occupancyTypeFieldId, maxOrderNumber + 1, database);
occupancyTypeParameters.push(currentField.orderNumber); occupancyTypeParameters.push(currentField.orderNumber);
database database
.prepare('update OccupancyTypeFields' + .prepare(`update OccupancyTypeFields set orderNumber = orderNumber - 1
' set orderNumber = orderNumber - 1' + where recordDelete_timeMillis is null
' where recordDelete_timeMillis is null' + ${currentField.occupancyTypeId === undefined
(currentField.occupancyTypeId ? ' and occupancyTypeId is null'
? ' and occupancyTypeId = ?' : ' and occupancyTypeId = ?'}
: ' and occupancyTypeId is null') + and orderNumber > ?`)
' and orderNumber > ?')
.run(occupancyTypeParameters); .run(occupancyTypeParameters);
} }
database.release(); database.release();
@ -68,15 +64,13 @@ export async function moveOccupancyTypeFieldUp(occupancyTypeFieldId) {
return true; return true;
} }
database database
.prepare('update OccupancyTypeFields' + .prepare(`update OccupancyTypeFields
' set orderNumber = orderNumber + 1' + set orderNumber = orderNumber + 1
' where recordDelete_timeMillis is null' + where recordDelete_timeMillis is null
(currentField.occupancyTypeId ${currentField.occupancyTypeId === undefined
? " and occupancyTypeId = '" + ? ' and occupancyTypeId is null'
currentField.occupancyTypeId.toString() + : ` and occupancyTypeId = '${currentField.occupancyTypeId.toString()}'`}
"'" and orderNumber = ? - 1`)
: ' and occupancyTypeId is null') +
' and orderNumber = ? - 1')
.run(currentField.orderNumber); .run(currentField.orderNumber);
const success = updateRecordOrderNumber('OccupancyTypeFields', occupancyTypeFieldId, currentField.orderNumber - 1, database); const success = updateRecordOrderNumber('OccupancyTypeFields', occupancyTypeFieldId, currentField.orderNumber - 1, database);
database.release(); database.release();
@ -94,13 +88,12 @@ export async function moveOccupancyTypeFieldUpToTop(occupancyTypeFieldId) {
} }
occupancyTypeParameters.push(currentField.orderNumber); occupancyTypeParameters.push(currentField.orderNumber);
database database
.prepare('update OccupancyTypeFields' + .prepare(`update OccupancyTypeFields
' set orderNumber = orderNumber + 1' + set orderNumber = orderNumber + 1
' where recordDelete_timeMillis is null' + where recordDelete_timeMillis is null
(currentField.occupancyTypeId ${currentField.occupancyTypeId
? ' and occupancyTypeId = ?' ? ' and occupancyTypeId = ?'
: ' and occupancyTypeId is null') + : ' and occupancyTypeId is null'} and orderNumber < ?`)
' and orderNumber < ?')
.run(occupancyTypeParameters); .run(occupancyTypeParameters);
} }
database.release(); database.release();

View File

@ -1,25 +1,24 @@
import { acquireConnection } from './pool.js'
import type { PoolConnection } from 'better-sqlite-pool' import type { PoolConnection } from 'better-sqlite-pool'
import { clearCacheByTableName } from '../helpers/functions.cache.js' import { clearCacheByTableName } from '../helpers/functions.cache.js'
import { acquireConnection } from './pool.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
function getCurrentField( function getCurrentField(
occupancyTypeFieldId: number, occupancyTypeFieldId: number,
connectedDatabase: PoolConnection connectedDatabase: PoolConnection
): { occupancyTypeId?: number; orderNumber: number } { ): { occupancyTypeId?: number; orderNumber: number } {
const currentField = connectedDatabase return connectedDatabase
.prepare( .prepare(
`select occupancyTypeId, orderNumber `select occupancyTypeId, orderNumber
from OccupancyTypeFields from OccupancyTypeFields
where occupancyTypeFieldId = ?` where occupancyTypeFieldId = ?`
) )
.get(occupancyTypeFieldId) as { .get(occupancyTypeFieldId) as {
occupancyTypeId?: number occupancyTypeId?: number
orderNumber: number orderNumber: number
} }
return currentField
} }
export async function moveOccupancyTypeFieldDown( export async function moveOccupancyTypeFieldDown(
@ -31,15 +30,15 @@ export async function moveOccupancyTypeFieldDown(
database database
.prepare( .prepare(
'update OccupancyTypeFields' + `update OccupancyTypeFields
' set orderNumber = orderNumber - 1' + set orderNumber = orderNumber - 1
' where recordDelete_timeMillis is null' + where recordDelete_timeMillis is null
(currentField.occupancyTypeId ${
? " and occupancyTypeId = '" + currentField.occupancyTypeId === undefined
currentField.occupancyTypeId.toString() + ? ' and occupancyTypeId is null'
"'" : ` and occupancyTypeId = '${currentField.occupancyTypeId.toString()}'`
: ' and occupancyTypeId is null') + }
' and orderNumber = ? + 1' and orderNumber = ? + 1`
) )
.run(currentField.orderNumber) .run(currentField.orderNumber)
@ -73,12 +72,14 @@ export async function moveOccupancyTypeFieldDownToBottom(
const maxOrderNumber: number = ( const maxOrderNumber: number = (
database database
.prepare( .prepare(
'select max(orderNumber) as maxOrderNumber' + `select max(orderNumber) as maxOrderNumber
' from OccupancyTypeFields' + from OccupancyTypeFields
' where recordDelete_timeMillis is null' + where recordDelete_timeMillis is null
(currentField.occupancyTypeId ${
? ' and occupancyTypeId = ?' currentField.occupancyTypeId === undefined
: ' and occupancyTypeId is null') ? ' and occupancyTypeId is null'
: ' and occupancyTypeId = ?'
}`
) )
.get(occupancyTypeParameters) as { maxOrderNumber: number } .get(occupancyTypeParameters) as { maxOrderNumber: number }
).maxOrderNumber ).maxOrderNumber
@ -95,13 +96,14 @@ export async function moveOccupancyTypeFieldDownToBottom(
database database
.prepare( .prepare(
'update OccupancyTypeFields' + `update OccupancyTypeFields set orderNumber = orderNumber - 1
' set orderNumber = orderNumber - 1' + where recordDelete_timeMillis is null
' where recordDelete_timeMillis is null' + ${
(currentField.occupancyTypeId currentField.occupancyTypeId === undefined
? ' and occupancyTypeId = ?' ? ' and occupancyTypeId is null'
: ' and occupancyTypeId is null') + : ' and occupancyTypeId = ?'
' and orderNumber > ?' }
and orderNumber > ?`
) )
.run(occupancyTypeParameters) .run(occupancyTypeParameters)
} }
@ -127,15 +129,15 @@ export async function moveOccupancyTypeFieldUp(
database database
.prepare( .prepare(
'update OccupancyTypeFields' + `update OccupancyTypeFields
' set orderNumber = orderNumber + 1' + set orderNumber = orderNumber + 1
' where recordDelete_timeMillis is null' + where recordDelete_timeMillis is null
(currentField.occupancyTypeId ${
? " and occupancyTypeId = '" + currentField.occupancyTypeId === undefined
currentField.occupancyTypeId.toString() + ? ' and occupancyTypeId is null'
"'" : ` and occupancyTypeId = '${currentField.occupancyTypeId.toString()}'`
: ' and occupancyTypeId is null') + }
' and orderNumber = ? - 1' and orderNumber = ? - 1`
) )
.run(currentField.orderNumber) .run(currentField.orderNumber)
@ -178,13 +180,14 @@ export async function moveOccupancyTypeFieldUpToTop(
database database
.prepare( .prepare(
'update OccupancyTypeFields' + `update OccupancyTypeFields
' set orderNumber = orderNumber + 1' + set orderNumber = orderNumber + 1
' where recordDelete_timeMillis is null' + where recordDelete_timeMillis is null
(currentField.occupancyTypeId ${
? ' and occupancyTypeId = ?' currentField.occupancyTypeId
: ' and occupancyTypeId is null') + ? ' and occupancyTypeId = ?'
' and orderNumber < ?' : ' and occupancyTypeId is null'
} and orderNumber < ?`
) )
.run(occupancyTypeParameters) .run(occupancyTypeParameters)
} }

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import { clearCacheByTableName } from '../helpers/functions.cache.js'; import { clearCacheByTableName } from '../helpers/functions.cache.js';
import { acquireConnection } from './pool.js';
export async function moveOccupancyTypePrintDown(occupancyTypeId, printEJS) { export async function moveOccupancyTypePrintDown(occupancyTypeId, printEJS) {
const database = await acquireConnection(); const database = await acquireConnection();
const currentOrderNumber = database const currentOrderNumber = database

View File

@ -1,7 +1,7 @@
import { acquireConnection } from './pool.js'
import { clearCacheByTableName } from '../helpers/functions.cache.js' import { clearCacheByTableName } from '../helpers/functions.cache.js'
import { acquireConnection } from './pool.js'
export async function moveOccupancyTypePrintDown( export async function moveOccupancyTypePrintDown(
occupancyTypeId: number | string, occupancyTypeId: number | string,
printEJS: string printEJS: string

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import { clearCacheByTableName } from '../helpers/functions.cache.js'; import { clearCacheByTableName } from '../helpers/functions.cache.js';
import { acquireConnection } from './pool.js';
export async function moveOccupancyTypePrintUp(occupancyTypeId, printEJS) { export async function moveOccupancyTypePrintUp(occupancyTypeId, printEJS) {
const database = await acquireConnection(); const database = await acquireConnection();
const currentOrderNumber = database const currentOrderNumber = database

View File

@ -1,7 +1,7 @@
import { acquireConnection } from './pool.js'
import { clearCacheByTableName } from '../helpers/functions.cache.js' import { clearCacheByTableName } from '../helpers/functions.cache.js'
import { acquireConnection } from './pool.js'
export async function moveOccupancyTypePrintUp( export async function moveOccupancyTypePrintUp(
occupancyTypeId: number | string, occupancyTypeId: number | string,
printEJS: string printEJS: string

View File

@ -1,5 +1,5 @@
import { acquireConnection } from './pool.js';
import { clearCacheByTableName } from '../helpers/functions.cache.js'; import { clearCacheByTableName } from '../helpers/functions.cache.js';
import { acquireConnection } from './pool.js';
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
const recordIdColumns = new Map(); const recordIdColumns = new Map();
recordIdColumns.set('FeeCategories', 'feeCategoryId'); recordIdColumns.set('FeeCategories', 'feeCategoryId');

View File

@ -1,7 +1,8 @@
import type sqlite from 'better-sqlite3' import type sqlite from 'better-sqlite3'
import { acquireConnection } from './pool.js'
import { clearCacheByTableName } from '../helpers/functions.cache.js' import { clearCacheByTableName } from '../helpers/functions.cache.js'
import { acquireConnection } from './pool.js'
import { updateRecordOrderNumber } from './updateRecordOrderNumber.js' import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
type RecordTable = type RecordTable =

View File

@ -1,12 +1,11 @@
import { Pool } from 'better-sqlite-pool'; import { Pool } from 'better-sqlite-pool';
import { lotOccupancyDB as databasePath } from '../data/databasePaths.js';
import exitHook from 'exit-hook';
import Debug from 'debug'; import Debug from 'debug';
import exitHook from 'exit-hook';
import { lotOccupancyDB as databasePath } from '../data/databasePaths.js';
const debug = Debug('lot-occupancy-system:lotOccupancyDB:pool'); const debug = Debug('lot-occupancy-system:lotOccupancyDB:pool');
const pool = new Pool(databasePath); const pool = new Pool(databasePath);
export async function acquireConnection() { export async function acquireConnection() {
const connection = await pool.acquire(); return await pool.acquire();
return connection;
} }
exitHook(() => { exitHook(() => {
debug('Closing database pool'); debug('Closing database pool');

View File

@ -1,17 +1,15 @@
import { Pool, type PoolConnection } from 'better-sqlite-pool' import { Pool, type PoolConnection } from 'better-sqlite-pool'
import Debug from 'debug'
import exitHook from 'exit-hook'
import { lotOccupancyDB as databasePath } from '../data/databasePaths.js' import { lotOccupancyDB as databasePath } from '../data/databasePaths.js'
import exitHook from 'exit-hook'
import Debug from 'debug'
const debug = Debug('lot-occupancy-system:lotOccupancyDB:pool') const debug = Debug('lot-occupancy-system:lotOccupancyDB:pool')
const pool = new Pool(databasePath) const pool = new Pool(databasePath)
export async function acquireConnection(): Promise<PoolConnection> { export async function acquireConnection(): Promise<PoolConnection> {
const connection = await pool.acquire() return await pool.acquire()
return connection
} }
exitHook(() => { exitHook(() => {

View File

@ -20,13 +20,13 @@ export async function updateLot(lotForm, user) {
if (result.changes > 0) { if (result.changes > 0) {
const lotTypeFieldIds = (lotForm.lotTypeFieldIds ?? '').split(','); const lotTypeFieldIds = (lotForm.lotTypeFieldIds ?? '').split(',');
for (const lotTypeFieldId of lotTypeFieldIds) { for (const lotTypeFieldId of lotTypeFieldIds) {
const lotFieldValue = lotForm['lotFieldValue_' + lotTypeFieldId]; const lotFieldValue = lotForm[`lotFieldValue_${lotTypeFieldId}`];
await ((lotFieldValue ?? '') === '' await ((lotFieldValue ?? '') === ''
? deleteLotField(lotForm.lotId, lotTypeFieldId, user, database) ? deleteLotField(lotForm.lotId, lotTypeFieldId, user, database)
: addOrUpdateLotField({ : addOrUpdateLotField({
lotId: lotForm.lotId, lotId: lotForm.lotId,
lotTypeFieldId, lotTypeFieldId,
lotFieldValue: lotFieldValue lotFieldValue: lotFieldValue ?? ''
}, user, database)); }, user, database));
} }
} }

Some files were not shown because too many files have changed in this diff Show More