deepsource-autofix-76c6eb20
Dan Gowans 2023-01-12 10:19:58 -05:00
parent 10fe9a612e
commit c937521807
77 changed files with 3183 additions and 3085 deletions

View File

@ -117,7 +117,7 @@ function buildEventDescriptionHTML_occupancies(
<td> <td>
${ ${
occupancy.occupancyEndDate occupancy.occupancyEndDate
? occupancy.occupancyEndDateString ? occupancy.occupancyEndDateString!
: '(No End Date)' : '(No End Date)'
} }
</td> </td>
@ -306,7 +306,7 @@ export const handler: RequestHandler = (request, response) => {
}) })
if (request.query.workOrderId && workOrderMilestones.length > 0) { if (request.query.workOrderId && workOrderMilestones.length > 0) {
calendar.name(`Work Order #${workOrderMilestones[0].workOrderNumber}`) calendar.name(`Work Order #${workOrderMilestones[0].workOrderNumber!}`)
calendar.url(urlRoot + '/workOrders/' + workOrderMilestones[0].workOrderId) calendar.url(urlRoot + '/workOrders/' + workOrderMilestones[0].workOrderId)
} }

View File

@ -1,4 +1,4 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function getFee(feeId: number | string, connectedDatabase?: sqlite.Database): recordTypes.Fee; export declare function getFee(feeId: number | string, connectedDatabase?: sqlite.Database): recordTypes.Fee;
export default getFee; export default getFee;

View File

@ -1,7 +1,7 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function getFee(feeId, connectedDatabase) { export function getFee(feeId, connectedDatabase) {
const database = connectedDatabase || const database = connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); });

View File

@ -1,18 +1,18 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function getFee( export function getFee(
feeId: number | string, feeId: number | string,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): recordTypes.Fee { ): recordTypes.Fee {
const database = const database =
connectedDatabase || connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); })
const fee = database const fee = database
.prepare( .prepare(
@ -32,13 +32,13 @@ export function getFee(
where f.recordDelete_timeMillis is null where f.recordDelete_timeMillis is null
and f.feeId = ?` and f.feeId = ?`
) )
.get(feeId); .get(feeId)
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return fee; return fee
} }
export default getFee; export default getFee

View File

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

View File

@ -1,41 +1,42 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { getFees } from "./getFees.js"; import { getFees } from './getFees.js';
import { updateRecordOrderNumber } from "./updateRecordOrderNumber.js"; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
export function getFeeCategories(filters, options) { export function getFeeCategories(filters, options) {
const updateOrderNumbers = !(filters.lotTypeId || filters.occupancyTypeId) && options.includeFees; const updateOrderNumbers = !(filters.lotTypeId || filters.occupancyTypeId) && options.includeFees;
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: !updateOrderNumbers readonly: !updateOrderNumbers
}); });
let sqlWhereClause = " where recordDelete_timeMillis is null"; let sqlWhereClause = ' where recordDelete_timeMillis is null';
const sqlParameters = []; const sqlParameters = [];
if (filters.occupancyTypeId) { if (filters.occupancyTypeId) {
sqlWhereClause += sqlWhereClause +=
" and feeCategoryId in (" + ' and feeCategoryId in (' +
"select feeCategoryId from Fees" + 'select feeCategoryId from Fees' +
" where recordDelete_timeMillis is null" + ' where recordDelete_timeMillis is null' +
" and (occupancyTypeId is null or occupancyTypeId = ?))"; ' and (occupancyTypeId is null or occupancyTypeId = ?))';
sqlParameters.push(filters.occupancyTypeId); sqlParameters.push(filters.occupancyTypeId);
} }
if (filters.lotTypeId) { if (filters.lotTypeId) {
sqlWhereClause += sqlWhereClause +=
" and feeCategoryId in (" + ' and feeCategoryId in (' +
"select feeCategoryId from Fees" + 'select feeCategoryId from Fees' +
" where recordDelete_timeMillis is null" + ' where recordDelete_timeMillis is null' +
" and (lotTypeId is null or lotTypeId = ?))"; ' and (lotTypeId is null or lotTypeId = ?))';
sqlParameters.push(filters.lotTypeId); sqlParameters.push(filters.lotTypeId);
} }
const feeCategories = database const feeCategories = database
.prepare("select feeCategoryId, feeCategory, orderNumber" + .prepare('select feeCategoryId, feeCategory, orderNumber' +
" from FeeCategories" + ' from FeeCategories' +
sqlWhereClause + sqlWhereClause +
" order by orderNumber, feeCategory") ' order by orderNumber, feeCategory')
.all(sqlParameters); .all(sqlParameters);
if (options.includeFees) { if (options.includeFees) {
let expectedOrderNumber = 0; let expectedOrderNumber = 0;
for (const feeCategory of feeCategories) { for (const feeCategory of feeCategories) {
if (updateOrderNumbers && feeCategory.orderNumber !== expectedOrderNumber) { if (updateOrderNumbers &&
updateRecordOrderNumber("FeeCategories", feeCategory.feeCategoryId, expectedOrderNumber, database); feeCategory.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber('FeeCategories', feeCategory.feeCategoryId, expectedOrderNumber, database);
feeCategory.orderNumber = expectedOrderNumber; feeCategory.orderNumber = expectedOrderNumber;
} }
expectedOrderNumber += 1; expectedOrderNumber += 1;

View File

@ -1,88 +1,92 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { getFees } from "./getFees.js"; import { getFees } from './getFees.js'
import { updateRecordOrderNumber } from "./updateRecordOrderNumber.js"; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface GetFeeCategoriesFilters { interface GetFeeCategoriesFilters {
occupancyTypeId?: number | string; occupancyTypeId?: number | string
lotTypeId?: number | string; lotTypeId?: number | string
} }
interface GetFeeCategoriesOptions { interface GetFeeCategoriesOptions {
includeFees?: boolean; includeFees?: boolean
} }
export function getFeeCategories( export function getFeeCategories(
filters: GetFeeCategoriesFilters, filters: GetFeeCategoriesFilters,
options: GetFeeCategoriesOptions options: GetFeeCategoriesOptions
): recordTypes.FeeCategory[] { ): recordTypes.FeeCategory[] {
const updateOrderNumbers = !(filters.lotTypeId || filters.occupancyTypeId) && options.includeFees; const updateOrderNumbers =
!(filters.lotTypeId || filters.occupancyTypeId) && options.includeFees
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: !updateOrderNumbers readonly: !updateOrderNumbers
}); })
let sqlWhereClause = " where recordDelete_timeMillis is null"; let sqlWhereClause = ' where recordDelete_timeMillis is null'
const sqlParameters: unknown[] = []; const sqlParameters: unknown[] = []
if (filters.occupancyTypeId) { if (filters.occupancyTypeId) {
sqlWhereClause += sqlWhereClause +=
" and feeCategoryId in (" + ' and feeCategoryId in (' +
"select feeCategoryId from Fees" + 'select feeCategoryId from Fees' +
" where recordDelete_timeMillis is null" + ' where recordDelete_timeMillis is null' +
" and (occupancyTypeId is null or occupancyTypeId = ?))"; ' and (occupancyTypeId is null or occupancyTypeId = ?))'
sqlParameters.push(filters.occupancyTypeId); sqlParameters.push(filters.occupancyTypeId)
} }
if (filters.lotTypeId) { if (filters.lotTypeId) {
sqlWhereClause += sqlWhereClause +=
" and feeCategoryId in (" + ' and feeCategoryId in (' +
"select feeCategoryId from Fees" + 'select feeCategoryId from Fees' +
" where recordDelete_timeMillis is null" + ' where recordDelete_timeMillis is null' +
" and (lotTypeId is null or lotTypeId = ?))"; ' and (lotTypeId is null or lotTypeId = ?))'
sqlParameters.push(filters.lotTypeId); sqlParameters.push(filters.lotTypeId)
} }
const feeCategories: recordTypes.FeeCategory[] = database const feeCategories: recordTypes.FeeCategory[] = database
.prepare( .prepare(
"select feeCategoryId, feeCategory, orderNumber" + 'select feeCategoryId, feeCategory, orderNumber' +
" from FeeCategories" + ' from FeeCategories' +
sqlWhereClause + sqlWhereClause +
" order by orderNumber, feeCategory" ' order by orderNumber, feeCategory'
) )
.all(sqlParameters); .all(sqlParameters)
if (options.includeFees) { if (options.includeFees) {
let expectedOrderNumber = 0; let expectedOrderNumber = 0
for (const feeCategory of feeCategories) { for (const feeCategory of feeCategories) {
if (updateOrderNumbers && feeCategory.orderNumber !== expectedOrderNumber) { if (
updateOrderNumbers &&
feeCategory.orderNumber !== expectedOrderNumber
) {
updateRecordOrderNumber( updateRecordOrderNumber(
"FeeCategories", 'FeeCategories',
feeCategory.feeCategoryId, feeCategory.feeCategoryId,
expectedOrderNumber, expectedOrderNumber,
database database
); )
feeCategory.orderNumber = expectedOrderNumber; feeCategory.orderNumber = expectedOrderNumber
} }
expectedOrderNumber += 1; expectedOrderNumber += 1
feeCategory.fees = getFees(feeCategory.feeCategoryId, filters, database); feeCategory.fees = getFees(feeCategory.feeCategoryId, filters, database)
} }
} }
database.close(); database.close()
return feeCategories; return feeCategories
} }
export default getFeeCategories; export default getFeeCategories

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
interface GetFeesFilters { interface GetFeesFilters {
occupancyTypeId?: number | string; occupancyTypeId?: number | string;
lotTypeId?: number | string; lotTypeId?: number | string;

View File

@ -1,41 +1,42 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { updateRecordOrderNumber } from "./updateRecordOrderNumber.js"; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
export function getFees(feeCategoryId, additionalFilters, connectedDatabase) { export function getFees(feeCategoryId, additionalFilters, connectedDatabase) {
const updateOrderNumbers = !(additionalFilters.lotTypeId || additionalFilters.occupancyTypeId); const updateOrderNumbers = !(additionalFilters.lotTypeId || additionalFilters.occupancyTypeId);
const database = connectedDatabase || const database = connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: !updateOrderNumbers readonly: !updateOrderNumbers
}); });
let sqlWhereClause = " where f.recordDelete_timeMillis is null and f.feeCategoryId = ?"; let sqlWhereClause = ' where f.recordDelete_timeMillis is null and f.feeCategoryId = ?';
const sqlParameters = [feeCategoryId]; const sqlParameters = [feeCategoryId];
if (additionalFilters.occupancyTypeId) { if (additionalFilters.occupancyTypeId) {
sqlWhereClause += " and (f.occupancyTypeId is null or f.occupancyTypeId = ?)"; sqlWhereClause +=
' and (f.occupancyTypeId is null or f.occupancyTypeId = ?)';
sqlParameters.push(additionalFilters.occupancyTypeId); sqlParameters.push(additionalFilters.occupancyTypeId);
} }
if (additionalFilters.lotTypeId) { if (additionalFilters.lotTypeId) {
sqlWhereClause += " and (f.lotTypeId is null or f.lotTypeId = ?)"; sqlWhereClause += ' and (f.lotTypeId is null or f.lotTypeId = ?)';
sqlParameters.push(additionalFilters.lotTypeId); sqlParameters.push(additionalFilters.lotTypeId);
} }
const fees = database const fees = database
.prepare("select f.feeId, f.feeName, f.feeDescription," + .prepare('select f.feeId, f.feeName, f.feeDescription,' +
" f.occupancyTypeId, o.occupancyType," + ' f.occupancyTypeId, o.occupancyType,' +
" f.lotTypeId, l.lotType," + ' f.lotTypeId, l.lotType,' +
" ifnull(f.feeAmount, 0) as feeAmount, f.feeFunction," + ' ifnull(f.feeAmount, 0) as feeAmount, f.feeFunction,' +
" f.taxAmount, f.taxPercentage," + ' f.taxAmount, f.taxPercentage,' +
" f.includeQuantity, f.quantityUnit," + ' f.includeQuantity, f.quantityUnit,' +
" f.isRequired, f.orderNumber" + ' f.isRequired, f.orderNumber' +
" from Fees f" + ' from Fees f' +
" left join OccupancyTypes o on f.occupancyTypeId = o.occupancyTypeId" + ' left join OccupancyTypes o on f.occupancyTypeId = o.occupancyTypeId' +
" left join LotTypes l on f.lotTypeId = l.lotTypeId" + ' left join LotTypes l on f.lotTypeId = l.lotTypeId' +
sqlWhereClause + sqlWhereClause +
" order by f.orderNumber, f.feeName") ' order by f.orderNumber, f.feeName')
.all(sqlParameters); .all(sqlParameters);
if (updateOrderNumbers) { if (updateOrderNumbers) {
let expectedOrderNumber = 0; let expectedOrderNumber = 0;
for (const fee of fees) { for (const fee of fees) {
if (fee.orderNumber !== expectedOrderNumber) { if (fee.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber("Fees", fee.feeId, expectedOrderNumber, database); updateRecordOrderNumber('Fees', fee.feeId, expectedOrderNumber, database);
fee.orderNumber = expectedOrderNumber; fee.orderNumber = expectedOrderNumber;
} }
expectedOrderNumber += 1; expectedOrderNumber += 1;

View File

@ -1,14 +1,14 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { updateRecordOrderNumber } from "./updateRecordOrderNumber.js"; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface GetFeesFilters { interface GetFeesFilters {
occupancyTypeId?: number | string; occupancyTypeId?: number | string
lotTypeId?: number | string; lotTypeId?: number | string
} }
export function getFees( export function getFees(
@ -16,65 +16,74 @@ export function getFees(
additionalFilters: GetFeesFilters, additionalFilters: GetFeesFilters,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): recordTypes.Fee[] { ): recordTypes.Fee[] {
const updateOrderNumbers = !(additionalFilters.lotTypeId || additionalFilters.occupancyTypeId); const updateOrderNumbers = !(
additionalFilters.lotTypeId || additionalFilters.occupancyTypeId
)
const database = const database =
connectedDatabase || connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: !updateOrderNumbers readonly: !updateOrderNumbers
}); })
let sqlWhereClause = " where f.recordDelete_timeMillis is null and f.feeCategoryId = ?"; let sqlWhereClause =
' where f.recordDelete_timeMillis is null and f.feeCategoryId = ?'
const sqlParameters: unknown[] = [feeCategoryId]; const sqlParameters: unknown[] = [feeCategoryId]
if (additionalFilters.occupancyTypeId) { if (additionalFilters.occupancyTypeId) {
sqlWhereClause += " and (f.occupancyTypeId is null or f.occupancyTypeId = ?)"; sqlWhereClause +=
' and (f.occupancyTypeId is null or f.occupancyTypeId = ?)'
sqlParameters.push(additionalFilters.occupancyTypeId); sqlParameters.push(additionalFilters.occupancyTypeId)
} }
if (additionalFilters.lotTypeId) { if (additionalFilters.lotTypeId) {
sqlWhereClause += " and (f.lotTypeId is null or f.lotTypeId = ?)"; sqlWhereClause += ' and (f.lotTypeId is null or f.lotTypeId = ?)'
sqlParameters.push(additionalFilters.lotTypeId); sqlParameters.push(additionalFilters.lotTypeId)
} }
const fees = database const fees = database
.prepare( .prepare(
"select f.feeId, f.feeName, f.feeDescription," + 'select f.feeId, f.feeName, f.feeDescription,' +
" f.occupancyTypeId, o.occupancyType," + ' f.occupancyTypeId, o.occupancyType,' +
" f.lotTypeId, l.lotType," + ' f.lotTypeId, l.lotType,' +
" ifnull(f.feeAmount, 0) as feeAmount, f.feeFunction," + ' ifnull(f.feeAmount, 0) as feeAmount, f.feeFunction,' +
" f.taxAmount, f.taxPercentage," + ' f.taxAmount, f.taxPercentage,' +
" f.includeQuantity, f.quantityUnit," + ' f.includeQuantity, f.quantityUnit,' +
" f.isRequired, f.orderNumber" + ' f.isRequired, f.orderNumber' +
" from Fees f" + ' from Fees f' +
" left join OccupancyTypes o on f.occupancyTypeId = o.occupancyTypeId" + ' left join OccupancyTypes o on f.occupancyTypeId = o.occupancyTypeId' +
" left join LotTypes l on f.lotTypeId = l.lotTypeId" + ' left join LotTypes l on f.lotTypeId = l.lotTypeId' +
sqlWhereClause + sqlWhereClause +
" order by f.orderNumber, f.feeName" ' order by f.orderNumber, f.feeName'
) )
.all(sqlParameters); .all(sqlParameters)
if (updateOrderNumbers) { if (updateOrderNumbers) {
let expectedOrderNumber = 0; let expectedOrderNumber = 0
for (const fee of fees) { for (const fee of fees) {
if (fee.orderNumber !== expectedOrderNumber) { if (fee.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber("Fees", fee.feeId, expectedOrderNumber, database); updateRecordOrderNumber(
fee.orderNumber = expectedOrderNumber; 'Fees',
fee.feeId,
expectedOrderNumber,
database
)
fee.orderNumber = expectedOrderNumber
} }
expectedOrderNumber += 1; expectedOrderNumber += 1
} }
} }
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return fees; return fees
} }
export default getFees; export default getFees

View File

@ -1,4 +1,4 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function getLotComments(lotId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotComment[]; export declare function getLotComments(lotId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotComment[];
export default getLotComments; export default getLotComments;

View File

@ -1,13 +1,13 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { dateIntegerToString, timeIntegerToString } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { dateIntegerToString, timeIntegerToString } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function getLotComments(lotId, connectedDatabase) { export function getLotComments(lotId, connectedDatabase) {
const database = connectedDatabase || const database = connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); });
database.function("userFn_dateIntegerToString", dateIntegerToString); database.function('userFn_dateIntegerToString', dateIntegerToString);
database.function("userFn_timeIntegerToString", timeIntegerToString); database.function('userFn_timeIntegerToString', timeIntegerToString);
const lotComments = database const lotComments = database
.prepare(`select lotCommentId, .prepare(`select lotCommentId,
lotCommentDate, userFn_dateIntegerToString(lotCommentDate) as lotCommentDateString, lotCommentDate, userFn_dateIntegerToString(lotCommentDate) as lotCommentDateString,

View File

@ -1,26 +1,26 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { import {
dateIntegerToString, dateIntegerToString,
timeIntegerToString timeIntegerToString
} from "@cityssm/expressjs-server-js/dateTimeFns.js"; } from '@cityssm/expressjs-server-js/dateTimeFns.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function getLotComments( export function getLotComments(
lotId: number | string, lotId: number | string,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): recordTypes.LotComment[] { ): recordTypes.LotComment[] {
const database = const database =
connectedDatabase || connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); })
database.function("userFn_dateIntegerToString", dateIntegerToString); database.function('userFn_dateIntegerToString', dateIntegerToString)
database.function("userFn_timeIntegerToString", timeIntegerToString); database.function('userFn_timeIntegerToString', timeIntegerToString)
const lotComments = database const lotComments = database
.prepare( .prepare(
@ -34,13 +34,13 @@ export function getLotComments(
and lotId = ? and lotId = ?
order by lotCommentDate desc, lotCommentTime desc, lotCommentId desc` order by lotCommentDate desc, lotCommentTime desc, lotCommentId desc`
) )
.all(lotId); .all(lotId)
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return lotComments; return lotComments
} }
export default getLotComments; export default getLotComments

View File

@ -1,4 +1,4 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function getLotFields(lotId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotField[]; export declare function getLotFields(lotId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotField[];
export default getLotFields; export default getLotFields;

View File

@ -1,7 +1,7 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function getLotFields(lotId, connectedDatabase) { export function getLotFields(lotId, connectedDatabase) {
const database = connectedDatabase || const database = connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); });

View File

@ -1,18 +1,18 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function getLotFields( export function getLotFields(
lotId: number | string, lotId: number | string,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): recordTypes.LotField[] { ): recordTypes.LotField[] {
const database = const database =
connectedDatabase || connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); })
const lotFields: recordTypes.LotField[] = database const lotFields: recordTypes.LotField[] = database
.prepare( .prepare(
@ -43,13 +43,13 @@ export 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); .all(lotId, lotId, lotId, lotId)
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return lotFields; return lotFields
} }
export default getLotFields; export default getLotFields

View File

@ -1,4 +1,4 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function getLotOccupancyFees(lotOccupancyId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotOccupancyFee[]; export declare function getLotOccupancyFees(lotOccupancyId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotOccupancyFee[];
export default getLotOccupancyFees; export default getLotOccupancyFees;

View File

@ -1,7 +1,7 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function getLotOccupancyFees(lotOccupancyId, connectedDatabase) { export function getLotOccupancyFees(lotOccupancyId, connectedDatabase) {
const database = connectedDatabase || const database = connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); });

View File

@ -1,18 +1,18 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function getLotOccupancyFees( export function getLotOccupancyFees(
lotOccupancyId: number | string, lotOccupancyId: number | string,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): recordTypes.LotOccupancyFee[] { ): recordTypes.LotOccupancyFee[] {
const database = const database =
connectedDatabase || connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); })
const lotOccupancyFees: recordTypes.LotOccupancyFee[] = database const lotOccupancyFees: recordTypes.LotOccupancyFee[] = database
.prepare( .prepare(
@ -26,13 +26,13 @@ export function getLotOccupancyFees(
and o.lotOccupancyId = ? and o.lotOccupancyId = ?
order by o.recordCreate_timeMillis` order by o.recordCreate_timeMillis`
) )
.all(lotOccupancyId); .all(lotOccupancyId)
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return lotOccupancyFees; return lotOccupancyFees
} }
export default getLotOccupancyFees; export default getLotOccupancyFees

View File

@ -1,4 +1,4 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function getLotOccupancyFields(lotOccupancyId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotOccupancyField[]; export declare function getLotOccupancyFields(lotOccupancyId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotOccupancyField[];
export default getLotOccupancyFields; export default getLotOccupancyFields;

View File

@ -1,7 +1,7 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function getLotOccupancyFields(lotOccupancyId, connectedDatabase) { export function getLotOccupancyFields(lotOccupancyId, connectedDatabase) {
const database = connectedDatabase || const database = connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); });

View File

@ -1,18 +1,18 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function getLotOccupancyFields( export function getLotOccupancyFields(
lotOccupancyId: number | string, lotOccupancyId: number | string,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): recordTypes.LotOccupancyField[] { ): recordTypes.LotOccupancyField[] {
const database = const database =
connectedDatabase || connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); })
const lotOccupancyFields: recordTypes.LotOccupancyField[] = database const lotOccupancyFields: recordTypes.LotOccupancyField[] = database
.prepare( .prepare(
@ -40,13 +40,13 @@ export 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); .all(lotOccupancyId, lotOccupancyId, lotOccupancyId, lotOccupancyId)
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return lotOccupancyFields; return lotOccupancyFields
} }
export default getLotOccupancyFields; export default getLotOccupancyFields

View File

@ -1,4 +1,4 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function getLotOccupancyOccupants(lotOccupancyId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotOccupancyOccupant[]; export declare function getLotOccupancyOccupants(lotOccupancyId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotOccupancyOccupant[];
export default getLotOccupancyOccupants; export default getLotOccupancyOccupants;

View File

@ -1,7 +1,7 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function getLotOccupancyOccupants(lotOccupancyId, connectedDatabase) { export function getLotOccupancyOccupants(lotOccupancyId, connectedDatabase) {
const database = connectedDatabase || const database = connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); });

View File

@ -1,18 +1,18 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function getLotOccupancyOccupants( export function getLotOccupancyOccupants(
lotOccupancyId: number | string, lotOccupancyId: number | string,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): recordTypes.LotOccupancyOccupant[] { ): recordTypes.LotOccupancyOccupant[] {
const database = const database =
connectedDatabase || connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); })
const lotOccupancyOccupants: recordTypes.LotOccupancyOccupant[] = database const lotOccupancyOccupants: recordTypes.LotOccupancyOccupant[] = database
.prepare( .prepare(
@ -30,13 +30,13 @@ export 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); .all(lotOccupancyId)
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return lotOccupancyOccupants; return lotOccupancyOccupants
} }
export default getLotOccupancyOccupants; export default getLotOccupancyOccupants

View File

@ -1,4 +1,4 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function getLotOccupancyTransactions(lotOccupancyId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotOccupancyTransaction[]; export declare function getLotOccupancyTransactions(lotOccupancyId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotOccupancyTransaction[];
export default getLotOccupancyTransactions; export default getLotOccupancyTransactions;

View File

@ -1,13 +1,13 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { dateIntegerToString, timeIntegerToString } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { dateIntegerToString, timeIntegerToString } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function getLotOccupancyTransactions(lotOccupancyId, connectedDatabase) { export function getLotOccupancyTransactions(lotOccupancyId, connectedDatabase) {
const database = connectedDatabase || const database = connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); });
database.function("userFn_dateIntegerToString", dateIntegerToString); database.function('userFn_dateIntegerToString', dateIntegerToString);
database.function("userFn_timeIntegerToString", timeIntegerToString); database.function('userFn_timeIntegerToString', timeIntegerToString);
const lotOccupancyTransactions = database const lotOccupancyTransactions = database
.prepare(`select lotOccupancyId, transactionIndex, .prepare(`select lotOccupancyId, transactionIndex,
transactionDate, userFn_dateIntegerToString(transactionDate) as transactionDateString, transactionDate, userFn_dateIntegerToString(transactionDate) as transactionDateString,

View File

@ -1,28 +1,29 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { import {
dateIntegerToString, dateIntegerToString,
timeIntegerToString timeIntegerToString
} from "@cityssm/expressjs-server-js/dateTimeFns.js"; } from '@cityssm/expressjs-server-js/dateTimeFns.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function getLotOccupancyTransactions( export function getLotOccupancyTransactions(
lotOccupancyId: number | string, lotOccupancyId: number | string,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): recordTypes.LotOccupancyTransaction[] { ): recordTypes.LotOccupancyTransaction[] {
const database = const database =
connectedDatabase || connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); })
database.function("userFn_dateIntegerToString", dateIntegerToString); database.function('userFn_dateIntegerToString', dateIntegerToString)
database.function("userFn_timeIntegerToString", timeIntegerToString); database.function('userFn_timeIntegerToString', timeIntegerToString)
const lotOccupancyTransactions: recordTypes.LotOccupancyTransaction[] = database const lotOccupancyTransactions: recordTypes.LotOccupancyTransaction[] =
database
.prepare( .prepare(
`select lotOccupancyId, transactionIndex, `select lotOccupancyId, transactionIndex,
transactionDate, userFn_dateIntegerToString(transactionDate) as transactionDateString, transactionDate, userFn_dateIntegerToString(transactionDate) as transactionDateString,
@ -33,13 +34,13 @@ export function getLotOccupancyTransactions(
and lotOccupancyId = ? and lotOccupancyId = ?
order by transactionDate, transactionTime, transactionIndex` order by transactionDate, transactionTime, transactionIndex`
) )
.all(lotOccupancyId); .all(lotOccupancyId)
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return lotOccupancyTransactions; return lotOccupancyTransactions
} }
export default getLotOccupancyTransactions; export default getLotOccupancyTransactions

View File

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

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { updateRecordOrderNumber } from "./updateRecordOrderNumber.js"; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
export function getLotOccupantTypes() { export function getLotOccupantTypes() {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const lotOccupantTypes = database const lotOccupantTypes = database
@ -12,7 +12,7 @@ export function getLotOccupantTypes() {
let expectedOrderNumber = 0; let expectedOrderNumber = 0;
for (const lotOccupantType of lotOccupantTypes) { for (const lotOccupantType of lotOccupantTypes) {
if (lotOccupantType.orderNumber !== expectedOrderNumber) { if (lotOccupantType.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber("LotOccupantTypes", lotOccupantType.lotOccupantTypeId, expectedOrderNumber, database); updateRecordOrderNumber('LotOccupantTypes', lotOccupantType.lotOccupantTypeId, expectedOrderNumber, database);
lotOccupantType.orderNumber = expectedOrderNumber; lotOccupantType.orderNumber = expectedOrderNumber;
} }
expectedOrderNumber += 1; expectedOrderNumber += 1;

View File

@ -1,13 +1,13 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { updateRecordOrderNumber } from "./updateRecordOrderNumber.js"; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function getLotOccupantTypes(): recordTypes.LotOccupantType[] { export function getLotOccupantTypes(): recordTypes.LotOccupantType[] {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const lotOccupantTypes: recordTypes.LotOccupantType[] = database const lotOccupantTypes: recordTypes.LotOccupantType[] = database
.prepare( .prepare(
@ -16,28 +16,28 @@ export function getLotOccupantTypes(): recordTypes.LotOccupantType[] {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
order by orderNumber, lotOccupantType` order by orderNumber, lotOccupantType`
) )
.all(); .all()
let expectedOrderNumber = 0; let expectedOrderNumber = 0
for (const lotOccupantType of lotOccupantTypes) { for (const lotOccupantType of lotOccupantTypes) {
if (lotOccupantType.orderNumber !== expectedOrderNumber) { if (lotOccupantType.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber( updateRecordOrderNumber(
"LotOccupantTypes", 'LotOccupantTypes',
lotOccupantType.lotOccupantTypeId, lotOccupantType.lotOccupantTypeId,
expectedOrderNumber, expectedOrderNumber,
database database
); )
lotOccupantType.orderNumber = expectedOrderNumber; lotOccupantType.orderNumber = expectedOrderNumber
} }
expectedOrderNumber += 1; expectedOrderNumber += 1
} }
database.close(); database.close()
return lotOccupantTypes; return lotOccupantTypes
} }
export default getLotOccupantTypes; export default getLotOccupantTypes

View File

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

View File

@ -1,22 +1,22 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function getLotStatusSummary(filters) { export function getLotStatusSummary(filters) {
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: true readonly: true
}); });
let sqlWhereClause = " where l.recordDelete_timeMillis is null"; let sqlWhereClause = ' where l.recordDelete_timeMillis is null';
const sqlParameters = []; const sqlParameters = [];
if (filters && filters.mapId) { if (filters?.mapId) {
sqlWhereClause += " and l.mapId = ?"; sqlWhereClause += ' and l.mapId = ?';
sqlParameters.push(filters.mapId); sqlParameters.push(filters.mapId);
} }
const lotStatuses = database const lotStatuses = database
.prepare("select s.lotStatusId, s.lotStatus, count(l.lotId) as lotCount" + .prepare('select s.lotStatusId, s.lotStatus, count(l.lotId) as lotCount' +
" from Lots l" + ' from Lots l' +
" left join LotStatuses s on l.lotStatusId = s.lotStatusId" + ' left join LotStatuses s on l.lotStatusId = s.lotStatusId' +
sqlWhereClause + sqlWhereClause +
" group by s.lotStatusId, s.lotStatus, s.orderNumber" + ' group by s.lotStatusId, s.lotStatus, s.orderNumber' +
" order by s.orderNumber") ' order by s.orderNumber')
.all(sqlParameters); .all(sqlParameters);
database.close(); database.close();
return lotStatuses; return lotStatuses;

View File

@ -1,44 +1,44 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface GetFilters { interface GetFilters {
mapId?: number | string; mapId?: number | string
} }
interface LotStatusSummary extends recordTypes.LotStatus { interface LotStatusSummary extends recordTypes.LotStatus {
lotCount: number; lotCount: number
} }
export function getLotStatusSummary(filters?: GetFilters): LotStatusSummary[] { export function getLotStatusSummary(filters?: GetFilters): LotStatusSummary[] {
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: true readonly: true
}); })
let sqlWhereClause = " where l.recordDelete_timeMillis is null"; let sqlWhereClause = ' where l.recordDelete_timeMillis is null'
const sqlParameters: unknown[] = []; const sqlParameters: unknown[] = []
if (filters && filters.mapId) { if (filters?.mapId) {
sqlWhereClause += " and l.mapId = ?"; sqlWhereClause += ' and l.mapId = ?'
sqlParameters.push(filters.mapId); sqlParameters.push(filters.mapId)
} }
const lotStatuses: LotStatusSummary[] = database const lotStatuses: LotStatusSummary[] = database
.prepare( .prepare(
"select s.lotStatusId, s.lotStatus, count(l.lotId) as lotCount" + 'select s.lotStatusId, s.lotStatus, count(l.lotId) as lotCount' +
" from Lots l" + ' from Lots l' +
" left join LotStatuses s on l.lotStatusId = s.lotStatusId" + ' left join LotStatuses s on l.lotStatusId = s.lotStatusId' +
sqlWhereClause + sqlWhereClause +
" group by s.lotStatusId, s.lotStatus, s.orderNumber" + ' group by s.lotStatusId, s.lotStatus, s.orderNumber' +
" order by s.orderNumber" ' order by s.orderNumber'
) )
.all(sqlParameters); .all(sqlParameters)
database.close(); database.close()
return lotStatuses; return lotStatuses
} }
export default getLotStatusSummary; export default getLotStatusSummary

View File

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

View File

@ -1,6 +1,6 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { updateRecordOrderNumber } from "./updateRecordOrderNumber.js"; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
export function getLotStatuses() { export function getLotStatuses() {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const lotStatuses = database const lotStatuses = database
@ -12,7 +12,7 @@ export function getLotStatuses() {
let expectedOrderNumber = 0; let expectedOrderNumber = 0;
for (const lotStatus of lotStatuses) { for (const lotStatus of lotStatuses) {
if (lotStatus.orderNumber !== expectedOrderNumber) { if (lotStatus.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber("LotStatuses", lotStatus.lotStatusId, expectedOrderNumber, database); updateRecordOrderNumber('LotStatuses', lotStatus.lotStatusId, expectedOrderNumber, database);
lotStatus.orderNumber = expectedOrderNumber; lotStatus.orderNumber = expectedOrderNumber;
} }
expectedOrderNumber += 1; expectedOrderNumber += 1;

View File

@ -1,13 +1,13 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { updateRecordOrderNumber } from "./updateRecordOrderNumber.js"; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function getLotStatuses(): recordTypes.LotStatus[] { export function getLotStatuses(): recordTypes.LotStatus[] {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const lotStatuses: recordTypes.LotStatus[] = database const lotStatuses: recordTypes.LotStatus[] = database
.prepare( .prepare(
@ -16,22 +16,27 @@ export function getLotStatuses(): recordTypes.LotStatus[] {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
order by orderNumber, lotStatus` order by orderNumber, lotStatus`
) )
.all(); .all()
let expectedOrderNumber = 0; let expectedOrderNumber = 0
for (const lotStatus of lotStatuses) { for (const lotStatus of lotStatuses) {
if (lotStatus.orderNumber !== expectedOrderNumber) { if (lotStatus.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber("LotStatuses", lotStatus.lotStatusId, expectedOrderNumber, database); updateRecordOrderNumber(
lotStatus.orderNumber = expectedOrderNumber; 'LotStatuses',
lotStatus.lotStatusId,
expectedOrderNumber,
database
)
lotStatus.orderNumber = expectedOrderNumber
} }
expectedOrderNumber += 1; expectedOrderNumber += 1
} }
database.close(); database.close()
return lotStatuses; return lotStatuses
} }
export default getLotStatuses; export default getLotStatuses

View File

@ -1,4 +1,4 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function getLotTypeFields(lotTypeId: number, connectedDatabase?: sqlite.Database): recordTypes.LotTypeField[]; export declare function getLotTypeFields(lotTypeId: number, connectedDatabase?: sqlite.Database): recordTypes.LotTypeField[];
export default getLotTypeFields; export default getLotTypeFields;

View File

@ -1,8 +1,8 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { updateRecordOrderNumber } from "./updateRecordOrderNumber.js"; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
export function getLotTypeFields(lotTypeId, connectedDatabase) { export function getLotTypeFields(lotTypeId, connectedDatabase) {
const database = connectedDatabase || sqlite(databasePath); const database = connectedDatabase ?? sqlite(databasePath);
const lotTypeFields = database const lotTypeFields = database
.prepare(`select lotTypeFieldId, .prepare(`select lotTypeFieldId,
lotTypeField, lotTypeFieldValues, lotTypeField, lotTypeFieldValues,
@ -15,7 +15,7 @@ export function getLotTypeFields(lotTypeId, connectedDatabase) {
let expectedOrderNumber = 0; let expectedOrderNumber = 0;
for (const lotTypeField of lotTypeFields) { for (const lotTypeField of lotTypeFields) {
if (lotTypeField.orderNumber !== expectedOrderNumber) { if (lotTypeField.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber("LotTypeFields", lotTypeField.lotTypeFieldId, expectedOrderNumber, database); updateRecordOrderNumber('LotTypeFields', lotTypeField.lotTypeFieldId, expectedOrderNumber, database);
lotTypeField.orderNumber = expectedOrderNumber; lotTypeField.orderNumber = expectedOrderNumber;
} }
expectedOrderNumber += 1; expectedOrderNumber += 1;

View File

@ -1,15 +1,15 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
import { updateRecordOrderNumber } from "./updateRecordOrderNumber.js"; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
export function getLotTypeFields( export function getLotTypeFields(
lotTypeId: number, lotTypeId: number,
connectedDatabase?: sqlite.Database connectedDatabase?: sqlite.Database
): recordTypes.LotTypeField[] { ): recordTypes.LotTypeField[] {
const database = connectedDatabase || sqlite(databasePath); const database = connectedDatabase ?? sqlite(databasePath)
const lotTypeFields: recordTypes.LotTypeField[] = database const lotTypeFields: recordTypes.LotTypeField[] = database
.prepare( .prepare(
@ -21,30 +21,30 @@ export function getLotTypeFields(
and lotTypeId = ? and lotTypeId = ?
order by orderNumber, lotTypeField` order by orderNumber, lotTypeField`
) )
.all(lotTypeId); .all(lotTypeId)
let expectedOrderNumber = 0; let expectedOrderNumber = 0
for (const lotTypeField of lotTypeFields) { for (const lotTypeField of lotTypeFields) {
if (lotTypeField.orderNumber !== expectedOrderNumber) { if (lotTypeField.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber( updateRecordOrderNumber(
"LotTypeFields", 'LotTypeFields',
lotTypeField.lotTypeFieldId, lotTypeField.lotTypeFieldId,
expectedOrderNumber, expectedOrderNumber,
database database
); )
lotTypeField.orderNumber = expectedOrderNumber; lotTypeField.orderNumber = expectedOrderNumber
} }
expectedOrderNumber += 1; expectedOrderNumber += 1
} }
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
return lotTypeFields; return lotTypeFields
} }
export default getLotTypeFields; export default getLotTypeFields

View File

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

View File

@ -1,22 +1,22 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function getLotTypeSummary(filters) { export function getLotTypeSummary(filters) {
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: true readonly: true
}); });
let sqlWhereClause = " where l.recordDelete_timeMillis is null"; let sqlWhereClause = ' where l.recordDelete_timeMillis is null';
const sqlParameters = []; const sqlParameters = [];
if (filters && filters.mapId) { if (filters?.mapId) {
sqlWhereClause += " and l.mapId = ?"; sqlWhereClause += ' and l.mapId = ?';
sqlParameters.push(filters.mapId); sqlParameters.push(filters.mapId);
} }
const lotTypes = database const lotTypes = database
.prepare("select t.lotTypeId, t.lotType, count(l.lotId) as lotCount" + .prepare('select t.lotTypeId, t.lotType, count(l.lotId) as lotCount' +
" from Lots l" + ' from Lots l' +
" left join LotTypes t on l.lotTypeId = t.lotTypeId" + ' left join LotTypes t on l.lotTypeId = t.lotTypeId' +
sqlWhereClause + sqlWhereClause +
" group by t.lotTypeId, t.lotType, t.orderNumber" + ' group by t.lotTypeId, t.lotType, t.orderNumber' +
" order by t.orderNumber") ' order by t.orderNumber')
.all(sqlParameters); .all(sqlParameters);
database.close(); database.close();
return lotTypes; return lotTypes;

View File

@ -1,44 +1,44 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
interface GetFilters { interface GetFilters {
mapId?: number | string; mapId?: number | string
} }
interface LotTypeSummary extends recordTypes.LotType { interface LotTypeSummary extends recordTypes.LotType {
lotCount: number; lotCount: number
} }
export function getLotTypeSummary(filters?: GetFilters): LotTypeSummary[] { export function getLotTypeSummary(filters?: GetFilters): LotTypeSummary[] {
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: true readonly: true
}); })
let sqlWhereClause = " where l.recordDelete_timeMillis is null"; let sqlWhereClause = ' where l.recordDelete_timeMillis is null'
const sqlParameters: unknown[] = []; const sqlParameters: unknown[] = []
if (filters && filters.mapId) { if (filters?.mapId) {
sqlWhereClause += " and l.mapId = ?"; sqlWhereClause += ' and l.mapId = ?'
sqlParameters.push(filters.mapId); sqlParameters.push(filters.mapId)
} }
const lotTypes: LotTypeSummary[] = database const lotTypes: LotTypeSummary[] = database
.prepare( .prepare(
"select t.lotTypeId, t.lotType, count(l.lotId) as lotCount" + 'select t.lotTypeId, t.lotType, count(l.lotId) as lotCount' +
" from Lots l" + ' from Lots l' +
" left join LotTypes t on l.lotTypeId = t.lotTypeId" + ' left join LotTypes t on l.lotTypeId = t.lotTypeId' +
sqlWhereClause + sqlWhereClause +
" group by t.lotTypeId, t.lotType, t.orderNumber" + ' group by t.lotTypeId, t.lotType, t.orderNumber' +
" order by t.orderNumber" ' order by t.orderNumber'
) )
.all(sqlParameters); .all(sqlParameters)
database.close(); database.close()
return lotTypes; return lotTypes
} }
export default getLotTypeSummary; export default getLotTypeSummary

View File

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

View File

@ -1,7 +1,7 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { getLotTypeFields } from "./getLotTypeFields.js"; import { getLotTypeFields } from './getLotTypeFields.js';
import { updateRecordOrderNumber } from "./updateRecordOrderNumber.js"; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js';
export function getLotTypes() { export function getLotTypes() {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const lotTypes = database const lotTypes = database
@ -14,7 +14,7 @@ export function getLotTypes() {
for (const lotType of lotTypes) { for (const lotType of lotTypes) {
expectedTypeOrderNumber += 1; expectedTypeOrderNumber += 1;
if (lotType.orderNumber !== expectedTypeOrderNumber) { if (lotType.orderNumber !== expectedTypeOrderNumber) {
updateRecordOrderNumber("LotTypes", lotType.lotTypeId, expectedTypeOrderNumber, database); updateRecordOrderNumber('LotTypes', lotType.lotTypeId, expectedTypeOrderNumber, database);
lotType.orderNumber = expectedTypeOrderNumber; lotType.orderNumber = expectedTypeOrderNumber;
} }
lotType.lotTypeFields = getLotTypeFields(lotType.lotTypeId, database); lotType.lotTypeFields = getLotTypeFields(lotType.lotTypeId, database);

View File

@ -1,14 +1,14 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import { getLotTypeFields } from "./getLotTypeFields.js"; import { getLotTypeFields } from './getLotTypeFields.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
import { updateRecordOrderNumber } from "./updateRecordOrderNumber.js"; import { updateRecordOrderNumber } from './updateRecordOrderNumber.js'
export function getLotTypes(): recordTypes.LotType[] { export function getLotTypes(): recordTypes.LotType[] {
const database = sqlite(databasePath); const database = sqlite(databasePath)
const lotTypes: recordTypes.LotType[] = database const lotTypes: recordTypes.LotType[] = database
.prepare( .prepare(
@ -17,25 +17,33 @@ export function getLotTypes(): recordTypes.LotType[] {
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
order by orderNumber, lotType` order by orderNumber, lotType`
) )
.all(); .all()
let expectedTypeOrderNumber = -1; let expectedTypeOrderNumber = -1
for (const lotType of lotTypes) { for (const lotType of lotTypes) {
expectedTypeOrderNumber += 1; expectedTypeOrderNumber += 1
if (lotType.orderNumber !== expectedTypeOrderNumber) { if (lotType.orderNumber !== expectedTypeOrderNumber) {
updateRecordOrderNumber("LotTypes", lotType.lotTypeId, expectedTypeOrderNumber, database); updateRecordOrderNumber(
'LotTypes',
lotType.lotTypeId,
expectedTypeOrderNumber,
database
)
lotType.orderNumber = expectedTypeOrderNumber; lotType.orderNumber = expectedTypeOrderNumber
} }
lotType.lotTypeFields = getLotTypeFields(lotType.lotTypeId as number, database); lotType.lotTypeFields = getLotTypeFields(
lotType.lotTypeId,
database
)
} }
database.close(); database.close()
return lotTypes; return lotTypes
} }
export default getLotTypes; export default getLotTypes

View File

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

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function getMap(mapId) { export function getMap(mapId) {
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: true readonly: true

View File

@ -1,13 +1,13 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function getMap(mapId: number | string): recordTypes.Map { export function getMap(mapId: number | string): recordTypes.Map {
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: true readonly: true
}); })
const map: recordTypes.Map = database const map: recordTypes.Map = database
.prepare( .prepare(
@ -30,11 +30,11 @@ export function getMap(mapId: number | string): recordTypes.Map {
m.recordUpdate_userName, m.recordUpdate_timeMillis, m.recordUpdate_userName, m.recordUpdate_timeMillis,
m.recordDelete_userName, m.recordDelete_timeMillis` m.recordDelete_userName, m.recordDelete_timeMillis`
) )
.get(mapId); .get(mapId)
database.close(); database.close()
return map; return map
} }
export default getMap; export default getMap

View File

@ -1,3 +1,3 @@
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes';
export declare function getMaps(): recordTypes.Map[]; export declare function getMaps(): recordTypes.Map[];
export default getMaps; export default getMaps;

View File

@ -1,5 +1,5 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function getMaps() { export function getMaps() {
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: true readonly: true

View File

@ -1,13 +1,13 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from '../../types/recordTypes'
export function getMaps(): recordTypes.Map[] { export function getMaps(): recordTypes.Map[] {
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: true readonly: true
}); })
const maps: recordTypes.Map[] = database const maps: recordTypes.Map[] = database
.prepare( .prepare(
@ -24,11 +24,11 @@ export function getMaps(): recordTypes.Map[] {
) l on m.mapId = l.mapId ) l on m.mapId = l.mapId
where m.recordDelete_timeMillis is null order by m.mapName, m.mapId` where m.recordDelete_timeMillis is null order by m.mapName, m.mapId`
) )
.all(); .all()
database.close(); database.close()
return maps; return maps
} }
export default getMaps; export default getMaps

View File

@ -1,11 +1,11 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import * as configFunctions from "../functions.config.js"; import * as configFunctions from '../functions.config.js';
export function getNextLotId(lotId) { export function getNextLotId(lotId) {
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: true readonly: true
}); });
database.function("userFn_lotNameSortName", configFunctions.getProperty("settings.lot.lotNameSortNameFunction")); database.function('userFn_lotNameSortName', configFunctions.getProperty('settings.lot.lotNameSortNameFunction'));
const result = database const result = database
.prepare(`select lotId .prepare(`select lotId
from Lots from Lots

View File

@ -1,21 +1,21 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import * as configFunctions from "../functions.config.js"; import * as configFunctions from '../functions.config.js'
export function getNextLotId(lotId: number | string): number | undefined { export function getNextLotId(lotId: number | string): number | undefined {
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: true readonly: true
}); })
database.function( database.function(
"userFn_lotNameSortName", 'userFn_lotNameSortName',
configFunctions.getProperty("settings.lot.lotNameSortNameFunction") configFunctions.getProperty('settings.lot.lotNameSortNameFunction')
); )
const result: { const result: {
lotId: number; lotId: number
} = database } = database
.prepare( .prepare(
`select lotId `select lotId
@ -25,15 +25,15 @@ export function getNextLotId(lotId: number | string): number | undefined {
order by userFn_lotNameSortName(lotName) order by userFn_lotNameSortName(lotName)
limit 1` limit 1`
) )
.get(lotId); .get(lotId)
database.close(); database.close()
if (result) { if (result) {
return result.lotId; return result.lotId
} }
return undefined; return undefined
} }
export default getNextLotId; export default getNextLotId

View File

@ -1,3 +1,3 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
export declare function getNextWorkOrderNumber(connectedDatabase?: sqlite.Database): string; export declare function getNextWorkOrderNumber(connectedDatabase?: sqlite.Database): string;
export default getNextWorkOrderNumber; export default getNextWorkOrderNumber;

View File

@ -1,20 +1,20 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import * as configFunctions from "../functions.config.js"; import * as configFunctions from '../functions.config.js';
export function getNextWorkOrderNumber(connectedDatabase) { export function getNextWorkOrderNumber(connectedDatabase) {
const database = connectedDatabase || const database = connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); });
const paddingLength = configFunctions.getProperty("settings.workOrders.workOrderNumberLength"); const paddingLength = configFunctions.getProperty('settings.workOrders.workOrderNumberLength');
const currentYearString = new Date().getFullYear().toString(); const currentYearString = new Date().getFullYear().toString();
const regex = new RegExp("^" + currentYearString + "-\\d+$"); const regex = new RegExp('^' + currentYearString + '-\\d+$');
database.function("userFn_matchesWorkOrderNumberSyntax", (workOrderNumber) => { database.function('userFn_matchesWorkOrderNumberSyntax', (workOrderNumber) => {
return regex.test(workOrderNumber) ? 1 : 0; return regex.test(workOrderNumber) ? 1 : 0;
}); });
const workOrderNumberRecord = database const workOrderNumberRecord = database
.prepare("select workOrderNumber from WorkOrders" + .prepare('select workOrderNumber from WorkOrders' +
" where userFn_matchesWorkOrderNumberSyntax(workOrderNumber) = 1" + ' where userFn_matchesWorkOrderNumberSyntax(workOrderNumber) = 1' +
" order by cast(substr(workOrderNumber, instr(workOrderNumber, '-') + 1) as integer) desc") " order by cast(substr(workOrderNumber, instr(workOrderNumber, '-') + 1) as integer) desc")
.get(); .get();
if (!connectedDatabase) { if (!connectedDatabase) {
@ -22,9 +22,11 @@ export function getNextWorkOrderNumber(connectedDatabase) {
} }
let workOrderNumberIndex = 0; let workOrderNumberIndex = 0;
if (workOrderNumberRecord) { if (workOrderNumberRecord) {
workOrderNumberIndex = Number.parseInt(workOrderNumberRecord.workOrderNumber.split("-")[1], 10); workOrderNumberIndex = Number.parseInt(workOrderNumberRecord.workOrderNumber.split('-')[1], 10);
} }
workOrderNumberIndex += 1; workOrderNumberIndex += 1;
return currentYearString + "-" + workOrderNumberIndex.toString().padStart(paddingLength, "0"); return (currentYearString +
'-' +
workOrderNumberIndex.toString().padStart(paddingLength, '0'));
} }
export default getNextWorkOrderNumber; export default getNextWorkOrderNumber;

View File

@ -1,49 +1,60 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import * as configFunctions from "../functions.config.js"; import * as configFunctions from '../functions.config.js'
export function getNextWorkOrderNumber(connectedDatabase?: sqlite.Database): string { export function getNextWorkOrderNumber(
connectedDatabase?: sqlite.Database
): string {
const database = const database =
connectedDatabase || connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); })
const paddingLength = configFunctions.getProperty("settings.workOrders.workOrderNumberLength"); const paddingLength = configFunctions.getProperty(
const currentYearString = new Date().getFullYear().toString(); 'settings.workOrders.workOrderNumberLength'
)
const currentYearString = new Date().getFullYear().toString()
const regex = new RegExp("^" + currentYearString + "-\\d+$"); const regex = new RegExp('^' + currentYearString + '-\\d+$')
database.function("userFn_matchesWorkOrderNumberSyntax", (workOrderNumber: string) => { database.function(
return regex.test(workOrderNumber) ? 1 : 0; 'userFn_matchesWorkOrderNumberSyntax',
}); (workOrderNumber: string) => {
return regex.test(workOrderNumber) ? 1 : 0
}
)
const workOrderNumberRecord = database const workOrderNumberRecord = database
.prepare( .prepare(
"select workOrderNumber from WorkOrders" + 'select workOrderNumber from WorkOrders' +
" where userFn_matchesWorkOrderNumberSyntax(workOrderNumber) = 1" + ' where userFn_matchesWorkOrderNumberSyntax(workOrderNumber) = 1' +
" order by cast(substr(workOrderNumber, instr(workOrderNumber, '-') + 1) as integer) desc" " order by cast(substr(workOrderNumber, instr(workOrderNumber, '-') + 1) as integer) desc"
) )
.get(); .get()
if (!connectedDatabase) { if (!connectedDatabase) {
database.close(); database.close()
} }
let workOrderNumberIndex = 0; let workOrderNumberIndex = 0
if (workOrderNumberRecord) { if (workOrderNumberRecord) {
workOrderNumberIndex = Number.parseInt( workOrderNumberIndex = Number.parseInt(
workOrderNumberRecord.workOrderNumber.split("-")[1], workOrderNumberRecord.workOrderNumber.split('-')[1],
10 10
); )
} }
workOrderNumberIndex += 1; workOrderNumberIndex += 1
return currentYearString + "-" + workOrderNumberIndex.toString().padStart(paddingLength, "0"); return (
currentYearString +
'-' +
workOrderNumberIndex.toString().padStart(paddingLength, '0')
)
} }
export default getNextWorkOrderNumber; export default getNextWorkOrderNumber

View File

@ -215,5 +215,4 @@ span.button.is-static {
box-shadow: 0 -2px 0 0 #f5f5f5; box-shadow: 0 -2px 0 0 #f5f5f5;
} }
} }
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -30,10 +30,10 @@ describe('lot-occupancy-system', () => {
cypressCommand += ' --record'; cypressCommand += ' --record';
} }
const childProcess = exec(cypressCommand); const childProcess = exec(cypressCommand);
childProcess.stdout.on('data', (data) => { childProcess.stdout?.on('data', (data) => {
console.log(data); console.log(data);
}); });
childProcess.stderr.on('data', (data) => { childProcess.stderr?.on('data', (data) => {
console.error(data); console.error(data);
}); });
childProcess.on('exit', (code) => { childProcess.on('exit', (code) => {

View File

@ -48,11 +48,11 @@ describe('lot-occupancy-system', () => {
const childProcess = exec(cypressCommand) const childProcess = exec(cypressCommand)
childProcess.stdout.on('data', (data) => { childProcess.stdout?.on('data', (data) => {
console.log(data) console.log(data)
}) })
childProcess.stderr.on('data', (data) => { childProcess.stderr?.on('data', (data) => {
console.error(data) console.error(data)
}) })

4
test/_globals.d.ts vendored
View File

@ -1,6 +1,6 @@
/// <reference types="qs" /> /// <reference types="qs" />
import type { Request } from "express"; import type { Request } from 'express';
import type { Session } from "express-session"; import type { Session } from 'express-session';
export declare const testView = "*testView"; export declare const testView = "*testView";
export declare const testUpdate = "*testUpdate"; export declare const testUpdate = "*testUpdate";
export declare const testAdmin = "*testAdmin"; export declare const testAdmin = "*testAdmin";

View File

@ -1,9 +1,9 @@
export const testView = "*testView"; export const testView = '*testView';
export const testUpdate = "*testUpdate"; export const testUpdate = '*testUpdate';
export const testAdmin = "*testAdmin"; export const testAdmin = '*testAdmin';
export const portNumber = 7000; export const portNumber = 7000;
export const fakeViewOnlySession = { export const fakeViewOnlySession = {
id: "", id: '',
cookie: undefined, cookie: undefined,
destroy: undefined, destroy: undefined,
regenerate: undefined, regenerate: undefined,
@ -14,7 +14,7 @@ export const fakeViewOnlySession = {
user: undefined user: undefined
}; };
export const fakeAdminSession = { export const fakeAdminSession = {
id: "", id: '',
cookie: undefined, cookie: undefined,
destroy: undefined, destroy: undefined,
regenerate: undefined, regenerate: undefined,

View File

@ -1,15 +1,15 @@
import type { Request } from "express"; import type { Request } from 'express'
import type { Session } from "express-session"; import type { Session } from 'express-session'
export const testView = "*testView"; export const testView = '*testView'
export const testUpdate = "*testUpdate"; export const testUpdate = '*testUpdate'
export const testAdmin = "*testAdmin"; export const testAdmin = '*testAdmin'
export const portNumber = 7000; export const portNumber = 7000
export const fakeViewOnlySession: Session = { export const fakeViewOnlySession: Session = {
id: "", id: '',
cookie: undefined, cookie: undefined,
destroy: undefined, destroy: undefined,
regenerate: undefined, regenerate: undefined,
@ -18,10 +18,10 @@ export const fakeViewOnlySession: Session = {
save: undefined, save: undefined,
touch: undefined, touch: undefined,
user: undefined user: undefined
}; }
export const fakeAdminSession: Session = { export const fakeAdminSession: Session = {
id: "", id: '',
cookie: undefined, cookie: undefined,
destroy: undefined, destroy: undefined,
regenerate: undefined, regenerate: undefined,
@ -30,7 +30,7 @@ export const fakeAdminSession: Session = {
save: undefined, save: undefined,
touch: undefined, touch: undefined,
user: undefined user: undefined
}; }
export const fakeRequest: Request = { export const fakeRequest: Request = {
// eslint-disable-next-line @typescript-eslint/no-empty-function // eslint-disable-next-line @typescript-eslint/no-empty-function
@ -121,12 +121,12 @@ export const fakeRequest: Request = {
url: undefined, url: undefined,
wrap: undefined, wrap: undefined,
xhr: undefined xhr: undefined
}; }
export const fakeViewOnlyRequest = Object.assign({}, fakeRequest, { export const fakeViewOnlyRequest = Object.assign({}, fakeRequest, {
session: fakeViewOnlySession session: fakeViewOnlySession
}); })
export const fakeAdminRequest = Object.assign({}, fakeRequest, { export const fakeAdminRequest = Object.assign({}, fakeRequest, {
session: fakeAdminSession session: fakeAdminSession
}); })