sort occupancy type fields

deepsource-autofix-76c6eb20
Dan Gowans 2022-09-19 10:55:21 -04:00
parent db790d2e8a
commit 6ae44e00bc
19 changed files with 349 additions and 29 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,13 @@
import { moveOccupancyTypeFieldDown } from "../../helpers/lotOccupancyDB/moveOccupancyTypeFieldDown.js";
import { getAllOccupancyTypeFields, getOccupancyTypes } from "../../helpers/functions.cache.js";
export const handler = async (request, response) => {
const success = moveOccupancyTypeFieldDown(request.body.occupancyTypeFieldId);
const occupancyTypes = getOccupancyTypes();
const allOccupancyTypeFields = getAllOccupancyTypeFields();
response.json({
success,
occupancyTypes,
allOccupancyTypeFields
});
};
export default handler;

View File

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

View File

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

View File

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

View File

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

View File

@ -10,9 +10,10 @@ export const getLotOccupancyFields = (lotOccupancyId, connectedDatabase) => {
" o.occupancyTypeFieldId, o.lotOccupancyFieldValue," +
" f.occupancyTypeField," +
" f.occupancyTypeFieldValues, f.isRequired, f.pattern, f.minimumLength, f.maximumLength," +
" f.orderNumber" +
" f.orderNumber, t.orderNumber as occupancyTypeOrderNumber" +
" from LotOccupancyFields o" +
" left join OccupancyTypeFields f on o.occupancyTypeFieldId = f.occupancyTypeFieldId" +
" left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId" +
" where o.recordDelete_timeMillis is null" +
" and o.lotOccupancyId = ?" +
" union" +
@ -20,12 +21,13 @@ export const getLotOccupancyFields = (lotOccupancyId, connectedDatabase) => {
" f.occupancyTypeFieldId, '' as lotOccupancyFieldValue," +
" f.occupancyTypeField," +
" f.occupancyTypeFieldValues, f.isRequired, f.pattern, f.minimumLength, f.maximumLength," +
" f.orderNumber" +
" f.orderNumber, t.orderNumber as occupancyTypeOrderNumber" +
" from OccupancyTypeFields f" +
" left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId" +
" where f.recordDelete_timeMillis is null" +
" and (f.occupancyTypeId is null or f.occupancyTypeId in (select occupancyTypeId from LotOccupancies where lotOccupancyId = ?))" +
" and f.occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields where lotOccupancyId = ? and recordDelete_timeMillis is null)" +
" order by orderNumber, occupancyTypeField")
" order by occupancyTypeOrderNumber, f.orderNumber, f.occupancyTypeField")
.all(lotOccupancyId, lotOccupancyId, lotOccupancyId, lotOccupancyId);
if (!connectedDatabase) {
database.close();

View File

@ -20,9 +20,10 @@ export const getLotOccupancyFields = (
" o.occupancyTypeFieldId, o.lotOccupancyFieldValue," +
" f.occupancyTypeField," +
" f.occupancyTypeFieldValues, f.isRequired, f.pattern, f.minimumLength, f.maximumLength," +
" f.orderNumber" +
" f.orderNumber, t.orderNumber as occupancyTypeOrderNumber" +
" from LotOccupancyFields o" +
" left join OccupancyTypeFields f on o.occupancyTypeFieldId = f.occupancyTypeFieldId" +
" left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId" +
" where o.recordDelete_timeMillis is null" +
" and o.lotOccupancyId = ?" +
" union" +
@ -30,12 +31,13 @@ export const getLotOccupancyFields = (
" f.occupancyTypeFieldId, '' as lotOccupancyFieldValue," +
" f.occupancyTypeField," +
" f.occupancyTypeFieldValues, f.isRequired, f.pattern, f.minimumLength, f.maximumLength," +
" f.orderNumber" +
" f.orderNumber, t.orderNumber as occupancyTypeOrderNumber" +
" from OccupancyTypeFields f" +
" left join OccupancyTypes t on f.occupancyTypeId = t.occupancyTypeId" +
" where f.recordDelete_timeMillis is null" +
" and (f.occupancyTypeId is null or f.occupancyTypeId in (select occupancyTypeId from LotOccupancies where lotOccupancyId = ?))" +
" and f.occupancyTypeFieldId not in (select occupancyTypeFieldId from LotOccupancyFields where lotOccupancyId = ? and recordDelete_timeMillis is null)" +
" order by orderNumber, occupancyTypeField"
" order by occupancyTypeOrderNumber, f.orderNumber, f.occupancyTypeField"
)
.all(lotOccupancyId, lotOccupancyId, lotOccupancyId, lotOccupancyId);

View File

@ -0,0 +1,2 @@
export declare const moveOccupancyTypeFieldDown: (occupancyTypeFieldId: number | string) => boolean;
export default moveOccupancyTypeFieldDown;

View File

@ -0,0 +1,29 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { clearOccupancyTypesCache } from "../functions.cache.js";
export const moveOccupancyTypeFieldDown = (occupancyTypeFieldId) => {
const database = sqlite(databasePath);
const currentField = database
.prepare("select occupancyTypeId, orderNumber" +
" from OccupancyTypeFields" +
" where occupancyTypeFieldId = ?")
.get(occupancyTypeFieldId);
database
.prepare("update OccupancyTypeFields" +
" set orderNumber = orderNumber - 1" +
" where recordDelete_timeMillis is null" +
(currentField.occupancyTypeId
? " and occupancyTypeId = '" + currentField.occupancyTypeId + "'"
: " and occupancyTypeId is null") +
" and orderNumber = ? + 1")
.run(currentField.orderNumber);
const result = database
.prepare("update OccupancyTypeFields" +
" set orderNumber = ? + 1" +
" where occupancyTypeFieldId = ?")
.run(currentField.orderNumber, occupancyTypeFieldId);
database.close();
clearOccupancyTypesCache();
return result.changes > 0;
};
export default moveOccupancyTypeFieldDown;

View File

@ -0,0 +1,47 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { clearOccupancyTypesCache } from "../functions.cache.js";
export const moveOccupancyTypeFieldDown = (
occupancyTypeFieldId: number | string
): boolean => {
const database = sqlite(databasePath);
const currentField: { occupancyTypeId?: number; orderNumber: number } = database
.prepare(
"select occupancyTypeId, orderNumber" +
" from OccupancyTypeFields" +
" where occupancyTypeFieldId = ?"
)
.get(occupancyTypeFieldId);
database
.prepare(
"update OccupancyTypeFields" +
" set orderNumber = orderNumber - 1" +
" where recordDelete_timeMillis is null" +
(currentField.occupancyTypeId
? " and occupancyTypeId = '" + currentField.occupancyTypeId + "'"
: " and occupancyTypeId is null") +
" and orderNumber = ? + 1"
)
.run(currentField.orderNumber);
const result = database
.prepare(
"update OccupancyTypeFields" +
" set orderNumber = ? + 1" +
" where occupancyTypeFieldId = ?"
)
.run(currentField.orderNumber, occupancyTypeFieldId);
database.close();
clearOccupancyTypesCache();
return result.changes > 0;
};
export default moveOccupancyTypeFieldDown;

View File

@ -0,0 +1,2 @@
export declare const moveOccupancyTypeFieldUp: (occupancyTypeFieldId: number | string) => boolean;
export default moveOccupancyTypeFieldUp;

View File

@ -0,0 +1,36 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { clearOccupancyTypesCache } from "../functions.cache.js";
export const moveOccupancyTypeFieldUp = (occupancyTypeFieldId) => {
const database = sqlite(databasePath);
const currentField = database
.prepare("select occupancyTypeId, orderNumber" +
" from OccupancyTypeFields" +
" where occupancyTypeFieldId = ?")
.get(occupancyTypeFieldId);
if (currentField.orderNumber <= 0) {
database.close();
return true;
}
database
.prepare("update OccupancyTypeFields" +
" set orderNumber = orderNumber + 1" +
" where recordDelete_timeMillis is null" +
(currentField.occupancyTypeId
? " and occupancyTypeId = '" + currentField.occupancyTypeId + "'"
: " and occupancyTypeId is null") +
" and orderNumber = ? - 1")
.run(currentField.orderNumber);
const result = database
.prepare("update OccupancyTypeFields" +
" set orderNumber = ? - 1" +
" where occupancyTypeFieldId = ?" +
(currentField.occupancyTypeId
? " and occupancyTypeId = '" + currentField.occupancyTypeId + "'"
: " and occupancyTypeId is null"))
.run(currentField.orderNumber, occupancyTypeFieldId);
database.close();
clearOccupancyTypesCache();
return result.changes > 0;
};
export default moveOccupancyTypeFieldUp;

View File

@ -0,0 +1,53 @@
import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { clearOccupancyTypesCache } from "../functions.cache.js";
export const moveOccupancyTypeFieldUp = (occupancyTypeFieldId: number | string): boolean => {
const database = sqlite(databasePath);
const currentField: { occupancyTypeId?: number; orderNumber: number } = database
.prepare(
"select occupancyTypeId, orderNumber" +
" from OccupancyTypeFields" +
" where occupancyTypeFieldId = ?"
)
.get(occupancyTypeFieldId);
if (currentField.orderNumber <= 0) {
database.close();
return true;
}
database
.prepare(
"update OccupancyTypeFields" +
" set orderNumber = orderNumber + 1" +
" where recordDelete_timeMillis is null" +
(currentField.occupancyTypeId
? " and occupancyTypeId = '" + currentField.occupancyTypeId + "'"
: " and occupancyTypeId is null") +
" and orderNumber = ? - 1"
)
.run(currentField.orderNumber);
const result = database
.prepare(
"update OccupancyTypeFields" +
" set orderNumber = ? - 1" +
" where occupancyTypeFieldId = ?" +
(currentField.occupancyTypeId
? " and occupancyTypeId = '" + currentField.occupancyTypeId + "'"
: " and occupancyTypeId is null")
)
.run(currentField.orderNumber, occupancyTypeFieldId);
database.close();
clearOccupancyTypesCache();
return result.changes > 0;
};
export default moveOccupancyTypeFieldUp;

View File

@ -139,20 +139,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
}, occupancyTypeResponseHandler);
};
const openEditOccupancyTypeField = (occupancyTypeId, occupancyTypeFieldId) => {
let occupancyTypeField;
let occupancyType;
if (occupancyTypeId) {
const occupancyType = occupancyTypes.find((currentOccupancyType) => {
occupancyType = occupancyTypes.find((currentOccupancyType) => {
return currentOccupancyType.occupancyTypeId === occupancyTypeId;
});
occupancyTypeField = occupancyType.occupancyTypeFields.find((currentOccupancyTypeField) => {
}
const occupancyTypeField = (occupancyType ? occupancyType.occupancyTypeFields : allOccupancyTypeFields).find((currentOccupancyTypeField) => {
return currentOccupancyTypeField.occupancyTypeFieldId === occupancyTypeFieldId;
});
}
else {
occupancyTypeField = allOccupancyTypeFields.find((currentOccupancyTypeField) => {
return currentOccupancyTypeField.occupancyTypeFieldId === occupancyTypeFieldId;
});
}
let minimumLengthElement;
let maximumLengthElement;
let patternElement;
@ -244,6 +239,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
const occupancyTypeId = Number.parseInt(clickEvent.currentTarget.closest(".container--occupancyType").dataset.occupancyTypeId, 10);
openEditOccupancyTypeField(occupancyTypeId, occupancyTypeFieldId);
};
const moveOccupancyTypeFieldUp = (clickEvent) => {
clickEvent.preventDefault();
const occupancyTypeFieldId = clickEvent.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId;
cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeFieldUp", {
occupancyTypeFieldId
}, occupancyTypeResponseHandler);
};
const moveOccupancyTypeFieldDown = (clickEvent) => {
clickEvent.preventDefault();
const occupancyTypeFieldId = clickEvent.currentTarget.closest(".container--occupancyTypeField").dataset.occupancyTypeFieldId;
cityssm.postJSON(urlPrefix + "/admin/doMoveOccupancyTypeFieldDown", {
occupancyTypeFieldId
}, occupancyTypeResponseHandler);
};
const renderOccupancyTypeFields = (panelElement, occupancyTypeId, occupancyTypeFields) => {
if (occupancyTypeFields.length === 0) {
panelElement.insertAdjacentHTML("beforeend", '<div class="panel-block is-block' +
@ -294,6 +303,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
panelBlockElement
.querySelector(".button--editOccupancyTypeField")
.addEventListener("click", openEditOccupancyTypeFieldByClick);
panelBlockElement
.querySelector(".button--moveOccupancyTypeFieldUp")
.addEventListener("click", moveOccupancyTypeFieldUp);
panelBlockElement
.querySelector(".button--moveOccupancyTypeFieldDown")
.addEventListener("click", moveOccupancyTypeFieldDown);
panelElement.append(panelBlockElement);
}
}

View File

@ -282,23 +282,19 @@ declare const bulmaJS: BulmaJS;
};
const openEditOccupancyTypeField = (occupancyTypeId: number, occupancyTypeFieldId: number) => {
let occupancyTypeField: recordTypes.OccupancyTypeField;
let occupancyType: recordTypes.OccupancyType;
if (occupancyTypeId) {
const occupancyType = occupancyTypes.find((currentOccupancyType) => {
occupancyType = occupancyTypes.find((currentOccupancyType) => {
return currentOccupancyType.occupancyTypeId === occupancyTypeId;
});
occupancyTypeField = occupancyType.occupancyTypeFields.find(
(currentOccupancyTypeField) => {
return currentOccupancyTypeField.occupancyTypeFieldId === occupancyTypeFieldId;
}
);
} else {
occupancyTypeField = allOccupancyTypeFields.find((currentOccupancyTypeField) => {
const occupancyTypeField = (
occupancyType ? occupancyType.occupancyTypeFields : allOccupancyTypeFields
).find((currentOccupancyTypeField) => {
return currentOccupancyTypeField.occupancyTypeFieldId === occupancyTypeFieldId;
});
}
let minimumLengthElement: HTMLInputElement;
let maximumLengthElement: HTMLInputElement;
@ -469,6 +465,44 @@ declare const bulmaJS: BulmaJS;
openEditOccupancyTypeField(occupancyTypeId, occupancyTypeFieldId);
};
const moveOccupancyTypeFieldUp = (clickEvent: Event) => {
clickEvent.preventDefault();
const occupancyTypeFieldId = (
(clickEvent.currentTarget as HTMLElement).closest(
".container--occupancyTypeField"
) as HTMLElement
).dataset.occupancyTypeFieldId;
cityssm.postJSON(
urlPrefix + "/admin/doMoveOccupancyTypeFieldUp",
{
occupancyTypeFieldId
},
occupancyTypeResponseHandler
);
};
const moveOccupancyTypeFieldDown = (clickEvent: Event) => {
clickEvent.preventDefault();
const occupancyTypeFieldId = (
(clickEvent.currentTarget as HTMLElement).closest(
".container--occupancyTypeField"
) as HTMLElement
).dataset.occupancyTypeFieldId;
cityssm.postJSON(
urlPrefix + "/admin/doMoveOccupancyTypeFieldDown",
{
occupancyTypeFieldId
},
occupancyTypeResponseHandler
);
};
const renderOccupancyTypeFields = (
panelElement: HTMLElement,
occupancyTypeId: number | undefined,
@ -530,6 +564,14 @@ declare const bulmaJS: BulmaJS;
.querySelector(".button--editOccupancyTypeField")
.addEventListener("click", openEditOccupancyTypeFieldByClick);
panelBlockElement
.querySelector(".button--moveOccupancyTypeFieldUp")
.addEventListener("click", moveOccupancyTypeFieldUp);
panelBlockElement
.querySelector(".button--moveOccupancyTypeFieldDown")
.addEventListener("click", moveOccupancyTypeFieldDown);
panelElement.append(panelBlockElement);
}
}

File diff suppressed because one or more lines are too long

View File

@ -19,6 +19,8 @@ import handler_doMoveOccupancyTypeDown from "../handlers/admin-post/doMoveOccupa
import handler_doDeleteOccupancyType from "../handlers/admin-post/doDeleteOccupancyType.js";
import handler_doAddOccupancyTypeField from "../handlers/admin-post/doAddOccupancyTypeField.js";
import handler_doUpdateOccupancyTypeField from "../handlers/admin-post/doUpdateOccupancyTypeField.js";
import handler_doMoveOccupancyTypeFieldUp from "../handlers/admin-post/doMoveOccupancyTypeFieldUp.js";
import handler_doMoveOccupancyTypeFieldDown from "../handlers/admin-post/doMoveOccupancyTypeFieldDown.js";
import handler_doDeleteOccupancyTypeField from "../handlers/admin-post/doDeleteOccupancyTypeField.js";
import handler_tables from "../handlers/admin-get/tables.js";
import handler_doAddWorkOrderType from "../handlers/admin-post/doAddWorkOrderType.js";
@ -61,6 +63,8 @@ router.post("/doMoveOccupancyTypeDown", permissionHandlers.adminPostHandler, han
router.post("/doDeleteOccupancyType", permissionHandlers.adminPostHandler, handler_doDeleteOccupancyType);
router.post("/doAddOccupancyTypeField", permissionHandlers.adminPostHandler, handler_doAddOccupancyTypeField);
router.post("/doUpdateOccupancyTypeField", permissionHandlers.adminPostHandler, handler_doUpdateOccupancyTypeField);
router.post("/doMoveOccupancyTypeFieldUp", permissionHandlers.adminPostHandler, handler_doMoveOccupancyTypeFieldUp);
router.post("/doMoveOccupancyTypeFieldDown", permissionHandlers.adminPostHandler, handler_doMoveOccupancyTypeFieldDown);
router.post("/doDeleteOccupancyTypeField", permissionHandlers.adminPostHandler, handler_doDeleteOccupancyTypeField);
router.get("/tables", permissionHandlers.adminGetHandler, handler_tables);
router.post("/doAddWorkOrderType", permissionHandlers.adminPostHandler, handler_doAddWorkOrderType);

View File

@ -30,6 +30,8 @@ import handler_doDeleteOccupancyType from "../handlers/admin-post/doDeleteOccupa
import handler_doAddOccupancyTypeField from "../handlers/admin-post/doAddOccupancyTypeField.js";
import handler_doUpdateOccupancyTypeField from "../handlers/admin-post/doUpdateOccupancyTypeField.js";
import handler_doMoveOccupancyTypeFieldUp from "../handlers/admin-post/doMoveOccupancyTypeFieldUp.js";
import handler_doMoveOccupancyTypeFieldDown from "../handlers/admin-post/doMoveOccupancyTypeFieldDown.js";
import handler_doDeleteOccupancyTypeField from "../handlers/admin-post/doDeleteOccupancyTypeField.js";
// Config Table Management
@ -178,6 +180,18 @@ router.post(
handler_doUpdateOccupancyTypeField
);
router.post(
"/doMoveOccupancyTypeFieldUp",
permissionHandlers.adminPostHandler,
handler_doMoveOccupancyTypeFieldUp
);
router.post(
"/doMoveOccupancyTypeFieldDown",
permissionHandlers.adminPostHandler,
handler_doMoveOccupancyTypeFieldDown
);
router.post(
"/doDeleteOccupancyTypeField",
permissionHandlers.adminPostHandler,