From b4d7a59ff21b08bde4cc24e595122bb864cc13dc Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Thu, 9 Mar 2023 12:58:23 -0500 Subject: [PATCH] update lot occupancy transactions --- .../doUpdateLotOccupancyTransaction.d.ts | 3 + .../doUpdateLotOccupancyTransaction.js | 11 ++ .../doUpdateLotOccupancyTransaction.ts | 23 +++ .../updateLotOccupancyTransaction.d.ts | 12 ++ .../updateLotOccupancyTransaction.js | 21 +++ .../updateLotOccupancyTransaction.ts | 57 ++++++++ public-typescript/lotOccupancyEdit.js | 79 +++++++++-- .../lotOccupancyEdit/lotOccupancyEditFees.js | 79 +++++++++-- .../lotOccupancyEdit/lotOccupancyEditFees.ts | 131 +++++++++++++++-- public/html/lotOccupancy-editTransaction.html | 134 ++++++++++++++++++ public/javascripts/lotOccupancyEdit.min.js | 2 +- routes/lotOccupancies.js | 2 + routes/lotOccupancies.ts | 7 + 13 files changed, 521 insertions(+), 40 deletions(-) create mode 100644 handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.d.ts create mode 100644 handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.js create mode 100644 handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.ts create mode 100644 helpers/lotOccupancyDB/updateLotOccupancyTransaction.d.ts create mode 100644 helpers/lotOccupancyDB/updateLotOccupancyTransaction.js create mode 100644 helpers/lotOccupancyDB/updateLotOccupancyTransaction.ts create mode 100644 public/html/lotOccupancy-editTransaction.html diff --git a/handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.d.ts b/handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.d.ts new file mode 100644 index 00000000..7c872b55 --- /dev/null +++ b/handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.d.ts @@ -0,0 +1,3 @@ +import type { Request, Response } from 'express'; +export declare function handler(request: Request, response: Response): Promise; +export default handler; diff --git a/handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.js b/handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.js new file mode 100644 index 00000000..b8e209df --- /dev/null +++ b/handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.js @@ -0,0 +1,11 @@ +import { updateLotOccupancyTransaction } from '../../helpers/lotOccupancyDB/updateLotOccupancyTransaction.js'; +import { getLotOccupancyTransactions } from '../../helpers/lotOccupancyDB/getLotOccupancyTransactions.js'; +export async function handler(request, response) { + await updateLotOccupancyTransaction(request.body, request.session); + const lotOccupancyTransactions = await getLotOccupancyTransactions(request.body.lotOccupancyId); + response.json({ + success: true, + lotOccupancyTransactions + }); +} +export default handler; diff --git a/handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.ts b/handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.ts new file mode 100644 index 00000000..beb3f506 --- /dev/null +++ b/handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.ts @@ -0,0 +1,23 @@ +import type { Request, Response } from 'express' + +import { updateLotOccupancyTransaction } from '../../helpers/lotOccupancyDB/updateLotOccupancyTransaction.js' + +import { getLotOccupancyTransactions } from '../../helpers/lotOccupancyDB/getLotOccupancyTransactions.js' + +export async function handler( + request: Request, + response: Response +): Promise { + await updateLotOccupancyTransaction(request.body, request.session) + + const lotOccupancyTransactions = await getLotOccupancyTransactions( + request.body.lotOccupancyId + ) + + response.json({ + success: true, + lotOccupancyTransactions + }) +} + +export default handler diff --git a/helpers/lotOccupancyDB/updateLotOccupancyTransaction.d.ts b/helpers/lotOccupancyDB/updateLotOccupancyTransaction.d.ts new file mode 100644 index 00000000..98e9def5 --- /dev/null +++ b/helpers/lotOccupancyDB/updateLotOccupancyTransaction.d.ts @@ -0,0 +1,12 @@ +import type * as recordTypes from '../../types/recordTypes'; +interface UpdateLotOccupancyTransactionForm { + lotOccupancyId: string | number; + transactionIndex: string | number; + transactionDateString: string; + transactionTimeString: string; + transactionAmount: string | number; + externalReceiptNumber: string; + transactionNote: string; +} +export declare function updateLotOccupancyTransaction(lotOccupancyTransactionForm: UpdateLotOccupancyTransactionForm, requestSession: recordTypes.PartialSession): Promise; +export default updateLotOccupancyTransaction; diff --git a/helpers/lotOccupancyDB/updateLotOccupancyTransaction.js b/helpers/lotOccupancyDB/updateLotOccupancyTransaction.js new file mode 100644 index 00000000..da7ac0a0 --- /dev/null +++ b/helpers/lotOccupancyDB/updateLotOccupancyTransaction.js @@ -0,0 +1,21 @@ +import { acquireConnection } from './pool.js'; +import { dateStringToInteger, timeStringToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js'; +export async function updateLotOccupancyTransaction(lotOccupancyTransactionForm, requestSession) { + const database = await acquireConnection(); + const result = database + .prepare(`update LotOccupancyTransactions + set transactionAmount = ?, + externalReceiptNumber = ?, + transactionNote = ?, + transactionDate = ?, + transactionTime = ?, + recordUpdate_userName = ?, + recordUpdate_timeMillis = ? + where recordDelete_timeMillis is null + and lotOccupancyId = ? + and transactionIndex = ?`) + .run(lotOccupancyTransactionForm.transactionAmount, lotOccupancyTransactionForm.externalReceiptNumber, lotOccupancyTransactionForm.transactionNote, dateStringToInteger(lotOccupancyTransactionForm.transactionDateString), timeStringToInteger(lotOccupancyTransactionForm.transactionTimeString), requestSession.user.userName, Date.now(), lotOccupancyTransactionForm.lotOccupancyId, lotOccupancyTransactionForm.transactionIndex); + database.release(); + return result.changes > 0; +} +export default updateLotOccupancyTransaction; diff --git a/helpers/lotOccupancyDB/updateLotOccupancyTransaction.ts b/helpers/lotOccupancyDB/updateLotOccupancyTransaction.ts new file mode 100644 index 00000000..e3e6eb53 --- /dev/null +++ b/helpers/lotOccupancyDB/updateLotOccupancyTransaction.ts @@ -0,0 +1,57 @@ +import { acquireConnection } from './pool.js' + +import { + dateStringToInteger, + timeStringToInteger +} from '@cityssm/expressjs-server-js/dateTimeFns.js' + +import type * as recordTypes from '../../types/recordTypes' + +interface UpdateLotOccupancyTransactionForm { + lotOccupancyId: string | number + transactionIndex: string | number + transactionDateString: string + transactionTimeString: string + transactionAmount: string | number + externalReceiptNumber: string + transactionNote: string +} + +export async function updateLotOccupancyTransaction( + lotOccupancyTransactionForm: UpdateLotOccupancyTransactionForm, + requestSession: recordTypes.PartialSession +): Promise { + const database = await acquireConnection() + + const result = database + .prepare( + `update LotOccupancyTransactions + set transactionAmount = ?, + externalReceiptNumber = ?, + transactionNote = ?, + transactionDate = ?, + transactionTime = ?, + recordUpdate_userName = ?, + recordUpdate_timeMillis = ? + where recordDelete_timeMillis is null + and lotOccupancyId = ? + and transactionIndex = ?` + ) + .run( + lotOccupancyTransactionForm.transactionAmount, + lotOccupancyTransactionForm.externalReceiptNumber, + lotOccupancyTransactionForm.transactionNote, + dateStringToInteger(lotOccupancyTransactionForm.transactionDateString), + timeStringToInteger(lotOccupancyTransactionForm.transactionTimeString), + requestSession.user!.userName, + Date.now(), + lotOccupancyTransactionForm.lotOccupancyId, + lotOccupancyTransactionForm.transactionIndex + ) + + database.release() + + return result.changes > 0 +} + +export default updateLotOccupancyTransaction diff --git a/public-typescript/lotOccupancyEdit.js b/public-typescript/lotOccupancyEdit.js index e75a0609..8217949c 100644 --- a/public-typescript/lotOccupancyEdit.js +++ b/public-typescript/lotOccupancyEdit.js @@ -1109,14 +1109,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); const fee = lotOccupancyFees.find((possibleFee) => { return possibleFee.feeId === feeId; }); - if (fee === undefined) { - bulmaJS.alert({ - title: 'Fee Not Found', - message: 'Please refresh the page', - contextualColorName: 'danger' - }); - return; - } let updateCloseModalFunction; function doUpdateQuantity(formEvent) { formEvent.preventDefault(); @@ -1146,10 +1138,14 @@ Object.defineProperty(exports, "__esModule", { value: true }); }, onshown(modalElement, closeModalFunction) { var _a; + bulmaJS.toggleHtmlClipped(); updateCloseModalFunction = closeModalFunction; modalElement.querySelector('#lotOccupancyFeeQuantity--quantity').focus(); (_a = modalElement .querySelector('form')) === null || _a === void 0 ? void 0 : _a.addEventListener('submit', doUpdateQuantity); + }, + onremoved() { + bulmaJS.toggleHtmlClipped(); } }); } @@ -1447,6 +1443,56 @@ Object.defineProperty(exports, "__esModule", { value: true }); } return transactionGrandTotal; } + function editLotOccupancyTransaction(clickEvent) { + const transactionIndex = Number.parseInt(clickEvent.currentTarget.closest('tr').dataset + .transactionIndex, 10); + const transaction = lotOccupancyTransactions.find((possibleTransaction) => { + return possibleTransaction.transactionIndex === transactionIndex; + }); + let editCloseModalFunction; + function doEdit(formEvent) { + formEvent.preventDefault(); + cityssm.postJSON(los.urlPrefix + '/lotOccupancies/doUpdateLotOccupancyTransaction', formEvent.currentTarget, (rawResponseJSON) => { + const responseJSON = rawResponseJSON; + if (responseJSON.success) { + lotOccupancyTransactions = responseJSON.lotOccupancyTransactions; + renderLotOccupancyTransactions(); + editCloseModalFunction(); + } + else { + bulmaJS.alert({ + title: 'Error Updating Transaction', + message: 'Please try again.', + contextualColorName: 'danger' + }); + } + }); + } + cityssm.openHtmlModal('lotOccupancy-editTransaction', { + onshow(modalElement) { + var _a, _b, _c, _d; + los.populateAliases(modalElement); + modalElement.querySelector('#lotOccupancyTransactionEdit--lotOccupancyId').value = lotOccupancyId; + modalElement.querySelector('#lotOccupancyTransactionEdit--transactionIndex').value = transaction.transactionIndex.toString(); + modalElement.querySelector('#lotOccupancyTransactionEdit--transactionAmount').value = transaction.transactionAmount.toFixed(2); + modalElement.querySelector('#lotOccupancyTransactionEdit--externalReceiptNumber').value = (_a = transaction.externalReceiptNumber) !== null && _a !== void 0 ? _a : ''; + modalElement.querySelector('#lotOccupancyTransactionEdit--transactionNote').value = (_b = transaction.transactionNote) !== null && _b !== void 0 ? _b : ''; + modalElement.querySelector('#lotOccupancyTransactionEdit--transactionDateString').value = (_c = transaction.transactionDateString) !== null && _c !== void 0 ? _c : ''; + modalElement.querySelector('#lotOccupancyTransactionEdit--transactionTimeString').value = (_d = transaction.transactionTimeString) !== null && _d !== void 0 ? _d : ''; + }, + onshown(modalElement, closeModalFunction) { + var _a; + bulmaJS.toggleHtmlClipped(); + los.initializeDatePickers(modalElement); + modalElement.querySelector('#lotOccupancyTransactionEdit--transactionAmount').focus(); + (_a = modalElement.querySelector('form')) === null || _a === void 0 ? void 0 : _a.addEventListener('submit', doEdit); + editCloseModalFunction = closeModalFunction; + }, + onremoved() { + bulmaJS.toggleHtmlClipped(); + } + }); + } function deleteLotOccupancyTransaction(clickEvent) { const transactionIndex = clickEvent.currentTarget.closest('.container--lotOccupancyTransaction').dataset.transactionIndex; function doDelete() { @@ -1480,7 +1526,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); }); } function renderLotOccupancyTransactions() { - var _a, _b, _c; + var _a, _b, _c, _d, _e; if (lotOccupancyTransactions.length === 0) { lotOccupancyTransactionsContainerElement.innerHTML = '
') + ('' + - '' + + '' + + '
' + ''); - tableRowElement - .querySelector('button') - .addEventListener('click', deleteLotOccupancyTransaction); + (_d = tableRowElement + .querySelector('.button--edit')) === null || _d === void 0 ? void 0 : _d.addEventListener('click', editLotOccupancyTransaction); + (_e = tableRowElement + .querySelector('.button--delete')) === null || _e === void 0 ? void 0 : _e.addEventListener('click', deleteLotOccupancyTransaction); lotOccupancyTransactionsContainerElement .querySelector('tbody') .append(tableRowElement); diff --git a/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.js b/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.js index 22a58ee6..62608a3a 100644 --- a/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.js +++ b/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.js @@ -19,14 +19,6 @@ function editLotOccupancyFeeQuantity(clickEvent) { const fee = lotOccupancyFees.find((possibleFee) => { return possibleFee.feeId === feeId; }); - if (fee === undefined) { - bulmaJS.alert({ - title: 'Fee Not Found', - message: 'Please refresh the page', - contextualColorName: 'danger' - }); - return; - } let updateCloseModalFunction; function doUpdateQuantity(formEvent) { formEvent.preventDefault(); @@ -56,10 +48,14 @@ function editLotOccupancyFeeQuantity(clickEvent) { }, onshown(modalElement, closeModalFunction) { var _a; + bulmaJS.toggleHtmlClipped(); updateCloseModalFunction = closeModalFunction; modalElement.querySelector('#lotOccupancyFeeQuantity--quantity').focus(); (_a = modalElement .querySelector('form')) === null || _a === void 0 ? void 0 : _a.addEventListener('submit', doUpdateQuantity); + }, + onremoved() { + bulmaJS.toggleHtmlClipped(); } }); } @@ -357,6 +353,56 @@ function getTransactionGrandTotal() { } return transactionGrandTotal; } +function editLotOccupancyTransaction(clickEvent) { + const transactionIndex = Number.parseInt(clickEvent.currentTarget.closest('tr').dataset + .transactionIndex, 10); + const transaction = lotOccupancyTransactions.find((possibleTransaction) => { + return possibleTransaction.transactionIndex === transactionIndex; + }); + let editCloseModalFunction; + function doEdit(formEvent) { + formEvent.preventDefault(); + cityssm.postJSON(los.urlPrefix + '/lotOccupancies/doUpdateLotOccupancyTransaction', formEvent.currentTarget, (rawResponseJSON) => { + const responseJSON = rawResponseJSON; + if (responseJSON.success) { + lotOccupancyTransactions = responseJSON.lotOccupancyTransactions; + renderLotOccupancyTransactions(); + editCloseModalFunction(); + } + else { + bulmaJS.alert({ + title: 'Error Updating Transaction', + message: 'Please try again.', + contextualColorName: 'danger' + }); + } + }); + } + cityssm.openHtmlModal('lotOccupancy-editTransaction', { + onshow(modalElement) { + var _a, _b, _c, _d; + los.populateAliases(modalElement); + modalElement.querySelector('#lotOccupancyTransactionEdit--lotOccupancyId').value = lotOccupancyId; + modalElement.querySelector('#lotOccupancyTransactionEdit--transactionIndex').value = transaction.transactionIndex.toString(); + modalElement.querySelector('#lotOccupancyTransactionEdit--transactionAmount').value = transaction.transactionAmount.toFixed(2); + modalElement.querySelector('#lotOccupancyTransactionEdit--externalReceiptNumber').value = (_a = transaction.externalReceiptNumber) !== null && _a !== void 0 ? _a : ''; + modalElement.querySelector('#lotOccupancyTransactionEdit--transactionNote').value = (_b = transaction.transactionNote) !== null && _b !== void 0 ? _b : ''; + modalElement.querySelector('#lotOccupancyTransactionEdit--transactionDateString').value = (_c = transaction.transactionDateString) !== null && _c !== void 0 ? _c : ''; + modalElement.querySelector('#lotOccupancyTransactionEdit--transactionTimeString').value = (_d = transaction.transactionTimeString) !== null && _d !== void 0 ? _d : ''; + }, + onshown(modalElement, closeModalFunction) { + var _a; + bulmaJS.toggleHtmlClipped(); + los.initializeDatePickers(modalElement); + modalElement.querySelector('#lotOccupancyTransactionEdit--transactionAmount').focus(); + (_a = modalElement.querySelector('form')) === null || _a === void 0 ? void 0 : _a.addEventListener('submit', doEdit); + editCloseModalFunction = closeModalFunction; + }, + onremoved() { + bulmaJS.toggleHtmlClipped(); + } + }); +} function deleteLotOccupancyTransaction(clickEvent) { const transactionIndex = clickEvent.currentTarget.closest('.container--lotOccupancyTransaction').dataset.transactionIndex; function doDelete() { @@ -390,7 +436,7 @@ function deleteLotOccupancyTransaction(clickEvent) { }); } function renderLotOccupancyTransactions() { - var _a, _b, _c; + var _a, _b, _c, _d, _e; if (lotOccupancyTransactions.length === 0) { lotOccupancyTransactionsContainerElement.innerHTML = '
' + - '' + + '' + + '
' + ''); - tableRowElement - .querySelector('button') - .addEventListener('click', deleteLotOccupancyTransaction); + (_d = tableRowElement + .querySelector('.button--edit')) === null || _d === void 0 ? void 0 : _d.addEventListener('click', editLotOccupancyTransaction); + (_e = tableRowElement + .querySelector('.button--delete')) === null || _e === void 0 ? void 0 : _e.addEventListener('click', deleteLotOccupancyTransaction); lotOccupancyTransactionsContainerElement .querySelector('tbody') .append(tableRowElement); diff --git a/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.ts b/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.ts index 16520f92..65dd6533 100644 --- a/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.ts +++ b/public-typescript/lotOccupancyEdit/lotOccupancyEditFees.ts @@ -41,16 +41,7 @@ function editLotOccupancyFeeQuantity(clickEvent: Event): void { ) const fee = lotOccupancyFees.find((possibleFee) => { return possibleFee.feeId === feeId - }) - - if (fee === undefined) { - bulmaJS.alert({ - title: 'Fee Not Found', - message: 'Please refresh the page', - contextualColorName: 'danger' - }) - return - } + })! let updateCloseModalFunction: () => void @@ -105,6 +96,8 @@ function editLotOccupancyFeeQuantity(clickEvent: Event): void { ).textContent = fee.quantityUnit! }, onshown(modalElement, closeModalFunction) { + bulmaJS.toggleHtmlClipped() + updateCloseModalFunction = closeModalFunction ;( modalElement.querySelector( @@ -115,6 +108,9 @@ function editLotOccupancyFeeQuantity(clickEvent: Event): void { modalElement .querySelector('form') ?.addEventListener('submit', doUpdateQuantity) + }, + onremoved() { + bulmaJS.toggleHtmlClipped() } }) } @@ -532,6 +528,105 @@ function getTransactionGrandTotal(): number { return transactionGrandTotal } +function editLotOccupancyTransaction(clickEvent: Event): void { + const transactionIndex = Number.parseInt( + (clickEvent.currentTarget as HTMLButtonElement).closest('tr')!.dataset + .transactionIndex!, + 10 + ) + + const transaction = lotOccupancyTransactions.find((possibleTransaction) => { + return possibleTransaction.transactionIndex === transactionIndex + })! + + let editCloseModalFunction: () => void + + function doEdit(formEvent: SubmitEvent): void { + formEvent.preventDefault() + + cityssm.postJSON( + los.urlPrefix + '/lotOccupancies/doUpdateLotOccupancyTransaction', + formEvent.currentTarget, + (rawResponseJSON) => { + const responseJSON = rawResponseJSON as { + success: boolean + lotOccupancyTransactions: recordTypes.LotOccupancyTransaction[] + } + + if (responseJSON.success) { + lotOccupancyTransactions = responseJSON.lotOccupancyTransactions + renderLotOccupancyTransactions() + editCloseModalFunction() + } else { + bulmaJS.alert({ + title: 'Error Updating Transaction', + message: 'Please try again.', + contextualColorName: 'danger' + }) + } + } + ) + } + + cityssm.openHtmlModal('lotOccupancy-editTransaction', { + onshow(modalElement) { + los.populateAliases(modalElement) + ;( + modalElement.querySelector( + '#lotOccupancyTransactionEdit--lotOccupancyId' + ) as HTMLInputElement + ).value = lotOccupancyId + ;( + modalElement.querySelector( + '#lotOccupancyTransactionEdit--transactionIndex' + ) as HTMLInputElement + ).value = transaction.transactionIndex!.toString() + ;( + modalElement.querySelector( + '#lotOccupancyTransactionEdit--transactionAmount' + ) as HTMLInputElement + ).value = transaction.transactionAmount.toFixed(2) + ;( + modalElement.querySelector( + '#lotOccupancyTransactionEdit--externalReceiptNumber' + ) as HTMLInputElement + ).value = transaction.externalReceiptNumber ?? '' + ;( + modalElement.querySelector( + '#lotOccupancyTransactionEdit--transactionNote' + ) as HTMLTextAreaElement + ).value = transaction.transactionNote ?? '' + ;( + modalElement.querySelector( + '#lotOccupancyTransactionEdit--transactionDateString' + ) as HTMLInputElement + ).value = transaction.transactionDateString ?? '' + ;( + modalElement.querySelector( + '#lotOccupancyTransactionEdit--transactionTimeString' + ) as HTMLInputElement + ).value = transaction.transactionTimeString ?? '' + }, + onshown(modalElement, closeModalFunction) { + bulmaJS.toggleHtmlClipped() + + los.initializeDatePickers(modalElement) + ;( + modalElement.querySelector( + '#lotOccupancyTransactionEdit--transactionAmount' + ) as HTMLInputElement + ).focus() + + modalElement.querySelector('form')?.addEventListener('submit', doEdit) + + editCloseModalFunction = closeModalFunction + }, + onremoved() { + bulmaJS.toggleHtmlClipped() + } + }) +} + function deleteLotOccupancyTransaction(clickEvent: Event): void { const transactionIndex = ( (clickEvent.currentTarget as HTMLElement).closest( @@ -663,14 +758,24 @@ function renderLotOccupancyTransactions(): void { lotOccupancyTransaction.transactionAmount.toFixed(2) + '') + ('' + - '' + + '' + + '' + '') tableRowElement - .querySelector('button')! - .addEventListener('click', deleteLotOccupancyTransaction) + .querySelector('.button--edit') + ?.addEventListener('click', editLotOccupancyTransaction) + + tableRowElement + .querySelector('.button--delete') + ?.addEventListener('click', deleteLotOccupancyTransaction) lotOccupancyTransactionsContainerElement .querySelector('tbody')! diff --git a/public/html/lotOccupancy-editTransaction.html b/public/html/lotOccupancy-editTransaction.html new file mode 100644 index 00000000..4c2ce3d3 --- /dev/null +++ b/public/html/lotOccupancy-editTransaction.html @@ -0,0 +1,134 @@ + diff --git a/public/javascripts/lotOccupancyEdit.min.js b/public/javascripts/lotOccupancyEdit.min.js index 7144de4b..caa4a3a3 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,a;const o=exports.los,s=document.querySelector("#lotOccupancy--lotOccupancyId").value,l=""===s;let r=l;function i(){var e;o.setUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--lotOccupancy']"))||void 0===e||e.classList.remove("is-light")}function u(){var e;o.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(o.urlPrefix+"/lotOccupancies/"+(l?"doCreateLotOccupancy":"doUpdateLotOccupancy"),d,e=>{var t;const c=e;c.success?(u(),l||r?window.location.href=o.getLotOccupancyURL(c.lotOccupancyId,!0,!0):bulmaJS.alert({message:`${o.escapedAliases.Occupancy} Updated Successfully`,contextualColorName:"success"})):bulmaJS.alert({title:"Error Saving "+o.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",i);function m(){cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doCopyLotOccupancy",{lotOccupancyId:s},e=>{var t;const c=e;c.success?(u(),window.location.href=o.getLotOccupancyURL(c.lotOccupancyId,!0)):bulmaJS.alert({title:"Error Copying Record",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}null===(S=document.querySelector("#button--copyLotOccupancy"))||void 0===S||S.addEventListener("click",e=>{e.preventDefault(),o.hasUnsavedChanges()?bulmaJS.alert({title:"Unsaved Changes",message:"Please save all unsaved changes before continuing.",contextualColorName:"warning"}):bulmaJS.confirm({title:`Copy ${o.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 ${o.escapedAliases.Occupancy} Record`,message:"Are you sure you want to delete this record?",contextualColorName:"warning",okButton:{text:"Yes, Delete",callbackFunction:function(){cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doDeleteLotOccupancy",{lotOccupancyId:s},e=>{var t;const c=e;c.success?(u(),window.location.href=o.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(o.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=o.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 a;t=n,bulmaJS.toggleHtmlClipped(),e.querySelector("#workOrderCreate--workOrderTypeId").focus(),null===(a=e.querySelector("form"))||void 0===a||a.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(o.urlPrefix+"/lotOccupancies/doGetOccupancyTypeFields",{occupancyTypeId:y.value},t=>{var c,n;const a=t;if(0===a.occupancyTypeFields.length)return void(e.innerHTML=`
\n

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

\n
`);e.innerHTML="";let s="";for(const t of a.occupancyTypeFields){s+=","+t.occupancyTypeFieldId.toString();const a="lotOccupancyFieldValue_"+t.occupancyTypeFieldId.toString(),o="lotOccupancy--"+a,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=o,e.name=a,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 ${o.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 ${o.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,a,s;function l(e,t){document.querySelector("#lotOccupancy--lotId").value=e.toString(),document.querySelector("#lotOccupancy--lotName").value=t,i(),c()}function r(e){e.preventDefault();const t=e.currentTarget;l(t.dataset.lotId,t.dataset.lotName)}function u(){s.innerHTML=o.getLoadingParagraphHTML("Searching..."),cityssm.postJSON(o.urlPrefix+"/lots/doSearchLots",a,e=>{var t,c;const n=e;if(0===n.count)return void(s.innerHTML='
\n

No results.

\n
');const a=document.createElement("div");a.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),a.append(n)}s.innerHTML="",s.append(a)})}function d(e){e.preventDefault();const t=n.querySelector("#lotCreate--lotName").value;cityssm.postJSON(o.urlPrefix+"/lots/doCreateLot",e.currentTarget,e=>{var c;const n=e;n.success?l(n.lotId,t):bulmaJS.alert({title:`Error Creating ${o.escapedAliases.Lot}`,message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-selectLot",{onshow(e){o.populateAliases(e)},onshown(e,o){var l;bulmaJS.toggleHtmlClipped(),n=e,c=o,bulmaJS.init(e);const r=e.querySelector("#lotSelect--lotName");""!==document.querySelector("#lotOccupancy--lotId").value&&(r.value=t),r.focus(),r.addEventListener("change",u);const i=e.querySelector("#lotSelect--occupancyStatus");if(i.addEventListener("change",u),""!==t&&(i.value=""),a=e.querySelector("#form--lotSelect"),s=e.querySelector("#resultsContainer--lotSelect"),a.addEventListener("submit",e=>{e.preventDefault()}),u(),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 ${o.escapedAliases.lot} selected.`,contextualColorName:"info"}):window.open(o.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 ${o.escapedAliases.Lot})`,document.querySelector("#lotOccupancy--lotId").value="",i())}),o.initializeDatePickers(d),null===(a=document.querySelector("#lotOccupancy--occupancyStartDateString"))||void 0===a||a.addEventListener("change",()=>{const e=document.querySelector("#lotOccupancy--occupancyEndDateString").bulmaCalendar.datePicker;e.min=document.querySelector("#lotOccupancy--occupancyStartDateString").value,e.refresh()}),o.initializeUnlockFieldButtons(d),Object.defineProperty(exports,"__esModule",{value:!0});let f=exports.lotOccupancyOccupants;function O(e){const t=Number.parseInt(e.currentTarget.closest("tr").dataset.lotOccupantIndex,10),c=f.find(e=>e.lotOccupantIndex===t);let n,a;function l(e){e.preventDefault(),cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyOccupant",n,e=>{var t;const c=e;c.success?(f=c.lotOccupancyOccupants,a(),h()):bulmaJS.alert({title:"Error Updating "+o.escapedAliases.Occupant,message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-editOccupant",{onshow(e){var n;o.populateAliases(e),e.querySelector("#lotOccupancyOccupantEdit--lotOccupancyId").value=s,e.querySelector("#lotOccupancyOccupantEdit--lotOccupantIndex").value=t.toString();const a=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),a.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,a.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 a=null!==(t=c.selectedOptions[0].dataset.fontAwesomeIconClass)&&void 0!==t?t:"user";e.querySelector("#lotOccupancyOccupantEdit--fontAwesomeIconClass").innerHTML=``;let o=null!==(n=c.selectedOptions[0].dataset.occupantCommentTitle)&&void 0!==n?n:"";""===o&&(o="Comment"),e.querySelector("#lotOccupancyOccupantEdit--occupantCommentTitle").textContent=o}),(n=e.querySelector("form")).addEventListener("submit",l),a=t},onremoved(){bulmaJS.toggleHtmlClipped()}})}function g(e){const t=e.currentTarget.closest("tr").dataset.lotOccupantIndex;bulmaJS.confirm({title:`Remove ${o.escapedAliases.Occupant}?`,message:`Are you sure you want to remove this ${o.escapedAliases.occupant}?`,okButton:{text:"Yes, Remove "+o.escapedAliases.Occupant,callbackFunction:function(){cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyOccupant",{lotOccupancyId:s,lotOccupantIndex:t},e=>{var t;const c=e;c.success?(f=c.lotOccupancyOccupants,h()):bulmaJS.alert({title:"Error Removing "+o.escapedAliases.Occupant,message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}},contextualColorName:"warning"})}function h(){var e,t,c,n,a,s,l,r,i,u,d;const p=document.querySelector("#container--lotOccupancyOccupants");if(cityssm.clearElement(p),0===f.length)return void(p.innerHTML=`
\n

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

\n
`);const m=document.createElement("table");m.className="table is-fullwidth is-striped is-hoverable",m.innerHTML=`\n ${o.escapedAliases.Occupant}\n Address\n Other Contact\n Comment\n Options\n \n `;for(const o of f){const p=document.createElement("tr");p.dataset.lotOccupantIndex=o.lotOccupantIndex.toString(),p.innerHTML=""+cityssm.escapeHTML(""===(null!==(e=o.occupantName)&&void 0!==e?e:"")&&""===(null!==(t=o.occupantFamilyName)&&void 0!==t?t:"")?"(No Name)":o.occupantName+" "+o.occupantFamilyName)+'
'+cityssm.escapeHTML(o.lotOccupantType)+""+(""===(null!==(c=o.occupantAddress1)&&void 0!==c?c:"")?"":cityssm.escapeHTML(o.occupantAddress1)+"
")+(""===(null!==(n=o.occupantAddress2)&&void 0!==n?n:"")?"":cityssm.escapeHTML(o.occupantAddress2)+"
")+(""===(null!==(a=o.occupantCity)&&void 0!==a?a:"")?"":cityssm.escapeHTML(o.occupantCity)+", ")+cityssm.escapeHTML(null!==(s=o.occupantProvince)&&void 0!==s?s:"")+"
"+cityssm.escapeHTML(null!==(l=o.occupantPostalCode)&&void 0!==l?l:"")+""+(""===(null!==(r=o.occupantPhoneNumber)&&void 0!==r?r:"")?"":cityssm.escapeHTML(o.occupantPhoneNumber)+"
")+(""===(null!==(i=o.occupantEmailAddress)&&void 0!==i?i:"")?"":cityssm.escapeHTML(o.occupantEmailAddress))+''+cityssm.escapeHTML(null!==(d=o.occupantComment)&&void 0!==d?d:"")+'
',p.querySelector(".button--edit").addEventListener("click",O),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===(S=document.querySelector("#button--addOccupant"))||void 0===S||S.addEventListener("click",()=>{let e,t,c,n;function a(t){cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doAddLotOccupancyOccupant",t,t=>{var c;const n=t;n.success?(f=n.lotOccupancyOccupants,e(),h()):bulmaJS.alert({title:`Error Adding ${o.escapedAliases.Occupant}`,message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}function l(e){e.preventDefault(),a(t)}let r=[];function i(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 ${o.escapedAliases.Occupant} Type Selected`,message:`Select a type to apply to the newly added ${o.escapedAliases.occupant}.`,contextualColorName:"warning"}):(c.lotOccupantTypeId=Number.parseInt(n,10),c.lotOccupancyId=Number.parseInt(s,10),a(c))}function u(e){e.preventDefault(),""!==c.querySelector("#lotOccupancyOccupantCopy--searchFilter").value?(n.innerHTML=o.getLoadingParagraphHTML("Searching..."),cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doSearchPastOccupants",c,e=>{var t,c,a,o,s,l,u,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!==(a=n.occupantAddress1)&&void 0!==a?a:"")+"
"+(""===(null!==(o=n.occupantAddress2)&&void 0!==o?o:"")?"":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!==(u=n.occupantPostalCode)&&void 0!==u?u:"")+'
'+(""===(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",i),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){o.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(a,o){bulmaJS.toggleHtmlClipped(),bulmaJS.init(a);const s=a.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";a.querySelector("#lotOccupancyOccupantAdd--fontAwesomeIconClass").innerHTML=``;let n=null!==(t=s.selectedOptions[0].dataset.occupantCommentTitle)&&void 0!==t?t:"";""===n&&(n="Comment"),a.querySelector("#lotOccupancyOccupantAdd--occupantCommentTitle").textContent=n}),(t=a.querySelector("#form--lotOccupancyOccupantAdd")).addEventListener("submit",l),n=a.querySelector("#lotOccupancyOccupantCopy--searchResults"),(c=a.querySelector("#form--lotOccupancyOccupantCopy")).addEventListener("submit",e=>{e.preventDefault()}),a.querySelector("#lotOccupancyOccupantCopy--searchFilter").addEventListener("change",u),e=o},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#button--addOccupant").focus()}})}),!l){var S;Object.defineProperty(exports,"__esModule",{value:!0});let e=exports.lotOccupancyComments;function b(t){const c=Number.parseInt(t.currentTarget.closest("tr").dataset.lotOccupancyCommentId,10),n=e.find(e=>e.lotOccupancyCommentId===c);let a,l;function r(t){t.preventDefault(),cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyComment",a,t=>{var c;t.success?(e=t.lotOccupancyComments,l(),T()):bulmaJS.alert({title:"Error Updating Comment",message:null!==(c=t.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-editComment",{onshow(e){o.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 a=cityssm.dateToString(new Date);t.max=n.lotOccupancyCommentDateString<=a?a:n.lotOccupancyCommentDateString,e.querySelector("#lotOccupancyCommentEdit--lotOccupancyCommentTimeString").value=n.lotOccupancyCommentTimeString},onshown(e,t){bulmaJS.toggleHtmlClipped(),o.initializeDatePickers(e),e.querySelector("#lotOccupancyCommentEdit--lotOccupancyComment").focus(),(a=e.querySelector("form")).addEventListener("submit",r),l=t},onremoved(){bulmaJS.toggleHtmlClipped()}})}function C(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(o.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyComment",{lotOccupancyId:s,lotOccupancyCommentId:c},t=>{var c;t.success?(e=t.lotOccupancyComments,T()):bulmaJS.alert({title:"Error Removing Comment",message:null!==(c=t.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}},contextualColorName:"warning"})}function T(){var t,c,n;const a=document.querySelector("#container--lotOccupancyComments");if(0===e.length)return void(a.innerHTML='

There are no comments associated with this record.

');const o=document.createElement("table");o.className="table is-fullwidth is-striped is-hoverable",o.innerHTML='CommentorComment DateCommentOptions';for(const a of e){const e=document.createElement("tr");e.dataset.lotOccupancyCommentId=a.lotOccupancyCommentId.toString(),e.innerHTML=""+cityssm.escapeHTML(null!==(t=a.recordCreate_userName)&&void 0!==t?t:"")+""+(null!==(c=a.lotOccupancyCommentDateString)&&void 0!==c?c:"")+(0===a.lotOccupancyCommentTime?"":" "+a.lotOccupancyCommentTimeString)+""+cityssm.escapeHTML(null!==(n=a.lotOccupancyComment)&&void 0!==n?n:"")+'
',e.querySelector(".button--edit").addEventListener("click",b),e.querySelector(".button--delete").addEventListener("click",C),o.querySelector("tbody").append(e)}a.innerHTML="",a.append(o)}delete exports.lotOccupancyComments,null===(S=document.querySelector("#button--addComment"))||void 0===S||S.addEventListener("click",()=>{let t,c;function n(n){n.preventDefault(),cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doAddLotOccupancyComment",t,t=>{var n;t.success?(e=t.lotOccupancyComments,c(),T()):bulmaJS.alert({title:"Error Adding Comment",message:null!==(n=t.errorMessage)&&void 0!==n?n:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-addComment",{onshow(e){o.populateAliases(e),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyId").value=s},onshown(e,a){bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyComment").focus(),(t=e.querySelector("form")).addEventListener("submit",n),c=a},onremoved:()=>{bulmaJS.toggleHtmlClipped(),document.querySelector("#button--addComment").focus()}})}),T(),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=Number.parseInt(e.currentTarget.closest("tr").dataset.feeId,10),n=t.find(e=>e.feeId===c);if(void 0===n)return void bulmaJS.alert({title:"Fee Not Found",message:"Please refresh the page",contextualColorName:"danger"});let a;function l(e){e.preventDefault(),cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyFeeQuantity",e.currentTarget,e=>{const c=e;c.success?(t=c.lotOccupancyFees,N(),a()):bulmaJS.alert({title:"Error Updating Quantity",message:"Please try again.",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-editFeeQuantity",{onshow(e){e.querySelector("#lotOccupancyFeeQuantity--lotOccupancyId").value=s,e.querySelector("#lotOccupancyFeeQuantity--feeId").value=n.feeId.toString(),e.querySelector("#lotOccupancyFeeQuantity--quantity").valueAsNumber=n.quantity,e.querySelector("#lotOccupancyFeeQuantity--quantityUnit").textContent=n.quantityUnit},onshown(e,t){var c;a=t,e.querySelector("#lotOccupancyFeeQuantity--quantity").focus(),null===(c=e.querySelector("form"))||void 0===c||c.addEventListener("submit",l)}})}function q(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(o.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyFee",{lotOccupancyId:s,feeId:c},e=>{var c;const n=e;n.success?(t=n.lotOccupancyFees,N()):bulmaJS.alert({title:"Error Deleting Fee",message:null!==(c=n.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}}})}function N(){var e,n,a,o,s,l,r;if(0===t.length)return c.innerHTML='
\n

There are no fees associated with this record.

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

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

';let p=!1;for(const t of a.fees){if(null!==c.querySelector(`.container--lotOccupancyFee[data-fee-id='${t.feeId}'][data-include-quantity='0']`))continue;let l=!0;const m=((null!==(n=a.feeCategory)&&void 0!==n?n:"")+" "+(null!==(o=t.feeName)&&void 0!==o?o:"")+" "+(null!==(s=t.feeDescription)&&void 0!==s?s:"")).toLowerCase();for(const e of d)if(!m.includes(e)){l=!1;break}if(!l)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=a.feeCategoryId.toString(),y.href="#",y.innerHTML=""+cityssm.escapeHTML(null!==(r=t.feeName)&&void 0!==r?r:"")+"
"+cityssm.escapeHTML(null!==(u=t.feeDescription)&&void 0!==u?u:"").replace(/\n/g,"
")+"
",y.addEventListener("click",i),e.querySelector(".panel").append(y)}p&&l.append(e)}}cityssm.openHtmlModal("lotOccupancy-addFee",{onshow(t){a=t.querySelector("#feeSelect--feeName"),l=t.querySelector("#resultsContainer--feeSelect"),cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doGetFees",{lotOccupancyId:s},t=>{e=t.feeCategories,a.disabled=!1,a.addEventListener("keyup",u),a.focus(),u()})},onshown(){bulmaJS.toggleHtmlClipped()},onhidden(){N()},onremoved(){bulmaJS.toggleHtmlClipped(),n.focus()}})});let a=exports.lotOccupancyTransactions;delete exports.lotOccupancyTransactions;const l=document.querySelector("#container--lotOccupancyTransactions");function E(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(o.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyTransaction",{lotOccupancyId:s,transactionIndex:t},e=>{var t;const c=e;c.success?(a=c.lotOccupancyTransactions,I()):bulmaJS.alert({title:"Error Deleting Transaction",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}function I(){var e,c,n;if(0===a.length)return void(l.innerHTML='

There are no transactions associated with this record.

');l.innerHTML=`\n \n \n \n \n \n \n \n \n \n \n \n \n
Date${o.escapedAliases.ExternalReceiptNumber}AmountOptions
Transaction Total
`;let s=0;for(const t of a){s+=t.transactionAmount;const a=document.createElement("tr");a.className="container--lotOccupancyTransaction",a.dataset.transactionIndex=t.transactionIndex.toString();let r="";""!==t.externalReceiptNumber&&(r=cityssm.escapeHTML(null!==(e=t.externalReceiptNumber)&&void 0!==e?e:""),o.dynamicsGPIntegrationIsEnabled&&(void 0===t.dynamicsGPDocument?r+=' \n \n ':t.dynamicsGPDocument.documentTotal.toFixed(2)===t.transactionAmount.toFixed(2)?r+=' \n \n ':r+=` \n \n `),r+="
"),a.innerHTML=""+(null!==(c=t.transactionDateString)&&void 0!==c?c:"")+""+r+""+cityssm.escapeHTML(null!==(n=t.transactionNote)&&void 0!==n?n:"")+'$'+t.transactionAmount.toFixed(2)+'',a.querySelector("button").addEventListener("click",E),l.querySelector("tbody").append(a)}l.querySelector("#lotOccupancyTransactions--grandTotal").textContent="$"+s.toFixed(2);const r=x();r.toFixed(2)!==s.toFixed(2)&&l.insertAdjacentHTML("afterbegin",'
Outstanding Balance
$'+(r-s).toFixed(2)+"
")}const r=document.querySelector("#button--addTransaction");r.addEventListener("click",()=>{let e,t,c;function n(e){e.preventDefault(),cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doAddLotOccupancyTransaction",e.currentTarget,e=>{var t;const n=e;n.success?(a=n.lotOccupancyTransactions,c(),I()):bulmaJS.confirm({title:"Error Adding Transaction",message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}function l(){const c=t.value,n=t.closest(".control").querySelector(".icon"),a=t.closest(".field").querySelector(".help");if(""===c)return a.innerHTML=" ",void(n.innerHTML='');cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doGetDynamicsGPDocument",{externalReceiptNumber:c},t=>{const c=t;c.success&&void 0!==c.dynamicsGPDocument?e.valueAsNumber===c.dynamicsGPDocument.documentTotal?(a.textContent="Matching Document Found",n.innerHTML=''):(a.textContent="Matching Document: $"+c.dynamicsGPDocument.documentTotal.toFixed(2),n.innerHTML=''):(a.textContent="No Matching Document Found",n.innerHTML='')})}cityssm.openHtmlModal("lotOccupancy-addTransaction",{onshow(c){o.populateAliases(c),c.querySelector("#lotOccupancyTransactionAdd--lotOccupancyId").value=s.toString();const n=x(),r=function(){let e=0;for(const t of a)e+=t.transactionAmount;return e}();if((e=c.querySelector("#lotOccupancyTransactionAdd--transactionAmount")).min=(-1*r).toFixed(2),e.max=Math.max(n-r,0).toFixed(2),e.value=Math.max(n-r,0).toFixed(2),o.dynamicsGPIntegrationIsEnabled){const n=(t=c.querySelector("#lotOccupancyTransactionAdd--externalReceiptNumber")).closest(".control");n.classList.add("has-icons-right"),n.insertAdjacentHTML("beforeend",''),n.insertAdjacentHTML("afterend",'

'),t.addEventListener("change",l),e.addEventListener("change",l),l()}},onshown(t,a){bulmaJS.toggleHtmlClipped(),e.focus(),c=a,t.querySelector("form").addEventListener("submit",n)},onremoved(){bulmaJS.toggleHtmlClipped(),r.focus()}})}),N()}})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e,t,n,c,a;const o=exports.los,s=document.querySelector("#lotOccupancy--lotOccupancyId").value,l=""===s;let r=l;function i(){var e;o.setUnsavedChanges(),null===(e=document.querySelector("button[type='submit'][form='form--lotOccupancy']"))||void 0===e||e.classList.remove("is-light")}function u(){var e;o.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(o.urlPrefix+"/lotOccupancies/"+(l?"doCreateLotOccupancy":"doUpdateLotOccupancy"),d,e=>{var t;const n=e;n.success?(u(),l||r?window.location.href=o.getLotOccupancyURL(n.lotOccupancyId,!0,!0):bulmaJS.alert({message:`${o.escapedAliases.Occupancy} Updated Successfully`,contextualColorName:"success"})):bulmaJS.alert({title:"Error Saving "+o.escapedAliases.Occupancy,message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})});const p=d.querySelectorAll("input, select");for(const e of p)e.addEventListener("change",i);function m(){cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doCopyLotOccupancy",{lotOccupancyId:s},e=>{var t;const n=e;n.success?(u(),window.location.href=o.getLotOccupancyURL(n.lotOccupancyId,!0)):bulmaJS.alert({title:"Error Copying Record",message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}null===(S=document.querySelector("#button--copyLotOccupancy"))||void 0===S||S.addEventListener("click",e=>{e.preventDefault(),o.hasUnsavedChanges()?bulmaJS.alert({title:"Unsaved Changes",message:"Please save all unsaved changes before continuing.",contextualColorName:"warning"}):bulmaJS.confirm({title:`Copy ${o.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 ${o.escapedAliases.Occupancy} Record`,message:"Are you sure you want to delete this record?",contextualColorName:"warning",okButton:{text:"Yes, Delete",callbackFunction:function(){cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doDeleteLotOccupancy",{lotOccupancyId:s},e=>{var t;const n=e;n.success?(u(),window.location.href=o.getLotOccupancyURL()):bulmaJS.alert({title:"Error Deleting Record",message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}),null===(t=document.querySelector("#button--createWorkOrder"))||void 0===t||t.addEventListener("click",e=>{let t;function n(e){e.preventDefault(),cityssm.postJSON(o.urlPrefix+"/workOrders/doCreateWorkOrder",e.currentTarget,e=>{const n=e;n.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=o.getWorkOrderURL(n.workOrderId,!0)}}})):bulmaJS.alert({title:"Error Creating Work Order",message:n.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 n=e.querySelector("#workOrderCreate--workOrderTypeId"),c=exports.workOrderTypes;1===c.length&&(n.innerHTML="");for(const e of c){const c=document.createElement("option");c.value=e.workOrderTypeId.toString(),c.textContent=null!==(t=e.workOrderType)&&void 0!==t?t:"",n.append(c)}},onshown(e,c){var a;t=c,bulmaJS.toggleHtmlClipped(),e.querySelector("#workOrderCreate--workOrderTypeId").focus(),null===(a=e.querySelector("form"))||void 0===a||a.addEventListener("submit",n)},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(o.urlPrefix+"/lotOccupancies/doGetOccupancyTypeFields",{occupancyTypeId:y.value},t=>{var n,c;const a=t;if(0===a.occupancyTypeFields.length)return void(e.innerHTML=`
\n

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

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

Select the ${o.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 ${o.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 n,c,a,s;function l(e,t){document.querySelector("#lotOccupancy--lotId").value=e.toString(),document.querySelector("#lotOccupancy--lotName").value=t,i(),n()}function r(e){e.preventDefault();const t=e.currentTarget;l(t.dataset.lotId,t.dataset.lotName)}function u(){s.innerHTML=o.getLoadingParagraphHTML("Searching..."),cityssm.postJSON(o.urlPrefix+"/lots/doSearchLots",a,e=>{var t,n;const c=e;if(0===c.count)return void(s.innerHTML='
\n

No results.

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

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

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

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

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

There are no comments associated with this record.

');const o=document.createElement("table");o.className="table is-fullwidth is-striped is-hoverable",o.innerHTML='CommentorComment DateCommentOptions';for(const a of e){const e=document.createElement("tr");e.dataset.lotOccupancyCommentId=a.lotOccupancyCommentId.toString(),e.innerHTML=""+cityssm.escapeHTML(null!==(t=a.recordCreate_userName)&&void 0!==t?t:"")+""+(null!==(n=a.lotOccupancyCommentDateString)&&void 0!==n?n:"")+(0===a.lotOccupancyCommentTime?"":" "+a.lotOccupancyCommentTimeString)+""+cityssm.escapeHTML(null!==(c=a.lotOccupancyComment)&&void 0!==c?c:"")+'
',e.querySelector(".button--edit").addEventListener("click",b),e.querySelector(".button--delete").addEventListener("click",C),o.querySelector("tbody").append(e)}a.innerHTML="",a.append(o)}delete exports.lotOccupancyComments,null===(S=document.querySelector("#button--addComment"))||void 0===S||S.addEventListener("click",()=>{let t,n;function c(c){c.preventDefault(),cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doAddLotOccupancyComment",t,t=>{var c;t.success?(e=t.lotOccupancyComments,n(),T()):bulmaJS.alert({title:"Error Adding Comment",message:null!==(c=t.errorMessage)&&void 0!==c?c:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-addComment",{onshow(e){o.populateAliases(e),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyId").value=s},onshown(e,a){bulmaJS.toggleHtmlClipped(),e.querySelector("#lotOccupancyCommentAdd--lotOccupancyComment").focus(),(t=e.querySelector("form")).addEventListener("submit",c),n=a},onremoved:()=>{bulmaJS.toggleHtmlClipped(),document.querySelector("#button--addComment").focus()}})}),T(),Object.defineProperty(exports,"__esModule",{value:!0});let t=exports.lotOccupancyFees;delete exports.lotOccupancyFees;const n=document.querySelector("#container--lotOccupancyFees");function x(){let e=0;for(const n of t)e+=(n.feeAmount+n.taxAmount)*n.quantity;return e}function L(e){const n=Number.parseInt(e.currentTarget.closest("tr").dataset.feeId,10),c=t.find(e=>e.feeId===n);let a;function l(e){e.preventDefault(),cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyFeeQuantity",e.currentTarget,e=>{const n=e;n.success?(t=n.lotOccupancyFees,N(),a()):bulmaJS.alert({title:"Error Updating Quantity",message:"Please try again.",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-editFeeQuantity",{onshow(e){e.querySelector("#lotOccupancyFeeQuantity--lotOccupancyId").value=s,e.querySelector("#lotOccupancyFeeQuantity--feeId").value=c.feeId.toString(),e.querySelector("#lotOccupancyFeeQuantity--quantity").valueAsNumber=c.quantity,e.querySelector("#lotOccupancyFeeQuantity--quantityUnit").textContent=c.quantityUnit},onshown(e,t){var n;bulmaJS.toggleHtmlClipped(),a=t,e.querySelector("#lotOccupancyFeeQuantity--quantity").focus(),null===(n=e.querySelector("form"))||void 0===n||n.addEventListener("submit",l)},onremoved(){bulmaJS.toggleHtmlClipped()}})}function q(e){const n=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(o.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyFee",{lotOccupancyId:s,feeId:n},e=>{var n;const c=e;c.success?(t=c.lotOccupancyFees,N()):bulmaJS.alert({title:"Error Deleting Fee",message:null!==(n=c.errorMessage)&&void 0!==n?n:"",contextualColorName:"danger"})})}}})}function N(){var e,c,a,o,s,l,r;if(0===t.length)return n.innerHTML='
\n

There are no fees associated with this record.

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

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

';let p=!1;for(const t of a.fees){if(null!==n.querySelector(`.container--lotOccupancyFee[data-fee-id='${t.feeId}'][data-include-quantity='0']`))continue;let l=!0;const m=((null!==(c=a.feeCategory)&&void 0!==c?c:"")+" "+(null!==(o=t.feeName)&&void 0!==o?o:"")+" "+(null!==(s=t.feeDescription)&&void 0!==s?s:"")).toLowerCase();for(const e of d)if(!m.includes(e)){l=!1;break}if(!l)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=a.feeCategoryId.toString(),y.href="#",y.innerHTML=""+cityssm.escapeHTML(null!==(r=t.feeName)&&void 0!==r?r:"")+"
"+cityssm.escapeHTML(null!==(u=t.feeDescription)&&void 0!==u?u:"").replace(/\n/g,"
")+"
",y.addEventListener("click",i),e.querySelector(".panel").append(y)}p&&l.append(e)}}cityssm.openHtmlModal("lotOccupancy-addFee",{onshow(t){a=t.querySelector("#feeSelect--feeName"),l=t.querySelector("#resultsContainer--feeSelect"),cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doGetFees",{lotOccupancyId:s},t=>{e=t.feeCategories,a.disabled=!1,a.addEventListener("keyup",u),a.focus(),u()})},onshown(){bulmaJS.toggleHtmlClipped()},onhidden(){N()},onremoved(){bulmaJS.toggleHtmlClipped(),c.focus()}})});let a=exports.lotOccupancyTransactions;delete exports.lotOccupancyTransactions;const l=document.querySelector("#container--lotOccupancyTransactions");function E(e){const t=Number.parseInt(e.currentTarget.closest("tr").dataset.transactionIndex,10),n=a.find(e=>e.transactionIndex===t);let c;function l(e){e.preventDefault(),cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doUpdateLotOccupancyTransaction",e.currentTarget,e=>{const t=e;t.success?(a=t.lotOccupancyTransactions,M(),c()):bulmaJS.alert({title:"Error Updating Transaction",message:"Please try again.",contextualColorName:"danger"})})}cityssm.openHtmlModal("lotOccupancy-editTransaction",{onshow(e){var t,c,a,l;o.populateAliases(e),e.querySelector("#lotOccupancyTransactionEdit--lotOccupancyId").value=s,e.querySelector("#lotOccupancyTransactionEdit--transactionIndex").value=n.transactionIndex.toString(),e.querySelector("#lotOccupancyTransactionEdit--transactionAmount").value=n.transactionAmount.toFixed(2),e.querySelector("#lotOccupancyTransactionEdit--externalReceiptNumber").value=null!==(t=n.externalReceiptNumber)&&void 0!==t?t:"",e.querySelector("#lotOccupancyTransactionEdit--transactionNote").value=null!==(c=n.transactionNote)&&void 0!==c?c:"",e.querySelector("#lotOccupancyTransactionEdit--transactionDateString").value=null!==(a=n.transactionDateString)&&void 0!==a?a:"",e.querySelector("#lotOccupancyTransactionEdit--transactionTimeString").value=null!==(l=n.transactionTimeString)&&void 0!==l?l:""},onshown(e,t){var n;bulmaJS.toggleHtmlClipped(),o.initializeDatePickers(e),e.querySelector("#lotOccupancyTransactionEdit--transactionAmount").focus(),null===(n=e.querySelector("form"))||void 0===n||n.addEventListener("submit",l),c=t},onremoved(){bulmaJS.toggleHtmlClipped()}})}function I(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(o.urlPrefix+"/lotOccupancies/doDeleteLotOccupancyTransaction",{lotOccupancyId:s,transactionIndex:t},e=>{var t;const n=e;n.success?(a=n.lotOccupancyTransactions,M()):bulmaJS.alert({title:"Error Deleting Transaction",message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}function M(){var e,n,c,s,r;if(0===a.length)return void(l.innerHTML='

There are no transactions associated with this record.

');l.innerHTML=`\n \n \n \n \n \n \n \n \n \n \n \n \n
Date${o.escapedAliases.ExternalReceiptNumber}AmountOptions
Transaction Total
`;let i=0;for(const t of a){i+=t.transactionAmount;const a=document.createElement("tr");a.className="container--lotOccupancyTransaction",a.dataset.transactionIndex=t.transactionIndex.toString();let u="";""!==t.externalReceiptNumber&&(u=cityssm.escapeHTML(null!==(e=t.externalReceiptNumber)&&void 0!==e?e:""),o.dynamicsGPIntegrationIsEnabled&&(void 0===t.dynamicsGPDocument?u+=' \n \n ':t.dynamicsGPDocument.documentTotal.toFixed(2)===t.transactionAmount.toFixed(2)?u+=' \n \n ':u+=` \n \n `),u+="
"),a.innerHTML=""+(null!==(n=t.transactionDateString)&&void 0!==n?n:"")+""+u+""+cityssm.escapeHTML(null!==(c=t.transactionNote)&&void 0!==c?c:"")+'$'+t.transactionAmount.toFixed(2)+'
',null===(s=a.querySelector(".button--edit"))||void 0===s||s.addEventListener("click",E),null===(r=a.querySelector(".button--delete"))||void 0===r||r.addEventListener("click",I),l.querySelector("tbody").append(a)}l.querySelector("#lotOccupancyTransactions--grandTotal").textContent="$"+i.toFixed(2);const u=x();u.toFixed(2)!==i.toFixed(2)&&l.insertAdjacentHTML("afterbegin",'
Outstanding Balance
$'+(u-i).toFixed(2)+"
")}const r=document.querySelector("#button--addTransaction");r.addEventListener("click",()=>{let e,t,n;function c(e){e.preventDefault(),cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doAddLotOccupancyTransaction",e.currentTarget,e=>{var t;const c=e;c.success?(a=c.lotOccupancyTransactions,n(),M()):bulmaJS.confirm({title:"Error Adding Transaction",message:null!==(t=c.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}function l(){const n=t.value,c=t.closest(".control").querySelector(".icon"),a=t.closest(".field").querySelector(".help");if(""===n)return a.innerHTML=" ",void(c.innerHTML='');cityssm.postJSON(o.urlPrefix+"/lotOccupancies/doGetDynamicsGPDocument",{externalReceiptNumber:n},t=>{const n=t;n.success&&void 0!==n.dynamicsGPDocument?e.valueAsNumber===n.dynamicsGPDocument.documentTotal?(a.textContent="Matching Document Found",c.innerHTML=''):(a.textContent="Matching Document: $"+n.dynamicsGPDocument.documentTotal.toFixed(2),c.innerHTML=''):(a.textContent="No Matching Document Found",c.innerHTML='')})}cityssm.openHtmlModal("lotOccupancy-addTransaction",{onshow(n){o.populateAliases(n),n.querySelector("#lotOccupancyTransactionAdd--lotOccupancyId").value=s.toString();const c=x(),r=function(){let e=0;for(const t of a)e+=t.transactionAmount;return e}();if((e=n.querySelector("#lotOccupancyTransactionAdd--transactionAmount")).min=(-1*r).toFixed(2),e.max=Math.max(c-r,0).toFixed(2),e.value=Math.max(c-r,0).toFixed(2),o.dynamicsGPIntegrationIsEnabled){const c=(t=n.querySelector("#lotOccupancyTransactionAdd--externalReceiptNumber")).closest(".control");c.classList.add("has-icons-right"),c.insertAdjacentHTML("beforeend",''),c.insertAdjacentHTML("afterend",'

'),t.addEventListener("change",l),e.addEventListener("change",l),l()}},onshown(t,a){bulmaJS.toggleHtmlClipped(),e.focus(),n=a,t.querySelector("form").addEventListener("submit",c)},onremoved(){bulmaJS.toggleHtmlClipped(),r.focus()}})}),N()}})(); \ No newline at end of file diff --git a/routes/lotOccupancies.js b/routes/lotOccupancies.js index c50b2748..a764404a 100644 --- a/routes/lotOccupancies.js +++ b/routes/lotOccupancies.js @@ -22,6 +22,7 @@ import handler_doUpdateLotOccupancyFeeQuantity from '../handlers/lotOccupancies- import handler_doDeleteLotOccupancyFee from '../handlers/lotOccupancies-post/doDeleteLotOccupancyFee.js'; import handler_doGetDynamicsGPDocument from '../handlers/lotOccupancies-post/doGetDynamicsGPDocument.js'; import handler_doAddLotOccupancyTransaction from '../handlers/lotOccupancies-post/doAddLotOccupancyTransaction.js'; +import handler_doUpdateLotOccupancyTransaction from '../handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.js'; import handler_doDeleteLotOccupancyTransaction from '../handlers/lotOccupancies-post/doDeleteLotOccupancyTransaction.js'; import * as permissionHandlers from '../handlers/permissions.js'; import * as configFunctions from '../helpers/functions.config.js'; @@ -51,5 +52,6 @@ if (configFunctions.getProperty('settings.dynamicsGP.integrationIsEnabled')) { router.post('/doGetDynamicsGPDocument', permissionHandlers.updatePostHandler, handler_doGetDynamicsGPDocument); } router.post('/doAddLotOccupancyTransaction', permissionHandlers.updatePostHandler, handler_doAddLotOccupancyTransaction); +router.post('/doUpdateLotOccupancyTransaction', permissionHandlers.updatePostHandler, handler_doUpdateLotOccupancyTransaction); router.post('/doDeleteLotOccupancyTransaction', permissionHandlers.updatePostHandler, handler_doDeleteLotOccupancyTransaction); export default router; diff --git a/routes/lotOccupancies.ts b/routes/lotOccupancies.ts index f8872a2c..2647a379 100644 --- a/routes/lotOccupancies.ts +++ b/routes/lotOccupancies.ts @@ -30,6 +30,7 @@ import handler_doDeleteLotOccupancyFee from '../handlers/lotOccupancies-post/doD import handler_doGetDynamicsGPDocument from '../handlers/lotOccupancies-post/doGetDynamicsGPDocument.js' import handler_doAddLotOccupancyTransaction from '../handlers/lotOccupancies-post/doAddLotOccupancyTransaction.js' +import handler_doUpdateLotOccupancyTransaction from '../handlers/lotOccupancies-post/doUpdateLotOccupancyTransaction.js' import handler_doDeleteLotOccupancyTransaction from '../handlers/lotOccupancies-post/doDeleteLotOccupancyTransaction.js' import * as permissionHandlers from '../handlers/permissions.js' @@ -185,6 +186,12 @@ router.post( handler_doAddLotOccupancyTransaction as RequestHandler ) +router.post( + '/doUpdateLotOccupancyTransaction', + permissionHandlers.updatePostHandler, + handler_doUpdateLotOccupancyTransaction as RequestHandler +) + router.post( '/doDeleteLotOccupancyTransaction', permissionHandlers.updatePostHandler,