diff --git a/data/config.base.js b/data/config.base.js index 85b0d8e6..c6098c58 100644 --- a/data/config.base.js +++ b/data/config.base.js @@ -11,7 +11,10 @@ export const config = { lotOccupancy: {}, workOrders: {}, adminCleanup: {}, - printPdf: {} + printPdf: {}, + dynamicsGP: { + integrationIsEnabled: false + } } }; export default config; diff --git a/data/config.base.ts b/data/config.base.ts index ca0ad2c8..577cd728 100644 --- a/data/config.base.ts +++ b/data/config.base.ts @@ -13,7 +13,10 @@ export const config: Config = { lotOccupancy: {}, workOrders: {}, adminCleanup: {}, - printPdf: {} + printPdf: {}, + dynamicsGP: { + integrationIsEnabled: false + } } } diff --git a/data/config.cemetery.ssm.js b/data/config.cemetery.ssm.js index 89d28e43..0707bfdb 100644 --- a/data/config.cemetery.ssm.js +++ b/data/config.cemetery.ssm.js @@ -48,4 +48,8 @@ config.settings.map.mapCityDefault = 'Sault Ste. Marie'; config.settings.workOrders.workOrderNumberLength = 6; config.settings.workOrders.workOrderMilestoneDateRecentBeforeDays = 7; config.settings.workOrders.workOrderMilestoneDateRecentAfterDays = 30; +config.settings.dynamicsGP = { + integrationIsEnabled: true, + lookupOrder: ['diamond/cashReceipt', 'invoice'] +}; export default config; diff --git a/data/config.cemetery.ssm.ts b/data/config.cemetery.ssm.ts index 3497dc96..2d29d1c0 100644 --- a/data/config.cemetery.ssm.ts +++ b/data/config.cemetery.ssm.ts @@ -66,4 +66,9 @@ config.settings.workOrders.workOrderNumberLength = 6 config.settings.workOrders.workOrderMilestoneDateRecentBeforeDays = 7 config.settings.workOrders.workOrderMilestoneDateRecentAfterDays = 30 +config.settings.dynamicsGP = { + integrationIsEnabled: true, + lookupOrder: ['diamond/cashReceipt', 'invoice'] +} + export default config diff --git a/data/config.testing.js b/data/config.testing.js index a3032d42..9126a729 100644 --- a/data/config.testing.js +++ b/data/config.testing.js @@ -8,4 +8,5 @@ config.users = { canUpdate: ['*testUpdate'], isAdmin: ['*testAdmin'] }; +config.settings.dynamicsGP.integrationIsEnabled = false; export default config; diff --git a/data/config.testing.ts b/data/config.testing.ts index dea03cc0..6f58404e 100644 --- a/data/config.testing.ts +++ b/data/config.testing.ts @@ -13,4 +13,6 @@ config.users = { isAdmin: ['*testAdmin'] } +config.settings.dynamicsGP!.integrationIsEnabled = false + export default config diff --git a/helpers/functions.config.d.ts b/helpers/functions.config.d.ts index bc6915a2..d6d29b4d 100644 --- a/helpers/functions.config.d.ts +++ b/helpers/functions.config.d.ts @@ -1,5 +1,6 @@ import './polyfills.js'; import type * as configTypes from '../types/configTypes'; +import type { config as MSSQLConfig } from 'mssql'; export declare function getProperty(propertyName: 'application.applicationName'): string; export declare function getProperty(propertyName: 'application.logoURL'): string; export declare function getProperty(propertyName: 'application.httpPort'): number; @@ -48,4 +49,7 @@ export declare function getProperty(propertyName: 'settings.workOrders.calendarE export declare function getProperty(propertyName: 'settings.workOrders.prints'): string[]; export declare function getProperty(propertyName: 'settings.adminCleanup.recordDeleteAgeDays'): number; export declare function getProperty(propertyName: 'settings.printPdf.contentDisposition'): 'attachment' | 'inline'; +export declare function getProperty(propertyName: 'settings.dynamicsGP.integrationIsEnabled'): boolean; +export declare function getProperty(propertyName: 'settings.dynamicsGP.mssqlConfig'): MSSQLConfig; +export declare function getProperty(propertyName: 'settings.dynamicsGP.lookupOrder'): configTypes.DynamicsGPLookup[]; export declare const keepAliveMillis: number; diff --git a/helpers/functions.config.js b/helpers/functions.config.js index e44f45be..877eb891 100644 --- a/helpers/functions.config.js +++ b/helpers/functions.config.js @@ -50,6 +50,8 @@ configFallbackValues.set('settings.workOrders.prints', [ ]); configFallbackValues.set('settings.adminCleanup.recordDeleteAgeDays', 60); configFallbackValues.set('settings.printPdf.contentDisposition', 'attachment'); +configFallbackValues.set('settings.dynamicsGP.integrationIsEnabled', false); +configFallbackValues.set('settings.dynamicsGP.lookupOrder', ['invoice']); export function getProperty(propertyName) { const propertyNameSplit = propertyName.split('.'); let currentObject = config; diff --git a/helpers/functions.config.ts b/helpers/functions.config.ts index 6d489746..75b5f2e8 100644 --- a/helpers/functions.config.ts +++ b/helpers/functions.config.ts @@ -6,6 +6,9 @@ import { config } from '../data/config.js' import type * as configTypes from '../types/configTypes' +// eslint-disable-next-line node/no-extraneous-import +import type { config as MSSQLConfig } from 'mssql' + /* * SET UP FALLBACK VALUES */ @@ -94,6 +97,9 @@ configFallbackValues.set('settings.adminCleanup.recordDeleteAgeDays', 60) configFallbackValues.set('settings.printPdf.contentDisposition', 'attachment') +configFallbackValues.set('settings.dynamicsGP.integrationIsEnabled', false) +configFallbackValues.set('settings.dynamicsGP.lookupOrder', ['invoice']) + /* * Set up function overloads */ @@ -211,6 +217,18 @@ export function getProperty( propertyName: 'settings.printPdf.contentDisposition' ): 'attachment' | 'inline' +export function getProperty( + propertyName: 'settings.dynamicsGP.integrationIsEnabled' +): boolean + +export function getProperty( + propertyName: 'settings.dynamicsGP.mssqlConfig' +): MSSQLConfig + +export function getProperty( + propertyName: 'settings.dynamicsGP.lookupOrder' +): configTypes.DynamicsGPLookup[] + export function getProperty(propertyName: string): unknown { const propertyNameSplit = propertyName.split('.') diff --git a/helpers/functions.dynamicsGP.d.ts b/helpers/functions.dynamicsGP.d.ts new file mode 100644 index 00000000..9974f68d --- /dev/null +++ b/helpers/functions.dynamicsGP.d.ts @@ -0,0 +1,2 @@ +import type { DynamicsGPDocument } from '../types/recordTypes.js'; +export declare function getDynamicsGPDocument(documentNumber: string): Promise; diff --git a/helpers/functions.dynamicsGP.js b/helpers/functions.dynamicsGP.js new file mode 100644 index 00000000..a3fc7f13 --- /dev/null +++ b/helpers/functions.dynamicsGP.js @@ -0,0 +1,62 @@ +import * as gp from '@cityssm/dynamics-gp/gp.js'; +import * as diamond from '@cityssm/dynamics-gp/diamond.js'; +import * as configFunctions from './functions.config.js'; +if (configFunctions.getProperty('settings.dynamicsGP.integrationIsEnabled')) { + gp.setMSSQLConfig(configFunctions.getProperty('settings.dynamicsGP.mssqlConfig')); + diamond.setMSSQLConfig(configFunctions.getProperty('settings.dynamicsGP.mssqlConfig')); +} +async function _getDynamicsGPDocument(documentNumber, lookupType) { + let document; + switch (lookupType) { + case 'invoice': { + const invoice = await gp.getInvoiceByInvoiceNumber(documentNumber); + if (invoice) { + document = { + documentType: 'Invoice', + documentNumber: invoice.invoiceNumber, + documentDate: invoice.documentDate, + documentDescription: [ + invoice.comment1, + invoice.comment2, + invoice.comment3, + invoice.comment4 + ], + documentTotal: invoice.documentAmount + }; + } + break; + } + case 'diamond/cashReceipt': { + const receipt = await diamond.getCashReceiptByDocumentNumber(documentNumber); + if (receipt) { + document = { + documentType: 'Cash Receipt', + documentNumber: receipt.documentNumber.toString(), + documentDate: receipt.documentDate, + documentDescription: [ + receipt.description, + receipt.description2, + receipt.description3, + receipt.description4, + receipt.description5 + ], + documentTotal: receipt.total + }; + } + } + } + return document; +} +export async function getDynamicsGPDocument(documentNumber) { + if (!configFunctions.getProperty('settings.dynamicsGP.integrationIsEnabled')) { + return; + } + let document; + for (const lookupType of configFunctions.getProperty('settings.dynamicsGP.lookupOrder')) { + document = await _getDynamicsGPDocument(documentNumber, lookupType); + if (document !== undefined) { + break; + } + } + return document; +} diff --git a/helpers/functions.dynamicsGP.ts b/helpers/functions.dynamicsGP.ts new file mode 100644 index 00000000..dcc1fcaa --- /dev/null +++ b/helpers/functions.dynamicsGP.ts @@ -0,0 +1,95 @@ +/* eslint-disable unicorn/filename-case */ + +import * as gp from '@cityssm/dynamics-gp/gp.js' +import * as diamond from '@cityssm/dynamics-gp/diamond.js' + +import * as configFunctions from './functions.config.js' + +import type { DynamicsGPLookup } from '../types/configTypes' +import type { DynamicsGPDocument } from '../types/recordTypes.js' + +if (configFunctions.getProperty('settings.dynamicsGP.integrationIsEnabled')) { + gp.setMSSQLConfig( + configFunctions.getProperty('settings.dynamicsGP.mssqlConfig') + ) + diamond.setMSSQLConfig( + configFunctions.getProperty('settings.dynamicsGP.mssqlConfig') + ) +} + +async function _getDynamicsGPDocument( + documentNumber: string, + lookupType: DynamicsGPLookup +): Promise { + let document: DynamicsGPDocument | undefined + + switch (lookupType) { + case 'invoice': { + const invoice = await gp.getInvoiceByInvoiceNumber(documentNumber) + + if (invoice) { + document = { + documentType: 'Invoice', + documentNumber: invoice.invoiceNumber, + documentDate: invoice.documentDate, + documentDescription: [ + invoice.comment1, + invoice.comment2, + invoice.comment3, + invoice.comment4 + ], + documentTotal: invoice.documentAmount + } + } + + break + } + case 'diamond/cashReceipt': { + const receipt = await diamond.getCashReceiptByDocumentNumber( + documentNumber + ) + + if (receipt) { + document = { + documentType: 'Cash Receipt', + documentNumber: receipt.documentNumber.toString(), + documentDate: receipt.documentDate, + documentDescription: [ + receipt.description, + receipt.description2, + receipt.description3, + receipt.description4, + receipt.description5 + ], + documentTotal: receipt.total + } + } + } + } + + return document +} + +export async function getDynamicsGPDocument( + documentNumber: string +): Promise { + if ( + !configFunctions.getProperty('settings.dynamicsGP.integrationIsEnabled') + ) { + return + } + + let document: DynamicsGPDocument | undefined + + for (const lookupType of configFunctions.getProperty( + 'settings.dynamicsGP.lookupOrder' + )) { + document = await _getDynamicsGPDocument(documentNumber, lookupType) + + if (document !== undefined) { + break + } + } + + return document +} diff --git a/helpers/lotOccupancyDB/getLotOccupancyTransactions.js b/helpers/lotOccupancyDB/getLotOccupancyTransactions.js index 79b23d5c..b17806e2 100644 --- a/helpers/lotOccupancyDB/getLotOccupancyTransactions.js +++ b/helpers/lotOccupancyDB/getLotOccupancyTransactions.js @@ -1,5 +1,7 @@ import { acquireConnection } from './pool.js'; import { dateIntegerToString, timeIntegerToString } from '@cityssm/expressjs-server-js/dateTimeFns.js'; +import * as configFunctions from '../functions.config.js'; +import * as gpFunctions from '../functions.dynamicsGP.js'; export async function getLotOccupancyTransactions(lotOccupancyId, connectedDatabase) { const database = connectedDatabase ?? (await acquireConnection()); database.function('userFn_dateIntegerToString', dateIntegerToString); @@ -17,6 +19,16 @@ export async function getLotOccupancyTransactions(lotOccupancyId, connectedDatab if (connectedDatabase === undefined) { database.release(); } + if (configFunctions.getProperty('settings.dynamicsGP.integrationIsEnabled')) { + for (const transaction of lotOccupancyTransactions) { + if ((transaction.externalReceiptNumber ?? '') !== '') { + const gpDocument = await gpFunctions.getDynamicsGPDocument(transaction.externalReceiptNumber); + if (gpDocument !== undefined) { + transaction.dynamicsGPDocument = gpDocument; + } + } + } + } return lotOccupancyTransactions; } export default getLotOccupancyTransactions; diff --git a/helpers/lotOccupancyDB/getLotOccupancyTransactions.ts b/helpers/lotOccupancyDB/getLotOccupancyTransactions.ts index 3536232a..09bde741 100644 --- a/helpers/lotOccupancyDB/getLotOccupancyTransactions.ts +++ b/helpers/lotOccupancyDB/getLotOccupancyTransactions.ts @@ -6,6 +6,9 @@ import { timeIntegerToString } from '@cityssm/expressjs-server-js/dateTimeFns.js' +import * as configFunctions from '../functions.config.js' +import * as gpFunctions from '../functions.dynamicsGP.js' + import type * as recordTypes from '../../types/recordTypes' export async function getLotOccupancyTransactions( @@ -35,6 +38,20 @@ export async function getLotOccupancyTransactions( database.release() } + if (configFunctions.getProperty('settings.dynamicsGP.integrationIsEnabled')) { + for (const transaction of lotOccupancyTransactions) { + if ((transaction.externalReceiptNumber ?? '') !== '') { + const gpDocument = await gpFunctions.getDynamicsGPDocument( + transaction.externalReceiptNumber! + ) + + if (gpDocument !== undefined) { + transaction.dynamicsGPDocument = gpDocument + } + } + } + } + return lotOccupancyTransactions } diff --git a/package-lock.json b/package-lock.json index bb2b1cde..c6aee820 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@cityssm/bulma-js": "^0.4.0", "@cityssm/bulma-webapp-js": "^1.5.0", "@cityssm/date-diff": "^2.2.3", + "@cityssm/dynamics-gp": "^0.2.1", "@cityssm/expressjs-server-js": "^2.3.3", "@cityssm/ntfy-publish": "^0.2.1", "@cityssm/pdf-puppeteer": "^2.0.0-beta.1", @@ -66,13 +67,14 @@ "@types/http-errors": "^2.0.1", "@types/leaflet": "^1.9.1", "@types/mocha": "^10.0.1", + "@types/mssql": "^8.1.2", "@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.1", - "@typescript-eslint/eslint-plugin": "^5.54.0", - "@typescript-eslint/parser": "^5.54.0", + "@typescript-eslint/eslint-plugin": "^5.54.1", + "@typescript-eslint/parser": "^5.54.1", "axe-core": "^4.6.3", "bulma": "^0.9.4", "bulma-divider": "^0.2.0", @@ -104,7 +106,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", - "dev": true, "dependencies": { "tslib": "^2.2.0" }, @@ -116,7 +117,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.4.0.tgz", "integrity": "sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==", - "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", "tslib": "^2.2.0" @@ -129,7 +129,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.7.0.tgz", "integrity": "sha512-fgaLVlF3xGg8JAt7Hl7vkKIJcCAA9NpsvIvb44qaEOW6CaJ+IaHKL7oWe5+oGOVR+y/z2Gd2joyvslqwDvRfTw==", - "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.4.0", @@ -147,7 +146,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-1.3.0.tgz", "integrity": "sha512-ZN9avruqbQ5TxopzG3ih3KRy52n8OAbitX3fnZT5go4hzu0J+KVPSzkL+Wt3hpJpdG8WIfg1sBD1tWkgUdEpBA==", - "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.4", "@azure/core-client": "^1.3.0", @@ -161,7 +159,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.5.0.tgz", "integrity": "sha512-Vsd5Sl04RG/p5ui/p0dAFMov5I/W4dmRjOrtWGXVs4vY/hNMPefiFH7cZEOr+1u0XrBKkpvt634IyUUD9bVRuQ==", - "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/logger": "^1.0.0", @@ -175,7 +172,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.4.0.tgz", "integrity": "sha512-tabFtZTg8D9XqZKEfNUOGh63SuYeOxmvH4GDcOJN+R1bZWZ1FZskctgY9Pmuwzhn+0Xvq9rmimK9hsvtLkeBsw==", - "dev": true, "dependencies": { "tslib": "^2.2.0" }, @@ -187,7 +183,6 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz", "integrity": "sha512-Kji9k6TOFRDB5ZMTw8qUf2IJ+CeJtsuMdAHox9eqpTf1cefiNMpzrfnF6sINEBZJsaVaWgQ0o48B6kcUH68niA==", - "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.4.0", @@ -208,7 +203,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -222,7 +216,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -231,7 +224,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", - "dev": true, "dependencies": { "tslib": "^2.2.0" }, @@ -243,7 +235,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.1.1.tgz", "integrity": "sha512-A4TBYVQCtHOigFb2ETiiKFDocBoI1Zk2Ui1KpI42aJSIDexF7DHQFpnjonltXAIU/ceH+1fsZAWWgvX6/AKzog==", - "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", "tslib": "^2.2.0" @@ -256,7 +247,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-2.1.0.tgz", "integrity": "sha512-BPDz1sK7Ul9t0l9YKLEa8PHqWU4iCfhGJ+ELJl6c8CP3TpJt2urNCbm0ZHsthmxRsYoMPbz2Dvzj30zXZVmAFw==", - "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.3.0", @@ -283,7 +273,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -292,7 +281,6 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.6.0.tgz", "integrity": "sha512-0112LegxeR03L8J4k+q6HwBVvrpd9y+oInG0FG3NaHXN7YUubVBon/eb5jFI6edGrvNigpxSR0XIsprFXdkzCQ==", - "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.3.0", @@ -314,7 +302,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.3.tgz", "integrity": "sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==", - "dev": true, "dependencies": { "tslib": "^2.2.0" }, @@ -326,7 +313,6 @@ "version": "2.32.2", "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.32.2.tgz", "integrity": "sha512-1YqGzXtPG3QrZPFBKaMWr2WQdukDj+PelqUCv351+p+hlw/AhdRrb8haY73/iqkhT6Cdrbnh7sL4gikVsF4O1g==", - "dev": true, "dependencies": { "@azure/msal-common": "^9.0.2" }, @@ -338,7 +324,6 @@ "version": "9.1.1", "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.1.1.tgz", "integrity": "sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -347,7 +332,6 @@ "version": "7.6.0", "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-7.6.0.tgz", "integrity": "sha512-XqfbglUTVLdkHQ8F9UQJtKseRr3sSnr9ysboxtoswvaMVaEfvyLtMoHv9XdKUfOc0qKGzNgRFd9yRjIWVepl6Q==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -356,7 +340,6 @@ "version": "1.14.6", "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.6.tgz", "integrity": "sha512-em/qqFL5tLMxMPl9vormAs13OgZpmQoJbiQ/GlWr+BA77eCLoL+Ehr5xRHowYo+LFe5b+p+PJVkRvT+mLvOkwA==", - "dev": true, "dependencies": { "@azure/msal-common": "^9.0.2", "jsonwebtoken": "^9.0.0", @@ -370,7 +353,6 @@ "version": "9.1.1", "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.1.1.tgz", "integrity": "sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw==", - "dev": true, "engines": { "node": ">=0.8.0" } @@ -379,7 +361,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -540,6 +521,20 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/@cityssm/dynamics-gp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@cityssm/dynamics-gp/-/dynamics-gp-0.2.1.tgz", + "integrity": "sha512-tZU/YbmhYDryWjX0LvAeM9RhJ6fV2dYBk7FgORXhLsmBPwT9X+J2qLkVkl6gJjhVu7NJVQ0fiymHKZhSnc0Usw==", + "dependencies": { + "@cityssm/mssql-multi-pool": "^2.2.0", + "debug": "^4.3.4", + "mssql": "^9.1.1", + "node-cache": "^5.1.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/@cityssm/expressjs-server-js": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@cityssm/expressjs-server-js/-/expressjs-server-js-2.3.3.tgz", @@ -564,7 +559,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@cityssm/mssql-multi-pool/-/mssql-multi-pool-2.2.0.tgz", "integrity": "sha512-hx2oMBPLllbX6VF7rbQSYr7EGgsWuLXmAyfpKUnuy2oVvxRQlnF70/0Qdz2lEUPtBCcjcoADc4//EhMDuDY3UQ==", - "dev": true, "dependencies": { "debug": "^4.3.4", "exit-hook": "^3.1.4", @@ -791,8 +785,7 @@ "node_modules/@js-joda/core": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.5.2.tgz", - "integrity": "sha512-retLUN4TwCJ0QJDi9OCJwYVaXAz93NeOkEtEQL98M2bykBOxmURlP0YlfsuE46kItOOVZIWRYC3KsSLhQ1R2Qw==", - "dev": true + "integrity": "sha512-retLUN4TwCJ0QJDi9OCJwYVaXAz93NeOkEtEQL98M2bykBOxmURlP0YlfsuE46kItOOVZIWRYC3KsSLhQ1R2Qw==" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", @@ -854,14 +847,12 @@ "node_modules/@tediousjs/connection-string": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.4.2.tgz", - "integrity": "sha512-1R9UC7Qc5wief2oJL+c1+d7v1/oPBayL85u8L/jV2DzIKput1TZ8ZUjj2nxQaSfzu210zp0oFWUrYUiUs8NhBQ==", - "dev": true + "integrity": "sha512-1R9UC7Qc5wief2oJL+c1+d7v1/oPBayL85u8L/jV2DzIKput1TZ8ZUjj2nxQaSfzu210zp0oFWUrYUiUs8NhBQ==" }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, "engines": { "node": ">= 10" } @@ -1133,6 +1124,17 @@ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", "dev": true }, + "node_modules/@types/mssql": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/mssql/-/mssql-8.1.2.tgz", + "integrity": "sha512-hoDM+mZUClfXu0J1pyVdbhv2Ve0dl0TdagAE3M5rd1slqoVEEHuNObPD+giwtJgyo99CcS58qbF9ektVKdxSfQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tedious": "*", + "tarn": "^3.0.1" + } + }, "node_modules/@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", @@ -1235,6 +1237,15 @@ "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", "dev": true }, + "node_modules/@types/tedious": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.9.tgz", + "integrity": "sha512-ipwFvfy9b2m0gjHsIX0D6NAAwGCKokzf5zJqUZHUGt+7uWVlBIy6n2eyMgiKQ8ChLFVxic/zwQUhjLYNzbHDRA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/undertaker": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.8.tgz", @@ -1289,14 +1300,14 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz", - "integrity": "sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.1.tgz", + "integrity": "sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/type-utils": "5.54.0", - "@typescript-eslint/utils": "5.54.0", + "@typescript-eslint/scope-manager": "5.54.1", + "@typescript-eslint/type-utils": "5.54.1", + "@typescript-eslint/utils": "5.54.1", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -1323,14 +1334,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz", - "integrity": "sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.1.tgz", + "integrity": "sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/typescript-estree": "5.54.0", + "@typescript-eslint/scope-manager": "5.54.1", + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/typescript-estree": "5.54.1", "debug": "^4.3.4" }, "engines": { @@ -1350,13 +1361,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz", - "integrity": "sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.1.tgz", + "integrity": "sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0" + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/visitor-keys": "5.54.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1367,13 +1378,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz", - "integrity": "sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.1.tgz", + "integrity": "sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.54.0", - "@typescript-eslint/utils": "5.54.0", + "@typescript-eslint/typescript-estree": "5.54.1", + "@typescript-eslint/utils": "5.54.1", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1394,9 +1405,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.0.tgz", - "integrity": "sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.1.tgz", + "integrity": "sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1407,13 +1418,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz", - "integrity": "sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz", + "integrity": "sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0", + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/visitor-keys": "5.54.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1434,16 +1445,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz", - "integrity": "sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.1.tgz", + "integrity": "sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/typescript-estree": "5.54.0", + "@typescript-eslint/scope-manager": "5.54.1", + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/typescript-estree": "5.54.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -1460,12 +1471,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz", - "integrity": "sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz", + "integrity": "sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.54.0", + "@typescript-eslint/types": "5.54.1", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2031,8 +2042,7 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/at-least-node": { "version": "1.0.0", @@ -2394,8 +2404,7 @@ "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, "node_modules/buffer-from": { "version": "1.1.2", @@ -3002,7 +3011,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3561,7 +3569,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, "engines": { "node": ">=8" } @@ -3598,7 +3605,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -3720,7 +3726,6 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, "dependencies": { "safe-buffer": "^5.0.1" } @@ -3837,7 +3842,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.9.tgz", "integrity": "sha512-fvnX40sb538wdU6r4s35cq4EY6Lr09Upj40BEVem4LEsuW8XgQep9yD5Q1U2KftokNp1rWODFJ2qwZSsAjFpbg==", - "dev": true, "dependencies": { "define-properties": "^1.1.4", "es-abstract": "^1.20.4", @@ -4545,7 +4549,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, "engines": { "node": ">=0.8.x" } @@ -6688,7 +6691,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -7151,7 +7153,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, "bin": { "is-docker": "cli.js" }, @@ -7465,7 +7466,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, "dependencies": { "is-docker": "^2.0.0" }, @@ -7518,8 +7518,7 @@ "node_modules/js-md4": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", - "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", - "dev": true + "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==" }, "node_modules/js-sdsl": { "version": "4.3.0", @@ -7552,8 +7551,7 @@ "node_modules/jsbi": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", - "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==", - "dev": true + "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==" }, "node_modules/jsbn": { "version": "0.1.1", @@ -7636,7 +7634,6 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dev": true, "dependencies": { "jws": "^3.2.2", "lodash": "^4.17.21", @@ -7652,7 +7649,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -7663,7 +7659,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -7694,7 +7689,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dev": true, "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -7705,7 +7699,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dev": true, "dependencies": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" @@ -7959,8 +7952,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", @@ -8484,7 +8476,6 @@ "version": "9.1.1", "resolved": "https://registry.npmjs.org/mssql/-/mssql-9.1.1.tgz", "integrity": "sha512-m0yTx9xzUtTvJpWJHqknUXUDPRnJXZYOOFNygnNIXn1PBkLsC/rkXQdquObd+M0ZPlBhGC00Jg28zG0wCl7VWg==", - "dev": true, "dependencies": { "@tediousjs/connection-string": "^0.4.1", "commander": "^9.4.0", @@ -8504,7 +8495,6 @@ "version": "9.5.0", "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, "engines": { "node": "^12.20.0 || >=14" } @@ -8564,8 +8554,7 @@ "node_modules/native-duplexpair": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz", - "integrity": "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==", - "dev": true + "integrity": "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -8607,8 +8596,7 @@ "node_modules/node-abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" }, "node_modules/node-cache": { "version": "5.1.2", @@ -9077,7 +9065,6 @@ "version": "8.4.0", "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -9606,7 +9593,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, "engines": { "node": ">=6" } @@ -10234,8 +10220,7 @@ "node_modules/rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "node_modules/rimraf": { "version": "3.0.2", @@ -10968,8 +10953,7 @@ "node_modules/sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, "node_modules/sshpk": { "version": "1.17.0", @@ -11104,7 +11088,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "dev": true, "engines": { "node": ">=4", "npm": ">=6" @@ -11317,7 +11300,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==", - "dev": true, "engines": { "node": ">=8.0.0" } @@ -11326,7 +11308,6 @@ "version": "15.1.2", "resolved": "https://registry.npmjs.org/tedious/-/tedious-15.1.2.tgz", "integrity": "sha512-94slmnggCX8zG6iLNnM3k6PplTguP0p7R2RWOKTXdPmK1VmTpWk4+e0J4koIMXm1jjG7sGlZ1/JlaGVAdF1OOg==", - "dev": true, "dependencies": { "@azure/identity": "^2.0.4", "@azure/keyvault-keys": "^4.4.0", @@ -11349,7 +11330,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -11360,7 +11340,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, "funding": [ { "type": "github", @@ -11384,7 +11363,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -11396,7 +11374,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11663,8 +11640,7 @@ "node_modules/tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, "node_modules/tsscmp": { "version": "1.0.6", @@ -12598,7 +12574,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", - "dev": true, "requires": { "tslib": "^2.2.0" } @@ -12607,7 +12582,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.4.0.tgz", "integrity": "sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==", - "dev": true, "requires": { "@azure/abort-controller": "^1.0.0", "tslib": "^2.2.0" @@ -12617,7 +12591,6 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.7.0.tgz", "integrity": "sha512-fgaLVlF3xGg8JAt7Hl7vkKIJcCAA9NpsvIvb44qaEOW6CaJ+IaHKL7oWe5+oGOVR+y/z2Gd2joyvslqwDvRfTw==", - "dev": true, "requires": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.4.0", @@ -12632,7 +12605,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-1.3.0.tgz", "integrity": "sha512-ZN9avruqbQ5TxopzG3ih3KRy52n8OAbitX3fnZT5go4hzu0J+KVPSzkL+Wt3hpJpdG8WIfg1sBD1tWkgUdEpBA==", - "dev": true, "requires": { "@azure/abort-controller": "^1.0.4", "@azure/core-client": "^1.3.0", @@ -12643,7 +12615,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.5.0.tgz", "integrity": "sha512-Vsd5Sl04RG/p5ui/p0dAFMov5I/W4dmRjOrtWGXVs4vY/hNMPefiFH7cZEOr+1u0XrBKkpvt634IyUUD9bVRuQ==", - "dev": true, "requires": { "@azure/abort-controller": "^1.0.0", "@azure/logger": "^1.0.0", @@ -12654,7 +12625,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.4.0.tgz", "integrity": "sha512-tabFtZTg8D9XqZKEfNUOGh63SuYeOxmvH4GDcOJN+R1bZWZ1FZskctgY9Pmuwzhn+0Xvq9rmimK9hsvtLkeBsw==", - "dev": true, "requires": { "tslib": "^2.2.0" } @@ -12663,7 +12633,6 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz", "integrity": "sha512-Kji9k6TOFRDB5ZMTw8qUf2IJ+CeJtsuMdAHox9eqpTf1cefiNMpzrfnF6sINEBZJsaVaWgQ0o48B6kcUH68niA==", - "dev": true, "requires": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.4.0", @@ -12681,7 +12650,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -12691,8 +12659,7 @@ "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" } } }, @@ -12700,7 +12667,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", - "dev": true, "requires": { "tslib": "^2.2.0" } @@ -12709,7 +12675,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.1.1.tgz", "integrity": "sha512-A4TBYVQCtHOigFb2ETiiKFDocBoI1Zk2Ui1KpI42aJSIDexF7DHQFpnjonltXAIU/ceH+1fsZAWWgvX6/AKzog==", - "dev": true, "requires": { "@azure/abort-controller": "^1.0.0", "tslib": "^2.2.0" @@ -12719,7 +12684,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-2.1.0.tgz", "integrity": "sha512-BPDz1sK7Ul9t0l9YKLEa8PHqWU4iCfhGJ+ELJl6c8CP3TpJt2urNCbm0ZHsthmxRsYoMPbz2Dvzj30zXZVmAFw==", - "dev": true, "requires": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.3.0", @@ -12742,8 +12706,7 @@ "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" } } }, @@ -12751,7 +12714,6 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.6.0.tgz", "integrity": "sha512-0112LegxeR03L8J4k+q6HwBVvrpd9y+oInG0FG3NaHXN7YUubVBon/eb5jFI6edGrvNigpxSR0XIsprFXdkzCQ==", - "dev": true, "requires": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.3.0", @@ -12770,7 +12732,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.3.tgz", "integrity": "sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==", - "dev": true, "requires": { "tslib": "^2.2.0" } @@ -12779,7 +12740,6 @@ "version": "2.32.2", "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.32.2.tgz", "integrity": "sha512-1YqGzXtPG3QrZPFBKaMWr2WQdukDj+PelqUCv351+p+hlw/AhdRrb8haY73/iqkhT6Cdrbnh7sL4gikVsF4O1g==", - "dev": true, "requires": { "@azure/msal-common": "^9.0.2" }, @@ -12787,22 +12747,19 @@ "@azure/msal-common": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.1.1.tgz", - "integrity": "sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw==", - "dev": true + "integrity": "sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw==" } } }, "@azure/msal-common": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-7.6.0.tgz", - "integrity": "sha512-XqfbglUTVLdkHQ8F9UQJtKseRr3sSnr9ysboxtoswvaMVaEfvyLtMoHv9XdKUfOc0qKGzNgRFd9yRjIWVepl6Q==", - "dev": true + "integrity": "sha512-XqfbglUTVLdkHQ8F9UQJtKseRr3sSnr9ysboxtoswvaMVaEfvyLtMoHv9XdKUfOc0qKGzNgRFd9yRjIWVepl6Q==" }, "@azure/msal-node": { "version": "1.14.6", "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.6.tgz", "integrity": "sha512-em/qqFL5tLMxMPl9vormAs13OgZpmQoJbiQ/GlWr+BA77eCLoL+Ehr5xRHowYo+LFe5b+p+PJVkRvT+mLvOkwA==", - "dev": true, "requires": { "@azure/msal-common": "^9.0.2", "jsonwebtoken": "^9.0.0", @@ -12812,14 +12769,12 @@ "@azure/msal-common": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.1.1.tgz", - "integrity": "sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw==", - "dev": true + "integrity": "sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw==" }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" } } }, @@ -12950,6 +12905,17 @@ "resolved": "https://registry.npmjs.org/@cityssm/date-diff/-/date-diff-2.2.3.tgz", "integrity": "sha512-GmRXmBQxBPnt/oJ4V7iM1UszRzv/NjvfZDqVB0NdVZ8Mw+udT7G8+VZuo8pLBmiSMcijNYvJ/hV0AW2Vi5nDJA==" }, + "@cityssm/dynamics-gp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@cityssm/dynamics-gp/-/dynamics-gp-0.2.1.tgz", + "integrity": "sha512-tZU/YbmhYDryWjX0LvAeM9RhJ6fV2dYBk7FgORXhLsmBPwT9X+J2qLkVkl6gJjhVu7NJVQ0fiymHKZhSnc0Usw==", + "requires": { + "@cityssm/mssql-multi-pool": "^2.2.0", + "debug": "^4.3.4", + "mssql": "^9.1.1", + "node-cache": "^5.1.2" + } + }, "@cityssm/expressjs-server-js": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@cityssm/expressjs-server-js/-/expressjs-server-js-2.3.3.tgz", @@ -12971,7 +12937,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@cityssm/mssql-multi-pool/-/mssql-multi-pool-2.2.0.tgz", "integrity": "sha512-hx2oMBPLllbX6VF7rbQSYr7EGgsWuLXmAyfpKUnuy2oVvxRQlnF70/0Qdz2lEUPtBCcjcoADc4//EhMDuDY3UQ==", - "dev": true, "requires": { "debug": "^4.3.4", "exit-hook": "^3.1.4", @@ -13152,8 +13117,7 @@ "@js-joda/core": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.5.2.tgz", - "integrity": "sha512-retLUN4TwCJ0QJDi9OCJwYVaXAz93NeOkEtEQL98M2bykBOxmURlP0YlfsuE46kItOOVZIWRYC3KsSLhQ1R2Qw==", - "dev": true + "integrity": "sha512-retLUN4TwCJ0QJDi9OCJwYVaXAz93NeOkEtEQL98M2bykBOxmURlP0YlfsuE46kItOOVZIWRYC3KsSLhQ1R2Qw==" }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -13197,14 +13161,12 @@ "@tediousjs/connection-string": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.4.2.tgz", - "integrity": "sha512-1R9UC7Qc5wief2oJL+c1+d7v1/oPBayL85u8L/jV2DzIKput1TZ8ZUjj2nxQaSfzu210zp0oFWUrYUiUs8NhBQ==", - "dev": true + "integrity": "sha512-1R9UC7Qc5wief2oJL+c1+d7v1/oPBayL85u8L/jV2DzIKput1TZ8ZUjj2nxQaSfzu210zp0oFWUrYUiUs8NhBQ==" }, "@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" }, "@types/activedirectory2": { "version": "1.2.3", @@ -13473,6 +13435,17 @@ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", "dev": true }, + "@types/mssql": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/mssql/-/mssql-8.1.2.tgz", + "integrity": "sha512-hoDM+mZUClfXu0J1pyVdbhv2Ve0dl0TdagAE3M5rd1slqoVEEHuNObPD+giwtJgyo99CcS58qbF9ektVKdxSfQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tedious": "*", + "tarn": "^3.0.1" + } + }, "@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", @@ -13575,6 +13548,15 @@ "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", "dev": true }, + "@types/tedious": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.9.tgz", + "integrity": "sha512-ipwFvfy9b2m0gjHsIX0D6NAAwGCKokzf5zJqUZHUGt+7uWVlBIy6n2eyMgiKQ8ChLFVxic/zwQUhjLYNzbHDRA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/undertaker": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.8.tgz", @@ -13629,14 +13611,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.0.tgz", - "integrity": "sha512-+hSN9BdSr629RF02d7mMtXhAJvDTyCbprNYJKrXETlul/Aml6YZwd90XioVbjejQeHbb3R8Dg0CkRgoJDxo8aw==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.54.1.tgz", + "integrity": "sha512-a2RQAkosH3d3ZIV08s3DcL/mcGc2M/UC528VkPULFxR9VnVPT8pBu0IyBAJJmVsCmhVfwQX1v6q+QGnmSe1bew==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/type-utils": "5.54.0", - "@typescript-eslint/utils": "5.54.0", + "@typescript-eslint/scope-manager": "5.54.1", + "@typescript-eslint/type-utils": "5.54.1", + "@typescript-eslint/utils": "5.54.1", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -13647,53 +13629,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.0.tgz", - "integrity": "sha512-aAVL3Mu2qTi+h/r04WI/5PfNWvO6pdhpeMRWk9R7rEV4mwJNzoWf5CCU5vDKBsPIFQFjEq1xg7XBI2rjiMXQbQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.54.1.tgz", + "integrity": "sha512-8zaIXJp/nG9Ff9vQNh7TI+C3nA6q6iIsGJ4B4L6MhZ7mHnTMR4YP5vp2xydmFXIy8rpyIVbNAG44871LMt6ujg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/typescript-estree": "5.54.0", + "@typescript-eslint/scope-manager": "5.54.1", + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/typescript-estree": "5.54.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz", - "integrity": "sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.1.tgz", + "integrity": "sha512-zWKuGliXxvuxyM71UA/EcPxaviw39dB2504LqAmFDjmkpO8qNLHcmzlh6pbHs1h/7YQ9bnsO8CCcYCSA8sykUg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0" + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/visitor-keys": "5.54.1" } }, "@typescript-eslint/type-utils": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.0.tgz", - "integrity": "sha512-WI+WMJ8+oS+LyflqsD4nlXMsVdzTMYTxl16myXPaCXnSgc7LWwMsjxQFZCK/rVmTZ3FN71Ct78ehO9bRC7erYQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.54.1.tgz", + "integrity": "sha512-WREHsTz0GqVYLIbzIZYbmUUr95DKEKIXZNH57W3s+4bVnuF1TKe2jH8ZNH8rO1CeMY3U4j4UQeqPNkHMiGem3g==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.54.0", - "@typescript-eslint/utils": "5.54.0", + "@typescript-eslint/typescript-estree": "5.54.1", + "@typescript-eslint/utils": "5.54.1", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.0.tgz", - "integrity": "sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.1.tgz", + "integrity": "sha512-G9+1vVazrfAfbtmCapJX8jRo2E4MDXxgm/IMOF4oGh3kq7XuK3JRkOg6y2Qu1VsTRmWETyTkWt1wxy7X7/yLkw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz", - "integrity": "sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.1.tgz", + "integrity": "sha512-bjK5t+S6ffHnVwA0qRPTZrxKSaFYocwFIkZx5k7pvWfsB1I57pO/0M0Skatzzw1sCkjJ83AfGTL0oFIFiDX3bg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/visitor-keys": "5.54.0", + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/visitor-keys": "5.54.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -13702,28 +13684,28 @@ } }, "@typescript-eslint/utils": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz", - "integrity": "sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.1.tgz", + "integrity": "sha512-IY5dyQM8XD1zfDe5X8jegX6r2EVU5o/WJnLu/znLPWCBF7KNGC+adacXnt5jEYS9JixDcoccI6CvE4RCjHMzCQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.54.0", - "@typescript-eslint/types": "5.54.0", - "@typescript-eslint/typescript-estree": "5.54.0", + "@typescript-eslint/scope-manager": "5.54.1", + "@typescript-eslint/types": "5.54.1", + "@typescript-eslint/typescript-estree": "5.54.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" } }, "@typescript-eslint/visitor-keys": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz", - "integrity": "sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==", + "version": "5.54.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.1.tgz", + "integrity": "sha512-q8iSoHTgwCfgcRJ2l2x+xCbu8nBlRAlsQ33k24Adj8eoVBE0f8dUeI+bAa8F84Mv05UGbAx57g2zrRsYIooqQg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.54.0", + "@typescript-eslint/types": "5.54.1", "eslint-visitor-keys": "^3.3.0" } }, @@ -14127,8 +14109,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "at-least-node": { "version": "1.0.0", @@ -14400,8 +14381,7 @@ "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, "buffer-from": { "version": "1.1.2", @@ -14869,7 +14849,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -15283,8 +15262,7 @@ "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, "define-properties": { "version": "1.1.4", @@ -15308,8 +15286,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "depd": { "version": "2.0.0", @@ -15408,7 +15385,6 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -15507,7 +15483,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.9.tgz", "integrity": "sha512-fvnX40sb538wdU6r4s35cq4EY6Lr09Upj40BEVem4LEsuW8XgQep9yD5Q1U2KftokNp1rWODFJ2qwZSsAjFpbg==", - "dev": true, "requires": { "define-properties": "^1.1.4", "es-abstract": "^1.20.4", @@ -16029,8 +16004,7 @@ "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "execa": { "version": "4.1.0", @@ -17721,7 +17695,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, "requires": { "@tootallnate/once": "2", "agent-base": "6", @@ -18024,8 +17997,7 @@ "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, "is-extendable": { "version": "1.0.1", @@ -18230,7 +18202,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, "requires": { "is-docker": "^2.0.0" } @@ -18271,8 +18242,7 @@ "js-md4": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", - "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", - "dev": true + "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==" }, "js-sdsl": { "version": "4.3.0", @@ -18298,8 +18268,7 @@ "jsbi": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.0.tgz", - "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==", - "dev": true + "integrity": "sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==" }, "jsbn": { "version": "0.1.1", @@ -18371,7 +18340,6 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", - "dev": true, "requires": { "jws": "^3.2.2", "lodash": "^4.17.21", @@ -18383,7 +18351,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -18394,7 +18361,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, "requires": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -18424,7 +18390,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dev": true, "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -18435,7 +18400,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dev": true, "requires": { "jwa": "^2.0.0", "safe-buffer": "^5.0.1" @@ -18634,8 +18598,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.clonedeep": { "version": "4.5.0", @@ -19041,7 +19004,6 @@ "version": "9.1.1", "resolved": "https://registry.npmjs.org/mssql/-/mssql-9.1.1.tgz", "integrity": "sha512-m0yTx9xzUtTvJpWJHqknUXUDPRnJXZYOOFNygnNIXn1PBkLsC/rkXQdquObd+M0ZPlBhGC00Jg28zG0wCl7VWg==", - "dev": true, "requires": { "@tediousjs/connection-string": "^0.4.1", "commander": "^9.4.0", @@ -19054,8 +19016,7 @@ "commander": { "version": "9.5.0", "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" } } }, @@ -19107,8 +19068,7 @@ "native-duplexpair": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz", - "integrity": "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==", - "dev": true + "integrity": "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==" }, "natural-compare": { "version": "1.4.0", @@ -19144,8 +19104,7 @@ "node-abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" }, "node-cache": { "version": "5.1.2", @@ -19481,7 +19440,6 @@ "version": "8.4.0", "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, "requires": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -19881,8 +19839,7 @@ "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" }, "puppeteer": { "version": "18.2.1", @@ -20355,8 +20312,7 @@ "rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "rimraf": { "version": "3.0.2", @@ -20932,8 +20888,7 @@ "sprintf-js": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, "sshpk": { "version": "1.17.0", @@ -21038,8 +20993,7 @@ "stoppable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "dev": true + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==" }, "stream-combiner": { "version": "0.2.2", @@ -21204,14 +21158,12 @@ "tarn": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", - "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==", - "dev": true + "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==" }, "tedious": { "version": "15.1.2", "resolved": "https://registry.npmjs.org/tedious/-/tedious-15.1.2.tgz", "integrity": "sha512-94slmnggCX8zG6iLNnM3k6PplTguP0p7R2RWOKTXdPmK1VmTpWk4+e0J4koIMXm1jjG7sGlZ1/JlaGVAdF1OOg==", - "dev": true, "requires": { "@azure/identity": "^2.0.4", "@azure/keyvault-keys": "^4.4.0", @@ -21231,7 +21183,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, "requires": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -21242,7 +21193,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -21252,7 +21202,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } @@ -21261,7 +21210,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -21494,8 +21442,7 @@ "tslib": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, "tsscmp": { "version": "1.0.6", diff --git a/package.json b/package.json index 1ac2454e..33b5a7a2 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ }, "scripts": { "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:test": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:*,dynamics-gp:* TEST_DATABASES=true nodemon ./bin/www.js", "dev:test:process": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* TEST_DATABASES=true nodemon ./bin/wwwProcess.js", "dev:live": "cross-env NODE_ENV=dev DEBUG=lot-occupancy-system:* nodemon ./bin/www.js", "cy:open": "cypress open --config-file cypress.config.js", @@ -36,6 +36,7 @@ "@cityssm/bulma-js": "^0.4.0", "@cityssm/bulma-webapp-js": "^1.5.0", "@cityssm/date-diff": "^2.2.3", + "@cityssm/dynamics-gp": "^0.2.1", "@cityssm/expressjs-server-js": "^2.3.3", "@cityssm/ntfy-publish": "^0.2.1", "@cityssm/pdf-puppeteer": "^2.0.0-beta.1", @@ -90,13 +91,14 @@ "@types/http-errors": "^2.0.1", "@types/leaflet": "^1.9.1", "@types/mocha": "^10.0.1", + "@types/mssql": "^8.1.2", "@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.1", - "@typescript-eslint/eslint-plugin": "^5.54.0", - "@typescript-eslint/parser": "^5.54.0", + "@typescript-eslint/eslint-plugin": "^5.54.1", + "@typescript-eslint/parser": "^5.54.1", "axe-core": "^4.6.3", "bulma": "^0.9.4", "bulma-divider": "^0.2.0", diff --git a/public-typescript/lotOccupancyEdit.js b/public-typescript/lotOccupancyEdit.js index 7e613da7..16d1dfc9 100644 --- a/public-typescript/lotOccupancyEdit.js +++ b/public-typescript/lotOccupancyEdit.js @@ -1455,14 +1455,34 @@ Object.defineProperty(exports, "__esModule", { value: true }); tableRowElement.className = 'container--lotOccupancyTransaction'; tableRowElement.dataset.transactionIndex = lotOccupancyTransaction.transactionIndex.toString(); + let externalReceiptNumberHTML = ''; + if (lotOccupancyTransaction.externalReceiptNumber !== '') { + externalReceiptNumberHTML = cityssm.escapeHTML((_a = lotOccupancyTransaction.externalReceiptNumber) !== null && _a !== void 0 ? _a : ''); + if (los.dynamicsGPIntegrationIsEnabled) { + if (lotOccupancyTransaction.dynamicsGPDocument === undefined) { + externalReceiptNumberHTML += ` + + `; + } + else { + externalReceiptNumberHTML += + lotOccupancyTransaction.dynamicsGPDocument.documentTotal.toFixed(2) === lotOccupancyTransaction.transactionAmount.toFixed(2) + ? ` + + ` + : ` + + `; + } + } + externalReceiptNumberHTML += '
'; + } tableRowElement.innerHTML = '' + - ((_a = lotOccupancyTransaction.transactionDateString) !== null && _a !== void 0 ? _a : '') + + ((_b = lotOccupancyTransaction.transactionDateString) !== null && _b !== void 0 ? _b : '') + '' + ('' + - (lotOccupancyTransaction.externalReceiptNumber === '' - ? '' - : cityssm.escapeHTML((_b = lotOccupancyTransaction.externalReceiptNumber) !== null && _b !== void 0 ? _b : '') + '
') + + externalReceiptNumberHTML + '' + cityssm.escapeHTML((_c = lotOccupancyTransaction.transactionNote) !== null && _c !== void 0 ? _c : '') + '' + diff --git a/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.js b/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.js index d6c3aa8d..4775f465 100644 --- a/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.js +++ b/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.js @@ -365,14 +365,34 @@ function renderLotOccupancyTransactions() { tableRowElement.className = 'container--lotOccupancyTransaction'; tableRowElement.dataset.transactionIndex = lotOccupancyTransaction.transactionIndex.toString(); + let externalReceiptNumberHTML = ''; + if (lotOccupancyTransaction.externalReceiptNumber !== '') { + externalReceiptNumberHTML = cityssm.escapeHTML((_a = lotOccupancyTransaction.externalReceiptNumber) !== null && _a !== void 0 ? _a : ''); + if (los.dynamicsGPIntegrationIsEnabled) { + if (lotOccupancyTransaction.dynamicsGPDocument === undefined) { + externalReceiptNumberHTML += ` + + `; + } + else { + externalReceiptNumberHTML += + lotOccupancyTransaction.dynamicsGPDocument.documentTotal.toFixed(2) === lotOccupancyTransaction.transactionAmount.toFixed(2) + ? ` + + ` + : ` + + `; + } + } + externalReceiptNumberHTML += '
'; + } tableRowElement.innerHTML = '' + - ((_a = lotOccupancyTransaction.transactionDateString) !== null && _a !== void 0 ? _a : '') + + ((_b = lotOccupancyTransaction.transactionDateString) !== null && _b !== void 0 ? _b : '') + '' + ('' + - (lotOccupancyTransaction.externalReceiptNumber === '' - ? '' - : cityssm.escapeHTML((_b = lotOccupancyTransaction.externalReceiptNumber) !== null && _b !== void 0 ? _b : '') + '
') + + externalReceiptNumberHTML + '' + cityssm.escapeHTML((_c = lotOccupancyTransaction.transactionNote) !== null && _c !== void 0 ? _c : '') + '' + diff --git a/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.ts b/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.ts index fd40f750..88cb0de1 100644 --- a/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.ts +++ b/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.ts @@ -515,16 +515,45 @@ function renderLotOccupancyTransactions(): void { tableRowElement.dataset.transactionIndex = lotOccupancyTransaction.transactionIndex!.toString() + let externalReceiptNumberHTML = '' + + if (lotOccupancyTransaction.externalReceiptNumber !== '') { + externalReceiptNumberHTML = cityssm.escapeHTML( + lotOccupancyTransaction.externalReceiptNumber ?? '' + ) + + if (los.dynamicsGPIntegrationIsEnabled) { + if (lotOccupancyTransaction.dynamicsGPDocument === undefined) { + externalReceiptNumberHTML += ` + + ` + } else { + externalReceiptNumberHTML += + lotOccupancyTransaction.dynamicsGPDocument.documentTotal.toFixed( + 2 + ) === lotOccupancyTransaction.transactionAmount.toFixed(2) + ? ` + + ` + : ` + + ` + } + } + + externalReceiptNumberHTML += '
' + } + tableRowElement.innerHTML = '' + (lotOccupancyTransaction.transactionDateString ?? '') + '' + ('' + - (lotOccupancyTransaction.externalReceiptNumber === '' - ? '' - : cityssm.escapeHTML( - lotOccupancyTransaction.externalReceiptNumber ?? '' - ) + '
') + + externalReceiptNumberHTML + '' + cityssm.escapeHTML(lotOccupancyTransaction.transactionNote ?? '') + '' + diff --git a/public-typescript/main.js b/public-typescript/main.js index 333c9113..1a8e243f 100644 --- a/public-typescript/main.js +++ b/public-typescript/main.js @@ -378,12 +378,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); function getWorkOrderURL(workOrderId = '', edit = false, time = false) { return getRecordURL('workOrders', workOrderId, edit, time); } + /* + * Settings + */ + const dynamicsGPIntegrationIsEnabled = exports.dynamicsGPIntegrationIsEnabled; /* * Declare LOS */ const los = { urlPrefix, apiKey: document.querySelector('main').dataset.apiKey, + dynamicsGPIntegrationIsEnabled, highlightMap, initializeUnlockFieldButtons, initializeDatePickers, diff --git a/public-typescript/main.ts b/public-typescript/main.ts index 470746a0..8f085632 100644 --- a/public-typescript/main.ts +++ b/public-typescript/main.ts @@ -520,6 +520,12 @@ declare const bulmaJS: BulmaJS return getRecordURL('workOrders', workOrderId, edit, time) } + /* + * Settings + */ + + const dynamicsGPIntegrationIsEnabled = exports.dynamicsGPIntegrationIsEnabled as boolean + /* * Declare LOS */ @@ -527,6 +533,7 @@ declare const bulmaJS: BulmaJS const los: globalTypes.LOS = { urlPrefix, apiKey: document.querySelector('main')!.dataset.apiKey!, + dynamicsGPIntegrationIsEnabled, highlightMap, initializeUnlockFieldButtons, initializeDatePickers, diff --git a/public/javascripts/lotOccupancyEdit.min.js b/public/javascripts/lotOccupancyEdit.min.js index 865d0299..9665d850 100644 --- a/public/javascripts/lotOccupancyEdit.min.js +++ b/public/javascripts/lotOccupancyEdit.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e,t,c,n,o;const a=exports.los,s=document.querySelector("#lotOccupancy--lotOccupancyId").value,l=""===s;let r=l;function u(){var e;a.setUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--lotOccupancy']"))||void 0===e||e.classList.remove("is-light")}function i(){var e;a.clearUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--lotOccupancy']"))||void 0===e||e.classList.add("is-light")}const d=document.querySelector("#form--lotOccupancy");d.addEventListener("submit",e=>{e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/"+(l?"doCreateLotOccupancy":"doUpdateLotOccupancy"),d,e=>{var t;const c=e;c.success?(i(),l||r?window.location.href=a.getLotOccupancyURL(c.lotOccupancyId,!0,!0):bulmaJS.alert({message:`${a.escapedAliases.Occupancy} Updated Successfully`,contextualColorName:"success"})):bulmaJS.alert({title:"Error Saving "+a.escapedAliases.Occupancy,message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})});const p=d.querySelectorAll("input, select");for(const e of p)e.addEventListener("change",u);function m(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doCopyLotOccupancy",{lotOccupancyId:s},e=>{var t;const c=e;c.success?(i(),window.location.href=a.getLotOccupancyURL(c.lotOccupancyId,!0)):bulmaJS.alert({title:"Error Copying Record",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}null===(T=document.querySelector("#button--copyLotOccupancy"))||void 0===T||T.addEventListener("click",e=>{e.preventDefault(),a.hasUnsavedChanges()?bulmaJS.alert({title:"Unsaved Changes",message:"Please save all unsaved changes before continuing.",contextualColorName:"warning"}):bulmaJS.confirm({title:`Copy ${a.escapedAliases.Occupancy} Record as New`,message:"Are you sure you want to copy this record to a new record?",contextualColorName:"info",okButton:{text:"Yes, Copy",callbackFunction:m}})}),null===(e=document.querySelector("#button--deleteLotOccupancy"))||void 0===e||e.addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:`Delete ${a.escapedAliases.Occupancy} Record`,message:"Are you sure you want to delete this record?",contextualColorName:"warning",okButton:{text:"Yes, Delete",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancy",{lotOccupancyId:s},e=>{var t;const c=e;c.success?(i(),window.location.href=a.getLotOccupancyURL()):bulmaJS.alert({title:"Error Deleting Record",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}),null===(t=document.querySelector("#button--createWorkOrder"))||void 0===t||t.addEventListener("click",e=>{let t;function c(e){e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/workOrders/doCreateWorkOrder",e.currentTarget,e=>{const c=e;c.success?(t(),bulmaJS.confirm({title:"Work Order Created Successfully",message:"Would you like to open the work order now?",contextualColorName:"success",okButton:{text:"Yes, Open the Work Order",callbackFunction:()=>{window.location.href=a.getWorkOrderURL(c.workOrderId,!0)}}})):bulmaJS.alert({title:"Error Creating Work Order",message:c.errorMessage,contextualColorName:"danger"})})}e.preventDefault(),cityssm.openHtmlModal("lotOccupancy-createWorkOrder",{onshow(e){var t;e.querySelector("#workOrderCreate--lotOccupancyId").value=s,e.querySelector("#workOrderCreate--workOrderOpenDateString").value=cityssm.dateToString(new Date);const c=e.querySelector("#workOrderCreate--workOrderTypeId"),n=exports.workOrderTypes;1===n.length&&(c.innerHTML="");for(const e of n){const n=document.createElement("option");n.value=e.workOrderTypeId.toString(),n.textContent=null!==(t=e.workOrderType)&&void 0!==t?t:"",c.append(n)}},onshown(e,n){var o;t=n,bulmaJS.toggleHtmlClipped(),e.querySelector("#workOrderCreate--workOrderTypeId").focus(),null===(o=e.querySelector("form"))||void 0===o||o.addEventListener("submit",c)},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#button--createWorkOrder").focus()}})});const y=document.querySelector("#lotOccupancy--occupancyTypeId");if(l){const e=document.querySelector("#container--lotOccupancyFields");y.addEventListener("change",()=>{""!==y.value?cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doGetOccupancyTypeFields",{occupancyTypeId:y.value},t=>{var c,n;const o=t;if(0===o.occupancyTypeFields.length)return void(e.innerHTML=`
\n

There are no additional fields for this ${a.escapedAliases.occupancy} type.

\n
`);e.innerHTML="";let s="";for(const t of o.occupancyTypeFields){s+=","+t.occupancyTypeFieldId.toString();const o="lotOccupancyFieldValue_"+t.occupancyTypeFieldId.toString(),a="lotOccupancy--"+o,l=document.createElement("div");if(l.className="field",l.innerHTML=`
`,l.querySelector("label").textContent=t.occupancyTypeField,""===(null!==(c=t.occupancyTypeFieldValues)&&void 0!==c?c:"")){const e=document.createElement("input");e.className="input",e.id=a,e.name=o,e.type="text",e.required=t.isRequired,e.minLength=t.minimumLength,e.maxLength=t.maximumLength,""!==(null!==(n=t.pattern)&&void 0!==n?n:"")&&(e.pattern=t.pattern),l.querySelector(".control").append(e)}else{l.querySelector(".control").innerHTML=`
\n \n
`;const e=l.querySelector("select");e.required=t.isRequired;const c=t.occupancyTypeFieldValues.split("\n");for(const t of c){const c=document.createElement("option");c.value=t,c.textContent=t,e.append(c)}}console.log(l),e.append(l)}e.insertAdjacentHTML("beforeend",``)}):e.innerHTML=`
\n

Select the ${a.escapedAliases.occupancy} type to load the available fields.

\n
`})}else{const e=y.value;y.addEventListener("change",()=>{y.value!==e&&bulmaJS.confirm({title:"Confirm Change",message:`Are you sure you want to change the ${a.escapedAliases.occupancy} type?\n\n This change affects the additional fields associated with this record, and may also affect the available fees.`,contextualColorName:"warning",okButton:{text:"Yes, Keep the Change",callbackFunction:()=>{r=!0}},cancelButton:{text:"Revert the Change",callbackFunction:()=>{y.value=e}}})})}const v=document.querySelector("#lotOccupancy--lotName");v.addEventListener("click",e=>{const t=e.currentTarget.value;let c,n,o,s;function l(e,t){document.querySelector("#lotOccupancy--lotId").value=e.toString(),document.querySelector("#lotOccupancy--lotName").value=t,u(),c()}function r(e){e.preventDefault();const t=e.currentTarget;l(t.dataset.lotId,t.dataset.lotName)}function i(){s.innerHTML=a.getLoadingParagraphHTML("Searching..."),cityssm.postJSON(a.urlPrefix+"/lots/doSearchLots",o,e=>{var t,c;const n=e;if(0===n.count)return void(s.innerHTML='
\n

No results.

\n
');const o=document.createElement("div");o.className="panel";for(const e of n.lots){const n=document.createElement("a");n.className="panel-block is-block",n.href="#",n.dataset.lotId=e.lotId.toString(),n.dataset.lotName=e.lotName,n.innerHTML='
'+cityssm.escapeHTML(null!==(t=e.lotName)&&void 0!==t?t:"")+'
'+cityssm.escapeHTML(null!==(c=e.mapName)&&void 0!==c?c:"")+'
'+cityssm.escapeHTML(e.lotStatus)+'
'+(e.lotOccupancyCount>0?"Currently Occupied":"")+"
",n.addEventListener("click",r),o.append(n)}s.innerHTML="",s.append(o)})}function d(e){e.preventDefault();const t=n.querySelector("#lotCreate--lotName").value;cityssm.postJSON(a.urlPrefix+"/lots/doCreateLot",e.currentTarget,e=>{var c;const n=e;n.success?l(n.lotId,t):bulmaJS.alert({title:`Error Creating ${a.escapedAliases.Lot}`,message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-selectLot",{onshow(e){a.populateAliases(e)},onshown(e,a){var l;bulmaJS.toggleHtmlClipped(),n=e,c=a,bulmaJS.init(e);const r=e.querySelector("#lotSelect--lotName");""!==document.querySelector("#lotOccupancy--lotId").value&&(r.value=t),r.focus(),r.addEventListener("change",i);const u=e.querySelector("#lotSelect--occupancyStatus");if(u.addEventListener("change",i),""!==t&&(u.value=""),o=e.querySelector("#form--lotSelect"),s=e.querySelector("#resultsContainer--lotSelect"),o.addEventListener("submit",e=>{e.preventDefault()}),i(),exports.lotNamePattern){const t=exports.lotNamePattern;e.querySelector("#lotCreate--lotName").pattern=t.source}const p=e.querySelector("#lotCreate--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,p.append(t)}const m=e.querySelector("#lotCreate--lotStatusId");for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,m.append(t)}const y=e.querySelector("#lotCreate--mapId");for(const e of exports.maps){const t=document.createElement("option");t.value=e.mapId.toString(),t.textContent=""===(null!==(l=e.mapName)&&void 0!==l?l:"")?"(No Name)":e.mapName,y.append(t)}e.querySelector("#form--lotCreate").addEventListener("submit",d)},onremoved(){bulmaJS.toggleHtmlClipped()}})}),null===(c=document.querySelector(".is-lot-view-button"))||void 0===c||c.addEventListener("click",()=>{const e=document.querySelector("#lotOccupancy--lotId").value;""===e?bulmaJS.alert({message:`No ${a.escapedAliases.lot} selected.`,contextualColorName:"info"}):window.open(a.urlPrefix+"/lots/"+e)}),null===(n=document.querySelector(".is-clear-lot-button"))||void 0===n||n.addEventListener("click",()=>{v.disabled?bulmaJS.alert({message:"You need to unlock the field before clearing it.",contextualColorName:"info"}):(v.value=`(No ${a.escapedAliases.Lot})`,document.querySelector("#lotOccupancy--lotId").value="",u())}),a.initializeDatePickers(d),null===(o=document.querySelector("#lotOccupancy--occupancyStartDateString"))||void 0===o||o.addEventListener("change",()=>{const e=document.querySelector("#lotOccupancy--occupancyEndDateString").bulmaCalendar.datePicker;e.min=document.querySelector("#lotOccupancy--occupancyStartDateString").value,e.refresh()}),a.initializeUnlockFieldButtons(d),Object.defineProperty(exports,"__esModule",{value:!0});let O=exports.lotOccupancyOccupants;function f(e){const t=Number.parseInt(e.currentTarget.closest("tr").dataset.lotOccupantIndex,10),c=O.find(e=>e.lotOccupantIndex===t);let n,o;function l(e){e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyOccupant",n,e=>{var t;const c=e;c.success?(O=c.lotOccupancyOccupants,o(),h()):bulmaJS.alert({title:"Error Updating "+a.escapedAliases.Occupant,message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-editOccupant",{onshow(e){var n;a.populateAliases(e),e.querySelector("#lotOccupancyOccupantEdit--lotOccupancyId").value=s,e.querySelector("#lotOccupancyOccupantEdit--lotOccupantIndex").value=t.toString();const o=e.querySelector("#lotOccupancyOccupantEdit--lotOccupantTypeId");let l=!1;for(const e of exports.lotOccupantTypes){const t=document.createElement("option");t.value=e.lotOccupantTypeId.toString(),t.textContent=e.lotOccupantType,t.dataset.occupantCommentTitle=e.occupantCommentTitle,t.dataset.fontAwesomeIconClass=e.fontAwesomeIconClass,e.lotOccupantTypeId===c.lotOccupantTypeId&&(t.selected=!0,l=!0),o.append(t)}if(!l){const e=document.createElement("option");e.value=c.lotOccupantTypeId.toString(),e.textContent=c.lotOccupantType,e.dataset.occupantCommentTitle=c.occupantCommentTitle,e.dataset.fontAwesomeIconClass=c.fontAwesomeIconClass,e.selected=!0,o.append(e)}e.querySelector("#lotOccupancyOccupantEdit--fontAwesomeIconClass").innerHTML=``,e.querySelector("#lotOccupancyOccupantEdit--occupantName").value=c.occupantName,e.querySelector("#lotOccupancyOccupantEdit--occupantFamilyName").value=c.occupantFamilyName,e.querySelector("#lotOccupancyOccupantEdit--occupantAddress1").value=c.occupantAddress1,e.querySelector("#lotOccupancyOccupantEdit--occupantAddress2").value=c.occupantAddress2,e.querySelector("#lotOccupancyOccupantEdit--occupantCity").value=c.occupantCity,e.querySelector("#lotOccupancyOccupantEdit--occupantProvince").value=c.occupantProvince,e.querySelector("#lotOccupancyOccupantEdit--occupantPostalCode").value=c.occupantPostalCode,e.querySelector("#lotOccupancyOccupantEdit--occupantPhoneNumber").value=c.occupantPhoneNumber,e.querySelector("#lotOccupancyOccupantEdit--occupantEmailAddress").value=c.occupantEmailAddress,e.querySelector("#lotOccupancyOccupantEdit--occupantCommentTitle").textContent=""===(null!==(n=c.occupantCommentTitle)&&void 0!==n?n:"")?"Comment":c.occupantCommentTitle,e.querySelector("#lotOccupancyOccupantEdit--occupantComment").value=c.occupantComment},onshown(e,t){bulmaJS.toggleHtmlClipped();const c=e.querySelector("#lotOccupancyOccupantEdit--lotOccupantTypeId");c.focus(),c.addEventListener("change",()=>{var t,n;const o=null!==(t=c.selectedOptions[0].dataset.fontAwesomeIconClass)&&void 0!==t?t:"user";e.querySelector("#lotOccupancyOccupantEdit--fontAwesomeIconClass").innerHTML=``;let a=null!==(n=c.selectedOptions[0].dataset.occupantCommentTitle)&&void 0!==n?n:"";""===a&&(a="Comment"),e.querySelector("#lotOccupancyOccupantEdit--occupantCommentTitle").textContent=a}),(n=e.querySelector("form")).addEventListener("submit",l),o=t},onremoved(){bulmaJS.toggleHtmlClipped()}})}function g(e){const t=e.currentTarget.closest("tr").dataset.lotOccupantIndex;bulmaJS.confirm({title:`Remove ${a.escapedAliases.Occupant}?`,message:`Are you sure you want to remove this ${a.escapedAliases.occupant}?`,okButton:{text:"Yes, Remove "+a.escapedAliases.Occupant,callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyOccupant",{lotOccupancyId:s,lotOccupantIndex:t},e=>{var t;const c=e;c.success?(O=c.lotOccupancyOccupants,h()):bulmaJS.alert({title:"Error Removing "+a.escapedAliases.Occupant,message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}},contextualColorName:"warning"})}function h(){var e,t,c,n,o,s,l,r,u,i,d;const p=document.querySelector("#container--lotOccupancyOccupants");if(cityssm.clearElement(p),0===O.length)return void(p.innerHTML=`
\n

There are no ${a.escapedAliases.occupants} associated with this record.

\n
`);const m=document.createElement("table");m.className="table is-fullwidth is-striped is-hoverable",m.innerHTML=`\n ${a.escapedAliases.Occupant}\n Address\n Other Contact\n Comment\n Options\n \n `;for(const a of O){const p=document.createElement("tr");p.dataset.lotOccupantIndex=a.lotOccupantIndex.toString(),p.innerHTML=""+cityssm.escapeHTML(""===(null!==(e=a.occupantName)&&void 0!==e?e:"")&&""===(null!==(t=a.occupantFamilyName)&&void 0!==t?t:"")?"(No Name)":a.occupantName+" "+a.occupantFamilyName)+'
'+cityssm.escapeHTML(a.lotOccupantType)+""+(""===(null!==(c=a.occupantAddress1)&&void 0!==c?c:"")?"":cityssm.escapeHTML(a.occupantAddress1)+"
")+(""===(null!==(n=a.occupantAddress2)&&void 0!==n?n:"")?"":cityssm.escapeHTML(a.occupantAddress2)+"
")+(""===(null!==(o=a.occupantCity)&&void 0!==o?o:"")?"":cityssm.escapeHTML(a.occupantCity)+", ")+cityssm.escapeHTML(null!==(s=a.occupantProvince)&&void 0!==s?s:"")+"
"+cityssm.escapeHTML(null!==(l=a.occupantPostalCode)&&void 0!==l?l:"")+""+(""===(null!==(r=a.occupantPhoneNumber)&&void 0!==r?r:"")?"":cityssm.escapeHTML(a.occupantPhoneNumber)+"
")+(""===(null!==(u=a.occupantEmailAddress)&&void 0!==u?u:"")?"":cityssm.escapeHTML(a.occupantEmailAddress))+''+cityssm.escapeHTML(null!==(d=a.occupantComment)&&void 0!==d?d:"")+'
',p.querySelector(".button--edit").addEventListener("click",f),p.querySelector(".button--delete").addEventListener("click",g),m.querySelector("tbody").append(p)}p.append(m)}if(delete exports.lotOccupancyOccupants,l){const e=document.querySelector("#lotOccupancy--lotOccupantTypeId");e.addEventListener("change",()=>{var t;const c=d.querySelectorAll("[data-table='LotOccupancyOccupant']");for(const t of c)t.disabled=""===e.value;let n=null!==(t=e.selectedOptions[0].dataset.occupantCommentTitle)&&void 0!==t?t:"";""===n&&(n="Comment"),d.querySelector("#lotOccupancy--occupantCommentTitle").textContent=n})}else h();if(null===(T=document.querySelector("#button--addOccupant"))||void 0===T||T.addEventListener("click",()=>{let e,t,c,n;function o(t){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyOccupant",t,t=>{var c;const n=t;n.success?(O=n.lotOccupancyOccupants,e(),h()):bulmaJS.alert({title:`Error Adding ${a.escapedAliases.Occupant}`,message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}function l(e){e.preventDefault(),o(t)}let r=[];function u(e){e.preventDefault();const t=e.currentTarget,c=r[Number.parseInt(t.dataset.index,10)],n=t.closest(".modal").querySelector("#lotOccupancyOccupantCopy--lotOccupantTypeId").value;""===n?bulmaJS.alert({title:`No ${a.escapedAliases.Occupant} Type Selected`,message:`Select a type to apply to the newly added ${a.escapedAliases.occupant}.`,contextualColorName:"warning"}):(c.lotOccupantTypeId=Number.parseInt(n,10),c.lotOccupancyId=Number.parseInt(s,10),o(c))}function i(e){e.preventDefault(),""!==c.querySelector("#lotOccupancyOccupantCopy--searchFilter").value?(n.innerHTML=a.getLoadingParagraphHTML("Searching..."),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doSearchPastOccupants",c,e=>{var t,c,o,a,s,l,i,d,p;r=e.occupants;const m=document.createElement("div");m.className="panel";for(const[e,n]of r.entries()){const r=document.createElement("a");r.className="panel-block is-block",r.dataset.index=e.toString(),r.innerHTML=""+cityssm.escapeHTML(null!==(t=n.occupantName)&&void 0!==t?t:"")+" "+cityssm.escapeHTML(null!==(c=n.occupantFamilyName)&&void 0!==c?c:"")+'
'+cityssm.escapeHTML(null!==(o=n.occupantAddress1)&&void 0!==o?o:"")+"
"+(""===(null!==(a=n.occupantAddress2)&&void 0!==a?a:"")?"":cityssm.escapeHTML(n.occupantAddress2)+"
")+cityssm.escapeHTML(null!==(s=n.occupantCity)&&void 0!==s?s:"")+", "+cityssm.escapeHTML(null!==(l=n.occupantProvince)&&void 0!==l?l:"")+"
"+cityssm.escapeHTML(null!==(i=n.occupantPostalCode)&&void 0!==i?i:"")+'
'+(""===(null!==(d=n.occupantPhoneNumber)&&void 0!==d?d:"")?"":cityssm.escapeHTML(n.occupantPhoneNumber)+"
")+cityssm.escapeHTML(null!==(p=n.occupantEmailAddress)&&void 0!==p?p:"")+"
",r.addEventListener("click",u),m.append(r)}n.innerHTML="",n.append(m)})):n.innerHTML='

Enter a partial name or address in the search field above.

'}cityssm.openHtmlModal("lotOccupancy-addOccupant",{onshow(e){a.populateAliases(e),e.querySelector("#lotOccupancyOccupantAdd--lotOccupancyId").value=s;const t=e.querySelector("#lotOccupancyOccupantAdd--lotOccupantTypeId"),c=e.querySelector("#lotOccupancyOccupantCopy--lotOccupantTypeId");for(const e of exports.lotOccupantTypes){const n=document.createElement("option");n.value=e.lotOccupantTypeId.toString(),n.textContent=e.lotOccupantType,n.dataset.occupantCommentTitle=e.occupantCommentTitle,n.dataset.fontAwesomeIconClass=e.fontAwesomeIconClass,t.append(n),c.append(n.cloneNode(!0))}e.querySelector("#lotOccupancyOccupantAdd--occupantCity").value=exports.occupantCityDefault,e.querySelector("#lotOccupancyOccupantAdd--occupantProvince").value=exports.occupantProvinceDefault},onshown(o,a){bulmaJS.toggleHtmlClipped(),bulmaJS.init(o);const s=o.querySelector("#lotOccupancyOccupantAdd--lotOccupantTypeId");s.focus(),s.addEventListener("change",()=>{var e,t;const c=null!==(e=s.selectedOptions[0].dataset.fontAwesomeIconClass)&&void 0!==e?e:"user";o.querySelector("#lotOccupancyOccupantAdd--fontAwesomeIconClass").innerHTML=``;let n=null!==(t=s.selectedOptions[0].dataset.occupantCommentTitle)&&void 0!==t?t:"";""===n&&(n="Comment"),o.querySelector("#lotOccupancyOccupantAdd--occupantCommentTitle").textContent=n}),(t=o.querySelector("#form--lotOccupancyOccupantAdd")).addEventListener("submit",l),n=o.querySelector("#lotOccupancyOccupantCopy--searchResults"),(c=o.querySelector("#form--lotOccupancyOccupantCopy")).addEventListener("submit",e=>{e.preventDefault()}),o.querySelector("#lotOccupancyOccupantCopy--searchFilter").addEventListener("change",i),e=a},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#button--addOccupant").focus()}})}),!l){Object.defineProperty(exports,"__esModule",{value:!0});let e=exports.lotOccupancyComments;function S(t){const c=Number.parseInt(t.currentTarget.closest("tr").dataset.lotOccupancyCommentId,10),n=e.find(e=>e.lotOccupancyCommentId===c);let o,l;function r(t){t.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyComment",o,t=>{var c;t.success?(e=t.lotOccupancyComments,l(),C()):bulmaJS.alert({title:"Error Updating Comment",message:null!==(c=t.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-editComment",{onshow(e){a.populateAliases(e),e.querySelector("#lotOccupancyCommentEdit--lotOccupancyId").value=s,e.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentId").value=c.toString(),e.querySelector("#lotOccupancyCommentEdit--lotOccupancyComment").value=n.lotOccupancyComment;const t=e.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentDateString");t.value=n.lotOccupancyCommentDateString;const o=cityssm.dateToString(new Date);t.max=n.lotOccupancyCommentDateString<=o?o:n.lotOccupancyCommentDateString,e.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentTimeString").value=n.lotOccupancyCommentTimeString},onshown(e,t){bulmaJS.toggleHtmlClipped(),a.initializeDatePickers(e),e.querySelector("#lotOccupancyCommentEdit--lotOccupancyComment").focus(),(o=e.querySelector("form")).addEventListener("submit",r),l=t},onremoved(){bulmaJS.toggleHtmlClipped()}})}function b(t){const c=Number.parseInt(t.currentTarget.closest("tr").dataset.lotOccupancyCommentId,10);bulmaJS.confirm({title:"Remove Comment?",message:"Are you sure you want to remove this comment?",okButton:{text:"Yes, Remove Comment",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyComment",{lotOccupancyId:s,lotOccupancyCommentId:c},t=>{var c;t.success?(e=t.lotOccupancyComments,C()):bulmaJS.alert({title:"Error Removing Comment",message:null!==(c=t.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}},contextualColorName:"warning"})}function C(){var t,c,n;const o=document.querySelector("#container--lotOccupancyComments");if(0===e.length)return void(o.innerHTML='

There are no comments associated with this record.

');const a=document.createElement("table");a.className="table is-fullwidth is-striped is-hoverable",a.innerHTML='CommentorComment DateCommentOptions';for(const o of e){const e=document.createElement("tr");e.dataset.lotOccupancyCommentId=o.lotOccupancyCommentId.toString(),e.innerHTML=""+cityssm.escapeHTML(null!==(t=o.recordCreate_userName)&&void 0!==t?t:"")+""+(null!==(c=o.lotOccupancyCommentDateString)&&void 0!==c?c:"")+(0===o.lotOccupancyCommentTime?"":" "+o.lotOccupancyCommentTimeString)+""+cityssm.escapeHTML(null!==(n=o.lotOccupancyComment)&&void 0!==n?n:"")+'
',e.querySelector(".button--edit").addEventListener("click",S),e.querySelector(".button--delete").addEventListener("click",b),a.querySelector("tbody").append(e)}o.innerHTML="",o.append(a)}var T;delete exports.lotOccupancyComments,null===(T=document.querySelector("#button--addComment"))||void 0===T||T.addEventListener("click",()=>{let t,c;function n(n){n.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyComment",t,t=>{var n;t.success?(e=t.lotOccupancyComments,c(),C()):bulmaJS.alert({title:"Error Adding Comment",message:null!==(n=t.errorMessage)&&void 0!==n?n:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-addComment",{onshow(e){a.populateAliases(e),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyId").value=s},onshown(e,o){bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyComment").focus(),(t=e.querySelector("form")).addEventListener("submit",n),c=o},onremoved:()=>{bulmaJS.toggleHtmlClipped(),document.querySelector("#button--addComment").focus()}})}),C(),Object.defineProperty(exports,"__esModule",{value:!0});let t=exports.lotOccupancyFees;delete exports.lotOccupancyFees;const c=document.querySelector("#container--lotOccupancyFees");function x(){let e=0;for(const c of t)e+=(c.feeAmount+c.taxAmount)*c.quantity;return e}function L(e){const c=e.currentTarget.closest(".container--lotOccupancyFee").dataset.feeId;bulmaJS.confirm({title:"Delete Fee",message:"Are you sure you want to delete this fee?",contextualColorName:"warning",okButton:{text:"Yes, Delete Fee",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyFee",{lotOccupancyId:s,feeId:c},e=>{var c;const n=e;n.success?(t=n.lotOccupancyFees,q()):bulmaJS.alert({title:"Error Deleting Fee",message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}}})}function q(){var e,n,o;if(0===t.length)return c.innerHTML='
\n

There are no fees associated with this record.

\n
',void E();c.innerHTML='\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeeUnit Cost×QuantityequalsTotalOptions
Subtotal
Tax
Grand Total
';let a=0,s=0;for(const l of t){const t=document.createElement("tr");t.className="container--lotOccupancyFee",t.dataset.feeId=l.feeId.toString(),t.dataset.includeQuantity=null!==(e=l.includeQuantity)&&void 0!==e&&e?"1":"0",t.innerHTML=''+cityssm.escapeHTML(null!==(n=l.feeName)&&void 0!==n?n:"")+'
'+cityssm.escapeHTML(null!==(o=l.feeCategory)&&void 0!==o?o:"")+""+(1===l.quantity?"":'$'+l.feeAmount.toFixed(2)+'×'+l.quantity.toString()+"=")+'$'+(l.feeAmount*l.quantity).toFixed(2)+'',t.querySelector("button").addEventListener("click",L),c.querySelector("tbody").append(t),a+=l.feeAmount*l.quantity,s+=l.taxAmount*l.quantity}c.querySelector("#lotOccupancyFees--feeAmountTotal").textContent="$"+a.toFixed(2),c.querySelector("#lotOccupancyFees--taxAmountTotal").textContent="$"+s.toFixed(2),c.querySelector("#lotOccupancyFees--grandTotal").textContent="$"+(a+s).toFixed(2),E()}null===(T=document.querySelector("#button--addFee"))||void 0===T||T.addEventListener("click",()=>{if(a.hasUnsavedChanges())return void bulmaJS.alert({message:"Please save all unsaved changes before adding fees.",contextualColorName:"warning"});let e,n,o;function l(e,c=1){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyFee",{lotOccupancyId:s,feeId:e,quantity:c},e=>{var c;const n=e;n.success?(t=n.lotOccupancyFees,q(),u()):bulmaJS.alert({title:"Error Adding Fee",message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}function r(t){var c;t.preventDefault();const n=Number.parseInt(t.currentTarget.dataset.feeId,10),o=Number.parseInt(t.currentTarget.dataset.feeCategoryId,10),a=e.find(e=>e.feeCategoryId===o).fees.find(e=>e.feeId===n);null!==(c=a.includeQuantity)&&void 0!==c&&c?function(e){let t,c;function n(n){n.preventDefault(),l(e.feeId,t.value),c()}cityssm.openHtmlModal("lotOccupancy-setFeeQuantity",{onshow(t){t.querySelector("#lotOccupancyFeeQuantity--quantityUnit").textContent=e.quantityUnit},onshown(e,o){c=o,t=e.querySelector("#lotOccupancyFeeQuantity--quantity"),e.querySelector("form").addEventListener("submit",n)}})}(a):l(n)}function u(){var t,a,s,l,u,i;const d=n.value.trim().toLowerCase().split(" ");o.innerHTML="";for(const n of e){const e=document.createElement("div");e.className="container--feeCategory",e.dataset.feeCategoryId=n.feeCategoryId.toString(),e.innerHTML='

'+cityssm.escapeHTML(null!==(t=n.feeCategory)&&void 0!==t?t:"")+'

';let p=!1;for(const t of n.fees){if(null!==c.querySelector(`.container--lotOccupancyFee[data-fee-id='${t.feeId}'][data-include-quantity='0']`))continue;let o=!0;const m=((null!==(a=n.feeCategory)&&void 0!==a?a:"")+" "+(null!==(s=t.feeName)&&void 0!==s?s:"")+" "+(null!==(l=t.feeDescription)&&void 0!==l?l:"")).toLowerCase();for(const e of d)if(!m.includes(e)){o=!1;break}if(!o)continue;p=!0;const y=document.createElement("a");y.className="panel-block is-block container--fee",y.dataset.feeId=t.feeId.toString(),y.dataset.feeCategoryId=n.feeCategoryId.toString(),y.href="#",y.innerHTML=""+cityssm.escapeHTML(null!==(u=t.feeName)&&void 0!==u?u:"")+"
"+cityssm.escapeHTML(null!==(i=t.feeDescription)&&void 0!==i?i:"").replace(/\n/g,"
")+"
",y.addEventListener("click",r),e.querySelector(".panel").append(y)}p&&o.append(e)}}cityssm.openHtmlModal("lotOccupancy-addFee",{onshow(t){n=t.querySelector("#feeSelect--feeName"),o=t.querySelector("#resultsContainer--feeSelect"),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doGetFees",{lotOccupancyId:s},t=>{e=t.feeCategories,n.disabled=!1,n.addEventListener("keyup",u),n.focus(),u()})},onshown(){bulmaJS.toggleHtmlClipped()},onhidden(){q()},onremoved(){bulmaJS.toggleHtmlClipped()}})});let n=exports.lotOccupancyTransactions;delete exports.lotOccupancyTransactions;const o=document.querySelector("#container--lotOccupancyTransactions");function N(e){const t=e.currentTarget.closest(".container--lotOccupancyTransaction").dataset.transactionIndex;bulmaJS.confirm({title:"Delete Trasnaction",message:"Are you sure you want to delete this transaction?",contextualColorName:"warning",okButton:{text:"Yes, Delete Transaction",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyTransaction",{lotOccupancyId:s,transactionIndex:t},e=>{var t;const c=e;c.success?(n=c.lotOccupancyTransactions,E()):bulmaJS.alert({title:"Error Deleting Transaction",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}function E(){var e,c,s;if(0===n.length)return void(o.innerHTML='

There are no transactions associated with this record.

');o.innerHTML=`\n \n \n \n \n \n \n \n \n \n \n \n \n
Date${a.escapedAliases.ExternalReceiptNumber}AmountOptions
Transaction Total
`;let l=0;for(const t of n){l+=t.transactionAmount;const n=document.createElement("tr");n.className="container--lotOccupancyTransaction",n.dataset.transactionIndex=t.transactionIndex.toString(),n.innerHTML=""+(null!==(e=t.transactionDateString)&&void 0!==e?e:"")+""+(""===t.externalReceiptNumber?"":cityssm.escapeHTML(null!==(c=t.externalReceiptNumber)&&void 0!==c?c:"")+"
")+""+cityssm.escapeHTML(null!==(s=t.transactionNote)&&void 0!==s?s:"")+'$'+t.transactionAmount.toFixed(2)+'',n.querySelector("button").addEventListener("click",N),o.querySelector("tbody").append(n)}o.querySelector("#lotOccupancyTransactions--grandTotal").textContent="$"+l.toFixed(2);const r=x();r.toFixed(2)!==l.toFixed(2)&&o.insertAdjacentHTML("afterbegin",'
Outstanding Balance
$'+(r-l).toFixed(2)+"
")}document.querySelector("#button--addTransaction").addEventListener("click",()=>{let e;function t(t){t.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyTransaction",t.currentTarget,t=>{var c;const o=t;o.success?(n=o.lotOccupancyTransactions,e(),E()):bulmaJS.confirm({title:"Error Adding Transaction",message:null!==(c=o.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-addTransaction",{onshow(e){a.populateAliases(e),e.querySelector("#lotOccupancyTransactionAdd--lotOccupancyId").value=s.toString();const t=x(),c=function(){let e=0;for(const t of n)e+=t.transactionAmount;return e}(),o=e.querySelector("#lotOccupancyTransactionAdd--transactionAmount");o.min=(-1*c).toFixed(2),o.max=Math.max(t-c,0).toFixed(2),o.value=Math.max(t-c,0).toFixed(2)},onshown(c,n){bulmaJS.toggleHtmlClipped(),e=n,c.querySelector("form").addEventListener("submit",t)},onremoved(){bulmaJS.toggleHtmlClipped()}})}),q()}})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e,t,c,n,o;const a=exports.los,s=document.querySelector("#lotOccupancy--lotOccupancyId").value,l=""===s;let r=l;function u(){var e;a.setUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--lotOccupancy']"))||void 0===e||e.classList.remove("is-light")}function i(){var e;a.clearUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--lotOccupancy']"))||void 0===e||e.classList.add("is-light")}const d=document.querySelector("#form--lotOccupancy");d.addEventListener("submit",e=>{e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/"+(l?"doCreateLotOccupancy":"doUpdateLotOccupancy"),d,e=>{var t;const c=e;c.success?(i(),l||r?window.location.href=a.getLotOccupancyURL(c.lotOccupancyId,!0,!0):bulmaJS.alert({message:`${a.escapedAliases.Occupancy} Updated Successfully`,contextualColorName:"success"})):bulmaJS.alert({title:"Error Saving "+a.escapedAliases.Occupancy,message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})});const p=d.querySelectorAll("input, select");for(const e of p)e.addEventListener("change",u);function m(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doCopyLotOccupancy",{lotOccupancyId:s},e=>{var t;const c=e;c.success?(i(),window.location.href=a.getLotOccupancyURL(c.lotOccupancyId,!0)):bulmaJS.alert({title:"Error Copying Record",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}null===(T=document.querySelector("#button--copyLotOccupancy"))||void 0===T||T.addEventListener("click",e=>{e.preventDefault(),a.hasUnsavedChanges()?bulmaJS.alert({title:"Unsaved Changes",message:"Please save all unsaved changes before continuing.",contextualColorName:"warning"}):bulmaJS.confirm({title:`Copy ${a.escapedAliases.Occupancy} Record as New`,message:"Are you sure you want to copy this record to a new record?",contextualColorName:"info",okButton:{text:"Yes, Copy",callbackFunction:m}})}),null===(e=document.querySelector("#button--deleteLotOccupancy"))||void 0===e||e.addEventListener("click",e=>{e.preventDefault(),bulmaJS.confirm({title:`Delete ${a.escapedAliases.Occupancy} Record`,message:"Are you sure you want to delete this record?",contextualColorName:"warning",okButton:{text:"Yes, Delete",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancy",{lotOccupancyId:s},e=>{var t;const c=e;c.success?(i(),window.location.href=a.getLotOccupancyURL()):bulmaJS.alert({title:"Error Deleting Record",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}),null===(t=document.querySelector("#button--createWorkOrder"))||void 0===t||t.addEventListener("click",e=>{let t;function c(e){e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/workOrders/doCreateWorkOrder",e.currentTarget,e=>{const c=e;c.success?(t(),bulmaJS.confirm({title:"Work Order Created Successfully",message:"Would you like to open the work order now?",contextualColorName:"success",okButton:{text:"Yes, Open the Work Order",callbackFunction:()=>{window.location.href=a.getWorkOrderURL(c.workOrderId,!0)}}})):bulmaJS.alert({title:"Error Creating Work Order",message:c.errorMessage,contextualColorName:"danger"})})}e.preventDefault(),cityssm.openHtmlModal("lotOccupancy-createWorkOrder",{onshow(e){var t;e.querySelector("#workOrderCreate--lotOccupancyId").value=s,e.querySelector("#workOrderCreate--workOrderOpenDateString").value=cityssm.dateToString(new Date);const c=e.querySelector("#workOrderCreate--workOrderTypeId"),n=exports.workOrderTypes;1===n.length&&(c.innerHTML="");for(const e of n){const n=document.createElement("option");n.value=e.workOrderTypeId.toString(),n.textContent=null!==(t=e.workOrderType)&&void 0!==t?t:"",c.append(n)}},onshown(e,n){var o;t=n,bulmaJS.toggleHtmlClipped(),e.querySelector("#workOrderCreate--workOrderTypeId").focus(),null===(o=e.querySelector("form"))||void 0===o||o.addEventListener("submit",c)},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#button--createWorkOrder").focus()}})});const y=document.querySelector("#lotOccupancy--occupancyTypeId");if(l){const e=document.querySelector("#container--lotOccupancyFields");y.addEventListener("change",()=>{""!==y.value?cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doGetOccupancyTypeFields",{occupancyTypeId:y.value},t=>{var c,n;const o=t;if(0===o.occupancyTypeFields.length)return void(e.innerHTML=`
\n

There are no additional fields for this ${a.escapedAliases.occupancy} type.

\n
`);e.innerHTML="";let s="";for(const t of o.occupancyTypeFields){s+=","+t.occupancyTypeFieldId.toString();const o="lotOccupancyFieldValue_"+t.occupancyTypeFieldId.toString(),a="lotOccupancy--"+o,l=document.createElement("div");if(l.className="field",l.innerHTML=`
`,l.querySelector("label").textContent=t.occupancyTypeField,""===(null!==(c=t.occupancyTypeFieldValues)&&void 0!==c?c:"")){const e=document.createElement("input");e.className="input",e.id=a,e.name=o,e.type="text",e.required=t.isRequired,e.minLength=t.minimumLength,e.maxLength=t.maximumLength,""!==(null!==(n=t.pattern)&&void 0!==n?n:"")&&(e.pattern=t.pattern),l.querySelector(".control").append(e)}else{l.querySelector(".control").innerHTML=`
\n \n
`;const e=l.querySelector("select");e.required=t.isRequired;const c=t.occupancyTypeFieldValues.split("\n");for(const t of c){const c=document.createElement("option");c.value=t,c.textContent=t,e.append(c)}}console.log(l),e.append(l)}e.insertAdjacentHTML("beforeend",``)}):e.innerHTML=`
\n

Select the ${a.escapedAliases.occupancy} type to load the available fields.

\n
`})}else{const e=y.value;y.addEventListener("change",()=>{y.value!==e&&bulmaJS.confirm({title:"Confirm Change",message:`Are you sure you want to change the ${a.escapedAliases.occupancy} type?\n\n This change affects the additional fields associated with this record, and may also affect the available fees.`,contextualColorName:"warning",okButton:{text:"Yes, Keep the Change",callbackFunction:()=>{r=!0}},cancelButton:{text:"Revert the Change",callbackFunction:()=>{y.value=e}}})})}const v=document.querySelector("#lotOccupancy--lotName");v.addEventListener("click",e=>{const t=e.currentTarget.value;let c,n,o,s;function l(e,t){document.querySelector("#lotOccupancy--lotId").value=e.toString(),document.querySelector("#lotOccupancy--lotName").value=t,u(),c()}function r(e){e.preventDefault();const t=e.currentTarget;l(t.dataset.lotId,t.dataset.lotName)}function i(){s.innerHTML=a.getLoadingParagraphHTML("Searching..."),cityssm.postJSON(a.urlPrefix+"/lots/doSearchLots",o,e=>{var t,c;const n=e;if(0===n.count)return void(s.innerHTML='
\n

No results.

\n
');const o=document.createElement("div");o.className="panel";for(const e of n.lots){const n=document.createElement("a");n.className="panel-block is-block",n.href="#",n.dataset.lotId=e.lotId.toString(),n.dataset.lotName=e.lotName,n.innerHTML='
'+cityssm.escapeHTML(null!==(t=e.lotName)&&void 0!==t?t:"")+'
'+cityssm.escapeHTML(null!==(c=e.mapName)&&void 0!==c?c:"")+'
'+cityssm.escapeHTML(e.lotStatus)+'
'+(e.lotOccupancyCount>0?"Currently Occupied":"")+"
",n.addEventListener("click",r),o.append(n)}s.innerHTML="",s.append(o)})}function d(e){e.preventDefault();const t=n.querySelector("#lotCreate--lotName").value;cityssm.postJSON(a.urlPrefix+"/lots/doCreateLot",e.currentTarget,e=>{var c;const n=e;n.success?l(n.lotId,t):bulmaJS.alert({title:`Error Creating ${a.escapedAliases.Lot}`,message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-selectLot",{onshow(e){a.populateAliases(e)},onshown(e,a){var l;bulmaJS.toggleHtmlClipped(),n=e,c=a,bulmaJS.init(e);const r=e.querySelector("#lotSelect--lotName");""!==document.querySelector("#lotOccupancy--lotId").value&&(r.value=t),r.focus(),r.addEventListener("change",i);const u=e.querySelector("#lotSelect--occupancyStatus");if(u.addEventListener("change",i),""!==t&&(u.value=""),o=e.querySelector("#form--lotSelect"),s=e.querySelector("#resultsContainer--lotSelect"),o.addEventListener("submit",e=>{e.preventDefault()}),i(),exports.lotNamePattern){const t=exports.lotNamePattern;e.querySelector("#lotCreate--lotName").pattern=t.source}const p=e.querySelector("#lotCreate--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,p.append(t)}const m=e.querySelector("#lotCreate--lotStatusId");for(const e of exports.lotStatuses){const t=document.createElement("option");t.value=e.lotStatusId.toString(),t.textContent=e.lotStatus,m.append(t)}const y=e.querySelector("#lotCreate--mapId");for(const e of exports.maps){const t=document.createElement("option");t.value=e.mapId.toString(),t.textContent=""===(null!==(l=e.mapName)&&void 0!==l?l:"")?"(No Name)":e.mapName,y.append(t)}e.querySelector("#form--lotCreate").addEventListener("submit",d)},onremoved(){bulmaJS.toggleHtmlClipped()}})}),null===(c=document.querySelector(".is-lot-view-button"))||void 0===c||c.addEventListener("click",()=>{const e=document.querySelector("#lotOccupancy--lotId").value;""===e?bulmaJS.alert({message:`No ${a.escapedAliases.lot} selected.`,contextualColorName:"info"}):window.open(a.urlPrefix+"/lots/"+e)}),null===(n=document.querySelector(".is-clear-lot-button"))||void 0===n||n.addEventListener("click",()=>{v.disabled?bulmaJS.alert({message:"You need to unlock the field before clearing it.",contextualColorName:"info"}):(v.value=`(No ${a.escapedAliases.Lot})`,document.querySelector("#lotOccupancy--lotId").value="",u())}),a.initializeDatePickers(d),null===(o=document.querySelector("#lotOccupancy--occupancyStartDateString"))||void 0===o||o.addEventListener("change",()=>{const e=document.querySelector("#lotOccupancy--occupancyEndDateString").bulmaCalendar.datePicker;e.min=document.querySelector("#lotOccupancy--occupancyStartDateString").value,e.refresh()}),a.initializeUnlockFieldButtons(d),Object.defineProperty(exports,"__esModule",{value:!0});let O=exports.lotOccupancyOccupants;function f(e){const t=Number.parseInt(e.currentTarget.closest("tr").dataset.lotOccupantIndex,10),c=O.find(e=>e.lotOccupantIndex===t);let n,o;function l(e){e.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyOccupant",n,e=>{var t;const c=e;c.success?(O=c.lotOccupancyOccupants,o(),h()):bulmaJS.alert({title:"Error Updating "+a.escapedAliases.Occupant,message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-editOccupant",{onshow(e){var n;a.populateAliases(e),e.querySelector("#lotOccupancyOccupantEdit--lotOccupancyId").value=s,e.querySelector("#lotOccupancyOccupantEdit--lotOccupantIndex").value=t.toString();const o=e.querySelector("#lotOccupancyOccupantEdit--lotOccupantTypeId");let l=!1;for(const e of exports.lotOccupantTypes){const t=document.createElement("option");t.value=e.lotOccupantTypeId.toString(),t.textContent=e.lotOccupantType,t.dataset.occupantCommentTitle=e.occupantCommentTitle,t.dataset.fontAwesomeIconClass=e.fontAwesomeIconClass,e.lotOccupantTypeId===c.lotOccupantTypeId&&(t.selected=!0,l=!0),o.append(t)}if(!l){const e=document.createElement("option");e.value=c.lotOccupantTypeId.toString(),e.textContent=c.lotOccupantType,e.dataset.occupantCommentTitle=c.occupantCommentTitle,e.dataset.fontAwesomeIconClass=c.fontAwesomeIconClass,e.selected=!0,o.append(e)}e.querySelector("#lotOccupancyOccupantEdit--fontAwesomeIconClass").innerHTML=``,e.querySelector("#lotOccupancyOccupantEdit--occupantName").value=c.occupantName,e.querySelector("#lotOccupancyOccupantEdit--occupantFamilyName").value=c.occupantFamilyName,e.querySelector("#lotOccupancyOccupantEdit--occupantAddress1").value=c.occupantAddress1,e.querySelector("#lotOccupancyOccupantEdit--occupantAddress2").value=c.occupantAddress2,e.querySelector("#lotOccupancyOccupantEdit--occupantCity").value=c.occupantCity,e.querySelector("#lotOccupancyOccupantEdit--occupantProvince").value=c.occupantProvince,e.querySelector("#lotOccupancyOccupantEdit--occupantPostalCode").value=c.occupantPostalCode,e.querySelector("#lotOccupancyOccupantEdit--occupantPhoneNumber").value=c.occupantPhoneNumber,e.querySelector("#lotOccupancyOccupantEdit--occupantEmailAddress").value=c.occupantEmailAddress,e.querySelector("#lotOccupancyOccupantEdit--occupantCommentTitle").textContent=""===(null!==(n=c.occupantCommentTitle)&&void 0!==n?n:"")?"Comment":c.occupantCommentTitle,e.querySelector("#lotOccupancyOccupantEdit--occupantComment").value=c.occupantComment},onshown(e,t){bulmaJS.toggleHtmlClipped();const c=e.querySelector("#lotOccupancyOccupantEdit--lotOccupantTypeId");c.focus(),c.addEventListener("change",()=>{var t,n;const o=null!==(t=c.selectedOptions[0].dataset.fontAwesomeIconClass)&&void 0!==t?t:"user";e.querySelector("#lotOccupancyOccupantEdit--fontAwesomeIconClass").innerHTML=``;let a=null!==(n=c.selectedOptions[0].dataset.occupantCommentTitle)&&void 0!==n?n:"";""===a&&(a="Comment"),e.querySelector("#lotOccupancyOccupantEdit--occupantCommentTitle").textContent=a}),(n=e.querySelector("form")).addEventListener("submit",l),o=t},onremoved(){bulmaJS.toggleHtmlClipped()}})}function g(e){const t=e.currentTarget.closest("tr").dataset.lotOccupantIndex;bulmaJS.confirm({title:`Remove ${a.escapedAliases.Occupant}?`,message:`Are you sure you want to remove this ${a.escapedAliases.occupant}?`,okButton:{text:"Yes, Remove "+a.escapedAliases.Occupant,callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyOccupant",{lotOccupancyId:s,lotOccupantIndex:t},e=>{var t;const c=e;c.success?(O=c.lotOccupancyOccupants,h()):bulmaJS.alert({title:"Error Removing "+a.escapedAliases.Occupant,message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}},contextualColorName:"warning"})}function h(){var e,t,c,n,o,s,l,r,u,i,d;const p=document.querySelector("#container--lotOccupancyOccupants");if(cityssm.clearElement(p),0===O.length)return void(p.innerHTML=`
\n

There are no ${a.escapedAliases.occupants} associated with this record.

\n
`);const m=document.createElement("table");m.className="table is-fullwidth is-striped is-hoverable",m.innerHTML=`\n ${a.escapedAliases.Occupant}\n Address\n Other Contact\n Comment\n Options\n \n `;for(const a of O){const p=document.createElement("tr");p.dataset.lotOccupantIndex=a.lotOccupantIndex.toString(),p.innerHTML=""+cityssm.escapeHTML(""===(null!==(e=a.occupantName)&&void 0!==e?e:"")&&""===(null!==(t=a.occupantFamilyName)&&void 0!==t?t:"")?"(No Name)":a.occupantName+" "+a.occupantFamilyName)+'
'+cityssm.escapeHTML(a.lotOccupantType)+""+(""===(null!==(c=a.occupantAddress1)&&void 0!==c?c:"")?"":cityssm.escapeHTML(a.occupantAddress1)+"
")+(""===(null!==(n=a.occupantAddress2)&&void 0!==n?n:"")?"":cityssm.escapeHTML(a.occupantAddress2)+"
")+(""===(null!==(o=a.occupantCity)&&void 0!==o?o:"")?"":cityssm.escapeHTML(a.occupantCity)+", ")+cityssm.escapeHTML(null!==(s=a.occupantProvince)&&void 0!==s?s:"")+"
"+cityssm.escapeHTML(null!==(l=a.occupantPostalCode)&&void 0!==l?l:"")+""+(""===(null!==(r=a.occupantPhoneNumber)&&void 0!==r?r:"")?"":cityssm.escapeHTML(a.occupantPhoneNumber)+"
")+(""===(null!==(u=a.occupantEmailAddress)&&void 0!==u?u:"")?"":cityssm.escapeHTML(a.occupantEmailAddress))+''+cityssm.escapeHTML(null!==(d=a.occupantComment)&&void 0!==d?d:"")+'
',p.querySelector(".button--edit").addEventListener("click",f),p.querySelector(".button--delete").addEventListener("click",g),m.querySelector("tbody").append(p)}p.append(m)}if(delete exports.lotOccupancyOccupants,l){const e=document.querySelector("#lotOccupancy--lotOccupantTypeId");e.addEventListener("change",()=>{var t;const c=d.querySelectorAll("[data-table='LotOccupancyOccupant']");for(const t of c)t.disabled=""===e.value;let n=null!==(t=e.selectedOptions[0].dataset.occupantCommentTitle)&&void 0!==t?t:"";""===n&&(n="Comment"),d.querySelector("#lotOccupancy--occupantCommentTitle").textContent=n})}else h();if(null===(T=document.querySelector("#button--addOccupant"))||void 0===T||T.addEventListener("click",()=>{let e,t,c,n;function o(t){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyOccupant",t,t=>{var c;const n=t;n.success?(O=n.lotOccupancyOccupants,e(),h()):bulmaJS.alert({title:`Error Adding ${a.escapedAliases.Occupant}`,message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}function l(e){e.preventDefault(),o(t)}let r=[];function u(e){e.preventDefault();const t=e.currentTarget,c=r[Number.parseInt(t.dataset.index,10)],n=t.closest(".modal").querySelector("#lotOccupancyOccupantCopy--lotOccupantTypeId").value;""===n?bulmaJS.alert({title:`No ${a.escapedAliases.Occupant} Type Selected`,message:`Select a type to apply to the newly added ${a.escapedAliases.occupant}.`,contextualColorName:"warning"}):(c.lotOccupantTypeId=Number.parseInt(n,10),c.lotOccupancyId=Number.parseInt(s,10),o(c))}function i(e){e.preventDefault(),""!==c.querySelector("#lotOccupancyOccupantCopy--searchFilter").value?(n.innerHTML=a.getLoadingParagraphHTML("Searching..."),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doSearchPastOccupants",c,e=>{var t,c,o,a,s,l,i,d,p;r=e.occupants;const m=document.createElement("div");m.className="panel";for(const[e,n]of r.entries()){const r=document.createElement("a");r.className="panel-block is-block",r.dataset.index=e.toString(),r.innerHTML=""+cityssm.escapeHTML(null!==(t=n.occupantName)&&void 0!==t?t:"")+" "+cityssm.escapeHTML(null!==(c=n.occupantFamilyName)&&void 0!==c?c:"")+'
'+cityssm.escapeHTML(null!==(o=n.occupantAddress1)&&void 0!==o?o:"")+"
"+(""===(null!==(a=n.occupantAddress2)&&void 0!==a?a:"")?"":cityssm.escapeHTML(n.occupantAddress2)+"
")+cityssm.escapeHTML(null!==(s=n.occupantCity)&&void 0!==s?s:"")+", "+cityssm.escapeHTML(null!==(l=n.occupantProvince)&&void 0!==l?l:"")+"
"+cityssm.escapeHTML(null!==(i=n.occupantPostalCode)&&void 0!==i?i:"")+'
'+(""===(null!==(d=n.occupantPhoneNumber)&&void 0!==d?d:"")?"":cityssm.escapeHTML(n.occupantPhoneNumber)+"
")+cityssm.escapeHTML(null!==(p=n.occupantEmailAddress)&&void 0!==p?p:"")+"
",r.addEventListener("click",u),m.append(r)}n.innerHTML="",n.append(m)})):n.innerHTML='

Enter a partial name or address in the search field above.

'}cityssm.openHtmlModal("lotOccupancy-addOccupant",{onshow(e){a.populateAliases(e),e.querySelector("#lotOccupancyOccupantAdd--lotOccupancyId").value=s;const t=e.querySelector("#lotOccupancyOccupantAdd--lotOccupantTypeId"),c=e.querySelector("#lotOccupancyOccupantCopy--lotOccupantTypeId");for(const e of exports.lotOccupantTypes){const n=document.createElement("option");n.value=e.lotOccupantTypeId.toString(),n.textContent=e.lotOccupantType,n.dataset.occupantCommentTitle=e.occupantCommentTitle,n.dataset.fontAwesomeIconClass=e.fontAwesomeIconClass,t.append(n),c.append(n.cloneNode(!0))}e.querySelector("#lotOccupancyOccupantAdd--occupantCity").value=exports.occupantCityDefault,e.querySelector("#lotOccupancyOccupantAdd--occupantProvince").value=exports.occupantProvinceDefault},onshown(o,a){bulmaJS.toggleHtmlClipped(),bulmaJS.init(o);const s=o.querySelector("#lotOccupancyOccupantAdd--lotOccupantTypeId");s.focus(),s.addEventListener("change",()=>{var e,t;const c=null!==(e=s.selectedOptions[0].dataset.fontAwesomeIconClass)&&void 0!==e?e:"user";o.querySelector("#lotOccupancyOccupantAdd--fontAwesomeIconClass").innerHTML=``;let n=null!==(t=s.selectedOptions[0].dataset.occupantCommentTitle)&&void 0!==t?t:"";""===n&&(n="Comment"),o.querySelector("#lotOccupancyOccupantAdd--occupantCommentTitle").textContent=n}),(t=o.querySelector("#form--lotOccupancyOccupantAdd")).addEventListener("submit",l),n=o.querySelector("#lotOccupancyOccupantCopy--searchResults"),(c=o.querySelector("#form--lotOccupancyOccupantCopy")).addEventListener("submit",e=>{e.preventDefault()}),o.querySelector("#lotOccupancyOccupantCopy--searchFilter").addEventListener("change",i),e=a},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#button--addOccupant").focus()}})}),!l){Object.defineProperty(exports,"__esModule",{value:!0});let e=exports.lotOccupancyComments;function S(t){const c=Number.parseInt(t.currentTarget.closest("tr").dataset.lotOccupancyCommentId,10),n=e.find(e=>e.lotOccupancyCommentId===c);let o,l;function r(t){t.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyComment",o,t=>{var c;t.success?(e=t.lotOccupancyComments,l(),C()):bulmaJS.alert({title:"Error Updating Comment",message:null!==(c=t.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-editComment",{onshow(e){a.populateAliases(e),e.querySelector("#lotOccupancyCommentEdit--lotOccupancyId").value=s,e.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentId").value=c.toString(),e.querySelector("#lotOccupancyCommentEdit--lotOccupancyComment").value=n.lotOccupancyComment;const t=e.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentDateString");t.value=n.lotOccupancyCommentDateString;const o=cityssm.dateToString(new Date);t.max=n.lotOccupancyCommentDateString<=o?o:n.lotOccupancyCommentDateString,e.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentTimeString").value=n.lotOccupancyCommentTimeString},onshown(e,t){bulmaJS.toggleHtmlClipped(),a.initializeDatePickers(e),e.querySelector("#lotOccupancyCommentEdit--lotOccupancyComment").focus(),(o=e.querySelector("form")).addEventListener("submit",r),l=t},onremoved(){bulmaJS.toggleHtmlClipped()}})}function b(t){const c=Number.parseInt(t.currentTarget.closest("tr").dataset.lotOccupancyCommentId,10);bulmaJS.confirm({title:"Remove Comment?",message:"Are you sure you want to remove this comment?",okButton:{text:"Yes, Remove Comment",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyComment",{lotOccupancyId:s,lotOccupancyCommentId:c},t=>{var c;t.success?(e=t.lotOccupancyComments,C()):bulmaJS.alert({title:"Error Removing Comment",message:null!==(c=t.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}},contextualColorName:"warning"})}function C(){var t,c,n;const o=document.querySelector("#container--lotOccupancyComments");if(0===e.length)return void(o.innerHTML='

There are no comments associated with this record.

');const a=document.createElement("table");a.className="table is-fullwidth is-striped is-hoverable",a.innerHTML='CommentorComment DateCommentOptions';for(const o of e){const e=document.createElement("tr");e.dataset.lotOccupancyCommentId=o.lotOccupancyCommentId.toString(),e.innerHTML=""+cityssm.escapeHTML(null!==(t=o.recordCreate_userName)&&void 0!==t?t:"")+""+(null!==(c=o.lotOccupancyCommentDateString)&&void 0!==c?c:"")+(0===o.lotOccupancyCommentTime?"":" "+o.lotOccupancyCommentTimeString)+""+cityssm.escapeHTML(null!==(n=o.lotOccupancyComment)&&void 0!==n?n:"")+'
',e.querySelector(".button--edit").addEventListener("click",S),e.querySelector(".button--delete").addEventListener("click",b),a.querySelector("tbody").append(e)}o.innerHTML="",o.append(a)}var T;delete exports.lotOccupancyComments,null===(T=document.querySelector("#button--addComment"))||void 0===T||T.addEventListener("click",()=>{let t,c;function n(n){n.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyComment",t,t=>{var n;t.success?(e=t.lotOccupancyComments,c(),C()):bulmaJS.alert({title:"Error Adding Comment",message:null!==(n=t.errorMessage)&&void 0!==n?n:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-addComment",{onshow(e){a.populateAliases(e),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyId").value=s},onshown(e,o){bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyComment").focus(),(t=e.querySelector("form")).addEventListener("submit",n),c=o},onremoved:()=>{bulmaJS.toggleHtmlClipped(),document.querySelector("#button--addComment").focus()}})}),C(),Object.defineProperty(exports,"__esModule",{value:!0});let t=exports.lotOccupancyFees;delete exports.lotOccupancyFees;const c=document.querySelector("#container--lotOccupancyFees");function x(){let e=0;for(const c of t)e+=(c.feeAmount+c.taxAmount)*c.quantity;return e}function L(e){const c=e.currentTarget.closest(".container--lotOccupancyFee").dataset.feeId;bulmaJS.confirm({title:"Delete Fee",message:"Are you sure you want to delete this fee?",contextualColorName:"warning",okButton:{text:"Yes, Delete Fee",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyFee",{lotOccupancyId:s,feeId:c},e=>{var c;const n=e;n.success?(t=n.lotOccupancyFees,q()):bulmaJS.alert({title:"Error Deleting Fee",message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}}})}function q(){var e,n,o;if(0===t.length)return c.innerHTML='
\n

There are no fees associated with this record.

\n
',void E();c.innerHTML='\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FeeUnit Cost×QuantityequalsTotalOptions
Subtotal
Tax
Grand Total
';let a=0,s=0;for(const l of t){const t=document.createElement("tr");t.className="container--lotOccupancyFee",t.dataset.feeId=l.feeId.toString(),t.dataset.includeQuantity=null!==(e=l.includeQuantity)&&void 0!==e&&e?"1":"0",t.innerHTML=''+cityssm.escapeHTML(null!==(n=l.feeName)&&void 0!==n?n:"")+'
'+cityssm.escapeHTML(null!==(o=l.feeCategory)&&void 0!==o?o:"")+""+(1===l.quantity?"":'$'+l.feeAmount.toFixed(2)+'×'+l.quantity.toString()+"=")+'$'+(l.feeAmount*l.quantity).toFixed(2)+'',t.querySelector("button").addEventListener("click",L),c.querySelector("tbody").append(t),a+=l.feeAmount*l.quantity,s+=l.taxAmount*l.quantity}c.querySelector("#lotOccupancyFees--feeAmountTotal").textContent="$"+a.toFixed(2),c.querySelector("#lotOccupancyFees--taxAmountTotal").textContent="$"+s.toFixed(2),c.querySelector("#lotOccupancyFees--grandTotal").textContent="$"+(a+s).toFixed(2),E()}null===(T=document.querySelector("#button--addFee"))||void 0===T||T.addEventListener("click",()=>{if(a.hasUnsavedChanges())return void bulmaJS.alert({message:"Please save all unsaved changes before adding fees.",contextualColorName:"warning"});let e,n,o;function l(e,c=1){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyFee",{lotOccupancyId:s,feeId:e,quantity:c},e=>{var c;const n=e;n.success?(t=n.lotOccupancyFees,q(),u()):bulmaJS.alert({title:"Error Adding Fee",message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}function r(t){var c;t.preventDefault();const n=Number.parseInt(t.currentTarget.dataset.feeId,10),o=Number.parseInt(t.currentTarget.dataset.feeCategoryId,10),a=e.find(e=>e.feeCategoryId===o).fees.find(e=>e.feeId===n);null!==(c=a.includeQuantity)&&void 0!==c&&c?function(e){let t,c;function n(n){n.preventDefault(),l(e.feeId,t.value),c()}cityssm.openHtmlModal("lotOccupancy-setFeeQuantity",{onshow(t){t.querySelector("#lotOccupancyFeeQuantity--quantityUnit").textContent=e.quantityUnit},onshown(e,o){c=o,t=e.querySelector("#lotOccupancyFeeQuantity--quantity"),e.querySelector("form").addEventListener("submit",n)}})}(a):l(n)}function u(){var t,a,s,l,u,i;const d=n.value.trim().toLowerCase().split(" ");o.innerHTML="";for(const n of e){const e=document.createElement("div");e.className="container--feeCategory",e.dataset.feeCategoryId=n.feeCategoryId.toString(),e.innerHTML='

'+cityssm.escapeHTML(null!==(t=n.feeCategory)&&void 0!==t?t:"")+'

';let p=!1;for(const t of n.fees){if(null!==c.querySelector(`.container--lotOccupancyFee[data-fee-id='${t.feeId}'][data-include-quantity='0']`))continue;let o=!0;const m=((null!==(a=n.feeCategory)&&void 0!==a?a:"")+" "+(null!==(s=t.feeName)&&void 0!==s?s:"")+" "+(null!==(l=t.feeDescription)&&void 0!==l?l:"")).toLowerCase();for(const e of d)if(!m.includes(e)){o=!1;break}if(!o)continue;p=!0;const y=document.createElement("a");y.className="panel-block is-block container--fee",y.dataset.feeId=t.feeId.toString(),y.dataset.feeCategoryId=n.feeCategoryId.toString(),y.href="#",y.innerHTML=""+cityssm.escapeHTML(null!==(u=t.feeName)&&void 0!==u?u:"")+"
"+cityssm.escapeHTML(null!==(i=t.feeDescription)&&void 0!==i?i:"").replace(/\n/g,"
")+"
",y.addEventListener("click",r),e.querySelector(".panel").append(y)}p&&o.append(e)}}cityssm.openHtmlModal("lotOccupancy-addFee",{onshow(t){n=t.querySelector("#feeSelect--feeName"),o=t.querySelector("#resultsContainer--feeSelect"),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doGetFees",{lotOccupancyId:s},t=>{e=t.feeCategories,n.disabled=!1,n.addEventListener("keyup",u),n.focus(),u()})},onshown(){bulmaJS.toggleHtmlClipped()},onhidden(){q()},onremoved(){bulmaJS.toggleHtmlClipped()}})});let n=exports.lotOccupancyTransactions;delete exports.lotOccupancyTransactions;const o=document.querySelector("#container--lotOccupancyTransactions");function N(e){const t=e.currentTarget.closest(".container--lotOccupancyTransaction").dataset.transactionIndex;bulmaJS.confirm({title:"Delete Trasnaction",message:"Are you sure you want to delete this transaction?",contextualColorName:"warning",okButton:{text:"Yes, Delete Transaction",callbackFunction:function(){cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyTransaction",{lotOccupancyId:s,transactionIndex:t},e=>{var t;const c=e;c.success?(n=c.lotOccupancyTransactions,E()):bulmaJS.alert({title:"Error Deleting Transaction",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}function E(){var e,c,s;if(0===n.length)return void(o.innerHTML='

There are no transactions associated with this record.

');o.innerHTML=`\n \n \n \n \n \n \n \n \n \n \n \n \n
Date${a.escapedAliases.ExternalReceiptNumber}AmountOptions
Transaction Total
`;let l=0;for(const t of n){l+=t.transactionAmount;const n=document.createElement("tr");n.className="container--lotOccupancyTransaction",n.dataset.transactionIndex=t.transactionIndex.toString();let r="";""!==t.externalReceiptNumber&&(r=cityssm.escapeHTML(null!==(e=t.externalReceiptNumber)&&void 0!==e?e:""),a.dynamicsGPIntegrationIsEnabled&&(void 0===t.dynamicsGPDocument?r+=' \n \n ':r+=t.dynamicsGPDocument.documentTotal.toFixed(2)===t.transactionAmount.toFixed(2)?' \n \n ':` \n \n `),r+="
"),n.innerHTML=""+(null!==(c=t.transactionDateString)&&void 0!==c?c:"")+""+r+""+cityssm.escapeHTML(null!==(s=t.transactionNote)&&void 0!==s?s:"")+'$'+t.transactionAmount.toFixed(2)+'',n.querySelector("button").addEventListener("click",N),o.querySelector("tbody").append(n)}o.querySelector("#lotOccupancyTransactions--grandTotal").textContent="$"+l.toFixed(2);const r=x();r.toFixed(2)!==l.toFixed(2)&&o.insertAdjacentHTML("afterbegin",'
Outstanding Balance
$'+(r-l).toFixed(2)+"
")}document.querySelector("#button--addTransaction").addEventListener("click",()=>{let e;function t(t){t.preventDefault(),cityssm.postJSON(a.urlPrefix+"/lotOccupancies/doAddLotOccupancyTransaction",t.currentTarget,t=>{var c;const o=t;o.success?(n=o.lotOccupancyTransactions,e(),E()):bulmaJS.confirm({title:"Error Adding Transaction",message:null!==(c=o.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-addTransaction",{onshow(e){a.populateAliases(e),e.querySelector("#lotOccupancyTransactionAdd--lotOccupancyId").value=s.toString();const t=x(),c=function(){let e=0;for(const t of n)e+=t.transactionAmount;return e}(),o=e.querySelector("#lotOccupancyTransactionAdd--transactionAmount");o.min=(-1*c).toFixed(2),o.max=Math.max(t-c,0).toFixed(2),o.value=Math.max(t-c,0).toFixed(2)},onshown(c,n){bulmaJS.toggleHtmlClipped(),e=n,c.querySelector("form").addEventListener("submit",t)},onremoved(){bulmaJS.toggleHtmlClipped()}})}),q()}})(); \ No newline at end of file diff --git a/public/javascripts/main.min.js b/public/javascripts/main.min.js index e7b13b31..fff325c5 100644 --- a/public/javascripts/main.min.js +++ b/public/javascripts/main.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{let e=!1;function t(){return e}function s(e){const t=e.currentTarget.closest(".field").querySelector("input, select");if(t.classList.remove("is-readonly"),"INPUT"===t.tagName)t.readOnly=!1,t.disabled=!1;else{const e=t.querySelectorAll("option");for(const t of e)t.disabled=!1}t.focus()}const a={type:"date",dateFormat:"yyyy-MM-dd",showFooter:!1,color:"info",displayMode:"dialog"};const o=Object.freeze({Map:cityssm.escapeHTML(exports.aliases.map),map:cityssm.escapeHTML(exports.aliases.map.toLowerCase()),Maps:cityssm.escapeHTML(exports.aliases.maps),maps:cityssm.escapeHTML(exports.aliases.maps.toLowerCase()),Lot:cityssm.escapeHTML(exports.aliases.lot),lot:cityssm.escapeHTML(exports.aliases.lot.toLowerCase()),Lots:cityssm.escapeHTML(exports.aliases.lots),lots:cityssm.escapeHTML(exports.aliases.lots.toLowerCase()),Occupancy:cityssm.escapeHTML(exports.aliases.occupancy),occupancy:cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase()),Occupancies:cityssm.escapeHTML(exports.aliases.occupancies),occupancies:cityssm.escapeHTML(exports.aliases.occupancies.toLowerCase()),Occupant:cityssm.escapeHTML(exports.aliases.occupant),occupant:cityssm.escapeHTML(exports.aliases.occupant.toLowerCase()),Occupants:cityssm.escapeHTML(exports.aliases.occupants),occupants:cityssm.escapeHTML(exports.aliases.occupants.toLowerCase()),ExternalReceiptNumber:cityssm.escapeHTML(exports.aliases.externalReceiptNumber),externalReceiptNumber:cityssm.escapeHTML(exports.aliases.externalReceiptNumber.toLowerCase()),OccupancyStartDate:cityssm.escapeHTML(exports.aliases.occupancyStartDate),occupancyStartDate:cityssm.escapeHTML(exports.aliases.occupancyStartDate.toLowerCase()),WorkOrderOpenDate:cityssm.escapeHTML(exports.aliases.workOrderOpenDate),workOrderOpenDate:cityssm.escapeHTML(exports.aliases.workOrderOpenDate.toLowerCase()),WorkOrderCloseDate:cityssm.escapeHTML(exports.aliases.workOrderCloseDate),workOrderCloseDate:cityssm.escapeHTML(exports.aliases.workOrderCloseDate.toLowerCase())}),c=["red","green","orange","blue","pink","yellow","purple"],n=["bright","light","dark"];const i=document.querySelector("main").dataset.urlPrefix;function r(e,t,s,a){return i+"/"+e+(t?"/"+t.toString():"")+(t&&s?"/edit":"")+(a?"/?t="+Date.now().toString():"")}const l={urlPrefix:i,apiKey:document.querySelector("main").dataset.apiKey,highlightMap:function(e,t,s){let a,o=t;for(;null===(a=e.querySelector("#"+o))&&o.includes("-");)o=o.slice(0,Math.max(0,o.lastIndexOf("-")));if(null!==a){a.style.fill="",a.classList.add("highlight","is-"+s);const e=a.querySelectorAll("path");for(const t of e)t.style.fill=""}},initializeUnlockFieldButtons:function(e){const t=e.querySelectorAll(".is-unlock-field-button");for(const e of t)e.addEventListener("click",s)},initializeDatePickers:function(e){var t,s;const o=e.querySelectorAll("input[type='date']");for(const c of o){const o=Object.assign({},a);c.required&&(o.showClearButton=!1),""!==c.min&&(o.minDate=cityssm.dateStringToDate(c.min)),""!==c.max&&(o.maxDate=cityssm.dateStringToDate(c.max));const n=exports.bulmaCalendar.attach(c,o)[0];n.on("save",()=>{c.value=n.value(),c.dispatchEvent(new Event("change"))}),n.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),n.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const i=e.querySelector("#"+n._id),r=i.querySelectorAll(".datepicker-nav button.is-text");for(const e of r)e.classList.add(`is-${null!==(t=a.color)&&void 0!==t?t:""}`),e.classList.remove("is-text");const l=i.querySelector(".datetimepicker-clear-button");null!==l&&(c.required?l.remove():(l.dataset.tooltip="Clear",l.setAttribute("aria-label","Clear"),l.innerHTML=''));const p=document.querySelector("label[for='"+c.id+"']");null!==p&&i.querySelector(".datetimepicker-dummy-input").setAttribute("aria-label",null!==(s=p.textContent)&&void 0!==s?s:"")}},populateAliases:function(e){const t=e.querySelectorAll(".alias");for(const e of t)switch(e.dataset.alias){case"Map":e.textContent=exports.aliases.map;break;case"Lot":e.textContent=exports.aliases.lot;break;case"lot":e.textContent=exports.aliases.lot.toLowerCase();break;case"Occupancy":e.textContent=exports.aliases.occupancy;break;case"occupancy":e.textContent=exports.aliases.occupancy.toLowerCase();break;case"Occupant":e.textContent=exports.aliases.occupant;break;case"occupant":e.textContent=exports.aliases.occupant.toLowerCase();break;case"ExternalReceiptNumber":e.textContent=exports.aliases.externalReceiptNumber}},escapedAliases:o,getRandomColor:function(e){let t=e;return t.length<2&&(t+="a1"),exports.randomColor({seed:t+t,hue:c[t.codePointAt(t.length-1)%c.length],luminosity:n[t.codePointAt(t.length-2)%n.length]})},setUnsavedChanges:function(){t()||(e=!0,cityssm.enableNavBlocker())},clearUnsavedChanges:function(){e=!1,cityssm.disableNavBlocker()},hasUnsavedChanges:t,getMoveUpDownButtonFieldHTML:function(e,t,s=!0){return`
\n
\n \n \n \n
\n
\n \n \n \n
\n
`},getLoadingParagraphHTML:function(e="Loading..."){return`

\n
\n ${cityssm.escapeHTML(e)}\n

`},getSearchResultsPagerHTML:function(e,t,s){return'
Displaying '+(t+1).toString()+" to "+Math.min(s,e+t).toString()+" of "+s.toString()+'
'+(t>0?'
':"")+(e+t
':"")+"
"},getMapURL:function(e="",t=!1,s=!1){return r("maps",e,t,s)},getLotURL:function(e="",t=!1,s=!1){return r("lots",e,t,s)},getLotOccupancyURL:function(e="",t=!1,s=!1){return r("lotOccupancies",e,t,s)},getWorkOrderURL:function(e="",t=!1,s=!1){return r("workOrders",e,t,s)}};exports.los=l})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{let e=!1;function t(){return e}function s(e){const t=e.currentTarget.closest(".field").querySelector("input, select");if(t.classList.remove("is-readonly"),"INPUT"===t.tagName)t.readOnly=!1,t.disabled=!1;else{const e=t.querySelectorAll("option");for(const t of e)t.disabled=!1}t.focus()}const a={type:"date",dateFormat:"yyyy-MM-dd",showFooter:!1,color:"info",displayMode:"dialog"};const o=Object.freeze({Map:cityssm.escapeHTML(exports.aliases.map),map:cityssm.escapeHTML(exports.aliases.map.toLowerCase()),Maps:cityssm.escapeHTML(exports.aliases.maps),maps:cityssm.escapeHTML(exports.aliases.maps.toLowerCase()),Lot:cityssm.escapeHTML(exports.aliases.lot),lot:cityssm.escapeHTML(exports.aliases.lot.toLowerCase()),Lots:cityssm.escapeHTML(exports.aliases.lots),lots:cityssm.escapeHTML(exports.aliases.lots.toLowerCase()),Occupancy:cityssm.escapeHTML(exports.aliases.occupancy),occupancy:cityssm.escapeHTML(exports.aliases.occupancy.toLowerCase()),Occupancies:cityssm.escapeHTML(exports.aliases.occupancies),occupancies:cityssm.escapeHTML(exports.aliases.occupancies.toLowerCase()),Occupant:cityssm.escapeHTML(exports.aliases.occupant),occupant:cityssm.escapeHTML(exports.aliases.occupant.toLowerCase()),Occupants:cityssm.escapeHTML(exports.aliases.occupants),occupants:cityssm.escapeHTML(exports.aliases.occupants.toLowerCase()),ExternalReceiptNumber:cityssm.escapeHTML(exports.aliases.externalReceiptNumber),externalReceiptNumber:cityssm.escapeHTML(exports.aliases.externalReceiptNumber.toLowerCase()),OccupancyStartDate:cityssm.escapeHTML(exports.aliases.occupancyStartDate),occupancyStartDate:cityssm.escapeHTML(exports.aliases.occupancyStartDate.toLowerCase()),WorkOrderOpenDate:cityssm.escapeHTML(exports.aliases.workOrderOpenDate),workOrderOpenDate:cityssm.escapeHTML(exports.aliases.workOrderOpenDate.toLowerCase()),WorkOrderCloseDate:cityssm.escapeHTML(exports.aliases.workOrderCloseDate),workOrderCloseDate:cityssm.escapeHTML(exports.aliases.workOrderCloseDate.toLowerCase())}),n=["red","green","orange","blue","pink","yellow","purple"],c=["bright","light","dark"];const i=document.querySelector("main").dataset.urlPrefix;function r(e,t,s,a){return i+"/"+e+(t?"/"+t.toString():"")+(t&&s?"/edit":"")+(a?"/?t="+Date.now().toString():"")}const l=exports.dynamicsGPIntegrationIsEnabled,p={urlPrefix:i,apiKey:document.querySelector("main").dataset.apiKey,dynamicsGPIntegrationIsEnabled:l,highlightMap:function(e,t,s){let a,o=t;for(;null===(a=e.querySelector("#"+o))&&o.includes("-");)o=o.slice(0,Math.max(0,o.lastIndexOf("-")));if(null!==a){a.style.fill="",a.classList.add("highlight","is-"+s);const e=a.querySelectorAll("path");for(const t of e)t.style.fill=""}},initializeUnlockFieldButtons:function(e){const t=e.querySelectorAll(".is-unlock-field-button");for(const e of t)e.addEventListener("click",s)},initializeDatePickers:function(e){var t,s;const o=e.querySelectorAll("input[type='date']");for(const n of o){const o=Object.assign({},a);n.required&&(o.showClearButton=!1),""!==n.min&&(o.minDate=cityssm.dateStringToDate(n.min)),""!==n.max&&(o.maxDate=cityssm.dateStringToDate(n.max));const c=exports.bulmaCalendar.attach(n,o)[0];c.on("save",()=>{n.value=c.value(),n.dispatchEvent(new Event("change"))}),c.on("show",()=>{document.querySelector("html").classList.add("is-clipped")}),c.on("hide",()=>{bulmaJS.toggleHtmlClipped()});const i=e.querySelector("#"+c._id),r=i.querySelectorAll(".datepicker-nav button.is-text");for(const e of r)e.classList.add(`is-${null!==(t=a.color)&&void 0!==t?t:""}`),e.classList.remove("is-text");const l=i.querySelector(".datetimepicker-clear-button");null!==l&&(n.required?l.remove():(l.dataset.tooltip="Clear",l.setAttribute("aria-label","Clear"),l.innerHTML=''));const p=document.querySelector("label[for='"+n.id+"']");null!==p&&i.querySelector(".datetimepicker-dummy-input").setAttribute("aria-label",null!==(s=p.textContent)&&void 0!==s?s:"")}},populateAliases:function(e){const t=e.querySelectorAll(".alias");for(const e of t)switch(e.dataset.alias){case"Map":e.textContent=exports.aliases.map;break;case"Lot":e.textContent=exports.aliases.lot;break;case"lot":e.textContent=exports.aliases.lot.toLowerCase();break;case"Occupancy":e.textContent=exports.aliases.occupancy;break;case"occupancy":e.textContent=exports.aliases.occupancy.toLowerCase();break;case"Occupant":e.textContent=exports.aliases.occupant;break;case"occupant":e.textContent=exports.aliases.occupant.toLowerCase();break;case"ExternalReceiptNumber":e.textContent=exports.aliases.externalReceiptNumber}},escapedAliases:o,getRandomColor:function(e){let t=e;return t.length<2&&(t+="a1"),exports.randomColor({seed:t+t,hue:n[t.codePointAt(t.length-1)%n.length],luminosity:c[t.codePointAt(t.length-2)%c.length]})},setUnsavedChanges:function(){t()||(e=!0,cityssm.enableNavBlocker())},clearUnsavedChanges:function(){e=!1,cityssm.disableNavBlocker()},hasUnsavedChanges:t,getMoveUpDownButtonFieldHTML:function(e,t,s=!0){return`
\n
\n \n \n \n
\n
\n \n \n \n
\n
`},getLoadingParagraphHTML:function(e="Loading..."){return`

\n
\n ${cityssm.escapeHTML(e)}\n

`},getSearchResultsPagerHTML:function(e,t,s){return'
Displaying '+(t+1).toString()+" to "+Math.min(s,e+t).toString()+" of "+s.toString()+'
'+(t>0?'
':"")+(e+t
':"")+"
"},getMapURL:function(e="",t=!1,s=!1){return r("maps",e,t,s)},getLotURL:function(e="",t=!1,s=!1){return r("lots",e,t,s)},getLotOccupancyURL:function(e="",t=!1,s=!1){return r("lotOccupancies",e,t,s)},getWorkOrderURL:function(e="",t=!1,s=!1){return r("workOrders",e,t,s)}};exports.los=p})(); \ No newline at end of file diff --git a/types/configTypes.d.ts b/types/configTypes.d.ts index 678520dd..5534743c 100644 --- a/types/configTypes.d.ts +++ b/types/configTypes.d.ts @@ -1,3 +1,4 @@ +import type { config as MSSQLConfig } from 'mssql'; export interface Config { application: ConfigApplication; session: ConfigSession; @@ -60,8 +61,14 @@ export interface Config { printPdf: { contentDisposition?: 'attachment' | 'inline'; }; + dynamicsGP?: { + integrationIsEnabled: boolean; + mssqlConfig?: MSSQLConfig; + lookupOrder?: DynamicsGPLookup[]; + }; }; } +export type DynamicsGPLookup = 'diamond/cashReceipt' | 'invoice'; interface ConfigApplication { applicationName?: string; backgroundURL?: string; diff --git a/types/configTypes.ts b/types/configTypes.ts index 4f7d57fd..d637fd3c 100644 --- a/types/configTypes.ts +++ b/types/configTypes.ts @@ -1,3 +1,5 @@ +import type { config as MSSQLConfig } from 'mssql' + export interface Config { application: ConfigApplication session: ConfigSession @@ -60,9 +62,16 @@ export interface Config { printPdf: { contentDisposition?: 'attachment' | 'inline' } + dynamicsGP?: { + integrationIsEnabled: boolean + mssqlConfig?: MSSQLConfig + lookupOrder?: DynamicsGPLookup[] + } } } +export type DynamicsGPLookup = 'diamond/cashReceipt' | 'invoice' + interface ConfigApplication { applicationName?: string backgroundURL?: string diff --git a/types/globalTypes.d.ts b/types/globalTypes.d.ts index 13d9c1e7..4ce8266c 100644 --- a/types/globalTypes.d.ts +++ b/types/globalTypes.d.ts @@ -31,6 +31,7 @@ export interface LOS { WorkOrderCloseDate: string; workOrderCloseDate: string; }; + dynamicsGPIntegrationIsEnabled: boolean; getRandomColor: (seedString: string) => string; setUnsavedChanges: () => void; clearUnsavedChanges: () => void; diff --git a/types/globalTypes.ts b/types/globalTypes.ts index 35daed36..933ecae4 100644 --- a/types/globalTypes.ts +++ b/types/globalTypes.ts @@ -42,6 +42,8 @@ export interface LOS { workOrderCloseDate: string } + dynamicsGPIntegrationIsEnabled: boolean + getRandomColor: (seedString: string) => string setUnsavedChanges: () => void diff --git a/types/recordTypes.d.ts b/types/recordTypes.d.ts index 9f881a61..de42d43c 100644 --- a/types/recordTypes.d.ts +++ b/types/recordTypes.d.ts @@ -145,6 +145,14 @@ export interface LotOccupancyTransaction extends Record { transactionAmount: number; externalReceiptNumber?: string; transactionNote?: string; + dynamicsGPDocument?: DynamicsGPDocument; +} +export interface DynamicsGPDocument { + documentType: 'Invoice' | 'Cash Receipt'; + documentNumber: string; + documentDate: Date; + documentDescription: string[]; + documentTotal: number; } export interface LotOccupancyOccupant extends Record { lotOccupancyId?: number; diff --git a/types/recordTypes.ts b/types/recordTypes.ts index 172697ff..cf72891a 100644 --- a/types/recordTypes.ts +++ b/types/recordTypes.ts @@ -191,6 +191,15 @@ export interface LotOccupancyTransaction extends Record { transactionAmount: number externalReceiptNumber?: string transactionNote?: string + dynamicsGPDocument?: DynamicsGPDocument +} + +export interface DynamicsGPDocument { + documentType: 'Invoice' | 'Cash Receipt' + documentNumber: string + documentDate: Date + documentDescription: string[] + documentTotal: number } export interface LotOccupancyOccupant extends Record { diff --git a/views/_footerA.ejs b/views/_footerA.ejs index 4afc241e..030380ed 100644 --- a/views/_footerA.ejs +++ b/views/_footerA.ejs @@ -27,6 +27,7 @@ workOrderOpenDate: "<%= configFunctions.getProperty('aliases.workOrderOpenDate') %>", workOrderCloseDate: "<%= configFunctions.getProperty('aliases.workOrderCloseDate') %>" }; + exports.dynamicsGPIntegrationIsEnabled = <%= configFunctions.getProperty('settings.dynamicsGP.integrationIsEnabled') %>;