From 24067317c9352f0b9791cfb6282956bcb15bf97a Mon Sep 17 00:00:00 2001
From: Dan Gowans
Date: Wed, 11 Jan 2023 15:07:46 -0500
Subject: [PATCH] linting
---
.eslintrc.json | 5 +
.prettierrc.json | 3 +-
app.js | 18 +-
app.ts | 61 +-
bin/www.js | 56 +-
bin/www.ts | 149 ++--
cypress/e2e/01-admin/feeManagement.cy.js | 50 +-
cypress/e2e/01-admin/feeManagement.cy.ts | 125 ++--
cypress/e2e/02-update/lotOccupancies.cy.js | 2 +-
cypress/e2e/02-update/lotOccupancies.cy.ts | 8 +-
cypress/e2e/02-update/maps.cy.js | 78 ++-
cypress/e2e/02-update/maps.cy.ts | 171 +++--
data/config.cemetery.ssm.js | 47 +-
data/config.cemetery.ssm.ts | 58 +-
handlers/admin-post/doAddFee.d.ts | 2 +-
handlers/admin-post/doAddFee.js | 6 +-
handlers/admin-post/doAddFee.ts | 36 +-
.../admin-post/doUpdateWorkOrderType.d.ts | 2 +-
handlers/admin-post/doUpdateWorkOrderType.js | 8 +-
handlers/admin-post/doUpdateWorkOrderType.ts | 34 +-
handlers/api-get/milestoneICS.d.ts | 2 +-
handlers/api-get/milestoneICS.js | 189 +++---
handlers/api-get/milestoneICS.ts | 640 +++++++++---------
handlers/lotOccupancies-get/edit.d.ts | 2 +-
handlers/lotOccupancies-get/edit.js | 16 +-
handlers/lotOccupancies-get/edit.ts | 82 +--
handlers/lotOccupancies-get/view.d.ts | 2 +-
handlers/lotOccupancies-get/view.js | 15 +-
handlers/lotOccupancies-get/view.ts | 41 +-
handlers/lotOccupancies-post/doGetFees.d.ts | 2 +-
handlers/lotOccupancies-post/doGetFees.js | 4 +-
handlers/lotOccupancies-post/doGetFees.ts | 38 +-
.../doGetOccupancyTypeFields.d.ts | 2 +-
.../doGetOccupancyTypeFields.js | 6 +-
.../doGetOccupancyTypeFields.ts | 27 +-
handlers/lots-post/doGetLotTypeFields.d.ts | 2 +-
handlers/lots-post/doGetLotTypeFields.js | 4 +-
handlers/lots-post/doGetLotTypeFields.ts | 18 +-
handlers/reports-get/reportName.d.ts | 2 +-
handlers/reports-get/reportName.js | 10 +-
handlers/reports-get/reportName.ts | 53 +-
handlers/workOrders-get/edit.d.ts | 2 +-
handlers/workOrders-get/edit.js | 22 +-
handlers/workOrders-get/edit.ts | 80 +--
helpers/functions.api.d.ts | 4 +-
helpers/functions.api.js | 16 +-
helpers/functions.api.ts | 122 ++--
helpers/functions.authentication.js | 2 +-
helpers/functions.cache.d.ts | 24 +-
helpers/functions.cache.js | 50 +-
helpers/functions.cache.ts | 393 ++++++-----
helpers/functions.icons.js | 6 +-
helpers/functions.icons.ts | 28 +-
helpers/functions.sqlFilters.d.ts | 21 +-
helpers/functions.sqlFilters.js | 57 +-
helpers/functions.sqlFilters.ts | 171 ++---
helpers/functions.user.js | 9 +-
helpers/lotOccupancyDB/addFee.d.ts | 6 +-
helpers/lotOccupancyDB/addFee.js | 26 +-
helpers/lotOccupancyDB/addFee.ts | 115 ++--
helpers/lotOccupancyDB/addLot.d.ts | 2 +-
helpers/lotOccupancyDB/addLot.js | 14 +-
helpers/lotOccupancyDB/addLot.ts | 105 +--
helpers/lotOccupancyDB/addLotComment.d.ts | 2 +-
helpers/lotOccupancyDB/addLotComment.js | 6 +-
helpers/lotOccupancyDB/addLotComment.ts | 54 +-
helpers/lotOccupancyDB/addLotOccupancy.d.ts | 4 +-
helpers/lotOccupancyDB/addLotOccupancy.js | 30 +-
helpers/lotOccupancyDB/addLotOccupancy.ts | 205 +++---
.../addLotOccupancyComment.d.ts | 2 +-
.../lotOccupancyDB/addLotOccupancyComment.js | 8 +-
.../lotOccupancyDB/addLotOccupancyComment.ts | 88 +--
.../lotOccupancyDB/addLotOccupancyFee.d.ts | 2 +-
helpers/lotOccupancyDB/addLotOccupancyFee.js | 37 +-
helpers/lotOccupancyDB/addLotOccupancyFee.ts | 229 +++----
.../addLotOccupancyOccupant.d.ts | 4 +-
.../lotOccupancyDB/addLotOccupancyOccupant.js | 8 +-
.../lotOccupancyDB/addLotOccupancyOccupant.ts | 110 +--
.../addLotOccupancyTransaction.d.ts | 2 +-
.../addLotOccupancyTransaction.js | 6 +-
.../addLotOccupancyTransaction.ts | 106 +--
.../lotOccupancyDB/addLotOccupantType.d.ts | 2 +-
helpers/lotOccupancyDB/addLotOccupantType.js | 10 +-
helpers/lotOccupancyDB/addLotOccupantType.ts | 56 +-
helpers/lotOccupancyDB/addLotTypeField.d.ts | 2 +-
helpers/lotOccupancyDB/addLotTypeField.js | 10 +-
helpers/lotOccupancyDB/addLotTypeField.ts | 76 +--
helpers/lotOccupancyDB/addMap.d.ts | 2 +-
helpers/lotOccupancyDB/addMap.js | 22 +-
helpers/lotOccupancyDB/addMap.ts | 101 +--
helpers/lotOccupancyDB/getLotOccupancy.d.ts | 6 +-
helpers/lotOccupancyDB/getLotOccupancy.js | 22 +-
helpers/lotOccupancyDB/getLotOccupancy.ts | 110 +--
package-lock.json | 215 +++++-
package.json | 231 +++----
temp/so.exportMaps.js | 4 +-
test/1_serverCypress.js | 2 +-
test/_globals.js | 14 +-
tsconfig.json | 5 +-
types/recordTypes.d.ts | 6 +-
types/recordTypes.ts | 430 ++++++------
101 files changed, 3005 insertions(+), 2575 deletions(-)
diff --git a/.eslintrc.json b/.eslintrc.json
index e3642ff4..41094747 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -12,6 +12,7 @@
"plugins": ["@typescript-eslint", "unicorn"],
"extends": [
"eslint:recommended",
+ "standard-with-typescript",
"plugin:import/recommended",
"plugin:import/typescript",
"plugin:node/recommended",
@@ -21,6 +22,10 @@
],
"rules": {
"@typescript-eslint/no-extra-semi": "off",
+ "@typescript-eslint/no-non-null-assertion": "off",
+ "@typescript-eslint/restrict-plus-operands": "warn",
+ "@typescript-eslint/space-before-function-paren": "off",
+ "@typescript-eslint/strict-boolean-expressions": "warn",
"node/no-missing-import": "off",
"node/no-unpublished-import": "off",
"unicorn/consistent-function-scoping": "warn",
diff --git a/.prettierrc.json b/.prettierrc.json
index c50384fb..512accbe 100644
--- a/.prettierrc.json
+++ b/.prettierrc.json
@@ -2,5 +2,6 @@
"trailingComma": "none",
"tabWidth": 2,
"semi": false,
- "singleQuote": true
+ "singleQuote": true,
+ "bracketSpacing": true
}
diff --git a/app.js b/app.js
index 6f829c64..a4d8ae48 100644
--- a/app.js
+++ b/app.js
@@ -30,13 +30,13 @@ import { getSafeRedirectURL } from './helpers/functions.authentication.js';
import debug from 'debug';
const debugApp = debug('lot-occupancy-system:app');
databaseInitializer.initializeDatabase();
-const __dirname = '.';
+const _dirname = '.';
export const app = express();
app.disable('X-Powered-By');
if (!configFunctions.getProperty('reverseProxy.disableEtag')) {
app.set('etag', false);
}
-app.set('views', path.join(__dirname, 'views'));
+app.set('views', path.join(_dirname, 'views'));
app.set('view engine', 'ejs');
if (!configFunctions.getProperty('reverseProxy.disableCompression')) {
app.use(compression());
@@ -87,17 +87,20 @@ app.use(session({
}
}));
app.use((request, response, next) => {
- if (request.cookies[sessionCookieName] && !request.session.user) {
+ if (Object.hasOwn(request.cookies, sessionCookieName) &&
+ !Object.hasOwn(request.session, 'user')) {
response.clearCookie(sessionCookieName);
}
next();
});
const sessionChecker = (request, response, next) => {
- if (request.session.user && request.cookies[sessionCookieName]) {
- return next();
+ if (Object.hasOwn(request.session, 'user') &&
+ Object.hasOwn(request.cookies, sessionCookieName)) {
+ next();
+ return;
}
const redirectUrl = getSafeRedirectURL(request.originalUrl);
- return response.redirect(`${urlPrefix}/login?redirect=${encodeURIComponent(redirectUrl)}`);
+ response.redirect(`${urlPrefix}/login?redirect=${encodeURIComponent(redirectUrl)}`);
};
app.use((request, response, next) => {
response.locals.buildNumber = version;
@@ -128,7 +131,8 @@ app.all(urlPrefix + '/keepAlive', (_request, response) => {
});
app.use(urlPrefix + '/login', routerLogin);
app.get(urlPrefix + '/logout', (request, response) => {
- if (request.session.user && request.cookies[sessionCookieName]) {
+ if (Object.hasOwn(request.session, 'user') &&
+ Object.hasOwn(request.cookies, sessionCookieName)) {
request.session.destroy(() => {
response.clearCookie(sessionCookieName);
response.redirect(urlPrefix + '/');
diff --git a/app.ts b/app.ts
index a90bdc6c..6c4288af 100644
--- a/app.ts
+++ b/app.ts
@@ -48,7 +48,7 @@ databaseInitializer.initializeDatabase()
* INITIALIZE APP
*/
-const __dirname = '.'
+const _dirname = '.'
export const app = express()
@@ -59,7 +59,7 @@ if (!configFunctions.getProperty('reverseProxy.disableEtag')) {
}
// View engine setup
-app.set('views', path.join(__dirname, 'views'))
+app.set('views', path.join(_dirname, 'views'))
app.set('view engine', 'ejs')
if (!configFunctions.getProperty('reverseProxy.disableCompression')) {
@@ -124,17 +124,27 @@ app.use(
express.static(path.join('node_modules', '@cityssm', 'bulma-webapp-js'))
)
-app.use(urlPrefix + '/lib/fa', express.static(path.join('node_modules', '@fortawesome', 'fontawesome-free')))
+app.use(
+ urlPrefix + '/lib/fa',
+ express.static(path.join('node_modules', '@fortawesome', 'fontawesome-free'))
+)
-app.use(urlPrefix + '/lib/leaflet', express.static(path.join('node_modules', 'leaflet', 'dist')))
+app.use(
+ urlPrefix + '/lib/leaflet',
+ express.static(path.join('node_modules', 'leaflet', 'dist'))
+)
-app.use(urlPrefix + '/lib/randomcolor', express.static(path.join('node_modules', 'randomcolor')))
+app.use(
+ urlPrefix + '/lib/randomcolor',
+ express.static(path.join('node_modules', 'randomcolor'))
+)
/*
* SESSION MANAGEMENT
*/
-const sessionCookieName: string = configFunctions.getProperty('session.cookieName')
+const sessionCookieName: string =
+ configFunctions.getProperty('session.cookieName')
const FileStoreSession = FileStore(session)
@@ -160,7 +170,10 @@ app.use(
// Clear cookie if no corresponding session
app.use((request, response, next) => {
- if (request.cookies[sessionCookieName] && !request.session.user) {
+ if (
+ Object.hasOwn(request.cookies, sessionCookieName) &&
+ !Object.hasOwn(request.session, 'user')
+ ) {
response.clearCookie(sessionCookieName)
}
@@ -168,14 +181,24 @@ app.use((request, response, next) => {
})
// Redirect logged in users
-const sessionChecker = (request: express.Request, response: express.Response, next: express.NextFunction) => {
- if (request.session.user && request.cookies[sessionCookieName]) {
- return next()
+const sessionChecker = (
+ request: express.Request,
+ response: express.Response,
+ next: express.NextFunction
+): void => {
+ if (
+ Object.hasOwn(request.session, 'user') &&
+ Object.hasOwn(request.cookies, sessionCookieName)
+ ) {
+ next()
+ return
}
const redirectUrl = getSafeRedirectURL(request.originalUrl)
- return response.redirect(`${urlPrefix}/login?redirect=${encodeURIComponent(redirectUrl)}`)
+ response.redirect(
+ `${urlPrefix}/login?redirect=${encodeURIComponent(redirectUrl)}`
+ )
}
/*
@@ -196,7 +219,9 @@ app.use((request, response, next) => {
response.locals.stringFunctions = stringFns
response.locals.htmlFunctions = htmlFns
- response.locals.urlPrefix = configFunctions.getProperty('reverseProxy.urlPrefix')
+ response.locals.urlPrefix = configFunctions.getProperty(
+ 'reverseProxy.urlPrefix'
+ )
next()
})
@@ -216,7 +241,12 @@ app.use(urlPrefix + '/lotOccupancies', sessionChecker, routerLotOccupancies)
app.use(urlPrefix + '/workOrders', sessionChecker, routerWorkOrders)
app.use(urlPrefix + '/reports', sessionChecker, routerReports)
-app.use(urlPrefix + '/admin', sessionChecker, permissionHandlers.adminGetHandler, routerAdmin)
+app.use(
+ urlPrefix + '/admin',
+ sessionChecker,
+ permissionHandlers.adminGetHandler,
+ routerAdmin
+)
app.all(urlPrefix + '/keepAlive', (_request, response) => {
response.json(true)
@@ -225,7 +255,10 @@ app.all(urlPrefix + '/keepAlive', (_request, response) => {
app.use(urlPrefix + '/login', routerLogin)
app.get(urlPrefix + '/logout', (request, response) => {
- if (request.session.user && request.cookies[sessionCookieName]) {
+ if (
+ Object.hasOwn(request.session, 'user') &&
+ Object.hasOwn(request.cookies, sessionCookieName)
+ ) {
request.session.destroy(() => {
response.clearCookie(sessionCookieName)
response.redirect(urlPrefix + '/')
diff --git a/bin/www.js b/bin/www.js
index 2ff7b5d0..7a84e091 100644
--- a/bin/www.js
+++ b/bin/www.js
@@ -1,21 +1,21 @@
-import { app } from "../app.js";
-import http from "node:http";
-import * as configFunctions from "../helpers/functions.config.js";
-import exitHook from "exit-hook";
-import ntfyPublish from "@cityssm/ntfy-publish";
-import Debug from "debug";
-const debug = Debug("lot-occupancy-system:www");
+import { app } from '../app.js';
+import http from 'node:http';
+import * as configFunctions from '../helpers/functions.config.js';
+import exitHook from 'exit-hook';
+import ntfyPublish from '@cityssm/ntfy-publish';
+import Debug from 'debug';
+const debug = Debug('lot-occupancy-system:www');
function onError(error) {
- if (error.syscall !== "listen") {
+ if (error.syscall !== 'listen') {
throw error;
}
switch (error.code) {
- case "EACCES": {
- debug("Requires elevated privileges");
+ case 'EACCES': {
+ debug('Requires elevated privileges');
process.exit(1);
}
- case "EADDRINUSE": {
- debug("Port is already in use.");
+ case 'EADDRINUSE': {
+ debug('Port is already in use.');
process.exit(1);
}
default: {
@@ -26,21 +26,21 @@ function onError(error) {
function onListening(server) {
const addr = server.address();
if (addr) {
- const bind = typeof addr === "string" ? "pipe " + addr : "port " + addr.port.toString();
- debug("Listening on " + bind);
+ const bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port.toString();
+ debug('Listening on ' + bind);
}
}
-const ntfyStartupConfig = configFunctions.getProperty("application.ntfyStartup");
-const httpPort = configFunctions.getProperty("application.httpPort");
+const ntfyStartupConfig = configFunctions.getProperty('application.ntfyStartup');
+const httpPort = configFunctions.getProperty('application.httpPort');
const httpServer = http.createServer(app);
httpServer.listen(httpPort);
-httpServer.on("error", onError);
-httpServer.on("listening", () => {
+httpServer.on('error', onError);
+httpServer.on('listening', () => {
onListening(httpServer);
});
-debug("HTTP listening on " + httpPort.toString());
+debug('HTTP listening on ' + httpPort.toString());
exitHook(() => {
- debug("Closing HTTP");
+ debug('Closing HTTP');
httpServer.close();
});
if (ntfyStartupConfig) {
@@ -48,15 +48,15 @@ if (ntfyStartupConfig) {
const server = ntfyStartupConfig.server;
const ntfyStartupMessage = {
topic,
- title: configFunctions.getProperty("application.applicationName"),
- message: "Application Started",
- tags: ["arrow_up"]
+ title: configFunctions.getProperty('application.applicationName'),
+ message: 'Application Started',
+ tags: ['arrow_up']
};
const ntfyShutdownMessage = {
topic,
- title: configFunctions.getProperty("application.applicationName"),
- message: "Application Shut Down",
- tags: ["arrow_down"]
+ title: configFunctions.getProperty('application.applicationName'),
+ message: 'Application Shut Down',
+ tags: ['arrow_down']
};
if (server) {
ntfyStartupMessage.server = server;
@@ -64,7 +64,7 @@ if (ntfyStartupConfig) {
}
await ntfyPublish(ntfyStartupMessage);
exitHook(() => {
- debug("Sending ntfy notification");
- ntfyPublish(ntfyShutdownMessage);
+ debug('Sending ntfy notification');
+ void ntfyPublish(ntfyShutdownMessage);
});
}
diff --git a/bin/www.ts b/bin/www.ts
index d7790630..ddd72b5d 100644
--- a/bin/www.ts
+++ b/bin/www.ts
@@ -1,112 +1,113 @@
/* eslint-disable no-process-exit, unicorn/no-process-exit */
-import { app } from "../app.js";
+import { app } from '../app.js'
-import http from "node:http";
+import http from 'node:http'
-import * as configFunctions from "../helpers/functions.config.js";
+import * as configFunctions from '../helpers/functions.config.js'
-import exitHook from "exit-hook";
+import exitHook from 'exit-hook'
-import ntfyPublish from "@cityssm/ntfy-publish";
-import type * as ntfyTypes from "@cityssm/ntfy-publish/types";
+import ntfyPublish from '@cityssm/ntfy-publish'
+import type * as ntfyTypes from '@cityssm/ntfy-publish/types'
-import Debug from "debug";
-const debug = Debug("lot-occupancy-system:www");
+import Debug from 'debug'
+const debug = Debug('lot-occupancy-system:www')
interface ServerError extends Error {
- syscall: string;
- code: string;
+ syscall: string
+ code: string
}
-function onError(error: ServerError) {
- if (error.syscall !== "listen") {
- throw error;
+function onError(error: ServerError): void {
+ if (error.syscall !== 'listen') {
+ throw error
+ }
+
+ // handle specific listen errors with friendly messages
+ switch (error.code) {
+ // eslint-disable-next-line no-fallthrough
+ case 'EACCES': {
+ debug('Requires elevated privileges')
+ process.exit(1)
+ // break;
}
- // handle specific listen errors with friendly messages
- switch (error.code) {
- // eslint-disable-next-line no-fallthrough
- case "EACCES": {
- debug("Requires elevated privileges");
- process.exit(1);
- // break;
- }
-
- // eslint-disable-next-line no-fallthrough
- case "EADDRINUSE": {
- debug("Port is already in use.");
- process.exit(1);
- // break;
- }
-
- // eslint-disable-next-line no-fallthrough
- default: {
- throw error;
- }
+ // eslint-disable-next-line no-fallthrough
+ case 'EADDRINUSE': {
+ debug('Port is already in use.')
+ process.exit(1)
+ // break;
}
+
+ // eslint-disable-next-line no-fallthrough
+ default: {
+ throw error
+ }
+ }
}
-function onListening(server: http.Server) {
- const addr = server.address();
+function onListening(server: http.Server): void {
+ const addr = server.address()
- if (addr) {
- const bind = typeof addr === "string" ? "pipe " + addr : "port " + addr.port.toString();
- debug("Listening on " + bind);
- }
+ if (addr) {
+ const bind =
+ typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port.toString()
+ debug('Listening on ' + bind)
+ }
}
/*
* Initialize HTTP
*/
-const ntfyStartupConfig = configFunctions.getProperty("application.ntfyStartup");
+const ntfyStartupConfig = configFunctions.getProperty('application.ntfyStartup')
-const httpPort = configFunctions.getProperty("application.httpPort");
+const httpPort = configFunctions.getProperty('application.httpPort')
-const httpServer = http.createServer(app);
+const httpServer = http.createServer(app)
-httpServer.listen(httpPort);
+httpServer.listen(httpPort)
-httpServer.on("error", onError);
-httpServer.on("listening", () => {
- onListening(httpServer);
-});
+httpServer.on('error', onError)
+httpServer.on('listening', () => {
+ onListening(httpServer)
+})
-debug("HTTP listening on " + httpPort.toString());
+debug('HTTP listening on ' + httpPort.toString())
exitHook(() => {
- debug("Closing HTTP");
- httpServer.close();
-});
+ debug('Closing HTTP')
+ httpServer.close()
+})
if (ntfyStartupConfig) {
- const topic = ntfyStartupConfig.topic;
- const server = ntfyStartupConfig.server;
+ const topic = ntfyStartupConfig.topic
+ const server = ntfyStartupConfig.server
- const ntfyStartupMessage: ntfyTypes.NtfyMessageOptions = {
- topic,
- title: configFunctions.getProperty("application.applicationName"),
- message: "Application Started",
- tags: ["arrow_up"]
- };
+ const ntfyStartupMessage: ntfyTypes.NtfyMessageOptions = {
+ topic,
+ title: configFunctions.getProperty('application.applicationName'),
+ message: 'Application Started',
+ tags: ['arrow_up']
+ }
- const ntfyShutdownMessage: ntfyTypes.NtfyMessageOptions = {
- topic,
- title: configFunctions.getProperty("application.applicationName"),
- message: "Application Shut Down",
- tags: ["arrow_down"]
- };
+ const ntfyShutdownMessage: ntfyTypes.NtfyMessageOptions = {
+ topic,
+ title: configFunctions.getProperty('application.applicationName'),
+ message: 'Application Shut Down',
+ tags: ['arrow_down']
+ }
- if (server) {
- ntfyStartupMessage.server = server;
- ntfyShutdownMessage.server = server;
- }
+ if (server) {
+ ntfyStartupMessage.server = server
+ ntfyShutdownMessage.server = server
+ }
- await ntfyPublish(ntfyStartupMessage);
+ await ntfyPublish(ntfyStartupMessage)
- exitHook(() => {
- debug("Sending ntfy notification");
- ntfyPublish(ntfyShutdownMessage);
- });
+ exitHook(() => {
+ debug('Sending ntfy notification')
+ void ntfyPublish(ntfyShutdownMessage)
+ })
}
diff --git a/cypress/e2e/01-admin/feeManagement.cy.js b/cypress/e2e/01-admin/feeManagement.cy.js
index 763c568b..ec88eda1 100644
--- a/cypress/e2e/01-admin/feeManagement.cy.js
+++ b/cypress/e2e/01-admin/feeManagement.cy.js
@@ -1,51 +1,55 @@
-import { testAdmin } from "../../../test/_globals.js";
-import { logout, login, ajaxDelayMillis } from "../../support/index.js";
-import * as configFunctions from "../../../helpers/functions.config.js";
-describe("Admin - Fee Management", () => {
- beforeEach("Loads page", () => {
+import { testAdmin } from '../../../test/_globals.js';
+import { logout, login, ajaxDelayMillis } from '../../support/index.js';
+import * as configFunctions from '../../../helpers/functions.config.js';
+describe('Admin - Fee Management', () => {
+ beforeEach('Loads page', () => {
logout();
login(testAdmin);
- cy.visit("/admin/fees");
- cy.location("pathname").should("equal", "/admin/fees");
+ cy.visit('/admin/fees');
+ cy.location('pathname').should('equal', '/admin/fees');
});
afterEach(logout);
- it("Has no detectable accessibility issues", () => {
+ it('Has no detectable accessibility issues', () => {
cy.injectAxe();
cy.checkA11y();
});
- it("Creates a new fee category", () => {
+ it('Creates a new fee category', () => {
cy.get("[data-cy='addFeeCategory']").click();
- cy.get(".modal").should("be.visible");
+ cy.get('.modal').should('be.visible');
cy.injectAxe();
cy.checkA11y();
- cy.fixture("fee.json").then((fee) => {
+ cy.fixture('fee.json').then((fee) => {
cy.get(".modal input[name='feeCategory']").type(fee.feeCategory);
cy.get(".modal button[type='submit']").click();
cy.wait(ajaxDelayMillis);
- cy.get(".container--feeCategory .panel-heading .title").should("contain.text", fee.feeCategory);
+ cy.get('.container--feeCategory .panel-heading .title').should('contain.text', fee.feeCategory);
});
});
- it("Creates a new fee", () => {
+ it('Creates a new fee', () => {
cy.get("[data-cy='addFee']").first().click();
- cy.get(".modal").should("be.visible");
+ cy.get('.modal').should('be.visible');
cy.injectAxe();
cy.checkA11y();
- cy.fixture("fee.json").then((fee) => {
+ cy.fixture('fee.json').then((fee) => {
cy.get(".modal input[name='feeName']").type(fee.feeName);
cy.get(".modal textarea[name='feeDescription']").type(fee.feeDescription);
- cy.get(".modal input[name='feeAmount']").clear().type(fee.feeAmount.toString());
- cy.get(".modal input[name='taxAmount']").should("be.disabled");
+ cy.get(".modal input[name='feeAmount']")
+ .clear()
+ .type(fee.feeAmount.toString());
+ cy.get(".modal input[name='taxAmount']").should('be.disabled');
cy.get(".modal input[name='taxPercentage']")
- .invoke("val")
- .should("equal", configFunctions.getProperty("settings.fees.taxPercentageDefault").toString());
- cy.get(".modal input[name='quantityUnit']").should("be.disabled");
- cy.get(".modal select[name='includeQuantity']").select("1");
+ .invoke('val')
+ .should('equal', configFunctions
+ .getProperty('settings.fees.taxPercentageDefault')
+ .toString());
+ cy.get(".modal input[name='quantityUnit']").should('be.disabled');
+ cy.get(".modal select[name='includeQuantity']").select('1');
cy.get(".modal input[name='quantityUnit']")
- .should("not.be.disabled")
+ .should('not.be.disabled')
.type(fee.quantityUnit);
cy.get(".modal button[type='submit']").click();
cy.wait(ajaxDelayMillis);
- cy.get(".container--fee a").should("contain.text", fee.feeName);
+ cy.get('.container--fee a').should('contain.text', fee.feeName);
});
});
});
diff --git a/cypress/e2e/01-admin/feeManagement.cy.ts b/cypress/e2e/01-admin/feeManagement.cy.ts
index 9e3c8018..c1c0bb07 100644
--- a/cypress/e2e/01-admin/feeManagement.cy.ts
+++ b/cypress/e2e/01-admin/feeManagement.cy.ts
@@ -1,88 +1,91 @@
-/* eslint-disable unicorn/filename-case, promise/catch-or-return, promise/always-return */
+/* eslint-disable unicorn/filename-case, promise/catch-or-return, promise/always-return, @typescript-eslint/no-non-null-assertion */
-import { testAdmin } from "../../../test/_globals.js";
+import { testAdmin } from '../../../test/_globals.js'
-import { logout, login, ajaxDelayMillis } from "../../support/index.js";
+import { logout, login, ajaxDelayMillis } from '../../support/index.js'
-import * as configFunctions from "../../../helpers/functions.config.js";
+import * as configFunctions from '../../../helpers/functions.config.js'
-import type * as recordTypes from "../../../types/recordTypes";
+import type * as recordTypes from '../../../types/recordTypes'
-describe("Admin - Fee Management", () => {
-
- beforeEach("Loads page", () => {
- logout();
- login(testAdmin);
- cy.visit("/admin/fees");
- cy.location("pathname").should("equal", "/admin/fees");
- });
-
- afterEach(logout);
+describe('Admin - Fee Management', () => {
+ beforeEach('Loads page', () => {
+ logout()
+ login(testAdmin)
+ cy.visit('/admin/fees')
+ cy.location('pathname').should('equal', '/admin/fees')
+ })
- it("Has no detectable accessibility issues", () => {
- cy.injectAxe();
- cy.checkA11y();
- });
+ afterEach(logout)
- it("Creates a new fee category", () => {
- cy.get("[data-cy='addFeeCategory']").click();
+ it('Has no detectable accessibility issues', () => {
+ cy.injectAxe()
+ cy.checkA11y()
+ })
- cy.get(".modal").should("be.visible");
+ it('Creates a new fee category', () => {
+ cy.get("[data-cy='addFeeCategory']").click()
- cy.injectAxe();
- cy.checkA11y();
+ cy.get('.modal').should('be.visible')
- cy.fixture("fee.json").then((fee: recordTypes.Fee) => {
- cy.get(".modal input[name='feeCategory']").type(fee.feeCategory);
+ cy.injectAxe()
+ cy.checkA11y()
- cy.get(".modal button[type='submit']").click();
+ cy.fixture('fee.json').then((fee: recordTypes.Fee) => {
+ cy.get(".modal input[name='feeCategory']").type(fee.feeCategory!)
- cy.wait(ajaxDelayMillis);
+ cy.get(".modal button[type='submit']").click()
- cy.get(".container--feeCategory .panel-heading .title").should(
- "contain.text",
- fee.feeCategory
- );
- });
- });
+ cy.wait(ajaxDelayMillis)
- it("Creates a new fee", () => {
- cy.get("[data-cy='addFee']").first().click();
+ cy.get('.container--feeCategory .panel-heading .title').should(
+ 'contain.text',
+ fee.feeCategory
+ )
+ })
+ })
- cy.get(".modal").should("be.visible");
+ it('Creates a new fee', () => {
+ cy.get("[data-cy='addFee']").first().click()
- cy.injectAxe();
- cy.checkA11y();
+ cy.get('.modal').should('be.visible')
- cy.fixture("fee.json").then((fee: recordTypes.Fee) => {
- cy.get(".modal input[name='feeName']").type(fee.feeName);
+ cy.injectAxe()
+ cy.checkA11y()
- cy.get(".modal textarea[name='feeDescription']").type(fee.feeDescription);
+ cy.fixture('fee.json').then((fee: recordTypes.Fee) => {
+ cy.get(".modal input[name='feeName']").type(fee.feeName!)
- cy.get(".modal input[name='feeAmount']").clear().type(fee.feeAmount.toString());
+ cy.get(".modal textarea[name='feeDescription']").type(fee.feeDescription!)
- cy.get(".modal input[name='taxAmount']").should("be.disabled");
+ cy.get(".modal input[name='feeAmount']")
+ .clear()
+ .type(fee.feeAmount!.toString())
- cy.get(".modal input[name='taxPercentage']")
- .invoke("val")
- .should(
- "equal",
- configFunctions.getProperty("settings.fees.taxPercentageDefault").toString()
- );
+ cy.get(".modal input[name='taxAmount']").should('be.disabled')
- cy.get(".modal input[name='quantityUnit']").should("be.disabled");
+ cy.get(".modal input[name='taxPercentage']")
+ .invoke('val')
+ .should(
+ 'equal',
+ configFunctions
+ .getProperty('settings.fees.taxPercentageDefault')
+ .toString()
+ )
- cy.get(".modal select[name='includeQuantity']").select("1");
+ cy.get(".modal input[name='quantityUnit']").should('be.disabled')
- cy.get(".modal input[name='quantityUnit']")
- .should("not.be.disabled")
- .type(fee.quantityUnit);
+ cy.get(".modal select[name='includeQuantity']").select('1')
- cy.get(".modal button[type='submit']").click();
+ cy.get(".modal input[name='quantityUnit']")
+ .should('not.be.disabled')
+ .type(fee.quantityUnit!)
- cy.wait(ajaxDelayMillis);
+ cy.get(".modal button[type='submit']").click()
- cy.get(".container--fee a").should("contain.text", fee.feeName);
- });
- });
-});
+ cy.wait(ajaxDelayMillis)
+
+ cy.get('.container--fee a').should('contain.text', fee.feeName)
+ })
+ })
+})
diff --git a/cypress/e2e/02-update/lotOccupancies.cy.js b/cypress/e2e/02-update/lotOccupancies.cy.js
index 266a57ab..255719cb 100644
--- a/cypress/e2e/02-update/lotOccupancies.cy.js
+++ b/cypress/e2e/02-update/lotOccupancies.cy.js
@@ -1,7 +1,7 @@
import { testUpdate } from "../../../test/_globals.js";
import { logout, login } from "../../support/index.js";
describe("Update - Lot Occupancies", () => {
- beforeEach("Loads page", () => {
+ beforeEach(() => {
logout();
login(testUpdate);
});
diff --git a/cypress/e2e/02-update/lotOccupancies.cy.ts b/cypress/e2e/02-update/lotOccupancies.cy.ts
index 0816e681..7e0f4b73 100644
--- a/cypress/e2e/02-update/lotOccupancies.cy.ts
+++ b/cypress/e2e/02-update/lotOccupancies.cy.ts
@@ -3,14 +3,13 @@ import { testUpdate } from "../../../test/_globals.js";
import { logout, login } from "../../support/index.js";
describe("Update - Lot Occupancies", () => {
-
- beforeEach("Loads page", () => {
+ beforeEach(() => {
logout();
login(testUpdate);
});
-
+
afterEach(logout);
-
+
it('Has a "Create" link on the Lot Occupancy Search', () => {
cy.visit("/lotOccupancies");
cy.location("pathname").should("equal", "/lotOccupancies");
@@ -18,7 +17,6 @@ describe("Update - Lot Occupancies", () => {
});
describe("Update a New Lot Occupancy", () => {
-
it("Has no detectable accessibility issues", () => {
cy.visit("/lotOccupancies/new");
cy.injectAxe();
diff --git a/cypress/e2e/02-update/maps.cy.js b/cypress/e2e/02-update/maps.cy.js
index b6eed676..ac9773f2 100644
--- a/cypress/e2e/02-update/maps.cy.js
+++ b/cypress/e2e/02-update/maps.cy.js
@@ -1,51 +1,61 @@
-import { testUpdate } from "../../../test/_globals.js";
-import { logout, login } from "../../support/index.js";
-import * as configFunctions from "../../../helpers/functions.config.js";
-describe("Update - Maps", () => {
- beforeEach("Loads page", () => {
+import { testUpdate } from '../../../test/_globals.js';
+import { logout, login } from '../../support/index.js';
+import * as configFunctions from '../../../helpers/functions.config.js';
+describe('Update - Maps', () => {
+ beforeEach('Loads page', () => {
logout();
login(testUpdate);
});
afterEach(logout);
it('Has a "Create" link on the Map Search', () => {
- cy.visit("/maps");
- cy.location("pathname").should("equal", "/maps");
- cy.get("a[href$='/maps/new']").should("exist");
+ cy.visit('/maps');
+ cy.location('pathname').should('equal', '/maps');
+ cy.get("a[href$='/maps/new']").should('exist');
});
- it("Creates a new map", () => {
- cy.visit("/maps/new");
- cy.log("Check the accessibility");
+ it('Creates a new map', () => {
+ cy.visit('/maps/new');
+ cy.log('Check the accessibility');
cy.injectAxe();
cy.checkA11y();
- cy.log("Populate the fields");
- cy.fixture("map.json").then((mapJSON) => {
+ cy.log('Populate the fields');
+ cy.fixture('map.json').then((mapJSON) => {
cy.get("input[name='mapName']").clear().type(mapJSON.mapName);
- cy.get("textarea[name='mapDescription']").clear().type(mapJSON.mapDescription);
+ cy.get("textarea[name='mapDescription']")
+ .clear()
+ .type(mapJSON.mapDescription);
cy.get("input[name='mapAddress1']").clear().type(mapJSON.mapAddress1);
cy.get("input[name='mapAddress2']").clear().type(mapJSON.mapAddress2);
cy.get("input[name='mapPostalCode']").clear().type(mapJSON.mapPostalCode);
- cy.get("input[name='mapPhoneNumber']").clear().type(mapJSON.mapPhoneNumber);
- cy.get("input[name='mapLatitude']").clear().type(mapJSON.mapLatitude.toString());
- cy.get("input[name='mapLongitude']").clear().type(mapJSON.mapLongitude.toString());
+ cy.get("input[name='mapPhoneNumber']")
+ .clear()
+ .type(mapJSON.mapPhoneNumber);
+ cy.get("input[name='mapLatitude']")
+ .clear()
+ .type(mapJSON.mapLatitude.toString());
+ cy.get("input[name='mapLongitude']")
+ .clear()
+ .type(mapJSON.mapLongitude.toString());
});
- cy.log("Ensure the default city and province are used");
- cy.get("input[name='mapCity']").should("have.value", configFunctions.getProperty("settings.map.mapCityDefault"));
- cy.get("input[name='mapProvince']").should("have.value", configFunctions.getProperty("settings.map.mapProvinceDefault"));
- cy.log("Submit the form");
- cy.get("#form--map").submit();
+ cy.log('Ensure the default city and province are used');
+ cy.get("input[name='mapCity']").should('have.value', configFunctions.getProperty('settings.map.mapCityDefault'));
+ cy.get("input[name='mapProvince']").should('have.value', configFunctions.getProperty('settings.map.mapProvinceDefault'));
+ cy.log('Submit the form');
+ cy.get('#form--map').submit();
cy.wait(1000);
- cy.location("pathname").should("not.contain", "/new").should("contain", "/edit");
- cy.fixture("map.json").then((mapJSON) => {
- cy.get("input[name='mapName']").should("have.value", mapJSON.mapName);
- cy.get("textarea[name='mapDescription']").should("have.value", mapJSON.mapDescription);
- cy.get("input[name='mapAddress1']").should("have.value", mapJSON.mapAddress1);
- cy.get("input[name='mapAddress2']").should("have.value", mapJSON.mapAddress2);
- cy.get("input[name='mapCity']").should("have.value", configFunctions.getProperty("settings.map.mapCityDefault"));
- cy.get("input[name='mapProvince']").should("have.value", configFunctions.getProperty("settings.map.mapProvinceDefault"));
- cy.get("input[name='mapPostalCode']").should("have.value", mapJSON.mapPostalCode);
- cy.get("input[name='mapPhoneNumber']").should("have.value", mapJSON.mapPhoneNumber);
- cy.get("input[name='mapLatitude']").should("have.value", mapJSON.mapLatitude.toString());
- cy.get("input[name='mapLongitude']").should("have.value", mapJSON.mapLongitude.toString());
+ cy.location('pathname')
+ .should('not.contain', '/new')
+ .should('contain', '/edit');
+ cy.fixture('map.json').then((mapJSON) => {
+ cy.get("input[name='mapName']").should('have.value', mapJSON.mapName);
+ cy.get("textarea[name='mapDescription']").should('have.value', mapJSON.mapDescription);
+ cy.get("input[name='mapAddress1']").should('have.value', mapJSON.mapAddress1);
+ cy.get("input[name='mapAddress2']").should('have.value', mapJSON.mapAddress2);
+ cy.get("input[name='mapCity']").should('have.value', configFunctions.getProperty('settings.map.mapCityDefault'));
+ cy.get("input[name='mapProvince']").should('have.value', configFunctions.getProperty('settings.map.mapProvinceDefault'));
+ cy.get("input[name='mapPostalCode']").should('have.value', mapJSON.mapPostalCode);
+ cy.get("input[name='mapPhoneNumber']").should('have.value', mapJSON.mapPhoneNumber);
+ cy.get("input[name='mapLatitude']").should('have.value', mapJSON.mapLatitude.toString());
+ cy.get("input[name='mapLongitude']").should('have.value', mapJSON.mapLongitude.toString());
});
});
});
diff --git a/cypress/e2e/02-update/maps.cy.ts b/cypress/e2e/02-update/maps.cy.ts
index c39fb73f..202e4bbc 100644
--- a/cypress/e2e/02-update/maps.cy.ts
+++ b/cypress/e2e/02-update/maps.cy.ts
@@ -1,97 +1,124 @@
-import { testUpdate } from "../../../test/_globals.js";
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
-import { logout, login } from "../../support/index.js";
+import { testUpdate } from '../../../test/_globals.js'
-import * as configFunctions from "../../../helpers/functions.config.js";
+import { logout, login } from '../../support/index.js'
-import type * as recordTypes from "../../../types/recordTypes";
+import * as configFunctions from '../../../helpers/functions.config.js'
-describe("Update - Maps", () => {
- beforeEach("Loads page", () => {
- logout();
- login(testUpdate);
- });
+import type * as recordTypes from '../../../types/recordTypes'
- afterEach(logout);
+describe('Update - Maps', () => {
+ beforeEach('Loads page', () => {
+ logout()
+ login(testUpdate)
+ })
- it('Has a "Create" link on the Map Search', () => {
- cy.visit("/maps");
- cy.location("pathname").should("equal", "/maps");
- cy.get("a[href$='/maps/new']").should("exist");
- });
+ afterEach(logout)
- it("Creates a new map", () => {
- cy.visit("/maps/new");
+ it('Has a "Create" link on the Map Search', () => {
+ cy.visit('/maps')
+ cy.location('pathname').should('equal', '/maps')
+ cy.get("a[href$='/maps/new']").should('exist')
+ })
- cy.log("Check the accessibility");
+ it('Creates a new map', () => {
+ cy.visit('/maps/new')
- cy.injectAxe();
- cy.checkA11y();
+ cy.log('Check the accessibility')
- cy.log("Populate the fields");
+ cy.injectAxe()
+ cy.checkA11y()
- // eslint-disable-next-line promise/catch-or-return, promise/always-return
- cy.fixture("map.json").then((mapJSON: recordTypes.Map) => {
- cy.get("input[name='mapName']").clear().type(mapJSON.mapName);
- cy.get("textarea[name='mapDescription']").clear().type(mapJSON.mapDescription);
+ cy.log('Populate the fields')
- cy.get("input[name='mapAddress1']").clear().type(mapJSON.mapAddress1);
- cy.get("input[name='mapAddress2']").clear().type(mapJSON.mapAddress2);
- cy.get("input[name='mapPostalCode']").clear().type(mapJSON.mapPostalCode);
- cy.get("input[name='mapPhoneNumber']").clear().type(mapJSON.mapPhoneNumber);
+ // eslint-disable-next-line promise/catch-or-return, promise/always-return
+ cy.fixture('map.json').then((mapJSON: recordTypes.Map) => {
+ cy.get("input[name='mapName']").clear().type(mapJSON.mapName!)
+ cy.get("textarea[name='mapDescription']")
+ .clear()
+ .type(mapJSON.mapDescription!)
- cy.get("input[name='mapLatitude']").clear().type(mapJSON.mapLatitude.toString());
- cy.get("input[name='mapLongitude']").clear().type(mapJSON.mapLongitude.toString());
- });
+ cy.get("input[name='mapAddress1']").clear().type(mapJSON.mapAddress1!)
+ cy.get("input[name='mapAddress2']").clear().type(mapJSON.mapAddress2!)
+ cy.get("input[name='mapPostalCode']").clear().type(mapJSON.mapPostalCode!)
+ cy.get("input[name='mapPhoneNumber']")
+ .clear()
+ .type(mapJSON.mapPhoneNumber!)
- cy.log("Ensure the default city and province are used");
+ cy.get("input[name='mapLatitude']")
+ .clear()
+ .type(mapJSON.mapLatitude!.toString())
+ cy.get("input[name='mapLongitude']")
+ .clear()
+ .type(mapJSON.mapLongitude!.toString())
+ })
- cy.get("input[name='mapCity']").should(
- "have.value",
- configFunctions.getProperty("settings.map.mapCityDefault")
- );
+ cy.log('Ensure the default city and province are used')
- cy.get("input[name='mapProvince']").should(
- "have.value",
- configFunctions.getProperty("settings.map.mapProvinceDefault")
- );
+ cy.get("input[name='mapCity']").should(
+ 'have.value',
+ configFunctions.getProperty('settings.map.mapCityDefault')
+ )
- cy.log("Submit the form");
+ cy.get("input[name='mapProvince']").should(
+ 'have.value',
+ configFunctions.getProperty('settings.map.mapProvinceDefault')
+ )
- cy.get("#form--map").submit();
+ cy.log('Submit the form')
- cy.wait(1000);
+ cy.get('#form--map').submit()
- cy.location("pathname").should("not.contain", "/new").should("contain", "/edit");
+ cy.wait(1000)
- // eslint-disable-next-line promise/catch-or-return, promise/always-return
- cy.fixture("map.json").then((mapJSON: recordTypes.Map) => {
- cy.get("input[name='mapName']").should("have.value", mapJSON.mapName);
- cy.get("textarea[name='mapDescription']").should("have.value", mapJSON.mapDescription);
+ cy.location('pathname')
+ .should('not.contain', '/new')
+ .should('contain', '/edit')
- cy.get("input[name='mapAddress1']").should("have.value", mapJSON.mapAddress1);
- cy.get("input[name='mapAddress2']").should("have.value", mapJSON.mapAddress2);
+ // eslint-disable-next-line promise/catch-or-return, promise/always-return
+ cy.fixture('map.json').then((mapJSON: recordTypes.Map) => {
+ cy.get("input[name='mapName']").should('have.value', mapJSON.mapName)
+ cy.get("textarea[name='mapDescription']").should(
+ 'have.value',
+ mapJSON.mapDescription
+ )
- cy.get("input[name='mapCity']").should(
- "have.value",
- configFunctions.getProperty("settings.map.mapCityDefault")
- );
- cy.get("input[name='mapProvince']").should(
- "have.value",
- configFunctions.getProperty("settings.map.mapProvinceDefault")
- );
+ cy.get("input[name='mapAddress1']").should(
+ 'have.value',
+ mapJSON.mapAddress1
+ )
+ cy.get("input[name='mapAddress2']").should(
+ 'have.value',
+ mapJSON.mapAddress2
+ )
- cy.get("input[name='mapPostalCode']").should("have.value", mapJSON.mapPostalCode);
- cy.get("input[name='mapPhoneNumber']").should("have.value", mapJSON.mapPhoneNumber);
+ cy.get("input[name='mapCity']").should(
+ 'have.value',
+ configFunctions.getProperty('settings.map.mapCityDefault')
+ )
+ cy.get("input[name='mapProvince']").should(
+ 'have.value',
+ configFunctions.getProperty('settings.map.mapProvinceDefault')
+ )
- cy.get("input[name='mapLatitude']").should(
- "have.value",
- mapJSON.mapLatitude.toString()
- );
- cy.get("input[name='mapLongitude']").should(
- "have.value",
- mapJSON.mapLongitude.toString()
- );
- });
- });
-});
+ cy.get("input[name='mapPostalCode']").should(
+ 'have.value',
+ mapJSON.mapPostalCode
+ )
+ cy.get("input[name='mapPhoneNumber']").should(
+ 'have.value',
+ mapJSON.mapPhoneNumber
+ )
+
+ cy.get("input[name='mapLatitude']").should(
+ 'have.value',
+ mapJSON.mapLatitude!.toString()
+ )
+ cy.get("input[name='mapLongitude']").should(
+ 'have.value',
+ mapJSON.mapLongitude!.toString()
+ )
+ })
+ })
+})
diff --git a/data/config.cemetery.ssm.js b/data/config.cemetery.ssm.js
index 4cb7a8ac..28c32310 100644
--- a/data/config.cemetery.ssm.js
+++ b/data/config.cemetery.ssm.js
@@ -4,33 +4,40 @@ config.aliases.occupancyStartDate = "Purchase Date";
config.aliases.externalReceiptNumber = "GP Receipt Number";
config.settings.lot.lotNamePattern =
/^[\dA-Z]{2}-(B[\dA-Z]+-)?(R[\dA-Z]+-)?(L[\dA-Z]+-)?G[\dA-Z]+(, Interment \d+)?$/;
-config.settings.lot.lotNameHelpText =
- "Two digit cemetery-Block-Range-Lot-Grave, Interment number\n" +
- "ex. XX-BA-R41-L15-G3A, Interment 1";
+config.settings.lot.lotNameHelpText = `Two digit cemetery-Block-Range-Lot-Grave, Interment number\n
+ ex. XX-BA-R41-L15-G3A, Interment 1`;
+const numericPadding = "00000";
config.settings.lot.lotNameSortNameFunction = (lotName) => {
- const numericPadding = "00000";
- const lotNameSplit = lotName.toUpperCase().split("-");
- const cleanLotNamePieces = [];
- for (const lotNamePiece of lotNameSplit) {
- let numericPiece = numericPadding;
- let letterPiece = "";
- for (const letter of lotNamePiece) {
- if (letterPiece === "" && "0123456789".includes(letter)) {
- numericPiece += letter;
+ try {
+ const lotNameSplit = lotName.toUpperCase().split("-");
+ const cleanLotNamePieces = [];
+ for (let lotNamePiece of lotNameSplit) {
+ if (cleanLotNamePieces.length === 0) {
+ cleanLotNamePieces.push(lotNamePiece);
+ continue;
}
- else {
- letterPiece += letter;
+ let numericPiece = numericPadding;
+ let letterPiece = "";
+ const firstLetter = lotNamePiece.charAt(0);
+ lotNamePiece = lotNamePiece.slice(1);
+ for (const letter of lotNamePiece) {
+ if (letterPiece === "" && "0123456789".includes(letter)) {
+ numericPiece += letter;
+ }
+ else {
+ letterPiece += letter;
+ }
}
+ cleanLotNamePieces.push(firstLetter + numericPiece.slice(-1 * numericPadding.length) + letterPiece);
}
- cleanLotNamePieces.push(numericPiece.slice(-1 * numericPadding.length) + letterPiece);
+ return cleanLotNamePieces.join("-");
+ }
+ catch {
+ return lotName;
}
- return cleanLotNamePieces.join("-");
};
config.settings.lotOccupancy.occupantCityDefault = "Sault Ste. Marie";
-config.settings.lotOccupancy.prints = [
- "pdf/ssm.cemetery.burialPermit",
- "pdf/ssm.cemetery.contract"
-];
+config.settings.lotOccupancy.prints = ["pdf/ssm.cemetery.burialPermit", "pdf/ssm.cemetery.contract"];
config.settings.map.mapCityDefault = "Sault Ste. Marie";
config.settings.workOrders.workOrderNumberLength = 6;
config.settings.workOrders.workOrderMilestoneDateRecentBeforeDays = 7;
diff --git a/data/config.cemetery.ssm.ts b/data/config.cemetery.ssm.ts
index aee6380f..fd876524 100644
--- a/data/config.cemetery.ssm.ts
+++ b/data/config.cemetery.ssm.ts
@@ -7,41 +7,51 @@ config.aliases.externalReceiptNumber = "GP Receipt Number";
config.settings.lot.lotNamePattern =
/^[\dA-Z]{2}-(B[\dA-Z]+-)?(R[\dA-Z]+-)?(L[\dA-Z]+-)?G[\dA-Z]+(, Interment \d+)?$/;
-
-config.settings.lot.lotNameHelpText =
- "Two digit cemetery-Block-Range-Lot-Grave, Interment number\n" +
- "ex. XX-BA-R41-L15-G3A, Interment 1";
+
+config.settings.lot.lotNameHelpText = `Two digit cemetery-Block-Range-Lot-Grave, Interment number\n
+ ex. XX-BA-R41-L15-G3A, Interment 1`;
+
+const numericPadding = "00000";
config.settings.lot.lotNameSortNameFunction = (lotName) => {
- const numericPadding = "00000";
+ try {
+ const lotNameSplit = lotName.toUpperCase().split("-");
- const lotNameSplit = lotName.toUpperCase().split("-");
+ const cleanLotNamePieces: string[] = [];
- const cleanLotNamePieces: string[] = [];
-
- for (const lotNamePiece of lotNameSplit) {
- let numericPiece = numericPadding;
- let letterPiece = "";
-
- for (const letter of lotNamePiece) {
- if (letterPiece === "" && "0123456789".includes(letter)) {
- numericPiece += letter;
- } else {
- letterPiece += letter;
+ for (let lotNamePiece of lotNameSplit) {
+ if (cleanLotNamePieces.length === 0) {
+ cleanLotNamePieces.push(lotNamePiece);
+ continue;
}
+
+ let numericPiece = numericPadding;
+ let letterPiece = "";
+
+ const firstLetter = lotNamePiece.charAt(0);
+ lotNamePiece = lotNamePiece.slice(1);
+
+ for (const letter of lotNamePiece) {
+ if (letterPiece === "" && "0123456789".includes(letter)) {
+ numericPiece += letter;
+ } else {
+ letterPiece += letter;
+ }
+ }
+
+ cleanLotNamePieces.push(
+ firstLetter + numericPiece.slice(-1 * numericPadding.length) + letterPiece
+ );
}
- cleanLotNamePieces.push(numericPiece.slice(-1 * numericPadding.length) + letterPiece);
+ return cleanLotNamePieces.join("-");
+ } catch {
+ return lotName;
}
-
- return cleanLotNamePieces.join("-");
};
config.settings.lotOccupancy.occupantCityDefault = "Sault Ste. Marie";
-config.settings.lotOccupancy.prints = [
- "pdf/ssm.cemetery.burialPermit",
- "pdf/ssm.cemetery.contract"
-];
+config.settings.lotOccupancy.prints = ["pdf/ssm.cemetery.burialPermit", "pdf/ssm.cemetery.contract"];
config.settings.map.mapCityDefault = "Sault Ste. Marie";
diff --git a/handlers/admin-post/doAddFee.d.ts b/handlers/admin-post/doAddFee.d.ts
index 9621c611..7151ed90 100644
--- a/handlers/admin-post/doAddFee.d.ts
+++ b/handlers/admin-post/doAddFee.d.ts
@@ -1,3 +1,3 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express';
export declare const handler: RequestHandler;
export default handler;
diff --git a/handlers/admin-post/doAddFee.js b/handlers/admin-post/doAddFee.js
index fd592402..b3e41dbe 100644
--- a/handlers/admin-post/doAddFee.js
+++ b/handlers/admin-post/doAddFee.js
@@ -1,6 +1,6 @@
-import { addFee } from "../../helpers/lotOccupancyDB/addFee.js";
-import { getFeeCategories } from "../../helpers/lotOccupancyDB/getFeeCategories.js";
-export const handler = async (request, response) => {
+import { addFee } from '../../helpers/lotOccupancyDB/addFee.js';
+import { getFeeCategories } from '../../helpers/lotOccupancyDB/getFeeCategories.js';
+export const handler = (request, response) => {
const feeId = addFee(request.body, request.session);
const feeCategories = getFeeCategories({}, {
includeFees: true
diff --git a/handlers/admin-post/doAddFee.ts b/handlers/admin-post/doAddFee.ts
index 8e94e922..2cad5e6c 100644
--- a/handlers/admin-post/doAddFee.ts
+++ b/handlers/admin-post/doAddFee.ts
@@ -1,24 +1,24 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express'
-import { addFee } from "../../helpers/lotOccupancyDB/addFee.js";
+import { addFee } from '../../helpers/lotOccupancyDB/addFee.js'
-import { getFeeCategories } from "../../helpers/lotOccupancyDB/getFeeCategories.js";
+import { getFeeCategories } from '../../helpers/lotOccupancyDB/getFeeCategories.js'
-export const handler: RequestHandler = async (request, response) => {
- const feeId = addFee(request.body, request.session);
+export const handler: RequestHandler = (request, response) => {
+ const feeId = addFee(request.body, request.session)
- const feeCategories = getFeeCategories(
- {},
- {
- includeFees: true
- }
- );
+ const feeCategories = getFeeCategories(
+ {},
+ {
+ includeFees: true
+ }
+ )
- response.json({
- success: true,
- feeId,
- feeCategories
- });
-};
+ response.json({
+ success: true,
+ feeId,
+ feeCategories
+ })
+}
-export default handler;
+export default handler
diff --git a/handlers/admin-post/doUpdateWorkOrderType.d.ts b/handlers/admin-post/doUpdateWorkOrderType.d.ts
index 9621c611..7151ed90 100644
--- a/handlers/admin-post/doUpdateWorkOrderType.d.ts
+++ b/handlers/admin-post/doUpdateWorkOrderType.d.ts
@@ -1,3 +1,3 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express';
export declare const handler: RequestHandler;
export default handler;
diff --git a/handlers/admin-post/doUpdateWorkOrderType.js b/handlers/admin-post/doUpdateWorkOrderType.js
index 15a6e4d2..f3f86499 100644
--- a/handlers/admin-post/doUpdateWorkOrderType.js
+++ b/handlers/admin-post/doUpdateWorkOrderType.js
@@ -1,7 +1,7 @@
-import { updateRecord } from "../../helpers/lotOccupancyDB/updateRecord.js";
-import { getWorkOrderTypes } from "../../helpers/functions.cache.js";
-export const handler = async (request, response) => {
- const success = updateRecord("WorkOrderTypes", request.body.workOrderTypeId, request.body.workOrderType, request.session);
+import { updateRecord } from '../../helpers/lotOccupancyDB/updateRecord.js';
+import { getWorkOrderTypes } from '../../helpers/functions.cache.js';
+export const handler = (request, response) => {
+ const success = updateRecord('WorkOrderTypes', request.body.workOrderTypeId, request.body.workOrderType, request.session);
const workOrderTypes = getWorkOrderTypes();
response.json({
success,
diff --git a/handlers/admin-post/doUpdateWorkOrderType.ts b/handlers/admin-post/doUpdateWorkOrderType.ts
index 0e745583..4d53101b 100644
--- a/handlers/admin-post/doUpdateWorkOrderType.ts
+++ b/handlers/admin-post/doUpdateWorkOrderType.ts
@@ -1,22 +1,22 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express'
-import { updateRecord } from "../../helpers/lotOccupancyDB/updateRecord.js";
-import { getWorkOrderTypes } from "../../helpers/functions.cache.js";
+import { updateRecord } from '../../helpers/lotOccupancyDB/updateRecord.js'
+import { getWorkOrderTypes } from '../../helpers/functions.cache.js'
-export const handler: RequestHandler = async (request, response) => {
- const success = updateRecord(
- "WorkOrderTypes",
- request.body.workOrderTypeId,
- request.body.workOrderType,
- request.session
- );
+export const handler: RequestHandler = (request, response) => {
+ const success = updateRecord(
+ 'WorkOrderTypes',
+ request.body.workOrderTypeId,
+ request.body.workOrderType,
+ request.session
+ )
- const workOrderTypes = getWorkOrderTypes();
+ const workOrderTypes = getWorkOrderTypes()
- response.json({
- success,
- workOrderTypes
- });
-};
+ response.json({
+ success,
+ workOrderTypes
+ })
+}
-export default handler;
+export default handler
diff --git a/handlers/api-get/milestoneICS.d.ts b/handlers/api-get/milestoneICS.d.ts
index 9621c611..7151ed90 100644
--- a/handlers/api-get/milestoneICS.d.ts
+++ b/handlers/api-get/milestoneICS.d.ts
@@ -1,3 +1,3 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express';
export declare const handler: RequestHandler;
export default handler;
diff --git a/handlers/api-get/milestoneICS.js b/handlers/api-get/milestoneICS.js
index 311a8f26..8cc1e74b 100644
--- a/handlers/api-get/milestoneICS.js
+++ b/handlers/api-get/milestoneICS.js
@@ -1,26 +1,26 @@
-import ical, { ICalEventStatus } from "ical-generator";
-import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js";
-import * as configFunctions from "../../helpers/functions.config.js";
-import { getPrintConfig } from "../../helpers/functions.print.js";
-const calendarCompany = "cityssm.github.io";
-const calendarProduct = configFunctions.getProperty("application.applicationName");
+import ical, { ICalEventStatus } from 'ical-generator';
+import { getWorkOrderMilestones } from '../../helpers/lotOccupancyDB/getWorkOrderMilestones.js';
+import * as configFunctions from '../../helpers/functions.config.js';
+import { getPrintConfig } from '../../helpers/functions.print.js';
+const calendarCompany = 'cityssm.github.io';
+const calendarProduct = configFunctions.getProperty('application.applicationName');
const timeStringSplitRegex = /[ :-]/;
function escapeHTML(stringToEscape) {
- return stringToEscape.replace(/[^\d A-Za-z]/g, (c) => "" + c.codePointAt(0) + ";");
+ return stringToEscape.replace(/[^\d A-Za-z]/g, (c) => `${c.codePointAt(0)};`);
}
function getUrlRoot(request) {
- return ("http://" +
+ return ('http://' +
request.hostname +
- (configFunctions.getProperty("application.httpPort") === 80
- ? ""
- : ":" + configFunctions.getProperty("application.httpPort")) +
- configFunctions.getProperty("reverseProxy.urlPrefix"));
+ (configFunctions.getProperty('application.httpPort') === 80
+ ? ''
+ : `:${configFunctions.getProperty('application.httpPort')}`) +
+ configFunctions.getProperty('reverseProxy.urlPrefix'));
}
function getWorkOrderUrl(request, milestone) {
- return getUrlRoot(request) + "/workOrders/" + milestone.workOrderId;
+ return `${getUrlRoot(request)}/workOrders/${milestone.workOrderId}`;
}
function buildEventSummary(milestone) {
- let summary = (milestone.workOrderMilestoneCompletionDate ? "✔ " : "") +
+ let summary = (milestone.workOrderMilestoneCompletionDate ? '✔ ' : '') +
(milestone.workOrderMilestoneTypeId
? milestone.workOrderMilestoneType
: milestone.workOrderMilestoneDescription).trim();
@@ -29,121 +29,126 @@ function buildEventSummary(milestone) {
for (const occupant of lotOccupancy.lotOccupancyOccupants) {
occupantCount += 1;
if (occupantCount === 1) {
- if (summary !== "") {
- summary += ": ";
+ if (summary !== '') {
+ summary += ': ';
}
summary += occupant.occupantName;
}
}
}
if (occupantCount > 1) {
- summary += " plus " + (occupantCount - 1);
+ summary += ' plus ' + (occupantCount - 1);
}
return summary;
}
function buildEventDescriptionHTML_occupancies(request, milestone) {
- let descriptionHTML = "";
+ let descriptionHTML = '';
if (milestone.workOrderLotOccupancies.length > 0) {
const urlRoot = getUrlRoot(request);
descriptionHTML = `
- Related ${escapeHTML(configFunctions.getProperty("aliases.occupancies"))}
-
-
-
- | ${escapeHTML(configFunctions.getProperty("aliases.occupancy"))} Type |
- ${escapeHTML(configFunctions.getProperty("aliases.lot"))} |
- Start Date |
- End Date |
- ${escapeHTML(configFunctions.getProperty("aliases.occupants"))} |
-
- `;
+ Related ${escapeHTML(configFunctions.getProperty('aliases.occupancies'))}
+
+
+
+ | ${escapeHTML(configFunctions.getProperty('aliases.occupancy'))} Type |
+ ${escapeHTML(configFunctions.getProperty('aliases.lot'))} |
+ Start Date |
+ End Date |
+ ${escapeHTML(configFunctions.getProperty('aliases.occupants'))} |
+
+ `;
for (const occupancy of milestone.workOrderLotOccupancies) {
- descriptionHTML +=
- `
- |
-
- ${escapeHTML(occupancy.occupancyType)}
-
- |
-
- ${occupancy.lotName ? escapeHTML(occupancy.lotName) : "(Not Set)"}
- |
-
- ${occupancy.occupancyStartDateString}
- | ` +
- "" +
- (occupancy.occupancyEndDate ? occupancy.occupancyEndDateString : "(No End Date)") +
- " | " +
- "";
+ descriptionHTML += ` |
+ |
+
+ ${escapeHTML(occupancy.occupancyType)}
+
+ |
+
+ ${occupancy.lotName ? escapeHTML(occupancy.lotName) : '(Not Set)'}
+ |
+
+ ${occupancy.occupancyStartDateString}
+ |
+
+ ${occupancy.occupancyEndDate
+ ? occupancy.occupancyEndDateString
+ : '(No End Date)'}
+ |
+ `;
for (const occupant of occupancy.lotOccupancyOccupants) {
descriptionHTML +=
escapeHTML(occupant.lotOccupantType) +
- ": " +
+ ': ' +
escapeHTML(occupant.occupantName) +
- " ";
+ ' ';
}
- descriptionHTML += " |
";
+ descriptionHTML += '';
}
- descriptionHTML += "
";
+ descriptionHTML += '
';
}
return descriptionHTML;
}
function buildEventDescriptionHTML_lots(request, milestone) {
- let descriptionHTML = "";
+ let descriptionHTML = '';
if (milestone.workOrderLots.length > 0) {
const urlRoot = getUrlRoot(request);
descriptionHTML +=
- "Related " +
- escapeHTML(configFunctions.getProperty("aliases.lots")) +
- "
" +
+ 'Related ' +
+ escapeHTML(configFunctions.getProperty('aliases.lots')) +
+ '
' +
'' +
`|
- ${escapeHTML(configFunctions.getProperty("aliases.lot"))} Type
+ ${escapeHTML(configFunctions.getProperty('aliases.lot'))} Type
|
- ${escapeHTML(configFunctions.getProperty("aliases.map"))}
+ ${escapeHTML(configFunctions.getProperty('aliases.map'))}
|
- ${escapeHTML(configFunctions.getProperty("aliases.lot"))} Type
+ ${escapeHTML(configFunctions.getProperty('aliases.lot'))} Type
| ` +
- "Status | " +
- "
" +
- "";
+ 'Status | ' +
+ '' +
+ '';
for (const lot of milestone.workOrderLots) {
descriptionHTML +=
- "" +
- ("| " +
+ ' |
' +
+ ('| ' +
'' +
- escapeHTML(lot.lotName) +
- " | ") +
- `${escapeHTML(lot.mapName)} | ` +
- `${escapeHTML(lot.lotType)} | ` +
- `${escapeHTML(lot.lotStatus)} | ` +
- "
";
+ escapeHTML(lot.lotName ?? '') +
+ '') +
+ `${escapeHTML(lot.mapName ?? '')} | ` +
+ `${escapeHTML(lot.lotType ?? '')} | ` +
+ `${escapeHTML(lot.lotStatus ?? '')} | ` +
+ '';
}
- descriptionHTML += "
";
+ descriptionHTML += '';
}
return descriptionHTML;
}
function buildEventDescriptionHTML_prints(request, milestone) {
- let descriptionHTML = "";
- const prints = configFunctions.getProperty("settings.workOrders.prints");
+ let descriptionHTML = '';
+ const prints = configFunctions.getProperty('settings.workOrders.prints');
if (prints.length > 0) {
const urlRoot = getUrlRoot(request);
- descriptionHTML += "Prints
";
+ descriptionHTML += 'Prints
';
for (const printName of prints) {
const printConfig = getPrintConfig(printName);
if (printConfig) {
descriptionHTML +=
- "" +
+ '
' +
escapeHTML(printConfig.title) +
- "
" +
- (urlRoot + "/print/" + printName + "/?workOrderId=" + milestone.workOrderId) +
- "
";
+ '
' +
+ (urlRoot +
+ '/print/' +
+ printName +
+ '/?workOrderId=' +
+ milestone.workOrderId) +
+ '
';
}
}
}
@@ -152,9 +157,9 @@ function buildEventDescriptionHTML_prints(request, milestone) {
function buildEventDescriptionHTML(request, milestone) {
const workOrderUrl = getWorkOrderUrl(request, milestone);
let descriptionHTML = `Milestone Description
- ${escapeHTML(milestone.workOrderMilestoneDescription)}
- Work Order #${milestone.workOrderNumber}
- ${escapeHTML(milestone.workOrderDescription)}
+ ${escapeHTML(milestone.workOrderMilestoneDescription ?? '')}
+ Work Order #${milestone.workOrderNumber ?? ''}
+ ${escapeHTML(milestone.workOrderDescription ?? '')}
${workOrderUrl}
`;
descriptionHTML += buildEventDescriptionHTML_occupancies(request, milestone);
descriptionHTML += buildEventDescriptionHTML_lots(request, milestone);
@@ -167,7 +172,7 @@ function buildEventCategoryList(milestone) {
categories.push(milestone.workOrderMilestoneType, milestone.workOrderType);
}
if (milestone.workOrderMilestoneCompletionDate) {
- categories.push("Completed");
+ categories.push('Completed');
}
return categories;
}
@@ -175,10 +180,10 @@ function buildEventLocation(milestone) {
const lotNames = [];
if (milestone.workOrderLots.length > 0) {
for (const lot of milestone.workOrderLots) {
- lotNames.push(lot.mapName + ": " + lot.lotName);
+ lotNames.push(`${lot.mapName ?? ''}: ${lot.lotName ?? ''}`);
}
}
- return lotNames.join(", ");
+ return lotNames.join(', ');
}
export const handler = (request, response) => {
const urlRoot = getUrlRoot(request);
@@ -190,19 +195,19 @@ export const handler = (request, response) => {
workOrderMilestoneFilters.workOrderId = request.query.workOrderId;
}
else {
- workOrderMilestoneFilters.workOrderMilestoneDateFilter = "recent";
+ workOrderMilestoneFilters.workOrderMilestoneDateFilter = 'recent';
}
const workOrderMilestones = getWorkOrderMilestones(workOrderMilestoneFilters, {
includeWorkOrders: true,
- orderBy: "date"
+ orderBy: 'date'
});
const calendar = ical({
- name: "Work Order Milestone Calendar",
- url: urlRoot + "/workOrders"
+ name: 'Work Order Milestone Calendar',
+ url: urlRoot + '/workOrders'
});
if (request.query.workOrderId && workOrderMilestones.length > 0) {
calendar.name(`Work Order #${workOrderMilestones[0].workOrderNumber}`);
- calendar.url(urlRoot + "/workOrders/" + workOrderMilestones[0].workOrderId);
+ calendar.url(urlRoot + '/workOrders/' + workOrderMilestones[0].workOrderId);
}
calendar.prodId({
company: calendarCompany,
@@ -210,7 +215,7 @@ export const handler = (request, response) => {
});
for (const milestone of workOrderMilestones) {
const milestoneTimePieces = (milestone.workOrderMilestoneDateString +
- " " +
+ ' ' +
milestone.workOrderMilestoneTimeString).split(timeStringSplitRegex);
const milestoneDate = new Date(Number.parseInt(milestoneTimePieces[0], 10), Number.parseInt(milestoneTimePieces[1], 10) - 1, Number.parseInt(milestoneTimePieces[2], 10), Number.parseInt(milestoneTimePieces[3], 10), Number.parseInt(milestoneTimePieces[4], 10));
const milestoneEndDate = new Date(milestoneDate.getTime());
@@ -253,13 +258,13 @@ export const handler = (request, response) => {
if (organizerSet) {
calendarEvent.createAttendee({
name: occupant.occupantName,
- email: configFunctions.getProperty("settings.workOrders.calendarEmailAddress")
+ email: configFunctions.getProperty('settings.workOrders.calendarEmailAddress')
});
}
else {
calendarEvent.organizer({
name: occupant.occupantName,
- email: configFunctions.getProperty("settings.workOrders.calendarEmailAddress")
+ email: configFunctions.getProperty('settings.workOrders.calendarEmailAddress')
});
organizerSet = true;
}
@@ -269,7 +274,7 @@ export const handler = (request, response) => {
else {
calendarEvent.organizer({
name: milestone.recordCreate_userName,
- email: configFunctions.getProperty("settings.workOrders.calendarEmailAddress")
+ email: configFunctions.getProperty('settings.workOrders.calendarEmailAddress')
});
}
}
diff --git a/handlers/api-get/milestoneICS.ts b/handlers/api-get/milestoneICS.ts
index b1574406..5d91790f 100644
--- a/handlers/api-get/milestoneICS.ts
+++ b/handlers/api-get/milestoneICS.ts
@@ -1,413 +1,437 @@
/* eslint-disable unicorn/filename-case */
-import ical, { ICalEventData, ICalEventStatus } from "ical-generator";
+import ical, { ICalEventData, ICalEventStatus } from 'ical-generator'
import {
- getWorkOrderMilestones,
- WorkOrderMilestoneFilters
-} from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js";
+ getWorkOrderMilestones,
+ WorkOrderMilestoneFilters
+} from '../../helpers/lotOccupancyDB/getWorkOrderMilestones.js'
-import type { RequestHandler, Request } from "express";
+import type { RequestHandler, Request } from 'express'
-import * as configFunctions from "../../helpers/functions.config.js";
-import { getPrintConfig } from "../../helpers/functions.print.js";
+import * as configFunctions from '../../helpers/functions.config.js'
+import { getPrintConfig } from '../../helpers/functions.print.js'
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes'
-const calendarCompany = "cityssm.github.io";
-const calendarProduct = configFunctions.getProperty("application.applicationName");
+const calendarCompany = 'cityssm.github.io'
+const calendarProduct = configFunctions.getProperty(
+ 'application.applicationName'
+)
-const timeStringSplitRegex = /[ :-]/;
+const timeStringSplitRegex = /[ :-]/
-function escapeHTML(stringToEscape: string) {
- return stringToEscape.replace(/[^\d A-Za-z]/g, (c) => "" + c.codePointAt(0) + ";");
+function escapeHTML(stringToEscape: string): string {
+ return stringToEscape.replace(
+ /[^\d A-Za-z]/g,
+ (c) => `${c.codePointAt(0)!};`
+ )
}
function getUrlRoot(request: Request): string {
- return (
- "http://" +
- request.hostname +
- (configFunctions.getProperty("application.httpPort") === 80
- ? ""
- : ":" + configFunctions.getProperty("application.httpPort")) +
- configFunctions.getProperty("reverseProxy.urlPrefix")
- );
+ return (
+ 'http://' +
+ request.hostname +
+ (configFunctions.getProperty('application.httpPort') === 80
+ ? ''
+ : `:${configFunctions.getProperty('application.httpPort')}`) +
+ configFunctions.getProperty('reverseProxy.urlPrefix')
+ )
}
-function getWorkOrderUrl(request: Request, milestone: recordTypes.WorkOrderMilestone) {
- return getUrlRoot(request) + "/workOrders/" + milestone.workOrderId;
+function getWorkOrderUrl(
+ request: Request,
+ milestone: recordTypes.WorkOrderMilestone
+): string {
+ return `${getUrlRoot(request)}/workOrders/${milestone.workOrderId!}`
}
function buildEventSummary(milestone: recordTypes.WorkOrderMilestone): string {
- let summary =
- (milestone.workOrderMilestoneCompletionDate ? "✔ " : "") +
- (milestone.workOrderMilestoneTypeId
- ? milestone.workOrderMilestoneType
- : milestone.workOrderMilestoneDescription
- ).trim();
+ let summary =
+ (milestone.workOrderMilestoneCompletionDate ? '✔ ' : '') +
+ (milestone.workOrderMilestoneTypeId
+ ? milestone.workOrderMilestoneType
+ : milestone.workOrderMilestoneDescription
+ ).trim()
- let occupantCount = 0;
+ let occupantCount = 0
- for (const lotOccupancy of milestone.workOrderLotOccupancies) {
- for (const occupant of lotOccupancy.lotOccupancyOccupants) {
- occupantCount += 1;
+ for (const lotOccupancy of milestone.workOrderLotOccupancies!) {
+ for (const occupant of lotOccupancy.lotOccupancyOccupants!) {
+ occupantCount += 1
- if (occupantCount === 1) {
- if (summary !== "") {
- summary += ": ";
- }
-
- summary += occupant.occupantName;
- }
+ if (occupantCount === 1) {
+ if (summary !== '') {
+ summary += ': '
}
- }
- if (occupantCount > 1) {
- summary += " plus " + (occupantCount - 1);
+ summary += occupant.occupantName
+ }
}
+ }
- return summary;
+ if (occupantCount > 1) {
+ summary += ' plus ' + (occupantCount - 1)
+ }
+
+ return summary
}
function buildEventDescriptionHTML_occupancies(
- request: Request,
- milestone: recordTypes.WorkOrderMilestone
+ request: Request,
+ milestone: recordTypes.WorkOrderMilestone
): string {
- let descriptionHTML = "";
+ let descriptionHTML = ''
- if (milestone.workOrderLotOccupancies.length > 0) {
- const urlRoot = getUrlRoot(request);
+ if (milestone.workOrderLotOccupancies!.length > 0) {
+ const urlRoot = getUrlRoot(request)
- descriptionHTML = `
- Related ${escapeHTML(configFunctions.getProperty("aliases.occupancies"))}
-
-
-
- | ${escapeHTML(configFunctions.getProperty("aliases.occupancy"))} Type |
- ${escapeHTML(configFunctions.getProperty("aliases.lot"))} |
- Start Date |
- End Date |
- ${escapeHTML(configFunctions.getProperty("aliases.occupants"))} |
-
- `;
+ descriptionHTML = `
+ Related ${escapeHTML(configFunctions.getProperty('aliases.occupancies'))}
+
+
+
+ | ${escapeHTML(
+ configFunctions.getProperty('aliases.occupancy')
+ )} Type |
+ ${escapeHTML(configFunctions.getProperty('aliases.lot'))} |
+ Start Date |
+ End Date |
+ ${escapeHTML(configFunctions.getProperty('aliases.occupants'))} |
+
+ `
- for (const occupancy of milestone.workOrderLotOccupancies) {
- descriptionHTML +=
- `
- |
-
- ${escapeHTML(occupancy.occupancyType)}
-
- |
-
- ${occupancy.lotName ? escapeHTML(occupancy.lotName) : "(Not Set)"}
- |
-
- ${occupancy.occupancyStartDateString}
- | ` +
- "" +
- (occupancy.occupancyEndDate ? occupancy.occupancyEndDateString : "(No End Date)") +
- " | " +
- "";
-
- for (const occupant of occupancy.lotOccupancyOccupants) {
- descriptionHTML +=
- escapeHTML(occupant.lotOccupantType) +
- ": " +
- escapeHTML(occupant.occupantName) +
- " ";
+ for (const occupancy of milestone.workOrderLotOccupancies!) {
+ descriptionHTML += ` |
+ |
+
+ ${escapeHTML(occupancy.occupancyType!)}
+
+ |
+
+ ${occupancy.lotName ? escapeHTML(occupancy.lotName) : '(Not Set)'}
+ |
+
+ ${occupancy.occupancyStartDateString!}
+ |
+
+ ${
+ occupancy.occupancyEndDate
+ ? occupancy.occupancyEndDateString
+ : '(No End Date)'
}
+ |
+ `
- descriptionHTML += " |
";
- }
+ for (const occupant of occupancy.lotOccupancyOccupants!) {
+ descriptionHTML +=
+ escapeHTML(occupant.lotOccupantType!) +
+ ': ' +
+ escapeHTML(occupant.occupantName!) +
+ '
'
+ }
- descriptionHTML += "
";
+ descriptionHTML += ''
}
- return descriptionHTML;
+ descriptionHTML += '
'
+ }
+
+ return descriptionHTML
}
function buildEventDescriptionHTML_lots(
- request: Request,
- milestone: recordTypes.WorkOrderMilestone
+ request: Request,
+ milestone: recordTypes.WorkOrderMilestone
): string {
- let descriptionHTML = "";
+ let descriptionHTML = ''
- if (milestone.workOrderLots.length > 0) {
- const urlRoot = getUrlRoot(request);
+ if (milestone.workOrderLots.length > 0) {
+ const urlRoot = getUrlRoot(request)
- descriptionHTML +=
- "Related " +
- escapeHTML(configFunctions.getProperty("aliases.lots")) +
- "
" +
- '' +
- `
- ${escapeHTML(configFunctions.getProperty("aliases.lot"))} Type
+ descriptionHTML +=
+ 'Related ' +
+ escapeHTML(configFunctions.getProperty('aliases.lots')) +
+ '' +
+ '' +
+ `|
+ ${escapeHTML(configFunctions.getProperty('aliases.lot'))} Type
|
- ${escapeHTML(configFunctions.getProperty("aliases.map"))}
+ ${escapeHTML(configFunctions.getProperty('aliases.map'))}
|
- ${escapeHTML(configFunctions.getProperty("aliases.lot"))} Type
+ ${escapeHTML(configFunctions.getProperty('aliases.lot'))} Type
| ` +
- "Status | " +
- " " +
- "";
+ 'Status | ' +
+ '' +
+ ''
- for (const lot of milestone.workOrderLots) {
- descriptionHTML +=
- "" +
- ("| " +
- '' +
- escapeHTML(lot.lotName) +
- " | ") +
- `${escapeHTML(lot.mapName)} | ` +
- `${escapeHTML(lot.lotType)} | ` +
- `${escapeHTML(lot.lotStatus)} | ` +
- " ";
- }
-
- descriptionHTML += " ";
+ for (const lot of milestone.workOrderLots!) {
+ descriptionHTML +=
+ ' |
' +
+ ('| ' +
+ '' +
+ escapeHTML(lot.lotName ?? '') +
+ ' | ') +
+ `${escapeHTML(lot.mapName ?? '')} | ` +
+ `${escapeHTML(lot.lotType ?? '')} | ` +
+ `${escapeHTML(lot.lotStatus ?? '')} | ` +
+ '
'
}
- return descriptionHTML;
+ descriptionHTML += '
'
+ }
+
+ return descriptionHTML
}
function buildEventDescriptionHTML_prints(
- request: Request,
- milestone: recordTypes.WorkOrderMilestone
+ request: Request,
+ milestone: recordTypes.WorkOrderMilestone
): string {
- let descriptionHTML = "";
+ let descriptionHTML = ''
- const prints = configFunctions.getProperty("settings.workOrders.prints");
+ const prints = configFunctions.getProperty('settings.workOrders.prints')
- if (prints.length > 0) {
- const urlRoot = getUrlRoot(request);
+ if (prints.length > 0) {
+ const urlRoot = getUrlRoot(request)
- descriptionHTML += "Prints
";
+ descriptionHTML += 'Prints
'
- for (const printName of prints) {
- const printConfig = getPrintConfig(printName);
+ for (const printName of prints) {
+ const printConfig = getPrintConfig(printName)
- if (printConfig) {
- descriptionHTML +=
- "" +
- escapeHTML(printConfig.title) +
- "
" +
- (urlRoot + "/print/" + printName + "/?workOrderId=" + milestone.workOrderId) +
- "
";
- }
- }
+ if (printConfig) {
+ descriptionHTML +=
+ '' +
+ escapeHTML(printConfig.title) +
+ '
' +
+ (urlRoot +
+ '/print/' +
+ printName +
+ '/?workOrderId=' +
+ milestone.workOrderId) +
+ '
'
+ }
}
+ }
- return descriptionHTML;
+ return descriptionHTML
}
function buildEventDescriptionHTML(
- request: Request,
- milestone: recordTypes.WorkOrderMilestone
+ request: Request,
+ milestone: recordTypes.WorkOrderMilestone
): string {
- const workOrderUrl = getWorkOrderUrl(request, milestone);
+ const workOrderUrl = getWorkOrderUrl(request, milestone)
- let descriptionHTML = `Milestone Description
- ${escapeHTML(milestone.workOrderMilestoneDescription)}
- Work Order #${milestone.workOrderNumber}
- ${escapeHTML(milestone.workOrderDescription)}
- ${workOrderUrl}
`;
+ let descriptionHTML = `Milestone Description
+ ${escapeHTML(milestone.workOrderMilestoneDescription ?? '')}
+ Work Order #${milestone.workOrderNumber ?? ''}
+ ${escapeHTML(milestone.workOrderDescription ?? '')}
+ ${workOrderUrl}
`
- descriptionHTML += buildEventDescriptionHTML_occupancies(request, milestone);
- descriptionHTML += buildEventDescriptionHTML_lots(request, milestone);
- descriptionHTML += buildEventDescriptionHTML_prints(request, milestone);
+ descriptionHTML += buildEventDescriptionHTML_occupancies(request, milestone)
+ descriptionHTML += buildEventDescriptionHTML_lots(request, milestone)
+ descriptionHTML += buildEventDescriptionHTML_prints(request, milestone)
- return descriptionHTML;
+ return descriptionHTML
}
-function buildEventCategoryList(milestone: recordTypes.WorkOrderMilestone): string[] {
- const categories: string[] = [];
+function buildEventCategoryList(
+ milestone: recordTypes.WorkOrderMilestone
+): string[] {
+ const categories: string[] = []
- if (milestone.workOrderMilestoneTypeId) {
- categories.push(milestone.workOrderMilestoneType, milestone.workOrderType);
- }
+ if (milestone.workOrderMilestoneTypeId) {
+ categories.push(milestone.workOrderMilestoneType, milestone.workOrderType)
+ }
- if (milestone.workOrderMilestoneCompletionDate) {
- categories.push("Completed");
- }
+ if (milestone.workOrderMilestoneCompletionDate) {
+ categories.push('Completed')
+ }
- return categories;
+ return categories
}
function buildEventLocation(milestone: recordTypes.WorkOrderMilestone): string {
- const lotNames = [];
+ const lotNames: string[] = []
- if (milestone.workOrderLots.length > 0) {
- for (const lot of milestone.workOrderLots) {
- lotNames.push(lot.mapName + ": " + lot.lotName);
- }
+ if (milestone.workOrderLots!.length > 0) {
+ for (const lot of milestone.workOrderLots!) {
+ lotNames.push(`${lot.mapName ?? ''}: ${lot.lotName ?? ''}`)
}
- return lotNames.join(", ");
+ }
+ return lotNames.join(', ')
}
export const handler: RequestHandler = (request, response) => {
- const urlRoot = getUrlRoot(request);
+ const urlRoot = getUrlRoot(request)
- /*
- * Get work order milestones
- */
+ /*
+ * Get work order milestones
+ */
- const workOrderMilestoneFilters: WorkOrderMilestoneFilters = {
- workOrderTypeIds: request.query.workOrderTypeIds as string,
- workOrderMilestoneTypeIds: request.query.workOrderMilestoneTypeIds as string
- };
+ const workOrderMilestoneFilters: WorkOrderMilestoneFilters = {
+ workOrderTypeIds: request.query.workOrderTypeIds as string,
+ workOrderMilestoneTypeIds: request.query.workOrderMilestoneTypeIds as string
+ }
- if (request.query.workOrderId) {
- workOrderMilestoneFilters.workOrderId = request.query.workOrderId as string;
- } else {
- workOrderMilestoneFilters.workOrderMilestoneDateFilter = "recent";
+ if (request.query.workOrderId) {
+ workOrderMilestoneFilters.workOrderId = request.query.workOrderId as string
+ } else {
+ workOrderMilestoneFilters.workOrderMilestoneDateFilter = 'recent'
+ }
+
+ const workOrderMilestones = getWorkOrderMilestones(
+ workOrderMilestoneFilters,
+ {
+ includeWorkOrders: true,
+ orderBy: 'date'
+ }
+ )
+
+ /*
+ * Create calendar object
+ */
+
+ const calendar = ical({
+ name: 'Work Order Milestone Calendar',
+ url: urlRoot + '/workOrders'
+ })
+
+ if (request.query.workOrderId && workOrderMilestones.length > 0) {
+ calendar.name(`Work Order #${workOrderMilestones[0].workOrderNumber}`)
+ calendar.url(urlRoot + '/workOrders/' + workOrderMilestones[0].workOrderId)
+ }
+
+ calendar.prodId({
+ company: calendarCompany,
+ product: calendarProduct
+ })
+
+ /*
+ * Loop through milestones
+ */
+
+ for (const milestone of workOrderMilestones) {
+ const milestoneTimePieces = (
+ milestone.workOrderMilestoneDateString +
+ ' ' +
+ milestone.workOrderMilestoneTimeString
+ ).split(timeStringSplitRegex)
+
+ const milestoneDate = new Date(
+ Number.parseInt(milestoneTimePieces[0], 10),
+ Number.parseInt(milestoneTimePieces[1], 10) - 1,
+ Number.parseInt(milestoneTimePieces[2], 10),
+ Number.parseInt(milestoneTimePieces[3], 10),
+ Number.parseInt(milestoneTimePieces[4], 10)
+ )
+
+ const milestoneEndDate = new Date(milestoneDate.getTime())
+ milestoneEndDate.setHours(milestoneEndDate.getHours() + 1)
+
+ // Build summary (title in Outlook)
+
+ const summary = buildEventSummary(milestone)
+
+ // Build URL
+
+ const workOrderUrl = getWorkOrderUrl(request, milestone)
+
+ // Create event
+
+ const eventData: ICalEventData = {
+ start: milestoneDate,
+ created: new Date(milestone.recordCreate_timeMillis),
+ stamp: new Date(milestone.recordCreate_timeMillis),
+ lastModified: new Date(
+ Math.max(
+ milestone.recordUpdate_timeMillis,
+ milestone.workOrderRecordUpdate_timeMillis
+ )
+ ),
+ allDay: !milestone.workOrderMilestoneTime,
+ summary,
+ url: workOrderUrl
}
- const workOrderMilestones = getWorkOrderMilestones(workOrderMilestoneFilters, {
- includeWorkOrders: true,
- orderBy: "date"
- });
-
- /*
- * Create calendar object
- */
-
- const calendar = ical({
- name: "Work Order Milestone Calendar",
- url: urlRoot + "/workOrders"
- });
-
- if (request.query.workOrderId && workOrderMilestones.length > 0) {
- calendar.name(`Work Order #${workOrderMilestones[0].workOrderNumber}`);
- calendar.url(urlRoot + "/workOrders/" + workOrderMilestones[0].workOrderId);
+ if (!eventData.allDay) {
+ eventData.end = milestoneEndDate
}
- calendar.prodId({
- company: calendarCompany,
- product: calendarProduct
- });
+ const calendarEvent = calendar.createEvent(eventData)
- /*
- * Loop through milestones
- */
+ // Build description
- for (const milestone of workOrderMilestones) {
- const milestoneTimePieces = (
- milestone.workOrderMilestoneDateString +
- " " +
- milestone.workOrderMilestoneTimeString
- ).split(timeStringSplitRegex);
+ const descriptionHTML = buildEventDescriptionHTML(request, milestone)
- const milestoneDate = new Date(
- Number.parseInt(milestoneTimePieces[0], 10),
- Number.parseInt(milestoneTimePieces[1], 10) - 1,
- Number.parseInt(milestoneTimePieces[2], 10),
- Number.parseInt(milestoneTimePieces[3], 10),
- Number.parseInt(milestoneTimePieces[4], 10)
- );
+ calendarEvent.description({
+ plain: workOrderUrl,
+ html: descriptionHTML
+ })
- const milestoneEndDate = new Date(milestoneDate.getTime());
- milestoneEndDate.setHours(milestoneEndDate.getHours() + 1);
+ // Set status
- // Build summary (title in Outlook)
+ if (milestone.workOrderMilestoneCompletionDate) {
+ calendarEvent.status(ICalEventStatus.CONFIRMED)
+ }
- const summary = buildEventSummary(milestone);
+ // Add categories
- // Build URL
+ const categories = buildEventCategoryList(milestone)
+ for (const category of categories) {
+ calendarEvent.createCategory({
+ name: category
+ })
+ }
- const workOrderUrl = getWorkOrderUrl(request, milestone);
+ // Set location
- // Create event
+ const location = buildEventLocation(milestone)
+ calendarEvent.location(location)
- const eventData: ICalEventData = {
- start: milestoneDate,
- created: new Date(milestone.recordCreate_timeMillis),
- stamp: new Date(milestone.recordCreate_timeMillis),
- lastModified: new Date(
- Math.max(
- milestone.recordUpdate_timeMillis,
- milestone.workOrderRecordUpdate_timeMillis
- )
- ),
- allDay: !milestone.workOrderMilestoneTime,
- summary,
- url: workOrderUrl
- };
+ // Set organizer / attendees
- if (!eventData.allDay) {
- eventData.end = milestoneEndDate;
- }
-
- const calendarEvent = calendar.createEvent(eventData);
-
- // Build description
-
- const descriptionHTML = buildEventDescriptionHTML(request, milestone);
-
- calendarEvent.description({
- plain: workOrderUrl,
- html: descriptionHTML
- });
-
- // Set status
-
- if (milestone.workOrderMilestoneCompletionDate) {
- calendarEvent.status(ICalEventStatus.CONFIRMED);
- }
-
- // Add categories
-
- const categories = buildEventCategoryList(milestone);
- for (const category of categories) {
- calendarEvent.createCategory({
- name: category
- });
- }
-
- // Set location
-
- const location = buildEventLocation(milestone);
- calendarEvent.location(location);
-
- // Set organizer / attendees
-
- if (milestone.workOrderLotOccupancies.length > 0) {
- let organizerSet = false;
- for (const lotOccupancy of milestone.workOrderLotOccupancies) {
- for (const occupant of lotOccupancy.lotOccupancyOccupants) {
- if (organizerSet) {
- calendarEvent.createAttendee({
- name: occupant.occupantName,
- email: configFunctions.getProperty(
- "settings.workOrders.calendarEmailAddress"
- )
- });
- } else {
- calendarEvent.organizer({
- name: occupant.occupantName,
- email: configFunctions.getProperty(
- "settings.workOrders.calendarEmailAddress"
- )
- });
- organizerSet = true;
- }
- }
- }
- } else {
+ if (milestone.workOrderLotOccupancies.length > 0) {
+ let organizerSet = false
+ for (const lotOccupancy of milestone.workOrderLotOccupancies) {
+ for (const occupant of lotOccupancy.lotOccupancyOccupants) {
+ if (organizerSet) {
+ calendarEvent.createAttendee({
+ name: occupant.occupantName,
+ email: configFunctions.getProperty(
+ 'settings.workOrders.calendarEmailAddress'
+ )
+ })
+ } else {
calendarEvent.organizer({
- name: milestone.recordCreate_userName,
- email: configFunctions.getProperty("settings.workOrders.calendarEmailAddress")
- });
+ name: occupant.occupantName,
+ email: configFunctions.getProperty(
+ 'settings.workOrders.calendarEmailAddress'
+ )
+ })
+ organizerSet = true
+ }
}
+ }
+ } else {
+ calendarEvent.organizer({
+ name: milestone.recordCreate_userName,
+ email: configFunctions.getProperty(
+ 'settings.workOrders.calendarEmailAddress'
+ )
+ })
}
+ }
- calendar.serve(response);
-};
+ calendar.serve(response)
+}
-export default handler;
+export default handler
diff --git a/handlers/lotOccupancies-get/edit.d.ts b/handlers/lotOccupancies-get/edit.d.ts
index 9621c611..7151ed90 100644
--- a/handlers/lotOccupancies-get/edit.d.ts
+++ b/handlers/lotOccupancies-get/edit.d.ts
@@ -1,3 +1,3 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express';
export declare const handler: RequestHandler;
export default handler;
diff --git a/handlers/lotOccupancies-get/edit.js b/handlers/lotOccupancies-get/edit.js
index e3096fe0..782b6903 100644
--- a/handlers/lotOccupancies-get/edit.js
+++ b/handlers/lotOccupancies-get/edit.js
@@ -1,12 +1,12 @@
-import { getLotOccupantTypes, getLotStatuses, getLotTypes, getOccupancyTypePrintsById, getOccupancyTypes, getWorkOrderTypes } from "../../helpers/functions.cache.js";
-import * as configFunctions from "../../helpers/functions.config.js";
-import { getLotOccupancy } from "../../helpers/lotOccupancyDB/getLotOccupancy.js";
-import { getMaps } from "../../helpers/lotOccupancyDB/getMaps.js";
+import { getLotOccupantTypes, getLotStatuses, getLotTypes, getOccupancyTypePrintsById, getOccupancyTypes, getWorkOrderTypes } from '../../helpers/functions.cache.js';
+import * as configFunctions from '../../helpers/functions.config.js';
+import { getLotOccupancy } from '../../helpers/lotOccupancyDB/getLotOccupancy.js';
+import { getMaps } from '../../helpers/lotOccupancyDB/getMaps.js';
export const handler = (request, response) => {
const lotOccupancy = getLotOccupancy(request.params.lotOccupancyId);
if (!lotOccupancy) {
- return response.redirect(configFunctions.getProperty("reverseProxy.urlPrefix") +
- "/lotOccupancies/?error=lotOccupancyIdNotFound");
+ response.redirect(`${configFunctions.getProperty('reverseProxy.urlPrefix')}/lotOccupancies/?error=lotOccupancyIdNotFound`);
+ return;
}
const occupancyTypePrints = getOccupancyTypePrintsById(lotOccupancy.occupancyTypeId);
const occupancyTypes = getOccupancyTypes();
@@ -15,8 +15,8 @@ export const handler = (request, response) => {
const lotStatuses = getLotStatuses();
const maps = getMaps();
const workOrderTypes = getWorkOrderTypes();
- return response.render("lotOccupancy-edit", {
- headTitle: `${configFunctions.getProperty("aliases.occupancy")} Update`,
+ response.render('lotOccupancy-edit', {
+ headTitle: `${configFunctions.getProperty('aliases.occupancy')} Update`,
lotOccupancy,
occupancyTypePrints,
occupancyTypes,
diff --git a/handlers/lotOccupancies-get/edit.ts b/handlers/lotOccupancies-get/edit.ts
index a24e4068..af532e69 100644
--- a/handlers/lotOccupancies-get/edit.ts
+++ b/handlers/lotOccupancies-get/edit.ts
@@ -1,52 +1,56 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express'
import {
- getLotOccupantTypes,
- getLotStatuses,
- getLotTypes,
- getOccupancyTypePrintsById,
- getOccupancyTypes,
- getWorkOrderTypes
-} from "../../helpers/functions.cache.js";
+ getLotOccupantTypes,
+ getLotStatuses,
+ getLotTypes,
+ getOccupancyTypePrintsById,
+ getOccupancyTypes,
+ getWorkOrderTypes
+} from '../../helpers/functions.cache.js'
-import * as configFunctions from "../../helpers/functions.config.js";
+import * as configFunctions from '../../helpers/functions.config.js'
-import { getLotOccupancy } from "../../helpers/lotOccupancyDB/getLotOccupancy.js";
-import { getMaps } from "../../helpers/lotOccupancyDB/getMaps.js";
+import { getLotOccupancy } from '../../helpers/lotOccupancyDB/getLotOccupancy.js'
+import { getMaps } from '../../helpers/lotOccupancyDB/getMaps.js'
export const handler: RequestHandler = (request, response) => {
- const lotOccupancy = getLotOccupancy(request.params.lotOccupancyId);
+ const lotOccupancy = getLotOccupancy(request.params.lotOccupancyId)
- if (!lotOccupancy) {
- return response.redirect(
- configFunctions.getProperty("reverseProxy.urlPrefix") +
- "/lotOccupancies/?error=lotOccupancyIdNotFound"
- );
- }
+ if (!lotOccupancy) {
+ response.redirect(
+ `${configFunctions.getProperty(
+ 'reverseProxy.urlPrefix'
+ )}/lotOccupancies/?error=lotOccupancyIdNotFound`
+ )
+ return
+ }
- const occupancyTypePrints = getOccupancyTypePrintsById(lotOccupancy.occupancyTypeId);
+ const occupancyTypePrints = getOccupancyTypePrintsById(
+ lotOccupancy.occupancyTypeId!
+ )
- const occupancyTypes = getOccupancyTypes();
- const lotOccupantTypes = getLotOccupantTypes();
- const lotTypes = getLotTypes();
- const lotStatuses = getLotStatuses();
- const maps = getMaps();
- const workOrderTypes = getWorkOrderTypes();
+ const occupancyTypes = getOccupancyTypes()
+ const lotOccupantTypes = getLotOccupantTypes()
+ const lotTypes = getLotTypes()
+ const lotStatuses = getLotStatuses()
+ const maps = getMaps()
+ const workOrderTypes = getWorkOrderTypes()
- return response.render("lotOccupancy-edit", {
- headTitle: `${configFunctions.getProperty("aliases.occupancy")} Update`,
- lotOccupancy,
- occupancyTypePrints,
+ response.render('lotOccupancy-edit', {
+ headTitle: `${configFunctions.getProperty('aliases.occupancy')} Update`,
+ lotOccupancy,
+ occupancyTypePrints,
- occupancyTypes,
- lotOccupantTypes,
- lotTypes,
- lotStatuses,
- maps,
- workOrderTypes,
+ occupancyTypes,
+ lotOccupantTypes,
+ lotTypes,
+ lotStatuses,
+ maps,
+ workOrderTypes,
- isCreate: false
- });
-};
+ isCreate: false
+ })
+}
-export default handler;
+export default handler
diff --git a/handlers/lotOccupancies-get/view.d.ts b/handlers/lotOccupancies-get/view.d.ts
index 9621c611..7151ed90 100644
--- a/handlers/lotOccupancies-get/view.d.ts
+++ b/handlers/lotOccupancies-get/view.d.ts
@@ -1,3 +1,3 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express';
export declare const handler: RequestHandler;
export default handler;
diff --git a/handlers/lotOccupancies-get/view.js b/handlers/lotOccupancies-get/view.js
index 5a88d00d..3b58f5b5 100644
--- a/handlers/lotOccupancies-get/view.js
+++ b/handlers/lotOccupancies-get/view.js
@@ -1,15 +1,16 @@
-import { getOccupancyTypePrintsById } from "../../helpers/functions.cache.js";
-import * as configFunctions from "../../helpers/functions.config.js";
-import { getLotOccupancy } from "../../helpers/lotOccupancyDB/getLotOccupancy.js";
+import { getOccupancyTypePrintsById } from '../../helpers/functions.cache.js';
+import * as configFunctions from '../../helpers/functions.config.js';
+import { getLotOccupancy } from '../../helpers/lotOccupancyDB/getLotOccupancy.js';
export const handler = (request, response) => {
const lotOccupancy = getLotOccupancy(request.params.lotOccupancyId);
if (!lotOccupancy) {
- return response.redirect(configFunctions.getProperty("reverseProxy.urlPrefix") +
- "/lotOccupancies/?error=lotOccupancyIdNotFound");
+ response.redirect(configFunctions.getProperty('reverseProxy.urlPrefix') +
+ '/lotOccupancies/?error=lotOccupancyIdNotFound');
+ return;
}
const occupancyTypePrints = getOccupancyTypePrintsById(lotOccupancy.occupancyTypeId);
- return response.render("lotOccupancy-view", {
- headTitle: `${configFunctions.getProperty("aliases.occupancy")} View`,
+ response.render('lotOccupancy-view', {
+ headTitle: `${configFunctions.getProperty('aliases.occupancy')} View`,
lotOccupancy,
occupancyTypePrints
});
diff --git a/handlers/lotOccupancies-get/view.ts b/handlers/lotOccupancies-get/view.ts
index 7ceb5301..ec998401 100644
--- a/handlers/lotOccupancies-get/view.ts
+++ b/handlers/lotOccupancies-get/view.ts
@@ -1,27 +1,30 @@
-import type { RequestHandler } from "express";
-import { getOccupancyTypePrintsById } from "../../helpers/functions.cache.js";
+import type { RequestHandler } from 'express'
+import { getOccupancyTypePrintsById } from '../../helpers/functions.cache.js'
-import * as configFunctions from "../../helpers/functions.config.js";
+import * as configFunctions from '../../helpers/functions.config.js'
-import { getLotOccupancy } from "../../helpers/lotOccupancyDB/getLotOccupancy.js";
+import { getLotOccupancy } from '../../helpers/lotOccupancyDB/getLotOccupancy.js'
export const handler: RequestHandler = (request, response) => {
- const lotOccupancy = getLotOccupancy(request.params.lotOccupancyId);
+ const lotOccupancy = getLotOccupancy(request.params.lotOccupancyId)
- if (!lotOccupancy) {
- return response.redirect(
- configFunctions.getProperty("reverseProxy.urlPrefix") +
- "/lotOccupancies/?error=lotOccupancyIdNotFound"
- );
- }
+ if (!lotOccupancy) {
+ response.redirect(
+ configFunctions.getProperty('reverseProxy.urlPrefix') +
+ '/lotOccupancies/?error=lotOccupancyIdNotFound'
+ )
+ return
+ }
- const occupancyTypePrints = getOccupancyTypePrintsById(lotOccupancy.occupancyTypeId);
+ const occupancyTypePrints = getOccupancyTypePrintsById(
+ lotOccupancy.occupancyTypeId!
+ )
- return response.render("lotOccupancy-view", {
- headTitle: `${configFunctions.getProperty("aliases.occupancy")} View`,
- lotOccupancy,
- occupancyTypePrints
- });
-};
+ response.render('lotOccupancy-view', {
+ headTitle: `${configFunctions.getProperty('aliases.occupancy')} View`,
+ lotOccupancy,
+ occupancyTypePrints
+ })
+}
-export default handler;
+export default handler
diff --git a/handlers/lotOccupancies-post/doGetFees.d.ts b/handlers/lotOccupancies-post/doGetFees.d.ts
index 9621c611..7151ed90 100644
--- a/handlers/lotOccupancies-post/doGetFees.d.ts
+++ b/handlers/lotOccupancies-post/doGetFees.d.ts
@@ -1,3 +1,3 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express';
export declare const handler: RequestHandler;
export default handler;
diff --git a/handlers/lotOccupancies-post/doGetFees.js b/handlers/lotOccupancies-post/doGetFees.js
index 7bd98e2a..7c8f27f0 100644
--- a/handlers/lotOccupancies-post/doGetFees.js
+++ b/handlers/lotOccupancies-post/doGetFees.js
@@ -1,5 +1,5 @@
-import { getLotOccupancy } from "../../helpers/lotOccupancyDB/getLotOccupancy.js";
-import { getFeeCategories } from "../../helpers/lotOccupancyDB/getFeeCategories.js";
+import { getLotOccupancy } from '../../helpers/lotOccupancyDB/getLotOccupancy.js';
+import { getFeeCategories } from '../../helpers/lotOccupancyDB/getFeeCategories.js';
export const handler = (request, response) => {
const lotOccupancyId = request.body.lotOccupancyId;
const lotOccupancy = getLotOccupancy(lotOccupancyId);
diff --git a/handlers/lotOccupancies-post/doGetFees.ts b/handlers/lotOccupancies-post/doGetFees.ts
index 5549907f..16f81366 100644
--- a/handlers/lotOccupancies-post/doGetFees.ts
+++ b/handlers/lotOccupancies-post/doGetFees.ts
@@ -1,27 +1,27 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express'
-import { getLotOccupancy } from "../../helpers/lotOccupancyDB/getLotOccupancy.js";
+import { getLotOccupancy } from '../../helpers/lotOccupancyDB/getLotOccupancy.js'
-import { getFeeCategories } from "../../helpers/lotOccupancyDB/getFeeCategories.js";
+import { getFeeCategories } from '../../helpers/lotOccupancyDB/getFeeCategories.js'
export const handler: RequestHandler = (request, response) => {
- const lotOccupancyId = request.body.lotOccupancyId;
+ const lotOccupancyId = request.body.lotOccupancyId
- const lotOccupancy = getLotOccupancy(lotOccupancyId);
+ const lotOccupancy = getLotOccupancy(lotOccupancyId)!
- const feeCategories = getFeeCategories(
- {
- occupancyTypeId: lotOccupancy.occupancyTypeId,
- lotTypeId: lotOccupancy.lotTypeId
- },
- {
- includeFees: true
- }
- );
+ const feeCategories = getFeeCategories(
+ {
+ occupancyTypeId: lotOccupancy.occupancyTypeId,
+ lotTypeId: lotOccupancy.lotTypeId
+ },
+ {
+ includeFees: true
+ }
+ )
- response.json({
- feeCategories
- });
-};
+ response.json({
+ feeCategories
+ })
+}
-export default handler;
+export default handler
diff --git a/handlers/lotOccupancies-post/doGetOccupancyTypeFields.d.ts b/handlers/lotOccupancies-post/doGetOccupancyTypeFields.d.ts
index 9621c611..7151ed90 100644
--- a/handlers/lotOccupancies-post/doGetOccupancyTypeFields.d.ts
+++ b/handlers/lotOccupancies-post/doGetOccupancyTypeFields.d.ts
@@ -1,3 +1,3 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express';
export declare const handler: RequestHandler;
export default handler;
diff --git a/handlers/lotOccupancies-post/doGetOccupancyTypeFields.js b/handlers/lotOccupancies-post/doGetOccupancyTypeFields.js
index d4264e69..eed327d3 100644
--- a/handlers/lotOccupancies-post/doGetOccupancyTypeFields.js
+++ b/handlers/lotOccupancies-post/doGetOccupancyTypeFields.js
@@ -1,8 +1,8 @@
-import { getOccupancyTypeById, getAllOccupancyTypeFields } from "../../helpers/functions.cache.js";
-export const handler = async (request, response) => {
+import { getOccupancyTypeById, getAllOccupancyTypeFields } from '../../helpers/functions.cache.js';
+export const handler = (request, response) => {
const occupancyTypeFields = getAllOccupancyTypeFields();
const result = getOccupancyTypeById(Number.parseInt(request.body.occupancyTypeId, 10));
- occupancyTypeFields.push(...result.occupancyTypeFields);
+ occupancyTypeFields.push(...(result.occupancyTypeFields ?? []));
response.json({
occupancyTypeFields
});
diff --git a/handlers/lotOccupancies-post/doGetOccupancyTypeFields.ts b/handlers/lotOccupancies-post/doGetOccupancyTypeFields.ts
index 18ca5e8e..91ff08b7 100644
--- a/handlers/lotOccupancies-post/doGetOccupancyTypeFields.ts
+++ b/handlers/lotOccupancies-post/doGetOccupancyTypeFields.ts
@@ -1,17 +1,22 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express'
-import { getOccupancyTypeById, getAllOccupancyTypeFields } from "../../helpers/functions.cache.js";
+import {
+ getOccupancyTypeById,
+ getAllOccupancyTypeFields
+} from '../../helpers/functions.cache.js'
-export const handler: RequestHandler = async (request, response) => {
- const occupancyTypeFields = getAllOccupancyTypeFields();
+export const handler: RequestHandler = (request, response) => {
+ const occupancyTypeFields = getAllOccupancyTypeFields()
- const result = getOccupancyTypeById(Number.parseInt(request.body.occupancyTypeId, 10));
+ const result = getOccupancyTypeById(
+ Number.parseInt(request.body.occupancyTypeId, 10)
+ )!
- occupancyTypeFields.push(...result.occupancyTypeFields);
+ occupancyTypeFields.push(...(result.occupancyTypeFields ?? []))
- response.json({
- occupancyTypeFields
- });
-};
+ response.json({
+ occupancyTypeFields
+ })
+}
-export default handler;
+export default handler
diff --git a/handlers/lots-post/doGetLotTypeFields.d.ts b/handlers/lots-post/doGetLotTypeFields.d.ts
index 9621c611..7151ed90 100644
--- a/handlers/lots-post/doGetLotTypeFields.d.ts
+++ b/handlers/lots-post/doGetLotTypeFields.d.ts
@@ -1,3 +1,3 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express';
export declare const handler: RequestHandler;
export default handler;
diff --git a/handlers/lots-post/doGetLotTypeFields.js b/handlers/lots-post/doGetLotTypeFields.js
index e8b1643a..c9f62d25 100644
--- a/handlers/lots-post/doGetLotTypeFields.js
+++ b/handlers/lots-post/doGetLotTypeFields.js
@@ -1,5 +1,5 @@
-import { getLotTypeById } from "../../helpers/functions.cache.js";
-export const handler = async (request, response) => {
+import { getLotTypeById } from '../../helpers/functions.cache.js';
+export const handler = (request, response) => {
const lotType = getLotTypeById(Number.parseInt(request.body.lotTypeId, 10));
response.json({
lotTypeFields: lotType.lotTypeFields
diff --git a/handlers/lots-post/doGetLotTypeFields.ts b/handlers/lots-post/doGetLotTypeFields.ts
index 6c3ff5f5..19c956b4 100644
--- a/handlers/lots-post/doGetLotTypeFields.ts
+++ b/handlers/lots-post/doGetLotTypeFields.ts
@@ -1,13 +1,13 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express'
-import { getLotTypeById } from "../../helpers/functions.cache.js";
+import { getLotTypeById } from '../../helpers/functions.cache.js'
-export const handler: RequestHandler = async (request, response) => {
- const lotType = getLotTypeById(Number.parseInt(request.body.lotTypeId, 10));
+export const handler: RequestHandler = (request, response) => {
+ const lotType = getLotTypeById(Number.parseInt(request.body.lotTypeId, 10))!
- response.json({
- lotTypeFields: lotType.lotTypeFields
- });
-};
+ response.json({
+ lotTypeFields: lotType.lotTypeFields
+ })
+}
-export default handler;
+export default handler
diff --git a/handlers/reports-get/reportName.d.ts b/handlers/reports-get/reportName.d.ts
index 9621c611..7151ed90 100644
--- a/handlers/reports-get/reportName.d.ts
+++ b/handlers/reports-get/reportName.d.ts
@@ -1,3 +1,3 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express';
export declare const handler: RequestHandler;
export default handler;
diff --git a/handlers/reports-get/reportName.js b/handlers/reports-get/reportName.js
index da913523..88b4eda9 100644
--- a/handlers/reports-get/reportName.js
+++ b/handlers/reports-get/reportName.js
@@ -1,5 +1,5 @@
-import { getReportData } from "../../helpers/lotOccupancyDB/getReportData.js";
-import papaparse from "papaparse";
+import { getReportData } from '../../helpers/lotOccupancyDB/getReportData.js';
+import papaparse from 'papaparse';
export const handler = (request, response) => {
const reportName = request.params.reportName;
let rows;
@@ -12,12 +12,12 @@ export const handler = (request, response) => {
if (!rows) {
return response.status(404).json({
success: false,
- message: "Report Not Found"
+ message: 'Report Not Found'
});
}
const csv = papaparse.unparse(rows);
- response.setHeader("Content-Disposition", "attachment; filename=" + reportName + "-" + Date.now().toString() + ".csv");
- response.setHeader("Content-Type", "text/csv");
+ response.setHeader('Content-Disposition', 'attachment; filename=' + reportName + '-' + Date.now().toString() + '.csv');
+ response.setHeader('Content-Type', 'text/csv');
response.send(csv);
};
export default handler;
diff --git a/handlers/reports-get/reportName.ts b/handlers/reports-get/reportName.ts
index 7d501698..a45e401f 100644
--- a/handlers/reports-get/reportName.ts
+++ b/handlers/reports-get/reportName.ts
@@ -1,38 +1,41 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express'
-import { getReportData, ReportParameters } from "../../helpers/lotOccupancyDB/getReportData.js";
+import {
+ getReportData,
+ ReportParameters
+} from '../../helpers/lotOccupancyDB/getReportData.js'
-import papaparse from "papaparse";
+import papaparse from 'papaparse'
export const handler: RequestHandler = (request, response) => {
- const reportName = request.params.reportName;
+ const reportName = request.params.reportName
- let rows: unknown[];
+ let rows: unknown[] | undefined
- switch (reportName) {
- default: {
- rows = getReportData(reportName, request.query as ReportParameters);
- break;
- }
+ switch (reportName) {
+ default: {
+ rows = getReportData(reportName, request.query as ReportParameters)
+ break
}
+ }
- if (!rows) {
- return response.status(404).json({
- success: false,
- message: "Report Not Found"
- });
- }
+ if (!rows) {
+ return response.status(404).json({
+ success: false,
+ message: 'Report Not Found'
+ })
+ }
- const csv = papaparse.unparse(rows);
+ const csv = papaparse.unparse(rows)
- response.setHeader(
- "Content-Disposition",
- "attachment; filename=" + reportName + "-" + Date.now().toString() + ".csv"
- );
+ response.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename=' + reportName + '-' + Date.now().toString() + '.csv'
+ )
- response.setHeader("Content-Type", "text/csv");
+ response.setHeader('Content-Type', 'text/csv')
- response.send(csv);
-};
+ response.send(csv)
+}
-export default handler;
+export default handler
diff --git a/handlers/workOrders-get/edit.d.ts b/handlers/workOrders-get/edit.d.ts
index 9621c611..7151ed90 100644
--- a/handlers/workOrders-get/edit.d.ts
+++ b/handlers/workOrders-get/edit.d.ts
@@ -1,3 +1,3 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express';
export declare const handler: RequestHandler;
export default handler;
diff --git a/handlers/workOrders-get/edit.js b/handlers/workOrders-get/edit.js
index 1010d10a..c4052a37 100644
--- a/handlers/workOrders-get/edit.js
+++ b/handlers/workOrders-get/edit.js
@@ -1,6 +1,6 @@
-import { getLotStatuses, getWorkOrderMilestoneTypes, getWorkOrderTypes } from "../../helpers/functions.cache.js";
-import * as configFunctions from "../../helpers/functions.config.js";
-import { getWorkOrder } from "../../helpers/lotOccupancyDB/getWorkOrder.js";
+import { getLotStatuses, getWorkOrderMilestoneTypes, getWorkOrderTypes } from '../../helpers/functions.cache.js';
+import * as configFunctions from '../../helpers/functions.config.js';
+import { getWorkOrder } from '../../helpers/lotOccupancyDB/getWorkOrder.js';
export const handler = (request, response) => {
const workOrder = getWorkOrder(request.params.workOrderId, {
includeLotsAndLotOccupancies: true,
@@ -8,20 +8,22 @@ export const handler = (request, response) => {
includeMilestones: true
});
if (!workOrder) {
- return response.redirect(configFunctions.getProperty("reverseProxy.urlPrefix") +
- "/workOrders/?error=workOrderIdNotFound");
+ response.redirect(configFunctions.getProperty('reverseProxy.urlPrefix') +
+ '/workOrders/?error=workOrderIdNotFound');
+ return;
}
if (workOrder.workOrderCloseDate) {
- return response.redirect(configFunctions.getProperty("reverseProxy.urlPrefix") +
- "/workOrders/" +
+ response.redirect(configFunctions.getProperty('reverseProxy.urlPrefix') +
+ '/workOrders/' +
workOrder.workOrderId.toString() +
- "/?error=workOrderIsClosed");
+ '/?error=workOrderIsClosed');
+ return;
}
const workOrderTypes = getWorkOrderTypes();
const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
const lotStatuses = getLotStatuses();
- response.render("workOrder-edit", {
- headTitle: "Work Order #" + workOrder.workOrderNumber,
+ response.render('workOrder-edit', {
+ headTitle: `Work Order #${workOrder.workOrderNumber}`,
workOrder,
isCreate: false,
workOrderTypes,
diff --git a/handlers/workOrders-get/edit.ts b/handlers/workOrders-get/edit.ts
index 44d02d09..3e9745b7 100644
--- a/handlers/workOrders-get/edit.ts
+++ b/handlers/workOrders-get/edit.ts
@@ -1,52 +1,54 @@
-import type { RequestHandler } from "express";
+import type { RequestHandler } from 'express'
import {
- getLotStatuses,
- getWorkOrderMilestoneTypes,
- getWorkOrderTypes
-} from "../../helpers/functions.cache.js";
+ getLotStatuses,
+ getWorkOrderMilestoneTypes,
+ getWorkOrderTypes
+} from '../../helpers/functions.cache.js'
-import * as configFunctions from "../../helpers/functions.config.js";
+import * as configFunctions from '../../helpers/functions.config.js'
-import { getWorkOrder } from "../../helpers/lotOccupancyDB/getWorkOrder.js";
+import { getWorkOrder } from '../../helpers/lotOccupancyDB/getWorkOrder.js'
export const handler: RequestHandler = (request, response) => {
- const workOrder = getWorkOrder(request.params.workOrderId, {
- includeLotsAndLotOccupancies: true,
- includeComments: true,
- includeMilestones: true
- });
+ const workOrder = getWorkOrder(request.params.workOrderId, {
+ includeLotsAndLotOccupancies: true,
+ includeComments: true,
+ includeMilestones: true
+ })
- if (!workOrder) {
- return response.redirect(
- configFunctions.getProperty("reverseProxy.urlPrefix") +
- "/workOrders/?error=workOrderIdNotFound"
- );
- }
+ if (!workOrder) {
+ response.redirect(
+ configFunctions.getProperty('reverseProxy.urlPrefix') +
+ '/workOrders/?error=workOrderIdNotFound'
+ )
+ return
+ }
- if (workOrder.workOrderCloseDate) {
- return response.redirect(
- configFunctions.getProperty("reverseProxy.urlPrefix") +
- "/workOrders/" +
- workOrder.workOrderId.toString() +
- "/?error=workOrderIsClosed"
- );
- }
+ if (workOrder.workOrderCloseDate) {
+ response.redirect(
+ configFunctions.getProperty('reverseProxy.urlPrefix') +
+ '/workOrders/' +
+ workOrder.workOrderId!.toString() +
+ '/?error=workOrderIsClosed'
+ )
+ return
+ }
- const workOrderTypes = getWorkOrderTypes();
+ const workOrderTypes = getWorkOrderTypes()
- const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes()
- const lotStatuses = getLotStatuses();
+ const lotStatuses = getLotStatuses()
- response.render("workOrder-edit", {
- headTitle: "Work Order #" + workOrder.workOrderNumber,
- workOrder,
- isCreate: false,
- workOrderTypes,
- workOrderMilestoneTypes,
- lotStatuses
- });
-};
+ response.render('workOrder-edit', {
+ headTitle: `Work Order #${workOrder.workOrderNumber!}`,
+ workOrder,
+ isCreate: false,
+ workOrderTypes,
+ workOrderMilestoneTypes,
+ lotStatuses
+ })
+}
-export default handler;
+export default handler
diff --git a/helpers/functions.api.d.ts b/helpers/functions.api.d.ts
index 7a142974..a04f2add 100644
--- a/helpers/functions.api.d.ts
+++ b/helpers/functions.api.d.ts
@@ -1,5 +1,5 @@
-import * as recordTypes from "../types/recordTypes";
+import * as recordTypes from '../types/recordTypes';
export declare function regenerateApiKey(userName: string): Promise;
export declare function getApiKey(userName: string): Promise;
export declare function getApiKeyFromSession(session: recordTypes.PartialSession): Promise;
-export declare function getUserNameFromApiKey(apiKey: string): Promise;
+export declare function getUserNameFromApiKey(apiKey: string): Promise;
diff --git a/helpers/functions.api.js b/helpers/functions.api.js
index 77b77fcc..4d5f3295 100644
--- a/helpers/functions.api.js
+++ b/helpers/functions.api.js
@@ -1,12 +1,12 @@
-import fs from "node:fs/promises";
-import { v4 as uuidv4 } from "uuid";
-import Debug from "debug";
-const debug = Debug("lot-occupancy-system:functions.api");
-const apiKeyPath = "data/apiKeys.json";
+import fs from 'node:fs/promises';
+import { v4 as uuidv4 } from 'uuid';
+import Debug from 'debug';
+const debug = Debug('lot-occupancy-system:functions.api');
+const apiKeyPath = 'data/apiKeys.json';
let apiKeys;
async function loadApiKeys() {
try {
- const fileData = await fs.readFile(apiKeyPath, "utf8");
+ const fileData = await fs.readFile(apiKeyPath, 'utf8');
apiKeys = JSON.parse(fileData);
}
catch (error) {
@@ -16,14 +16,14 @@ async function loadApiKeys() {
}
async function saveApiKeys() {
try {
- await fs.writeFile(apiKeyPath, JSON.stringify(apiKeys), "utf8");
+ await fs.writeFile(apiKeyPath, JSON.stringify(apiKeys), 'utf8');
}
catch (error) {
debug(error);
}
}
function generateApiKey(apiKeyPrefix) {
- return apiKeyPrefix + "-" + uuidv4() + "-" + Date.now();
+ return apiKeyPrefix + '-' + uuidv4() + '-' + Date.now();
}
export async function regenerateApiKey(userName) {
apiKeys[userName] = generateApiKey(userName);
diff --git a/helpers/functions.api.ts b/helpers/functions.api.ts
index f3b8df77..818713e7 100644
--- a/helpers/functions.api.ts
+++ b/helpers/functions.api.ts
@@ -1,66 +1,70 @@
-import fs from "node:fs/promises";
-import { v4 as uuidv4 } from "uuid";
+import fs from 'node:fs/promises'
+import { v4 as uuidv4 } from 'uuid'
-import Debug from "debug";
+import Debug from 'debug'
-import * as recordTypes from "../types/recordTypes";
+import * as recordTypes from '../types/recordTypes'
-const debug = Debug("lot-occupancy-system:functions.api");
+const debug = Debug('lot-occupancy-system:functions.api')
-const apiKeyPath = "data/apiKeys.json";
-let apiKeys: { [userName: string]: string };
+const apiKeyPath = 'data/apiKeys.json'
+let apiKeys: Record
-async function loadApiKeys() {
- try {
- const fileData = await fs.readFile(apiKeyPath, "utf8");
- apiKeys = JSON.parse(fileData);
- } catch (error) {
- debug(error);
- apiKeys = {};
- }
-}
-
-async function saveApiKeys() {
- try {
- await fs.writeFile(apiKeyPath, JSON.stringify(apiKeys), "utf8");
- } catch (error) {
- debug(error);
- }
-}
-
-function generateApiKey(apiKeyPrefix: string) {
- return apiKeyPrefix + "-" + uuidv4() + "-" + Date.now();
-}
-
-export async function regenerateApiKey(userName: string) {
- apiKeys[userName] = generateApiKey(userName);
- await saveApiKeys();
-}
-
-export async function getApiKey(userName: string) {
- if (!apiKeys) {
- await loadApiKeys();
- }
-
- if (!apiKeys[userName]) {
- await regenerateApiKey(userName);
- }
-
- return apiKeys[userName];
-}
-
-export async function getApiKeyFromSession(session: recordTypes.PartialSession) {
- return await getApiKey(session.user.userName);
-}
-
-export async function getUserNameFromApiKey(apiKey: string) {
- if (!apiKeys) {
- await loadApiKeys();
- }
-
- for (const [userName, currentApiKey] of Object.entries(apiKeys)) {
- if (apiKey === currentApiKey) {
- return userName;
- }
+async function loadApiKeys(): Promise {
+ try {
+ const fileData = await fs.readFile(apiKeyPath, 'utf8')
+ apiKeys = JSON.parse(fileData)
+ } catch (error) {
+ debug(error)
+ apiKeys = {}
+ }
+}
+
+async function saveApiKeys(): Promise {
+ try {
+ await fs.writeFile(apiKeyPath, JSON.stringify(apiKeys), 'utf8')
+ } catch (error) {
+ debug(error)
+ }
+}
+
+function generateApiKey(apiKeyPrefix: string): string {
+ return apiKeyPrefix + '-' + uuidv4() + '-' + Date.now()
+}
+
+export async function regenerateApiKey(userName: string): Promise {
+ apiKeys[userName] = generateApiKey(userName)
+ await saveApiKeys()
+}
+
+export async function getApiKey(userName: string): Promise {
+ if (!apiKeys) {
+ await loadApiKeys()
+ }
+
+ if (!apiKeys[userName]) {
+ await regenerateApiKey(userName)
+ }
+
+ return apiKeys[userName]
+}
+
+export async function getApiKeyFromSession(
+ session: recordTypes.PartialSession
+): Promise {
+ return await getApiKey(session.user!.userName)
+}
+
+export async function getUserNameFromApiKey(
+ apiKey: string
+): Promise {
+ if (!apiKeys) {
+ await loadApiKeys()
+ }
+
+ for (const [userName, currentApiKey] of Object.entries(apiKeys)) {
+ if (apiKey === currentApiKey) {
+ return userName
}
+ }
}
diff --git a/helpers/functions.authentication.js b/helpers/functions.authentication.js
index aa2af776..385bed67 100644
--- a/helpers/functions.authentication.js
+++ b/helpers/functions.authentication.js
@@ -13,7 +13,7 @@ async function authenticateViaActiveDirectory(userName, password) {
resolve(auth);
});
}
- catch (_a) {
+ catch {
resolve(false);
}
});
diff --git a/helpers/functions.cache.d.ts b/helpers/functions.cache.d.ts
index 78320b98..54c88ed3 100644
--- a/helpers/functions.cache.d.ts
+++ b/helpers/functions.cache.d.ts
@@ -1,21 +1,21 @@
-import type * as recordTypes from "../types/recordTypes";
+import type * as recordTypes from '../types/recordTypes';
export declare function getLotOccupantTypes(): recordTypes.LotOccupantType[];
-export declare function getLotOccupantTypeById(lotOccupantTypeId: number): recordTypes.LotOccupantType;
-export declare function getLotOccupantTypeByLotOccupantType(lotOccupantType: string): recordTypes.LotOccupantType;
+export declare function getLotOccupantTypeById(lotOccupantTypeId: number): recordTypes.LotOccupantType | undefined;
+export declare function getLotOccupantTypeByLotOccupantType(lotOccupantType: string): recordTypes.LotOccupantType | undefined;
export declare function getLotStatuses(): recordTypes.LotStatus[];
-export declare function getLotStatusById(lotStatusId: number): recordTypes.LotStatus;
-export declare function getLotStatusByLotStatus(lotStatus: string): recordTypes.LotStatus;
+export declare function getLotStatusById(lotStatusId: number): recordTypes.LotStatus | undefined;
+export declare function getLotStatusByLotStatus(lotStatus: string): recordTypes.LotStatus | undefined;
export declare function getLotTypes(): recordTypes.LotType[];
-export declare function getLotTypeById(lotTypeId: number): recordTypes.LotType;
-export declare function getLotTypesByLotType(lotType: string): recordTypes.LotType;
+export declare function getLotTypeById(lotTypeId: number): recordTypes.LotType | undefined;
+export declare function getLotTypesByLotType(lotType: string): recordTypes.LotType | undefined;
export declare function getOccupancyTypes(): recordTypes.OccupancyType[];
export declare function getAllOccupancyTypeFields(): recordTypes.OccupancyTypeField[];
-export declare function getOccupancyTypeById(occupancyTypeId: number): recordTypes.OccupancyType;
-export declare function getOccupancyTypeByOccupancyType(occupancyTypeString: string): recordTypes.OccupancyType;
+export declare function getOccupancyTypeById(occupancyTypeId: number): recordTypes.OccupancyType | undefined;
+export declare function getOccupancyTypeByOccupancyType(occupancyTypeString: string): recordTypes.OccupancyType | undefined;
export declare function getOccupancyTypePrintsById(occupancyTypeId: number): string[];
export declare function getWorkOrderTypes(): recordTypes.WorkOrderType[];
-export declare function getWorkOrderTypeById(workOrderTypeId: number): recordTypes.WorkOrderType;
+export declare function getWorkOrderTypeById(workOrderTypeId: number): recordTypes.WorkOrderType | undefined;
export declare function getWorkOrderMilestoneTypes(): recordTypes.WorkOrderMilestoneType[];
-export declare function getWorkOrderMilestoneTypeByWorkOrderMilestoneTypeId(workOrderMilestoneTypeId: number): recordTypes.WorkOrderMilestoneType;
-export declare function getWorkOrderMilestoneTypeByWorkOrderMilestoneType(workOrderMilestoneTypeString: string): recordTypes.WorkOrderMilestoneType;
+export declare function getWorkOrderMilestoneTypeByWorkOrderMilestoneTypeId(workOrderMilestoneTypeId: number): recordTypes.WorkOrderMilestoneType | undefined;
+export declare function getWorkOrderMilestoneTypeByWorkOrderMilestoneType(workOrderMilestoneTypeString: string): recordTypes.WorkOrderMilestoneType | undefined;
export declare function clearCacheByTableName(tableName: string): void;
diff --git a/helpers/functions.cache.js b/helpers/functions.cache.js
index 4d8dea6a..a310f942 100644
--- a/helpers/functions.cache.js
+++ b/helpers/functions.cache.js
@@ -1,11 +1,11 @@
-import * as configFunctions from "./functions.config.js";
-import { getLotOccupantTypes as getLotOccupantTypesFromDatabase } from "./lotOccupancyDB/getLotOccupantTypes.js";
-import { getLotStatuses as getLotStatusesFromDatabase } from "./lotOccupancyDB/getLotStatuses.js";
-import { getLotTypes as getLotTypesFromDatabase } from "./lotOccupancyDB/getLotTypes.js";
-import { getOccupancyTypes as getOccupancyTypesFromDatabase } from "./lotOccupancyDB/getOccupancyTypes.js";
-import { getOccupancyTypeFields as getOccupancyTypeFieldsFromDatabase } from "./lotOccupancyDB/getOccupancyTypeFields.js";
-import { getWorkOrderTypes as getWorkOrderTypesFromDatabase } from "./lotOccupancyDB/getWorkOrderTypes.js";
-import { getWorkOrderMilestoneTypes as getWorkOrderMilestoneTypesFromDatabase } from "./lotOccupancyDB/getWorkOrderMilestoneTypes.js";
+import * as configFunctions from './functions.config.js';
+import { getLotOccupantTypes as getLotOccupantTypesFromDatabase } from './lotOccupancyDB/getLotOccupantTypes.js';
+import { getLotStatuses as getLotStatusesFromDatabase } from './lotOccupancyDB/getLotStatuses.js';
+import { getLotTypes as getLotTypesFromDatabase } from './lotOccupancyDB/getLotTypes.js';
+import { getOccupancyTypes as getOccupancyTypesFromDatabase } from './lotOccupancyDB/getOccupancyTypes.js';
+import { getOccupancyTypeFields as getOccupancyTypeFieldsFromDatabase } from './lotOccupancyDB/getOccupancyTypeFields.js';
+import { getWorkOrderTypes as getWorkOrderTypesFromDatabase } from './lotOccupancyDB/getWorkOrderTypes.js';
+import { getWorkOrderMilestoneTypes as getWorkOrderMilestoneTypesFromDatabase } from './lotOccupancyDB/getWorkOrderMilestoneTypes.js';
let lotOccupantTypes;
export function getLotOccupantTypes() {
if (!lotOccupantTypes) {
@@ -23,7 +23,8 @@ export function getLotOccupantTypeByLotOccupantType(lotOccupantType) {
const cachedLotOccupantTypes = getLotOccupantTypes();
const lotOccupantTypeLowerCase = lotOccupantType.toLowerCase();
return cachedLotOccupantTypes.find((currentLotOccupantType) => {
- return currentLotOccupantType.lotOccupantType.toLowerCase() === lotOccupantTypeLowerCase;
+ return (currentLotOccupantType.lotOccupantType.toLowerCase() ===
+ lotOccupantTypeLowerCase);
});
}
function clearLotOccupantTypesCache() {
@@ -99,16 +100,18 @@ export function getOccupancyTypeByOccupancyType(occupancyTypeString) {
const cachedOccupancyTypes = getOccupancyTypes();
const occupancyTypeLowerCase = occupancyTypeString.toLowerCase();
return cachedOccupancyTypes.find((currentOccupancyType) => {
- return currentOccupancyType.occupancyType.toLowerCase() === occupancyTypeLowerCase;
+ return (currentOccupancyType.occupancyType.toLowerCase() ===
+ occupancyTypeLowerCase);
});
}
export function getOccupancyTypePrintsById(occupancyTypeId) {
const occupancyType = getOccupancyTypeById(occupancyTypeId);
- if (!occupancyType || occupancyType.occupancyTypePrints.length === 0) {
+ if (!occupancyType ||
+ (occupancyType.occupancyTypePrints ?? []).length === 0) {
return [];
}
- if (occupancyType.occupancyTypePrints.includes("*")) {
- return configFunctions.getProperty("settings.lotOccupancy.prints");
+ if (occupancyType.occupancyTypePrints.includes('*')) {
+ return configFunctions.getProperty('settings.lotOccupancy.prints');
}
return occupancyType.occupancyTypePrints;
}
@@ -142,7 +145,8 @@ export function getWorkOrderMilestoneTypes() {
export function getWorkOrderMilestoneTypeByWorkOrderMilestoneTypeId(workOrderMilestoneTypeId) {
const cachedWorkOrderMilestoneTypes = getWorkOrderMilestoneTypes();
return cachedWorkOrderMilestoneTypes.find((currentWorkOrderMilestoneType) => {
- return currentWorkOrderMilestoneType.workOrderMilestoneTypeId === workOrderMilestoneTypeId;
+ return (currentWorkOrderMilestoneType.workOrderMilestoneTypeId ===
+ workOrderMilestoneTypeId);
});
}
export function getWorkOrderMilestoneTypeByWorkOrderMilestoneType(workOrderMilestoneTypeString) {
@@ -158,30 +162,30 @@ function clearWorkOrderMilestoneTypesCache() {
}
export function clearCacheByTableName(tableName) {
switch (tableName) {
- case "LotOccupantTypes": {
+ case 'LotOccupantTypes': {
clearLotOccupantTypesCache();
break;
}
- case "LotStatuses": {
+ case 'LotStatuses': {
clearLotStatusesCache();
break;
}
- case "LotTypes":
- case "LotTypeFields": {
+ case 'LotTypes':
+ case 'LotTypeFields': {
clearLotTypesCache();
break;
}
- case "OccupancyTypes":
- case "OccupancyTypeFields":
- case "OccupancyTypePrints": {
+ case 'OccupancyTypes':
+ case 'OccupancyTypeFields':
+ case 'OccupancyTypePrints': {
clearOccupancyTypesCache();
break;
}
- case "WorkOrderMilestoneTypes": {
+ case 'WorkOrderMilestoneTypes': {
clearWorkOrderMilestoneTypesCache();
break;
}
- case "WorkOrderTypes": {
+ case 'WorkOrderTypes': {
clearWorkOrderTypesCache();
break;
}
diff --git a/helpers/functions.cache.ts b/helpers/functions.cache.ts
index a4960a24..3302fb01 100644
--- a/helpers/functions.cache.ts
+++ b/helpers/functions.cache.ts
@@ -1,285 +1,320 @@
-import * as configFunctions from "./functions.config.js";
+import * as configFunctions from './functions.config.js'
-import { getLotOccupantTypes as getLotOccupantTypesFromDatabase } from "./lotOccupancyDB/getLotOccupantTypes.js";
+import { getLotOccupantTypes as getLotOccupantTypesFromDatabase } from './lotOccupancyDB/getLotOccupantTypes.js'
-import { getLotStatuses as getLotStatusesFromDatabase } from "./lotOccupancyDB/getLotStatuses.js";
+import { getLotStatuses as getLotStatusesFromDatabase } from './lotOccupancyDB/getLotStatuses.js'
-import { getLotTypes as getLotTypesFromDatabase } from "./lotOccupancyDB/getLotTypes.js";
+import { getLotTypes as getLotTypesFromDatabase } from './lotOccupancyDB/getLotTypes.js'
-import { getOccupancyTypes as getOccupancyTypesFromDatabase } from "./lotOccupancyDB/getOccupancyTypes.js";
-import { getOccupancyTypeFields as getOccupancyTypeFieldsFromDatabase } from "./lotOccupancyDB/getOccupancyTypeFields.js";
+import { getOccupancyTypes as getOccupancyTypesFromDatabase } from './lotOccupancyDB/getOccupancyTypes.js'
+import { getOccupancyTypeFields as getOccupancyTypeFieldsFromDatabase } from './lotOccupancyDB/getOccupancyTypeFields.js'
-import { getWorkOrderTypes as getWorkOrderTypesFromDatabase } from "./lotOccupancyDB/getWorkOrderTypes.js";
+import { getWorkOrderTypes as getWorkOrderTypesFromDatabase } from './lotOccupancyDB/getWorkOrderTypes.js'
-import { getWorkOrderMilestoneTypes as getWorkOrderMilestoneTypesFromDatabase } from "./lotOccupancyDB/getWorkOrderMilestoneTypes.js";
+import { getWorkOrderMilestoneTypes as getWorkOrderMilestoneTypesFromDatabase } from './lotOccupancyDB/getWorkOrderMilestoneTypes.js'
-import type * as recordTypes from "../types/recordTypes";
+import type * as recordTypes from '../types/recordTypes'
/*
* Lot Occupant Types
*/
-let lotOccupantTypes: recordTypes.LotOccupantType[] | undefined;
+let lotOccupantTypes: recordTypes.LotOccupantType[] | undefined
-export function getLotOccupantTypes() {
- if (!lotOccupantTypes) {
- lotOccupantTypes = getLotOccupantTypesFromDatabase();
- }
+export function getLotOccupantTypes(): recordTypes.LotOccupantType[] {
+ if (!lotOccupantTypes) {
+ lotOccupantTypes = getLotOccupantTypesFromDatabase()
+ }
- return lotOccupantTypes;
+ return lotOccupantTypes
}
-export function getLotOccupantTypeById(lotOccupantTypeId: number) {
- const cachedLotOccupantTypes = getLotOccupantTypes();
+export function getLotOccupantTypeById(
+ lotOccupantTypeId: number
+): recordTypes.LotOccupantType | undefined {
+ const cachedLotOccupantTypes = getLotOccupantTypes()
- return cachedLotOccupantTypes.find((currentLotOccupantType) => {
- return currentLotOccupantType.lotOccupantTypeId === lotOccupantTypeId;
- });
+ return cachedLotOccupantTypes.find((currentLotOccupantType) => {
+ return currentLotOccupantType.lotOccupantTypeId === lotOccupantTypeId
+ })
}
-export function getLotOccupantTypeByLotOccupantType(lotOccupantType: string) {
- const cachedLotOccupantTypes = getLotOccupantTypes();
+export function getLotOccupantTypeByLotOccupantType(
+ lotOccupantType: string
+): recordTypes.LotOccupantType | undefined {
+ const cachedLotOccupantTypes = getLotOccupantTypes()
- const lotOccupantTypeLowerCase = lotOccupantType.toLowerCase();
+ const lotOccupantTypeLowerCase = lotOccupantType.toLowerCase()
- return cachedLotOccupantTypes.find((currentLotOccupantType) => {
- return currentLotOccupantType.lotOccupantType.toLowerCase() === lotOccupantTypeLowerCase;
- });
+ return cachedLotOccupantTypes.find((currentLotOccupantType) => {
+ return (
+ currentLotOccupantType.lotOccupantType.toLowerCase() ===
+ lotOccupantTypeLowerCase
+ )
+ })
}
-function clearLotOccupantTypesCache() {
- lotOccupantTypes = undefined;
+function clearLotOccupantTypesCache(): void {
+ lotOccupantTypes = undefined
}
/*
* Lot Statuses
*/
-let lotStatuses: recordTypes.LotStatus[] | undefined;
+let lotStatuses: recordTypes.LotStatus[] | undefined
-export function getLotStatuses() {
- if (!lotStatuses) {
- lotStatuses = getLotStatusesFromDatabase();
- }
+export function getLotStatuses(): recordTypes.LotStatus[] {
+ if (!lotStatuses) {
+ lotStatuses = getLotStatusesFromDatabase()
+ }
- return lotStatuses;
+ return lotStatuses
}
-export function getLotStatusById(lotStatusId: number) {
- const cachedLotStatuses = getLotStatuses();
+export function getLotStatusById(
+ lotStatusId: number
+): recordTypes.LotStatus | undefined {
+ const cachedLotStatuses = getLotStatuses()
- return cachedLotStatuses.find((currentLotStatus) => {
- return currentLotStatus.lotStatusId === lotStatusId;
- });
+ return cachedLotStatuses.find((currentLotStatus) => {
+ return currentLotStatus.lotStatusId === lotStatusId
+ })
}
-export function getLotStatusByLotStatus(lotStatus: string) {
- const cachedLotStatuses = getLotStatuses();
+export function getLotStatusByLotStatus(
+ lotStatus: string
+): recordTypes.LotStatus | undefined {
+ const cachedLotStatuses = getLotStatuses()
- const lotStatusLowerCase = lotStatus.toLowerCase();
+ const lotStatusLowerCase = lotStatus.toLowerCase()
- return cachedLotStatuses.find((currentLotStatus) => {
- return currentLotStatus.lotStatus.toLowerCase() === lotStatusLowerCase;
- });
+ return cachedLotStatuses.find((currentLotStatus) => {
+ return currentLotStatus.lotStatus.toLowerCase() === lotStatusLowerCase
+ })
}
-function clearLotStatusesCache() {
- lotStatuses = undefined;
+function clearLotStatusesCache(): void {
+ lotStatuses = undefined
}
/*
* Lot Types
*/
-let lotTypes: recordTypes.LotType[] | undefined;
+let lotTypes: recordTypes.LotType[] | undefined
-export function getLotTypes() {
- if (!lotTypes) {
- lotTypes = getLotTypesFromDatabase();
- }
+export function getLotTypes(): recordTypes.LotType[] {
+ if (!lotTypes) {
+ lotTypes = getLotTypesFromDatabase()
+ }
- return lotTypes;
+ return lotTypes
}
-export function getLotTypeById(lotTypeId: number) {
- const cachedLotTypes = getLotTypes();
+export function getLotTypeById(
+ lotTypeId: number
+): recordTypes.LotType | undefined {
+ const cachedLotTypes = getLotTypes()
- return cachedLotTypes.find((currentLotType) => {
- return currentLotType.lotTypeId === lotTypeId;
- });
+ return cachedLotTypes.find((currentLotType) => {
+ return currentLotType.lotTypeId === lotTypeId
+ })
}
-export function getLotTypesByLotType(lotType: string) {
- const cachedLotTypes = getLotTypes();
+export function getLotTypesByLotType(
+ lotType: string
+): recordTypes.LotType | undefined {
+ const cachedLotTypes = getLotTypes()
- const lotTypeLowerCase = lotType.toLowerCase();
+ const lotTypeLowerCase = lotType.toLowerCase()
- return cachedLotTypes.find((currentLotType) => {
- return currentLotType.lotType.toLowerCase() === lotTypeLowerCase;
- });
+ return cachedLotTypes.find((currentLotType) => {
+ return currentLotType.lotType.toLowerCase() === lotTypeLowerCase
+ })
}
-function clearLotTypesCache() {
- lotTypes = undefined;
+function clearLotTypesCache(): void {
+ lotTypes = undefined
}
/*
* Occupancy Types
*/
-let occupancyTypes: recordTypes.OccupancyType[] | undefined;
-let allOccupancyTypeFields: recordTypes.OccupancyTypeField[] | undefined;
+let occupancyTypes: recordTypes.OccupancyType[] | undefined
+let allOccupancyTypeFields: recordTypes.OccupancyTypeField[] | undefined
-export function getOccupancyTypes() {
- if (!occupancyTypes) {
- occupancyTypes = getOccupancyTypesFromDatabase();
- }
+export function getOccupancyTypes(): recordTypes.OccupancyType[] {
+ if (!occupancyTypes) {
+ occupancyTypes = getOccupancyTypesFromDatabase()
+ }
- return occupancyTypes;
+ return occupancyTypes
}
-export function getAllOccupancyTypeFields() {
- if (!allOccupancyTypeFields) {
- allOccupancyTypeFields = getOccupancyTypeFieldsFromDatabase();
- }
- return allOccupancyTypeFields;
+export function getAllOccupancyTypeFields(): recordTypes.OccupancyTypeField[] {
+ if (!allOccupancyTypeFields) {
+ allOccupancyTypeFields = getOccupancyTypeFieldsFromDatabase()
+ }
+ return allOccupancyTypeFields
}
-export function getOccupancyTypeById(occupancyTypeId: number) {
- const cachedOccupancyTypes = getOccupancyTypes();
+export function getOccupancyTypeById(
+ occupancyTypeId: number
+): recordTypes.OccupancyType | undefined {
+ const cachedOccupancyTypes = getOccupancyTypes()
- return cachedOccupancyTypes.find((currentOccupancyType) => {
- return currentOccupancyType.occupancyTypeId === occupancyTypeId;
- });
+ return cachedOccupancyTypes.find((currentOccupancyType) => {
+ return currentOccupancyType.occupancyTypeId === occupancyTypeId
+ })
}
-export function getOccupancyTypeByOccupancyType(occupancyTypeString: string) {
- const cachedOccupancyTypes = getOccupancyTypes();
+export function getOccupancyTypeByOccupancyType(
+ occupancyTypeString: string
+): recordTypes.OccupancyType | undefined {
+ const cachedOccupancyTypes = getOccupancyTypes()
- const occupancyTypeLowerCase = occupancyTypeString.toLowerCase();
+ const occupancyTypeLowerCase = occupancyTypeString.toLowerCase()
- return cachedOccupancyTypes.find((currentOccupancyType) => {
- return currentOccupancyType.occupancyType.toLowerCase() === occupancyTypeLowerCase;
- });
+ return cachedOccupancyTypes.find((currentOccupancyType) => {
+ return (
+ currentOccupancyType.occupancyType.toLowerCase() ===
+ occupancyTypeLowerCase
+ )
+ })
}
export function getOccupancyTypePrintsById(occupancyTypeId: number): string[] {
- const occupancyType = getOccupancyTypeById(occupancyTypeId);
+ const occupancyType = getOccupancyTypeById(occupancyTypeId)
- if (!occupancyType || occupancyType.occupancyTypePrints.length === 0) {
- return [];
- }
+ if (
+ !occupancyType ||
+ (occupancyType.occupancyTypePrints ?? []).length === 0
+ ) {
+ return []
+ }
- if (occupancyType.occupancyTypePrints.includes("*")) {
- return configFunctions.getProperty("settings.lotOccupancy.prints");
- }
+ if (occupancyType.occupancyTypePrints!.includes('*')) {
+ return configFunctions.getProperty('settings.lotOccupancy.prints')
+ }
- return occupancyType.occupancyTypePrints;
+ return occupancyType.occupancyTypePrints!
}
-function clearOccupancyTypesCache() {
- occupancyTypes = undefined;
- allOccupancyTypeFields = undefined;
+function clearOccupancyTypesCache(): void {
+ occupancyTypes = undefined
+ allOccupancyTypeFields = undefined
}
/*
* Work Order Types
*/
-let workOrderTypes: recordTypes.WorkOrderType[] | undefined;
+let workOrderTypes: recordTypes.WorkOrderType[] | undefined
-export function getWorkOrderTypes() {
- if (!workOrderTypes) {
- workOrderTypes = getWorkOrderTypesFromDatabase();
- }
+export function getWorkOrderTypes(): recordTypes.WorkOrderType[] {
+ if (!workOrderTypes) {
+ workOrderTypes = getWorkOrderTypesFromDatabase()
+ }
- return workOrderTypes;
+ return workOrderTypes
}
-export function getWorkOrderTypeById(workOrderTypeId: number) {
- const cachedWorkOrderTypes = getWorkOrderTypes();
+export function getWorkOrderTypeById(
+ workOrderTypeId: number
+): recordTypes.WorkOrderType | undefined {
+ const cachedWorkOrderTypes = getWorkOrderTypes()
- return cachedWorkOrderTypes.find((currentWorkOrderType) => {
- return currentWorkOrderType.workOrderTypeId === workOrderTypeId;
- });
+ return cachedWorkOrderTypes.find((currentWorkOrderType) => {
+ return currentWorkOrderType.workOrderTypeId === workOrderTypeId
+ })
}
-function clearWorkOrderTypesCache() {
- workOrderTypes = undefined;
+function clearWorkOrderTypesCache(): void {
+ workOrderTypes = undefined
}
/*
* Work Order Milestone Types
*/
-let workOrderMilestoneTypes: recordTypes.WorkOrderMilestoneType[] | undefined;
+let workOrderMilestoneTypes: recordTypes.WorkOrderMilestoneType[] | undefined
-export function getWorkOrderMilestoneTypes() {
- if (!workOrderMilestoneTypes) {
- workOrderMilestoneTypes = getWorkOrderMilestoneTypesFromDatabase();
+export function getWorkOrderMilestoneTypes(): recordTypes.WorkOrderMilestoneType[] {
+ if (!workOrderMilestoneTypes) {
+ workOrderMilestoneTypes = getWorkOrderMilestoneTypesFromDatabase()
+ }
+
+ return workOrderMilestoneTypes
+}
+
+export function getWorkOrderMilestoneTypeByWorkOrderMilestoneTypeId(
+ workOrderMilestoneTypeId: number
+): recordTypes.WorkOrderMilestoneType | undefined {
+ const cachedWorkOrderMilestoneTypes = getWorkOrderMilestoneTypes()
+
+ return cachedWorkOrderMilestoneTypes.find((currentWorkOrderMilestoneType) => {
+ return (
+ currentWorkOrderMilestoneType.workOrderMilestoneTypeId ===
+ workOrderMilestoneTypeId
+ )
+ })
+}
+
+export function getWorkOrderMilestoneTypeByWorkOrderMilestoneType(
+ workOrderMilestoneTypeString: string
+): recordTypes.WorkOrderMilestoneType | undefined {
+ const cachedWorkOrderMilestoneTypes = getWorkOrderMilestoneTypes()
+
+ const workOrderMilestoneTypeLowerCase =
+ workOrderMilestoneTypeString.toLowerCase()
+
+ return cachedWorkOrderMilestoneTypes.find((currentWorkOrderMilestoneType) => {
+ return (
+ currentWorkOrderMilestoneType.workOrderMilestoneType.toLowerCase() ===
+ workOrderMilestoneTypeLowerCase
+ )
+ })
+}
+
+function clearWorkOrderMilestoneTypesCache(): void {
+ workOrderMilestoneTypes = undefined
+}
+
+export function clearCacheByTableName(tableName: string): void {
+ switch (tableName) {
+ case 'LotOccupantTypes': {
+ clearLotOccupantTypesCache()
+ break
}
- return workOrderMilestoneTypes;
-}
-
-export function getWorkOrderMilestoneTypeByWorkOrderMilestoneTypeId(workOrderMilestoneTypeId: number) {
- const cachedWorkOrderMilestoneTypes = getWorkOrderMilestoneTypes();
-
- return cachedWorkOrderMilestoneTypes.find((currentWorkOrderMilestoneType) => {
- return currentWorkOrderMilestoneType.workOrderMilestoneTypeId === workOrderMilestoneTypeId;
- });
-}
-
-export function getWorkOrderMilestoneTypeByWorkOrderMilestoneType(workOrderMilestoneTypeString: string) {
- const cachedWorkOrderMilestoneTypes = getWorkOrderMilestoneTypes();
-
- const workOrderMilestoneTypeLowerCase = workOrderMilestoneTypeString.toLowerCase();
-
- return cachedWorkOrderMilestoneTypes.find((currentWorkOrderMilestoneType) => {
- return (
- currentWorkOrderMilestoneType.workOrderMilestoneType.toLowerCase() ===
- workOrderMilestoneTypeLowerCase
- );
- });
-}
-
-function clearWorkOrderMilestoneTypesCache() {
- workOrderMilestoneTypes = undefined;
-}
-
-export function clearCacheByTableName(tableName: string) {
- switch (tableName) {
- case "LotOccupantTypes": {
- clearLotOccupantTypesCache();
- break;
- }
-
- case "LotStatuses": {
- clearLotStatusesCache();
- break;
- }
-
- case "LotTypes":
- case "LotTypeFields": {
- clearLotTypesCache();
- break;
- }
-
- case "OccupancyTypes":
- case "OccupancyTypeFields":
- case "OccupancyTypePrints": {
- clearOccupancyTypesCache();
- break;
- }
-
- case "WorkOrderMilestoneTypes": {
- clearWorkOrderMilestoneTypesCache();
- break;
- }
-
- case "WorkOrderTypes": {
- clearWorkOrderTypesCache();
- break;
- }
+ case 'LotStatuses': {
+ clearLotStatusesCache()
+ break
}
+
+ case 'LotTypes':
+ case 'LotTypeFields': {
+ clearLotTypesCache()
+ break
+ }
+
+ case 'OccupancyTypes':
+ case 'OccupancyTypeFields':
+ case 'OccupancyTypePrints': {
+ clearOccupancyTypesCache()
+ break
+ }
+
+ case 'WorkOrderMilestoneTypes': {
+ clearWorkOrderMilestoneTypesCache()
+ break
+ }
+
+ case 'WorkOrderTypes': {
+ clearWorkOrderTypesCache()
+ break
+ }
+ }
}
diff --git a/helpers/functions.icons.js b/helpers/functions.icons.js
index 708d040c..5cdfa37f 100644
--- a/helpers/functions.icons.js
+++ b/helpers/functions.icons.js
@@ -1,11 +1,11 @@
-import faIcons from "font-awesome-v5-icons";
+import faIcons from 'font-awesome-v5-icons';
let solidIcons = [];
export async function getSolidIconClasses() {
if (solidIcons.length === 0) {
- const allIcons = await faIcons.getListByKeys(["name", "styles"]);
+ const allIcons = await faIcons.getListByKeys(['name', 'styles']);
const list = [];
for (const icon of allIcons) {
- if (icon.styles.includes("solid")) {
+ if ((icon.styles ?? []).includes('solid')) {
list.push(icon.name);
}
}
diff --git a/helpers/functions.icons.ts b/helpers/functions.icons.ts
index 017cebc6..d336dd97 100644
--- a/helpers/functions.icons.ts
+++ b/helpers/functions.icons.ts
@@ -1,21 +1,21 @@
-import faIcons from "font-awesome-v5-icons";
+import faIcons from 'font-awesome-v5-icons'
-let solidIcons: string[] = [];
+let solidIcons: string[] = []
-export async function getSolidIconClasses() {
- if (solidIcons.length === 0) {
- const allIcons = await faIcons.getListByKeys(["name", "styles"]);
+export async function getSolidIconClasses(): Promise {
+ if (solidIcons.length === 0) {
+ const allIcons = await faIcons.getListByKeys(['name', 'styles'])
- const list: string[] = [];
+ const list: string[] = []
- for (const icon of allIcons) {
- if (icon.styles.includes("solid")) {
- list.push(icon.name);
- }
- }
-
- solidIcons = list;
+ for (const icon of allIcons) {
+ if ((icon.styles ?? []).includes('solid')) {
+ list.push(icon.name!)
+ }
}
- return solidIcons;
+ solidIcons = list
+ }
+
+ return solidIcons
}
diff --git a/helpers/functions.sqlFilters.d.ts b/helpers/functions.sqlFilters.d.ts
index eb20c8eb..1c9b366a 100644
--- a/helpers/functions.sqlFilters.d.ts
+++ b/helpers/functions.sqlFilters.d.ts
@@ -1,15 +1,10 @@
-declare type LotNameSearchType = "startsWith" | "endsWith" | "";
-export declare function getLotNameWhereClause(lotName: string, lotNameSearchType: LotNameSearchType, lotsTableAlias?: string): {
+declare type LotNameSearchType = 'startsWith' | 'endsWith' | '';
+interface WhereClauseReturn {
sqlWhereClause: string;
- sqlParameters: any[];
-};
-declare type OccupancyTime = "" | "current" | "past" | "future";
-export declare function getOccupancyTimeWhereClause(occupancyTime: OccupancyTime, lotOccupanciesTableAlias?: string): {
- sqlWhereClause: string;
- sqlParameters: any[];
-};
-export declare function getOccupantNameWhereClause(occupantName: string, tableAlias?: string): {
- sqlWhereClause: string;
- sqlParameters: any[];
-};
+ sqlParameters: unknown[];
+}
+export declare function getLotNameWhereClause(lotName: string, lotNameSearchType: LotNameSearchType, lotsTableAlias?: string): WhereClauseReturn;
+declare type OccupancyTime = '' | 'current' | 'past' | 'future';
+export declare function getOccupancyTimeWhereClause(occupancyTime: OccupancyTime, lotOccupanciesTableAlias?: string): WhereClauseReturn;
+export declare function getOccupantNameWhereClause(occupantName: string, tableAlias?: string): WhereClauseReturn;
export {};
diff --git a/helpers/functions.sqlFilters.js b/helpers/functions.sqlFilters.js
index 461fdfe7..00ceccae 100644
--- a/helpers/functions.sqlFilters.js
+++ b/helpers/functions.sqlFilters.js
@@ -1,23 +1,24 @@
-import { dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js";
-export function getLotNameWhereClause(lotName, lotNameSearchType, lotsTableAlias = "l") {
- let sqlWhereClause = "";
+import { dateToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
+export function getLotNameWhereClause(lotName, lotNameSearchType, lotsTableAlias = 'l') {
+ let sqlWhereClause = '';
const sqlParameters = [];
- if (lotName) {
+ if (lotName !== '') {
switch (lotNameSearchType) {
- case "startsWith": {
- sqlWhereClause += " and " + lotsTableAlias + ".lotName like ? || '%'";
+ case 'startsWith': {
+ sqlWhereClause += ' and ' + lotsTableAlias + ".lotName like ? || '%'";
sqlParameters.push(lotName);
break;
}
- case "endsWith": {
- sqlWhereClause += " and " + lotsTableAlias + ".lotName like '%' || ?";
+ case 'endsWith': {
+ sqlWhereClause += ' and ' + lotsTableAlias + ".lotName like '%' || ?";
sqlParameters.push(lotName);
break;
}
default: {
- const lotNamePieces = lotName.toLowerCase().split(" ");
+ const lotNamePieces = lotName.toLowerCase().split(' ');
for (const lotNamePiece of lotNamePieces) {
- sqlWhereClause += " and instr(lower(" + lotsTableAlias + ".lotName), ?)";
+ sqlWhereClause +=
+ ' and instr(lower(' + lotsTableAlias + '.lotName), ?)';
sqlParameters.push(lotNamePiece);
}
}
@@ -28,31 +29,33 @@ export function getLotNameWhereClause(lotName, lotNameSearchType, lotsTableAlias
sqlParameters
};
}
-export function getOccupancyTimeWhereClause(occupancyTime, lotOccupanciesTableAlias = "o") {
- let sqlWhereClause = "";
+export function getOccupancyTimeWhereClause(occupancyTime, lotOccupanciesTableAlias = 'o') {
+ let sqlWhereClause = '';
const sqlParameters = [];
- if (occupancyTime) {
+ if (occupancyTime !== '') {
const currentDateString = dateToInteger(new Date());
switch (occupancyTime) {
- case "current": {
+ case 'current': {
sqlWhereClause +=
- " and " +
+ ' and ' +
lotOccupanciesTableAlias +
- ".occupancyStartDate <= ? and (" +
+ '.occupancyStartDate <= ? and (' +
lotOccupanciesTableAlias +
- ".occupancyEndDate is null or " +
+ '.occupancyEndDate is null or ' +
lotOccupanciesTableAlias +
- ".occupancyEndDate >= ?)";
+ '.occupancyEndDate >= ?)';
sqlParameters.push(currentDateString, currentDateString);
break;
}
- case "past": {
- sqlWhereClause += " and " + lotOccupanciesTableAlias + ".occupancyEndDate < ?";
+ case 'past': {
+ sqlWhereClause +=
+ ' and ' + lotOccupanciesTableAlias + '.occupancyEndDate < ?';
sqlParameters.push(currentDateString);
break;
}
- case "future": {
- sqlWhereClause += " and " + lotOccupanciesTableAlias + ".occupancyStartDate > ?";
+ case 'future': {
+ sqlWhereClause +=
+ ' and ' + lotOccupanciesTableAlias + '.occupancyStartDate > ?';
sqlParameters.push(currentDateString);
break;
}
@@ -63,13 +66,13 @@ export function getOccupancyTimeWhereClause(occupancyTime, lotOccupanciesTableAl
sqlParameters
};
}
-export function getOccupantNameWhereClause(occupantName, tableAlias = "o") {
- let sqlWhereClause = "";
+export function getOccupantNameWhereClause(occupantName, tableAlias = 'o') {
+ let sqlWhereClause = '';
const sqlParameters = [];
- if (occupantName) {
- const occupantNamePieces = occupantName.toLowerCase().split(" ");
+ if (occupantName !== '') {
+ const occupantNamePieces = occupantName.toLowerCase().split(' ');
for (const occupantNamePiece of occupantNamePieces) {
- sqlWhereClause += " and instr(lower(" + tableAlias + ".occupantName), ?)";
+ sqlWhereClause += ' and instr(lower(' + tableAlias + '.occupantName), ?)';
sqlParameters.push(occupantNamePiece);
}
}
diff --git a/helpers/functions.sqlFilters.ts b/helpers/functions.sqlFilters.ts
index 1d3cbf7a..de5922c0 100644
--- a/helpers/functions.sqlFilters.ts
+++ b/helpers/functions.sqlFilters.ts
@@ -1,103 +1,114 @@
-import { dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js";
+import { dateToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js'
-type LotNameSearchType = "startsWith" | "endsWith" | "";
+type LotNameSearchType = 'startsWith' | 'endsWith' | ''
+
+interface WhereClauseReturn {
+ sqlWhereClause: string
+ sqlParameters: unknown[]
+}
export function getLotNameWhereClause(
- lotName: string,
- lotNameSearchType: LotNameSearchType,
- lotsTableAlias = "l"
-) {
- let sqlWhereClause = "";
- const sqlParameters = [];
+ lotName: string,
+ lotNameSearchType: LotNameSearchType,
+ lotsTableAlias = 'l'
+): WhereClauseReturn {
+ let sqlWhereClause = ''
+ const sqlParameters: unknown[] = []
- if (lotName) {
- switch (lotNameSearchType) {
- case "startsWith": {
- sqlWhereClause += " and " + lotsTableAlias + ".lotName like ? || '%'";
- sqlParameters.push(lotName);
- break;
- }
- case "endsWith": {
- sqlWhereClause += " and " + lotsTableAlias + ".lotName like '%' || ?";
- sqlParameters.push(lotName);
- break;
- }
- default: {
- const lotNamePieces = lotName.toLowerCase().split(" ");
- for (const lotNamePiece of lotNamePieces) {
- sqlWhereClause += " and instr(lower(" + lotsTableAlias + ".lotName), ?)";
- sqlParameters.push(lotNamePiece);
- }
- }
+ if (lotName !== '') {
+ switch (lotNameSearchType) {
+ case 'startsWith': {
+ sqlWhereClause += ' and ' + lotsTableAlias + ".lotName like ? || '%'"
+ sqlParameters.push(lotName)
+ break
+ }
+ case 'endsWith': {
+ sqlWhereClause += ' and ' + lotsTableAlias + ".lotName like '%' || ?"
+ sqlParameters.push(lotName)
+ break
+ }
+ default: {
+ const lotNamePieces = lotName.toLowerCase().split(' ')
+ for (const lotNamePiece of lotNamePieces) {
+ sqlWhereClause +=
+ ' and instr(lower(' + lotsTableAlias + '.lotName), ?)'
+ sqlParameters.push(lotNamePiece)
}
+ }
}
+ }
- return {
- sqlWhereClause,
- sqlParameters
- };
+ return {
+ sqlWhereClause,
+ sqlParameters
+ }
}
-type OccupancyTime = "" | "current" | "past" | "future";
+type OccupancyTime = '' | 'current' | 'past' | 'future'
export function getOccupancyTimeWhereClause(
- occupancyTime: OccupancyTime,
- lotOccupanciesTableAlias = "o"
-) {
- let sqlWhereClause = "";
- const sqlParameters = [];
+ occupancyTime: OccupancyTime,
+ lotOccupanciesTableAlias = 'o'
+): WhereClauseReturn {
+ let sqlWhereClause = ''
+ const sqlParameters: unknown[] = []
- if (occupancyTime) {
- const currentDateString = dateToInteger(new Date());
+ if (occupancyTime !== '') {
+ const currentDateString = dateToInteger(new Date())
- switch (occupancyTime) {
- case "current": {
- sqlWhereClause +=
- " and " +
- lotOccupanciesTableAlias +
- ".occupancyStartDate <= ? and (" +
- lotOccupanciesTableAlias +
- ".occupancyEndDate is null or " +
- lotOccupanciesTableAlias +
- ".occupancyEndDate >= ?)";
- sqlParameters.push(currentDateString, currentDateString);
- break;
- }
+ switch (occupancyTime) {
+ case 'current': {
+ sqlWhereClause +=
+ ' and ' +
+ lotOccupanciesTableAlias +
+ '.occupancyStartDate <= ? and (' +
+ lotOccupanciesTableAlias +
+ '.occupancyEndDate is null or ' +
+ lotOccupanciesTableAlias +
+ '.occupancyEndDate >= ?)'
+ sqlParameters.push(currentDateString, currentDateString)
+ break
+ }
- case "past": {
- sqlWhereClause += " and " + lotOccupanciesTableAlias + ".occupancyEndDate < ?";
- sqlParameters.push(currentDateString);
- break;
- }
+ case 'past': {
+ sqlWhereClause +=
+ ' and ' + lotOccupanciesTableAlias + '.occupancyEndDate < ?'
+ sqlParameters.push(currentDateString)
+ break
+ }
- case "future": {
- sqlWhereClause += " and " + lotOccupanciesTableAlias + ".occupancyStartDate > ?";
- sqlParameters.push(currentDateString);
- break;
- }
- }
+ case 'future': {
+ sqlWhereClause +=
+ ' and ' + lotOccupanciesTableAlias + '.occupancyStartDate > ?'
+ sqlParameters.push(currentDateString)
+ break
+ }
}
+ }
- return {
- sqlWhereClause,
- sqlParameters
- };
+ return {
+ sqlWhereClause,
+ sqlParameters
+ }
}
-export function getOccupantNameWhereClause(occupantName: string, tableAlias = "o") {
- let sqlWhereClause = "";
- const sqlParameters = [];
+export function getOccupantNameWhereClause(
+ occupantName: string,
+ tableAlias = 'o'
+): WhereClauseReturn {
+ let sqlWhereClause = ''
+ const sqlParameters: unknown[] = []
- if (occupantName) {
- const occupantNamePieces = occupantName.toLowerCase().split(" ");
- for (const occupantNamePiece of occupantNamePieces) {
- sqlWhereClause += " and instr(lower(" + tableAlias + ".occupantName), ?)";
- sqlParameters.push(occupantNamePiece);
- }
+ if (occupantName !== '') {
+ const occupantNamePieces = occupantName.toLowerCase().split(' ')
+ for (const occupantNamePiece of occupantNamePieces) {
+ sqlWhereClause += ' and instr(lower(' + tableAlias + '.occupantName), ?)'
+ sqlParameters.push(occupantNamePiece)
}
+ }
- return {
- sqlWhereClause,
- sqlParameters
- };
+ return {
+ sqlWhereClause,
+ sqlParameters
+ }
}
diff --git a/helpers/functions.user.js b/helpers/functions.user.js
index 81fcdf90..ef36653b 100644
--- a/helpers/functions.user.js
+++ b/helpers/functions.user.js
@@ -1,24 +1,21 @@
import { getUserNameFromApiKey } from "./functions.api.js";
import * as configFunctions from "./functions.config.js";
export function userIsAdmin(request) {
- var _a;
- const user = (_a = request.session) === null || _a === void 0 ? void 0 : _a.user;
+ const user = request.session?.user;
if (!user || !user.userProperties) {
return false;
}
return user.userProperties.isAdmin;
}
export function userCanUpdate(request) {
- var _a;
- const user = (_a = request.session) === null || _a === void 0 ? void 0 : _a.user;
+ const user = request.session?.user;
if (!user || !user.userProperties) {
return false;
}
return user.userProperties.canUpdate;
}
export async function apiKeyIsValid(request) {
- var _a;
- const apiKey = (_a = request.params) === null || _a === void 0 ? void 0 : _a.apiKey;
+ const apiKey = request.params?.apiKey;
if (!apiKey) {
return false;
}
diff --git a/helpers/lotOccupancyDB/addFee.d.ts b/helpers/lotOccupancyDB/addFee.d.ts
index f7372ef8..86f26034 100644
--- a/helpers/lotOccupancyDB/addFee.d.ts
+++ b/helpers/lotOccupancyDB/addFee.d.ts
@@ -1,4 +1,4 @@
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes';
interface AddFeeForm {
feeCategoryId: string;
feeName: string;
@@ -9,9 +9,9 @@ interface AddFeeForm {
feeFunction?: string;
taxAmount?: string;
taxPercentage?: string;
- includeQuantity: "" | "1";
+ includeQuantity: '' | '1';
quantityUnit?: string;
- isRequired: "" | "1";
+ isRequired: '' | '1';
orderNumber?: number;
}
export declare function addFee(feeForm: AddFeeForm, requestSession: recordTypes.PartialSession): number;
diff --git a/helpers/lotOccupancyDB/addFee.js b/helpers/lotOccupancyDB/addFee.js
index acf5c4fa..057a3102 100644
--- a/helpers/lotOccupancyDB/addFee.js
+++ b/helpers/lotOccupancyDB/addFee.js
@@ -1,21 +1,21 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import sqlite from 'better-sqlite3';
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function addFee(feeForm, requestSession) {
const database = sqlite(databasePath);
const rightNowMillis = Date.now();
const result = database
.prepare(`insert into Fees (
- feeCategoryId,
- feeName, feeDescription,
- occupancyTypeId, lotTypeId,
- feeAmount, feeFunction,
- taxAmount, taxPercentage,
- includeQuantity, quantityUnit,
- isRequired, orderNumber,
- recordCreate_userName, recordCreate_timeMillis,
- recordUpdate_userName, recordUpdate_timeMillis)
- values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
- .run(feeForm.feeCategoryId, feeForm.feeName, feeForm.feeDescription, feeForm.occupancyTypeId || undefined, feeForm.lotTypeId || undefined, feeForm.feeAmount || undefined, feeForm.feeFunction || undefined, feeForm.taxAmount || undefined, feeForm.taxPercentage || undefined, feeForm.includeQuantity ? 1 : 0, feeForm.quantityUnit, feeForm.isRequired ? 1 : 0, feeForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
+ feeCategoryId,
+ feeName, feeDescription,
+ occupancyTypeId, lotTypeId,
+ feeAmount, feeFunction,
+ taxAmount, taxPercentage,
+ includeQuantity, quantityUnit,
+ isRequired, orderNumber,
+ recordCreate_userName, recordCreate_timeMillis,
+ recordUpdate_userName, recordUpdate_timeMillis)
+ values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
+ .run(feeForm.feeCategoryId, feeForm.feeName, feeForm.feeDescription, feeForm.occupancyTypeId ?? undefined, feeForm.lotTypeId ?? undefined, feeForm.feeAmount ?? undefined, feeForm.feeFunction ?? undefined, feeForm.taxAmount ?? undefined, feeForm.taxPercentage ?? undefined, (feeForm.includeQuantity ?? '') === '' ? 0 : 1, feeForm.quantityUnit, (feeForm.isRequired ?? '') === '' ? 0 : 1, feeForm.orderNumber ?? -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
database.close();
return result.lastInsertRowid;
}
diff --git a/helpers/lotOccupancyDB/addFee.ts b/helpers/lotOccupancyDB/addFee.ts
index bfb4667c..250349c0 100644
--- a/helpers/lotOccupancyDB/addFee.ts
+++ b/helpers/lotOccupancyDB/addFee.ts
@@ -1,66 +1,71 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
-import type * as recordTypes from "../../types/recordTypes";
+import sqlite from 'better-sqlite3'
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
+
+import type * as recordTypes from '../../types/recordTypes'
interface AddFeeForm {
- feeCategoryId: string;
- feeName: string;
- feeDescription: string;
- occupancyTypeId?: string;
- lotTypeId?: string;
- feeAmount?: string;
- feeFunction?: string;
- taxAmount?: string;
- taxPercentage?: string;
- includeQuantity: "" | "1";
- quantityUnit?: string;
- isRequired: "" | "1";
- orderNumber?: number;
+ feeCategoryId: string
+ feeName: string
+ feeDescription: string
+ occupancyTypeId?: string
+ lotTypeId?: string
+ feeAmount?: string
+ feeFunction?: string
+ taxAmount?: string
+ taxPercentage?: string
+ includeQuantity: '' | '1'
+ quantityUnit?: string
+ isRequired: '' | '1'
+ orderNumber?: number
}
-export function addFee(feeForm: AddFeeForm, requestSession: recordTypes.PartialSession): number {
- const database = sqlite(databasePath);
+export function addFee(
+ feeForm: AddFeeForm,
+ requestSession: recordTypes.PartialSession
+): number {
+ const database = sqlite(databasePath)
- const rightNowMillis = Date.now();
+ const rightNowMillis = Date.now()
- const result = database
- .prepare(
- `insert into Fees (
- feeCategoryId,
- feeName, feeDescription,
- occupancyTypeId, lotTypeId,
- feeAmount, feeFunction,
- taxAmount, taxPercentage,
- includeQuantity, quantityUnit,
- isRequired, orderNumber,
- recordCreate_userName, recordCreate_timeMillis,
- recordUpdate_userName, recordUpdate_timeMillis)
- values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
- )
- .run(
- feeForm.feeCategoryId,
- feeForm.feeName,
- feeForm.feeDescription,
- feeForm.occupancyTypeId || undefined,
- feeForm.lotTypeId || undefined,
- feeForm.feeAmount || undefined,
- feeForm.feeFunction || undefined,
- feeForm.taxAmount || undefined,
- feeForm.taxPercentage || undefined,
- feeForm.includeQuantity ? 1 : 0,
- feeForm.quantityUnit,
- feeForm.isRequired ? 1 : 0,
- feeForm.orderNumber || -1,
- requestSession.user.userName,
- rightNowMillis,
- requestSession.user.userName,
- rightNowMillis
- );
+ const result = database
+ .prepare(
+ `insert into Fees (
+ feeCategoryId,
+ feeName, feeDescription,
+ occupancyTypeId, lotTypeId,
+ feeAmount, feeFunction,
+ taxAmount, taxPercentage,
+ includeQuantity, quantityUnit,
+ isRequired, orderNumber,
+ recordCreate_userName, recordCreate_timeMillis,
+ recordUpdate_userName, recordUpdate_timeMillis)
+ values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
+ )
+ .run(
+ feeForm.feeCategoryId,
+ feeForm.feeName,
+ feeForm.feeDescription,
+ feeForm.occupancyTypeId ?? undefined,
+ feeForm.lotTypeId ?? undefined,
+ feeForm.feeAmount ?? undefined,
+ feeForm.feeFunction ?? undefined,
+ feeForm.taxAmount ?? undefined,
+ feeForm.taxPercentage ?? undefined,
+ (feeForm.includeQuantity ?? '') === '' ? 0 : 1,
+ feeForm.quantityUnit,
+ (feeForm.isRequired ?? '') === '' ? 0 : 1,
+ feeForm.orderNumber ?? -1,
+ requestSession.user!.userName,
+ rightNowMillis,
+ requestSession.user!.userName,
+ rightNowMillis
+ )
- database.close();
+ database.close()
- return result.lastInsertRowid as number;
+ return result.lastInsertRowid as number
}
-export default addFee;
+export default addFee
diff --git a/helpers/lotOccupancyDB/addLot.d.ts b/helpers/lotOccupancyDB/addLot.d.ts
index 0c6a5396..0bfe15fb 100644
--- a/helpers/lotOccupancyDB/addLot.d.ts
+++ b/helpers/lotOccupancyDB/addLot.d.ts
@@ -1,4 +1,4 @@
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes';
interface AddLotForm {
lotName: string;
lotTypeId: string | number;
diff --git a/helpers/lotOccupancyDB/addLot.js b/helpers/lotOccupancyDB/addLot.js
index debd36a3..e3643874 100644
--- a/helpers/lotOccupancyDB/addLot.js
+++ b/helpers/lotOccupancyDB/addLot.js
@@ -1,6 +1,6 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
-import { addOrUpdateLotField } from "./addOrUpdateLotField.js";
+import sqlite from 'better-sqlite3';
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
+import { addOrUpdateLotField } from './addOrUpdateLotField.js';
export function addLot(lotForm, requestSession) {
const database = sqlite(databasePath);
const rightNowMillis = Date.now();
@@ -12,12 +12,12 @@ export function addLot(lotForm, requestSession) {
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
- .run(lotForm.lotName, lotForm.lotTypeId, lotForm.lotStatusId === "" ? undefined : lotForm.lotStatusId, lotForm.mapId === "" ? undefined : lotForm.mapId, lotForm.mapKey, lotForm.lotLatitude === "" ? undefined : lotForm.lotLatitude, lotForm.lotLongitude === "" ? undefined : lotForm.lotLongitude, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
+ .run(lotForm.lotName, lotForm.lotTypeId, lotForm.lotStatusId === '' ? undefined : lotForm.lotStatusId, lotForm.mapId === '' ? undefined : lotForm.mapId, lotForm.mapKey, lotForm.lotLatitude === '' ? undefined : lotForm.lotLatitude, lotForm.lotLongitude === '' ? undefined : lotForm.lotLongitude, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
const lotId = result.lastInsertRowid;
- const lotTypeFieldIds = (lotForm.lotTypeFieldIds || "").split(",");
+ const lotTypeFieldIds = (lotForm.lotTypeFieldIds ?? '').split(',');
for (const lotTypeFieldId of lotTypeFieldIds) {
- const lotFieldValue = lotForm["lotFieldValue_" + lotTypeFieldId];
- if (lotFieldValue && lotFieldValue !== "") {
+ const lotFieldValue = lotForm['lotFieldValue_' + lotTypeFieldId];
+ if (lotFieldValue && lotFieldValue !== '') {
addOrUpdateLotField({
lotId,
lotTypeFieldId,
diff --git a/helpers/lotOccupancyDB/addLot.ts b/helpers/lotOccupancyDB/addLot.ts
index 9f320811..4523af5d 100644
--- a/helpers/lotOccupancyDB/addLot.ts
+++ b/helpers/lotOccupancyDB/addLot.ts
@@ -1,78 +1,81 @@
-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 { addOrUpdateLotField } from "./addOrUpdateLotField.js";
+import { addOrUpdateLotField } from './addOrUpdateLotField.js'
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes'
interface AddLotForm {
- lotName: string;
- lotTypeId: string | number;
- lotStatusId: string | number;
+ lotName: string
+ lotTypeId: string | number
+ lotStatusId: string | number
- mapId: string | number;
- mapKey: string;
+ mapId: string | number
+ mapKey: string
- lotLatitude: string;
- lotLongitude: string;
+ lotLatitude: string
+ lotLongitude: string
- lotTypeFieldIds?: string;
- [lotFieldValue_lotTypeFieldId: string]: unknown;
+ lotTypeFieldIds?: string
+ [lotFieldValue_lotTypeFieldId: string]: unknown
}
-export function addLot(lotForm: AddLotForm, requestSession: recordTypes.PartialSession): number {
- const database = sqlite(databasePath);
+export function addLot(
+ lotForm: AddLotForm,
+ requestSession: recordTypes.PartialSession
+): number {
+ const database = sqlite(databasePath)
- const rightNowMillis = Date.now();
+ const rightNowMillis = Date.now()
- const result = database
- .prepare(
- `insert into Lots (
+ const result = database
+ .prepare(
+ `insert into Lots (
lotName, lotTypeId, lotStatusId,
mapId, mapKey,
lotLatitude, lotLongitude,
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
- )
- .run(
- lotForm.lotName,
- lotForm.lotTypeId,
- lotForm.lotStatusId === "" ? undefined : lotForm.lotStatusId,
- lotForm.mapId === "" ? undefined : lotForm.mapId,
- lotForm.mapKey,
- lotForm.lotLatitude === "" ? undefined : lotForm.lotLatitude,
- lotForm.lotLongitude === "" ? undefined : lotForm.lotLongitude,
- requestSession.user.userName,
- rightNowMillis,
- requestSession.user.userName,
- rightNowMillis
- );
+ )
+ .run(
+ lotForm.lotName,
+ lotForm.lotTypeId,
+ lotForm.lotStatusId === '' ? undefined : lotForm.lotStatusId,
+ lotForm.mapId === '' ? undefined : lotForm.mapId,
+ lotForm.mapKey,
+ lotForm.lotLatitude === '' ? undefined : lotForm.lotLatitude,
+ lotForm.lotLongitude === '' ? undefined : lotForm.lotLongitude,
+ requestSession.user!.userName,
+ rightNowMillis,
+ requestSession.user!.userName,
+ rightNowMillis
+ )
- const lotId = result.lastInsertRowid as number;
+ const lotId = result.lastInsertRowid as number
- const lotTypeFieldIds = (lotForm.lotTypeFieldIds || "").split(",");
+ const lotTypeFieldIds = (lotForm.lotTypeFieldIds ?? '').split(',')
- for (const lotTypeFieldId of lotTypeFieldIds) {
- const lotFieldValue = lotForm["lotFieldValue_" + lotTypeFieldId] as string;
+ for (const lotTypeFieldId of lotTypeFieldIds) {
+ const lotFieldValue = lotForm['lotFieldValue_' + lotTypeFieldId] as string
- if (lotFieldValue && lotFieldValue !== "") {
- addOrUpdateLotField(
- {
- lotId,
- lotTypeFieldId,
- lotFieldValue
- },
- requestSession,
- database
- );
- }
+ if (lotFieldValue && lotFieldValue !== '') {
+ addOrUpdateLotField(
+ {
+ lotId,
+ lotTypeFieldId,
+ lotFieldValue
+ },
+ requestSession,
+ database
+ )
}
+ }
- database.close();
+ database.close()
- return lotId;
+ return lotId
}
-export default addLot;
+export default addLot
diff --git a/helpers/lotOccupancyDB/addLotComment.d.ts b/helpers/lotOccupancyDB/addLotComment.d.ts
index 68f65c6e..4c444ae4 100644
--- a/helpers/lotOccupancyDB/addLotComment.d.ts
+++ b/helpers/lotOccupancyDB/addLotComment.d.ts
@@ -1,4 +1,4 @@
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes';
interface AddLotCommentForm {
lotId: string;
lotComment: string;
diff --git a/helpers/lotOccupancyDB/addLotComment.js b/helpers/lotOccupancyDB/addLotComment.js
index f34d7187..cb4165bf 100644
--- a/helpers/lotOccupancyDB/addLotComment.js
+++ b/helpers/lotOccupancyDB/addLotComment.js
@@ -1,6 +1,6 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
-import * as dateTimeFunctions from "@cityssm/expressjs-server-js/dateTimeFns.js";
+import sqlite from 'better-sqlite3';
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
+import * as dateTimeFunctions from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function addLotComment(lotCommentForm, requestSession) {
const database = sqlite(databasePath);
const rightNow = new Date();
diff --git a/helpers/lotOccupancyDB/addLotComment.ts b/helpers/lotOccupancyDB/addLotComment.ts
index c2a6ce10..355f9a49 100644
--- a/helpers/lotOccupancyDB/addLotComment.ts
+++ b/helpers/lotOccupancyDB/addLotComment.ts
@@ -1,47 +1,47 @@
-import sqlite from "better-sqlite3";
+import sqlite from 'better-sqlite3'
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
-import * as dateTimeFunctions from "@cityssm/expressjs-server-js/dateTimeFns.js";
+import * as dateTimeFunctions from '@cityssm/expressjs-server-js/dateTimeFns.js'
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes'
interface AddLotCommentForm {
- lotId: string;
- lotComment: string;
+ lotId: string
+ lotComment: string
}
export function addLotComment(
- lotCommentForm: AddLotCommentForm,
- requestSession: recordTypes.PartialSession
+ lotCommentForm: AddLotCommentForm,
+ requestSession: recordTypes.PartialSession
): number {
- const database = sqlite(databasePath);
+ const database = sqlite(databasePath)
- const rightNow = new Date();
+ const rightNow = new Date()
- const result = database
- .prepare(
- `insert into LotComments (
+ const result = database
+ .prepare(
+ `insert into LotComments (
lotId,
lotCommentDate, lotCommentTime, lotComment,
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?)`
- )
- .run(
- lotCommentForm.lotId,
- dateTimeFunctions.dateToInteger(rightNow),
- dateTimeFunctions.dateToTimeInteger(rightNow),
- lotCommentForm.lotComment,
- requestSession.user.userName,
- rightNow.getTime(),
- requestSession.user.userName,
- rightNow.getTime()
- );
+ )
+ .run(
+ lotCommentForm.lotId,
+ dateTimeFunctions.dateToInteger(rightNow),
+ dateTimeFunctions.dateToTimeInteger(rightNow),
+ lotCommentForm.lotComment,
+ requestSession.user!.userName,
+ rightNow.getTime(),
+ requestSession.user!.userName,
+ rightNow.getTime()
+ )
- database.close();
+ database.close()
- return result.lastInsertRowid as number;
+ return result.lastInsertRowid as number
}
-export default addLotComment;
+export default addLotComment
diff --git a/helpers/lotOccupancyDB/addLotOccupancy.d.ts b/helpers/lotOccupancyDB/addLotOccupancy.d.ts
index ec8c3e63..f6aab70f 100644
--- a/helpers/lotOccupancyDB/addLotOccupancy.d.ts
+++ b/helpers/lotOccupancyDB/addLotOccupancy.d.ts
@@ -1,5 +1,5 @@
-import sqlite from "better-sqlite3";
-import type * as recordTypes from "../../types/recordTypes";
+import sqlite from 'better-sqlite3';
+import type * as recordTypes from '../../types/recordTypes';
interface AddLotOccupancyForm {
occupancyTypeId: string | number;
lotId: string | number;
diff --git a/helpers/lotOccupancyDB/addLotOccupancy.js b/helpers/lotOccupancyDB/addLotOccupancy.js
index 65dc3231..68c0070e 100644
--- a/helpers/lotOccupancyDB/addLotOccupancy.js
+++ b/helpers/lotOccupancyDB/addLotOccupancy.js
@@ -1,10 +1,10 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
-import * as dateTimeFunctions from "@cityssm/expressjs-server-js/dateTimeFns.js";
-import { addOrUpdateLotOccupancyField } from "./addOrUpdateLotOccupancyField.js";
-import { addLotOccupancyOccupant } from "./addLotOccupancyOccupant.js";
+import sqlite from 'better-sqlite3';
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
+import * as dateTimeFunctions from '@cityssm/expressjs-server-js/dateTimeFns.js';
+import { addOrUpdateLotOccupancyField } from './addOrUpdateLotOccupancyField.js';
+import { addLotOccupancyOccupant } from './addLotOccupancyOccupant.js';
export function addLotOccupancy(lotOccupancyForm, requestSession, connectedDatabase) {
- const database = connectedDatabase || sqlite(databasePath);
+ const database = connectedDatabase ?? sqlite(databasePath);
const rightNowMillis = Date.now();
const occupancyStartDate = dateTimeFunctions.dateStringToInteger(lotOccupancyForm.occupancyStartDateString);
if (occupancyStartDate <= 0) {
@@ -12,19 +12,19 @@ export function addLotOccupancy(lotOccupancyForm, requestSession, connectedDatab
}
const result = database
.prepare(`insert into LotOccupancies (
- occupancyTypeId, lotId,
- occupancyStartDate, occupancyEndDate,
- recordCreate_userName, recordCreate_timeMillis,
- recordUpdate_userName, recordUpdate_timeMillis)
- values (?, ?, ?, ?, ?, ?, ?, ?)`)
- .run(lotOccupancyForm.occupancyTypeId, lotOccupancyForm.lotId === "" ? undefined : lotOccupancyForm.lotId, occupancyStartDate, lotOccupancyForm.occupancyEndDateString === ""
+ occupancyTypeId, lotId,
+ occupancyStartDate, occupancyEndDate,
+ recordCreate_userName, recordCreate_timeMillis,
+ recordUpdate_userName, recordUpdate_timeMillis)
+ values (?, ?, ?, ?, ?, ?, ?, ?)`)
+ .run(lotOccupancyForm.occupancyTypeId, lotOccupancyForm.lotId === '' ? undefined : lotOccupancyForm.lotId, occupancyStartDate, lotOccupancyForm.occupancyEndDateString === ''
? undefined
: dateTimeFunctions.dateStringToInteger(lotOccupancyForm.occupancyEndDateString), requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
const lotOccupancyId = result.lastInsertRowid;
- const occupancyTypeFieldIds = (lotOccupancyForm.occupancyTypeFieldIds || "").split(",");
+ const occupancyTypeFieldIds = (lotOccupancyForm.occupancyTypeFieldIds ?? '').split(',');
for (const occupancyTypeFieldId of occupancyTypeFieldIds) {
- const lotOccupancyFieldValue = lotOccupancyForm["lotOccupancyFieldValue_" + occupancyTypeFieldId];
- if (lotOccupancyFieldValue && lotOccupancyFieldValue !== "") {
+ const lotOccupancyFieldValue = lotOccupancyForm['lotOccupancyFieldValue_' + occupancyTypeFieldId];
+ if (lotOccupancyFieldValue && lotOccupancyFieldValue !== '') {
addOrUpdateLotOccupancyField({
lotOccupancyId,
occupancyTypeFieldId,
diff --git a/helpers/lotOccupancyDB/addLotOccupancy.ts b/helpers/lotOccupancyDB/addLotOccupancy.ts
index a2edc4a7..3991aae7 100644
--- a/helpers/lotOccupancyDB/addLotOccupancy.ts
+++ b/helpers/lotOccupancyDB/addLotOccupancy.ts
@@ -1,122 +1,127 @@
-import sqlite from "better-sqlite3";
+import sqlite from 'better-sqlite3'
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
-import * as dateTimeFunctions from "@cityssm/expressjs-server-js/dateTimeFns.js";
+import * as dateTimeFunctions from '@cityssm/expressjs-server-js/dateTimeFns.js'
-import { addOrUpdateLotOccupancyField } from "./addOrUpdateLotOccupancyField.js";
-import { addLotOccupancyOccupant } from "./addLotOccupancyOccupant.js";
+import { addOrUpdateLotOccupancyField } from './addOrUpdateLotOccupancyField.js'
+import { addLotOccupancyOccupant } from './addLotOccupancyOccupant.js'
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes'
interface AddLotOccupancyForm {
- occupancyTypeId: string | number;
- lotId: string | number;
+ occupancyTypeId: string | number
+ lotId: string | number
- occupancyStartDateString: string;
- occupancyEndDateString: string;
+ occupancyStartDateString: string
+ occupancyEndDateString: string
- occupancyTypeFieldIds?: string;
- [lotOccupancyFieldValue_occupancyTypeFieldId: string]: unknown;
+ occupancyTypeFieldIds?: string
+ [lotOccupancyFieldValue_occupancyTypeFieldId: string]: unknown
- lotOccupantTypeId?: string;
- occupantName?: string;
- occupantAddress1?: string;
- occupantAddress2?: string;
- occupantCity?: string;
- occupantProvince?: string;
- occupantPostalCode?: string;
- occupantPhoneNumber?: string;
- occupantEmailAddress?: string;
- occupantComment?: string;
+ lotOccupantTypeId?: string
+ occupantName?: string
+ occupantAddress1?: string
+ occupantAddress2?: string
+ occupantCity?: string
+ occupantProvince?: string
+ occupantPostalCode?: string
+ occupantPhoneNumber?: string
+ occupantEmailAddress?: string
+ occupantComment?: string
}
export function addLotOccupancy(
- lotOccupancyForm: AddLotOccupancyForm,
- requestSession: recordTypes.PartialSession,
- connectedDatabase?: sqlite.Database
+ lotOccupancyForm: AddLotOccupancyForm,
+ requestSession: recordTypes.PartialSession,
+ connectedDatabase?: sqlite.Database
): number {
- const database = connectedDatabase || sqlite(databasePath);
+ const database = connectedDatabase ?? sqlite(databasePath)
- const rightNowMillis = Date.now();
+ const rightNowMillis = Date.now()
- const occupancyStartDate = dateTimeFunctions.dateStringToInteger(
- lotOccupancyForm.occupancyStartDateString
- );
+ const occupancyStartDate = dateTimeFunctions.dateStringToInteger(
+ lotOccupancyForm.occupancyStartDateString
+ )
- if (occupancyStartDate <= 0) {
- console.error(lotOccupancyForm);
+ if (occupancyStartDate <= 0) {
+ console.error(lotOccupancyForm)
+ }
+
+ /* eslint-disable @typescript-eslint/indent */
+ const result = database
+ .prepare(
+ `insert into LotOccupancies (
+ occupancyTypeId, lotId,
+ occupancyStartDate, occupancyEndDate,
+ recordCreate_userName, recordCreate_timeMillis,
+ recordUpdate_userName, recordUpdate_timeMillis)
+ values (?, ?, ?, ?, ?, ?, ?, ?)`
+ )
+ .run(
+ lotOccupancyForm.occupancyTypeId,
+ lotOccupancyForm.lotId === '' ? undefined : lotOccupancyForm.lotId,
+ occupancyStartDate,
+ lotOccupancyForm.occupancyEndDateString === ''
+ ? undefined
+ : dateTimeFunctions.dateStringToInteger(
+ lotOccupancyForm.occupancyEndDateString
+ ),
+ requestSession.user!.userName,
+ rightNowMillis,
+ requestSession.user!.userName,
+ rightNowMillis
+ )
+
+ const lotOccupancyId = result.lastInsertRowid as number
+
+ const occupancyTypeFieldIds = (
+ lotOccupancyForm.occupancyTypeFieldIds ?? ''
+ ).split(',')
+
+ for (const occupancyTypeFieldId of occupancyTypeFieldIds) {
+ const lotOccupancyFieldValue = lotOccupancyForm[
+ 'lotOccupancyFieldValue_' + occupancyTypeFieldId
+ ] as string
+
+ if (lotOccupancyFieldValue && lotOccupancyFieldValue !== '') {
+ addOrUpdateLotOccupancyField(
+ {
+ lotOccupancyId,
+ occupancyTypeFieldId,
+ lotOccupancyFieldValue
+ },
+ requestSession,
+ database
+ )
}
+ }
- const result = database
- .prepare(
- `insert into LotOccupancies (
- occupancyTypeId, lotId,
- occupancyStartDate, occupancyEndDate,
- recordCreate_userName, recordCreate_timeMillis,
- recordUpdate_userName, recordUpdate_timeMillis)
- values (?, ?, ?, ?, ?, ?, ?, ?)`
- )
- .run(
- lotOccupancyForm.occupancyTypeId,
- lotOccupancyForm.lotId === "" ? undefined : lotOccupancyForm.lotId,
- occupancyStartDate,
- lotOccupancyForm.occupancyEndDateString === ""
- ? undefined
- : dateTimeFunctions.dateStringToInteger(lotOccupancyForm.occupancyEndDateString),
- requestSession.user.userName,
- rightNowMillis,
- requestSession.user.userName,
- rightNowMillis
- );
+ if (lotOccupancyForm.lotOccupantTypeId) {
+ addLotOccupancyOccupant(
+ {
+ lotOccupancyId,
+ lotOccupantTypeId: lotOccupancyForm.lotOccupantTypeId,
+ occupantName: lotOccupancyForm.occupantName!,
+ occupantAddress1: lotOccupancyForm.occupantAddress1!,
+ occupantAddress2: lotOccupancyForm.occupantAddress2!,
+ occupantCity: lotOccupancyForm.occupantCity!,
+ occupantProvince: lotOccupancyForm.occupantProvince!,
+ occupantPostalCode: lotOccupancyForm.occupantPostalCode!,
+ occupantPhoneNumber: lotOccupancyForm.occupantPhoneNumber!,
+ occupantEmailAddress: lotOccupancyForm.occupantEmailAddress!,
+ occupantComment: lotOccupancyForm.occupantComment!
+ },
+ requestSession,
+ database
+ )
+ }
- const lotOccupancyId = result.lastInsertRowid as number;
+ if (!connectedDatabase) {
+ database.close()
+ }
- const occupancyTypeFieldIds = (lotOccupancyForm.occupancyTypeFieldIds || "").split(",");
-
- for (const occupancyTypeFieldId of occupancyTypeFieldIds) {
- const lotOccupancyFieldValue = lotOccupancyForm[
- "lotOccupancyFieldValue_" + occupancyTypeFieldId
- ] as string;
-
- if (lotOccupancyFieldValue && lotOccupancyFieldValue !== "") {
- addOrUpdateLotOccupancyField(
- {
- lotOccupancyId,
- occupancyTypeFieldId,
- lotOccupancyFieldValue
- },
- requestSession,
- database
- );
- }
- }
-
- if (lotOccupancyForm.lotOccupantTypeId) {
- addLotOccupancyOccupant(
- {
- lotOccupancyId,
- lotOccupantTypeId: lotOccupancyForm.lotOccupantTypeId,
- occupantName: lotOccupancyForm.occupantName,
- occupantAddress1: lotOccupancyForm.occupantAddress1,
- occupantAddress2: lotOccupancyForm.occupantAddress2,
- occupantCity: lotOccupancyForm.occupantCity,
- occupantProvince: lotOccupancyForm.occupantProvince,
- occupantPostalCode: lotOccupancyForm.occupantPostalCode,
- occupantPhoneNumber: lotOccupancyForm.occupantPhoneNumber,
- occupantEmailAddress: lotOccupancyForm.occupantEmailAddress,
- occupantComment: lotOccupancyForm.occupantComment
- },
- requestSession,
- database
- );
- }
-
- if (!connectedDatabase) {
- database.close();
- }
-
- return lotOccupancyId;
+ return lotOccupancyId
}
-export default addLotOccupancy;
+export default addLotOccupancy
diff --git a/helpers/lotOccupancyDB/addLotOccupancyComment.d.ts b/helpers/lotOccupancyDB/addLotOccupancyComment.d.ts
index ae12d134..67570932 100644
--- a/helpers/lotOccupancyDB/addLotOccupancyComment.d.ts
+++ b/helpers/lotOccupancyDB/addLotOccupancyComment.d.ts
@@ -1,4 +1,4 @@
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes';
interface AddLotOccupancyCommentForm {
lotOccupancyId: string | number;
lotOccupancyCommentDateString?: string;
diff --git a/helpers/lotOccupancyDB/addLotOccupancyComment.js b/helpers/lotOccupancyDB/addLotOccupancyComment.js
index 48b29f29..d9045a22 100644
--- a/helpers/lotOccupancyDB/addLotOccupancyComment.js
+++ b/helpers/lotOccupancyDB/addLotOccupancyComment.js
@@ -1,13 +1,13 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
-import { dateStringToInteger, dateToInteger, dateToTimeInteger, timeStringToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js";
+import sqlite from 'better-sqlite3';
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
+import { dateStringToInteger, dateToInteger, dateToTimeInteger, timeStringToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function addLotOccupancyComment(commentForm, requestSession) {
const rightNow = new Date();
let lotOccupancyCommentDate;
let lotOccupancyCommentTime;
if (commentForm.lotOccupancyCommentDateString) {
lotOccupancyCommentDate = dateStringToInteger(commentForm.lotOccupancyCommentDateString);
- lotOccupancyCommentTime = timeStringToInteger(commentForm.lotOccupancyCommentTimeString);
+ lotOccupancyCommentTime = timeStringToInteger(commentForm.lotOccupancyCommentTimeString ?? '');
}
else {
lotOccupancyCommentDate = dateToInteger(rightNow);
diff --git a/helpers/lotOccupancyDB/addLotOccupancyComment.ts b/helpers/lotOccupancyDB/addLotOccupancyComment.ts
index d3ed6de5..8134e514 100644
--- a/helpers/lotOccupancyDB/addLotOccupancyComment.ts
+++ b/helpers/lotOccupancyDB/addLotOccupancyComment.ts
@@ -1,66 +1,70 @@
-import sqlite from "better-sqlite3";
+import sqlite from 'better-sqlite3'
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import {
- dateStringToInteger,
- dateToInteger,
- dateToTimeInteger,
- timeStringToInteger
-} from "@cityssm/expressjs-server-js/dateTimeFns.js";
+ dateStringToInteger,
+ dateToInteger,
+ dateToTimeInteger,
+ timeStringToInteger
+} from '@cityssm/expressjs-server-js/dateTimeFns.js'
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes'
interface AddLotOccupancyCommentForm {
- lotOccupancyId: string | number;
- lotOccupancyCommentDateString?: string;
- lotOccupancyCommentTimeString?: string;
- lotOccupancyComment: string;
+ lotOccupancyId: string | number
+ lotOccupancyCommentDateString?: string
+ lotOccupancyCommentTimeString?: string
+ lotOccupancyComment: string
}
export function addLotOccupancyComment(
- commentForm: AddLotOccupancyCommentForm,
- requestSession: recordTypes.PartialSession
+ commentForm: AddLotOccupancyCommentForm,
+ requestSession: recordTypes.PartialSession
): number {
- const rightNow = new Date();
+ const rightNow = new Date()
- let lotOccupancyCommentDate: number;
- let lotOccupancyCommentTime: number;
+ let lotOccupancyCommentDate: number
+ let lotOccupancyCommentTime: number
- if (commentForm.lotOccupancyCommentDateString) {
- lotOccupancyCommentDate = dateStringToInteger(commentForm.lotOccupancyCommentDateString);
- lotOccupancyCommentTime = timeStringToInteger(commentForm.lotOccupancyCommentTimeString);
- } else {
- lotOccupancyCommentDate = dateToInteger(rightNow);
- lotOccupancyCommentTime = dateToTimeInteger(rightNow);
- }
+ if (commentForm.lotOccupancyCommentDateString) {
+ lotOccupancyCommentDate = dateStringToInteger(
+ commentForm.lotOccupancyCommentDateString
+ )
+ lotOccupancyCommentTime = timeStringToInteger(
+ commentForm.lotOccupancyCommentTimeString ?? ''
+ )
+ } else {
+ lotOccupancyCommentDate = dateToInteger(rightNow)
+ lotOccupancyCommentTime = dateToTimeInteger(rightNow)
+ }
- const database = sqlite(databasePath);
+ const database = sqlite(databasePath)
- const result = database
- .prepare(
- `insert into LotOccupancyComments (
+ const result = database
+ .prepare(
+ `insert into LotOccupancyComments (
lotOccupancyId,
lotOccupancyCommentDate, lotOccupancyCommentTime,
lotOccupancyComment,
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?)`
- )
- .run(
- commentForm.lotOccupancyId,
- lotOccupancyCommentDate,
- lotOccupancyCommentTime,
- commentForm.lotOccupancyComment,
- requestSession.user.userName,
- rightNow.getTime(),
- requestSession.user.userName,
- rightNow.getTime()
- );
+ )
+ .run(
+ commentForm.lotOccupancyId,
+ lotOccupancyCommentDate,
+ lotOccupancyCommentTime,
+ commentForm.lotOccupancyComment,
+ requestSession.user!.userName,
+ rightNow.getTime(),
+ requestSession.user!.userName,
+ rightNow.getTime()
+ )
- database.close();
+ database.close()
- return result.lastInsertRowid as number;
+ return result.lastInsertRowid as number
}
-export default addLotOccupancyComment;
+export default addLotOccupancyComment
diff --git a/helpers/lotOccupancyDB/addLotOccupancyFee.d.ts b/helpers/lotOccupancyDB/addLotOccupancyFee.d.ts
index ae25ea64..91971e66 100644
--- a/helpers/lotOccupancyDB/addLotOccupancyFee.d.ts
+++ b/helpers/lotOccupancyDB/addLotOccupancyFee.d.ts
@@ -1,4 +1,4 @@
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes';
interface AddLotOccupancyFeeForm {
lotOccupancyId: number | string;
feeId: number | string;
diff --git a/helpers/lotOccupancyDB/addLotOccupancyFee.js b/helpers/lotOccupancyDB/addLotOccupancyFee.js
index 9fc4631d..de7e7676 100644
--- a/helpers/lotOccupancyDB/addLotOccupancyFee.js
+++ b/helpers/lotOccupancyDB/addLotOccupancyFee.js
@@ -1,8 +1,8 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
-import { calculateFeeAmount, calculateTaxAmount } from "../functions.fee.js";
-import { getFee } from "./getFee.js";
-import { getLotOccupancy } from "./getLotOccupancy.js";
+import sqlite from 'better-sqlite3';
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
+import { calculateFeeAmount, calculateTaxAmount } from '../functions.fee.js';
+import { getFee } from './getFee.js';
+import { getLotOccupancy } from './getLotOccupancy.js';
export function addLotOccupancyFee(lotOccupancyFeeForm, requestSession) {
const database = sqlite(databasePath);
const rightNowMillis = Date.now();
@@ -10,13 +10,13 @@ export function addLotOccupancyFee(lotOccupancyFeeForm, requestSession) {
let taxAmount;
if (lotOccupancyFeeForm.feeAmount) {
feeAmount =
- typeof lotOccupancyFeeForm.feeAmount === "string"
+ typeof lotOccupancyFeeForm.feeAmount === 'string'
? Number.parseFloat(lotOccupancyFeeForm.feeAmount)
- : feeAmount;
+ : 0;
taxAmount =
- typeof lotOccupancyFeeForm.taxAmount === "string"
+ typeof lotOccupancyFeeForm.taxAmount === 'string'
? Number.parseFloat(lotOccupancyFeeForm.taxAmount)
- : taxAmount;
+ : 0;
}
else {
const lotOccupancy = getLotOccupancy(lotOccupancyFeeForm.lotOccupancyId);
@@ -39,7 +39,8 @@ export function addLotOccupancyFee(lotOccupancyFeeForm, requestSession) {
and feeId = ?`)
.run(lotOccupancyFeeForm.lotOccupancyId, lotOccupancyFeeForm.feeId);
}
- else if (record.feeAmount === feeAmount && record.taxAmount === taxAmount) {
+ else if (record.feeAmount === feeAmount &&
+ record.taxAmount === taxAmount) {
database
.prepare(`update LotOccupancyFees
set quantity = quantity + ?,
@@ -52,18 +53,18 @@ export function addLotOccupancyFee(lotOccupancyFeeForm, requestSession) {
return true;
}
else {
- const quantity = typeof lotOccupancyFeeForm.quantity === "string"
+ const quantity = typeof lotOccupancyFeeForm.quantity === 'string'
? Number.parseFloat(lotOccupancyFeeForm.quantity)
: lotOccupancyFeeForm.quantity;
database
.prepare(`update LotOccupancyFees
- set feeAmount = (feeAmount * quantity) + ?,
- taxAmount = (taxAmount * quantity) + ?,
- quantity = 1,
- recordUpdate_userName = ?,
- recordUpdate_timeMillis = ?
- where lotOccupancyId = ?
- and feeId = ?`)
+ set feeAmount = (feeAmount * quantity) + ?,
+ taxAmount = (taxAmount * quantity) + ?,
+ quantity = 1,
+ recordUpdate_userName = ?,
+ recordUpdate_timeMillis = ?
+ where lotOccupancyId = ?
+ and feeId = ?`)
.run(feeAmount * quantity, taxAmount * quantity, requestSession.user.userName, rightNowMillis, lotOccupancyFeeForm.lotOccupancyId, lotOccupancyFeeForm.feeId);
database.close();
return true;
diff --git a/helpers/lotOccupancyDB/addLotOccupancyFee.ts b/helpers/lotOccupancyDB/addLotOccupancyFee.ts
index b3d3e48c..d1ba7bb0 100644
--- a/helpers/lotOccupancyDB/addLotOccupancyFee.ts
+++ b/helpers/lotOccupancyDB/addLotOccupancyFee.ts
@@ -1,154 +1,157 @@
-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 { calculateFeeAmount, calculateTaxAmount } from "../functions.fee.js";
+import { calculateFeeAmount, calculateTaxAmount } from '../functions.fee.js'
-import { getFee } from "./getFee.js";
+import { getFee } from './getFee.js'
-import { getLotOccupancy } from "./getLotOccupancy.js";
+import { getLotOccupancy } from './getLotOccupancy.js'
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes'
interface AddLotOccupancyFeeForm {
- lotOccupancyId: number | string;
- feeId: number | string;
- quantity: number | string;
- feeAmount?: number | string;
- taxAmount?: number | string;
+ lotOccupancyId: number | string
+ feeId: number | string
+ quantity: number | string
+ feeAmount?: number | string
+ taxAmount?: number | string
}
export function addLotOccupancyFee(
- lotOccupancyFeeForm: AddLotOccupancyFeeForm,
- requestSession: recordTypes.PartialSession
+ lotOccupancyFeeForm: AddLotOccupancyFeeForm,
+ requestSession: recordTypes.PartialSession
): boolean {
- const database = sqlite(databasePath);
+ const database = sqlite(databasePath)
- const rightNowMillis = Date.now();
+ const rightNowMillis = Date.now()
- // Calculate fee and tax (if not set)
- let feeAmount: number;
- let taxAmount: number;
+ // Calculate fee and tax (if not set)
+ let feeAmount: number
+ let taxAmount: number
- if (lotOccupancyFeeForm.feeAmount) {
- feeAmount =
- typeof lotOccupancyFeeForm.feeAmount === "string"
- ? Number.parseFloat(lotOccupancyFeeForm.feeAmount)
- : feeAmount;
- taxAmount =
- typeof lotOccupancyFeeForm.taxAmount === "string"
- ? Number.parseFloat(lotOccupancyFeeForm.taxAmount)
- : taxAmount;
- } else {
- const lotOccupancy = getLotOccupancy(lotOccupancyFeeForm.lotOccupancyId);
- const fee = getFee(lotOccupancyFeeForm.feeId);
+ if (lotOccupancyFeeForm.feeAmount) {
+ feeAmount =
+ typeof lotOccupancyFeeForm.feeAmount === 'string'
+ ? Number.parseFloat(lotOccupancyFeeForm.feeAmount)
+ : 0
+ taxAmount =
+ typeof lotOccupancyFeeForm.taxAmount === 'string'
+ ? Number.parseFloat(lotOccupancyFeeForm.taxAmount)
+ : 0
+ } else {
+ const lotOccupancy = getLotOccupancy(lotOccupancyFeeForm.lotOccupancyId)!
+ const fee = getFee(lotOccupancyFeeForm.feeId)
- feeAmount = calculateFeeAmount(fee, lotOccupancy);
- taxAmount = calculateTaxAmount(fee, feeAmount);
- }
+ feeAmount = calculateFeeAmount(fee, lotOccupancy)
+ taxAmount = calculateTaxAmount(fee, feeAmount)
+ }
- // Check if record already exists
- const record: {
- feeAmount?: number;
- taxAmount?: number;
- recordDelete_timeMillis?: number;
- } = database
- .prepare(
- `select feeAmount, taxAmount, recordDelete_timeMillis
+ // Check if record already exists
+ const record: {
+ feeAmount?: number
+ taxAmount?: number
+ recordDelete_timeMillis?: number
+ } = database
+ .prepare(
+ `select feeAmount, taxAmount, recordDelete_timeMillis
from LotOccupancyFees
where lotOccupancyId = ?
and feeId = ?`
- )
- .get(lotOccupancyFeeForm.lotOccupancyId, lotOccupancyFeeForm.feeId);
+ )
+ .get(lotOccupancyFeeForm.lotOccupancyId, lotOccupancyFeeForm.feeId)
- if (record) {
- if (record.recordDelete_timeMillis) {
- database
- .prepare(
- `delete from LotOccupancyFees
+ if (record) {
+ if (record.recordDelete_timeMillis) {
+ database
+ .prepare(
+ `delete from LotOccupancyFees
where recordDelete_timeMillis is not null
and lotOccupancyId = ?
and feeId = ?`
- )
- .run(lotOccupancyFeeForm.lotOccupancyId, lotOccupancyFeeForm.feeId);
- } else if (record.feeAmount === feeAmount && record.taxAmount === taxAmount) {
- database
- .prepare(
- `update LotOccupancyFees
+ )
+ .run(lotOccupancyFeeForm.lotOccupancyId, lotOccupancyFeeForm.feeId)
+ } else if (
+ record.feeAmount === feeAmount &&
+ record.taxAmount === taxAmount
+ ) {
+ database
+ .prepare(
+ `update LotOccupancyFees
set quantity = quantity + ?,
recordUpdate_userName = ?,
recordUpdate_timeMillis = ?
where lotOccupancyId = ?
and feeId = ?`
- )
- .run(
- lotOccupancyFeeForm.quantity,
- requestSession.user.userName,
- rightNowMillis,
- lotOccupancyFeeForm.lotOccupancyId,
- lotOccupancyFeeForm.feeId
- );
+ )
+ .run(
+ lotOccupancyFeeForm.quantity,
+ requestSession.user!.userName,
+ rightNowMillis,
+ lotOccupancyFeeForm.lotOccupancyId,
+ lotOccupancyFeeForm.feeId
+ )
- database.close();
+ database.close()
- return true;
- } else {
- const quantity =
- typeof lotOccupancyFeeForm.quantity === "string"
- ? Number.parseFloat(lotOccupancyFeeForm.quantity)
- : lotOccupancyFeeForm.quantity;
+ return true
+ } else {
+ const quantity =
+ typeof lotOccupancyFeeForm.quantity === 'string'
+ ? Number.parseFloat(lotOccupancyFeeForm.quantity)
+ : lotOccupancyFeeForm.quantity
- database
- .prepare(
- `update LotOccupancyFees
- set feeAmount = (feeAmount * quantity) + ?,
- taxAmount = (taxAmount * quantity) + ?,
- quantity = 1,
- recordUpdate_userName = ?,
- recordUpdate_timeMillis = ?
- where lotOccupancyId = ?
- and feeId = ?`
- )
- .run(
- feeAmount * quantity,
- taxAmount * quantity,
- requestSession.user.userName,
- rightNowMillis,
- lotOccupancyFeeForm.lotOccupancyId,
- lotOccupancyFeeForm.feeId
- );
-
- database.close();
-
- return true;
- }
- }
-
- // Create new record
- const result = database
+ database
.prepare(
- `insert into LotOccupancyFees (
+ `update LotOccupancyFees
+ set feeAmount = (feeAmount * quantity) + ?,
+ taxAmount = (taxAmount * quantity) + ?,
+ quantity = 1,
+ recordUpdate_userName = ?,
+ recordUpdate_timeMillis = ?
+ where lotOccupancyId = ?
+ and feeId = ?`
+ )
+ .run(
+ feeAmount * quantity,
+ taxAmount * quantity,
+ requestSession.user!.userName,
+ rightNowMillis,
+ lotOccupancyFeeForm.lotOccupancyId,
+ lotOccupancyFeeForm.feeId
+ )
+
+ database.close()
+
+ return true
+ }
+ }
+
+ // Create new record
+ const result = database
+ .prepare(
+ `insert into LotOccupancyFees (
lotOccupancyId, feeId,
quantity, feeAmount, taxAmount,
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?)`
- )
- .run(
- lotOccupancyFeeForm.lotOccupancyId,
- lotOccupancyFeeForm.feeId,
- lotOccupancyFeeForm.quantity,
- feeAmount,
- taxAmount,
- requestSession.user.userName,
- rightNowMillis,
- requestSession.user.userName,
- rightNowMillis
- );
+ )
+ .run(
+ lotOccupancyFeeForm.lotOccupancyId,
+ lotOccupancyFeeForm.feeId,
+ lotOccupancyFeeForm.quantity,
+ feeAmount,
+ taxAmount,
+ requestSession.user!.userName,
+ rightNowMillis,
+ requestSession.user!.userName,
+ rightNowMillis
+ )
- database.close();
+ database.close()
- return result.changes > 0;
+ return result.changes > 0
}
-export default addLotOccupancyFee;
+export default addLotOccupancyFee
diff --git a/helpers/lotOccupancyDB/addLotOccupancyOccupant.d.ts b/helpers/lotOccupancyDB/addLotOccupancyOccupant.d.ts
index 7183d7ef..002d3b92 100644
--- a/helpers/lotOccupancyDB/addLotOccupancyOccupant.d.ts
+++ b/helpers/lotOccupancyDB/addLotOccupancyOccupant.d.ts
@@ -1,5 +1,5 @@
-import sqlite from "better-sqlite3";
-import type * as recordTypes from "../../types/recordTypes";
+import sqlite from 'better-sqlite3';
+import type * as recordTypes from '../../types/recordTypes';
interface AddLotOccupancyOccupantForm {
lotOccupancyId: string | number;
lotOccupantTypeId: string | number;
diff --git a/helpers/lotOccupancyDB/addLotOccupancyOccupant.js b/helpers/lotOccupancyDB/addLotOccupancyOccupant.js
index 6da977a7..2eb482a3 100644
--- a/helpers/lotOccupancyDB/addLotOccupancyOccupant.js
+++ b/helpers/lotOccupancyDB/addLotOccupancyOccupant.js
@@ -1,7 +1,7 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import sqlite from 'better-sqlite3';
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function addLotOccupancyOccupant(lotOccupancyOccupantForm, requestSession, connectedDatabase) {
- const database = connectedDatabase || sqlite(databasePath);
+ const database = connectedDatabase ?? sqlite(databasePath);
let lotOccupantIndex = 0;
const maxIndexResult = database
.prepare(`select lotOccupantIndex
@@ -26,7 +26,7 @@ export function addLotOccupancyOccupant(lotOccupancyOccupantForm, requestSession
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
- .run(lotOccupancyOccupantForm.lotOccupancyId, lotOccupantIndex, lotOccupancyOccupantForm.occupantName, lotOccupancyOccupantForm.occupantAddress1, lotOccupancyOccupantForm.occupantAddress2, lotOccupancyOccupantForm.occupantCity, lotOccupancyOccupantForm.occupantProvince, lotOccupancyOccupantForm.occupantPostalCode, lotOccupancyOccupantForm.occupantPhoneNumber, lotOccupancyOccupantForm.occupantEmailAddress, lotOccupancyOccupantForm.occupantComment || "", lotOccupancyOccupantForm.lotOccupantTypeId, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
+ .run(lotOccupancyOccupantForm.lotOccupancyId, lotOccupantIndex, lotOccupancyOccupantForm.occupantName, lotOccupancyOccupantForm.occupantAddress1, lotOccupancyOccupantForm.occupantAddress2, lotOccupancyOccupantForm.occupantCity, lotOccupancyOccupantForm.occupantProvince, lotOccupancyOccupantForm.occupantPostalCode, lotOccupancyOccupantForm.occupantPhoneNumber, lotOccupancyOccupantForm.occupantEmailAddress, lotOccupancyOccupantForm.occupantComment ?? '', lotOccupancyOccupantForm.lotOccupantTypeId, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
if (!connectedDatabase) {
database.close();
}
diff --git a/helpers/lotOccupancyDB/addLotOccupancyOccupant.ts b/helpers/lotOccupancyDB/addLotOccupancyOccupant.ts
index 5db534d6..efcafc86 100644
--- a/helpers/lotOccupancyDB/addLotOccupancyOccupant.ts
+++ b/helpers/lotOccupancyDB/addLotOccupancyOccupant.ts
@@ -1,51 +1,51 @@
-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 AddLotOccupancyOccupantForm {
- lotOccupancyId: string | number;
- lotOccupantTypeId: string | number;
- occupantName: string;
- occupantAddress1: string;
- occupantAddress2: string;
- occupantCity: string;
- occupantProvince: string;
- occupantPostalCode: string;
- occupantPhoneNumber: string;
- occupantEmailAddress: string;
- occupantComment?: string;
+ lotOccupancyId: string | number
+ lotOccupantTypeId: string | number
+ occupantName: string
+ occupantAddress1: string
+ occupantAddress2: string
+ occupantCity: string
+ occupantProvince: string
+ occupantPostalCode: string
+ occupantPhoneNumber: string
+ occupantEmailAddress: string
+ occupantComment?: string
}
export function addLotOccupancyOccupant(
- lotOccupancyOccupantForm: AddLotOccupancyOccupantForm,
- requestSession: recordTypes.PartialSession,
- connectedDatabase?: sqlite.Database
+ lotOccupancyOccupantForm: AddLotOccupancyOccupantForm,
+ requestSession: recordTypes.PartialSession,
+ connectedDatabase?: sqlite.Database
): number {
- const database = connectedDatabase || sqlite(databasePath);
+ const database = connectedDatabase ?? sqlite(databasePath)
- let lotOccupantIndex = 0;
+ let lotOccupantIndex = 0
- const maxIndexResult = database
- .prepare(
- `select lotOccupantIndex
+ const maxIndexResult = database
+ .prepare(
+ `select lotOccupantIndex
from LotOccupancyOccupants
where lotOccupancyId = ?
order by lotOccupantIndex desc
limit 1`
- )
- .get(lotOccupancyOccupantForm.lotOccupancyId);
+ )
+ .get(lotOccupancyOccupantForm.lotOccupancyId)
- if (maxIndexResult) {
- lotOccupantIndex = maxIndexResult.lotOccupantIndex + 1;
- }
+ if (maxIndexResult) {
+ lotOccupantIndex = maxIndexResult.lotOccupantIndex + 1
+ }
- const rightNowMillis = Date.now();
+ const rightNowMillis = Date.now()
- database
- .prepare(
- `insert into LotOccupancyOccupants (
+ database
+ .prepare(
+ `insert into LotOccupancyOccupants (
lotOccupancyId, lotOccupantIndex,
occupantName,
occupantAddress1, occupantAddress2,
@@ -56,31 +56,31 @@ export function addLotOccupancyOccupant(
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
- )
- .run(
- lotOccupancyOccupantForm.lotOccupancyId,
- lotOccupantIndex,
- lotOccupancyOccupantForm.occupantName,
- lotOccupancyOccupantForm.occupantAddress1,
- lotOccupancyOccupantForm.occupantAddress2,
- lotOccupancyOccupantForm.occupantCity,
- lotOccupancyOccupantForm.occupantProvince,
- lotOccupancyOccupantForm.occupantPostalCode,
- lotOccupancyOccupantForm.occupantPhoneNumber,
- lotOccupancyOccupantForm.occupantEmailAddress,
- lotOccupancyOccupantForm.occupantComment || "",
- lotOccupancyOccupantForm.lotOccupantTypeId,
- requestSession.user.userName,
- rightNowMillis,
- requestSession.user.userName,
- rightNowMillis
- );
+ )
+ .run(
+ lotOccupancyOccupantForm.lotOccupancyId,
+ lotOccupantIndex,
+ lotOccupancyOccupantForm.occupantName,
+ lotOccupancyOccupantForm.occupantAddress1,
+ lotOccupancyOccupantForm.occupantAddress2,
+ lotOccupancyOccupantForm.occupantCity,
+ lotOccupancyOccupantForm.occupantProvince,
+ lotOccupancyOccupantForm.occupantPostalCode,
+ lotOccupancyOccupantForm.occupantPhoneNumber,
+ lotOccupancyOccupantForm.occupantEmailAddress,
+ lotOccupancyOccupantForm.occupantComment ?? '',
+ lotOccupancyOccupantForm.lotOccupantTypeId,
+ requestSession.user!.userName,
+ rightNowMillis,
+ requestSession.user!.userName,
+ rightNowMillis
+ )
- if (!connectedDatabase) {
- database.close();
- }
+ if (!connectedDatabase) {
+ database.close()
+ }
- return lotOccupantIndex;
+ return lotOccupantIndex
}
-export default addLotOccupancyOccupant;
+export default addLotOccupancyOccupant
diff --git a/helpers/lotOccupancyDB/addLotOccupancyTransaction.d.ts b/helpers/lotOccupancyDB/addLotOccupancyTransaction.d.ts
index ee8f1bd6..3d2b107f 100644
--- a/helpers/lotOccupancyDB/addLotOccupancyTransaction.d.ts
+++ b/helpers/lotOccupancyDB/addLotOccupancyTransaction.d.ts
@@ -1,4 +1,4 @@
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes';
interface AddLotOccupancyTransactionForm {
lotOccupancyId: string | number;
transactionDateString?: string;
diff --git a/helpers/lotOccupancyDB/addLotOccupancyTransaction.js b/helpers/lotOccupancyDB/addLotOccupancyTransaction.js
index 42e8422d..a2f15b1d 100644
--- a/helpers/lotOccupancyDB/addLotOccupancyTransaction.js
+++ b/helpers/lotOccupancyDB/addLotOccupancyTransaction.js
@@ -1,6 +1,6 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
-import { dateStringToInteger, dateToInteger, dateToTimeInteger, timeStringToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js";
+import sqlite from 'better-sqlite3';
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
+import { dateStringToInteger, dateToInteger, dateToTimeInteger, timeStringToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js';
export function addLotOccupancyTransaction(lotOccupancyTransactionForm, requestSession) {
const database = sqlite(databasePath);
let transactionIndex = 0;
diff --git a/helpers/lotOccupancyDB/addLotOccupancyTransaction.ts b/helpers/lotOccupancyDB/addLotOccupancyTransaction.ts
index a33d2321..9e082f68 100644
--- a/helpers/lotOccupancyDB/addLotOccupancyTransaction.ts
+++ b/helpers/lotOccupancyDB/addLotOccupancyTransaction.ts
@@ -1,84 +1,84 @@
-import sqlite from "better-sqlite3";
+import sqlite from 'better-sqlite3'
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
import {
- dateStringToInteger,
- dateToInteger,
- dateToTimeInteger,
- timeStringToInteger
-} from "@cityssm/expressjs-server-js/dateTimeFns.js";
+ dateStringToInteger,
+ dateToInteger,
+ dateToTimeInteger,
+ timeStringToInteger
+} from '@cityssm/expressjs-server-js/dateTimeFns.js'
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes'
interface AddLotOccupancyTransactionForm {
- lotOccupancyId: string | number;
- transactionDateString?: string;
- transactionTimeString?: string;
- transactionAmount: string | number;
- externalReceiptNumber: string;
- transactionNote: string;
+ lotOccupancyId: string | number
+ transactionDateString?: string
+ transactionTimeString?: string
+ transactionAmount: string | number
+ externalReceiptNumber: string
+ transactionNote: string
}
export function addLotOccupancyTransaction(
- lotOccupancyTransactionForm: AddLotOccupancyTransactionForm,
- requestSession: recordTypes.PartialSession
+ lotOccupancyTransactionForm: AddLotOccupancyTransactionForm,
+ requestSession: recordTypes.PartialSession
): number {
- const database = sqlite(databasePath);
+ const database = sqlite(databasePath)
- let transactionIndex = 0;
+ let transactionIndex = 0
- const maxIndexResult = database
- .prepare(
- `select transactionIndex
+ const maxIndexResult: { transactionIndex: number } | undefined = database
+ .prepare(
+ `select transactionIndex
from LotOccupancyTransactions
where lotOccupancyId = ?
order by transactionIndex desc
limit 1`
- )
- .get(lotOccupancyTransactionForm.lotOccupancyId);
+ )
+ .get(lotOccupancyTransactionForm.lotOccupancyId)
- if (maxIndexResult) {
- transactionIndex = maxIndexResult.transactionIndex + 1;
- }
+ if (maxIndexResult) {
+ transactionIndex = maxIndexResult.transactionIndex + 1
+ }
- const rightNow = new Date();
+ const rightNow = new Date()
- const transactionDate = lotOccupancyTransactionForm.transactionDateString
- ? dateStringToInteger(lotOccupancyTransactionForm.transactionDateString)
- : dateToInteger(rightNow);
+ const transactionDate = lotOccupancyTransactionForm.transactionDateString
+ ? dateStringToInteger(lotOccupancyTransactionForm.transactionDateString)
+ : dateToInteger(rightNow)
- const transactionTime = lotOccupancyTransactionForm.transactionTimeString
- ? timeStringToInteger(lotOccupancyTransactionForm.transactionTimeString)
- : dateToTimeInteger(rightNow);
+ const transactionTime = lotOccupancyTransactionForm.transactionTimeString
+ ? timeStringToInteger(lotOccupancyTransactionForm.transactionTimeString)
+ : dateToTimeInteger(rightNow)
- database
- .prepare(
- `insert into LotOccupancyTransactions (
+ database
+ .prepare(
+ `insert into LotOccupancyTransactions (
lotOccupancyId, transactionIndex,
transactionDate, transactionTime,
transactionAmount, externalReceiptNumber, transactionNote,
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
- )
- .run(
- lotOccupancyTransactionForm.lotOccupancyId,
- transactionIndex,
- transactionDate,
- transactionTime,
- lotOccupancyTransactionForm.transactionAmount,
- lotOccupancyTransactionForm.externalReceiptNumber,
- lotOccupancyTransactionForm.transactionNote,
- requestSession.user.userName,
- rightNow.getTime(),
- requestSession.user.userName,
- rightNow.getTime()
- );
+ )
+ .run(
+ lotOccupancyTransactionForm.lotOccupancyId,
+ transactionIndex,
+ transactionDate,
+ transactionTime,
+ lotOccupancyTransactionForm.transactionAmount,
+ lotOccupancyTransactionForm.externalReceiptNumber,
+ lotOccupancyTransactionForm.transactionNote,
+ requestSession.user!.userName,
+ rightNow.getTime(),
+ requestSession.user!.userName,
+ rightNow.getTime()
+ )
- database.close();
+ database.close()
- return transactionIndex;
+ return transactionIndex
}
-export default addLotOccupancyTransaction;
+export default addLotOccupancyTransaction
diff --git a/helpers/lotOccupancyDB/addLotOccupantType.d.ts b/helpers/lotOccupancyDB/addLotOccupantType.d.ts
index 14ffe3b0..8ff98457 100644
--- a/helpers/lotOccupancyDB/addLotOccupantType.d.ts
+++ b/helpers/lotOccupancyDB/addLotOccupantType.d.ts
@@ -1,4 +1,4 @@
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes';
interface AddLotOccupantTypeForm {
lotOccupantType: string;
fontAwesomeIconClass?: string;
diff --git a/helpers/lotOccupancyDB/addLotOccupantType.js b/helpers/lotOccupancyDB/addLotOccupantType.js
index ce5c00a7..ada2cc8b 100644
--- a/helpers/lotOccupancyDB/addLotOccupantType.js
+++ b/helpers/lotOccupancyDB/addLotOccupantType.js
@@ -1,6 +1,6 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
-import { clearCacheByTableName } from "../functions.cache.js";
+import sqlite from 'better-sqlite3';
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
+import { clearCacheByTableName } from '../functions.cache.js';
export function addLotOccupantType(lotOccupantTypeForm, requestSession) {
const database = sqlite(databasePath);
const rightNowMillis = Date.now();
@@ -10,9 +10,9 @@ export function addLotOccupantType(lotOccupantTypeForm, requestSession) {
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?)`)
- .run(lotOccupantTypeForm.lotOccupantType, lotOccupantTypeForm.fontAwesomeIconClass || "", lotOccupantTypeForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
+ .run(lotOccupantTypeForm.lotOccupantType, lotOccupantTypeForm.fontAwesomeIconClass ?? '', lotOccupantTypeForm.orderNumber ?? -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
database.close();
- clearCacheByTableName("LotOccupantTypes");
+ clearCacheByTableName('LotOccupantTypes');
return result.lastInsertRowid;
}
export default addLotOccupantType;
diff --git a/helpers/lotOccupancyDB/addLotOccupantType.ts b/helpers/lotOccupancyDB/addLotOccupantType.ts
index 0d4e7369..bfa0ad8b 100644
--- a/helpers/lotOccupancyDB/addLotOccupantType.ts
+++ b/helpers/lotOccupancyDB/addLotOccupantType.ts
@@ -1,47 +1,47 @@
-import sqlite from "better-sqlite3";
+import sqlite from 'better-sqlite3'
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
-import type * as recordTypes from "../../types/recordTypes";
-import { clearCacheByTableName } from "../functions.cache.js";
+import type * as recordTypes from '../../types/recordTypes'
+import { clearCacheByTableName } from '../functions.cache.js'
interface AddLotOccupantTypeForm {
- lotOccupantType: string;
- fontAwesomeIconClass?: string;
- orderNumber?: number;
+ lotOccupantType: string
+ fontAwesomeIconClass?: string
+ orderNumber?: number
}
export function addLotOccupantType(
- lotOccupantTypeForm: AddLotOccupantTypeForm,
- requestSession: recordTypes.PartialSession
+ lotOccupantTypeForm: AddLotOccupantTypeForm,
+ requestSession: recordTypes.PartialSession
): number {
- const database = sqlite(databasePath);
+ const database = sqlite(databasePath)
- const rightNowMillis = Date.now();
+ const rightNowMillis = Date.now()
- const result = database
- .prepare(
- `insert into LotOccupantTypes (
+ const result = database
+ .prepare(
+ `insert into LotOccupantTypes (
lotOccupantType, fontAwesomeIconClass, orderNumber,
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?)`
- )
- .run(
- lotOccupantTypeForm.lotOccupantType,
- lotOccupantTypeForm.fontAwesomeIconClass || "",
- lotOccupantTypeForm.orderNumber || -1,
- requestSession.user.userName,
- rightNowMillis,
- requestSession.user.userName,
- rightNowMillis
- );
+ )
+ .run(
+ lotOccupantTypeForm.lotOccupantType,
+ lotOccupantTypeForm.fontAwesomeIconClass ?? '',
+ lotOccupantTypeForm.orderNumber ?? -1,
+ requestSession.user!.userName,
+ rightNowMillis,
+ requestSession.user!.userName,
+ rightNowMillis
+ )
- database.close();
+ database.close()
- clearCacheByTableName("LotOccupantTypes");
+ clearCacheByTableName('LotOccupantTypes')
- return result.lastInsertRowid as number;
+ return result.lastInsertRowid as number
}
-export default addLotOccupantType;
+export default addLotOccupantType
diff --git a/helpers/lotOccupancyDB/addLotTypeField.d.ts b/helpers/lotOccupancyDB/addLotTypeField.d.ts
index fb1ef32b..d9d109ae 100644
--- a/helpers/lotOccupancyDB/addLotTypeField.d.ts
+++ b/helpers/lotOccupancyDB/addLotTypeField.d.ts
@@ -1,4 +1,4 @@
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes';
interface AddLotTypeFieldForm {
lotTypeId: string | number;
lotTypeField: string;
diff --git a/helpers/lotOccupancyDB/addLotTypeField.js b/helpers/lotOccupancyDB/addLotTypeField.js
index c1e7bba2..224890a8 100644
--- a/helpers/lotOccupancyDB/addLotTypeField.js
+++ b/helpers/lotOccupancyDB/addLotTypeField.js
@@ -1,6 +1,6 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
-import { clearCacheByTableName } from "../functions.cache.js";
+import sqlite from 'better-sqlite3';
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
+import { clearCacheByTableName } from '../functions.cache.js';
export function addLotTypeField(lotTypeFieldForm, requestSession) {
const database = sqlite(databasePath);
const rightNowMillis = Date.now();
@@ -13,9 +13,9 @@ export function addLotTypeField(lotTypeFieldForm, requestSession) {
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
- .run(lotTypeFieldForm.lotTypeId, lotTypeFieldForm.lotTypeField, lotTypeFieldForm.lotTypeFieldValues || "", lotTypeFieldForm.isRequired ? 1 : 0, lotTypeFieldForm.pattern || "", lotTypeFieldForm.minimumLength || 0, lotTypeFieldForm.maximumLength || 100, lotTypeFieldForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
+ .run(lotTypeFieldForm.lotTypeId, lotTypeFieldForm.lotTypeField, lotTypeFieldForm.lotTypeFieldValues ?? '', lotTypeFieldForm.isRequired === '' ? 0 : 1, lotTypeFieldForm.pattern ?? '', lotTypeFieldForm.minimumLength ?? 0, lotTypeFieldForm.maximumLength ?? 100, lotTypeFieldForm.orderNumber ?? -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
database.close();
- clearCacheByTableName("LotTypeFields");
+ clearCacheByTableName('LotTypeFields');
return result.lastInsertRowid;
}
export default addLotTypeField;
diff --git a/helpers/lotOccupancyDB/addLotTypeField.ts b/helpers/lotOccupancyDB/addLotTypeField.ts
index d025a8b5..6c95b937 100644
--- a/helpers/lotOccupancyDB/addLotTypeField.ts
+++ b/helpers/lotOccupancyDB/addLotTypeField.ts
@@ -1,33 +1,33 @@
-import sqlite from "better-sqlite3";
+import sqlite from 'better-sqlite3'
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js'
-import { clearCacheByTableName } from "../functions.cache.js";
+import { clearCacheByTableName } from '../functions.cache.js'
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes'
interface AddLotTypeFieldForm {
- lotTypeId: string | number;
- lotTypeField: string;
- lotTypeFieldValues?: string;
- isRequired?: string;
- pattern?: string;
- minimumLength: string | number;
- maximumLength: string | number;
- orderNumber?: number;
+ lotTypeId: string | number
+ lotTypeField: string
+ lotTypeFieldValues?: string
+ isRequired?: string
+ pattern?: string
+ minimumLength: string | number
+ maximumLength: string | number
+ orderNumber?: number
}
export function addLotTypeField(
- lotTypeFieldForm: AddLotTypeFieldForm,
- requestSession: recordTypes.PartialSession
+ lotTypeFieldForm: AddLotTypeFieldForm,
+ requestSession: recordTypes.PartialSession
): number {
- const database = sqlite(databasePath);
+ const database = sqlite(databasePath)
- const rightNowMillis = Date.now();
+ const rightNowMillis = Date.now()
- const result = database
- .prepare(
- `insert into LotTypeFields (
+ const result = database
+ .prepare(
+ `insert into LotTypeFields (
lotTypeId, lotTypeField, lotTypeFieldValues,
isRequired, pattern,
minimumLength, maximumLength,
@@ -35,27 +35,27 @@ export function addLotTypeField(
recordCreate_userName, recordCreate_timeMillis,
recordUpdate_userName, recordUpdate_timeMillis)
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
- )
- .run(
- lotTypeFieldForm.lotTypeId,
- lotTypeFieldForm.lotTypeField,
- lotTypeFieldForm.lotTypeFieldValues || "",
- lotTypeFieldForm.isRequired ? 1 : 0,
- lotTypeFieldForm.pattern || "",
- lotTypeFieldForm.minimumLength || 0,
- lotTypeFieldForm.maximumLength || 100,
- lotTypeFieldForm.orderNumber || -1,
- requestSession.user.userName,
- rightNowMillis,
- requestSession.user.userName,
- rightNowMillis
- );
+ )
+ .run(
+ lotTypeFieldForm.lotTypeId,
+ lotTypeFieldForm.lotTypeField,
+ lotTypeFieldForm.lotTypeFieldValues ?? '',
+ lotTypeFieldForm.isRequired === '' ? 0 : 1,
+ lotTypeFieldForm.pattern ?? '',
+ lotTypeFieldForm.minimumLength ?? 0,
+ lotTypeFieldForm.maximumLength ?? 100,
+ lotTypeFieldForm.orderNumber ?? -1,
+ requestSession.user!.userName,
+ rightNowMillis,
+ requestSession.user!.userName,
+ rightNowMillis
+ )
- database.close();
+ database.close()
- clearCacheByTableName("LotTypeFields");
+ clearCacheByTableName('LotTypeFields')
- return result.lastInsertRowid as number;
+ return result.lastInsertRowid as number
}
-export default addLotTypeField;
+export default addLotTypeField
diff --git a/helpers/lotOccupancyDB/addMap.d.ts b/helpers/lotOccupancyDB/addMap.d.ts
index 47be9a34..224e9119 100644
--- a/helpers/lotOccupancyDB/addMap.d.ts
+++ b/helpers/lotOccupancyDB/addMap.d.ts
@@ -1,4 +1,4 @@
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes';
interface AddMapForm {
mapName: string;
mapDescription: string;
diff --git a/helpers/lotOccupancyDB/addMap.js b/helpers/lotOccupancyDB/addMap.js
index 9d3540aa..ad1eb25d 100644
--- a/helpers/lotOccupancyDB/addMap.js
+++ b/helpers/lotOccupancyDB/addMap.js
@@ -1,19 +1,19 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import sqlite from 'better-sqlite3';
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
export function addMap(mapForm, requestSession) {
const database = sqlite(databasePath);
const rightNowMillis = Date.now();
const result = database
.prepare(`insert into Maps (
- mapName, mapDescription,
- mapSVG, mapLatitude, mapLongitude,
- mapAddress1, mapAddress2,
- mapCity, mapProvince, mapPostalCode,
- mapPhoneNumber,
- recordCreate_userName, recordCreate_timeMillis,
- recordUpdate_userName, recordUpdate_timeMillis)
- values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
- .run(mapForm.mapName, mapForm.mapDescription, mapForm.mapSVG, mapForm.mapLatitude === "" ? undefined : mapForm.mapLatitude, mapForm.mapLongitude === "" ? undefined : mapForm.mapLongitude, mapForm.mapAddress1, mapForm.mapAddress2, mapForm.mapCity, mapForm.mapProvince, mapForm.mapPostalCode, mapForm.mapPhoneNumber, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
+ mapName, mapDescription,
+ mapSVG, mapLatitude, mapLongitude,
+ mapAddress1, mapAddress2,
+ mapCity, mapProvince, mapPostalCode,
+ mapPhoneNumber,
+ recordCreate_userName, recordCreate_timeMillis,
+ recordUpdate_userName, recordUpdate_timeMillis)
+ values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
+ .run(mapForm.mapName, mapForm.mapDescription, mapForm.mapSVG, mapForm.mapLatitude === '' ? undefined : mapForm.mapLatitude, mapForm.mapLongitude === '' ? undefined : mapForm.mapLongitude, mapForm.mapAddress1, mapForm.mapAddress2, mapForm.mapCity, mapForm.mapProvince, mapForm.mapPostalCode, mapForm.mapPhoneNumber, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
database.close();
return result.lastInsertRowid;
}
diff --git a/helpers/lotOccupancyDB/addMap.ts b/helpers/lotOccupancyDB/addMap.ts
index 49e50f69..0bf4070d 100644
--- a/helpers/lotOccupancyDB/addMap.ts
+++ b/helpers/lotOccupancyDB/addMap.ts
@@ -1,61 +1,64 @@
-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 AddMapForm {
- mapName: string;
- mapDescription: string;
- mapSVG: string;
- mapLatitude: string;
- mapLongitude: string;
- mapAddress1: string;
- mapAddress2: string;
- mapCity: string;
- mapProvince: string;
- mapPostalCode: string;
- mapPhoneNumber: string;
+ mapName: string
+ mapDescription: string
+ mapSVG: string
+ mapLatitude: string
+ mapLongitude: string
+ mapAddress1: string
+ mapAddress2: string
+ mapCity: string
+ mapProvince: string
+ mapPostalCode: string
+ mapPhoneNumber: string
}
-export function addMap(mapForm: AddMapForm, requestSession: recordTypes.PartialSession): number {
- const database = sqlite(databasePath);
+export function addMap(
+ mapForm: AddMapForm,
+ requestSession: recordTypes.PartialSession
+): number {
+ const database = sqlite(databasePath)
- const rightNowMillis = Date.now();
+ const rightNowMillis = Date.now()
- const result = database
- .prepare(
- `insert into Maps (
- mapName, mapDescription,
- mapSVG, mapLatitude, mapLongitude,
- mapAddress1, mapAddress2,
- mapCity, mapProvince, mapPostalCode,
- mapPhoneNumber,
- recordCreate_userName, recordCreate_timeMillis,
- recordUpdate_userName, recordUpdate_timeMillis)
- values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
- )
- .run(
- mapForm.mapName,
- mapForm.mapDescription,
- mapForm.mapSVG,
- mapForm.mapLatitude === "" ? undefined : mapForm.mapLatitude,
- mapForm.mapLongitude === "" ? undefined : mapForm.mapLongitude,
- mapForm.mapAddress1,
- mapForm.mapAddress2,
- mapForm.mapCity,
- mapForm.mapProvince,
- mapForm.mapPostalCode,
- mapForm.mapPhoneNumber,
- requestSession.user.userName,
- rightNowMillis,
- requestSession.user.userName,
- rightNowMillis
- );
+ const result = database
+ .prepare(
+ `insert into Maps (
+ mapName, mapDescription,
+ mapSVG, mapLatitude, mapLongitude,
+ mapAddress1, mapAddress2,
+ mapCity, mapProvince, mapPostalCode,
+ mapPhoneNumber,
+ recordCreate_userName, recordCreate_timeMillis,
+ recordUpdate_userName, recordUpdate_timeMillis)
+ values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
+ )
+ .run(
+ mapForm.mapName,
+ mapForm.mapDescription,
+ mapForm.mapSVG,
+ mapForm.mapLatitude === '' ? undefined : mapForm.mapLatitude,
+ mapForm.mapLongitude === '' ? undefined : mapForm.mapLongitude,
+ mapForm.mapAddress1,
+ mapForm.mapAddress2,
+ mapForm.mapCity,
+ mapForm.mapProvince,
+ mapForm.mapPostalCode,
+ mapForm.mapPhoneNumber,
+ requestSession.user!.userName,
+ rightNowMillis,
+ requestSession.user!.userName,
+ rightNowMillis
+ )
- database.close();
+ database.close()
- return result.lastInsertRowid as number;
+ return result.lastInsertRowid as number
}
-export default addMap;
+export default addMap
diff --git a/helpers/lotOccupancyDB/getLotOccupancy.d.ts b/helpers/lotOccupancyDB/getLotOccupancy.d.ts
index 505b09e0..df59f0d7 100644
--- a/helpers/lotOccupancyDB/getLotOccupancy.d.ts
+++ b/helpers/lotOccupancyDB/getLotOccupancy.d.ts
@@ -1,4 +1,4 @@
-import sqlite from "better-sqlite3";
-import type * as recordTypes from "../../types/recordTypes";
-export declare function getLotOccupancy(lotOccupancyId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotOccupancy;
+import sqlite from 'better-sqlite3';
+import type * as recordTypes from '../../types/recordTypes';
+export declare function getLotOccupancy(lotOccupancyId: number | string, connectedDatabase?: sqlite.Database): recordTypes.LotOccupancy | undefined;
export default getLotOccupancy;
diff --git a/helpers/lotOccupancyDB/getLotOccupancy.js b/helpers/lotOccupancyDB/getLotOccupancy.js
index fc11937d..59e4f1dd 100644
--- a/helpers/lotOccupancyDB/getLotOccupancy.js
+++ b/helpers/lotOccupancyDB/getLotOccupancy.js
@@ -1,18 +1,18 @@
-import sqlite from "better-sqlite3";
-import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
-import { dateIntegerToString } from "@cityssm/expressjs-server-js/dateTimeFns.js";
-import { getLotOccupancyOccupants } from "./getLotOccupancyOccupants.js";
-import { getLotOccupancyComments } from "./getLotOccupancyComments.js";
-import { getLotOccupancyFields } from "./getLotOccupancyFields.js";
-import { getLotOccupancyFees } from "./getLotOccupancyFees.js";
-import { getLotOccupancyTransactions } from "./getLotOccupancyTransactions.js";
-import { getWorkOrders } from "./getWorkOrders.js";
+import sqlite from 'better-sqlite3';
+import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js';
+import { dateIntegerToString } from '@cityssm/expressjs-server-js/dateTimeFns.js';
+import { getLotOccupancyOccupants } from './getLotOccupancyOccupants.js';
+import { getLotOccupancyComments } from './getLotOccupancyComments.js';
+import { getLotOccupancyFields } from './getLotOccupancyFields.js';
+import { getLotOccupancyFees } from './getLotOccupancyFees.js';
+import { getLotOccupancyTransactions } from './getLotOccupancyTransactions.js';
+import { getWorkOrders } from './getWorkOrders.js';
export function getLotOccupancy(lotOccupancyId, connectedDatabase) {
- const database = connectedDatabase ||
+ const database = connectedDatabase ??
sqlite(databasePath, {
readonly: true
});
- database.function("userFn_dateIntegerToString", dateIntegerToString);
+ database.function('userFn_dateIntegerToString', dateIntegerToString);
const lotOccupancy = database
.prepare(`select o.lotOccupancyId,
o.occupancyTypeId, t.occupancyType,
diff --git a/helpers/lotOccupancyDB/getLotOccupancy.ts b/helpers/lotOccupancyDB/getLotOccupancy.ts
index bf20ee23..5f9593ed 100644
--- a/helpers/lotOccupancyDB/getLotOccupancy.ts
+++ b/helpers/lotOccupancyDB/getLotOccupancy.ts
@@ -1,33 +1,33 @@
-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 } from "@cityssm/expressjs-server-js/dateTimeFns.js";
+import { dateIntegerToString } from '@cityssm/expressjs-server-js/dateTimeFns.js'
-import { getLotOccupancyOccupants } from "./getLotOccupancyOccupants.js";
-import { getLotOccupancyComments } from "./getLotOccupancyComments.js";
-import { getLotOccupancyFields } from "./getLotOccupancyFields.js";
-import { getLotOccupancyFees } from "./getLotOccupancyFees.js";
-import { getLotOccupancyTransactions } from "./getLotOccupancyTransactions.js";
-import { getWorkOrders } from "./getWorkOrders.js";
+import { getLotOccupancyOccupants } from './getLotOccupancyOccupants.js'
+import { getLotOccupancyComments } from './getLotOccupancyComments.js'
+import { getLotOccupancyFields } from './getLotOccupancyFields.js'
+import { getLotOccupancyFees } from './getLotOccupancyFees.js'
+import { getLotOccupancyTransactions } from './getLotOccupancyTransactions.js'
+import { getWorkOrders } from './getWorkOrders.js'
-import type * as recordTypes from "../../types/recordTypes";
+import type * as recordTypes from '../../types/recordTypes'
export function getLotOccupancy(
- lotOccupancyId: number | string,
- connectedDatabase?: sqlite.Database
-): recordTypes.LotOccupancy {
- const database =
- connectedDatabase ||
- sqlite(databasePath, {
- readonly: true
- });
+ lotOccupancyId: number | string,
+ connectedDatabase?: sqlite.Database
+): recordTypes.LotOccupancy | undefined {
+ const database =
+ connectedDatabase ??
+ sqlite(databasePath, {
+ readonly: true
+ })
- database.function("userFn_dateIntegerToString", dateIntegerToString);
+ database.function('userFn_dateIntegerToString', dateIntegerToString)
- const lotOccupancy: recordTypes.LotOccupancy = database
- .prepare(
- `select o.lotOccupancyId,
+ const lotOccupancy: recordTypes.LotOccupancy | undefined = database
+ .prepare(
+ `select o.lotOccupancyId,
o.occupancyTypeId, t.occupancyType,
o.lotId, l.lotName, l.lotTypeId,
l.mapId, m.mapName,
@@ -40,36 +40,48 @@ export function getLotOccupancy(
left join Maps m on l.mapId = m.mapId
where o.recordDelete_timeMillis is null
and o.lotOccupancyId = ?`
- )
- .get(lotOccupancyId);
+ )
+ .get(lotOccupancyId)
- if (lotOccupancy) {
- lotOccupancy.lotOccupancyFields = getLotOccupancyFields(lotOccupancyId, database);
- lotOccupancy.lotOccupancyOccupants = getLotOccupancyOccupants(lotOccupancyId, database);
- lotOccupancy.lotOccupancyComments = getLotOccupancyComments(lotOccupancyId, database);
- lotOccupancy.lotOccupancyFees = getLotOccupancyFees(lotOccupancyId, database);
- lotOccupancy.lotOccupancyTransactions = getLotOccupancyTransactions(
- lotOccupancyId,
- database
- );
+ if (lotOccupancy) {
+ lotOccupancy.lotOccupancyFields = getLotOccupancyFields(
+ lotOccupancyId,
+ database
+ )
+ lotOccupancy.lotOccupancyOccupants = getLotOccupancyOccupants(
+ lotOccupancyId,
+ database
+ )
+ lotOccupancy.lotOccupancyComments = getLotOccupancyComments(
+ lotOccupancyId,
+ database
+ )
+ lotOccupancy.lotOccupancyFees = getLotOccupancyFees(
+ lotOccupancyId,
+ database
+ )
+ lotOccupancy.lotOccupancyTransactions = getLotOccupancyTransactions(
+ lotOccupancyId,
+ database
+ )
- lotOccupancy.workOrders = getWorkOrders(
- {
- lotOccupancyId
- },
- {
- limit: -1,
- offset: 0
- },
- database
- ).workOrders;
- }
+ lotOccupancy.workOrders = getWorkOrders(
+ {
+ lotOccupancyId
+ },
+ {
+ limit: -1,
+ offset: 0
+ },
+ database
+ ).workOrders
+ }
- if (!connectedDatabase) {
- database.close();
- }
+ if (!connectedDatabase) {
+ database.close()
+ }
- return lotOccupancy;
+ return lotOccupancy
}
-export default getLotOccupancy;
+export default getLotOccupancy
diff --git a/package-lock.json b/package-lock.json
index aa44d446..29b63375 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -78,6 +78,7 @@
"cypress": "^12.3.0",
"cypress-axe": "^1.2.0",
"eslint": "^8.31.0",
+ "eslint-config-standard-with-typescript": "^26.0.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.1.1",
@@ -2442,6 +2443,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/builtins": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "semver": "^7.0.0"
+ }
+ },
"node_modules/bulma": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz",
@@ -4020,6 +4031,50 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint-config-standard": {
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz",
+ "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "peerDependencies": {
+ "eslint": "^8.0.1",
+ "eslint-plugin-import": "^2.25.2",
+ "eslint-plugin-n": "^15.0.0",
+ "eslint-plugin-promise": "^6.0.0"
+ }
+ },
+ "node_modules/eslint-config-standard-with-typescript": {
+ "version": "26.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-26.0.0.tgz",
+ "integrity": "sha512-TluIWunQo76qp4MHyYIaTT+sN2q2v/jTeE3Dj4rXsSbx27GOUEOujhJaAL3v9dHVQelAK13gZ5Jy9IWnWCyFrg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint-config-standard": "17.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^5.0.0",
+ "eslint": "^8.0.1",
+ "eslint-plugin-import": "^2.25.2",
+ "eslint-plugin-n": "^15.0.0",
+ "eslint-plugin-promise": "^6.0.0",
+ "typescript": "*"
+ }
+ },
"node_modules/eslint-import-resolver-node": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
@@ -4158,6 +4213,78 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
+ "node_modules/eslint-plugin-n": {
+ "version": "15.6.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz",
+ "integrity": "sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "builtins": "^5.0.1",
+ "eslint-plugin-es": "^4.1.0",
+ "eslint-utils": "^3.0.0",
+ "ignore": "^5.1.1",
+ "is-core-module": "^2.11.0",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.1",
+ "semver": "^7.3.8"
+ },
+ "engines": {
+ "node": ">=12.22.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-n/node_modules/eslint-plugin-es": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
+ "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=4.19.1"
+ }
+ },
+ "node_modules/eslint-plugin-n/node_modules/eslint-plugin-es/node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/eslint-plugin-n/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/eslint-plugin-node": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
@@ -7032,9 +7159,9 @@
}
},
"node_modules/is-core-module": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
- "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
@@ -14465,6 +14592,16 @@
"integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
"dev": true
},
+ "builtins": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "semver": "^7.0.0"
+ }
+ },
"bulma": {
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz",
@@ -15761,6 +15898,23 @@
}
}
},
+ "eslint-config-standard": {
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz",
+ "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-config-standard-with-typescript": {
+ "version": "26.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-26.0.0.tgz",
+ "integrity": "sha512-TluIWunQo76qp4MHyYIaTT+sN2q2v/jTeE3Dj4rXsSbx27GOUEOujhJaAL3v9dHVQelAK13gZ5Jy9IWnWCyFrg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint-config-standard": "17.0.0"
+ }
+ },
"eslint-import-resolver-node": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
@@ -15877,6 +16031,55 @@
}
}
},
+ "eslint-plugin-n": {
+ "version": "15.6.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz",
+ "integrity": "sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "builtins": "^5.0.1",
+ "eslint-plugin-es": "^4.1.0",
+ "eslint-utils": "^3.0.0",
+ "ignore": "^5.1.1",
+ "is-core-module": "^2.11.0",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.1",
+ "semver": "^7.3.8"
+ },
+ "dependencies": {
+ "eslint-plugin-es": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
+ "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
+ },
+ "dependencies": {
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ }
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
"eslint-plugin-node": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
@@ -17998,9 +18201,9 @@
}
},
"is-core-module": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
- "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
"dev": true,
"requires": {
"has": "^1.0.3"
diff --git a/package.json b/package.json
index 03373262..49d54357 100644
--- a/package.json
+++ b/package.json
@@ -1,117 +1,118 @@
{
- "name": "lot-occupancy-system",
- "version": "1.0.0-alpha.6",
- "type": "module",
- "description": "A system for managing the occupancy of lots. (i.e. Cemetery management)",
- "exports": "./app.js",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "scripts": {
- "build:version": "npx genversion --es6 --semi version.js",
- "init:cemetery": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* node ./helpers/initializer.database.cemetery.js",
- "init:cemetery:test": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true node ./helpers/initializer.database.cemetery.js",
- "start": "cross-env NODE_ENV=production node ./bin/www",
- "dev:test": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true nodemon ./bin/www.js",
- "dev:live": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* nodemon ./bin/www.js",
- "cy:open": "cypress open --config-file cypress.config.ts",
- "cy:run": "cypress run --config-file cypress.config.ts",
- "test": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true mocha --timeout 30000 --exit",
- "coverage": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true c8 --reporter=lcov --reporter=text --reporter=text-summary mocha --timeout 30000 --exit",
- "temp:legacy:importFromCsv": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true node ./temp/legacy.importFromCsv.js",
- "temp:so:exportMaps": "node ./temp/so.exportMaps.js"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/cityssm/lot-occupancy-manager.git"
- },
- "author": "The Corporation of the City of Sault Ste. Marie",
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/cityssm/lot-occupancy-manager/issues"
- },
- "homepage": "https://github.com/cityssm/lot-occupancy-manager#readme",
- "private": true,
- "dependencies": {
- "@cityssm/bulma-js": "^0.4.0",
- "@cityssm/bulma-webapp-js": "^1.5.0",
- "@cityssm/date-diff": "^2.2.3",
- "@cityssm/expressjs-server-js": "^2.3.3",
- "@cityssm/ntfy-publish": "^0.2.1",
- "@cityssm/pdf-puppeteer": "^2.0.0-beta.1",
- "@fortawesome/fontawesome-free": "^5.15.4",
- "activedirectory2": "^2.1.0",
- "better-sqlite3": "^8.0.1",
- "bulma-calendar": "^6.1.18",
- "camelcase": "^7.0.1",
- "compression": "^1.7.4",
- "cookie-parser": "^1.4.6",
- "cross-env": "^7.0.3",
- "csurf": "^1.11.0",
- "debug": "^4.3.4",
- "ejs": "^3.1.8",
- "exit-hook": "^3.1.4",
- "express": "^4.18.2",
- "express-rate-limit": "^6.7.0",
- "express-session": "^1.17.3",
- "font-awesome-v5-icons": "^1.3.0",
- "http-errors": "^2.0.0",
- "ical-generator": "^3.6.1",
- "leaflet": "^1.9.3",
- "papaparse": "^5.3.2",
- "randomcolor": "^0.6.2",
- "session-file-store": "^1.5.0",
- "uuid": "^9.0.0"
- },
- "devDependencies": {
- "@cityssm/bulma-a11y": "^0.4.0",
- "@cityssm/bulma-sticky-table": "^2.0.1",
- "@cityssm/bulma-webapp-css": "^0.12.0",
- "@cityssm/fa-glow": "^0.1.0",
- "@cityssm/mssql-multi-pool": "^2.2.0",
- "@cityssm/simple-fa5-checkbox": "^0.2.1",
- "@types/activedirectory2": "^1.2.3",
- "@types/better-sqlite3": "^7.6.3",
- "@types/compression": "^1.7.2",
- "@types/cookie-parser": "^1.4.3",
- "@types/csurf": "^1.11.2",
- "@types/debug": "^4.1.7",
- "@types/ejs": "^3.1.1",
- "@types/express": "^4.17.15",
- "@types/express-session": "^1.17.5",
- "@types/gulp": "^4.0.10",
- "@types/gulp-changed": "^0.0.35",
- "@types/gulp-minify": "^3.1.1",
- "@types/gulp-sass": "^5.0.0",
- "@types/http-errors": "^2.0.1",
- "@types/leaflet": "^1.9.0",
- "@types/mocha": "^10.0.1",
- "@types/node-windows": "^0.1.2",
- "@types/papaparse": "^5.3.7",
- "@types/randomcolor": "^0.5.7",
- "@types/session-file-store": "^1.2.2",
- "@types/uuid": "^9.0.0",
- "@typescript-eslint/eslint-plugin": "^5.48.1",
- "@typescript-eslint/parser": "^5.48.1",
- "bulma": "^0.9.4",
- "bulma-divider": "^0.2.0",
- "bulma-helpers": "^0.4.3",
- "bulma-steps": "^2.2.1",
- "bulma-switch": "^2.0.4",
- "bulma-tooltip": "^3.0.2",
- "cypress": "^12.3.0",
- "cypress-axe": "^1.2.0",
- "eslint": "^8.31.0",
- "eslint-plugin-import": "^2.26.0",
- "eslint-plugin-node": "^11.1.0",
- "eslint-plugin-promise": "^6.1.1",
- "eslint-plugin-unicorn": "^45.0.2",
- "gulp": "^4.0.2",
- "gulp-changed": "^4.0.3",
- "gulp-include": "^2.4.1",
- "gulp-minify": "^3.1.0",
- "gulp-sass": "^5.1.0",
- "nodemon": "^2.0.20",
- "sass": "^1.57.1"
- }
+ "name": "lot-occupancy-system",
+ "version": "1.0.0-alpha.6",
+ "type": "module",
+ "description": "A system for managing the occupancy of lots. (i.e. Cemetery management)",
+ "exports": "./app.js",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "scripts": {
+ "build:version": "npx genversion --es6 --semi version.js",
+ "init:cemetery": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* node ./helpers/initializer.database.cemetery.js",
+ "init:cemetery:test": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true node ./helpers/initializer.database.cemetery.js",
+ "start": "cross-env NODE_ENV=production node ./bin/www",
+ "dev:test": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true nodemon ./bin/www.js",
+ "dev:live": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* nodemon ./bin/www.js",
+ "cy:open": "cypress open --config-file cypress.config.ts",
+ "cy:run": "cypress run --config-file cypress.config.ts",
+ "test": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true mocha --timeout 30000 --exit",
+ "coverage": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true c8 --reporter=lcov --reporter=text --reporter=text-summary mocha --timeout 30000 --exit",
+ "temp:legacy:importFromCsv": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true node ./temp/legacy.importFromCsv.js",
+ "temp:so:exportMaps": "node ./temp/so.exportMaps.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/cityssm/lot-occupancy-manager.git"
+ },
+ "author": "The Corporation of the City of Sault Ste. Marie",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/cityssm/lot-occupancy-manager/issues"
+ },
+ "homepage": "https://github.com/cityssm/lot-occupancy-manager#readme",
+ "private": true,
+ "dependencies": {
+ "@cityssm/bulma-js": "^0.4.0",
+ "@cityssm/bulma-webapp-js": "^1.5.0",
+ "@cityssm/date-diff": "^2.2.3",
+ "@cityssm/expressjs-server-js": "^2.3.3",
+ "@cityssm/ntfy-publish": "^0.2.1",
+ "@cityssm/pdf-puppeteer": "^2.0.0-beta.1",
+ "@fortawesome/fontawesome-free": "^5.15.4",
+ "activedirectory2": "^2.1.0",
+ "better-sqlite3": "^8.0.1",
+ "bulma-calendar": "^6.1.18",
+ "camelcase": "^7.0.1",
+ "compression": "^1.7.4",
+ "cookie-parser": "^1.4.6",
+ "cross-env": "^7.0.3",
+ "csurf": "^1.11.0",
+ "debug": "^4.3.4",
+ "ejs": "^3.1.8",
+ "exit-hook": "^3.1.4",
+ "express": "^4.18.2",
+ "express-rate-limit": "^6.7.0",
+ "express-session": "^1.17.3",
+ "font-awesome-v5-icons": "^1.3.0",
+ "http-errors": "^2.0.0",
+ "ical-generator": "^3.6.1",
+ "leaflet": "^1.9.3",
+ "papaparse": "^5.3.2",
+ "randomcolor": "^0.6.2",
+ "session-file-store": "^1.5.0",
+ "uuid": "^9.0.0"
+ },
+ "devDependencies": {
+ "@cityssm/bulma-a11y": "^0.4.0",
+ "@cityssm/bulma-sticky-table": "^2.0.1",
+ "@cityssm/bulma-webapp-css": "^0.12.0",
+ "@cityssm/fa-glow": "^0.1.0",
+ "@cityssm/mssql-multi-pool": "^2.2.0",
+ "@cityssm/simple-fa5-checkbox": "^0.2.1",
+ "@types/activedirectory2": "^1.2.3",
+ "@types/better-sqlite3": "^7.6.3",
+ "@types/compression": "^1.7.2",
+ "@types/cookie-parser": "^1.4.3",
+ "@types/csurf": "^1.11.2",
+ "@types/debug": "^4.1.7",
+ "@types/ejs": "^3.1.1",
+ "@types/express": "^4.17.15",
+ "@types/express-session": "^1.17.5",
+ "@types/gulp": "^4.0.10",
+ "@types/gulp-changed": "^0.0.35",
+ "@types/gulp-minify": "^3.1.1",
+ "@types/gulp-sass": "^5.0.0",
+ "@types/http-errors": "^2.0.1",
+ "@types/leaflet": "^1.9.0",
+ "@types/mocha": "^10.0.1",
+ "@types/node-windows": "^0.1.2",
+ "@types/papaparse": "^5.3.7",
+ "@types/randomcolor": "^0.5.7",
+ "@types/session-file-store": "^1.2.2",
+ "@types/uuid": "^9.0.0",
+ "@typescript-eslint/eslint-plugin": "^5.48.1",
+ "@typescript-eslint/parser": "^5.48.1",
+ "bulma": "^0.9.4",
+ "bulma-divider": "^0.2.0",
+ "bulma-helpers": "^0.4.3",
+ "bulma-steps": "^2.2.1",
+ "bulma-switch": "^2.0.4",
+ "bulma-tooltip": "^3.0.2",
+ "cypress": "^12.3.0",
+ "cypress-axe": "^1.2.0",
+ "eslint": "^8.31.0",
+ "eslint-config-standard-with-typescript": "^26.0.0",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-promise": "^6.1.1",
+ "eslint-plugin-unicorn": "^45.0.2",
+ "gulp": "^4.0.2",
+ "gulp-changed": "^4.0.3",
+ "gulp-include": "^2.4.1",
+ "gulp-minify": "^3.1.0",
+ "gulp-sass": "^5.1.0",
+ "nodemon": "^2.0.20",
+ "sass": "^1.57.1"
+ }
}
diff --git a/temp/so.exportMaps.js b/temp/so.exportMaps.js
index af5bfc66..fc381147 100644
--- a/temp/so.exportMaps.js
+++ b/temp/so.exportMaps.js
@@ -26,13 +26,13 @@ async function importMaps() {
});
}
}
- catch (_a) {
+ catch {
}
finally {
try {
pool.close();
}
- catch (_b) {
+ catch {
}
}
}
diff --git a/test/1_serverCypress.js b/test/1_serverCypress.js
index e1e0de76..c49d188f 100644
--- a/test/1_serverCypress.js
+++ b/test/1_serverCypress.js
@@ -16,7 +16,7 @@ describe("lot-occupancy-system", () => {
try {
httpServer.close();
}
- catch (_a) {
+ catch {
}
});
it("Ensure server starts on port " + portNumber.toString(), () => {
diff --git a/test/_globals.js b/test/_globals.js
index a4fe48bd..a2fc0a8e 100644
--- a/test/_globals.js
+++ b/test/_globals.js
@@ -1,15 +1,3 @@
-var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
-var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
- function fulfill(value) { resume("next", value); }
- function reject(value) { resume("throw", value); }
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
-};
export const testView = "*testView";
export const testUpdate = "*testUpdate";
export const testAdmin = "*testAdmin";
@@ -37,7 +25,7 @@ export const fakeAdminSession = {
user: undefined
};
export const fakeRequest = {
- [Symbol.asyncIterator]() { return __asyncGenerator(this, arguments, function* _a() { }); },
+ async *[Symbol.asyncIterator]() { },
_destroy: undefined,
_read: undefined,
aborted: undefined,
diff --git a/tsconfig.json b/tsconfig.json
index b24045d5..52f947bd 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,6 +1,6 @@
{
"compilerOptions": {
- "target": "es2017",
+ "target": "es2022",
"module": "es2022",
"moduleResolution": "Node",
"isolatedModules": false,
@@ -11,7 +11,8 @@
"allowSyntheticDefaultImports": true,
"resolveJsonModule": true,
"esModuleInterop": true,
- "skipLibCheck": true
+ "skipLibCheck": true,
+ "strictNullChecks": true
},
"compileOnSave": true,
"buildOnSave": true,
diff --git a/types/recordTypes.d.ts b/types/recordTypes.d.ts
index 7c231215..f4b69cec 100644
--- a/types/recordTypes.d.ts
+++ b/types/recordTypes.d.ts
@@ -258,11 +258,11 @@ export interface UserProperties {
isAdmin: boolean;
apiKey: string;
}
-declare module "express-session" {
+declare module 'express-session' {
interface Session {
- user: User;
+ user?: User;
}
}
export interface PartialSession {
- user: User;
+ user?: User;
}
diff --git a/types/recordTypes.ts b/types/recordTypes.ts
index fcb30f78..c6d91aff 100644
--- a/types/recordTypes.ts
+++ b/types/recordTypes.ts
@@ -1,16 +1,16 @@
export interface Record {
- recordCreate_userName?: string;
- recordCreate_timeMillis?: number;
- recordCreate_dateString?: string;
+ recordCreate_userName?: string
+ recordCreate_timeMillis?: number
+ recordCreate_dateString?: string
- recordUpdate_userName?: string;
- recordUpdate_timeMillis?: number;
- recordUpdate_dateString?: string;
- recordUpdate_timeString?: string;
+ recordUpdate_userName?: string
+ recordUpdate_timeMillis?: number
+ recordUpdate_dateString?: string
+ recordUpdate_timeString?: string
- recordDelete_userName?: string;
- recordDelete_timeMillis?: number;
- recordDelete_dateString?: string;
+ recordDelete_userName?: string
+ recordDelete_timeMillis?: number
+ recordDelete_dateString?: string
}
/*
@@ -18,248 +18,248 @@ export interface Record {
*/
export interface Map extends Record {
- mapId?: number;
- mapName?: string;
- mapDescription?: string;
+ mapId?: number
+ mapName?: string
+ mapDescription?: string
- mapLatitude?: number;
- mapLongitude?: number;
- mapSVG?: string;
+ mapLatitude?: number
+ mapLongitude?: number
+ mapSVG?: string
- mapAddress1?: string;
- mapAddress2?: string;
- mapCity?: string;
- mapProvince?: string;
- mapPostalCode?: string;
- mapPhoneNumber?: string;
+ mapAddress1?: string
+ mapAddress2?: string
+ mapCity?: string
+ mapProvince?: string
+ mapPostalCode?: string
+ mapPhoneNumber?: string
- lotCount?: number;
+ lotCount?: number
}
export interface LotType extends Record {
- lotTypeId: number;
- lotType: string;
- orderNumber?: number;
- lotTypeFields?: LotTypeField[];
+ lotTypeId: number
+ lotType: string
+ orderNumber?: number
+ lotTypeFields?: LotTypeField[]
}
export interface LotTypeField extends Record {
- lotTypeFieldId: number;
- lotTypeField?: string;
+ lotTypeFieldId: number
+ lotTypeField?: string
- lotTypeId?: number;
- lotType: LotType;
+ lotTypeId?: number
+ lotType: LotType
- lotTypeFieldValues?: string;
- isRequired?: boolean;
- pattern?: string;
- minimumLength?: number;
- maximumLength?: number;
+ lotTypeFieldValues?: string
+ isRequired?: boolean
+ pattern?: string
+ minimumLength?: number
+ maximumLength?: number
- orderNumber?: number;
+ orderNumber?: number
}
export interface LotStatus extends Record {
- lotStatusId: number;
- lotStatus: string;
- orderNumber?: number;
+ lotStatusId: number
+ lotStatus: string
+ orderNumber?: number
}
export interface Lot extends Record {
- lotId: number;
- lotName?: string;
+ lotId: number
+ lotName?: string
- lotTypeId?: number;
- lotType?: string;
+ lotTypeId?: number
+ lotType?: string
- mapId?: number;
- mapName?: string;
- map?: Map;
- mapSVG?: string;
- mapKey?: string;
+ mapId?: number
+ mapName?: string
+ map?: Map
+ mapSVG?: string
+ mapKey?: string
- lotLatitude?: number;
- lotLongitude?: number;
+ lotLatitude?: number
+ lotLongitude?: number
- lotStatusId?: number;
- lotStatus?: string;
+ lotStatusId?: number
+ lotStatus?: string
- lotFields?: LotField[];
+ lotFields?: LotField[]
- lotOccupancyCount?: number;
- lotOccupancies?: LotOccupancy[];
+ lotOccupancyCount?: number
+ lotOccupancies?: LotOccupancy[]
- lotComments?: LotComment[];
+ lotComments?: LotComment[]
}
export interface LotComment extends Record {
- lotCommentId?: number;
- lotId?: number;
+ lotCommentId?: number
+ lotId?: number
- lotCommentDate?: number;
- lotCommentDateString?: string;
+ lotCommentDate?: number
+ lotCommentDateString?: string
- lotCommentTime?: number;
- lotCommentTimeString?: string;
+ lotCommentTime?: number
+ lotCommentTimeString?: string
- lotComment?: string;
+ lotComment?: string
}
export interface LotField extends LotTypeField, Record {
- lotId?: number;
- lotFieldValue?: string;
+ lotId?: number
+ lotFieldValue?: string
}
export interface OccupancyType extends Record {
- occupancyTypeId: number;
- occupancyType: string;
- orderNumber?: number;
- occupancyTypeFields?: OccupancyTypeField[];
- occupancyTypePrints?: string[];
+ occupancyTypeId: number
+ occupancyType: string
+ orderNumber?: number
+ occupancyTypeFields?: OccupancyTypeField[]
+ occupancyTypePrints?: string[]
}
export interface OccupancyTypeField {
- occupancyTypeFieldId?: number;
- occupancyTypeId?: number;
- occupancyTypeField?: string;
- occupancyTypeFieldValues?: string;
- isRequired?: boolean;
- pattern?: string;
- minimumLength?: number;
- maximumLength?: number;
- orderNumber?: number;
+ occupancyTypeFieldId?: number
+ occupancyTypeId?: number
+ occupancyTypeField?: string
+ occupancyTypeFieldValues?: string
+ isRequired?: boolean
+ pattern?: string
+ minimumLength?: number
+ maximumLength?: number
+ orderNumber?: number
}
export interface LotOccupantType extends Record {
- lotOccupantTypeId: number;
- lotOccupantType: string;
- fontAwesomeIconClass: string;
- orderNumber?: number;
+ lotOccupantTypeId: number
+ lotOccupantType: string
+ fontAwesomeIconClass: string
+ orderNumber?: number
}
export interface FeeCategory extends Record {
- feeCategoryId: number;
- feeCategory: string;
- fees: Fee[];
- orderNumber?: number;
+ feeCategoryId: number
+ feeCategory: string
+ fees: Fee[]
+ orderNumber?: number
}
export interface Fee extends Record {
- feeId: number;
+ feeId: number
- feeCategoryId?: number;
- feeCategory?: string;
+ feeCategoryId?: number
+ feeCategory?: string
- feeName?: string;
- feeDescription?: string;
+ feeName?: string
+ feeDescription?: string
- occupancyTypeId?: number;
- occupancyType?: string;
+ occupancyTypeId?: number
+ occupancyType?: string
- lotTypeId?: number;
- lotType?: string;
+ lotTypeId?: number
+ lotType?: string
- includeQuantity?: boolean;
- quantityUnit?: string;
+ includeQuantity?: boolean
+ quantityUnit?: string
- feeAmount?: number;
- feeFunction?: string;
+ feeAmount?: number
+ feeFunction?: string
- taxAmount?: number;
- taxPercentage?: number;
+ taxAmount?: number
+ taxPercentage?: number
- isRequired?: boolean;
+ isRequired?: boolean
- orderNumber?: number;
+ orderNumber?: number
}
export interface LotOccupancyFee extends Fee, Record {
- lotOccupancyId?: number;
- quantity?: number;
+ lotOccupancyId?: number
+ quantity?: number
}
export interface LotOccupancyTransaction extends Record {
- lotOccupancyId?: number;
- transactionIndex?: number;
- transactionDate?: number;
- transactionDateString?: string;
- transactionTime?: number;
- transactionTimeString?: string;
- transactionAmount: number;
- externalReceiptNumber?: string;
- transactionNote?: string;
+ lotOccupancyId?: number
+ transactionIndex?: number
+ transactionDate?: number
+ transactionDateString?: string
+ transactionTime?: number
+ transactionTimeString?: string
+ transactionAmount: number
+ externalReceiptNumber?: string
+ transactionNote?: string
}
export interface LotOccupancyOccupant extends Record {
- lotOccupancyId?: number;
- lotOccupantIndex?: number;
+ lotOccupancyId?: number
+ lotOccupantIndex?: number
- lotOccupantTypeId?: number;
- lotOccupantType?: string;
- fontAwesomeIconClass?: string;
-
- occupantName?: string;
- occupantAddress1?: string;
- occupantAddress2?: string;
- occupantCity?: string;
- occupantProvince?: string;
- occupantPostalCode?: string;
+ lotOccupantTypeId?: number
+ lotOccupantType?: string
+ fontAwesomeIconClass?: string
- occupantPhoneNumber?: string;
- occupantEmailAddress?: string;
+ occupantName?: string
+ occupantAddress1?: string
+ occupantAddress2?: string
+ occupantCity?: string
+ occupantProvince?: string
+ occupantPostalCode?: string
- occupantComment?: string;
-
- lotOccupancyIdCount?: number;
- recordUpdate_timeMillisMax?: number;
+ occupantPhoneNumber?: string
+ occupantEmailAddress?: string
+
+ occupantComment?: string
+
+ lotOccupancyIdCount?: number
+ recordUpdate_timeMillisMax?: number
}
export interface LotOccupancyComment extends Record {
- lotOccupancyCommentId?: number;
- lotOccupancyId?: number;
+ lotOccupancyCommentId?: number
+ lotOccupancyId?: number
- lotOccupancyCommentDate?: number;
- lotOccupancyCommentDateString?: string;
+ lotOccupancyCommentDate?: number
+ lotOccupancyCommentDateString?: string
- lotOccupancyCommentTime?: number;
- lotOccupancyCommentTimeString?: string;
+ lotOccupancyCommentTime?: number
+ lotOccupancyCommentTimeString?: string
- lotOccupancyComment?: string;
+ lotOccupancyComment?: string
}
export interface LotOccupancyField extends OccupancyTypeField, Record {
- lotOccupancyId?: number;
- occupancyTypeFieldId?: number;
- lotOccupancyFieldValue?: string;
+ lotOccupancyId?: number
+ occupancyTypeFieldId?: number
+ lotOccupancyFieldValue?: string
}
export interface LotOccupancy extends Record {
- lotOccupancyId?: number;
+ lotOccupancyId?: number
- occupancyTypeId?: number;
- occupancyType?: string;
- printEJS?: string;
+ occupancyTypeId?: number
+ occupancyType?: string
+ printEJS?: string
- lotId?: number;
- lotTypeId?: number;
- lotType?: string;
- lotName?: string;
+ lotId?: number
+ lotTypeId?: number
+ lotType?: string
+ lotName?: string
- mapId?: number;
- mapName?: string;
+ mapId?: number
+ mapName?: string
- occupancyStartDate?: number;
- occupancyStartDateString?: string;
+ occupancyStartDate?: number
+ occupancyStartDateString?: string
- occupancyEndDate?: number;
- occupancyEndDateString?: string;
+ occupancyEndDate?: number
+ occupancyEndDateString?: string
- lotOccupancyFields?: LotOccupancyField[];
- lotOccupancyComments?: LotOccupancyComment[];
- lotOccupancyOccupants?: LotOccupancyOccupant[];
- lotOccupancyFees?: LotOccupancyFee[];
- lotOccupancyTransactions?: LotOccupancyTransaction[];
- workOrders?: WorkOrder[];
+ lotOccupancyFields?: LotOccupancyField[]
+ lotOccupancyComments?: LotOccupancyComment[]
+ lotOccupancyOccupants?: LotOccupancyOccupant[]
+ lotOccupancyFees?: LotOccupancyFee[]
+ lotOccupancyTransactions?: LotOccupancyTransaction[]
+ workOrders?: WorkOrder[]
}
/*
@@ -267,75 +267,75 @@ export interface LotOccupancy extends Record {
*/
export interface WorkOrderType extends Record {
- workOrderTypeId?: number;
- workOrderType?: string;
- orderNumber?: number;
+ workOrderTypeId?: number
+ workOrderType?: string
+ orderNumber?: number
}
export interface WorkOrderMilestoneType extends Record {
- workOrderMilestoneTypeId: number;
- workOrderMilestoneType: string;
- orderNumber?: number;
+ workOrderMilestoneTypeId: number
+ workOrderMilestoneType: string
+ orderNumber?: number
}
export interface WorkOrderComment extends Record {
- workOrderCommentId?: number;
- workOrderId?: number;
+ workOrderCommentId?: number
+ workOrderId?: number
- workOrderCommentDate?: number;
- workOrderCommentDateString?: string;
+ workOrderCommentDate?: number
+ workOrderCommentDateString?: string
- workOrderCommentTime?: number;
- workOrderCommentTimeString?: string;
+ workOrderCommentTime?: number
+ workOrderCommentTimeString?: string
- workOrderComment?: string;
+ workOrderComment?: string
}
export interface WorkOrderMilestone extends Record, WorkOrder {
- workOrderMilestoneId?: number;
+ workOrderMilestoneId?: number
- workOrderMilestoneTypeId?: number;
- workOrderMilestoneType?: string;
+ workOrderMilestoneTypeId?: number
+ workOrderMilestoneType?: string
- workOrderMilestoneDate?: number;
- workOrderMilestoneDateString?: string;
+ workOrderMilestoneDate?: number
+ workOrderMilestoneDateString?: string
- workOrderMilestoneTime?: number;
- workOrderMilestoneTimeString?: string;
+ workOrderMilestoneTime?: number
+ workOrderMilestoneTimeString?: string
- workOrderMilestoneDescription?: string;
+ workOrderMilestoneDescription?: string
- workOrderMilestoneCompletionDate?: number;
- workOrderMilestoneCompletionDateString?: string;
+ workOrderMilestoneCompletionDate?: number
+ workOrderMilestoneCompletionDateString?: string
- workOrderMilestoneCompletionTime?: number;
- workOrderMilestoneCompletionTimeString?: string;
+ workOrderMilestoneCompletionTime?: number
+ workOrderMilestoneCompletionTimeString?: string
- workOrderRecordUpdate_timeMillis?: number;
+ workOrderRecordUpdate_timeMillis?: number
}
export interface WorkOrder extends Record {
- workOrderId?: number;
+ workOrderId?: number
- workOrderTypeId?: number;
- workOrderType?: string;
+ workOrderTypeId?: number
+ workOrderType?: string
- workOrderNumber?: string;
- workOrderDescription?: string;
+ workOrderNumber?: string
+ workOrderDescription?: string
- workOrderOpenDate?: number;
- workOrderOpenDateString?: string;
+ workOrderOpenDate?: number
+ workOrderOpenDateString?: string
- workOrderCloseDate?: number;
- workOrderCloseDateString?: string;
+ workOrderCloseDate?: number
+ workOrderCloseDateString?: string
- workOrderMilestones?: WorkOrderMilestone[];
- workOrderMilestoneCount?: number;
- workOrderMilestoneCompletionCount?: number;
+ workOrderMilestones?: WorkOrderMilestone[]
+ workOrderMilestoneCount?: number
+ workOrderMilestoneCompletionCount?: number
- workOrderComments?: WorkOrderComment[];
- workOrderLots?: Lot[];
- workOrderLotOccupancies?: LotOccupancy[];
+ workOrderComments?: WorkOrderComment[]
+ workOrderLots?: Lot[]
+ workOrderLotOccupancies?: LotOccupancy[]
}
/*
@@ -343,22 +343,22 @@ export interface WorkOrder extends Record {
*/
export interface User {
- userName: string;
- userProperties?: UserProperties;
+ userName: string
+ userProperties?: UserProperties
}
export interface UserProperties {
- canUpdate: boolean;
- isAdmin: boolean;
- apiKey: string;
+ canUpdate: boolean
+ isAdmin: boolean
+ apiKey: string
}
-declare module "express-session" {
- interface Session {
- user: User;
- }
+declare module 'express-session' {
+ interface Session {
+ user?: User
+ }
}
export interface PartialSession {
- user: User;
+ user?: User
}