diff --git a/handlers/admin-post/doMoveFeeCategoryDown.js b/handlers/admin-post/doMoveFeeCategoryDown.js index c671280a..44474bd2 100644 --- a/handlers/admin-post/doMoveFeeCategoryDown.js +++ b/handlers/admin-post/doMoveFeeCategoryDown.js @@ -1,7 +1,9 @@ -import { moveFeeCategoryDown } from "../../helpers/lotOccupancyDB/moveFeeCategoryDown.js"; +import { moveFeeCategoryDown, moveFeeCategoryDownToBottom } 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 success = request.body.moveToBottom === "1" + ? moveFeeCategoryDownToBottom(request.body.feeCategoryId) + : moveFeeCategoryDown(request.body.feeCategoryId); const feeCategories = getFeeCategories({}, { includeFees: true }); diff --git a/handlers/admin-post/doMoveFeeCategoryDown.ts b/handlers/admin-post/doMoveFeeCategoryDown.ts index 36d885ff..5b0e9ffa 100644 --- a/handlers/admin-post/doMoveFeeCategoryDown.ts +++ b/handlers/admin-post/doMoveFeeCategoryDown.ts @@ -1,11 +1,17 @@ import type { RequestHandler } from "express"; -import { moveFeeCategoryDown } from "../../helpers/lotOccupancyDB/moveFeeCategoryDown.js"; +import { + moveFeeCategoryDown, + moveFeeCategoryDownToBottom +} 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 success = + request.body.moveToBottom === "1" + ? moveFeeCategoryDownToBottom(request.body.feeCategoryId) + : moveFeeCategoryDown(request.body.feeCategoryId); const feeCategories = getFeeCategories( {}, diff --git a/handlers/admin-post/doMoveFeeCategoryUp.js b/handlers/admin-post/doMoveFeeCategoryUp.js index 4a8844b4..0c1b3675 100644 --- a/handlers/admin-post/doMoveFeeCategoryUp.js +++ b/handlers/admin-post/doMoveFeeCategoryUp.js @@ -1,7 +1,9 @@ -import { moveFeeCategoryUp } from "../../helpers/lotOccupancyDB/moveFeeCategoryUp.js"; +import { moveFeeCategoryUp, moveFeeCategoryUpToTop } 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 success = request.body.moveToTop === "1" + ? moveFeeCategoryUpToTop(request.body.feeCategoryId) + : moveFeeCategoryUp(request.body.feeCategoryId); const feeCategories = getFeeCategories({}, { includeFees: true }); diff --git a/handlers/admin-post/doMoveFeeCategoryUp.ts b/handlers/admin-post/doMoveFeeCategoryUp.ts index ab5c485e..256337f2 100644 --- a/handlers/admin-post/doMoveFeeCategoryUp.ts +++ b/handlers/admin-post/doMoveFeeCategoryUp.ts @@ -1,11 +1,17 @@ import type { RequestHandler } from "express"; -import { moveFeeCategoryUp } from "../../helpers/lotOccupancyDB/moveFeeCategoryUp.js"; +import { + moveFeeCategoryUp, + moveFeeCategoryUpToTop +} 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 success = + request.body.moveToTop === "1" + ? moveFeeCategoryUpToTop(request.body.feeCategoryId) + : moveFeeCategoryUp(request.body.feeCategoryId); const feeCategories = getFeeCategories( {}, diff --git a/handlers/admin-post/doMoveFeeDown.js b/handlers/admin-post/doMoveFeeDown.js index 43eb9839..0308accd 100644 --- a/handlers/admin-post/doMoveFeeDown.js +++ b/handlers/admin-post/doMoveFeeDown.js @@ -1,7 +1,9 @@ -import { moveFeeDown } from "../../helpers/lotOccupancyDB/moveFeeDown.js"; +import { moveFeeDown, moveFeeDownToBottom } 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 success = request.body.moveToBottom === "1" + ? moveFeeDownToBottom(request.body.feeId) + : moveFeeDown(request.body.feeId); const feeCategories = getFeeCategories({}, { includeFees: true }); diff --git a/handlers/admin-post/doMoveFeeDown.ts b/handlers/admin-post/doMoveFeeDown.ts index d1dcb369..5434e859 100644 --- a/handlers/admin-post/doMoveFeeDown.ts +++ b/handlers/admin-post/doMoveFeeDown.ts @@ -1,11 +1,14 @@ import type { RequestHandler } from "express"; -import { moveFeeDown } from "../../helpers/lotOccupancyDB/moveFeeDown.js"; +import { moveFeeDown, moveFeeDownToBottom } 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 success = + request.body.moveToBottom === "1" + ? moveFeeDownToBottom(request.body.feeId) + : moveFeeDown(request.body.feeId); const feeCategories = getFeeCategories( {}, diff --git a/handlers/admin-post/doMoveFeeUp.js b/handlers/admin-post/doMoveFeeUp.js index d20042bc..b98ffc48 100644 --- a/handlers/admin-post/doMoveFeeUp.js +++ b/handlers/admin-post/doMoveFeeUp.js @@ -1,7 +1,9 @@ -import { moveFeeUp } from "../../helpers/lotOccupancyDB/moveFeeUp.js"; +import { moveFeeUp, moveFeeUpToTop } 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 success = request.body.moveToTop === "1" + ? moveFeeUpToTop(request.body.feeId) + : moveFeeUp(request.body.feeId); const feeCategories = getFeeCategories({}, { includeFees: true }); diff --git a/handlers/admin-post/doMoveFeeUp.ts b/handlers/admin-post/doMoveFeeUp.ts index 4e882ec8..8bf92f8b 100644 --- a/handlers/admin-post/doMoveFeeUp.ts +++ b/handlers/admin-post/doMoveFeeUp.ts @@ -1,11 +1,14 @@ import type { RequestHandler } from "express"; -import { moveFeeUp } from "../../helpers/lotOccupancyDB/moveFeeUp.js"; +import { moveFeeUp, moveFeeUpToTop } 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 success = + request.body.moveToTop === "1" + ? moveFeeUpToTop(request.body.feeId) + : moveFeeUp(request.body.feeId); const feeCategories = getFeeCategories( {}, diff --git a/helpers/lotOccupancyDB/addFee.js b/helpers/lotOccupancyDB/addFee.js index 687dd3eb..09b6507a 100644 --- a/helpers/lotOccupancyDB/addFee.js +++ b/helpers/lotOccupancyDB/addFee.js @@ -14,7 +14,7 @@ export const addFee = (feeForm, requestSession) => { " recordCreate_userName, recordCreate_timeMillis," + " recordUpdate_userName, recordUpdate_timeMillis)" + " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") - .run(feeForm.feeCategoryId, feeForm.feeName, feeForm.feeDescription, feeForm.occupancyTypeId || undefined, feeForm.lotTypeId || undefined, feeForm.feeAmount || undefined, feeForm.feeFunction || undefined, feeForm.taxAmount || undefined, feeForm.taxPercentage || undefined, feeForm.includeQuantity ? 1 : 0, feeForm.quantityUnit, feeForm.isRequired ? 1 : 0, feeForm.orderNumber || 0, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis); + .run(feeForm.feeCategoryId, feeForm.feeName, feeForm.feeDescription, feeForm.occupancyTypeId || undefined, feeForm.lotTypeId || undefined, feeForm.feeAmount || undefined, feeForm.feeFunction || undefined, feeForm.taxAmount || undefined, feeForm.taxPercentage || undefined, feeForm.includeQuantity ? 1 : 0, feeForm.quantityUnit, feeForm.isRequired ? 1 : 0, feeForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis); database.close(); return result.lastInsertRowid; }; diff --git a/helpers/lotOccupancyDB/addFee.ts b/helpers/lotOccupancyDB/addFee.ts index 5f3d91a2..345da39b 100644 --- a/helpers/lotOccupancyDB/addFee.ts +++ b/helpers/lotOccupancyDB/addFee.ts @@ -53,7 +53,7 @@ export const addFee = ( feeForm.includeQuantity ? 1 : 0, feeForm.quantityUnit, feeForm.isRequired ? 1 : 0, - feeForm.orderNumber || 0, + feeForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, diff --git a/helpers/lotOccupancyDB/addFeeCategory.js b/helpers/lotOccupancyDB/addFeeCategory.js index 829ef786..7d2bd35e 100644 --- a/helpers/lotOccupancyDB/addFeeCategory.js +++ b/helpers/lotOccupancyDB/addFeeCategory.js @@ -9,7 +9,7 @@ export const addFeeCategory = (feeCategoryForm, requestSession) => { " recordCreate_userName, recordCreate_timeMillis," + " recordUpdate_userName, recordUpdate_timeMillis)" + " values (?, ?, ?, ?, ?, ?)") - .run(feeCategoryForm.feeCategory, feeCategoryForm.orderNumber || 0, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis); + .run(feeCategoryForm.feeCategory, feeCategoryForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis); database.close(); return result.lastInsertRowid; }; diff --git a/helpers/lotOccupancyDB/addFeeCategory.ts b/helpers/lotOccupancyDB/addFeeCategory.ts index c19a9f17..1503e17e 100644 --- a/helpers/lotOccupancyDB/addFeeCategory.ts +++ b/helpers/lotOccupancyDB/addFeeCategory.ts @@ -26,7 +26,7 @@ export const addFeeCategory = ( ) .run( feeCategoryForm.feeCategory, - feeCategoryForm.orderNumber || 0, + feeCategoryForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, diff --git a/helpers/lotOccupancyDB/getFee.d.ts b/helpers/lotOccupancyDB/getFee.d.ts index 51bff88e..066f6937 100644 --- a/helpers/lotOccupancyDB/getFee.d.ts +++ b/helpers/lotOccupancyDB/getFee.d.ts @@ -1,3 +1,4 @@ +import sqlite from "better-sqlite3"; import type * as recordTypes from "../../types/recordTypes"; -export declare const getFee: (feeId: number | string) => recordTypes.Fee; +export declare const getFee: (feeId: number | string, connectedDatabase?: sqlite.Database) => recordTypes.Fee; export default getFee; diff --git a/helpers/lotOccupancyDB/getFee.js b/helpers/lotOccupancyDB/getFee.js index d9e50047..032e9e3e 100644 --- a/helpers/lotOccupancyDB/getFee.js +++ b/helpers/lotOccupancyDB/getFee.js @@ -1,9 +1,10 @@ import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; -export const getFee = (feeId) => { - const database = sqlite(databasePath, { - readonly: true - }); +export const getFee = (feeId, connectedDatabase) => { + const database = connectedDatabase || + sqlite(databasePath, { + readonly: true + }); const fee = database .prepare("select f.feeId," + " f.feeCategoryId, c.feeCategory," + @@ -13,7 +14,7 @@ export const getFee = (feeId) => { " ifnull(f.feeAmount, 0) as feeAmount, f.feeFunction," + " f.taxAmount, f.taxPercentage," + " f.includeQuantity, f.quantityUnit," + - " f.isRequired" + + " f.isRequired, f.orderNumber" + " from Fees f" + " left join FeeCategories c on f.feeCategoryId = c.feeCategoryId" + " left join OccupancyTypes o on f.occupancyTypeId = o.occupancyTypeId" + @@ -21,7 +22,9 @@ export const getFee = (feeId) => { " where f.recordDelete_timeMillis is null" + " and f.feeId = ?") .get(feeId); - database.close(); + if (!connectedDatabase) { + database.close(); + } return fee; }; export default getFee; diff --git a/helpers/lotOccupancyDB/getFee.ts b/helpers/lotOccupancyDB/getFee.ts index 2de99911..402bc5c9 100644 --- a/helpers/lotOccupancyDB/getFee.ts +++ b/helpers/lotOccupancyDB/getFee.ts @@ -4,10 +4,15 @@ import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import type * as recordTypes from "../../types/recordTypes"; -export const getFee = (feeId: number | string): recordTypes.Fee => { - const database = sqlite(databasePath, { - readonly: true - }); +export const getFee = ( + feeId: number | string, + connectedDatabase?: sqlite.Database +): recordTypes.Fee => { + const database = + connectedDatabase || + sqlite(databasePath, { + readonly: true + }); const fee = database .prepare( @@ -19,7 +24,7 @@ export const getFee = (feeId: number | string): recordTypes.Fee => { " ifnull(f.feeAmount, 0) as feeAmount, f.feeFunction," + " f.taxAmount, f.taxPercentage," + " f.includeQuantity, f.quantityUnit," + - " f.isRequired" + + " f.isRequired, f.orderNumber" + " from Fees f" + " left join FeeCategories c on f.feeCategoryId = c.feeCategoryId" + " left join OccupancyTypes o on f.occupancyTypeId = o.occupancyTypeId" + @@ -29,7 +34,9 @@ export const getFee = (feeId: number | string): recordTypes.Fee => { ) .get(feeId); - database.close(); + if (!connectedDatabase) { + database.close(); + } return fee; }; diff --git a/helpers/lotOccupancyDB/moveFeeCategoryDown.d.ts b/helpers/lotOccupancyDB/moveFeeCategoryDown.d.ts index e032c071..ad106d73 100644 --- a/helpers/lotOccupancyDB/moveFeeCategoryDown.d.ts +++ b/helpers/lotOccupancyDB/moveFeeCategoryDown.d.ts @@ -1,2 +1,3 @@ export declare const moveFeeCategoryDown: (feeCategoryId: number | string) => boolean; +export declare const moveFeeCategoryDownToBottom: (feeCategoryId: number | string) => boolean; export default moveFeeCategoryDown; diff --git a/helpers/lotOccupancyDB/moveFeeCategoryDown.js b/helpers/lotOccupancyDB/moveFeeCategoryDown.js index 86d24b51..a8cdd809 100644 --- a/helpers/lotOccupancyDB/moveFeeCategoryDown.js +++ b/helpers/lotOccupancyDB/moveFeeCategoryDown.js @@ -3,9 +3,7 @@ import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; export const moveFeeCategoryDown = (feeCategoryId) => { const database = sqlite(databasePath); const currentOrderNumber = database - .prepare("select orderNumber" + - " from FeeCategories" + - " where feeCategoryId = ?") + .prepare("select orderNumber from FeeCategories where feeCategoryId = ?") .get(feeCategoryId).orderNumber; database .prepare("update FeeCategories" + @@ -14,11 +12,33 @@ export const moveFeeCategoryDown = (feeCategoryId) => { " and orderNumber = ? + 1") .run(currentOrderNumber); const result = database - .prepare("update FeeCategories" + - " set orderNumber = ? + 1" + - " where feeCategoryId = ?") + .prepare("update FeeCategories set orderNumber = ? + 1 where feeCategoryId = ?") .run(currentOrderNumber, feeCategoryId); database.close(); return result.changes > 0; }; +export const moveFeeCategoryDownToBottom = (feeCategoryId) => { + const database = sqlite(databasePath); + const currentOrderNumber = database + .prepare("select orderNumber from FeeCategories where feeCategoryId = ?") + .get(feeCategoryId).orderNumber; + const maxOrderNumber = database + .prepare("select max(orderNumber) as maxOrderNumber" + + " from FeeCategories" + + " where recordDelete_timeMillis is null") + .get().maxOrderNumber; + if (currentOrderNumber !== maxOrderNumber) { + database + .prepare("update FeeCategories set orderNumber = ? + 1 where feeCategoryId = ?") + .run(maxOrderNumber, feeCategoryId); + database + .prepare("update FeeCategories" + + " set orderNumber = orderNumber - 1" + + " where recordDelete_timeMillis is null" + + " and orderNumber > ?") + .run(currentOrderNumber); + } + database.close(); + return true; +}; export default moveFeeCategoryDown; diff --git a/helpers/lotOccupancyDB/moveFeeCategoryDown.ts b/helpers/lotOccupancyDB/moveFeeCategoryDown.ts index 6c83b998..d1a1548f 100644 --- a/helpers/lotOccupancyDB/moveFeeCategoryDown.ts +++ b/helpers/lotOccupancyDB/moveFeeCategoryDown.ts @@ -2,17 +2,11 @@ import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; -export const moveFeeCategoryDown = ( - feeCategoryId: number | string -): boolean => { +export const moveFeeCategoryDown = (feeCategoryId: number | string): boolean => { const database = sqlite(databasePath); const currentOrderNumber: number = database - .prepare( - "select orderNumber" + - " from FeeCategories" + - " where feeCategoryId = ?" - ) + .prepare("select orderNumber from FeeCategories where feeCategoryId = ?") .get(feeCategoryId).orderNumber; database @@ -25,11 +19,7 @@ export const moveFeeCategoryDown = ( .run(currentOrderNumber); const result = database - .prepare( - "update FeeCategories" + - " set orderNumber = ? + 1" + - " where feeCategoryId = ?" - ) + .prepare("update FeeCategories set orderNumber = ? + 1 where feeCategoryId = ?") .run(currentOrderNumber, feeCategoryId); database.close(); @@ -37,4 +27,39 @@ export const moveFeeCategoryDown = ( return result.changes > 0; }; +export const moveFeeCategoryDownToBottom = (feeCategoryId: number | string): boolean => { + const database = sqlite(databasePath); + + const currentOrderNumber: number = database + .prepare("select orderNumber from FeeCategories where feeCategoryId = ?") + .get(feeCategoryId).orderNumber; + + const maxOrderNumber: number = database + .prepare( + "select max(orderNumber) as maxOrderNumber" + + " from FeeCategories" + + " where recordDelete_timeMillis is null" + ) + .get().maxOrderNumber; + + if (currentOrderNumber !== maxOrderNumber) { + database + .prepare("update FeeCategories set orderNumber = ? + 1 where feeCategoryId = ?") + .run(maxOrderNumber, feeCategoryId); + + database + .prepare( + "update FeeCategories" + + " set orderNumber = orderNumber - 1" + + " where recordDelete_timeMillis is null" + + " and orderNumber > ?" + ) + .run(currentOrderNumber); + } + + database.close(); + + return true; +}; + export default moveFeeCategoryDown; diff --git a/helpers/lotOccupancyDB/moveFeeCategoryUp.d.ts b/helpers/lotOccupancyDB/moveFeeCategoryUp.d.ts index 87edbda2..d1389eca 100644 --- a/helpers/lotOccupancyDB/moveFeeCategoryUp.d.ts +++ b/helpers/lotOccupancyDB/moveFeeCategoryUp.d.ts @@ -1,2 +1,3 @@ export declare const moveFeeCategoryUp: (feeCategoryId: number | string) => boolean; +export declare const moveFeeCategoryUpToTop: (feeCategoryId: number | string) => boolean; export default moveFeeCategoryUp; diff --git a/helpers/lotOccupancyDB/moveFeeCategoryUp.js b/helpers/lotOccupancyDB/moveFeeCategoryUp.js index a3fb7bc1..9012f7b0 100644 --- a/helpers/lotOccupancyDB/moveFeeCategoryUp.js +++ b/helpers/lotOccupancyDB/moveFeeCategoryUp.js @@ -3,9 +3,7 @@ import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; export const moveFeeCategoryUp = (feeCategoryId) => { const database = sqlite(databasePath); const currentOrderNumber = database - .prepare("select orderNumber" + - " from FeeCategories" + - " where feeCategoryId = ?") + .prepare("select orderNumber from FeeCategories where feeCategoryId = ?") .get(feeCategoryId).orderNumber; if (currentOrderNumber <= 0) { database.close(); @@ -18,11 +16,28 @@ export const moveFeeCategoryUp = (feeCategoryId) => { " and orderNumber = ? - 1") .run(currentOrderNumber); const result = database - .prepare("update FeeCategories" + - " set orderNumber = ? - 1" + - " where feeCategoryId = ?") + .prepare("update FeeCategories set orderNumber = ? - 1 where feeCategoryId = ?") .run(currentOrderNumber, feeCategoryId); database.close(); return result.changes > 0; }; +export const moveFeeCategoryUpToTop = (feeCategoryId) => { + const database = sqlite(databasePath); + const currentOrderNumber = database + .prepare("select orderNumber from FeeCategories where feeCategoryId = ?") + .get(feeCategoryId).orderNumber; + if (currentOrderNumber > 0) { + database + .prepare("update FeeCategories set orderNumber = -1 where feeCategoryId = ?") + .run(feeCategoryId); + database + .prepare("update FeeCategories" + + " set orderNumber = orderNumber + 1" + + " where recordDelete_timeMillis is null" + + " and orderNumber < ?") + .run(currentOrderNumber); + } + database.close(); + return true; +}; export default moveFeeCategoryUp; diff --git a/helpers/lotOccupancyDB/moveFeeCategoryUp.ts b/helpers/lotOccupancyDB/moveFeeCategoryUp.ts index fbdfff6f..1ca0df6d 100644 --- a/helpers/lotOccupancyDB/moveFeeCategoryUp.ts +++ b/helpers/lotOccupancyDB/moveFeeCategoryUp.ts @@ -6,11 +6,7 @@ export const moveFeeCategoryUp = (feeCategoryId: number | string): boolean => { const database = sqlite(databasePath); const currentOrderNumber: number = database - .prepare( - "select orderNumber" + - " from FeeCategories" + - " where feeCategoryId = ?" - ) + .prepare("select orderNumber from FeeCategories where feeCategoryId = ?") .get(feeCategoryId).orderNumber; if (currentOrderNumber <= 0) { @@ -28,11 +24,7 @@ export const moveFeeCategoryUp = (feeCategoryId: number | string): boolean => { .run(currentOrderNumber); const result = database - .prepare( - "update FeeCategories" + - " set orderNumber = ? - 1" + - " where feeCategoryId = ?" - ) + .prepare("update FeeCategories set orderNumber = ? - 1 where feeCategoryId = ?") .run(currentOrderNumber, feeCategoryId); database.close(); @@ -40,4 +32,31 @@ export const moveFeeCategoryUp = (feeCategoryId: number | string): boolean => { return result.changes > 0; }; +export const moveFeeCategoryUpToTop = (feeCategoryId: number | string): boolean => { + const database = sqlite(databasePath); + + const currentOrderNumber: number = database + .prepare("select orderNumber from FeeCategories where feeCategoryId = ?") + .get(feeCategoryId).orderNumber; + + if (currentOrderNumber > 0) { + database + .prepare("update FeeCategories set orderNumber = -1 where feeCategoryId = ?") + .run(feeCategoryId); + + database + .prepare( + "update FeeCategories" + + " set orderNumber = orderNumber + 1" + + " where recordDelete_timeMillis is null" + + " and orderNumber < ?" + ) + .run(currentOrderNumber); + } + + database.close(); + + return true; +}; + export default moveFeeCategoryUp; diff --git a/helpers/lotOccupancyDB/moveFeeDown.d.ts b/helpers/lotOccupancyDB/moveFeeDown.d.ts index 26c37023..8743aed8 100644 --- a/helpers/lotOccupancyDB/moveFeeDown.d.ts +++ b/helpers/lotOccupancyDB/moveFeeDown.d.ts @@ -1,2 +1,3 @@ export declare const moveFeeDown: (feeId: number | string) => boolean; +export declare const moveFeeDownToBottom: (feeId: number | string) => boolean; export default moveFeeDown; diff --git a/helpers/lotOccupancyDB/moveFeeDown.js b/helpers/lotOccupancyDB/moveFeeDown.js index 38b3769d..ff09a095 100644 --- a/helpers/lotOccupancyDB/moveFeeDown.js +++ b/helpers/lotOccupancyDB/moveFeeDown.js @@ -1,20 +1,44 @@ import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; +import { getFee } from "./getFee.js"; export const moveFeeDown = (feeId) => { const database = sqlite(databasePath); - const currentOrderNumber = database - .prepare("select orderNumber" + " from Fees" + " where feeId = ?") - .get(feeId).orderNumber; + const currentFee = getFee(feeId, database); database .prepare("update Fees" + " set orderNumber = orderNumber - 1" + " where recordDelete_timeMillis is null" + + " and feeCategoryId = ?" + " and orderNumber = ? + 1") - .run(currentOrderNumber); + .run(currentFee.feeCategoryId, currentFee.orderNumber); const result = database - .prepare("update Fees" + " set orderNumber = ? + 1" + " where feeId = ?") - .run(currentOrderNumber, feeId); + .prepare("update Fees set orderNumber = ? + 1 where feeId = ?") + .run(currentFee.orderNumber, feeId); database.close(); return result.changes > 0; }; +export const moveFeeDownToBottom = (feeId) => { + const database = sqlite(databasePath); + const currentFee = getFee(feeId, database); + const maxOrderNumber = database + .prepare("select max(orderNumber) as maxOrderNumber" + + " from Fees" + + " where recordDelete_timeMillis is null" + + " and feeCategoryId = ?") + .get(currentFee.feeCategoryId).maxOrderNumber; + if (currentFee.orderNumber !== maxOrderNumber) { + database + .prepare("update Fees set orderNumber = ? + 1 where feeId = ?") + .run(maxOrderNumber, feeId); + database + .prepare("update Fees" + + " set orderNumber = orderNumber - 1" + + " where recordDelete_timeMillis is null" + + " and feeCategoryId = ?" + + " and orderNumber > ?") + .run(currentFee.feeCategoryId, currentFee.orderNumber); + } + database.close(); + return true; +}; export default moveFeeDown; diff --git a/helpers/lotOccupancyDB/moveFeeDown.ts b/helpers/lotOccupancyDB/moveFeeDown.ts index 3ddbd53b..19544477 100644 --- a/helpers/lotOccupancyDB/moveFeeDown.ts +++ b/helpers/lotOccupancyDB/moveFeeDown.ts @@ -2,31 +2,65 @@ import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; +import { getFee } from "./getFee.js"; + export const moveFeeDown = (feeId: number | string): boolean => { const database = sqlite(databasePath); - const currentOrderNumber: number = database - .prepare("select orderNumber" + " from Fees" + " where feeId = ?") - .get(feeId).orderNumber; + const currentFee = getFee(feeId, database); database .prepare( "update Fees" + " set orderNumber = orderNumber - 1" + " where recordDelete_timeMillis is null" + + " and feeCategoryId = ?" + " and orderNumber = ? + 1" ) - .run(currentOrderNumber); + .run(currentFee.feeCategoryId, currentFee.orderNumber); const result = database - .prepare( - "update Fees" + " set orderNumber = ? + 1" + " where feeId = ?" - ) - .run(currentOrderNumber, feeId); + .prepare("update Fees set orderNumber = ? + 1 where feeId = ?") + .run(currentFee.orderNumber, feeId); database.close(); return result.changes > 0; }; +export const moveFeeDownToBottom = (feeId: number | string): boolean => { + const database = sqlite(databasePath); + + const currentFee = getFee(feeId, database); + + const maxOrderNumber: number = database + .prepare( + "select max(orderNumber) as maxOrderNumber" + + " from Fees" + + " where recordDelete_timeMillis is null" + + " and feeCategoryId = ?" + ) + .get(currentFee.feeCategoryId).maxOrderNumber; + + if (currentFee.orderNumber !== maxOrderNumber) { + database + .prepare("update Fees set orderNumber = ? + 1 where feeId = ?") + .run(maxOrderNumber, feeId); + + database + .prepare( + "update Fees" + + " set orderNumber = orderNumber - 1" + + " where recordDelete_timeMillis is null" + + " and feeCategoryId = ?" + + " and orderNumber > ?" + ) + .run(currentFee.feeCategoryId, currentFee.orderNumber); + } + + database.close(); + + return true; +}; + export default moveFeeDown; diff --git a/helpers/lotOccupancyDB/moveFeeUp.d.ts b/helpers/lotOccupancyDB/moveFeeUp.d.ts index 1e7c0999..9d14c129 100644 --- a/helpers/lotOccupancyDB/moveFeeUp.d.ts +++ b/helpers/lotOccupancyDB/moveFeeUp.d.ts @@ -1,2 +1,3 @@ export declare const moveFeeUp: (feeId: number | string) => boolean; +export declare const moveFeeUpToTop: (feeId: number | string) => boolean; export default moveFeeUp; diff --git a/helpers/lotOccupancyDB/moveFeeUp.js b/helpers/lotOccupancyDB/moveFeeUp.js index 47ead832..fe11c013 100644 --- a/helpers/lotOccupancyDB/moveFeeUp.js +++ b/helpers/lotOccupancyDB/moveFeeUp.js @@ -1,11 +1,10 @@ import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; +import { getFee } from "./getFee.js"; export const moveFeeUp = (feeId) => { const database = sqlite(databasePath); - const currentOrderNumber = database - .prepare("select orderNumber" + " from Fees" + " where feeId = ?") - .get(feeId).orderNumber; - if (currentOrderNumber <= 0) { + const currentFee = getFee(feeId, database); + if (currentFee.orderNumber <= 0) { database.close(); return true; } @@ -13,12 +12,29 @@ export const moveFeeUp = (feeId) => { .prepare("update Fees" + " set orderNumber = orderNumber + 1" + " where recordDelete_timeMillis is null" + + " and feeCategoryId = ?" + " and orderNumber = ? - 1") - .run(currentOrderNumber); + .run(currentFee.feeCategoryId, currentFee.orderNumber); const result = database - .prepare("update Fees" + " set orderNumber = ? - 1" + " where feeId = ?") - .run(currentOrderNumber, feeId); + .prepare("update Fees set orderNumber = ? - 1 where feeId = ?") + .run(currentFee.orderNumber, feeId); database.close(); return result.changes > 0; }; +export const moveFeeUpToTop = (feeId) => { + const database = sqlite(databasePath); + const currentFee = getFee(feeId, database); + if (currentFee.orderNumber > 0) { + database.prepare("update Fees set orderNumber = -1 where feeId = ?").run(feeId); + database + .prepare("update Fees" + + " set orderNumber = orderNumber + 1" + + " where recordDelete_timeMillis is null" + + " and feeCategoryId = ?" + + " and orderNumber < ?") + .run(currentFee.feeCategoryId, currentFee.orderNumber); + } + database.close(); + return true; +}; export default moveFeeUp; diff --git a/helpers/lotOccupancyDB/moveFeeUp.ts b/helpers/lotOccupancyDB/moveFeeUp.ts index 02849bba..19229d7b 100644 --- a/helpers/lotOccupancyDB/moveFeeUp.ts +++ b/helpers/lotOccupancyDB/moveFeeUp.ts @@ -2,14 +2,14 @@ import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; +import { getFee } from "./getFee.js"; + export const moveFeeUp = (feeId: number | string): boolean => { const database = sqlite(databasePath); - const currentOrderNumber: number = database - .prepare("select orderNumber" + " from Fees" + " where feeId = ?") - .get(feeId).orderNumber; + const currentFee = getFee(feeId, database); - if (currentOrderNumber <= 0) { + if (currentFee.orderNumber <= 0) { database.close(); return true; } @@ -19,19 +19,42 @@ export const moveFeeUp = (feeId: number | string): boolean => { "update Fees" + " set orderNumber = orderNumber + 1" + " where recordDelete_timeMillis is null" + + " and feeCategoryId = ?" + " and orderNumber = ? - 1" ) - .run(currentOrderNumber); + .run(currentFee.feeCategoryId, currentFee.orderNumber); const result = database - .prepare( - "update Fees" + " set orderNumber = ? - 1" + " where feeId = ?" - ) - .run(currentOrderNumber, feeId); + .prepare("update Fees set orderNumber = ? - 1 where feeId = ?") + .run(currentFee.orderNumber, feeId); database.close(); return result.changes > 0; }; +export const moveFeeUpToTop = (feeId: number | string): boolean => { + const database = sqlite(databasePath); + + const currentFee = getFee(feeId, database); + + if (currentFee.orderNumber > 0) { + database.prepare("update Fees set orderNumber = -1 where feeId = ?").run(feeId); + + database + .prepare( + "update Fees" + + " set orderNumber = orderNumber + 1" + + " where recordDelete_timeMillis is null" + + " and feeCategoryId = ?" + + " and orderNumber < ?" + ) + .run(currentFee.feeCategoryId, currentFee.orderNumber); + } + + database.close(); + + return true; +}; + export default moveFeeUp; diff --git a/helpers/lotOccupancyDB/moveLotTypeFieldUp.js b/helpers/lotOccupancyDB/moveLotTypeFieldUp.js index b9f61628..0878c04a 100644 --- a/helpers/lotOccupancyDB/moveLotTypeFieldUp.js +++ b/helpers/lotOccupancyDB/moveLotTypeFieldUp.js @@ -4,7 +4,7 @@ import { clearLotTypesCache } from "../functions.cache.js"; export const moveLotTypeFieldUp = (lotTypeFieldId) => { const database = sqlite(databasePath); const currentField = database - .prepare("select lotTypeId, orderNumber" + " from LotTypeFields" + " where lotTypeFieldId = ?") + .prepare("select lotTypeId, orderNumber from LotTypeFields where lotTypeFieldId = ?") .get(lotTypeFieldId); if (currentField.orderNumber <= 0) { database.close(); @@ -18,7 +18,7 @@ export const moveLotTypeFieldUp = (lotTypeFieldId) => { " and orderNumber = ? - 1") .run(currentField.lotTypeId, currentField.orderNumber); const result = database - .prepare("update LotTypeFields" + " set orderNumber = ? - 1" + " where lotTypeFieldId = ?") + .prepare("update LotTypeFields set orderNumber = ? - 1 where lotTypeFieldId = ?") .run(currentField.orderNumber, lotTypeFieldId); database.close(); clearLotTypesCache(); diff --git a/helpers/lotOccupancyDB/moveLotTypeFieldUp.ts b/helpers/lotOccupancyDB/moveLotTypeFieldUp.ts index 402945d7..a35c7a12 100644 --- a/helpers/lotOccupancyDB/moveLotTypeFieldUp.ts +++ b/helpers/lotOccupancyDB/moveLotTypeFieldUp.ts @@ -8,9 +8,7 @@ export const moveLotTypeFieldUp = (lotTypeFieldId: number | string): boolean => const database = sqlite(databasePath); const currentField: { lotTypeId: number; orderNumber: number } = database - .prepare( - "select lotTypeId, orderNumber" + " from LotTypeFields" + " where lotTypeFieldId = ?" - ) + .prepare("select lotTypeId, orderNumber from LotTypeFields where lotTypeFieldId = ?") .get(lotTypeFieldId); if (currentField.orderNumber <= 0) { @@ -29,7 +27,7 @@ export const moveLotTypeFieldUp = (lotTypeFieldId: number | string): boolean => .run(currentField.lotTypeId, currentField.orderNumber); const result = database - .prepare("update LotTypeFields" + " set orderNumber = ? - 1" + " where lotTypeFieldId = ?") + .prepare("update LotTypeFields set orderNumber = ? - 1 where lotTypeFieldId = ?") .run(currentField.orderNumber, lotTypeFieldId); database.close(); diff --git a/public-typescript/adminFees.js b/public-typescript/adminFees.js index 34f1aba7..cf817456 100644 --- a/public-typescript/adminFees.js +++ b/public-typescript/adminFees.js @@ -17,42 +17,40 @@ Object.defineProperty(exports, "__esModule", { value: true }); feeCategoriesContainerElement.innerHTML = ""; for (const feeCategory of feeCategories) { const feeCategoryContainerElement = document.createElement("section"); - feeCategoryContainerElement.className = - "panel container--feeCategory"; + feeCategoryContainerElement.className = "panel container--feeCategory"; feeCategoryContainerElement.dataset.feeCategoryId = feeCategory.feeCategoryId.toString(); feeCategoryContainerElement.innerHTML = '