"use strict"; /* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ Object.defineProperty(exports, "__esModule", { value: true }); let lotOccupancyFees = exports.lotOccupancyFees; delete exports.lotOccupancyFees; const lotOccupancyFeesContainerElement = document.querySelector('#container--lotOccupancyFees'); const getFeeGrandTotal = () => { let feeGrandTotal = 0; for (const lotOccupancyFee of lotOccupancyFees) { feeGrandTotal += (lotOccupancyFee.feeAmount + lotOccupancyFee.taxAmount) * lotOccupancyFee.quantity; } return feeGrandTotal; }; const deleteLotOccupancyFee = (clickEvent) => { const feeId = clickEvent.currentTarget.closest('.container--lotOccupancyFee').dataset.feeId; const doDelete = () => { cityssm.postJSON(los.urlPrefix + '/lotOccupancies/doDeleteLotOccupancyFee', { lotOccupancyId, feeId }, (responseJSON) => { if (responseJSON.success) { lotOccupancyFees = responseJSON.lotOccupancyFees; renderLotOccupancyFees(); } else { bulmaJS.alert({ title: 'Error Deleting Fee', message: responseJSON.errorMessage || '', contextualColorName: 'danger' }); } }); }; bulmaJS.confirm({ title: 'Delete Fee', message: 'Are you sure you want to delete this fee?', contextualColorName: 'warning', okButton: { text: 'Yes, Delete Fee', callbackFunction: doDelete } }); }; const renderLotOccupancyFees = () => { if (lotOccupancyFees.length === 0) { lotOccupancyFeesContainerElement.innerHTML = '
' + '

There are no fees associated with this record.

' + '
'; renderLotOccupancyTransactions(); return; } lotOccupancyFeesContainerElement.innerHTML = '' + ('' + '' + '' + '' + '' + '' + '' + '' + '') + '' + ('' + '' + '' + '' + '') + '
FeeUnit Cost×QuantityequalsTotalOptions
Subtotal
Tax
Grand Total
'; let feeAmountTotal = 0; let taxAmountTotal = 0; for (const lotOccupancyFee of lotOccupancyFees) { const tableRowElement = document.createElement('tr'); tableRowElement.className = 'container--lotOccupancyFee'; tableRowElement.dataset.feeId = lotOccupancyFee.feeId.toString(); tableRowElement.dataset.includeQuantity = lotOccupancyFee.includeQuantity ? '1' : '0'; tableRowElement.innerHTML = '' + cityssm.escapeHTML(lotOccupancyFee.feeName || '') + '' + (lotOccupancyFee.quantity === 1 ? '' : '$' + lotOccupancyFee.feeAmount.toFixed(2) + '' + '×' + '' + lotOccupancyFee.quantity + '' + '=') + '$' + (lotOccupancyFee.feeAmount * lotOccupancyFee.quantity).toFixed(2) + '' + ('' + '' + ''); tableRowElement .querySelector('button') .addEventListener('click', deleteLotOccupancyFee); lotOccupancyFeesContainerElement .querySelector('tbody') .append(tableRowElement); feeAmountTotal += lotOccupancyFee.feeAmount * lotOccupancyFee.quantity; taxAmountTotal += lotOccupancyFee.taxAmount * lotOccupancyFee.quantity; } ; lotOccupancyFeesContainerElement.querySelector('#lotOccupancyFees--feeAmountTotal').textContent = '$' + feeAmountTotal.toFixed(2); lotOccupancyFeesContainerElement.querySelector('#lotOccupancyFees--taxAmountTotal').textContent = '$' + taxAmountTotal.toFixed(2); lotOccupancyFeesContainerElement.querySelector('#lotOccupancyFees--grandTotal').textContent = '$' + (feeAmountTotal + taxAmountTotal).toFixed(2); renderLotOccupancyTransactions(); }; document.querySelector('#button--addFee').addEventListener('click', () => { if (hasUnsavedChanges) { bulmaJS.alert({ message: 'Please save all unsaved changes before adding fees.', contextualColorName: 'warning' }); return; } let feeCategories; let feeFilterElement; let feeFilterResultsElement; const doAddFee = (feeId, quantity = 1) => { cityssm.postJSON(los.urlPrefix + '/lotOccupancies/doAddLotOccupancyFee', { lotOccupancyId, feeId, quantity }, (responseJSON) => { if (responseJSON.success) { lotOccupancyFees = responseJSON.lotOccupancyFees; renderLotOccupancyFees(); filterFees(); } else { bulmaJS.alert({ title: 'Error Adding Fee', message: responseJSON.errorMessage || '', contextualColorName: 'danger' }); } }); }; const doSetQuantityAndAddFee = (fee) => { let quantityElement; let quantityCloseModalFunction; const doSetQuantity = (submitEvent) => { submitEvent.preventDefault(); doAddFee(fee.feeId, quantityElement.value); quantityCloseModalFunction(); }; cityssm.openHtmlModal('lotOccupancy-setFeeQuantity', { onshow: (modalElement) => { ; modalElement.querySelector('#lotOccupancyFeeQuantity--quantityUnit').textContent = fee.quantityUnit; }, onshown: (modalElement, closeModalFunction) => { quantityCloseModalFunction = closeModalFunction; quantityElement = modalElement.querySelector('#lotOccupancyFeeQuantity--quantity'); modalElement .querySelector('form') .addEventListener('submit', doSetQuantity); } }); }; const tryAddFee = (clickEvent) => { clickEvent.preventDefault(); const feeId = Number.parseInt(clickEvent.currentTarget.dataset.feeId, 10); const feeCategoryId = Number.parseInt(clickEvent.currentTarget.closest('.container--feeCategory').dataset.feeCategoryId, 10); const feeCategory = feeCategories.find((currentFeeCategory) => { return currentFeeCategory.feeCategoryId === feeCategoryId; }); const fee = feeCategory.fees.find((currentFee) => { return currentFee.feeId === feeId; }); if (fee.includeQuantity) { doSetQuantityAndAddFee(fee); } else { doAddFee(feeId); } }; const filterFees = () => { const filterStringPieces = feeFilterElement.value .trim() .toLowerCase() .split(' '); feeFilterResultsElement.innerHTML = ''; for (const feeCategory of feeCategories) { const categoryContainerElement = document.createElement('div'); categoryContainerElement.className = 'container--feeCategory'; categoryContainerElement.dataset.feeCategoryId = feeCategory.feeCategoryId.toString(); categoryContainerElement.innerHTML = '

' + cityssm.escapeHTML(feeCategory.feeCategory || '') + '

' + '
'; let hasFees = false; for (const fee of feeCategory.fees) { if (lotOccupancyFeesContainerElement.querySelector(".container--lotOccupancyFee[data-fee-id='" + fee.feeId + "'][data-include-quantity='0']")) { continue; } let includeFee = true; for (const filterStringPiece of filterStringPieces) { if (!fee.feeName.toLowerCase().includes(filterStringPiece)) { includeFee = false; break; } } if (!includeFee) { continue; } hasFees = true; const panelBlockElement = document.createElement('a'); panelBlockElement.className = 'panel-block is-block container--fee'; panelBlockElement.dataset.feeId = fee.feeId.toString(); panelBlockElement.href = '#'; panelBlockElement.innerHTML = '' + cityssm.escapeHTML(fee.feeName || '') + '
' + '' + cityssm .escapeHTML(fee.feeDescription || '') .replace(/\n/g, '
') + '
'; panelBlockElement.addEventListener('click', tryAddFee); categoryContainerElement.querySelector('.panel').append(panelBlockElement); } if (hasFees) { feeFilterResultsElement.append(categoryContainerElement); } } }; cityssm.openHtmlModal('lotOccupancy-addFee', { onshow: (modalElement) => { feeFilterElement = modalElement.querySelector('#feeSelect--feeName'); feeFilterResultsElement = modalElement.querySelector('#resultsContainer--feeSelect'); cityssm.postJSON(los.urlPrefix + '/lotOccupancies/doGetFees', { lotOccupancyId }, (responseJSON) => { feeCategories = responseJSON.feeCategories; feeFilterElement.disabled = false; feeFilterElement.addEventListener('keyup', filterFees); feeFilterElement.focus(); filterFees(); }); }, onshown: () => { bulmaJS.toggleHtmlClipped(); }, onhidden: () => { renderLotOccupancyFees(); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); } }); }); let lotOccupancyTransactions = exports.lotOccupancyTransactions; delete exports.lotOccupancyTransactions; const lotOccupancyTransactionsContainerElement = document.querySelector('#container--lotOccupancyTransactions'); const getTransactionGrandTotal = () => { let transactionGrandTotal = 0; for (const lotOccupancyTransaction of lotOccupancyTransactions) { transactionGrandTotal += lotOccupancyTransaction.transactionAmount; } return transactionGrandTotal; }; const deleteLotOccupancyTransaction = (clickEvent) => { const transactionIndex = clickEvent.currentTarget.closest('.container--lotOccupancyTransaction').dataset.transactionIndex; const doDelete = () => { cityssm.postJSON(los.urlPrefix + '/lotOccupancies/doDeleteLotOccupancyTransaction', { lotOccupancyId, transactionIndex }, (responseJSON) => { if (responseJSON.success) { lotOccupancyTransactions = responseJSON.lotOccupancyTransactions; renderLotOccupancyTransactions(); } else { bulmaJS.alert({ title: 'Error Deleting Transaction', message: responseJSON.errorMessage || '', contextualColorName: 'danger' }); } }); }; bulmaJS.confirm({ title: 'Delete Trasnaction', message: 'Are you sure you want to delete this transaction?', contextualColorName: 'warning', okButton: { text: 'Yes, Delete Transaction', callbackFunction: doDelete } }); }; const renderLotOccupancyTransactions = () => { if (lotOccupancyTransactions.length === 0) { lotOccupancyTransactionsContainerElement.innerHTML = '
' + '

There are no transactions associated with this record.

' + '
'; return; } lotOccupancyTransactionsContainerElement.innerHTML = '' + '' + '' + '' + '' + '' + '' + '' + ('' + '' + '' + '' + '') + '
Date' + cityssm.escapeHTML(exports.aliases.externalReceiptNumber) + 'AmountOptions
Transaction Total
'; let transactionGrandTotal = 0; for (const lotOccupancyTransaction of lotOccupancyTransactions) { transactionGrandTotal += lotOccupancyTransaction.transactionAmount; const tableRowElement = document.createElement('tr'); tableRowElement.className = 'container--lotOccupancyTransaction'; tableRowElement.dataset.transactionIndex = lotOccupancyTransaction.transactionIndex.toString(); tableRowElement.innerHTML = '' + lotOccupancyTransaction.transactionDateString + '' + ('' + cityssm.escapeHTML(lotOccupancyTransaction.externalReceiptNumber || '') + '
' + '' + cityssm.escapeHTML(lotOccupancyTransaction.transactionNote || '') + '' + '') + ('$' + lotOccupancyTransaction.transactionAmount.toFixed(2) + '') + ('' + '' + ''); tableRowElement .querySelector('button') .addEventListener('click', deleteLotOccupancyTransaction); lotOccupancyTransactionsContainerElement .querySelector('tbody') .append(tableRowElement); } ; lotOccupancyTransactionsContainerElement.querySelector('#lotOccupancyTransactions--grandTotal').textContent = '$' + transactionGrandTotal.toFixed(2); const feeGrandTotal = getFeeGrandTotal(); if (feeGrandTotal > transactionGrandTotal) { lotOccupancyTransactionsContainerElement.insertAdjacentHTML('afterbegin', '
' + '
' + '
' + '
Outstanding Balance
' + '
$' + (feeGrandTotal - transactionGrandTotal).toFixed(2) + '
' + '
' + '
' + '
'); } }; document .querySelector('#button--addTransaction') .addEventListener('click', () => { let addCloseModalFunction; const doAddTransaction = (submitEvent) => { submitEvent.preventDefault(); cityssm.postJSON(los.urlPrefix + '/lotOccupancies/doAddLotOccupancyTransaction', submitEvent.currentTarget, (responseJSON) => { if (responseJSON.success) { lotOccupancyTransactions = responseJSON.lotOccupancyTransactions; addCloseModalFunction(); renderLotOccupancyTransactions(); } else { bulmaJS.confirm({ title: 'Error Adding Transaction', message: responseJSON.errorMessage || '', contextualColorName: 'danger' }); } }); }; cityssm.openHtmlModal('lotOccupancy-addTransaction', { onshow: (modalElement) => { los.populateAliases(modalElement); modalElement.querySelector('#lotOccupancyTransactionAdd--lotOccupancyId').value = lotOccupancyId.toString(); const feeGrandTotal = getFeeGrandTotal(); const transactionGrandTotal = getTransactionGrandTotal(); const transactionAmountElement = modalElement.querySelector('#lotOccupancyTransactionAdd--transactionAmount'); transactionAmountElement.min = (-1 * transactionGrandTotal).toFixed(2); transactionAmountElement.max = Math.max(feeGrandTotal - transactionGrandTotal, 0).toFixed(2); transactionAmountElement.value = Math.max(feeGrandTotal - transactionGrandTotal, 0).toFixed(2); }, onshown: (modalElement, closeModalFunction) => { bulmaJS.toggleHtmlClipped(); addCloseModalFunction = closeModalFunction; modalElement .querySelector('form') .addEventListener('submit', doAddTransaction); }, onremoved: () => { bulmaJS.toggleHtmlClipped(); } }); }); renderLotOccupancyFees();