add occupancy type field

deepsource-autofix-76c6eb20
Dan Gowans 2022-09-06 11:44:28 -04:00
parent 0ba94ae199
commit b6808f1559
12 changed files with 223 additions and 16 deletions

View File

@ -0,0 +1,3 @@
import type { RequestHandler } from "express";
export declare const handler: RequestHandler;
export default handler;

View File

@ -0,0 +1,12 @@
import { addOccupancyTypeField } from "../../helpers/lotOccupancyDB/addOccupancyTypeField.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler = async (request, response) => {
const occupancyTypeFieldId = addOccupancyTypeField(request.body, request.session);
const occupancyTypes = getOccupancyTypes();
response.json({
success: true,
occupancyTypeFieldId,
occupancyTypes
});
};
export default handler;

View File

@ -0,0 +1,19 @@
import type { RequestHandler } from "express";
import { addOccupancyTypeField } from "../../helpers/lotOccupancyDB/addOccupancyTypeField.js";
import { getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler: RequestHandler = async (request, response) => {
const occupancyTypeFieldId = addOccupancyTypeField(request.body, request.session);
const occupancyTypes = getOccupancyTypes();
response.json({
success: true,
occupancyTypeFieldId,
occupancyTypes
});
};
export default handler;

View File

@ -2,9 +2,9 @@ import type * as recordTypes from "../../types/recordTypes";
interface AddOccupancyTypeFieldForm { interface AddOccupancyTypeFieldForm {
occupancyTypeId: string | number; occupancyTypeId: string | number;
occupancyTypeField: string; occupancyTypeField: string;
occupancyTypeFieldValues: string; occupancyTypeFieldValues?: string;
isRequired?: string; isRequired?: string;
pattern: string; pattern?: string;
minimumLength: string | number; minimumLength: string | number;
maximumLength: string | number; maximumLength: string | number;
orderNumber?: number; orderNumber?: number;

View File

@ -1,5 +1,6 @@
import sqlite from "better-sqlite3"; import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { clearOccupancyTypesCache } from "../functions.cache.js";
export const addOccupancyTypeField = (occupancyTypeFieldForm, requestSession) => { export const addOccupancyTypeField = (occupancyTypeFieldForm, requestSession) => {
const database = sqlite(databasePath); const database = sqlite(databasePath);
const rightNowMillis = Date.now(); const rightNowMillis = Date.now();
@ -12,8 +13,9 @@ export const addOccupancyTypeField = (occupancyTypeFieldForm, requestSession) =>
" recordCreate_userName, recordCreate_timeMillis," + " recordCreate_userName, recordCreate_timeMillis," +
" recordUpdate_userName, recordUpdate_timeMillis)" + " recordUpdate_userName, recordUpdate_timeMillis)" +
" values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
.run(occupancyTypeFieldForm.occupancyTypeId, occupancyTypeFieldForm.occupancyTypeField, occupancyTypeFieldForm.occupancyTypeFieldValues, occupancyTypeFieldForm.isRequired ? 1 : 0, occupancyTypeFieldForm.pattern, occupancyTypeFieldForm.minimumLength || 0, occupancyTypeFieldForm.maximumLength || 100, occupancyTypeFieldForm.orderNumber || 0, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis); .run(occupancyTypeFieldForm.occupancyTypeId, occupancyTypeFieldForm.occupancyTypeField, occupancyTypeFieldForm.occupancyTypeFieldValues || "", occupancyTypeFieldForm.isRequired ? 1 : 0, occupancyTypeFieldForm.pattern || "", occupancyTypeFieldForm.minimumLength || 0, occupancyTypeFieldForm.maximumLength || 100, occupancyTypeFieldForm.orderNumber || -1, requestSession.user.userName, rightNowMillis, requestSession.user.userName, rightNowMillis);
database.close(); database.close();
clearOccupancyTypesCache();
return result.lastInsertRowid; return result.lastInsertRowid;
}; };
export default addOccupancyTypeField; export default addOccupancyTypeField;

View File

@ -3,13 +3,14 @@ import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import type * as recordTypes from "../../types/recordTypes"; import type * as recordTypes from "../../types/recordTypes";
import { clearOccupancyTypesCache } from "../functions.cache.js";
interface AddOccupancyTypeFieldForm { interface AddOccupancyTypeFieldForm {
occupancyTypeId: string | number; occupancyTypeId: string | number;
occupancyTypeField: string; occupancyTypeField: string;
occupancyTypeFieldValues: string; occupancyTypeFieldValues?: string;
isRequired?: string; isRequired?: string;
pattern: string; pattern?: string;
minimumLength: string | number; minimumLength: string | number;
maximumLength: string | number; maximumLength: string | number;
orderNumber?: number; orderNumber?: number;
@ -37,12 +38,12 @@ export const addOccupancyTypeField = (
.run( .run(
occupancyTypeFieldForm.occupancyTypeId, occupancyTypeFieldForm.occupancyTypeId,
occupancyTypeFieldForm.occupancyTypeField, occupancyTypeFieldForm.occupancyTypeField,
occupancyTypeFieldForm.occupancyTypeFieldValues, occupancyTypeFieldForm.occupancyTypeFieldValues || "",
occupancyTypeFieldForm.isRequired ? 1 : 0, occupancyTypeFieldForm.isRequired ? 1 : 0,
occupancyTypeFieldForm.pattern, occupancyTypeFieldForm.pattern || "",
occupancyTypeFieldForm.minimumLength || 0, occupancyTypeFieldForm.minimumLength || 0,
occupancyTypeFieldForm.maximumLength || 100, occupancyTypeFieldForm.maximumLength || 100,
occupancyTypeFieldForm.orderNumber || 0, occupancyTypeFieldForm.orderNumber || -1,
requestSession.user.userName, requestSession.user.userName,
rightNowMillis, rightNowMillis,
requestSession.user.userName, requestSession.user.userName,
@ -51,6 +52,8 @@ export const addOccupancyTypeField = (
database.close(); database.close();
clearOccupancyTypesCache();
return result.lastInsertRowid as number; return result.lastInsertRowid as number;
}; };

View File

@ -48,7 +48,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
}; };
bulmaJS.confirm({ bulmaJS.confirm({
title: "Delete " + exports.aliases.occupancy + " Type", title: "Delete " + exports.aliases.occupancy + " Type",
message: "Are you sure you want to delete this " + exports.aliases.occupancy.toLowerCase() + " type?", message: "Are you sure you want to delete this " +
exports.aliases.occupancy.toLowerCase() +
" type?",
contextualColorName: "warning", contextualColorName: "warning",
okButton: { okButton: {
text: "Yes, Delete " + exports.aliases.occupancy + " Type", text: "Yes, Delete " + exports.aliases.occupancy + " Type",
@ -100,6 +102,48 @@ Object.defineProperty(exports, "__esModule", { value: true });
} }
}); });
}; };
const openAddOccupancyTypeField = (clickEvent) => {
const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId, 10);
const occupancyType = occupancyTypes.find((currentOccupancyType) => {
return occupancyTypeId === currentOccupancyType.occupancyTypeId;
});
let addCloseModalFunction;
const doAdd = (submitEvent) => {
submitEvent.preventDefault();
cityssm.postJSON(urlPrefix + "/admin/doAddOccupancyTypeField", submitEvent.currentTarget, (responseJSON) => {
if (responseJSON.success) {
expandedOccupancyTypes.add(occupancyTypeId);
addCloseModalFunction();
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
}
else {
bulmaJS.alert({
title: "Error Adding Field",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
}
});
};
cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyTypeField", {
onshow: (modalElement) => {
los.populateAliases(modalElement);
modalElement.querySelector("#occupancyTypeFieldAdd--occupancyTypeId").value = occupancyTypeId.toString();
},
onshown: (modalElement, closeModalFunction) => {
addCloseModalFunction = closeModalFunction;
modalElement.querySelector("#occupancyTypeFieldAdd--occupancyTypeField").focus();
modalElement
.querySelector("form")
.addEventListener("submit", doAdd);
bulmaJS.toggleHtmlClipped();
},
onremoved: () => {
bulmaJS.toggleHtmlClipped();
}
});
};
const moveOccupancyTypeUp = (clickEvent) => { const moveOccupancyTypeUp = (clickEvent) => {
clickEvent.preventDefault(); clickEvent.preventDefault();
const occupancyTypeId = clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId; const occupancyTypeId = clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId;
@ -266,12 +310,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
occupancyTypeContainer occupancyTypeContainer
.querySelector(".button--toggleOccupancyTypeFields") .querySelector(".button--toggleOccupancyTypeFields")
.addEventListener("click", toggleOccupancyTypeFields); .addEventListener("click", toggleOccupancyTypeFields);
occupancyTypeContainer
.querySelector(".button--deleteOccupancyType")
.addEventListener("click", deleteOccupancyType);
occupancyTypeContainer occupancyTypeContainer
.querySelector(".button--editOccupancyType") .querySelector(".button--editOccupancyType")
.addEventListener("click", openEditOccupancyType); .addEventListener("click", openEditOccupancyType);
occupancyTypeContainer occupancyTypeContainer
.querySelector(".button--deleteOccupancyType") .querySelector(".button--addOccupancyTypeField")
.addEventListener("click", deleteOccupancyType); .addEventListener("click", openAddOccupancyTypeField);
occupancyTypeContainer occupancyTypeContainer
.querySelector(".button--moveOccupancyTypeUp") .querySelector(".button--moveOccupancyTypeUp")
.addEventListener("click", moveOccupancyTypeUp); .addEventListener("click", moveOccupancyTypeUp);

View File

@ -68,7 +68,6 @@ declare const bulmaJS: BulmaJS;
); );
const doDelete = () => { const doDelete = () => {
cityssm.postJSON( cityssm.postJSON(
urlPrefix + "/admin/doDeleteOccupancyType", urlPrefix + "/admin/doDeleteOccupancyType",
{ {
@ -98,7 +97,10 @@ declare const bulmaJS: BulmaJS;
bulmaJS.confirm({ bulmaJS.confirm({
title: "Delete " + exports.aliases.occupancy + " Type", title: "Delete " + exports.aliases.occupancy + " Type",
message: "Are you sure you want to delete this " + exports.aliases.occupancy.toLowerCase() + " type?", message:
"Are you sure you want to delete this " +
exports.aliases.occupancy.toLowerCase() +
" type?",
contextualColorName: "warning", contextualColorName: "warning",
okButton: { okButton: {
text: "Yes, Delete " + exports.aliases.occupancy + " Type", text: "Yes, Delete " + exports.aliases.occupancy + " Type",
@ -189,6 +191,81 @@ declare const bulmaJS: BulmaJS;
}); });
}; };
const openAddOccupancyTypeField = (clickEvent: Event) => {
const occupancyTypeId = Number.parseInt(
(
(clickEvent.currentTarget as HTMLElement).closest(
".container--occupancyType"
) as HTMLElement
).dataset.occupancyTypeId,
10
);
const occupancyType = occupancyTypes.find((currentOccupancyType) => {
return occupancyTypeId === currentOccupancyType.occupancyTypeId;
});
let addCloseModalFunction: () => void;
const doAdd = (submitEvent: SubmitEvent) => {
submitEvent.preventDefault();
cityssm.postJSON(
urlPrefix + "/admin/doAddOccupancyTypeField",
submitEvent.currentTarget,
(responseJSON: {
success: boolean;
errorMessage?: string;
occupancyTypes?: recordTypes.OccupancyType[];
}) => {
if (responseJSON.success) {
expandedOccupancyTypes.add(occupancyTypeId);
addCloseModalFunction();
occupancyTypes = responseJSON.occupancyTypes;
renderOccupancyTypes();
} else {
bulmaJS.alert({
title: "Error Adding Field",
message: responseJSON.errorMessage,
contextualColorName: "danger"
});
}
}
);
};
cityssm.openHtmlModal("adminOccupancyTypes-addOccupancyTypeField", {
onshow: (modalElement) => {
los.populateAliases(modalElement);
(
modalElement.querySelector(
"#occupancyTypeFieldAdd--occupancyTypeId"
) as HTMLInputElement
).value = occupancyTypeId.toString();
},
onshown: (modalElement, closeModalFunction) => {
addCloseModalFunction = closeModalFunction;
(
modalElement.querySelector(
"#occupancyTypeFieldAdd--occupancyTypeField"
) as HTMLInputElement
).focus();
modalElement
.querySelector("form")
.addEventListener("submit", doAdd);
bulmaJS.toggleHtmlClipped();
},
onremoved: () => {
bulmaJS.toggleHtmlClipped();
}
});
};
const moveOccupancyTypeUp = (clickEvent: Event) => { const moveOccupancyTypeUp = (clickEvent: Event) => {
clickEvent.preventDefault(); clickEvent.preventDefault();
@ -408,13 +485,17 @@ declare const bulmaJS: BulmaJS;
.querySelector(".button--toggleOccupancyTypeFields") .querySelector(".button--toggleOccupancyTypeFields")
.addEventListener("click", toggleOccupancyTypeFields); .addEventListener("click", toggleOccupancyTypeFields);
occupancyTypeContainer
.querySelector(".button--deleteOccupancyType")
.addEventListener("click", deleteOccupancyType);
occupancyTypeContainer occupancyTypeContainer
.querySelector(".button--editOccupancyType") .querySelector(".button--editOccupancyType")
.addEventListener("click", openEditOccupancyType); .addEventListener("click", openEditOccupancyType);
occupancyTypeContainer occupancyTypeContainer
.querySelector(".button--deleteOccupancyType") .querySelector(".button--addOccupancyTypeField")
.addEventListener("click", deleteOccupancyType); .addEventListener("click", openAddOccupancyTypeField);
occupancyTypeContainer occupancyTypeContainer
.querySelector(".button--moveOccupancyTypeUp") .querySelector(".button--moveOccupancyTypeUp")

View File

@ -0,0 +1,29 @@
<div class="modal">
<div class="modal-background"></div>
<div class="modal-card" style="width:900px">
<header class="modal-card-head">
<h3 class="modal-card-title">
Add <span class="alias" data-alias="Occupancy"></span> Type Field
</h3>
<button class="delete is-close-modal-button" aria-label="close" type="button"></button>
</header>
<section class="modal-card-body">
<form id="form--occupancyTypeFieldAdd">
<input class="input" id="occupancyTypeFieldAdd--occupancyTypeId" name="occupancyTypeId" type="hidden" />
<div class="field">
<label class="label" for="occupancyTypeFieldAdd--occupancyTypeField">New Field</label>
<div class="control">
<input class="input" id="occupancyTypeFieldAdd--occupancyTypeField" name="occupancyTypeField" type="text" maxlength="100" required />
</div>
</div>
</form>
</section>
<footer class="modal-card-foot justify-right">
<button class="button is-success" type="submit" form="form--occupancyTypeFieldAdd">
<span class="icon"><i class="fas fa-plus" aria-hidden="true"></i></span>
<span>Add Field</span>
</button>
<button class="button is-close-modal-button" type="button">Cancel</button>
</footer>
</div>
</div>

File diff suppressed because one or more lines are too long

View File

@ -17,6 +17,7 @@ import handler_doUpdateOccupancyType from "../handlers/admin-post/doUpdateOccupa
import handler_doMoveOccupancyTypeUp from "../handlers/admin-post/doMoveOccupancyTypeUp.js"; import handler_doMoveOccupancyTypeUp from "../handlers/admin-post/doMoveOccupancyTypeUp.js";
import handler_doMoveOccupancyTypeDown from "../handlers/admin-post/doMoveOccupancyTypeDown.js"; import handler_doMoveOccupancyTypeDown from "../handlers/admin-post/doMoveOccupancyTypeDown.js";
import handler_doDeleteOccupancyType from "../handlers/admin-post/doDeleteOccupancyType.js"; import handler_doDeleteOccupancyType from "../handlers/admin-post/doDeleteOccupancyType.js";
import handler_doAddOccupancyTypeField from "../handlers/admin-post/doAddOccupancyTypeField.js";
import handler_tables from "../handlers/admin-get/tables.js"; import handler_tables from "../handlers/admin-get/tables.js";
import handler_doAddWorkOrderType from "../handlers/admin-post/doAddWorkOrderType.js"; import handler_doAddWorkOrderType from "../handlers/admin-post/doAddWorkOrderType.js";
import handler_doUpdateWorkOrderType from "../handlers/admin-post/doUpdateWorkOrderType.js"; import handler_doUpdateWorkOrderType from "../handlers/admin-post/doUpdateWorkOrderType.js";
@ -51,6 +52,7 @@ router.post("/doUpdateOccupancyType", permissionHandlers.adminPostHandler, handl
router.post("/doMoveOccupancyTypeUp", permissionHandlers.adminPostHandler, handler_doMoveOccupancyTypeUp); router.post("/doMoveOccupancyTypeUp", permissionHandlers.adminPostHandler, handler_doMoveOccupancyTypeUp);
router.post("/doMoveOccupancyTypeDown", permissionHandlers.adminPostHandler, handler_doMoveOccupancyTypeDown); router.post("/doMoveOccupancyTypeDown", permissionHandlers.adminPostHandler, handler_doMoveOccupancyTypeDown);
router.post("/doDeleteOccupancyType", permissionHandlers.adminPostHandler, handler_doDeleteOccupancyType); router.post("/doDeleteOccupancyType", permissionHandlers.adminPostHandler, handler_doDeleteOccupancyType);
router.post("/doAddOccupancyTypeField", permissionHandlers.adminPostHandler, handler_doAddOccupancyTypeField);
router.get("/tables", permissionHandlers.adminGetHandler, handler_tables); router.get("/tables", permissionHandlers.adminGetHandler, handler_tables);
router.post("/doAddWorkOrderType", permissionHandlers.adminPostHandler, handler_doAddWorkOrderType); router.post("/doAddWorkOrderType", permissionHandlers.adminPostHandler, handler_doAddWorkOrderType);
router.post("/doUpdateWorkOrderType", permissionHandlers.adminPostHandler, handler_doUpdateWorkOrderType); router.post("/doUpdateWorkOrderType", permissionHandlers.adminPostHandler, handler_doUpdateWorkOrderType);

View File

@ -28,6 +28,8 @@ import handler_doMoveOccupancyTypeUp from "../handlers/admin-post/doMoveOccupanc
import handler_doMoveOccupancyTypeDown from "../handlers/admin-post/doMoveOccupancyTypeDown.js"; import handler_doMoveOccupancyTypeDown from "../handlers/admin-post/doMoveOccupancyTypeDown.js";
import handler_doDeleteOccupancyType from "../handlers/admin-post/doDeleteOccupancyType.js"; import handler_doDeleteOccupancyType from "../handlers/admin-post/doDeleteOccupancyType.js";
import handler_doAddOccupancyTypeField from "../handlers/admin-post/doAddOccupancyTypeField.js";
// Config Table Management // Config Table Management
import handler_tables from "../handlers/admin-get/tables.js"; import handler_tables from "../handlers/admin-get/tables.js";
@ -154,6 +156,13 @@ router.post(
handler_doDeleteOccupancyType handler_doDeleteOccupancyType
); );
// Occupancy Type Fields
router.post(
"/doAddOccupancyTypeField",
permissionHandlers.adminPostHandler,
handler_doAddOccupancyTypeField
);
/* /*
* Config Tables * Config Tables