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

@ -12,11 +12,11 @@ export function addWorkOrder(workOrderForm, requestSession) {
} }
const result = database const result = database
.prepare(`insert into WorkOrders ( .prepare(`insert into WorkOrders (
workOrderTypeId, workOrderNumber, workOrderDescription, workOrderTypeId, workOrderNumber, workOrderDescription,
workOrderOpenDate, workOrderCloseDate, workOrderOpenDate, workOrderCloseDate,
recordCreate_userName, recordCreate_timeMillis, recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis) recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?)`) values (?, ?, ?, ?, ?, ?, ?, ?, ?)`)
.run(workOrderForm.workOrderTypeId, workOrderNumber, workOrderForm.workOrderDescription, workOrderForm.workOrderOpenDateString .run(workOrderForm.workOrderTypeId, workOrderNumber, workOrderForm.workOrderDescription, workOrderForm.workOrderOpenDateString
? dateStringToInteger(workOrderForm.workOrderOpenDateString) ? dateStringToInteger(workOrderForm.workOrderOpenDateString)
: dateToInteger(rightNow), workOrderForm.workOrderCloseDateString : dateToInteger(rightNow), workOrderForm.workOrderCloseDateString

View File

@ -38,11 +38,11 @@ export function addWorkOrder(
const result = database const result = database
.prepare( .prepare(
`insert into WorkOrders ( `insert into WorkOrders (
workOrderTypeId, workOrderNumber, workOrderDescription, workOrderTypeId, workOrderNumber, workOrderDescription,
workOrderOpenDate, workOrderCloseDate, workOrderOpenDate, workOrderCloseDate,
recordCreate_userName, recordCreate_timeMillis, recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis) recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?)` values (?, ?, ?, ?, ?, ?, ?, ?, ?)`
) )
.run( .run(
workOrderForm.workOrderTypeId, workOrderForm.workOrderTypeId,

View File

@ -5,22 +5,22 @@ export function addWorkOrderLot(workOrderLotForm, requestSession) {
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
const row = database const row = database
.prepare(`select recordDelete_timeMillis .prepare(`select recordDelete_timeMillis
from WorkOrderLots from WorkOrderLots
where workOrderId = ? where workOrderId = ?
and lotId = ?`) and lotId = ?`)
.get(workOrderLotForm.workOrderId, workOrderLotForm.lotId); .get(workOrderLotForm.workOrderId, workOrderLotForm.lotId);
if (row) { if (row) {
if (row.recordDelete_timeMillis) { if (row.recordDelete_timeMillis) {
database database
.prepare(`update WorkOrderLots .prepare(`update WorkOrderLots
set recordCreate_userName = ?, set recordCreate_userName = ?,
recordCreate_timeMillis = ?, recordCreate_timeMillis = ?,
recordUpdate_userName = ?, recordUpdate_userName = ?,
recordUpdate_timeMillis = ?, recordUpdate_timeMillis = ?,
recordDelete_userName = null, recordDelete_userName = null,
recordDelete_timeMillis = null recordDelete_timeMillis = null
where workOrderId = ? where workOrderId = ?
and lotId = ?`) and lotId = ?`)
.run(requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis, workOrderLotForm.workOrderId, workOrderLotForm.lotId); .run(requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis, workOrderLotForm.workOrderId, workOrderLotForm.lotId);
} }
} }

View File

@ -20,9 +20,9 @@ export function addWorkOrderLot(
const row: { recordDelete_timeMillis?: number } = database const row: { recordDelete_timeMillis?: number } = database
.prepare( .prepare(
`select recordDelete_timeMillis `select recordDelete_timeMillis
from WorkOrderLots from WorkOrderLots
where workOrderId = ? where workOrderId = ?
and lotId = ?` and lotId = ?`
) )
.get(workOrderLotForm.workOrderId, workOrderLotForm.lotId) .get(workOrderLotForm.workOrderId, workOrderLotForm.lotId)
@ -31,14 +31,14 @@ export function addWorkOrderLot(
database database
.prepare( .prepare(
`update WorkOrderLots `update WorkOrderLots
set recordCreate_userName = ?, set recordCreate_userName = ?,
recordCreate_timeMillis = ?, recordCreate_timeMillis = ?,
recordUpdate_userName = ?, recordUpdate_userName = ?,
recordUpdate_timeMillis = ?, recordUpdate_timeMillis = ?,
recordDelete_userName = null, recordDelete_userName = null,
recordDelete_timeMillis = null recordDelete_timeMillis = null
where workOrderId = ? where workOrderId = ?
and lotId = ?` and lotId = ?`
) )
.run( .run(
requestSession.user!.userName, requestSession.user!.userName,

View File

@ -6,10 +6,10 @@ export function closeWorkOrder(workOrderForm, requestSession) {
const rightNow = new Date(); const rightNow = new Date();
const result = database const result = database
.prepare(`update WorkOrders .prepare(`update WorkOrders
set workOrderCloseDate = ?, set workOrderCloseDate = ?,
recordUpdate_userName = ?, recordUpdate_userName = ?,
recordUpdate_timeMillis = ? recordUpdate_timeMillis = ?
where workOrderId = ?`) where workOrderId = ?`)
.run(workOrderForm.workOrderCloseDateString .run(workOrderForm.workOrderCloseDateString
? dateStringToInteger(workOrderForm.workOrderCloseDateString) ? dateStringToInteger(workOrderForm.workOrderCloseDateString)
: dateToInteger(new Date()), requestSession.user.userName, rightNow.getTime(), workOrderForm.workOrderId); : dateToInteger(new Date()), requestSession.user.userName, rightNow.getTime(), workOrderForm.workOrderId);

View File

@ -25,10 +25,10 @@ export function closeWorkOrder(
const result = database const result = database
.prepare( .prepare(
`update WorkOrders `update WorkOrders
set workOrderCloseDate = ?, set workOrderCloseDate = ?,
recordUpdate_userName = ?, recordUpdate_userName = ?,
recordUpdate_timeMillis = ? recordUpdate_timeMillis = ?
where workOrderId = ?` where workOrderId = ?`
) )
.run( .run(
workOrderForm.workOrderCloseDateString workOrderForm.workOrderCloseDateString

View File

@ -6,11 +6,11 @@ export function completeWorkOrderMilestone(milestoneForm, requestSession) {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const result = database const result = database
.prepare(`update WorkOrderMilestones .prepare(`update WorkOrderMilestones
set workOrderMilestoneCompletionDate = ?, set workOrderMilestoneCompletionDate = ?,
workOrderMilestoneCompletionTime = ?, workOrderMilestoneCompletionTime = ?,
recordUpdate_userName = ?, recordUpdate_userName = ?,
recordUpdate_timeMillis = ? recordUpdate_timeMillis = ?
where workOrderMilestoneId = ?`) where workOrderMilestoneId = ?`)
.run(milestoneForm.workOrderMilestoneCompletionDateString .run(milestoneForm.workOrderMilestoneCompletionDateString
? dateStringToInteger(milestoneForm.workOrderMilestoneCompletionDateString) ? dateStringToInteger(milestoneForm.workOrderMilestoneCompletionDateString)
: dateToInteger(rightNow), milestoneForm.workOrderMilestoneCompletionTimeString : dateToInteger(rightNow), milestoneForm.workOrderMilestoneCompletionTimeString

View File

@ -30,11 +30,11 @@ export function completeWorkOrderMilestone(
const result = database const result = database
.prepare( .prepare(
`update WorkOrderMilestones `update WorkOrderMilestones
set workOrderMilestoneCompletionDate = ?, set workOrderMilestoneCompletionDate = ?,
workOrderMilestoneCompletionTime = ?, workOrderMilestoneCompletionTime = ?,
recordUpdate_userName = ?, recordUpdate_userName = ?,
recordUpdate_timeMillis = ? recordUpdate_timeMillis = ?
where workOrderMilestoneId = ?` where workOrderMilestoneId = ?`
) )
.run( .run(
milestoneForm.workOrderMilestoneCompletionDateString milestoneForm.workOrderMilestoneCompletionDateString

View File

@ -5,10 +5,10 @@ export function deleteWorkOrderLotOccupancy(workOrderId, lotOccupancyId, request
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
const result = database const result = database
.prepare(`update WorkOrderLotOccupancies .prepare(`update WorkOrderLotOccupancies
set recordDelete_userName = ?, set recordDelete_userName = ?,
recordDelete_timeMillis = ? recordDelete_timeMillis = ?
where workOrderId = ? where workOrderId = ?
and lotOccupancyId = ?`) and lotOccupancyId = ?`)
.run(requestSession.user.userName, rightNowMillis, workOrderId, lotOccupancyId); .run(requestSession.user.userName, rightNowMillis, workOrderId, lotOccupancyId);
database.close(); database.close();
return result.changes > 0; return result.changes > 0;

View File

@ -16,10 +16,10 @@ export function deleteWorkOrderLotOccupancy(
const result = database const result = database
.prepare( .prepare(
`update WorkOrderLotOccupancies `update WorkOrderLotOccupancies
set recordDelete_userName = ?, set recordDelete_userName = ?,
recordDelete_timeMillis = ? recordDelete_timeMillis = ?
where workOrderId = ? where workOrderId = ?
and lotOccupancyId = ?` and lotOccupancyId = ?`
) )
.run( .run(
requestSession.user!.userName, requestSession.user!.userName,

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,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';
export function getFee(feeId, connectedDatabase) { export function getFee(feeId, connectedDatabase) {
const database = connectedDatabase || const database = connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); });
const fee = database const fee = database
.prepare(`select f.feeId, .prepare(`select f.feeId,
f.feeCategoryId, c.feeCategory, f.feeCategoryId, c.feeCategory,
f.feeName, f.feeDescription, 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 FeeCategories c on f.feeCategoryId = c.feeCategoryId left join FeeCategories c on f.feeCategoryId = c.feeCategoryId
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
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();

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'
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(
`select f.feeId, `select f.feeId,
f.feeCategoryId, c.feeCategory, f.feeCategoryId, c.feeCategory,
f.feeName, f.feeDescription, 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 FeeCategories c on f.feeCategoryId = c.feeCategoryId left join FeeCategories c on f.feeCategoryId = c.feeCategoryId
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
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)
if (options.includeFees) {
let expectedOrderNumber = 0
for (const feeCategory of feeCategories) {
if (
updateOrderNumbers &&
feeCategory.orderNumber !== expectedOrderNumber
) {
updateRecordOrderNumber(
'FeeCategories',
feeCategory.feeCategoryId,
expectedOrderNumber,
database
) )
.all(sqlParameters);
if (options.includeFees) { feeCategory.orderNumber = expectedOrderNumber
let expectedOrderNumber = 0; }
for (const feeCategory of feeCategories) { expectedOrderNumber += 1
if (updateOrderNumbers && feeCategory.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber(
"FeeCategories",
feeCategory.feeCategoryId,
expectedOrderNumber,
database
);
feeCategory.orderNumber = expectedOrderNumber; feeCategory.fees = getFees(feeCategory.feeCategoryId, filters, database)
}
expectedOrderNumber += 1;
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,80 +1,89 @@
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(
feeCategoryId: number, feeCategoryId: number,
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)
if (updateOrderNumbers) {
let expectedOrderNumber = 0
for (const fee of fees) {
if (fee.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber(
'Fees',
fee.feeId,
expectedOrderNumber,
database
) )
.all(sqlParameters); fee.orderNumber = expectedOrderNumber
}
if (updateOrderNumbers) { expectedOrderNumber += 1
let expectedOrderNumber = 0;
for (const fee of fees) {
if (fee.orderNumber !== expectedOrderNumber) {
updateRecordOrderNumber("Fees", fee.feeId, expectedOrderNumber, database);
fee.orderNumber = expectedOrderNumber;
}
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,23 +1,23 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
import { 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,
lotCommentTime, userFn_timeIntegerToString(lotCommentTime) as lotCommentTimeString, lotCommentTime, userFn_timeIntegerToString(lotCommentTime) as lotCommentTimeString,
lotComment, lotComment,
recordCreate_userName, recordUpdate_userName recordCreate_userName, recordUpdate_userName
from LotComments from LotComments
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
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();

View File

@ -1,46 +1,46 @@
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(
`select lotCommentId, `select lotCommentId,
lotCommentDate, userFn_dateIntegerToString(lotCommentDate) as lotCommentDateString, lotCommentDate, userFn_dateIntegerToString(lotCommentDate) as lotCommentDateString,
lotCommentTime, userFn_timeIntegerToString(lotCommentTime) as lotCommentTimeString, lotCommentTime, userFn_timeIntegerToString(lotCommentTime) as lotCommentTimeString,
lotComment, lotComment,
recordCreate_userName, recordUpdate_userName recordCreate_userName, recordUpdate_userName
from LotComments from LotComments
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
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,37 +1,37 @@
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
}); });
const lotFields = database const lotFields = database
.prepare(`select l.lotId, l.lotTypeFieldId, .prepare(`select l.lotId, l.lotTypeFieldId,
l.lotFieldValue, l.lotFieldValue,
f.lotTypeField, f.lotTypeFieldValues, f.lotTypeField, f.lotTypeFieldValues,
f.isRequired, f.pattern, f.minimumLength, f.maximumLength, f.isRequired, f.pattern, f.minimumLength, f.maximumLength,
f.orderNumber, t.orderNumber as lotTypeOrderNumber f.orderNumber, t.orderNumber as lotTypeOrderNumber
from LotFields l from LotFields l
left join LotTypeFields f on l.lotTypeFieldId = f.lotTypeFieldId left join LotTypeFields f on l.lotTypeFieldId = f.lotTypeFieldId
left join LotTypes t on f.lotTypeId = t.lotTypeId left join LotTypes t on f.lotTypeId = t.lotTypeId
where l.recordDelete_timeMillis is null where l.recordDelete_timeMillis is null
and l.lotId = ? and l.lotId = ?
union union
select ? as lotId, f.lotTypeFieldId, select ? as lotId, f.lotTypeFieldId,
'' as lotFieldValue, '' as lotFieldValue,
f.lotTypeField, f.lotTypeFieldValues, f.lotTypeField, f.lotTypeFieldValues,
f.isRequired, f.pattern, f.minimumLength, f.maximumLength, f.isRequired, f.pattern, f.minimumLength, f.maximumLength,
f.orderNumber, t.orderNumber as lotTypeOrderNumber f.orderNumber, t.orderNumber as lotTypeOrderNumber
from LotTypeFields f from LotTypeFields f
left join LotTypes t on f.lotTypeId = t.lotTypeId left join LotTypes t on f.lotTypeId = t.lotTypeId
where f.recordDelete_timeMillis is null where f.recordDelete_timeMillis is null
and ( and (
f.lotTypeId is null f.lotTypeId is null
or f.lotTypeId in (select lotTypeId from Lots where lotId = ?)) or f.lotTypeId in (select lotTypeId from Lots where lotId = ?))
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();

View File

@ -1,55 +1,55 @@
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(
`select l.lotId, l.lotTypeFieldId, `select l.lotId, l.lotTypeFieldId,
l.lotFieldValue, l.lotFieldValue,
f.lotTypeField, f.lotTypeFieldValues, f.lotTypeField, f.lotTypeFieldValues,
f.isRequired, f.pattern, f.minimumLength, f.maximumLength, f.isRequired, f.pattern, f.minimumLength, f.maximumLength,
f.orderNumber, t.orderNumber as lotTypeOrderNumber f.orderNumber, t.orderNumber as lotTypeOrderNumber
from LotFields l from LotFields l
left join LotTypeFields f on l.lotTypeFieldId = f.lotTypeFieldId left join LotTypeFields f on l.lotTypeFieldId = f.lotTypeFieldId
left join LotTypes t on f.lotTypeId = t.lotTypeId left join LotTypes t on f.lotTypeId = t.lotTypeId
where l.recordDelete_timeMillis is null where l.recordDelete_timeMillis is null
and l.lotId = ? and l.lotId = ?
union union
select ? as lotId, f.lotTypeFieldId, select ? as lotId, f.lotTypeFieldId,
'' as lotFieldValue, '' as lotFieldValue,
f.lotTypeField, f.lotTypeFieldValues, f.lotTypeField, f.lotTypeFieldValues,
f.isRequired, f.pattern, f.minimumLength, f.maximumLength, f.isRequired, f.pattern, f.minimumLength, f.maximumLength,
f.orderNumber, t.orderNumber as lotTypeOrderNumber f.orderNumber, t.orderNumber as lotTypeOrderNumber
from LotTypeFields f from LotTypeFields f
left join LotTypes t on f.lotTypeId = t.lotTypeId left join LotTypes t on f.lotTypeId = t.lotTypeId
where f.recordDelete_timeMillis is null where f.recordDelete_timeMillis is null
and ( and (
f.lotTypeId is null f.lotTypeId is null
or f.lotTypeId in (select lotTypeId from Lots where lotId = ?)) or f.lotTypeId in (select lotTypeId from Lots where lotId = ?))
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

@ -15,18 +15,18 @@ export function getLotOccupancy(lotOccupancyId, connectedDatabase) {
database.function('userFn_dateIntegerToString', dateIntegerToString); database.function('userFn_dateIntegerToString', dateIntegerToString);
const lotOccupancy = database const lotOccupancy = database
.prepare(`select o.lotOccupancyId, .prepare(`select o.lotOccupancyId,
o.occupancyTypeId, t.occupancyType, o.occupancyTypeId, t.occupancyType,
o.lotId, l.lotName, l.lotTypeId, o.lotId, l.lotName, l.lotTypeId,
l.mapId, m.mapName, l.mapId, m.mapName,
o.occupancyStartDate, userFn_dateIntegerToString(o.occupancyStartDate) as occupancyStartDateString, o.occupancyStartDate, userFn_dateIntegerToString(o.occupancyStartDate) as occupancyStartDateString,
o.occupancyEndDate, userFn_dateIntegerToString(o.occupancyEndDate) as occupancyEndDateString, o.occupancyEndDate, userFn_dateIntegerToString(o.occupancyEndDate) as occupancyEndDateString,
o.recordUpdate_timeMillis o.recordUpdate_timeMillis
from LotOccupancies o from LotOccupancies o
left join OccupancyTypes t on o.occupancyTypeId = t.occupancyTypeId left join OccupancyTypes t on o.occupancyTypeId = t.occupancyTypeId
left join Lots l on o.lotId = l.lotId left join Lots l on o.lotId = l.lotId
left join Maps m on l.mapId = m.mapId left join Maps m on l.mapId = m.mapId
where o.recordDelete_timeMillis is null where o.recordDelete_timeMillis is null
and o.lotOccupancyId = ?`) and o.lotOccupancyId = ?`)
.get(lotOccupancyId); .get(lotOccupancyId);
if (lotOccupancy) { if (lotOccupancy) {
lotOccupancy.lotOccupancyFields = getLotOccupancyFields(lotOccupancyId, database); lotOccupancy.lotOccupancyFields = getLotOccupancyFields(lotOccupancyId, database);

View File

@ -28,18 +28,18 @@ export function getLotOccupancy(
const lotOccupancy: recordTypes.LotOccupancy | undefined = database const lotOccupancy: recordTypes.LotOccupancy | undefined = database
.prepare( .prepare(
`select o.lotOccupancyId, `select o.lotOccupancyId,
o.occupancyTypeId, t.occupancyType, o.occupancyTypeId, t.occupancyType,
o.lotId, l.lotName, l.lotTypeId, o.lotId, l.lotName, l.lotTypeId,
l.mapId, m.mapName, l.mapId, m.mapName,
o.occupancyStartDate, userFn_dateIntegerToString(o.occupancyStartDate) as occupancyStartDateString, o.occupancyStartDate, userFn_dateIntegerToString(o.occupancyStartDate) as occupancyStartDateString,
o.occupancyEndDate, userFn_dateIntegerToString(o.occupancyEndDate) as occupancyEndDateString, o.occupancyEndDate, userFn_dateIntegerToString(o.occupancyEndDate) as occupancyEndDateString,
o.recordUpdate_timeMillis o.recordUpdate_timeMillis
from LotOccupancies o from LotOccupancies o
left join OccupancyTypes t on o.occupancyTypeId = t.occupancyTypeId left join OccupancyTypes t on o.occupancyTypeId = t.occupancyTypeId
left join Lots l on o.lotId = l.lotId left join Lots l on o.lotId = l.lotId
left join Maps m on l.mapId = m.mapId left join Maps m on l.mapId = m.mapId
where o.recordDelete_timeMillis is null where o.recordDelete_timeMillis is null
and o.lotOccupancyId = ?` and o.lotOccupancyId = ?`
) )
.get(lotOccupancyId) .get(lotOccupancyId)

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,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';
export function getLotOccupancyFees(lotOccupancyId, connectedDatabase) { export function getLotOccupancyFees(lotOccupancyId, connectedDatabase) {
const database = connectedDatabase || const database = connectedDatabase ??
sqlite(databasePath, { sqlite(databasePath, {
readonly: true readonly: true
}); });
const lotOccupancyFees = database const lotOccupancyFees = database
.prepare(`select o.lotOccupancyId, o.feeId, .prepare(`select o.lotOccupancyId, o.feeId,
c.feeCategory, f.feeName, c.feeCategory, f.feeName,
f.includeQuantity, o.feeAmount, o.taxAmount, o.quantity f.includeQuantity, o.feeAmount, o.taxAmount, o.quantity
from LotOccupancyFees o from LotOccupancyFees o
left join Fees f on o.feeId = f.feeId left join Fees f on o.feeId = f.feeId
left join FeeCategories c on f.feeCategoryId = c.feeCategoryId left join FeeCategories c on f.feeCategoryId = c.feeCategoryId
where o.recordDelete_timeMillis is null where o.recordDelete_timeMillis is null
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();

View File

@ -1,38 +1,38 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3'
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import 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(
`select o.lotOccupancyId, o.feeId, `select o.lotOccupancyId, o.feeId,
c.feeCategory, f.feeName, c.feeCategory, f.feeName,
f.includeQuantity, o.feeAmount, o.taxAmount, o.quantity f.includeQuantity, o.feeAmount, o.taxAmount, o.quantity
from LotOccupancyFees o from LotOccupancyFees o
left join Fees f on o.feeId = f.feeId left join Fees f on o.feeId = f.feeId
left join FeeCategories c on f.feeCategoryId = c.feeCategoryId left join FeeCategories c on f.feeCategoryId = c.feeCategoryId
where o.recordDelete_timeMillis is null where o.recordDelete_timeMillis is null
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,34 +1,34 @@
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
}); });
const lotOccupancyFields = database const lotOccupancyFields = database
.prepare(`select o.lotOccupancyId, o.occupancyTypeFieldId, .prepare(`select o.lotOccupancyId, o.occupancyTypeFieldId,
o.lotOccupancyFieldValue, f.occupancyTypeField, f.occupancyTypeFieldValues, o.lotOccupancyFieldValue, f.occupancyTypeField, f.occupancyTypeFieldValues,
f.isRequired, f.pattern, f.minimumLength, f.maximumLength, f.isRequired, f.pattern, f.minimumLength, f.maximumLength,
f.orderNumber, t.orderNumber as occupancyTypeOrderNumber f.orderNumber, t.orderNumber as occupancyTypeOrderNumber
from LotOccupancyFields o from LotOccupancyFields o
left join OccupancyTypeFields f on o.occupancyTypeFieldId = f.occupancyTypeFieldId left join OccupancyTypeFields f on o.occupancyTypeFieldId = f.occupancyTypeFieldId
left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId
where o.recordDelete_timeMillis is null where o.recordDelete_timeMillis is null
and o.lotOccupancyId = ? and o.lotOccupancyId = ?
union union
select ? as lotOccupancyId, f.occupancyTypeFieldId, select ? as lotOccupancyId, f.occupancyTypeFieldId,
'' as lotOccupancyFieldValue, f.occupancyTypeField, f.occupancyTypeFieldValues, '' as lotOccupancyFieldValue, f.occupancyTypeField, f.occupancyTypeFieldValues,
f.isRequired, f.pattern, f.minimumLength, f.maximumLength, f.isRequired, f.pattern, f.minimumLength, f.maximumLength,
f.orderNumber, t.orderNumber as occupancyTypeOrderNumber f.orderNumber, t.orderNumber as occupancyTypeOrderNumber
from OccupancyTypeFields f from OccupancyTypeFields f
left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId
where f.recordDelete_timeMillis is null and ( where f.recordDelete_timeMillis is null and (
f.occupancyTypeId is null f.occupancyTypeId is null
or f.occupancyTypeId in (select occupancyTypeId from LotOccupancies where lotOccupancyId = ?)) or f.occupancyTypeId in (select occupancyTypeId from LotOccupancies where lotOccupancyId = ?))
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();

View File

@ -1,52 +1,52 @@
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(
`select o.lotOccupancyId, o.occupancyTypeFieldId, `select o.lotOccupancyId, o.occupancyTypeFieldId,
o.lotOccupancyFieldValue, f.occupancyTypeField, f.occupancyTypeFieldValues, o.lotOccupancyFieldValue, f.occupancyTypeField, f.occupancyTypeFieldValues,
f.isRequired, f.pattern, f.minimumLength, f.maximumLength, f.isRequired, f.pattern, f.minimumLength, f.maximumLength,
f.orderNumber, t.orderNumber as occupancyTypeOrderNumber f.orderNumber, t.orderNumber as occupancyTypeOrderNumber
from LotOccupancyFields o from LotOccupancyFields o
left join OccupancyTypeFields f on o.occupancyTypeFieldId = f.occupancyTypeFieldId left join OccupancyTypeFields f on o.occupancyTypeFieldId = f.occupancyTypeFieldId
left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId
where o.recordDelete_timeMillis is null where o.recordDelete_timeMillis is null
and o.lotOccupancyId = ? and o.lotOccupancyId = ?
union union
select ? as lotOccupancyId, f.occupancyTypeFieldId, select ? as lotOccupancyId, f.occupancyTypeFieldId,
'' as lotOccupancyFieldValue, f.occupancyTypeField, f.occupancyTypeFieldValues, '' as lotOccupancyFieldValue, f.occupancyTypeField, f.occupancyTypeFieldValues,
f.isRequired, f.pattern, f.minimumLength, f.maximumLength, f.isRequired, f.pattern, f.minimumLength, f.maximumLength,
f.orderNumber, t.orderNumber as occupancyTypeOrderNumber f.orderNumber, t.orderNumber as occupancyTypeOrderNumber
from OccupancyTypeFields f from OccupancyTypeFields f
left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId
where f.recordDelete_timeMillis is null and ( where f.recordDelete_timeMillis is null and (
f.occupancyTypeId is null f.occupancyTypeId is null
or f.occupancyTypeId in (select occupancyTypeId from LotOccupancies where lotOccupancyId = ?)) or f.occupancyTypeId in (select occupancyTypeId from LotOccupancies where lotOccupancyId = ?))
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,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'
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(
`select o.lotOccupancyId, o.lotOccupantIndex, `select o.lotOccupancyId, o.lotOccupantIndex,
o.occupantName, o.occupantName,
o.occupantAddress1, o.occupantAddress2, o.occupantAddress1, o.occupantAddress2,
o.occupantCity, o.occupantProvince, o.occupantPostalCode, o.occupantCity, o.occupantProvince, o.occupantPostalCode,
@ -29,14 +29,14 @@ export function getLotOccupancyOccupants(
where o.recordDelete_timeMillis is null where o.recordDelete_timeMillis is null
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,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';
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,
transactionTime, userFn_timeIntegerToString(transactionTime) as transactionTimeString, transactionTime, userFn_timeIntegerToString(transactionTime) as transactionTimeString,
transactionAmount, externalReceiptNumber, transactionNote transactionAmount, externalReceiptNumber, transactionNote
from LotOccupancyTransactions from LotOccupancyTransactions
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
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();

View File

@ -1,45 +1,46 @@
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[] =
.prepare( database
`select lotOccupancyId, transactionIndex, .prepare(
transactionDate, userFn_dateIntegerToString(transactionDate) as transactionDateString, `select lotOccupancyId, transactionIndex,
transactionTime, userFn_timeIntegerToString(transactionTime) as transactionTimeString, transactionDate, userFn_dateIntegerToString(transactionDate) as transactionDateString,
transactionAmount, externalReceiptNumber, transactionNote transactionTime, userFn_timeIntegerToString(transactionTime) as transactionTimeString,
from LotOccupancyTransactions transactionAmount, externalReceiptNumber, transactionNote
where recordDelete_timeMillis is null from LotOccupancyTransactions
and lotOccupancyId = ? where recordDelete_timeMillis is null
order by transactionDate, transactionTime, transactionIndex` and lotOccupancyId = ?
) 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,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 { 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
.prepare(`select lotOccupantTypeId, lotOccupantType, fontAwesomeIconClass, orderNumber .prepare(`select lotOccupantTypeId, lotOccupantType, fontAwesomeIconClass, orderNumber
from LotOccupantTypes from LotOccupantTypes
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("LotOccupantTypes", lotOccupantType.lotOccupantTypeId, expectedOrderNumber, database); updateRecordOrderNumber('LotOccupantTypes', lotOccupantType.lotOccupantTypeId, expectedOrderNumber, database);
lotOccupantType.orderNumber = expectedOrderNumber; lotOccupantType.orderNumber = expectedOrderNumber;
} }
expectedOrderNumber += 1; expectedOrderNumber += 1;

View File

@ -1,43 +1,43 @@
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(
`select lotOccupantTypeId, lotOccupantType, fontAwesomeIconClass, orderNumber `select lotOccupantTypeId, lotOccupantType, fontAwesomeIconClass, orderNumber
from LotOccupantTypes from LotOccupantTypes
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;
} }
database.close(); expectedOrderNumber += 1
}
return lotOccupantTypes; database.close()
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,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 { 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
.prepare(`select lotStatusId, lotStatus, orderNumber .prepare(`select lotStatusId, lotStatus, orderNumber
from LotStatuses from LotStatuses
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('LotStatuses', lotStatus.lotStatusId, expectedOrderNumber, database);
lotStatus.orderNumber = expectedOrderNumber; lotStatus.orderNumber = expectedOrderNumber;
} }
expectedOrderNumber += 1; expectedOrderNumber += 1;

View File

@ -1,37 +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'
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(
`select lotStatusId, lotStatus, orderNumber `select lotStatusId, lotStatus, orderNumber
from LotStatuses from LotStatuses
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,
expectedOrderNumber += 1; database
)
lotStatus.orderNumber = expectedOrderNumber
} }
database.close(); expectedOrderNumber += 1
}
return lotStatuses; database.close()
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,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 { 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,
isRequired, pattern, minimumLength, maximumLength, orderNumber isRequired, pattern, minimumLength, maximumLength, orderNumber
from LotTypeFields from LotTypeFields
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
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("LotTypeFields", lotTypeField.lotTypeFieldId, expectedOrderNumber, database); updateRecordOrderNumber('LotTypeFields', lotTypeField.lotTypeFieldId, expectedOrderNumber, database);
lotTypeField.orderNumber = expectedOrderNumber; lotTypeField.orderNumber = expectedOrderNumber;
} }
expectedOrderNumber += 1; expectedOrderNumber += 1;

View File

@ -1,50 +1,50 @@
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(
`select lotTypeFieldId, `select lotTypeFieldId,
lotTypeField, lotTypeFieldValues, lotTypeField, lotTypeFieldValues,
isRequired, pattern, minimumLength, maximumLength, orderNumber isRequired, pattern, minimumLength, maximumLength, orderNumber
from LotTypeFields from LotTypeFields
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
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;
} }
if (!connectedDatabase) { expectedOrderNumber += 1
database.close(); }
}
return lotTypeFields; if (!connectedDatabase) {
database.close()
}
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,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 { 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
.prepare(`select lotTypeId, lotType, orderNumber .prepare(`select lotTypeId, lotType, orderNumber
from LotTypes from LotTypes
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, database); lotType.lotTypeFields = getLotTypeFields(lotType.lotTypeId, database);

View File

@ -1,41 +1,49 @@
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(
`select lotTypeId, lotType, orderNumber `select lotTypeId, lotType, orderNumber
from LotTypes from LotTypes
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);
} }
database.close(); lotType.lotTypeFields = getLotTypeFields(
lotType.lotTypeId,
database
)
}
return lotTypes; database.close()
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,28 +1,28 @@
import sqlite from "better-sqlite3"; import sqlite from 'better-sqlite3';
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function getMap(mapId) { export function getMap(mapId) {
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: true readonly: true
}); });
const map = database const map = database
.prepare(`select m.mapId, m.mapName, m.mapDescription, .prepare(`select 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,
m.mapPhoneNumber, m.mapPhoneNumber,
m.recordCreate_userName, m.recordCreate_timeMillis, m.recordCreate_userName, m.recordCreate_timeMillis,
m.recordUpdate_userName, m.recordUpdate_timeMillis, m.recordUpdate_userName, m.recordUpdate_timeMillis,
m.recordDelete_userName, m.recordDelete_timeMillis, m.recordDelete_userName, m.recordDelete_timeMillis,
count(l.lotId) as lotCount count(l.lotId) as lotCount
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 = ?
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,
m.mapPhoneNumber, m.mapPhoneNumber,
m.recordCreate_userName, m.recordCreate_timeMillis, m.recordCreate_userName, m.recordCreate_timeMillis,
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;

View File

@ -1,40 +1,40 @@
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(
`select m.mapId, m.mapName, m.mapDescription, `select 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,
m.mapPhoneNumber, m.mapPhoneNumber,
m.recordCreate_userName, m.recordCreate_timeMillis, m.recordCreate_userName, m.recordCreate_timeMillis,
m.recordUpdate_userName, m.recordUpdate_timeMillis, m.recordUpdate_userName, m.recordUpdate_timeMillis,
m.recordDelete_userName, m.recordDelete_timeMillis, m.recordDelete_userName, m.recordDelete_timeMillis,
count(l.lotId) as lotCount count(l.lotId) as lotCount
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 = ?
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,
m.mapPhoneNumber, m.mapPhoneNumber,
m.recordCreate_userName, m.recordCreate_timeMillis, m.recordCreate_userName, m.recordCreate_timeMillis,
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,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 getMaps() { export function getMaps() {
const database = sqlite(databasePath, { const database = sqlite(databasePath, {
readonly: true readonly: true
}); });
const maps = database const maps = database
.prepare(`select m.mapId, m.mapName, m.mapDescription, .prepare(`select 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,
m.mapPhoneNumber, m.mapPhoneNumber,
ifnull(l.lotCount,0) as lotCount ifnull(l.lotCount,0) as lotCount
from Maps m from Maps m
left join ( left join (
select mapId, count(lotId) as lotCount select mapId, count(lotId) as lotCount
from Lots from Lots
where recordDelete_timeMillis is null group by mapId where recordDelete_timeMillis is null group by mapId
) 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;

View File

@ -1,34 +1,34 @@
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(
`select m.mapId, m.mapName, m.mapDescription, `select 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,
m.mapPhoneNumber, m.mapPhoneNumber,
ifnull(l.lotCount,0) as lotCount ifnull(l.lotCount,0) as lotCount
from Maps m from Maps m
left join ( left join (
select mapId, count(lotId) as lotCount select mapId, count(lotId) as lotCount
from Lots from Lots
where recordDelete_timeMillis is null group by mapId where recordDelete_timeMillis is null group by mapId
) 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,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 * 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
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and userFn_lotNameSortName(lotName) > (select userFn_lotNameSortName(lotName) from Lots where lotId = ?) and userFn_lotNameSortName(lotName) > (select userFn_lotNameSortName(lotName) from Lots where lotId = ?)
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) {

View File

@ -1,39 +1,39 @@
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
from Lots from Lots
where recordDelete_timeMillis is null where recordDelete_timeMillis is null
and userFn_lotNameSortName(lotName) > (select userFn_lotNameSortName(lotName) from Lots where lotId = ?) and userFn_lotNameSortName(lotName) > (select userFn_lotNameSortName(lotName) from Lots where lotId = ?)
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(
const database = connectedDatabase?: sqlite.Database
connectedDatabase || ): string {
sqlite(databasePath, { const database =
readonly: true connectedDatabase ??
}); sqlite(databasePath, {
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
.prepare(
"select workOrderNumber from WorkOrders" +
" where userFn_matchesWorkOrderNumberSyntax(workOrderNumber) = 1" +
" order by cast(substr(workOrderNumber, instr(workOrderNumber, '-') + 1) as integer) desc"
)
.get();
if (!connectedDatabase) {
database.close();
} }
)
let workOrderNumberIndex = 0; const workOrderNumberRecord = database
.prepare(
'select workOrderNumber from WorkOrders' +
' where userFn_matchesWorkOrderNumberSyntax(workOrderNumber) = 1' +
" order by cast(substr(workOrderNumber, instr(workOrderNumber, '-') + 1) as integer) desc"
)
.get()
if (workOrderNumberRecord) { if (!connectedDatabase) {
workOrderNumberIndex = Number.parseInt( database.close()
workOrderNumberRecord.workOrderNumber.split("-")[1], }
10
);
}
workOrderNumberIndex += 1; let workOrderNumberIndex = 0
return currentYearString + "-" + workOrderNumberIndex.toString().padStart(paddingLength, "0"); if (workOrderNumberRecord) {
workOrderNumberIndex = Number.parseInt(
workOrderNumberRecord.workOrderNumber.split('-')[1],
10
)
}
workOrderNumberIndex += 1
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,132 +1,132 @@
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,
reload: undefined, reload: undefined,
resetMaxAge: undefined, resetMaxAge: undefined,
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,
reload: undefined, reload: undefined,
resetMaxAge: undefined, resetMaxAge: undefined,
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
async *[Symbol.asyncIterator]() {}, async *[Symbol.asyncIterator]() {},
_destroy: undefined, _destroy: undefined,
_read: undefined, _read: undefined,
aborted: undefined, aborted: undefined,
accepted: undefined, accepted: undefined,
accepts: undefined, accepts: undefined,
acceptsCharsets: undefined, acceptsCharsets: undefined,
acceptsEncodings: undefined, acceptsEncodings: undefined,
acceptsLanguages: undefined, acceptsLanguages: undefined,
addListener: undefined, addListener: undefined,
app: undefined, app: undefined,
baseUrl: undefined, baseUrl: undefined,
body: undefined, body: undefined,
cookies: undefined, cookies: undefined,
complete: undefined, complete: undefined,
connection: undefined, connection: undefined,
csrfToken: undefined, csrfToken: undefined,
destroy: undefined, destroy: undefined,
destroyed: undefined, destroyed: undefined,
emit: undefined, emit: undefined,
eventNames: undefined, eventNames: undefined,
fresh: undefined, fresh: undefined,
get: undefined, get: undefined,
getMaxListeners: undefined, getMaxListeners: undefined,
header: undefined, header: undefined,
headers: undefined, headers: undefined,
host: undefined, host: undefined,
hostname: undefined, hostname: undefined,
httpVersion: undefined, httpVersion: undefined,
httpVersionMajor: undefined, httpVersionMajor: undefined,
httpVersionMinor: undefined, httpVersionMinor: undefined,
ip: undefined, ip: undefined,
ips: undefined, ips: undefined,
is: undefined, is: undefined,
isPaused: undefined, isPaused: undefined,
listenerCount: undefined, listenerCount: undefined,
listeners: undefined, listeners: undefined,
method: undefined, method: undefined,
off: undefined, off: undefined,
on: undefined, on: undefined,
once: undefined, once: undefined,
originalUrl: undefined, originalUrl: undefined,
param: undefined, param: undefined,
params: undefined, params: undefined,
path: undefined, path: undefined,
pause: undefined, pause: undefined,
pipe: undefined, pipe: undefined,
prependListener: undefined, prependListener: undefined,
prependOnceListener: undefined, prependOnceListener: undefined,
protocol: undefined, protocol: undefined,
push: undefined, push: undefined,
query: undefined, query: undefined,
range: undefined, range: undefined,
rawHeaders: undefined, rawHeaders: undefined,
rawListeners: undefined, rawListeners: undefined,
rawTrailers: undefined, rawTrailers: undefined,
read: undefined, read: undefined,
readable: undefined, readable: undefined,
readableAborted: undefined, readableAborted: undefined,
readableDidRead: undefined, readableDidRead: undefined,
readableEncoding: undefined, readableEncoding: undefined,
readableEnded: undefined, readableEnded: undefined,
readableFlowing: undefined, readableFlowing: undefined,
readableLength: undefined, readableLength: undefined,
readableHighWaterMark: undefined, readableHighWaterMark: undefined,
readableObjectMode: undefined, readableObjectMode: undefined,
removeAllListeners: undefined, removeAllListeners: undefined,
removeListener: undefined, removeListener: undefined,
resume: undefined, resume: undefined,
route: undefined, route: undefined,
secure: undefined, secure: undefined,
session: undefined, session: undefined,
sessionID: undefined, sessionID: undefined,
sessionStore: undefined, sessionStore: undefined,
setEncoding: undefined, setEncoding: undefined,
setMaxListeners: undefined, setMaxListeners: undefined,
setTimeout: undefined, setTimeout: undefined,
signedCookies: undefined, signedCookies: undefined,
socket: undefined, socket: undefined,
stale: undefined, stale: undefined,
subdomains: undefined, subdomains: undefined,
trailers: undefined, trailers: undefined,
unpipe: undefined, unpipe: undefined,
unshift: undefined, unshift: undefined,
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
}); })