diff --git a/database/updateFee.d.ts b/database/updateFee.d.ts index d9c54b06..7520311c 100644 --- a/database/updateFee.d.ts +++ b/database/updateFee.d.ts @@ -15,3 +15,8 @@ export interface UpdateFeeForm { isRequired: '' | '1'; } export default function updateFee(feeForm: UpdateFeeForm, user: User): Promise; +export interface UpdateFeeAmountForm { + feeId: string; + feeAmount: string; +} +export declare function updateFeeAmount(feeAmountForm: UpdateFeeAmountForm, user: User): Promise; diff --git a/database/updateFee.js b/database/updateFee.js index 95a44164..7e1a2a5a 100644 --- a/database/updateFee.js +++ b/database/updateFee.js @@ -26,3 +26,16 @@ export default async function updateFee(feeForm, user) { database.release(); return result.changes > 0; } +export async function updateFeeAmount(feeAmountForm, user) { + const database = await acquireConnection(); + const result = database + .prepare(`update Fees + set feeAmount = ?, + recordUpdate_userName = ?, + recordUpdate_timeMillis = ? + where recordDelete_timeMillis is null + and feeId = ?`) + .run(feeAmountForm.feeAmount, user.userName, Date.now(), feeAmountForm.feeId); + database.release(); + return result.changes > 0; +} diff --git a/database/updateFee.ts b/database/updateFee.ts index 56fd4517..e4b6e3a8 100644 --- a/database/updateFee.ts +++ b/database/updateFee.ts @@ -69,3 +69,35 @@ export default async function updateFee( return result.changes > 0 } + +export interface UpdateFeeAmountForm { + feeId: string + feeAmount: string +} + +export async function updateFeeAmount( + feeAmountForm: UpdateFeeAmountForm, + user: User +): Promise { + const database = await acquireConnection() + + const result = database + .prepare( + `update Fees + set feeAmount = ?, + recordUpdate_userName = ?, + recordUpdate_timeMillis = ? + where recordDelete_timeMillis is null + and feeId = ?` + ) + .run( + feeAmountForm.feeAmount, + user.userName, + Date.now(), + feeAmountForm.feeId + ) + + database.release() + + return result.changes > 0 +} diff --git a/handlers/admin-post/doUpdateFeeAmount.d.ts b/handlers/admin-post/doUpdateFeeAmount.d.ts new file mode 100644 index 00000000..536d445f --- /dev/null +++ b/handlers/admin-post/doUpdateFeeAmount.d.ts @@ -0,0 +1,3 @@ +/// +import type { Request, Response } from 'express'; +export default function handler(request: Request, response: Response): Promise; diff --git a/handlers/admin-post/doUpdateFeeAmount.js b/handlers/admin-post/doUpdateFeeAmount.js new file mode 100644 index 00000000..29d353ed --- /dev/null +++ b/handlers/admin-post/doUpdateFeeAmount.js @@ -0,0 +1,12 @@ +import getFeeCategories from '../../database/getFeeCategories.js'; +import { updateFeeAmount } from '../../database/updateFee.js'; +export default async function handler(request, response) { + const success = await updateFeeAmount(request.body, request.session.user); + const feeCategories = await getFeeCategories({}, { + includeFees: true + }); + response.json({ + success, + feeCategories + }); +} diff --git a/handlers/admin-post/doUpdateFeeAmount.ts b/handlers/admin-post/doUpdateFeeAmount.ts new file mode 100644 index 00000000..82110861 --- /dev/null +++ b/handlers/admin-post/doUpdateFeeAmount.ts @@ -0,0 +1,29 @@ +import type { Request, Response } from 'express' + +import getFeeCategories from '../../database/getFeeCategories.js' +import { + type UpdateFeeAmountForm, + updateFeeAmount +} from '../../database/updateFee.js' + +export default async function handler( + request: Request, + response: Response +): Promise { + const success = await updateFeeAmount( + request.body as UpdateFeeAmountForm, + request.session.user as User + ) + + const feeCategories = await getFeeCategories( + {}, + { + includeFees: true + } + ) + + response.json({ + success, + feeCategories + }) +} diff --git a/public-typescript/adminFees.js b/public-typescript/adminFees.js index 15c0a6b3..ede79201 100644 --- a/public-typescript/adminFees.js +++ b/public-typescript/adminFees.js @@ -8,8 +8,18 @@ Object.defineProperty(exports, "__esModule", { value: true }); const feeCategoriesContainerElement = document.querySelector('#container--feeCategories'); let feeCategories = exports.feeCategories; delete exports.feeCategories; + function getFeeCategory(feeCategoryId) { + return feeCategories.find((currentFeeCategory) => { + return currentFeeCategory.feeCategoryId === feeCategoryId; + }); + } + function getFee(feeCategory, feeId) { + return feeCategory.fees.find((currentFee) => { + return currentFee.feeId === feeId; + }); + } function renderFeeCategories() { - var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s; + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t; if (feeCategories.length === 0) { feeCategoriesContainerElement.innerHTML = `

There are no available fees.

@@ -87,7 +97,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); panelBlockElement.innerHTML = `

- ${cityssm.escapeHTML((_e = fee.feeName) !== null && _e !== void 0 ? _e : '')}
+ ${cityssm.escapeHTML((_e = fee.feeName) !== null && _e !== void 0 ? _e : '')}
${ // eslint-disable-next-line @typescript-eslint/no-unsafe-call @@ -122,8 +132,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); ${fee.feeFunction ? `${cityssm.escapeHTML(fee.feeFunction)}
Fee Function` - : `$${((_m = fee.feeAmount) !== null && _m !== void 0 ? _m : 0).toFixed(2)}
- Fee`} + : ` + $${((_m = fee.feeAmount) !== null && _m !== void 0 ? _m : 0).toFixed(2)}
+ Fee +
`}

${fee.taxPercentage @@ -144,15 +156,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
`; (_q = panelBlockElement - .querySelector('a')) === null || _q === void 0 ? void 0 : _q.addEventListener('click', openEditFee); + .querySelector('.a--editFee')) === null || _q === void 0 ? void 0 : _q.addEventListener('click', openEditFee); + (_r = panelBlockElement + .querySelector('.a--editFeeAmount')) === null || _r === void 0 ? void 0 : _r.addEventListener('click', openEditFeeAmount); panelBlockElement.querySelector('.button--moveFeeUp').addEventListener('click', moveFee); panelBlockElement.querySelector('.button--moveFeeDown').addEventListener('click', moveFee); feeCategoryContainerElement.append(panelBlockElement); } - (_r = feeCategoryContainerElement - .querySelector('.button--editFeeCategory')) === null || _r === void 0 ? void 0 : _r.addEventListener('click', openEditFeeCategory); (_s = feeCategoryContainerElement - .querySelector('.button--addFee')) === null || _s === void 0 ? void 0 : _s.addEventListener('click', openAddFee); + .querySelector('.button--editFeeCategory')) === null || _s === void 0 ? void 0 : _s.addEventListener('click', openEditFeeCategory); + (_t = feeCategoryContainerElement + .querySelector('.button--addFee')) === null || _t === void 0 ? void 0 : _t.addEventListener('click', openAddFee); feeCategoryContainerElement.querySelector('.button--moveFeeCategoryUp').addEventListener('click', moveFeeCategory); feeCategoryContainerElement.querySelector('.button--moveFeeCategoryDown').addEventListener('click', moveFeeCategory); feeCategoriesContainerElement.append(feeCategoryContainerElement); @@ -201,9 +215,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); function openEditFeeCategory(clickEvent) { var _a; const feeCategoryId = Number.parseInt((_a = clickEvent.currentTarget.closest('.container--feeCategory').dataset.feeCategoryId) !== null && _a !== void 0 ? _a : '', 10); - const feeCategory = feeCategories.find((currentFeeCategory) => { - return currentFeeCategory.feeCategoryId === feeCategoryId; - }); + const feeCategory = getFeeCategory(feeCategoryId); let editCloseModalFunction; function doUpdateFeeCategory(submitEvent) { submitEvent.preventDefault(); @@ -410,6 +422,54 @@ Object.defineProperty(exports, "__esModule", { value: true }); } }); } + function openEditFeeAmount(clickEvent) { + var _a, _b; + clickEvent.preventDefault(); + const feeContainerElement = clickEvent.currentTarget.closest('.container--fee'); + const feeId = Number.parseInt((_a = feeContainerElement.dataset.feeId) !== null && _a !== void 0 ? _a : '', 10); + const feeCategoryId = Number.parseInt((_b = feeContainerElement.closest('.container--feeCategory') + .dataset.feeCategoryId) !== null && _b !== void 0 ? _b : ''); + const feeCategory = getFeeCategory(feeCategoryId); + const fee = getFee(feeCategory, feeId); + let editCloseModalFunction; + function doUpdateFeeAmount(submitEvent) { + submitEvent.preventDefault(); + cityssm.postJSON(`${los.urlPrefix}/admin/doUpdateFeeAmount`, submitEvent.currentTarget, (rawResponseJSON) => { + var _a; + const responseJSON = rawResponseJSON; + if (responseJSON.success) { + feeCategories = responseJSON.feeCategories; + editCloseModalFunction(); + renderFeeCategories(); + } + else { + bulmaJS.alert({ + title: 'Error Updating Fee Amount', + message: (_a = responseJSON.errorMessage) !== null && _a !== void 0 ? _a : '', + contextualColorName: 'danger' + }); + } + }); + } + cityssm.openHtmlModal('adminFees-editFeeAmount', { + onshow(modalElement) { + var _a, _b, _c; + ; + modalElement.querySelector('#feeAmountEdit--feeId').value = fee.feeId.toString(); + modalElement.querySelector('#feeAmountEdit--feeCategory').textContent = feeCategory.feeCategory; + modalElement.querySelector('#feeAmountEdit--feeName').textContent = (_a = fee.feeName) !== null && _a !== void 0 ? _a : ''; + modalElement.querySelector('#feeAmountEdit--feeAmount').value = (_c = (_b = fee.feeAmount) === null || _b === void 0 ? void 0 : _b.toFixed(2)) !== null && _c !== void 0 ? _c : '0'; + }, + onshown(modalElement, closeModalFunction) { + var _a; + ; + modalElement.querySelector('#feeAmountEdit--feeAmount').select(); + editCloseModalFunction = closeModalFunction; + (_a = modalElement + .querySelector('form')) === null || _a === void 0 ? void 0 : _a.addEventListener('submit', doUpdateFeeAmount); + } + }); + } function openEditFee(clickEvent) { var _a, _b; clickEvent.preventDefault(); @@ -417,12 +477,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); const feeId = Number.parseInt((_a = feeContainerElement.dataset.feeId) !== null && _a !== void 0 ? _a : '', 10); const feeCategoryId = Number.parseInt((_b = feeContainerElement.closest('.container--feeCategory') .dataset.feeCategoryId) !== null && _b !== void 0 ? _b : ''); - const feeCategory = feeCategories.find((currentFeeCategory) => { - return currentFeeCategory.feeCategoryId === feeCategoryId; - }); - const fee = feeCategory.fees.find((currentFee) => { - return currentFee.feeId === feeId; - }); + const feeCategory = getFeeCategory(feeCategoryId); + const fee = getFee(feeCategory, feeId); let editCloseModalFunction; let editModalElement; function doUpdateFee(submitEvent) { diff --git a/public-typescript/adminFees.ts b/public-typescript/adminFees.ts index 273a78b1..0ce7d320 100644 --- a/public-typescript/adminFees.ts +++ b/public-typescript/adminFees.ts @@ -36,6 +36,18 @@ declare const exports: Record errorMessage: string } + function getFeeCategory(feeCategoryId: number): FeeCategory { + return feeCategories.find((currentFeeCategory) => { + return currentFeeCategory.feeCategoryId === feeCategoryId + }) as FeeCategory + } + + function getFee(feeCategory: FeeCategory, feeId: number): Fee { + return feeCategory.fees.find((currentFee) => { + return currentFee.feeId === feeId + }) as Fee + } + function renderFeeCategories(): void { if (feeCategories.length === 0) { feeCategoriesContainerElement.innerHTML = `
@@ -140,7 +152,7 @@ declare const exports: Record panelBlockElement.innerHTML = `

- ${cityssm.escapeHTML(fee.feeName ?? '')}
+ ${cityssm.escapeHTML(fee.feeName ?? '')}
${ // eslint-disable-next-line @typescript-eslint/no-unsafe-call @@ -185,8 +197,10 @@ declare const exports: Record fee.feeFunction ? `${cityssm.escapeHTML(fee.feeFunction)}
Fee Function` - : `$${(fee.feeAmount ?? 0).toFixed(2)}
- Fee` + : ` + $${(fee.feeAmount ?? 0).toFixed(2)}
+ Fee +
` }

@@ -216,8 +230,12 @@ declare const exports: Record
` panelBlockElement - .querySelector('a') + .querySelector('.a--editFee') ?.addEventListener('click', openEditFee) + + panelBlockElement + .querySelector('.a--editFeeAmount') + ?.addEventListener('click', openEditFeeAmount) ;( panelBlockElement.querySelector( '.button--moveFeeUp' @@ -322,9 +340,7 @@ declare const exports: Record 10 ) - const feeCategory = feeCategories.find((currentFeeCategory) => { - return currentFeeCategory.feeCategoryId === feeCategoryId - }) as FeeCategory + const feeCategory = getFeeCategory(feeCategoryId) let editCloseModalFunction: () => void @@ -639,6 +655,85 @@ declare const exports: Record }) } + function openEditFeeAmount(clickEvent: Event): void { + clickEvent.preventDefault() + + const feeContainerElement = ( + clickEvent.currentTarget as HTMLElement + ).closest('.container--fee') as HTMLElement + + const feeId = Number.parseInt(feeContainerElement.dataset.feeId ?? '', 10) + const feeCategoryId = Number.parseInt( + (feeContainerElement.closest('.container--feeCategory') as HTMLElement) + .dataset.feeCategoryId ?? '' + ) + + const feeCategory = getFeeCategory(feeCategoryId) + const fee = getFee(feeCategory, feeId) + + let editCloseModalFunction: () => void + + function doUpdateFeeAmount(submitEvent: SubmitEvent): void { + submitEvent.preventDefault() + + cityssm.postJSON( + `${los.urlPrefix}/admin/doUpdateFeeAmount`, + submitEvent.currentTarget, + (rawResponseJSON) => { + const responseJSON = rawResponseJSON as ResponseJSON + + if (responseJSON.success) { + feeCategories = responseJSON.feeCategories + editCloseModalFunction() + renderFeeCategories() + } else { + bulmaJS.alert({ + title: 'Error Updating Fee Amount', + message: responseJSON.errorMessage ?? '', + contextualColorName: 'danger' + }) + } + } + ) + } + + cityssm.openHtmlModal('adminFees-editFeeAmount', { + onshow(modalElement) { + ;( + modalElement.querySelector( + '#feeAmountEdit--feeId' + ) as HTMLInputElement + ).value = fee.feeId.toString() + ;( + modalElement.querySelector( + '#feeAmountEdit--feeCategory' + ) as HTMLElement + ).textContent = feeCategory.feeCategory + ;( + modalElement.querySelector('#feeAmountEdit--feeName') as HTMLElement + ).textContent = fee.feeName ?? '' + ;( + modalElement.querySelector( + '#feeAmountEdit--feeAmount' + ) as HTMLInputElement + ).value = fee.feeAmount?.toFixed(2) ?? '0' + }, + onshown(modalElement, closeModalFunction) { + ;( + modalElement.querySelector( + '#feeAmountEdit--feeAmount' + ) as HTMLInputElement + ).select() + + editCloseModalFunction = closeModalFunction + + modalElement + .querySelector('form') + ?.addEventListener('submit', doUpdateFeeAmount) + } + }) + } + function openEditFee(clickEvent: Event): void { clickEvent.preventDefault() @@ -652,13 +747,9 @@ declare const exports: Record .dataset.feeCategoryId ?? '' ) - const feeCategory = feeCategories.find((currentFeeCategory) => { - return currentFeeCategory.feeCategoryId === feeCategoryId - }) as FeeCategory + const feeCategory = getFeeCategory(feeCategoryId) - const fee = feeCategory.fees.find((currentFee) => { - return currentFee.feeId === feeId - }) as Fee + const fee = getFee(feeCategory, feeId) let editCloseModalFunction: () => void let editModalElement: HTMLElement diff --git a/public/html/adminFees-editFeeAmount.html b/public/html/adminFees-editFeeAmount.html new file mode 100644 index 00000000..874df73c --- /dev/null +++ b/public/html/adminFees-editFeeAmount.html @@ -0,0 +1,59 @@ + diff --git a/public/javascripts/adminFees.min.js b/public/javascripts/adminFees.min.js index 79c79367..ac7f4f33 100644 --- a/public/javascripts/adminFees.min.js +++ b/public/javascripts/adminFees.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e;const t=exports.los,o=document.querySelector("#container--feeCategories");let n=exports.feeCategories;function s(){var e,s,u,y,f,p,v,m,g,C,S,b,F,q,E,x,T;if(0!==n.length){o.innerHTML="";for(const L of n){const n=document.createElement("section");n.className="panel container--feeCategory",n.dataset.feeCategoryId=L.feeCategoryId.toString(),n.innerHTML=`
\n
\n
\n

${cityssm.escapeHTML(null!==(e=L.feeCategory)&&void 0!==e?e:"")}

\n ${L.isGroupedFee?'Grouped Fee':""}\n
\n
\n
\n ${0===L.fees.length?'
\n \n
':""}\n
\n \n
\n
\n \n
\n
\n ${t.getMoveUpDownButtonFieldHTML("button--moveFeeCategoryUp","button--moveFeeCategoryDown")}\n
\n
\n
\n
`,0===L.fees.length&&(n.insertAdjacentHTML("beforeend",`
\n
\n

\n There are no fees in the\n "${cityssm.escapeHTML(null!==(s=L.feeCategory)&&void 0!==s?s:"")}"\n category.\n

\n
\n
`),null===(u=n.querySelector(".button--deleteFeeCategory"))||void 0===u||u.addEventListener("click",l));for(const e of L.fees){const o=document.createElement("div");o.className="panel-block is-block container--fee",o.dataset.feeId=e.feeId.toString();const s=null!==(y=e.isRequired)&&void 0!==y&&y||void 0!==e.occupancyTypeId||void 0!==e.lotTypeId;o.innerHTML=`
\n
\n

\n ${cityssm.escapeHTML(null!==(f=e.feeName)&&void 0!==f?f:"")}
\n \n ${cityssm.escapeHTML(null!==(p=e.feeDescription)&&void 0!==p?p:"").replaceAll("\n","
")}\n
\n

\n ${s?`

\n ${null!==(v=e.isRequired)&&void 0!==v&&v?'Required':""}\n ${-1===(null!==(m=e.occupancyTypeId)&&void 0!==m?m:-1)?"":` \n \n ${cityssm.escapeHTML(null!==(g=e.occupancyType)&&void 0!==g?g:"")}\n `}\n ${-1===(null!==(C=e.lotTypeId)&&void 0!==C?C:-1)?"":` \n \n ${cityssm.escapeHTML(null!==(S=e.lotType)&&void 0!==S?S:"")}\n `}\n

`:""}\n
\n
\n
\n
\n ${e.feeFunction?`${cityssm.escapeHTML(e.feeFunction)}
\n Fee Function`:`$${(null!==(b=e.feeAmount)&&void 0!==b?b:0).toFixed(2)}
\n Fee`}\n
\n
\n ${e.taxPercentage?`${e.taxPercentage.toString()}%`:`$${(null!==(F=e.taxAmount)&&void 0!==F?F:0).toFixed(2)}`}
\n Tax\n
\n
\n ${e.includeQuantity?`${cityssm.escapeHTML(null!==(q=e.quantityUnit)&&void 0!==q?q:"")}
\n Quantity`:""}\n
\n
\n
\n
\n ${t.getMoveUpDownButtonFieldHTML("button--moveFeeUp","button--moveFeeDown")}\n
\n
`,null===(E=o.querySelector("a"))||void 0===E||E.addEventListener("click",c),o.querySelector(".button--moveFeeUp").addEventListener("click",d),o.querySelector(".button--moveFeeDown").addEventListener("click",d),n.append(o)}null===(x=n.querySelector(".button--editFeeCategory"))||void 0===x||x.addEventListener("click",a),null===(T=n.querySelector(".button--addFee"))||void 0===T||T.addEventListener("click",i),n.querySelector(".button--moveFeeCategoryUp").addEventListener("click",r),n.querySelector(".button--moveFeeCategoryDown").addEventListener("click",r),o.append(n)}}else o.innerHTML='
\n

There are no available fees.

\n
'}function a(e){var o;const a=Number.parseInt(null!==(o=e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId)&&void 0!==o?o:"",10),l=n.find(e=>e.feeCategoryId===a);let r;function i(e){e.preventDefault(),cityssm.postJSON(`${t.urlPrefix}/admin/doUpdateFeeCategory`,e.currentTarget,e=>{var t;const o=e;o.success?(n=o.feeCategories,r(),s()):bulmaJS.alert({title:"Error Updating Fee Category",message:null!==(t=o.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("adminFees-editFeeCategory",{onshow(e){e.querySelector("#feeCategoryEdit--feeCategoryId").value=l.feeCategoryId.toString(),e.querySelector("#feeCategoryEdit--feeCategory").value=l.feeCategory,l.isGroupedFee&&(e.querySelector("#feeCategoryEdit--isGroupedFee").checked=!0)},onshown(e,t){var o;bulmaJS.toggleHtmlClipped(),r=t,null===(o=e.querySelector("form"))||void 0===o||o.addEventListener("submit",i),e.querySelector("#feeCategoryEdit--feeCategory").focus()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}function l(e){var o;const a=Number.parseInt(null!==(o=e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId)&&void 0!==o?o:"",10);bulmaJS.confirm({title:"Delete Fee Category?",message:"Are you sure you want to delete this fee category?",contextualColorName:"warning",okButton:{text:"Yes, Delete the Fee Category",callbackFunction:function(){cityssm.postJSON(`${t.urlPrefix}/admin/doDeleteFeeCategory`,{feeCategoryId:a},e=>{var t;const o=e;o.success?(n=o.feeCategories,s()):bulmaJS.alert({title:"Error Updating Fee Category",message:null!==(t=o.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}function r(e){var o;const a=e.currentTarget,l=null!==(o=a.closest(".container--feeCategory").dataset.feeCategoryId)&&void 0!==o?o:"";cityssm.postJSON(`${t.urlPrefix}/admin/${"up"===a.dataset.direction?"doMoveFeeCategoryUp":"doMoveFeeCategoryDown"}`,{feeCategoryId:l,moveToEnd:e.shiftKey?"1":"0"},e=>{var t;const o=e;o.success?(n=o.feeCategories,s()):bulmaJS.alert({title:"Error Moving Fee Category",message:null!==(t=o.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}function i(e){var o;const a=Number.parseInt(null!==(o=e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId)&&void 0!==o?o:"",10);let l;function r(e){e.preventDefault(),cityssm.postJSON(`${t.urlPrefix}/admin/doAddFee`,e.currentTarget,e=>{var t;const o=e;o.success?(n=o.feeCategories,l(),s()):bulmaJS.alert({title:"Error Adding Fee",message:null!==(t=o.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("adminFees-addFee",{onshow(e){const o=e.querySelector("#feeAdd--feeCategoryId");for(const e of n){const t=document.createElement("option");t.value=e.feeCategoryId.toString(),t.textContent=e.feeCategory,e.feeCategoryId===a&&(t.selected=!0),o.append(t)}const s=e.querySelector("#feeAdd--occupancyTypeId");for(const e of exports.occupancyTypes){const t=document.createElement("option");t.value=e.occupancyTypeId.toString(),t.textContent=e.occupancyType,s.append(t)}const l=e.querySelector("#feeAdd--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,l.append(t)}e.querySelector("#feeAdd--taxPercentage").value=exports.taxPercentageDefault.toString(),t.populateAliases(e)},onshown(e,t){var o,n,s;bulmaJS.toggleHtmlClipped(),l=t,null===(o=e.querySelector("form"))||void 0===o||o.addEventListener("submit",r),e.querySelector("#feeAdd--feeName").focus(),e.querySelector("#feeAdd--feeFunction").addEventListener("change",()=>{var t,o;const n=e.querySelector("#feeAdd--feeAmount"),s=e.querySelector("#feeAdd--feeFunction");""===s.value?(null===(t=s.closest(".select"))||void 0===t||t.classList.remove("is-success"),n.classList.add("is-success"),n.disabled=!1):(null===(o=s.closest(".select"))||void 0===o||o.classList.add("is-success"),n.classList.remove("is-success"),n.disabled=!0)}),null===(n=e.querySelector("#feeAdd--taxPercentage"))||void 0===n||n.addEventListener("keyup",()=>{const t=e.querySelector("#feeAdd--taxAmount"),o=e.querySelector("#feeAdd--taxPercentage");""===o.value?(o.classList.remove("is-success"),t.classList.add("is-success"),t.disabled=!1):(o.classList.add("is-success"),t.classList.remove("is-success"),t.disabled=!0)}),null===(s=e.querySelector("#feeAdd--includeQuantity"))||void 0===s||s.addEventListener("change",()=>{e.querySelector("#feeAdd--quantityUnit").disabled=""===e.querySelector("#feeAdd--includeQuantity").value})},onremoved(){bulmaJS.toggleHtmlClipped()}})}function c(e){var o,a;e.preventDefault();const l=e.currentTarget.closest(".container--fee"),r=Number.parseInt(null!==(o=l.dataset.feeId)&&void 0!==o?o:"",10),i=Number.parseInt(null!==(a=l.closest(".container--feeCategory").dataset.feeCategoryId)&&void 0!==a?a:""),c=n.find(e=>e.feeCategoryId===i).fees.find(e=>e.feeId===r);let d,u;function y(e){e.preventDefault(),cityssm.postJSON(`${t.urlPrefix}/admin/doUpdateFee`,e.currentTarget,e=>{var t;const o=e;o.success?(n=o.feeCategories,d(),s()):bulmaJS.alert({title:"Error Updating Fee",message:null!==(t=o.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}function f(e){e.preventDefault(),bulmaJS.confirm({title:"Delete Fee?",message:"Are you sure you want to delete this fee?",contextualColorName:"warning",okButton:{text:"Yes, Delete the Fee",callbackFunction:function(){cityssm.postJSON(`${t.urlPrefix}/admin/doDeleteFee`,{feeId:r},e=>{var t;const o=e;o.success?(n=o.feeCategories,d(),s()):bulmaJS.alert({title:"Error Deleting Fee",message:null!==(t=o.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}function p(){var e,t;const o=u.querySelector("#feeEdit--feeAmount"),n=u.querySelector("#feeEdit--feeFunction");""===n.value?(null===(e=n.closest(".select"))||void 0===e||e.classList.remove("is-success"),o.classList.add("is-success"),o.disabled=!1):(null===(t=n.closest(".select"))||void 0===t||t.classList.add("is-success"),o.classList.remove("is-success"),o.disabled=!0)}function v(){const e=u.querySelector("#feeEdit--taxAmount"),t=u.querySelector("#feeEdit--taxPercentage");""===t.value?(t.classList.remove("is-success"),e.classList.add("is-success"),e.disabled=!1):(t.classList.add("is-success"),e.classList.remove("is-success"),e.disabled=!0)}function m(){const e=u.querySelector("#feeEdit--includeQuantity").value;u.querySelector("#feeEdit--quantityUnit").disabled=""===e}cityssm.openHtmlModal("adminFees-editFee",{onshow(e){var o,s,a,l,r,d,y;u=e,e.querySelector("#feeEdit--feeId").value=c.feeId.toString();const f=e.querySelector("#feeEdit--feeCategoryId");for(const e of n){const t=document.createElement("option");t.value=e.feeCategoryId.toString(),t.textContent=e.feeCategory,e.feeCategoryId===i&&(t.selected=!0),f.append(t)}e.querySelector("#feeEdit--feeName").value=null!==(o=c.feeName)&&void 0!==o?o:"",e.querySelector("#feeEdit--feeAccount").value=null!==(s=c.feeAccount)&&void 0!==s?s:"",e.querySelector("#feeEdit--feeDescription").value=null!==(a=c.feeDescription)&&void 0!==a?a:"";const g=e.querySelector("#feeEdit--occupancyTypeId");for(const e of exports.occupancyTypes){const t=document.createElement("option");t.value=e.occupancyTypeId.toString(),t.textContent=e.occupancyType,e.occupancyTypeId===c.occupancyTypeId&&(t.selected=!0),g.append(t)}const C=e.querySelector("#feeEdit--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,e.lotTypeId===c.lotTypeId&&(t.selected=!0),C.append(t)}e.querySelector("#feeEdit--feeAmount").value=c.feeAmount?c.feeAmount.toFixed(2):"",null===(l=e.querySelector("#feeEdit--feeFunction"))||void 0===l||l.addEventListener("change",p),p(),e.querySelector("#feeEdit--taxAmount").value=c.taxAmount?c.taxAmount.toFixed(2):"";const S=e.querySelector("#feeEdit--taxPercentage");S.value=c.taxPercentage?c.taxPercentage.toString():"",S.addEventListener("keyup",v),v();const b=e.querySelector("#feeEdit--includeQuantity");null!==(r=c.includeQuantity)&&void 0!==r&&r&&(b.value="1"),b.addEventListener("change",m),e.querySelector("#feeEdit--quantityUnit").value=null!==(d=c.quantityUnit)&&void 0!==d?d:"",m(),null!==(y=c.isRequired)&&void 0!==y&&y&&(e.querySelector("#feeEdit--isRequired").value="1"),t.populateAliases(e)},onshown(e,t){var o,n;bulmaJS.toggleHtmlClipped(),d=t,null===(o=e.querySelector("form"))||void 0===o||o.addEventListener("submit",y),bulmaJS.init(e),null===(n=e.querySelector(".button--deleteFee"))||void 0===n||n.addEventListener("click",f)},onremoved(){bulmaJS.toggleHtmlClipped()}})}function d(e){var o;const a=e.currentTarget,l=null!==(o=a.closest(".container--fee").dataset.feeId)&&void 0!==o?o:"";cityssm.postJSON(`${t.urlPrefix}/admin/${"up"===a.dataset.direction?"doMoveFeeUp":"doMoveFeeDown"}`,{feeId:l,moveToEnd:e.shiftKey?"1":"0"},e=>{var t;const o=e;o.success?(n=o.feeCategories,s()):bulmaJS.alert({title:"Error Moving Fee",message:null!==(t=o.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}delete exports.feeCategories,null===(e=document.querySelector("#button--addFeeCategory"))||void 0===e||e.addEventListener("click",()=>{let e;function o(o){o.preventDefault(),cityssm.postJSON(`${t.urlPrefix}/admin/doAddFeeCategory`,o.currentTarget,t=>{var o;const a=t;a.success?(n=a.feeCategories,e(),s()):bulmaJS.alert({title:"Error Creating Fee Category",message:null!==(o=a.errorMessage)&&void 0!==o?o:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("adminFees-addFeeCategory",{onshown(t,n){var s;bulmaJS.toggleHtmlClipped(),t.querySelector("#feeCategoryAdd--feeCategory").focus(),e=n,null===(s=t.querySelector("form"))||void 0===s||s.addEventListener("submit",o)},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#button--addFeeCategory").focus()}})}),s()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{var e;const t=exports.los,n=document.querySelector("#container--feeCategories");let o=exports.feeCategories;function s(e){return o.find(t=>t.feeCategoryId===e)}function a(e,t){return e.fees.find(e=>e.feeId===t)}function r(){var e,s,a,r,m,v,p,g,C,S,b,F,q,E,x,T,A,I;if(0!==o.length){n.innerHTML="";for(const L of o){const o=document.createElement("section");o.className="panel container--feeCategory",o.dataset.feeCategoryId=L.feeCategoryId.toString(),o.innerHTML=`
\n
\n
\n

${cityssm.escapeHTML(null!==(e=L.feeCategory)&&void 0!==e?e:"")}

\n ${L.isGroupedFee?'Grouped Fee':""}\n
\n
\n
\n ${0===L.fees.length?'
\n \n
':""}\n
\n \n
\n
\n \n
\n
\n ${t.getMoveUpDownButtonFieldHTML("button--moveFeeCategoryUp","button--moveFeeCategoryDown")}\n
\n
\n
\n
`,0===L.fees.length&&(o.insertAdjacentHTML("beforeend",`
\n
\n

\n There are no fees in the\n "${cityssm.escapeHTML(null!==(s=L.feeCategory)&&void 0!==s?s:"")}"\n category.\n

\n
\n
`),null===(a=o.querySelector(".button--deleteFeeCategory"))||void 0===a||a.addEventListener("click",i));for(const e of L.fees){const n=document.createElement("div");n.className="panel-block is-block container--fee",n.dataset.feeId=e.feeId.toString();const s=null!==(r=e.isRequired)&&void 0!==r&&r||void 0!==e.occupancyTypeId||void 0!==e.lotTypeId;n.innerHTML=`
\n
\n

\n ${cityssm.escapeHTML(null!==(m=e.feeName)&&void 0!==m?m:"")}
\n \n ${cityssm.escapeHTML(null!==(v=e.feeDescription)&&void 0!==v?v:"").replaceAll("\n","
")}\n
\n

\n ${s?`

\n ${null!==(p=e.isRequired)&&void 0!==p&&p?'Required':""}\n ${-1===(null!==(g=e.occupancyTypeId)&&void 0!==g?g:-1)?"":` \n \n ${cityssm.escapeHTML(null!==(C=e.occupancyType)&&void 0!==C?C:"")}\n `}\n ${-1===(null!==(S=e.lotTypeId)&&void 0!==S?S:-1)?"":` \n \n ${cityssm.escapeHTML(null!==(b=e.lotType)&&void 0!==b?b:"")}\n `}\n

`:""}\n
\n
\n
\n
\n ${e.feeFunction?`${cityssm.escapeHTML(e.feeFunction)}
\n Fee Function`:`\n $${(null!==(F=e.feeAmount)&&void 0!==F?F:0).toFixed(2)}
\n Fee\n
`}\n
\n
\n ${e.taxPercentage?`${e.taxPercentage.toString()}%`:`$${(null!==(q=e.taxAmount)&&void 0!==q?q:0).toFixed(2)}`}
\n Tax\n
\n
\n ${e.includeQuantity?`${cityssm.escapeHTML(null!==(E=e.quantityUnit)&&void 0!==E?E:"")}
\n Quantity`:""}\n
\n
\n
\n
\n ${t.getMoveUpDownButtonFieldHTML("button--moveFeeUp","button--moveFeeDown")}\n
\n
`,null===(x=n.querySelector(".a--editFee"))||void 0===x||x.addEventListener("click",f),null===(T=n.querySelector(".a--editFeeAmount"))||void 0===T||T.addEventListener("click",u),n.querySelector(".button--moveFeeUp").addEventListener("click",y),n.querySelector(".button--moveFeeDown").addEventListener("click",y),o.append(n)}null===(A=o.querySelector(".button--editFeeCategory"))||void 0===A||A.addEventListener("click",l),null===(I=o.querySelector(".button--addFee"))||void 0===I||I.addEventListener("click",d),o.querySelector(".button--moveFeeCategoryUp").addEventListener("click",c),o.querySelector(".button--moveFeeCategoryDown").addEventListener("click",c),n.append(o)}}else n.innerHTML='
\n

There are no available fees.

\n
'}function l(e){var n;const a=s(Number.parseInt(null!==(n=e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId)&&void 0!==n?n:"",10));let l;function i(e){e.preventDefault(),cityssm.postJSON(`${t.urlPrefix}/admin/doUpdateFeeCategory`,e.currentTarget,e=>{var t;const n=e;n.success?(o=n.feeCategories,l(),r()):bulmaJS.alert({title:"Error Updating Fee Category",message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("adminFees-editFeeCategory",{onshow(e){e.querySelector("#feeCategoryEdit--feeCategoryId").value=a.feeCategoryId.toString(),e.querySelector("#feeCategoryEdit--feeCategory").value=a.feeCategory,a.isGroupedFee&&(e.querySelector("#feeCategoryEdit--isGroupedFee").checked=!0)},onshown(e,t){var n;bulmaJS.toggleHtmlClipped(),l=t,null===(n=e.querySelector("form"))||void 0===n||n.addEventListener("submit",i),e.querySelector("#feeCategoryEdit--feeCategory").focus()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})}function i(e){var n;const s=Number.parseInt(null!==(n=e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId)&&void 0!==n?n:"",10);bulmaJS.confirm({title:"Delete Fee Category?",message:"Are you sure you want to delete this fee category?",contextualColorName:"warning",okButton:{text:"Yes, Delete the Fee Category",callbackFunction:function(){cityssm.postJSON(`${t.urlPrefix}/admin/doDeleteFeeCategory`,{feeCategoryId:s},e=>{var t;const n=e;n.success?(o=n.feeCategories,r()):bulmaJS.alert({title:"Error Updating Fee Category",message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}function c(e){var n;const s=e.currentTarget,a=null!==(n=s.closest(".container--feeCategory").dataset.feeCategoryId)&&void 0!==n?n:"";cityssm.postJSON(`${t.urlPrefix}/admin/${"up"===s.dataset.direction?"doMoveFeeCategoryUp":"doMoveFeeCategoryDown"}`,{feeCategoryId:a,moveToEnd:e.shiftKey?"1":"0"},e=>{var t;const n=e;n.success?(o=n.feeCategories,r()):bulmaJS.alert({title:"Error Moving Fee Category",message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}function d(e){var n;const s=Number.parseInt(null!==(n=e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId)&&void 0!==n?n:"",10);let a;function l(e){e.preventDefault(),cityssm.postJSON(`${t.urlPrefix}/admin/doAddFee`,e.currentTarget,e=>{var t;const n=e;n.success?(o=n.feeCategories,a(),r()):bulmaJS.alert({title:"Error Adding Fee",message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("adminFees-addFee",{onshow(e){const n=e.querySelector("#feeAdd--feeCategoryId");for(const e of o){const t=document.createElement("option");t.value=e.feeCategoryId.toString(),t.textContent=e.feeCategory,e.feeCategoryId===s&&(t.selected=!0),n.append(t)}const a=e.querySelector("#feeAdd--occupancyTypeId");for(const e of exports.occupancyTypes){const t=document.createElement("option");t.value=e.occupancyTypeId.toString(),t.textContent=e.occupancyType,a.append(t)}const r=e.querySelector("#feeAdd--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,r.append(t)}e.querySelector("#feeAdd--taxPercentage").value=exports.taxPercentageDefault.toString(),t.populateAliases(e)},onshown(e,t){var n,o,s;bulmaJS.toggleHtmlClipped(),a=t,null===(n=e.querySelector("form"))||void 0===n||n.addEventListener("submit",l),e.querySelector("#feeAdd--feeName").focus(),e.querySelector("#feeAdd--feeFunction").addEventListener("change",()=>{var t,n;const o=e.querySelector("#feeAdd--feeAmount"),s=e.querySelector("#feeAdd--feeFunction");""===s.value?(null===(t=s.closest(".select"))||void 0===t||t.classList.remove("is-success"),o.classList.add("is-success"),o.disabled=!1):(null===(n=s.closest(".select"))||void 0===n||n.classList.add("is-success"),o.classList.remove("is-success"),o.disabled=!0)}),null===(o=e.querySelector("#feeAdd--taxPercentage"))||void 0===o||o.addEventListener("keyup",()=>{const t=e.querySelector("#feeAdd--taxAmount"),n=e.querySelector("#feeAdd--taxPercentage");""===n.value?(n.classList.remove("is-success"),t.classList.add("is-success"),t.disabled=!1):(n.classList.add("is-success"),t.classList.remove("is-success"),t.disabled=!0)}),null===(s=e.querySelector("#feeAdd--includeQuantity"))||void 0===s||s.addEventListener("change",()=>{e.querySelector("#feeAdd--quantityUnit").disabled=""===e.querySelector("#feeAdd--includeQuantity").value})},onremoved(){bulmaJS.toggleHtmlClipped()}})}function u(e){var n,l;e.preventDefault();const i=e.currentTarget.closest(".container--fee"),c=Number.parseInt(null!==(n=i.dataset.feeId)&&void 0!==n?n:"",10),d=s(Number.parseInt(null!==(l=i.closest(".container--feeCategory").dataset.feeCategoryId)&&void 0!==l?l:"")),u=a(d,c);let f;function y(e){e.preventDefault(),cityssm.postJSON(`${t.urlPrefix}/admin/doUpdateFeeAmount`,e.currentTarget,e=>{var t;const n=e;n.success?(o=n.feeCategories,f(),r()):bulmaJS.alert({title:"Error Updating Fee Amount",message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("adminFees-editFeeAmount",{onshow(e){var t,n,o;e.querySelector("#feeAmountEdit--feeId").value=u.feeId.toString(),e.querySelector("#feeAmountEdit--feeCategory").textContent=d.feeCategory,e.querySelector("#feeAmountEdit--feeName").textContent=null!==(t=u.feeName)&&void 0!==t?t:"",e.querySelector("#feeAmountEdit--feeAmount").value=null!==(o=null===(n=u.feeAmount)||void 0===n?void 0:n.toFixed(2))&&void 0!==o?o:"0"},onshown(e,t){var n;e.querySelector("#feeAmountEdit--feeAmount").select(),f=t,null===(n=e.querySelector("form"))||void 0===n||n.addEventListener("submit",y)}})}function f(e){var n,l;e.preventDefault();const i=e.currentTarget.closest(".container--fee"),c=Number.parseInt(null!==(n=i.dataset.feeId)&&void 0!==n?n:"",10),d=Number.parseInt(null!==(l=i.closest(".container--feeCategory").dataset.feeCategoryId)&&void 0!==l?l:""),u=a(s(d),c);let f,y;function m(e){e.preventDefault(),cityssm.postJSON(`${t.urlPrefix}/admin/doUpdateFee`,e.currentTarget,e=>{var t;const n=e;n.success?(o=n.feeCategories,f(),r()):bulmaJS.alert({title:"Error Updating Fee",message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}function v(e){e.preventDefault(),bulmaJS.confirm({title:"Delete Fee?",message:"Are you sure you want to delete this fee?",contextualColorName:"warning",okButton:{text:"Yes, Delete the Fee",callbackFunction:function(){cityssm.postJSON(`${t.urlPrefix}/admin/doDeleteFee`,{feeId:c},e=>{var t;const n=e;n.success?(o=n.feeCategories,f(),r()):bulmaJS.alert({title:"Error Deleting Fee",message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}}})}function p(){var e,t;const n=y.querySelector("#feeEdit--feeAmount"),o=y.querySelector("#feeEdit--feeFunction");""===o.value?(null===(e=o.closest(".select"))||void 0===e||e.classList.remove("is-success"),n.classList.add("is-success"),n.disabled=!1):(null===(t=o.closest(".select"))||void 0===t||t.classList.add("is-success"),n.classList.remove("is-success"),n.disabled=!0)}function g(){const e=y.querySelector("#feeEdit--taxAmount"),t=y.querySelector("#feeEdit--taxPercentage");""===t.value?(t.classList.remove("is-success"),e.classList.add("is-success"),e.disabled=!1):(t.classList.add("is-success"),e.classList.remove("is-success"),e.disabled=!0)}function C(){const e=y.querySelector("#feeEdit--includeQuantity").value;y.querySelector("#feeEdit--quantityUnit").disabled=""===e}cityssm.openHtmlModal("adminFees-editFee",{onshow(e){var n,s,a,r,l,i,c;y=e,e.querySelector("#feeEdit--feeId").value=u.feeId.toString();const f=e.querySelector("#feeEdit--feeCategoryId");for(const e of o){const t=document.createElement("option");t.value=e.feeCategoryId.toString(),t.textContent=e.feeCategory,e.feeCategoryId===d&&(t.selected=!0),f.append(t)}e.querySelector("#feeEdit--feeName").value=null!==(n=u.feeName)&&void 0!==n?n:"",e.querySelector("#feeEdit--feeAccount").value=null!==(s=u.feeAccount)&&void 0!==s?s:"",e.querySelector("#feeEdit--feeDescription").value=null!==(a=u.feeDescription)&&void 0!==a?a:"";const m=e.querySelector("#feeEdit--occupancyTypeId");for(const e of exports.occupancyTypes){const t=document.createElement("option");t.value=e.occupancyTypeId.toString(),t.textContent=e.occupancyType,e.occupancyTypeId===u.occupancyTypeId&&(t.selected=!0),m.append(t)}const v=e.querySelector("#feeEdit--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,e.lotTypeId===u.lotTypeId&&(t.selected=!0),v.append(t)}e.querySelector("#feeEdit--feeAmount").value=u.feeAmount?u.feeAmount.toFixed(2):"",null===(r=e.querySelector("#feeEdit--feeFunction"))||void 0===r||r.addEventListener("change",p),p(),e.querySelector("#feeEdit--taxAmount").value=u.taxAmount?u.taxAmount.toFixed(2):"";const S=e.querySelector("#feeEdit--taxPercentage");S.value=u.taxPercentage?u.taxPercentage.toString():"",S.addEventListener("keyup",g),g();const b=e.querySelector("#feeEdit--includeQuantity");null!==(l=u.includeQuantity)&&void 0!==l&&l&&(b.value="1"),b.addEventListener("change",C),e.querySelector("#feeEdit--quantityUnit").value=null!==(i=u.quantityUnit)&&void 0!==i?i:"",C(),null!==(c=u.isRequired)&&void 0!==c&&c&&(e.querySelector("#feeEdit--isRequired").value="1"),t.populateAliases(e)},onshown(e,t){var n,o;bulmaJS.toggleHtmlClipped(),f=t,null===(n=e.querySelector("form"))||void 0===n||n.addEventListener("submit",m),bulmaJS.init(e),null===(o=e.querySelector(".button--deleteFee"))||void 0===o||o.addEventListener("click",v)},onremoved(){bulmaJS.toggleHtmlClipped()}})}function y(e){var n;const s=e.currentTarget,a=null!==(n=s.closest(".container--fee").dataset.feeId)&&void 0!==n?n:"";cityssm.postJSON(`${t.urlPrefix}/admin/${"up"===s.dataset.direction?"doMoveFeeUp":"doMoveFeeDown"}`,{feeId:a,moveToEnd:e.shiftKey?"1":"0"},e=>{var t;const n=e;n.success?(o=n.feeCategories,r()):bulmaJS.alert({title:"Error Moving Fee",message:null!==(t=n.errorMessage)&&void 0!==t?t:"",contextualColorName:"danger"})})}delete exports.feeCategories,null===(e=document.querySelector("#button--addFeeCategory"))||void 0===e||e.addEventListener("click",()=>{let e;function n(n){n.preventDefault(),cityssm.postJSON(`${t.urlPrefix}/admin/doAddFeeCategory`,n.currentTarget,t=>{var n;const s=t;s.success?(o=s.feeCategories,e(),r()):bulmaJS.alert({title:"Error Creating Fee Category",message:null!==(n=s.errorMessage)&&void 0!==n?n:"",contextualColorName:"danger"})})}cityssm.openHtmlModal("adminFees-addFeeCategory",{onshown(t,o){var s;bulmaJS.toggleHtmlClipped(),t.querySelector("#feeCategoryAdd--feeCategory").focus(),e=o,null===(s=t.querySelector("form"))||void 0===s||s.addEventListener("submit",n)},onremoved(){bulmaJS.toggleHtmlClipped(),document.querySelector("#button--addFeeCategory").focus()}})}),r()})(); \ No newline at end of file diff --git a/routes/admin.js b/routes/admin.js index 4db87de3..a62ef439 100644 --- a/routes/admin.js +++ b/routes/admin.js @@ -52,6 +52,7 @@ import handler_doMoveWorkOrderMilestoneTypeUp from '../handlers/admin-post/doMov import handler_doMoveWorkOrderTypeDown from '../handlers/admin-post/doMoveWorkOrderTypeDown.js'; import handler_doMoveWorkOrderTypeUp from '../handlers/admin-post/doMoveWorkOrderTypeUp.js'; import handler_doUpdateFee from '../handlers/admin-post/doUpdateFee.js'; +import handler_doUpdateFeeAmount from '../handlers/admin-post/doUpdateFeeAmount.js'; import handler_doUpdateFeeCategory from '../handlers/admin-post/doUpdateFeeCategory.js'; import handler_doUpdateLotOccupantType from '../handlers/admin-post/doUpdateLotOccupantType.js'; import handler_doUpdateLotStatus from '../handlers/admin-post/doUpdateLotStatus.js'; @@ -74,6 +75,7 @@ router.post('/doMoveFeeCategoryDown', handler_doMoveFeeCategoryDown); router.post('/doDeleteFeeCategory', handler_doDeleteFeeCategory); router.post('/doAddFee', handler_doAddFee); router.post('/doUpdateFee', handler_doUpdateFee); +router.post('/doUpdateFeeAmount', handler_doUpdateFeeAmount); router.post('/doMoveFeeUp', handler_doMoveFeeUp); router.post('/doMoveFeeDown', handler_doMoveFeeDown); router.post('/doDeleteFee', handler_doDeleteFee); @@ -140,7 +142,9 @@ router.post('/doUpdateLotOccupantType', handler_doUpdateLotOccupantType); router.post('/doMoveLotOccupantTypeUp', handler_doMoveLotOccupantTypeUp); router.post('/doMoveLotOccupantTypeDown', handler_doMoveLotOccupantTypeDown); router.post('/doDeleteLotOccupantType', handler_doDeleteLotOccupantType); -// Database Maintenance +/* + * Database Maintenance + */ router.get('/database', handler_database); router.post('/doBackupDatabase', handler_doBackupDatabase); router.post('/doCleanupDatabase', handler_doCleanupDatabase); diff --git a/routes/admin.ts b/routes/admin.ts index e7b06eb5..6f35f2db 100644 --- a/routes/admin.ts +++ b/routes/admin.ts @@ -53,6 +53,7 @@ import handler_doMoveWorkOrderMilestoneTypeUp from '../handlers/admin-post/doMov import handler_doMoveWorkOrderTypeDown from '../handlers/admin-post/doMoveWorkOrderTypeDown.js' import handler_doMoveWorkOrderTypeUp from '../handlers/admin-post/doMoveWorkOrderTypeUp.js' import handler_doUpdateFee from '../handlers/admin-post/doUpdateFee.js' +import handler_doUpdateFeeAmount from '../handlers/admin-post/doUpdateFeeAmount.js' import handler_doUpdateFeeCategory from '../handlers/admin-post/doUpdateFeeCategory.js' import handler_doUpdateLotOccupantType from '../handlers/admin-post/doUpdateLotOccupantType.js' import handler_doUpdateLotStatus from '../handlers/admin-post/doUpdateLotStatus.js' @@ -99,6 +100,8 @@ router.post('/doAddFee', handler_doAddFee as RequestHandler) router.post('/doUpdateFee', handler_doUpdateFee as RequestHandler) +router.post('/doUpdateFeeAmount', handler_doUpdateFeeAmount as RequestHandler) + router.post('/doMoveFeeUp', handler_doMoveFeeUp as RequestHandler) router.post('/doMoveFeeDown', handler_doMoveFeeDown as RequestHandler) @@ -321,7 +324,9 @@ router.post( handler_doDeleteLotOccupantType as RequestHandler ) -// Database Maintenance +/* + * Database Maintenance + */ router.get('/database', handler_database)