diff --git a/handlers/admin-post/doDeleteOccupancyType.d.ts b/handlers/admin-post/doDeleteOccupancyType.d.ts new file mode 100644 index 00000000..9621c611 --- /dev/null +++ b/handlers/admin-post/doDeleteOccupancyType.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/doDeleteOccupancyType.js b/handlers/admin-post/doDeleteOccupancyType.js new file mode 100644 index 00000000..5828f947 --- /dev/null +++ b/handlers/admin-post/doDeleteOccupancyType.js @@ -0,0 +1,11 @@ +import { deleteOccupancyType } from "../../helpers/lotOccupancyDB/deleteOccupancyType.js"; +import { getOccupancyTypes } from "../../helpers/functions.cache.js"; +export const handler = async (request, response) => { + const success = deleteOccupancyType(request.body.occupancyTypeId, request.session); + const occupancyTypes = getOccupancyTypes(); + response.json({ + success, + occupancyTypes + }); +}; +export default handler; diff --git a/handlers/admin-post/doDeleteOccupancyType.ts b/handlers/admin-post/doDeleteOccupancyType.ts new file mode 100644 index 00000000..5ff491fd --- /dev/null +++ b/handlers/admin-post/doDeleteOccupancyType.ts @@ -0,0 +1,21 @@ +import type { RequestHandler } from "express"; + +import { deleteOccupancyType } from "../../helpers/lotOccupancyDB/deleteOccupancyType.js"; + +import { getOccupancyTypes } from "../../helpers/functions.cache.js"; + +export const handler: RequestHandler = async (request, response) => { + const success = deleteOccupancyType( + request.body.occupancyTypeId, + request.session + ); + + const occupancyTypes = getOccupancyTypes(); + + response.json({ + success, + occupancyTypes + }); +}; + +export default handler; diff --git a/helpers/lotOccupancyDB/deleteOccupancyType.d.ts b/helpers/lotOccupancyDB/deleteOccupancyType.d.ts new file mode 100644 index 00000000..2059c3aa --- /dev/null +++ b/helpers/lotOccupancyDB/deleteOccupancyType.d.ts @@ -0,0 +1,3 @@ +import type * as recordTypes from "../../types/recordTypes"; +export declare const deleteOccupancyType: (occupancyTypeId: number | string, requestSession: recordTypes.PartialSession) => boolean; +export default deleteOccupancyType; diff --git a/helpers/lotOccupancyDB/deleteOccupancyType.js b/helpers/lotOccupancyDB/deleteOccupancyType.js new file mode 100644 index 00000000..48aba46e --- /dev/null +++ b/helpers/lotOccupancyDB/deleteOccupancyType.js @@ -0,0 +1,17 @@ +import sqlite from "better-sqlite3"; +import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; +import { clearOccupancyTypesCache } from "../functions.cache.js"; +export const deleteOccupancyType = (occupancyTypeId, requestSession) => { + const database = sqlite(databasePath); + const rightNowMillis = Date.now(); + const result = database + .prepare("update OccupancyTypes" + + " set recordDelete_userName = ?," + + " recordDelete_timeMillis = ?" + + " where occupancyTypeId = ?") + .run(requestSession.user.userName, rightNowMillis, occupancyTypeId); + database.close(); + clearOccupancyTypesCache(); + return result.changes > 0; +}; +export default deleteOccupancyType; diff --git a/helpers/lotOccupancyDB/deleteOccupancyType.ts b/helpers/lotOccupancyDB/deleteOccupancyType.ts new file mode 100644 index 00000000..c1ed78cc --- /dev/null +++ b/helpers/lotOccupancyDB/deleteOccupancyType.ts @@ -0,0 +1,33 @@ +import sqlite from "better-sqlite3"; + +import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; + +import { clearOccupancyTypesCache } from "../functions.cache.js"; + +import type * as recordTypes from "../../types/recordTypes"; + +export const deleteOccupancyType = ( + occupancyTypeId: number | string, + requestSession: recordTypes.PartialSession +): boolean => { + const database = sqlite(databasePath); + + const rightNowMillis = Date.now(); + + const result = database + .prepare( + "update OccupancyTypes" + + " set recordDelete_userName = ?," + + " recordDelete_timeMillis = ?" + + " where occupancyTypeId = ?" + ) + .run(requestSession.user.userName, rightNowMillis, occupancyTypeId); + + database.close(); + + clearOccupancyTypesCache(); + + return result.changes > 0; +}; + +export default deleteOccupancyType; diff --git a/public-typescript/adminOccupancyTypes.js b/public-typescript/adminOccupancyTypes.js index 1f37992e..04d92ecd 100644 --- a/public-typescript/adminOccupancyTypes.js +++ b/public-typescript/adminOccupancyTypes.js @@ -25,6 +25,37 @@ Object.defineProperty(exports, "__esModule", { value: true }); panelBlockElement.classList.toggle("is-hidden"); } }; + const deleteOccupancyType = (clickEvent) => { + const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId, 10); + const doDelete = () => { + cityssm.postJSON(urlPrefix + "/admin/doDeleteOccupancyType", { + occupancyTypeId + }, (responseJSON) => { + if (responseJSON.success) { + occupancyTypes = responseJSON.occupancyTypes; + renderOccupancyTypes(); + } + else { + bulmaJS.alert({ + title: "Error Deleting " + + exports.aliases.occupancy + + " Type", + message: responseJSON.errorMessage, + contextualColorName: "danger" + }); + } + }); + }; + bulmaJS.confirm({ + title: "Delete " + exports.aliases.occupancy + " Type", + message: "Are you sure you want to delete this " + exports.aliases.occupancy.toLowerCase() + " type?", + contextualColorName: "warning", + okButton: { + text: "Yes, Delete " + exports.aliases.occupancy + " Type", + callbackFunction: doDelete + } + }); + }; const openEditOccupancyType = (clickEvent) => { const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId, 10); const occupancyType = occupancyTypes.find((currentOccupancyType) => { @@ -145,20 +176,26 @@ Object.defineProperty(exports, "__esModule", { value: true }); "" + "") + ('