diff --git a/handlers/admin-post/doMoveFeeCategoryDown.d.ts b/handlers/admin-post/doMoveFeeCategoryDown.d.ts
new file mode 100644
index 00000000..9621c611
--- /dev/null
+++ b/handlers/admin-post/doMoveFeeCategoryDown.d.ts
@@ -0,0 +1,3 @@
+import type { RequestHandler } from "express";
+export declare const handler: RequestHandler;
+export default handler;
diff --git a/handlers/admin-post/doMoveFeeCategoryDown.js b/handlers/admin-post/doMoveFeeCategoryDown.js
new file mode 100644
index 00000000..c671280a
--- /dev/null
+++ b/handlers/admin-post/doMoveFeeCategoryDown.js
@@ -0,0 +1,13 @@
+import { moveFeeCategoryDown } from "../../helpers/lotOccupancyDB/moveFeeCategoryDown.js";
+import { getFeeCategories } from "../../helpers/lotOccupancyDB/getFeeCategories.js";
+export const handler = async (request, response) => {
+ const success = moveFeeCategoryDown(request.body.feeCategoryId);
+ const feeCategories = getFeeCategories({}, {
+ includeFees: true
+ });
+ response.json({
+ success,
+ feeCategories
+ });
+};
+export default handler;
diff --git a/handlers/admin-post/doMoveFeeCategoryDown.ts b/handlers/admin-post/doMoveFeeCategoryDown.ts
new file mode 100644
index 00000000..3196bc1d
--- /dev/null
+++ b/handlers/admin-post/doMoveFeeCategoryDown.ts
@@ -0,0 +1,29 @@
+import type {
+ RequestHandler
+} from "express";
+
+import {
+ moveFeeCategoryDown
+} from "../../helpers/lotOccupancyDB/moveFeeCategoryDown.js";
+
+import {
+ getFeeCategories
+} from "../../helpers/lotOccupancyDB/getFeeCategories.js";
+
+
+export const handler: RequestHandler = async (request, response) => {
+
+ const success = moveFeeCategoryDown(request.body.feeCategoryId);
+
+ const feeCategories = getFeeCategories({}, {
+ includeFees: true
+ });
+
+ response.json({
+ success,
+ feeCategories
+ });
+};
+
+
+export default handler;
\ No newline at end of file
diff --git a/handlers/admin-post/doMoveFeeCategoryUp.d.ts b/handlers/admin-post/doMoveFeeCategoryUp.d.ts
new file mode 100644
index 00000000..9621c611
--- /dev/null
+++ b/handlers/admin-post/doMoveFeeCategoryUp.d.ts
@@ -0,0 +1,3 @@
+import type { RequestHandler } from "express";
+export declare const handler: RequestHandler;
+export default handler;
diff --git a/handlers/admin-post/doMoveFeeCategoryUp.js b/handlers/admin-post/doMoveFeeCategoryUp.js
new file mode 100644
index 00000000..4a8844b4
--- /dev/null
+++ b/handlers/admin-post/doMoveFeeCategoryUp.js
@@ -0,0 +1,13 @@
+import { moveFeeCategoryUp } from "../../helpers/lotOccupancyDB/moveFeeCategoryUp.js";
+import { getFeeCategories } from "../../helpers/lotOccupancyDB/getFeeCategories.js";
+export const handler = async (request, response) => {
+ const success = moveFeeCategoryUp(request.body.feeCategoryId);
+ const feeCategories = getFeeCategories({}, {
+ includeFees: true
+ });
+ response.json({
+ success,
+ feeCategories
+ });
+};
+export default handler;
diff --git a/handlers/admin-post/doMoveFeeCategoryUp.ts b/handlers/admin-post/doMoveFeeCategoryUp.ts
new file mode 100644
index 00000000..194b4964
--- /dev/null
+++ b/handlers/admin-post/doMoveFeeCategoryUp.ts
@@ -0,0 +1,29 @@
+import type {
+ RequestHandler
+} from "express";
+
+import {
+ moveFeeCategoryUp
+} from "../../helpers/lotOccupancyDB/moveFeeCategoryUp.js";
+
+import {
+ getFeeCategories
+} from "../../helpers/lotOccupancyDB/getFeeCategories.js";
+
+
+export const handler: RequestHandler = async (request, response) => {
+
+ const success = moveFeeCategoryUp(request.body.feeCategoryId);
+
+ const feeCategories = getFeeCategories({}, {
+ includeFees: true
+ });
+
+ response.json({
+ success,
+ feeCategories
+ });
+};
+
+
+export default handler;
\ No newline at end of file
diff --git a/handlers/admin-post/doMoveFeeDown.d.ts b/handlers/admin-post/doMoveFeeDown.d.ts
new file mode 100644
index 00000000..9621c611
--- /dev/null
+++ b/handlers/admin-post/doMoveFeeDown.d.ts
@@ -0,0 +1,3 @@
+import type { RequestHandler } from "express";
+export declare const handler: RequestHandler;
+export default handler;
diff --git a/handlers/admin-post/doMoveFeeDown.js b/handlers/admin-post/doMoveFeeDown.js
new file mode 100644
index 00000000..43eb9839
--- /dev/null
+++ b/handlers/admin-post/doMoveFeeDown.js
@@ -0,0 +1,13 @@
+import { moveFeeDown } from "../../helpers/lotOccupancyDB/moveFeeDown.js";
+import { getFeeCategories } from "../../helpers/lotOccupancyDB/getFeeCategories.js";
+export const handler = async (request, response) => {
+ const success = moveFeeDown(request.body.feeId);
+ const feeCategories = getFeeCategories({}, {
+ includeFees: true
+ });
+ response.json({
+ success,
+ feeCategories
+ });
+};
+export default handler;
diff --git a/handlers/admin-post/doMoveFeeDown.ts b/handlers/admin-post/doMoveFeeDown.ts
new file mode 100644
index 00000000..e57252a4
--- /dev/null
+++ b/handlers/admin-post/doMoveFeeDown.ts
@@ -0,0 +1,29 @@
+import type {
+ RequestHandler
+} from "express";
+
+import {
+ moveFeeDown
+} from "../../helpers/lotOccupancyDB/moveFeeDown.js";
+
+import {
+ getFeeCategories
+} from "../../helpers/lotOccupancyDB/getFeeCategories.js";
+
+
+export const handler: RequestHandler = async (request, response) => {
+
+ const success = moveFeeDown(request.body.feeId);
+
+ const feeCategories = getFeeCategories({}, {
+ includeFees: true
+ });
+
+ response.json({
+ success,
+ feeCategories
+ });
+};
+
+
+export default handler;
\ No newline at end of file
diff --git a/handlers/admin-post/doMoveFeeUp.d.ts b/handlers/admin-post/doMoveFeeUp.d.ts
new file mode 100644
index 00000000..9621c611
--- /dev/null
+++ b/handlers/admin-post/doMoveFeeUp.d.ts
@@ -0,0 +1,3 @@
+import type { RequestHandler } from "express";
+export declare const handler: RequestHandler;
+export default handler;
diff --git a/handlers/admin-post/doMoveFeeUp.js b/handlers/admin-post/doMoveFeeUp.js
new file mode 100644
index 00000000..d20042bc
--- /dev/null
+++ b/handlers/admin-post/doMoveFeeUp.js
@@ -0,0 +1,13 @@
+import { moveFeeUp } from "../../helpers/lotOccupancyDB/moveFeeUp.js";
+import { getFeeCategories } from "../../helpers/lotOccupancyDB/getFeeCategories.js";
+export const handler = async (request, response) => {
+ const success = moveFeeUp(request.body.feeId);
+ const feeCategories = getFeeCategories({}, {
+ includeFees: true
+ });
+ response.json({
+ success,
+ feeCategories
+ });
+};
+export default handler;
diff --git a/handlers/admin-post/doMoveFeeUp.ts b/handlers/admin-post/doMoveFeeUp.ts
new file mode 100644
index 00000000..e1fd6f9a
--- /dev/null
+++ b/handlers/admin-post/doMoveFeeUp.ts
@@ -0,0 +1,29 @@
+import type {
+ RequestHandler
+} from "express";
+
+import {
+ moveFeeUp
+} from "../../helpers/lotOccupancyDB/moveFeeUp.js";
+
+import {
+ getFeeCategories
+} from "../../helpers/lotOccupancyDB/getFeeCategories.js";
+
+
+export const handler: RequestHandler = async (request, response) => {
+
+ const success = moveFeeUp(request.body.feeId);
+
+ const feeCategories = getFeeCategories({}, {
+ includeFees: true
+ });
+
+ response.json({
+ success,
+ feeCategories
+ });
+};
+
+
+export default handler;
\ No newline at end of file
diff --git a/public-typescript/adminFees.js b/public-typescript/adminFees.js
index 7317676e..84daa4b4 100644
--- a/public-typescript/adminFees.js
+++ b/public-typescript/adminFees.js
@@ -33,18 +33,32 @@ Object.defineProperty(exports, "__esModule", { value: true });
"" +
"" :
"") +
- "
" +
- "" +
- " " +
- "Edit Category " +
- " " +
- "
" +
- "" +
- "" +
- " " +
- "Add Fee " +
- " " +
- "
" +
+ ("" +
+ "" +
+ " " +
+ "Edit Category " +
+ " " +
+ "
") +
+ ("" +
+ "" +
+ " " +
+ "Add Fee " +
+ " " +
+ "
") +
+ ("" +
+ "
" +
+ "
" +
+ "" +
+ " " +
+ " " +
+ "
" +
+ "
" +
+ "" +
+ " " +
+ " " +
+ "
" +
+ "
" +
+ "
") +
"") +
"");
if (feeCategory.fees.length === 0) {
@@ -98,26 +112,42 @@ Object.defineProperty(exports, "__esModule", { value: true });
"Quantity " :
"") +
"") +
+ ("" +
+ "
" +
+ "
" +
+ "" +
+ " " +
+ " " +
+ "
" +
+ "
" +
+ "" +
+ " " +
+ " " +
+ "
" +
+ "
" +
+ "
") +
"";
panelBlockElement.querySelector("a").addEventListener("click", openEditFee);
+ panelBlockElement.querySelector(".button--moveFeeUp").addEventListener("click", moveFeeUp);
+ panelBlockElement.querySelector(".button--moveFeeDown").addEventListener("click", moveFeeDown);
panelElement.append(panelBlockElement);
}
feeCategoryContainerElement.append(panelElement);
}
+ if (feeCategory.fees.length === 0) {
+ feeCategoryContainerElement.querySelector(".button--deleteFeeCategory")
+ .addEventListener("click", confirmDeleteFeeCategory);
+ }
+ feeCategoryContainerElement.querySelector(".button--editFeeCategory")
+ .addEventListener("click", openEditFeeCategory);
+ feeCategoryContainerElement.querySelector(".button--addFee")
+ .addEventListener("click", openAddFee);
+ feeCategoryContainerElement.querySelector(".button--moveFeeCategoryUp")
+ .addEventListener("click", moveFeeCategoryUp);
+ feeCategoryContainerElement.querySelector(".button--moveFeeCategoryDown")
+ .addEventListener("click", moveFeeCategoryDown);
feeCategoriesContainerElement.append(feeCategoryContainerElement);
}
- const deleteCategoryButtonElements = feeCategoriesContainerElement.querySelectorAll(".button--deleteFeeCategory");
- for (const deleteCategoryButtonElement of deleteCategoryButtonElements) {
- deleteCategoryButtonElement.addEventListener("click", confirmDeleteFeeCategory);
- }
- const editCategoryButtonElements = feeCategoriesContainerElement.querySelectorAll(".button--editFeeCategory");
- for (const editCategoryButtonElement of editCategoryButtonElements) {
- editCategoryButtonElement.addEventListener("click", openEditFeeCategory);
- }
- const addFeeButtonElements = feeCategoriesContainerElement.querySelectorAll(".button--addFee");
- for (const addFeeButtonElement of addFeeButtonElements) {
- addFeeButtonElement.addEventListener("click", openAddFee);
- }
};
document.querySelector("#button--addFeeCategory").addEventListener("click", () => {
let addCloseModalFunction;
@@ -218,6 +248,42 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
};
+ const moveFeeCategoryUp = (clickEvent) => {
+ const feeCategoryId = Number.parseInt(clickEvent.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId, 10);
+ cityssm.postJSON(urlPrefix + "/admin/doMoveFeeCategoryUp", {
+ feeCategoryId
+ }, (responseJSON) => {
+ if (responseJSON.success) {
+ feeCategories = responseJSON.feeCategories;
+ renderFeeCategories();
+ }
+ else {
+ bulmaJS.alert({
+ title: "Error Moving Fee Category",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
+ };
+ const moveFeeCategoryDown = (clickEvent) => {
+ const feeCategoryId = Number.parseInt(clickEvent.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId, 10);
+ cityssm.postJSON(urlPrefix + "/admin/doMoveFeeCategoryDown", {
+ feeCategoryId
+ }, (responseJSON) => {
+ if (responseJSON.success) {
+ feeCategories = responseJSON.feeCategories;
+ renderFeeCategories();
+ }
+ else {
+ bulmaJS.alert({
+ title: "Error Moving Fee Category",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
+ };
const openAddFee = (clickEvent) => {
const feeCategoryId = Number.parseInt(clickEvent.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId, 10);
let addCloseModalFunction;
@@ -470,5 +536,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
}
});
};
+ const moveFeeUp = (clickEvent) => {
+ const feeContainerElement = clickEvent.currentTarget.closest(".container--fee");
+ const feeId = Number.parseInt(feeContainerElement.dataset.feeId, 10);
+ cityssm.postJSON(urlPrefix + "/admin/doMoveFeeUp", {
+ feeId
+ }, (responseJSON) => {
+ if (responseJSON.success) {
+ feeCategories = responseJSON.feeCategories;
+ renderFeeCategories();
+ }
+ else {
+ bulmaJS.alert({
+ title: "Error Moving Fee",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
+ };
+ const moveFeeDown = (clickEvent) => {
+ const feeContainerElement = clickEvent.currentTarget.closest(".container--fee");
+ const feeId = Number.parseInt(feeContainerElement.dataset.feeId, 10);
+ cityssm.postJSON(urlPrefix + "/admin/doMoveFeeDown", {
+ feeId
+ }, (responseJSON) => {
+ if (responseJSON.success) {
+ feeCategories = responseJSON.feeCategories;
+ renderFeeCategories();
+ }
+ else {
+ bulmaJS.alert({
+ title: "Error Moving Fee",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
+ };
renderFeeCategories();
})();
diff --git a/public-typescript/adminFees.ts b/public-typescript/adminFees.ts
index c9fb1e73..b67a4d5a 100644
--- a/public-typescript/adminFees.ts
+++ b/public-typescript/adminFees.ts
@@ -59,18 +59,32 @@ declare const bulmaJS: BulmaJS;
"" +
"" :
"") +
- "" +
- "" +
- " " +
- "Edit Category " +
- " " +
- "
" +
- "" +
- "" +
- " " +
- "Add Fee " +
- " " +
- "
" +
+ ("" +
+ "" +
+ " " +
+ "Edit Category " +
+ " " +
+ "
") +
+ ("" +
+ "" +
+ " " +
+ "Add Fee " +
+ " " +
+ "
") +
+ ("" +
+ "
" +
+ "
" +
+ "" +
+ " " +
+ " " +
+ "
" +
+ "
" +
+ "" +
+ " " +
+ " " +
+ "
" +
+ "
" +
+ "
") +
"") +
"");
@@ -129,36 +143,52 @@ declare const bulmaJS: BulmaJS;
"Quantity " :
"") +
"") +
+ ("" +
+ "
" +
+ "
" +
+ "" +
+ " " +
+ " " +
+ "
" +
+ "
" +
+ "" +
+ " " +
+ " " +
+ "
" +
+ "
" +
+ "
") +
"";
panelBlockElement.querySelector("a").addEventListener("click", openEditFee);
+ panelBlockElement.querySelector(".button--moveFeeUp").addEventListener("click", moveFeeUp);
+ panelBlockElement.querySelector(".button--moveFeeDown").addEventListener("click", moveFeeDown);
+
panelElement.append(panelBlockElement);
}
feeCategoryContainerElement.append(panelElement);
}
+ if (feeCategory.fees.length === 0) {
+ feeCategoryContainerElement.querySelector(".button--deleteFeeCategory")
+ .addEventListener("click", confirmDeleteFeeCategory);
+ }
+
+ feeCategoryContainerElement.querySelector(".button--editFeeCategory")
+ .addEventListener("click", openEditFeeCategory);
+
+ feeCategoryContainerElement.querySelector(".button--addFee")
+ .addEventListener("click", openAddFee);
+
+ feeCategoryContainerElement.querySelector(".button--moveFeeCategoryUp")
+ .addEventListener("click", moveFeeCategoryUp);
+
+ feeCategoryContainerElement.querySelector(".button--moveFeeCategoryDown")
+ .addEventListener("click", moveFeeCategoryDown);
+
feeCategoriesContainerElement.append(feeCategoryContainerElement);
}
-
- const deleteCategoryButtonElements = feeCategoriesContainerElement.querySelectorAll(".button--deleteFeeCategory");
-
- for (const deleteCategoryButtonElement of deleteCategoryButtonElements) {
- deleteCategoryButtonElement.addEventListener("click", confirmDeleteFeeCategory);
- }
-
- const editCategoryButtonElements = feeCategoriesContainerElement.querySelectorAll(".button--editFeeCategory");
-
- for (const editCategoryButtonElement of editCategoryButtonElements) {
- editCategoryButtonElement.addEventListener("click", openEditFeeCategory);
- }
-
- const addFeeButtonElements = feeCategoriesContainerElement.querySelectorAll(".button--addFee");
-
- for (const addFeeButtonElement of addFeeButtonElements) {
- addFeeButtonElement.addEventListener("click", openAddFee);
- }
};
@@ -270,21 +300,23 @@ declare const bulmaJS: BulmaJS;
const doDelete = () => {
cityssm.postJSON(urlPrefix + "/admin/doDeleteFeeCategory", {
- feeCategoryId
- },
- (responseJSON: {success: boolean; errorMessage?: string; feeCategories?: recordTypes.FeeCategory[];}) => {
+ feeCategoryId
+ },
+ (responseJSON: {
+ success: boolean;errorMessage ? : string;feeCategories ? : recordTypes.FeeCategory[];
+ }) => {
- if (responseJSON.success) {
- feeCategories = responseJSON.feeCategories;
- renderFeeCategories();
- } else {
- bulmaJS.alert({
- title: "Error Updating Fee Category",
- message: responseJSON.errorMessage,
- contextualColorName: "danger"
- });
- }
- });
+ if (responseJSON.success) {
+ feeCategories = responseJSON.feeCategories;
+ renderFeeCategories();
+ } else {
+ bulmaJS.alert({
+ title: "Error Updating Fee Category",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
};
bulmaJS.confirm({
@@ -298,6 +330,56 @@ declare const bulmaJS: BulmaJS;
})
};
+ const moveFeeCategoryUp = (clickEvent: Event) => {
+
+ const feeCategoryId = Number.parseInt(((clickEvent.currentTarget as HTMLElement).closest(".container--feeCategory") as HTMLElement).dataset.feeCategoryId, 10);
+
+ cityssm.postJSON(urlPrefix + "/admin/doMoveFeeCategoryUp", {
+ feeCategoryId
+ },
+ (responseJSON: {
+ success: boolean;
+ errorMessage ? : string;
+ feeCategories ? : recordTypes.FeeCategory[];
+ }) => {
+ if (responseJSON.success) {
+ feeCategories = responseJSON.feeCategories;
+ renderFeeCategories();
+ } else {
+ bulmaJS.alert({
+ title: "Error Moving Fee Category",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
+ };
+
+ const moveFeeCategoryDown = (clickEvent: Event) => {
+
+ const feeCategoryId = Number.parseInt(((clickEvent.currentTarget as HTMLElement).closest(".container--feeCategory") as HTMLElement).dataset.feeCategoryId, 10);
+
+ cityssm.postJSON(urlPrefix + "/admin/doMoveFeeCategoryDown", {
+ feeCategoryId
+ },
+ (responseJSON: {
+ success: boolean;
+ errorMessage ? : string;
+ feeCategories ? : recordTypes.FeeCategory[];
+ }) => {
+ if (responseJSON.success) {
+ feeCategories = responseJSON.feeCategories;
+ renderFeeCategories();
+ } else {
+ bulmaJS.alert({
+ title: "Error Moving Fee Category",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
+ };
+
/*
* Fees
*/
@@ -664,6 +746,61 @@ declare const bulmaJS: BulmaJS;
});
};
+ const moveFeeUp = (clickEvent: Event) => {
+
+ const feeContainerElement = (clickEvent.currentTarget as HTMLElement).closest(".container--fee") as HTMLElement;
+
+ const feeId = Number.parseInt(feeContainerElement.dataset.feeId, 10);
+
+ cityssm.postJSON(urlPrefix + "/admin/doMoveFeeUp", {
+ feeId
+ },
+ (responseJSON: {
+ success: boolean;
+ errorMessage ? : string;
+ feeCategories ? : recordTypes.FeeCategory[];
+ }) => {
+ if (responseJSON.success) {
+ feeCategories = responseJSON.feeCategories;
+ renderFeeCategories();
+ } else {
+ bulmaJS.alert({
+ title: "Error Moving Fee",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
+ };
+
+ const moveFeeDown = (clickEvent: Event) => {
+
+ const feeContainerElement = (clickEvent.currentTarget as HTMLElement).closest(".container--fee") as HTMLElement;
+
+ const feeId = Number.parseInt(feeContainerElement.dataset.feeId, 10);
+
+ cityssm.postJSON(urlPrefix + "/admin/doMoveFeeDown", {
+ feeId
+ },
+ (responseJSON: {
+ success: boolean;
+ errorMessage ? : string;
+ feeCategories ? : recordTypes.FeeCategory[];
+ }) => {
+ if (responseJSON.success) {
+ feeCategories = responseJSON.feeCategories;
+ renderFeeCategories();
+ } else {
+ bulmaJS.alert({
+ title: "Error Moving Fee",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
+ };
+
+
/*
* Initialize
*/
diff --git a/public/javascripts/adminFees.min.js b/public/javascripts/adminFees.min.js
index e3c21763..cbb91b55 100644
--- a/public/javascripts/adminFees.min.js
+++ b/public/javascripts/adminFees.min.js
@@ -1 +1 @@
-"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("main").dataset.urlPrefix,s=document.querySelector("#container--feeCategories");let a=exports.feeCategories;delete exports.feeCategories;const o=()=>{if(0===a.length)return void(s.innerHTML='There are no available fees.
');s.innerHTML="";for(const e of a){const t=document.createElement("section");if(t.className="container--feeCategory mb-5",t.dataset.feeCategoryId=e.feeCategoryId.toString(),t.insertAdjacentHTML("beforeend",'
'+cityssm.escapeHTML(e.feeCategory)+' '+(0===e.fees.length?'
Delete Category
':"")+'
Edit Category
Add Fee
'),0===e.fees.length)t.insertAdjacentHTML("beforeend",'There are no fees in the "'+cityssm.escapeHTML(e.feeCategory)+'" category.
');else{const s=document.createElement("div");s.className="panel";for(const t of e.fees){const e=document.createElement("div");e.className="panel-block is-block container--fee",e.dataset.feeId=t.feeId.toString(),e.innerHTML=''+cityssm.escapeHTML(t.feeName)+" "+cityssm.escapeHTML(t.feeDescription).replace(/\n/g," ")+'
'+(t.isRequired?'Required ':"")+(t.occupancyTypeId?' '+cityssm.escapeHTML(t.occupancyType)+" ":"")+(t.lotTypeId?' '+cityssm.escapeHTML(t.lotType)+" ":"")+'
'+(t.feeFunction?cityssm.escapeHTML(t.feeFunction)+"Fee Function ":"$"+t.feeAmount.toFixed(2)+"Fee ")+'
'+(t.taxPercentage?t.taxPercentage+"%":"$"+t.taxAmount.toFixed(2))+'Tax
'+(t.includeQuantity?cityssm.escapeHTML(t.quantityUnit)+"Quantity ":"")+"
",e.querySelector("a").addEventListener("click",l),s.append(e)}t.append(s)}s.append(t)}const e=s.querySelectorAll(".button--deleteFeeCategory");for(const t of e)t.addEventListener("click",n);const t=s.querySelectorAll(".button--editFeeCategory");for(const e of t)e.addEventListener("click",r);const o=s.querySelectorAll(".button--addFee");for(const e of o)e.addEventListener("click",c)};document.querySelector("#button--addFeeCategory").addEventListener("click",()=>{let e;const s=s=>{s.preventDefault(),cityssm.postJSON(t+"/admin/doAddFeeCategory",s.currentTarget,t=>{t.success?(a=t.feeCategories,e(),o()):bulmaJS.alert({title:"Error Creating Fee Category",message:t.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminFees-addFeeCategory",{onshown:(t,a)=>{bulmaJS.toggleHtmlClipped(),t.querySelector("#feeCategoryAdd--feeCategory").focus(),e=a,t.querySelector("form").addEventListener("submit",s)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})});const r=e=>{const s=Number.parseInt(e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10),r=a.find(e=>e.feeCategoryId===s);let n;const c=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doUpdateFeeCategory",e.currentTarget,e=>{e.success?(a=e.feeCategories,n(),o()):bulmaJS.alert({title:"Error Updating Fee Category",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminFees-editFeeCategory",{onshow:e=>{e.querySelector("#feeCategoryEdit--feeCategoryId").value=r.feeCategoryId.toString(),e.querySelector("#feeCategoryEdit--feeCategory").value=r.feeCategory},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),n=t,e.querySelector("form").addEventListener("submit",c),e.querySelector("#feeCategoryEdit--feeCategory").focus()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},n=e=>{const s=Number.parseInt(e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,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:()=>{cityssm.postJSON(t+"/admin/doDeleteFeeCategory",{feeCategoryId:s},e=>{e.success?(a=e.feeCategories,o()):bulmaJS.alert({title:"Error Updating Fee Category",message:e.errorMessage,contextualColorName:"danger"})})}}})},c=s=>{const r=Number.parseInt(s.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10);let n;const c=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doAddFee",e.currentTarget,e=>{e.success?(a=e.feeCategories,n(),o()):bulmaJS.alert({title:"Error Adding Fee",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminFees-addFee",{onshow:t=>{const s=t.querySelector("#feeAdd--feeCategoryId");for(const e of a){const t=document.createElement("option");t.value=e.feeCategoryId.toString(),t.textContent=e.feeCategory,e.feeCategoryId===r&&(t.selected=!0),s.append(t)}const o=t.querySelector("#feeAdd--occupancyTypeId");for(const e of exports.occupancyTypes){const t=document.createElement("option");t.value=e.occupancyTypeId.toString(),t.textContent=e.occupancyType,o.append(t)}const n=t.querySelector("#feeAdd--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,n.append(t)}t.querySelector("#feeAdd--taxPercentage").value=exports.taxPercentageDefault.toString(),e.populateAliases(t)},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),n=t,e.querySelector("form").addEventListener("submit",c),e.querySelector("#feeAdd--feeName").focus(),e.querySelector("#feeAdd--feeFunction").addEventListener("change",()=>{const t=e.querySelector("#feeAdd--feeAmount"),s=e.querySelector("#feeAdd--feeFunction");""===s.value?(s.closest(".select").classList.remove("is-success"),t.classList.add("is-success"),t.disabled=!1):(s.closest(".select").classList.add("is-success"),t.classList.remove("is-success"),t.disabled=!0)}),e.querySelector("#feeAdd--taxPercentage").addEventListener("keyup",()=>{const t=e.querySelector("#feeAdd--taxAmount"),s=e.querySelector("#feeAdd--taxPercentage");""===s.value?(s.classList.remove("is-success"),t.classList.add("is-success"),t.disabled=!1):(s.classList.add("is-success"),t.classList.remove("is-success"),t.disabled=!0)}),e.querySelector("#feeAdd--includeQuantity").addEventListener("change",()=>{e.querySelector("#feeAdd--quantityUnit").disabled=""===e.querySelector("#feeAdd--includeQuantity").value})},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},l=s=>{s.preventDefault();const r=s.currentTarget.closest(".container--fee"),n=Number.parseInt(r.dataset.feeId,10),c=Number.parseInt(r.closest(".container--feeCategory").dataset.feeCategoryId),l=a.find(e=>e.feeCategoryId===c).fees.find(e=>e.feeId===n);let i,d;const u=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doUpdateFee",e.currentTarget,e=>{e.success?(a=e.feeCategories,i(),o()):bulmaJS.alert({title:"Error Updating Fee",message:e.errorMessage,contextualColorName:"danger"})})},y=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:()=>{cityssm.postJSON(t+"/admin/doDeleteFee",{feeId:n},e=>{e.success?(a=e.feeCategories,i(),o()):bulmaJS.alert({title:"Error Deleting Fee",message:e.errorMessage,contextualColorName:"danger"})})}}})},m=()=>{const e=d.querySelector("#feeEdit--feeAmount"),t=d.querySelector("#feeEdit--feeFunction");""===t.value?(t.closest(".select").classList.remove("is-success"),e.classList.add("is-success"),e.disabled=!1):(t.closest(".select").classList.add("is-success"),e.classList.remove("is-success"),e.disabled=!0)},p=()=>{const e=d.querySelector("#feeEdit--taxAmount"),t=d.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)},f=()=>{d.querySelector("#feeEdit--quantityUnit").disabled=""===d.querySelector("#feeEdit--includeQuantity").value};cityssm.openHtmlModal("adminFees-editFee",{onshow:t=>{d=t,t.querySelector("#feeEdit--feeId").value=l.feeId.toString();const s=t.querySelector("#feeEdit--feeCategoryId");for(const e of a){const t=document.createElement("option");t.value=e.feeCategoryId.toString(),t.textContent=e.feeCategory,e.feeCategoryId===c&&(t.selected=!0),s.append(t)}t.querySelector("#feeEdit--feeName").value=l.feeName,t.querySelector("#feeEdit--feeDescription").value=l.feeDescription;const o=t.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===l.occupancyTypeId&&(t.selected=!0),o.append(t)}const r=t.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===l.lotTypeId&&(t.selected=!0),r.append(t)}t.querySelector("#feeEdit--feeAmount").value=l.feeAmount?l.feeAmount.toFixed(2):"",t.querySelector("#feeEdit--feeFunction").addEventListener("change",m),m(),t.querySelector("#feeEdit--taxAmount").value=l.taxAmount?l.taxAmount.toFixed(2):"";const n=t.querySelector("#feeEdit--taxPercentage");n.value=l.taxPercentage?l.taxPercentage.toString():"",n.addEventListener("keyup",p),p();const i=t.querySelector("#feeEdit--includeQuantity");l.includeQuantity&&(i.value="1"),i.addEventListener("change",f),t.querySelector("#feeEdit--quantityUnit").value=l.quantityUnit||"",f(),l.isRequired&&(t.querySelector("#feeEdit--isRequired").value="1"),e.populateAliases(t)},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),i=t,e.querySelector("form").addEventListener("submit",u),bulmaJS.init(e),e.querySelector(".button--deleteFee").addEventListener("click",y)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})};o()})();
\ No newline at end of file
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=document.querySelector("main").dataset.urlPrefix,s=document.querySelector("#container--feeCategories");let a=exports.feeCategories;delete exports.feeCategories;const o=()=>{if(0!==a.length){s.innerHTML="";for(const e of a){const t=document.createElement("section");if(t.className="container--feeCategory mb-5",t.dataset.feeCategoryId=e.feeCategoryId.toString(),t.insertAdjacentHTML("beforeend",'
'+cityssm.escapeHTML(e.feeCategory)+' '+(0===e.fees.length?'
Delete Category
':"")+'
Edit Category
Add Fee
'),0===e.fees.length)t.insertAdjacentHTML("beforeend",'There are no fees in the "'+cityssm.escapeHTML(e.feeCategory)+'" category.
');else{const s=document.createElement("div");s.className="panel";for(const t of e.fees){const e=document.createElement("div");e.className="panel-block is-block container--fee",e.dataset.feeId=t.feeId.toString(),e.innerHTML=''+cityssm.escapeHTML(t.feeName)+" "+cityssm.escapeHTML(t.feeDescription).replace(/\n/g," ")+'
'+(t.isRequired?'Required ':"")+(t.occupancyTypeId?' '+cityssm.escapeHTML(t.occupancyType)+" ":"")+(t.lotTypeId?' '+cityssm.escapeHTML(t.lotType)+" ":"")+'
'+(t.feeFunction?cityssm.escapeHTML(t.feeFunction)+"Fee Function ":"$"+t.feeAmount.toFixed(2)+"Fee ")+'
'+(t.taxPercentage?t.taxPercentage+"%":"$"+t.taxAmount.toFixed(2))+'Tax
'+(t.includeQuantity?cityssm.escapeHTML(t.quantityUnit)+"Quantity ":"")+'
',e.querySelector("a").addEventListener("click",d),e.querySelector(".button--moveFeeUp").addEventListener("click",u),e.querySelector(".button--moveFeeDown").addEventListener("click",m),s.append(e)}t.append(s)}0===e.fees.length&&t.querySelector(".button--deleteFeeCategory").addEventListener("click",n),t.querySelector(".button--editFeeCategory").addEventListener("click",r),t.querySelector(".button--addFee").addEventListener("click",i),t.querySelector(".button--moveFeeCategoryUp").addEventListener("click",l),t.querySelector(".button--moveFeeCategoryDown").addEventListener("click",c),s.append(t)}}else s.innerHTML='There are no available fees.
'};document.querySelector("#button--addFeeCategory").addEventListener("click",()=>{let e;const s=s=>{s.preventDefault(),cityssm.postJSON(t+"/admin/doAddFeeCategory",s.currentTarget,t=>{t.success?(a=t.feeCategories,e(),o()):bulmaJS.alert({title:"Error Creating Fee Category",message:t.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminFees-addFeeCategory",{onshown:(t,a)=>{bulmaJS.toggleHtmlClipped(),t.querySelector("#feeCategoryAdd--feeCategory").focus(),e=a,t.querySelector("form").addEventListener("submit",s)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})});const r=e=>{const s=Number.parseInt(e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10),r=a.find(e=>e.feeCategoryId===s);let n;const l=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doUpdateFeeCategory",e.currentTarget,e=>{e.success?(a=e.feeCategories,n(),o()):bulmaJS.alert({title:"Error Updating Fee Category",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminFees-editFeeCategory",{onshow:e=>{e.querySelector("#feeCategoryEdit--feeCategoryId").value=r.feeCategoryId.toString(),e.querySelector("#feeCategoryEdit--feeCategory").value=r.feeCategory},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),n=t,e.querySelector("form").addEventListener("submit",l),e.querySelector("#feeCategoryEdit--feeCategory").focus()},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},n=e=>{const s=Number.parseInt(e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,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:()=>{cityssm.postJSON(t+"/admin/doDeleteFeeCategory",{feeCategoryId:s},e=>{e.success?(a=e.feeCategories,o()):bulmaJS.alert({title:"Error Updating Fee Category",message:e.errorMessage,contextualColorName:"danger"})})}}})},l=e=>{const s=Number.parseInt(e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10);cityssm.postJSON(t+"/admin/doMoveFeeCategoryUp",{feeCategoryId:s},e=>{e.success?(a=e.feeCategories,o()):bulmaJS.alert({title:"Error Moving Fee Category",message:e.errorMessage,contextualColorName:"danger"})})},c=e=>{const s=Number.parseInt(e.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10);cityssm.postJSON(t+"/admin/doMoveFeeCategoryDown",{feeCategoryId:s},e=>{e.success?(a=e.feeCategories,o()):bulmaJS.alert({title:"Error Moving Fee Category",message:e.errorMessage,contextualColorName:"danger"})})},i=s=>{const r=Number.parseInt(s.currentTarget.closest(".container--feeCategory").dataset.feeCategoryId,10);let n;const l=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doAddFee",e.currentTarget,e=>{e.success?(a=e.feeCategories,n(),o()):bulmaJS.alert({title:"Error Adding Fee",message:e.errorMessage,contextualColorName:"danger"})})};cityssm.openHtmlModal("adminFees-addFee",{onshow:t=>{const s=t.querySelector("#feeAdd--feeCategoryId");for(const e of a){const t=document.createElement("option");t.value=e.feeCategoryId.toString(),t.textContent=e.feeCategory,e.feeCategoryId===r&&(t.selected=!0),s.append(t)}const o=t.querySelector("#feeAdd--occupancyTypeId");for(const e of exports.occupancyTypes){const t=document.createElement("option");t.value=e.occupancyTypeId.toString(),t.textContent=e.occupancyType,o.append(t)}const n=t.querySelector("#feeAdd--lotTypeId");for(const e of exports.lotTypes){const t=document.createElement("option");t.value=e.lotTypeId.toString(),t.textContent=e.lotType,n.append(t)}t.querySelector("#feeAdd--taxPercentage").value=exports.taxPercentageDefault.toString(),e.populateAliases(t)},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),n=t,e.querySelector("form").addEventListener("submit",l),e.querySelector("#feeAdd--feeName").focus(),e.querySelector("#feeAdd--feeFunction").addEventListener("change",()=>{const t=e.querySelector("#feeAdd--feeAmount"),s=e.querySelector("#feeAdd--feeFunction");""===s.value?(s.closest(".select").classList.remove("is-success"),t.classList.add("is-success"),t.disabled=!1):(s.closest(".select").classList.add("is-success"),t.classList.remove("is-success"),t.disabled=!0)}),e.querySelector("#feeAdd--taxPercentage").addEventListener("keyup",()=>{const t=e.querySelector("#feeAdd--taxAmount"),s=e.querySelector("#feeAdd--taxPercentage");""===s.value?(s.classList.remove("is-success"),t.classList.add("is-success"),t.disabled=!1):(s.classList.add("is-success"),t.classList.remove("is-success"),t.disabled=!0)}),e.querySelector("#feeAdd--includeQuantity").addEventListener("change",()=>{e.querySelector("#feeAdd--quantityUnit").disabled=""===e.querySelector("#feeAdd--includeQuantity").value})},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},d=s=>{s.preventDefault();const r=s.currentTarget.closest(".container--fee"),n=Number.parseInt(r.dataset.feeId,10),l=Number.parseInt(r.closest(".container--feeCategory").dataset.feeCategoryId),c=a.find(e=>e.feeCategoryId===l).fees.find(e=>e.feeId===n);let i,d;const u=e=>{e.preventDefault(),cityssm.postJSON(t+"/admin/doUpdateFee",e.currentTarget,e=>{e.success?(a=e.feeCategories,i(),o()):bulmaJS.alert({title:"Error Updating Fee",message:e.errorMessage,contextualColorName:"danger"})})},m=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:()=>{cityssm.postJSON(t+"/admin/doDeleteFee",{feeId:n},e=>{e.success?(a=e.feeCategories,i(),o()):bulmaJS.alert({title:"Error Deleting Fee",message:e.errorMessage,contextualColorName:"danger"})})}}})},y=()=>{const e=d.querySelector("#feeEdit--feeAmount"),t=d.querySelector("#feeEdit--feeFunction");""===t.value?(t.closest(".select").classList.remove("is-success"),e.classList.add("is-success"),e.disabled=!1):(t.closest(".select").classList.add("is-success"),e.classList.remove("is-success"),e.disabled=!0)},p=()=>{const e=d.querySelector("#feeEdit--taxAmount"),t=d.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)},g=()=>{d.querySelector("#feeEdit--quantityUnit").disabled=""===d.querySelector("#feeEdit--includeQuantity").value};cityssm.openHtmlModal("adminFees-editFee",{onshow:t=>{d=t,t.querySelector("#feeEdit--feeId").value=c.feeId.toString();const s=t.querySelector("#feeEdit--feeCategoryId");for(const e of a){const t=document.createElement("option");t.value=e.feeCategoryId.toString(),t.textContent=e.feeCategory,e.feeCategoryId===l&&(t.selected=!0),s.append(t)}t.querySelector("#feeEdit--feeName").value=c.feeName,t.querySelector("#feeEdit--feeDescription").value=c.feeDescription;const o=t.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),o.append(t)}const r=t.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),r.append(t)}t.querySelector("#feeEdit--feeAmount").value=c.feeAmount?c.feeAmount.toFixed(2):"",t.querySelector("#feeEdit--feeFunction").addEventListener("change",y),y(),t.querySelector("#feeEdit--taxAmount").value=c.taxAmount?c.taxAmount.toFixed(2):"";const n=t.querySelector("#feeEdit--taxPercentage");n.value=c.taxPercentage?c.taxPercentage.toString():"",n.addEventListener("keyup",p),p();const i=t.querySelector("#feeEdit--includeQuantity");c.includeQuantity&&(i.value="1"),i.addEventListener("change",g),t.querySelector("#feeEdit--quantityUnit").value=c.quantityUnit||"",g(),c.isRequired&&(t.querySelector("#feeEdit--isRequired").value="1"),e.populateAliases(t)},onshown:(e,t)=>{bulmaJS.toggleHtmlClipped(),i=t,e.querySelector("form").addEventListener("submit",u),bulmaJS.init(e),e.querySelector(".button--deleteFee").addEventListener("click",m)},onremoved:()=>{bulmaJS.toggleHtmlClipped()}})},u=e=>{const s=e.currentTarget.closest(".container--fee"),r=Number.parseInt(s.dataset.feeId,10);cityssm.postJSON(t+"/admin/doMoveFeeUp",{feeId:r},e=>{e.success?(a=e.feeCategories,o()):bulmaJS.alert({title:"Error Moving Fee",message:e.errorMessage,contextualColorName:"danger"})})},m=e=>{const s=e.currentTarget.closest(".container--fee"),r=Number.parseInt(s.dataset.feeId,10);cityssm.postJSON(t+"/admin/doMoveFeeDown",{feeId:r},e=>{e.success?(a=e.feeCategories,o()):bulmaJS.alert({title:"Error Moving Fee",message:e.errorMessage,contextualColorName:"danger"})})};o()})();
\ No newline at end of file
diff --git a/routes/admin.js b/routes/admin.js
index f7ad8289..63c79fa8 100644
--- a/routes/admin.js
+++ b/routes/admin.js
@@ -3,9 +3,13 @@ import * as permissionHandlers from "../handlers/permissions.js";
import handler_fees from "../handlers/admin-get/fees.js";
import handler_doAddFeeCategory from "../handlers/admin-post/doAddFeeCategory.js";
import handler_doUpdateFeeCategory from "../handlers/admin-post/doUpdateFeeCategory.js";
+import handler_doMoveFeeCategoryUp from "../handlers/admin-post/doMoveFeeCategoryUp.js";
+import handler_doMoveFeeCategoryDown from "../handlers/admin-post/doMoveFeeCategoryDown.js";
import handler_doDeleteFeeCategory from "../handlers/admin-post/doDeleteFeeCategory.js";
import handler_doAddFee from "../handlers/admin-post/doAddFee.js";
import handler_doUpdateFee from "../handlers/admin-post/doUpdateFee.js";
+import handler_doMoveFeeUp from "../handlers/admin-post/doMoveFeeUp.js";
+import handler_doMoveFeeDown from "../handlers/admin-post/doMoveFeeDown.js";
import handler_doDeleteFee from "../handlers/admin-post/doDeleteFee.js";
import handler_tables from "../handlers/admin-get/tables.js";
import handler_doAddWorkOrderType from "../handlers/admin-post/doAddWorkOrderType.js";
@@ -27,9 +31,13 @@ export const router = Router();
router.get("/fees", permissionHandlers.adminGetHandler, handler_fees);
router.post("/doAddFeeCategory", permissionHandlers.adminPostHandler, handler_doAddFeeCategory);
router.post("/doUpdateFeeCategory", permissionHandlers.adminPostHandler, handler_doUpdateFeeCategory);
+router.post("/doMoveFeeCategoryUp", permissionHandlers.adminPostHandler, handler_doMoveFeeCategoryUp);
+router.post("/doMoveFeeCategoryDown", permissionHandlers.adminPostHandler, handler_doMoveFeeCategoryDown);
router.post("/doDeleteFeeCategory", permissionHandlers.adminPostHandler, handler_doDeleteFeeCategory);
router.post("/doAddFee", permissionHandlers.adminPostHandler, handler_doAddFee);
router.post("/doUpdateFee", permissionHandlers.adminPostHandler, handler_doUpdateFee);
+router.post("/doMoveFeeUp", permissionHandlers.adminPostHandler, handler_doMoveFeeUp);
+router.post("/doMoveFeeDown", permissionHandlers.adminPostHandler, handler_doMoveFeeDown);
router.post("/doDeleteFee", permissionHandlers.adminPostHandler, handler_doDeleteFee);
router.get("/tables", permissionHandlers.adminGetHandler, handler_tables);
router.post("/doAddWorkOrderType", permissionHandlers.adminPostHandler, handler_doAddWorkOrderType);
diff --git a/routes/admin.ts b/routes/admin.ts
index 02c844f9..3d44cd44 100644
--- a/routes/admin.ts
+++ b/routes/admin.ts
@@ -7,10 +7,14 @@ import * as permissionHandlers from "../handlers/permissions.js";
import handler_fees from "../handlers/admin-get/fees.js";
import handler_doAddFeeCategory from "../handlers/admin-post/doAddFeeCategory.js";
import handler_doUpdateFeeCategory from "../handlers/admin-post/doUpdateFeeCategory.js";
+import handler_doMoveFeeCategoryUp from "../handlers/admin-post/doMoveFeeCategoryUp.js";
+import handler_doMoveFeeCategoryDown from "../handlers/admin-post/doMoveFeeCategoryDown.js";
import handler_doDeleteFeeCategory from "../handlers/admin-post/doDeleteFeeCategory.js";
import handler_doAddFee from "../handlers/admin-post/doAddFee.js";
import handler_doUpdateFee from "../handlers/admin-post/doUpdateFee.js";
+import handler_doMoveFeeUp from "../handlers/admin-post/doMoveFeeUp.js";
+import handler_doMoveFeeDown from "../handlers/admin-post/doMoveFeeDown.js";
import handler_doDeleteFee from "../handlers/admin-post/doDeleteFee.js";
import handler_tables from "../handlers/admin-get/tables.js";
@@ -51,6 +55,14 @@ router.post("/doUpdateFeeCategory",
permissionHandlers.adminPostHandler,
handler_doUpdateFeeCategory);
+router.post("/doMoveFeeCategoryUp",
+ permissionHandlers.adminPostHandler,
+ handler_doMoveFeeCategoryUp);
+
+router.post("/doMoveFeeCategoryDown",
+ permissionHandlers.adminPostHandler,
+ handler_doMoveFeeCategoryDown);
+
router.post("/doDeleteFeeCategory",
permissionHandlers.adminPostHandler,
handler_doDeleteFeeCategory);
@@ -63,6 +75,14 @@ router.post("/doUpdateFee",
permissionHandlers.adminPostHandler,
handler_doUpdateFee);
+router.post("/doMoveFeeUp",
+ permissionHandlers.adminPostHandler,
+ handler_doMoveFeeUp);
+
+router.post("/doMoveFeeDown",
+ permissionHandlers.adminPostHandler,
+ handler_doMoveFeeDown);
+
router.post("/doDeleteFee",
permissionHandlers.adminPostHandler,
handler_doDeleteFee);