diff --git a/handlers/admin-get/tables.js b/handlers/admin-get/tables.js
index d96e137c..c4b12261 100644
--- a/handlers/admin-get/tables.js
+++ b/handlers/admin-get/tables.js
@@ -1,11 +1,13 @@
-import { getLotOccupantTypes, getLotStatuses, getWorkOrderTypes } from "../../helpers/functions.cache.js";
+import { getLotOccupantTypes, getLotStatuses, getWorkOrderMilestoneTypes, getWorkOrderTypes } from "../../helpers/functions.cache.js";
export const handler = (_request, response) => {
const workOrderTypes = getWorkOrderTypes();
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
const lotStatuses = getLotStatuses();
const lotOccupantTypes = getLotOccupantTypes();
response.render("admin-tables", {
headTitle: "Config Table Management",
workOrderTypes,
+ workOrderMilestoneTypes,
lotStatuses,
lotOccupantTypes
});
diff --git a/handlers/admin-get/tables.ts b/handlers/admin-get/tables.ts
index 6b074e52..a2f85429 100644
--- a/handlers/admin-get/tables.ts
+++ b/handlers/admin-get/tables.ts
@@ -3,17 +3,20 @@ import type { RequestHandler } from "express";
import {
getLotOccupantTypes,
getLotStatuses,
+ getWorkOrderMilestoneTypes,
getWorkOrderTypes
} from "../../helpers/functions.cache.js";
export const handler: RequestHandler = (_request, response) => {
const workOrderTypes = getWorkOrderTypes();
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
const lotStatuses = getLotStatuses();
const lotOccupantTypes = getLotOccupantTypes();
response.render("admin-tables", {
headTitle: "Config Table Management",
workOrderTypes,
+ workOrderMilestoneTypes,
lotStatuses,
lotOccupantTypes
});
diff --git a/handlers/admin-post/doAddWorkOrderMilestoneType.d.ts b/handlers/admin-post/doAddWorkOrderMilestoneType.d.ts
new file mode 100644
index 00000000..9621c611
--- /dev/null
+++ b/handlers/admin-post/doAddWorkOrderMilestoneType.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/doAddWorkOrderMilestoneType.js b/handlers/admin-post/doAddWorkOrderMilestoneType.js
new file mode 100644
index 00000000..3fea74d1
--- /dev/null
+++ b/handlers/admin-post/doAddWorkOrderMilestoneType.js
@@ -0,0 +1,12 @@
+import { addWorkOrderMilestoneType } from "../../helpers/lotOccupancyDB/addWorkOrderMilestoneType.js";
+import { getWorkOrderMilestoneTypes } from "../../helpers/functions.cache.js";
+export const handler = async (request, response) => {
+ const workOrderMilestoneTypeId = addWorkOrderMilestoneType(request.body, request.session);
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
+ response.json({
+ success: true,
+ workOrderMilestoneTypeId,
+ workOrderMilestoneTypes
+ });
+};
+export default handler;
diff --git a/handlers/admin-post/doAddWorkOrderMilestoneType.ts b/handlers/admin-post/doAddWorkOrderMilestoneType.ts
new file mode 100644
index 00000000..3f06bf1f
--- /dev/null
+++ b/handlers/admin-post/doAddWorkOrderMilestoneType.ts
@@ -0,0 +1,19 @@
+import type { RequestHandler } from "express";
+
+import { addWorkOrderMilestoneType } from "../../helpers/lotOccupancyDB/addWorkOrderMilestoneType.js";
+
+import { getWorkOrderMilestoneTypes } from "../../helpers/functions.cache.js";
+
+export const handler: RequestHandler = async (request, response) => {
+ const workOrderMilestoneTypeId = addWorkOrderMilestoneType(request.body, request.session);
+
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
+
+ response.json({
+ success: true,
+ workOrderMilestoneTypeId,
+ workOrderMilestoneTypes
+ });
+};
+
+export default handler;
diff --git a/handlers/admin-post/doDeleteWorkOrderMilestoneType.d.ts b/handlers/admin-post/doDeleteWorkOrderMilestoneType.d.ts
new file mode 100644
index 00000000..9621c611
--- /dev/null
+++ b/handlers/admin-post/doDeleteWorkOrderMilestoneType.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/doDeleteWorkOrderMilestoneType.js b/handlers/admin-post/doDeleteWorkOrderMilestoneType.js
new file mode 100644
index 00000000..37de25e5
--- /dev/null
+++ b/handlers/admin-post/doDeleteWorkOrderMilestoneType.js
@@ -0,0 +1,11 @@
+import { deleteWorkOrderMilestoneType } from "../../helpers/lotOccupancyDB/deleteWorkOrderMilestoneType.js";
+import { getWorkOrderMilestoneTypes } from "../../helpers/functions.cache.js";
+export const handler = async (request, response) => {
+ const success = deleteWorkOrderMilestoneType(request.body.workOrderMilestoneTypeId, request.session);
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
+ response.json({
+ success,
+ workOrderMilestoneTypes
+ });
+};
+export default handler;
diff --git a/handlers/admin-post/doDeleteWorkOrderMilestoneType.ts b/handlers/admin-post/doDeleteWorkOrderMilestoneType.ts
new file mode 100644
index 00000000..475cbea9
--- /dev/null
+++ b/handlers/admin-post/doDeleteWorkOrderMilestoneType.ts
@@ -0,0 +1,21 @@
+import type { RequestHandler } from "express";
+
+import { deleteWorkOrderMilestoneType } from "../../helpers/lotOccupancyDB/deleteWorkOrderMilestoneType.js";
+
+import { getWorkOrderMilestoneTypes } from "../../helpers/functions.cache.js";
+
+export const handler: RequestHandler = async (request, response) => {
+ const success = deleteWorkOrderMilestoneType(
+ request.body.workOrderMilestoneTypeId,
+ request.session
+ );
+
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
+
+ response.json({
+ success,
+ workOrderMilestoneTypes
+ });
+};
+
+export default handler;
diff --git a/handlers/admin-post/doMoveWorkOrderMilestoneTypeDown.d.ts b/handlers/admin-post/doMoveWorkOrderMilestoneTypeDown.d.ts
new file mode 100644
index 00000000..9621c611
--- /dev/null
+++ b/handlers/admin-post/doMoveWorkOrderMilestoneTypeDown.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/doMoveWorkOrderMilestoneTypeDown.js b/handlers/admin-post/doMoveWorkOrderMilestoneTypeDown.js
new file mode 100644
index 00000000..b212f180
--- /dev/null
+++ b/handlers/admin-post/doMoveWorkOrderMilestoneTypeDown.js
@@ -0,0 +1,11 @@
+import { moveWorkOrderMilestoneTypeDown } from "../../helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeDown.js";
+import { getWorkOrderMilestoneTypes } from "../../helpers/functions.cache.js";
+export const handler = async (request, response) => {
+ const success = moveWorkOrderMilestoneTypeDown(request.body.workOrderMilestoneTypeId);
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
+ response.json({
+ success,
+ workOrderMilestoneTypes
+ });
+};
+export default handler;
diff --git a/handlers/admin-post/doMoveWorkOrderMilestoneTypeDown.ts b/handlers/admin-post/doMoveWorkOrderMilestoneTypeDown.ts
new file mode 100644
index 00000000..f0dd3a97
--- /dev/null
+++ b/handlers/admin-post/doMoveWorkOrderMilestoneTypeDown.ts
@@ -0,0 +1,18 @@
+import type { RequestHandler } from "express";
+
+import { moveWorkOrderMilestoneTypeDown } from "../../helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeDown.js";
+
+import { getWorkOrderMilestoneTypes } from "../../helpers/functions.cache.js";
+
+export const handler: RequestHandler = async (request, response) => {
+ const success = moveWorkOrderMilestoneTypeDown(request.body.workOrderMilestoneTypeId);
+
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
+
+ response.json({
+ success,
+ workOrderMilestoneTypes
+ });
+};
+
+export default handler;
diff --git a/handlers/admin-post/doMoveWorkOrderMilestoneTypeUp.d.ts b/handlers/admin-post/doMoveWorkOrderMilestoneTypeUp.d.ts
new file mode 100644
index 00000000..9621c611
--- /dev/null
+++ b/handlers/admin-post/doMoveWorkOrderMilestoneTypeUp.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/doMoveWorkOrderMilestoneTypeUp.js b/handlers/admin-post/doMoveWorkOrderMilestoneTypeUp.js
new file mode 100644
index 00000000..072b6645
--- /dev/null
+++ b/handlers/admin-post/doMoveWorkOrderMilestoneTypeUp.js
@@ -0,0 +1,11 @@
+import { moveWorkOrderMilestoneTypeUp } from "../../helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeUp.js";
+import { getWorkOrderMilestoneTypes } from "../../helpers/functions.cache.js";
+export const handler = async (request, response) => {
+ const success = moveWorkOrderMilestoneTypeUp(request.body.workOrderMilestoneTypeId);
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
+ response.json({
+ success,
+ workOrderMilestoneTypes
+ });
+};
+export default handler;
diff --git a/handlers/admin-post/doMoveWorkOrderMilestoneTypeUp.ts b/handlers/admin-post/doMoveWorkOrderMilestoneTypeUp.ts
new file mode 100644
index 00000000..1dd3eb8c
--- /dev/null
+++ b/handlers/admin-post/doMoveWorkOrderMilestoneTypeUp.ts
@@ -0,0 +1,18 @@
+import type { RequestHandler } from "express";
+
+import { moveWorkOrderMilestoneTypeUp } from "../../helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeUp.js";
+
+import { getWorkOrderMilestoneTypes } from "../../helpers/functions.cache.js";
+
+export const handler: RequestHandler = async (request, response) => {
+ const success = moveWorkOrderMilestoneTypeUp(request.body.workOrderMilestoneTypeId);
+
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
+
+ response.json({
+ success,
+ workOrderMilestoneTypes
+ });
+};
+
+export default handler;
diff --git a/handlers/admin-post/doUpdateWorkOrderMilestoneType.d.ts b/handlers/admin-post/doUpdateWorkOrderMilestoneType.d.ts
new file mode 100644
index 00000000..9621c611
--- /dev/null
+++ b/handlers/admin-post/doUpdateWorkOrderMilestoneType.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/doUpdateWorkOrderMilestoneType.js b/handlers/admin-post/doUpdateWorkOrderMilestoneType.js
new file mode 100644
index 00000000..643626d7
--- /dev/null
+++ b/handlers/admin-post/doUpdateWorkOrderMilestoneType.js
@@ -0,0 +1,11 @@
+import { updateWorkOrderMilestoneType } from "../../helpers/lotOccupancyDB/updateWorkOrderMilestoneType.js";
+import { getWorkOrderMilestoneTypes } from "../../helpers/functions.cache.js";
+export const handler = async (request, response) => {
+ const success = updateWorkOrderMilestoneType(request.body, request.session);
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
+ response.json({
+ success,
+ workOrderMilestoneTypes
+ });
+};
+export default handler;
diff --git a/handlers/admin-post/doUpdateWorkOrderMilestoneType.ts b/handlers/admin-post/doUpdateWorkOrderMilestoneType.ts
new file mode 100644
index 00000000..63f88241
--- /dev/null
+++ b/handlers/admin-post/doUpdateWorkOrderMilestoneType.ts
@@ -0,0 +1,18 @@
+import type { RequestHandler } from "express";
+
+import { updateWorkOrderMilestoneType } from "../../helpers/lotOccupancyDB/updateWorkOrderMilestoneType.js";
+
+import { getWorkOrderMilestoneTypes } from "../../helpers/functions.cache.js";
+
+export const handler: RequestHandler = async (request, response) => {
+ const success = updateWorkOrderMilestoneType(request.body, request.session);
+
+ const workOrderMilestoneTypes = getWorkOrderMilestoneTypes();
+
+ response.json({
+ success,
+ workOrderMilestoneTypes
+ });
+};
+
+export default handler;
diff --git a/helpers/lotOccupancyDB/deleteWorkOrderMilestoneType.d.ts b/helpers/lotOccupancyDB/deleteWorkOrderMilestoneType.d.ts
new file mode 100644
index 00000000..a84c7757
--- /dev/null
+++ b/helpers/lotOccupancyDB/deleteWorkOrderMilestoneType.d.ts
@@ -0,0 +1,3 @@
+import type * as recordTypes from "../../types/recordTypes";
+export declare const deleteWorkOrderMilestoneType: (workOrderMilestoneTypeId: number | string, requestSession: recordTypes.PartialSession) => boolean;
+export default deleteWorkOrderMilestoneType;
diff --git a/helpers/lotOccupancyDB/deleteWorkOrderMilestoneType.js b/helpers/lotOccupancyDB/deleteWorkOrderMilestoneType.js
new file mode 100644
index 00000000..05a1b9ea
--- /dev/null
+++ b/helpers/lotOccupancyDB/deleteWorkOrderMilestoneType.js
@@ -0,0 +1,17 @@
+import sqlite from "better-sqlite3";
+import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import { clearWorkOrderMilestoneTypesCache } from "../functions.cache.js";
+export const deleteWorkOrderMilestoneType = (workOrderMilestoneTypeId, requestSession) => {
+ const database = sqlite(databasePath);
+ const rightNowMillis = Date.now();
+ const result = database
+ .prepare("update WorkOrderMilestoneTypes" +
+ " set recordDelete_userName = ?," +
+ " recordDelete_timeMillis = ?" +
+ " where workOrderMilestoneTypeId = ?")
+ .run(requestSession.user.userName, rightNowMillis, workOrderMilestoneTypeId);
+ database.close();
+ clearWorkOrderMilestoneTypesCache();
+ return result.changes > 0;
+};
+export default deleteWorkOrderMilestoneType;
diff --git a/helpers/lotOccupancyDB/deleteWorkOrderMilestoneType.ts b/helpers/lotOccupancyDB/deleteWorkOrderMilestoneType.ts
new file mode 100644
index 00000000..1af50800
--- /dev/null
+++ b/helpers/lotOccupancyDB/deleteWorkOrderMilestoneType.ts
@@ -0,0 +1,33 @@
+import sqlite from "better-sqlite3";
+
+import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+
+import { clearWorkOrderMilestoneTypesCache } from "../functions.cache.js";
+
+import type * as recordTypes from "../../types/recordTypes";
+
+export const deleteWorkOrderMilestoneType = (
+ workOrderMilestoneTypeId: number | string,
+ requestSession: recordTypes.PartialSession
+): boolean => {
+ const database = sqlite(databasePath);
+
+ const rightNowMillis = Date.now();
+
+ const result = database
+ .prepare(
+ "update WorkOrderMilestoneTypes" +
+ " set recordDelete_userName = ?," +
+ " recordDelete_timeMillis = ?" +
+ " where workOrderMilestoneTypeId = ?"
+ )
+ .run(requestSession.user.userName, rightNowMillis, workOrderMilestoneTypeId);
+
+ database.close();
+
+ clearWorkOrderMilestoneTypesCache();
+
+ return result.changes > 0;
+};
+
+export default deleteWorkOrderMilestoneType;
diff --git a/helpers/lotOccupancyDB/getWorkOrderMilestoneTypes.js b/helpers/lotOccupancyDB/getWorkOrderMilestoneTypes.js
index 7db9dc5d..e98da0b3 100644
--- a/helpers/lotOccupancyDB/getWorkOrderMilestoneTypes.js
+++ b/helpers/lotOccupancyDB/getWorkOrderMilestoneTypes.js
@@ -12,7 +12,7 @@ export const getWorkOrderMilestoneTypes = () => {
for (const workOrderMilestoneType of workOrderMilestoneTypes) {
if (workOrderMilestoneType.orderNumber !== expectedOrderNumber) {
database
- .prepare("update WorkOrdeMilestoneTypes" +
+ .prepare("update WorkOrderMilestoneTypes" +
" set orderNumber = ?" +
" where workOrderMilestoneTypeId = ?")
.run(expectedOrderNumber, workOrderMilestoneType.workOrderMilestoneTypeId);
diff --git a/helpers/lotOccupancyDB/getWorkOrderMilestoneTypes.ts b/helpers/lotOccupancyDB/getWorkOrderMilestoneTypes.ts
index f58faa1b..24d3c0e8 100644
--- a/helpers/lotOccupancyDB/getWorkOrderMilestoneTypes.ts
+++ b/helpers/lotOccupancyDB/getWorkOrderMilestoneTypes.ts
@@ -22,7 +22,7 @@ export const getWorkOrderMilestoneTypes = (): recordTypes.WorkOrderMilestoneType
if (workOrderMilestoneType.orderNumber !== expectedOrderNumber) {
database
.prepare(
- "update WorkOrdeMilestoneTypes" +
+ "update WorkOrderMilestoneTypes" +
" set orderNumber = ?" +
" where workOrderMilestoneTypeId = ?"
)
diff --git a/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeDown.d.ts b/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeDown.d.ts
new file mode 100644
index 00000000..db79e8df
--- /dev/null
+++ b/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeDown.d.ts
@@ -0,0 +1,2 @@
+export declare const moveWorkOrderMilestoneTypeDown: (workOrderMilestoneTypeId: number | string) => boolean;
+export default moveWorkOrderMilestoneTypeDown;
diff --git a/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeDown.js b/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeDown.js
new file mode 100644
index 00000000..33fd5e34
--- /dev/null
+++ b/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeDown.js
@@ -0,0 +1,26 @@
+import sqlite from "better-sqlite3";
+import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import { clearWorkOrderMilestoneTypesCache } from "../functions.cache.js";
+export const moveWorkOrderMilestoneTypeDown = (workOrderMilestoneTypeId) => {
+ const database = sqlite(databasePath);
+ const currentOrderNumber = database
+ .prepare("select orderNumber" +
+ " from WorkOrderMilestoneTypes" +
+ " where workOrderMilestoneTypeId = ?")
+ .get(workOrderMilestoneTypeId).orderNumber;
+ database
+ .prepare("update WorkOrderMilestoneTypes" +
+ " set orderNumber = orderNumber - 1" +
+ " where recordDelete_timeMillis is null" +
+ " and orderNumber = ? + 1")
+ .run(currentOrderNumber);
+ const result = database
+ .prepare("update WorkOrderMilestoneTypes" +
+ " set orderNumber = ? + 1" +
+ " where workOrderMilestoneTypeId = ?")
+ .run(currentOrderNumber, workOrderMilestoneTypeId);
+ database.close();
+ clearWorkOrderMilestoneTypesCache();
+ return result.changes > 0;
+};
+export default moveWorkOrderMilestoneTypeDown;
diff --git a/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeDown.ts b/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeDown.ts
new file mode 100644
index 00000000..54be7264
--- /dev/null
+++ b/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeDown.ts
@@ -0,0 +1,44 @@
+import sqlite from "better-sqlite3";
+
+import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+
+import { clearWorkOrderMilestoneTypesCache } from "../functions.cache.js";
+
+export const moveWorkOrderMilestoneTypeDown = (
+ workOrderMilestoneTypeId: number | string
+): boolean => {
+ const database = sqlite(databasePath);
+
+ const currentOrderNumber: number = database
+ .prepare(
+ "select orderNumber" +
+ " from WorkOrderMilestoneTypes" +
+ " where workOrderMilestoneTypeId = ?"
+ )
+ .get(workOrderMilestoneTypeId).orderNumber;
+
+ database
+ .prepare(
+ "update WorkOrderMilestoneTypes" +
+ " set orderNumber = orderNumber - 1" +
+ " where recordDelete_timeMillis is null" +
+ " and orderNumber = ? + 1"
+ )
+ .run(currentOrderNumber);
+
+ const result = database
+ .prepare(
+ "update WorkOrderMilestoneTypes" +
+ " set orderNumber = ? + 1" +
+ " where workOrderMilestoneTypeId = ?"
+ )
+ .run(currentOrderNumber, workOrderMilestoneTypeId);
+
+ database.close();
+
+ clearWorkOrderMilestoneTypesCache();
+
+ return result.changes > 0;
+};
+
+export default moveWorkOrderMilestoneTypeDown;
diff --git a/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeUp.d.ts b/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeUp.d.ts
new file mode 100644
index 00000000..d76fc840
--- /dev/null
+++ b/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeUp.d.ts
@@ -0,0 +1,2 @@
+export declare const moveWorkOrderMilestoneTypeUp: (workOrderMilestoneTypeId: number | string) => boolean;
+export default moveWorkOrderMilestoneTypeUp;
diff --git a/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeUp.js b/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeUp.js
new file mode 100644
index 00000000..cc7f6ef2
--- /dev/null
+++ b/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeUp.js
@@ -0,0 +1,30 @@
+import sqlite from "better-sqlite3";
+import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import { clearWorkOrderMilestoneTypesCache } from "../functions.cache.js";
+export const moveWorkOrderMilestoneTypeUp = (workOrderMilestoneTypeId) => {
+ const database = sqlite(databasePath);
+ const currentOrderNumber = database
+ .prepare("select orderNumber" +
+ " from WorkOrderMilestoneTypes" +
+ " where workOrderMilestoneTypeId = ?")
+ .get(workOrderMilestoneTypeId).orderNumber;
+ if (currentOrderNumber <= 0) {
+ database.close();
+ return true;
+ }
+ database
+ .prepare("update WorkOrderMilestoneTypes" +
+ " set orderNumber = orderNumber + 1" +
+ " where recordDelete_timeMillis is null" +
+ " and orderNumber = ? - 1")
+ .run(currentOrderNumber);
+ const result = database
+ .prepare("update WorkOrderMilestoneTypes" +
+ " set orderNumber = ? - 1" +
+ " where workOrderMilestoneTypeId = ?")
+ .run(currentOrderNumber, workOrderMilestoneTypeId);
+ database.close();
+ clearWorkOrderMilestoneTypesCache();
+ return result.changes > 0;
+};
+export default moveWorkOrderMilestoneTypeUp;
diff --git a/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeUp.ts b/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeUp.ts
new file mode 100644
index 00000000..21b7b984
--- /dev/null
+++ b/helpers/lotOccupancyDB/moveWorkOrderMilestoneTypeUp.ts
@@ -0,0 +1,49 @@
+import sqlite from "better-sqlite3";
+
+import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+
+import { clearWorkOrderMilestoneTypesCache } from "../functions.cache.js";
+
+export const moveWorkOrderMilestoneTypeUp = (
+ workOrderMilestoneTypeId: number | string
+): boolean => {
+ const database = sqlite(databasePath);
+
+ const currentOrderNumber: number = database
+ .prepare(
+ "select orderNumber" +
+ " from WorkOrderMilestoneTypes" +
+ " where workOrderMilestoneTypeId = ?"
+ )
+ .get(workOrderMilestoneTypeId).orderNumber;
+
+ if (currentOrderNumber <= 0) {
+ database.close();
+ return true;
+ }
+
+ database
+ .prepare(
+ "update WorkOrderMilestoneTypes" +
+ " set orderNumber = orderNumber + 1" +
+ " where recordDelete_timeMillis is null" +
+ " and orderNumber = ? - 1"
+ )
+ .run(currentOrderNumber);
+
+ const result = database
+ .prepare(
+ "update WorkOrderMilestoneTypes" +
+ " set orderNumber = ? - 1" +
+ " where workOrderMilestoneTypeId = ?"
+ )
+ .run(currentOrderNumber, workOrderMilestoneTypeId);
+
+ database.close();
+
+ clearWorkOrderMilestoneTypesCache();
+
+ return result.changes > 0;
+};
+
+export default moveWorkOrderMilestoneTypeUp;
diff --git a/helpers/lotOccupancyDB/updateWorkOrderMilestoneType.d.ts b/helpers/lotOccupancyDB/updateWorkOrderMilestoneType.d.ts
new file mode 100644
index 00000000..46216ddd
--- /dev/null
+++ b/helpers/lotOccupancyDB/updateWorkOrderMilestoneType.d.ts
@@ -0,0 +1,7 @@
+import type * as recordTypes from "../../types/recordTypes";
+interface UpdateWorkOrderMilestoneTypeForm {
+ workOrderMilestoneTypeId: number | string;
+ workOrderMilestoneType: string;
+}
+export declare const updateWorkOrderMilestoneType: (workOrderMilestoneTypeForm: UpdateWorkOrderMilestoneTypeForm, requestSession: recordTypes.PartialSession) => boolean;
+export default updateWorkOrderMilestoneType;
diff --git a/helpers/lotOccupancyDB/updateWorkOrderMilestoneType.js b/helpers/lotOccupancyDB/updateWorkOrderMilestoneType.js
new file mode 100644
index 00000000..2440a432
--- /dev/null
+++ b/helpers/lotOccupancyDB/updateWorkOrderMilestoneType.js
@@ -0,0 +1,19 @@
+import sqlite from "better-sqlite3";
+import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+import { clearWorkOrderMilestoneTypesCache } from "../functions.cache.js";
+export const updateWorkOrderMilestoneType = (workOrderMilestoneTypeForm, requestSession) => {
+ const database = sqlite(databasePath);
+ const rightNowMillis = Date.now();
+ const result = database
+ .prepare("update WorkOrderMilestoneTypes" +
+ " set workOrderMilestoneType = ?," +
+ " recordUpdate_userName = ?," +
+ " recordUpdate_timeMillis = ?" +
+ " where workOrderMilestoneTypeId = ?" +
+ " and recordDelete_timeMillis is null")
+ .run(workOrderMilestoneTypeForm.workOrderMilestoneType, requestSession.user.userName, rightNowMillis, workOrderMilestoneTypeForm.workOrderMilestoneTypeId);
+ database.close();
+ clearWorkOrderMilestoneTypesCache();
+ return result.changes > 0;
+};
+export default updateWorkOrderMilestoneType;
diff --git a/helpers/lotOccupancyDB/updateWorkOrderMilestoneType.ts b/helpers/lotOccupancyDB/updateWorkOrderMilestoneType.ts
new file mode 100644
index 00000000..9ddde888
--- /dev/null
+++ b/helpers/lotOccupancyDB/updateWorkOrderMilestoneType.ts
@@ -0,0 +1,45 @@
+import sqlite from "better-sqlite3";
+
+import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
+
+import { clearWorkOrderMilestoneTypesCache } from "../functions.cache.js";
+
+import type * as recordTypes from "../../types/recordTypes";
+
+interface UpdateWorkOrderMilestoneTypeForm {
+ workOrderMilestoneTypeId: number | string;
+ workOrderMilestoneType: string;
+}
+
+export const updateWorkOrderMilestoneType = (
+ workOrderMilestoneTypeForm: UpdateWorkOrderMilestoneTypeForm,
+ requestSession: recordTypes.PartialSession
+): boolean => {
+ const database = sqlite(databasePath);
+
+ const rightNowMillis = Date.now();
+
+ const result = database
+ .prepare(
+ "update WorkOrderMilestoneTypes" +
+ " set workOrderMilestoneType = ?," +
+ " recordUpdate_userName = ?," +
+ " recordUpdate_timeMillis = ?" +
+ " where workOrderMilestoneTypeId = ?" +
+ " and recordDelete_timeMillis is null"
+ )
+ .run(
+ workOrderMilestoneTypeForm.workOrderMilestoneType,
+ requestSession.user.userName,
+ rightNowMillis,
+ workOrderMilestoneTypeForm.workOrderMilestoneTypeId
+ );
+
+ database.close();
+
+ clearWorkOrderMilestoneTypesCache();
+
+ return result.changes > 0;
+};
+
+export default updateWorkOrderMilestoneType;
diff --git a/public-typescript/adminTables.js b/public-typescript/adminTables.js
index f5f88ccd..7874a845 100644
--- a/public-typescript/adminTables.js
+++ b/public-typescript/adminTables.js
@@ -194,6 +194,198 @@ Object.defineProperty(exports, "__esModule", { value: true });
});
});
renderWorkOrderTypes();
+ let workOrderMilestoneTypes = exports.workOrderMilestoneTypes;
+ delete exports.workOrderMilestoneTypes;
+ const updateWorkOrderMilestoneType = (submitEvent) => {
+ submitEvent.preventDefault();
+ cityssm.postJSON(urlPrefix + "/admin/doUpdateWorkOrderMilestoneType", submitEvent.currentTarget, (responseJSON) => {
+ if (responseJSON.success) {
+ workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes;
+ bulmaJS.alert({
+ message: "Work Order Milestone Type Updated Successfully",
+ contextualColorName: "success"
+ });
+ }
+ else {
+ bulmaJS.alert({
+ title: "Error Updating Work Order Milestone Type",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
+ };
+ const deleteWorkOrderMilestoneType = (clickEvent) => {
+ const tableRowElement = clickEvent.currentTarget.closest("tr");
+ const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId;
+ const doDelete = () => {
+ cityssm.postJSON(urlPrefix + "/admin/doDeleteWorkOrderMilestoneType", {
+ workOrderMilestoneTypeId
+ }, (responseJSON) => {
+ if (responseJSON.success) {
+ workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes;
+ if (workOrderMilestoneTypes.length === 0) {
+ renderWorkOrderMilestoneTypes();
+ }
+ else {
+ tableRowElement.remove();
+ }
+ bulmaJS.alert({
+ message: "Work Order Milestone Type Deleted Successfully",
+ contextualColorName: "success"
+ });
+ }
+ else {
+ bulmaJS.alert({
+ title: "Error Deleting Work Order Milestone Type",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
+ };
+ bulmaJS.confirm({
+ title: "Delete Work Order Milestone Type",
+ message: "Are you sure you want to delete this work order milestone type?
" +
+ "Note that no work orders will be removed.",
+ messageIsHtml: true,
+ contextualColorName: "warning",
+ okButton: {
+ text: "Yes, Delete Work Order Milestone Type",
+ callbackFunction: doDelete
+ }
+ });
+ };
+ const moveWorkOrderMilestoneTypeUp = (clickEvent) => {
+ const tableRowElement = clickEvent.currentTarget.closest("tr");
+ const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId;
+ cityssm.postJSON(urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeUp", {
+ workOrderMilestoneTypeId
+ }, (responseJSON) => {
+ if (responseJSON.success) {
+ workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes;
+ renderWorkOrderMilestoneTypes();
+ }
+ else {
+ bulmaJS.alert({
+ title: "Error Moving Work Order Milestone Type",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
+ };
+ const moveWorkOrderMilestoneTypeDown = (clickEvent) => {
+ const tableRowElement = clickEvent.currentTarget.closest("tr");
+ const workOrderMilestoneTypeId = tableRowElement.dataset.workOrderMilestoneTypeId;
+ cityssm.postJSON(urlPrefix + "/admin/doMoveWorkOrderMilestoneTypeDown", {
+ workOrderMilestoneTypeId
+ }, (responseJSON) => {
+ if (responseJSON.success) {
+ workOrderMilestoneTypes = responseJSON.workOrderMilestoneTypes;
+ renderWorkOrderMilestoneTypes();
+ }
+ else {
+ bulmaJS.alert({
+ title: "Error Moving Work Order Milestone Type",
+ message: responseJSON.errorMessage,
+ contextualColorName: "danger"
+ });
+ }
+ });
+ };
+ const renderWorkOrderMilestoneTypes = () => {
+ const containerElement = document.querySelector("#container--workOrderMilestoneTypes");
+ if (workOrderMilestoneTypes.length === 0) {
+ containerElement.innerHTML =
+ "
| Work Order Milestone Type | +Options | +
|---|---|
| + + | +|