linting
parent
10fe9a612e
commit
c937521807
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
@ -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) => {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
238
test/_globals.ts
238
test/_globals.ts
|
|
@ -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
|
||||||
});
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue