create new work orders
parent
8fbc1202aa
commit
d5b58cd985
|
|
@ -24,5 +24,8 @@ config.settings.lot = {
|
||||||
};
|
};
|
||||||
config.settings.lotOccupancy.occupantCityDefault = "Sault Ste. Marie";
|
config.settings.lotOccupancy.occupantCityDefault = "Sault Ste. Marie";
|
||||||
config.settings.map.mapCityDefault = "Sault Ste. Marie";
|
config.settings.map.mapCityDefault = "Sault Ste. Marie";
|
||||||
|
config.settings.workOrders = {
|
||||||
|
workOrderNumberLength: 6
|
||||||
|
};
|
||||||
config.aliases.externalReceiptNumber = "GP Receipt Number";
|
config.aliases.externalReceiptNumber = "GP Receipt Number";
|
||||||
export default config;
|
export default config;
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,10 @@ config.settings.lot = {
|
||||||
config.settings.lotOccupancy.occupantCityDefault = "Sault Ste. Marie";
|
config.settings.lotOccupancy.occupantCityDefault = "Sault Ste. Marie";
|
||||||
config.settings.map.mapCityDefault = "Sault Ste. Marie";
|
config.settings.map.mapCityDefault = "Sault Ste. Marie";
|
||||||
|
|
||||||
|
config.settings.workOrders = {
|
||||||
|
workOrderNumberLength: 6
|
||||||
|
};
|
||||||
|
|
||||||
config.aliases.externalReceiptNumber = "GP Receipt Number";
|
config.aliases.externalReceiptNumber = "GP Receipt Number";
|
||||||
|
|
||||||
export default config;
|
export default config;
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
import type { RequestHandler } from "express";
|
||||||
|
export declare const handler: RequestHandler;
|
||||||
|
export default handler;
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
import { dateToInteger, dateToString } from "@cityssm/expressjs-server-js/dateTimeFns.js";
|
||||||
|
import { getWorkOrderTypes } from "../../helpers/functions.cache.js";
|
||||||
|
export const handler = (request, response) => {
|
||||||
|
const currentDate = new Date();
|
||||||
|
const workOrder = {
|
||||||
|
workOrderOpenDate: dateToInteger(currentDate),
|
||||||
|
workOrderOpenDateString: dateToString(currentDate)
|
||||||
|
};
|
||||||
|
const workOrderTypes = getWorkOrderTypes();
|
||||||
|
response.render("workOrder-edit", {
|
||||||
|
headTitle: "New Work Order",
|
||||||
|
workOrder,
|
||||||
|
isCreate: true,
|
||||||
|
workOrderTypes
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export default handler;
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
import { dateToInteger, dateToString } from "@cityssm/expressjs-server-js/dateTimeFns.js";
|
||||||
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
|
import {
|
||||||
|
getWorkOrderTypes
|
||||||
|
} from "../../helpers/functions.cache.js";
|
||||||
|
|
||||||
|
import * as recordTypes from "../../types/recordTypes";
|
||||||
|
|
||||||
|
export const handler: RequestHandler = (request, response) => {
|
||||||
|
|
||||||
|
const currentDate = new Date();
|
||||||
|
|
||||||
|
const workOrder: recordTypes.WorkOrder = {
|
||||||
|
workOrderOpenDate: dateToInteger(currentDate),
|
||||||
|
workOrderOpenDateString: dateToString(currentDate)
|
||||||
|
};
|
||||||
|
|
||||||
|
const workOrderTypes = getWorkOrderTypes();
|
||||||
|
|
||||||
|
response.render("workOrder-edit", {
|
||||||
|
headTitle: "New Work Order",
|
||||||
|
workOrder,
|
||||||
|
isCreate: true,
|
||||||
|
workOrderTypes
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default handler;
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
import type { RequestHandler } from "express";
|
||||||
|
export declare const handler: RequestHandler;
|
||||||
|
export default handler;
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
import { addWorkOrder } from "../../helpers/lotOccupancyDB/addWorkOrder.js";
|
||||||
|
export const handler = async (request, response) => {
|
||||||
|
const workOrderId = addWorkOrder(request.body, request.session);
|
||||||
|
response.json({
|
||||||
|
success: true,
|
||||||
|
workOrderId
|
||||||
|
});
|
||||||
|
};
|
||||||
|
export default handler;
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
import type { RequestHandler } from "express";
|
||||||
|
|
||||||
|
import { addWorkOrder } from "../../helpers/lotOccupancyDB/addWorkOrder.js";
|
||||||
|
|
||||||
|
export const handler: RequestHandler = async (request, response) => {
|
||||||
|
const workOrderId = addWorkOrder(request.body, request.session);
|
||||||
|
|
||||||
|
response.json({
|
||||||
|
success: true,
|
||||||
|
workOrderId
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default handler;
|
||||||
|
|
@ -32,4 +32,5 @@ export declare function getProperty(propertyName: "settings.lotOccupancy.occupan
|
||||||
export declare function getProperty(propertyName: "settings.lotOccupancy.occupantCityDefault"): string;
|
export declare function getProperty(propertyName: "settings.lotOccupancy.occupantCityDefault"): string;
|
||||||
export declare function getProperty(propertyName: "settings.lotOccupancy.occupantProvinceDefault"): string;
|
export declare function getProperty(propertyName: "settings.lotOccupancy.occupantProvinceDefault"): string;
|
||||||
export declare function getProperty(propertyName: "settings.fees.taxPercentageDefault"): number;
|
export declare function getProperty(propertyName: "settings.fees.taxPercentageDefault"): number;
|
||||||
|
export declare function getProperty(propertyName: "settings.workOrders.workOrderNumberLength"): number;
|
||||||
export declare const keepAliveMillis: number;
|
export declare const keepAliveMillis: number;
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ configFallbackValues.set("settings.lotOccupancy.occupancyEndDateIsRequired", tru
|
||||||
configFallbackValues.set("settings.lotOccupancy.occupantCityDefault", "");
|
configFallbackValues.set("settings.lotOccupancy.occupantCityDefault", "");
|
||||||
configFallbackValues.set("settings.lotOccupancy.occupantProvinceDefault", "");
|
configFallbackValues.set("settings.lotOccupancy.occupantProvinceDefault", "");
|
||||||
configFallbackValues.set("settings.fees.taxPercentageDefault", 0);
|
configFallbackValues.set("settings.fees.taxPercentageDefault", 0);
|
||||||
|
configFallbackValues.set("settings.workOrders.workOrderNumberLength", 6);
|
||||||
export function getProperty(propertyName) {
|
export function getProperty(propertyName) {
|
||||||
const propertyNameSplit = propertyName.split(".");
|
const propertyNameSplit = propertyName.split(".");
|
||||||
let currentObject = config;
|
let currentObject = config;
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,8 @@ configFallbackValues.set("settings.lotOccupancy.occupantProvinceDefault", "");
|
||||||
|
|
||||||
configFallbackValues.set("settings.fees.taxPercentageDefault", 0);
|
configFallbackValues.set("settings.fees.taxPercentageDefault", 0);
|
||||||
|
|
||||||
|
configFallbackValues.set("settings.workOrders.workOrderNumberLength", 6);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set up function overloads
|
* Set up function overloads
|
||||||
*/
|
*/
|
||||||
|
|
@ -142,6 +144,10 @@ export function getProperty(
|
||||||
propertyName: "settings.fees.taxPercentageDefault"
|
propertyName: "settings.fees.taxPercentageDefault"
|
||||||
): number;
|
): number;
|
||||||
|
|
||||||
|
export function getProperty(
|
||||||
|
propertyName: "settings.workOrders.workOrderNumberLength"
|
||||||
|
): number;
|
||||||
|
|
||||||
export function getProperty(propertyName: string): unknown {
|
export function getProperty(propertyName: string): unknown {
|
||||||
const propertyNameSplit = propertyName.split(".");
|
const propertyNameSplit = propertyName.split(".");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import type * as recordTypes from "../../types/recordTypes";
|
import type * as recordTypes from "../../types/recordTypes";
|
||||||
interface AddWorkOrderForm {
|
interface AddWorkOrderForm {
|
||||||
workOrderTypeId: number | string;
|
workOrderTypeId: number | string;
|
||||||
workOrderNumber: string;
|
workOrderNumber?: string;
|
||||||
workOrderDescription: string;
|
workOrderDescription: string;
|
||||||
workOrderOpenDateString?: string;
|
workOrderOpenDateString?: string;
|
||||||
workOrderCloseDateString?: string;
|
workOrderCloseDateString?: string;
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,14 @@
|
||||||
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 { getNextWorkOrderNumber } from "./getNextWorkOrderNumber.js";
|
||||||
import { dateStringToInteger, dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js";
|
import { dateStringToInteger, dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js";
|
||||||
export const addWorkOrder = (workOrderForm, requestSession) => {
|
export const addWorkOrder = (workOrderForm, requestSession) => {
|
||||||
const database = sqlite(databasePath);
|
const database = sqlite(databasePath);
|
||||||
const rightNow = new Date();
|
const rightNow = new Date();
|
||||||
|
let workOrderNumber = workOrderForm.workOrderNumber;
|
||||||
|
if (!workOrderNumber) {
|
||||||
|
workOrderNumber = getNextWorkOrderNumber(database);
|
||||||
|
}
|
||||||
const result = database
|
const result = database
|
||||||
.prepare("insert into WorkOrders (" +
|
.prepare("insert into WorkOrders (" +
|
||||||
"workOrderTypeId, workOrderNumber, workOrderDescription," +
|
"workOrderTypeId, workOrderNumber, workOrderDescription," +
|
||||||
|
|
@ -11,7 +16,7 @@ export const addWorkOrder = (workOrderForm, requestSession) => {
|
||||||
" recordCreate_userName, recordCreate_timeMillis," +
|
" recordCreate_userName, recordCreate_timeMillis," +
|
||||||
" recordUpdate_userName, recordUpdate_timeMillis)" +
|
" recordUpdate_userName, recordUpdate_timeMillis)" +
|
||||||
" values (?, ?, ?, ?, ?, ?, ?, ?, ?)")
|
" values (?, ?, ?, ?, ?, ?, ?, ?, ?)")
|
||||||
.run(workOrderForm.workOrderTypeId, workOrderForm.workOrderNumber, workOrderForm.workOrderDescription, workOrderForm.workOrderOpenDateString
|
.run(workOrderForm.workOrderTypeId, workOrderNumber, workOrderForm.workOrderDescription, workOrderForm.workOrderOpenDateString
|
||||||
? dateStringToInteger(workOrderForm.workOrderOpenDateString)
|
? dateStringToInteger(workOrderForm.workOrderOpenDateString)
|
||||||
: dateToInteger(rightNow), workOrderForm.workOrderCloseDateString
|
: dateToInteger(rightNow), workOrderForm.workOrderCloseDateString
|
||||||
? dateStringToInteger(workOrderForm.workOrderCloseDateString)
|
? dateStringToInteger(workOrderForm.workOrderCloseDateString)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@ import sqlite from "better-sqlite3";
|
||||||
|
|
||||||
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
|
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
|
||||||
|
|
||||||
|
import { getNextWorkOrderNumber } from "./getNextWorkOrderNumber.js";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
dateStringToInteger,
|
dateStringToInteger,
|
||||||
dateToInteger
|
dateToInteger
|
||||||
|
|
@ -11,7 +13,7 @@ import type * as recordTypes from "../../types/recordTypes";
|
||||||
|
|
||||||
interface AddWorkOrderForm {
|
interface AddWorkOrderForm {
|
||||||
workOrderTypeId: number | string;
|
workOrderTypeId: number | string;
|
||||||
workOrderNumber: string;
|
workOrderNumber?: string;
|
||||||
workOrderDescription: string;
|
workOrderDescription: string;
|
||||||
workOrderOpenDateString?: string;
|
workOrderOpenDateString?: string;
|
||||||
workOrderCloseDateString?: string;
|
workOrderCloseDateString?: string;
|
||||||
|
|
@ -25,6 +27,12 @@ export const addWorkOrder = (
|
||||||
|
|
||||||
const rightNow = new Date();
|
const rightNow = new Date();
|
||||||
|
|
||||||
|
let workOrderNumber = workOrderForm.workOrderNumber;
|
||||||
|
|
||||||
|
if (!workOrderNumber) {
|
||||||
|
workOrderNumber = getNextWorkOrderNumber(database);
|
||||||
|
}
|
||||||
|
|
||||||
const result = database
|
const result = database
|
||||||
.prepare(
|
.prepare(
|
||||||
"insert into WorkOrders (" +
|
"insert into WorkOrders (" +
|
||||||
|
|
@ -36,7 +44,7 @@ export const addWorkOrder = (
|
||||||
)
|
)
|
||||||
.run(
|
.run(
|
||||||
workOrderForm.workOrderTypeId,
|
workOrderForm.workOrderTypeId,
|
||||||
workOrderForm.workOrderNumber,
|
workOrderNumber,
|
||||||
workOrderForm.workOrderDescription,
|
workOrderForm.workOrderDescription,
|
||||||
workOrderForm.workOrderOpenDateString
|
workOrderForm.workOrderOpenDateString
|
||||||
? dateStringToInteger(workOrderForm.workOrderOpenDateString)
|
? dateStringToInteger(workOrderForm.workOrderOpenDateString)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
import sqlite from "better-sqlite3";
|
||||||
|
export declare const getNextWorkOrderNumber: (connectedDatabase?: sqlite.Database) => string;
|
||||||
|
export default getNextWorkOrderNumber;
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
import sqlite from "better-sqlite3";
|
||||||
|
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
|
||||||
|
import * as configFunctions from "../functions.config.js";
|
||||||
|
export const getNextWorkOrderNumber = (connectedDatabase) => {
|
||||||
|
const database = connectedDatabase ||
|
||||||
|
sqlite(databasePath, {
|
||||||
|
readonly: true
|
||||||
|
});
|
||||||
|
const paddingLength = configFunctions.getProperty("settings.workOrders.workOrderNumberLength");
|
||||||
|
const currentYearString = new Date().getFullYear().toString();
|
||||||
|
const regex = new RegExp("^" + currentYearString + "-\\d+$");
|
||||||
|
database.function("userFn_matchesWorkOrderNumberSyntax", (workOrderNumber) => {
|
||||||
|
return regex.test(workOrderNumber) ? 1 : 0;
|
||||||
|
});
|
||||||
|
const workOrderNumberRecord = database
|
||||||
|
.prepare("select workOrderNumber from WorkOrders" +
|
||||||
|
" where userFn_matchesWorkOrderNumberSyntax(workOrderNumber) = 1" +
|
||||||
|
" order by cast(substr(workOrderNumber, instr(workOrderNumber, '-') + 1) as integer) desc")
|
||||||
|
.get();
|
||||||
|
if (!connectedDatabase) {
|
||||||
|
database.close();
|
||||||
|
}
|
||||||
|
let workOrderNumberIndex = 0;
|
||||||
|
if (workOrderNumberRecord) {
|
||||||
|
workOrderNumberIndex = Number.parseInt(workOrderNumberRecord.workOrderNumber.split("-")[1], 10);
|
||||||
|
}
|
||||||
|
workOrderNumberIndex += 1;
|
||||||
|
return currentYearString + "-" + workOrderNumberIndex.toString().padStart(paddingLength, "0");
|
||||||
|
};
|
||||||
|
export default getNextWorkOrderNumber;
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
import sqlite from "better-sqlite3";
|
||||||
|
|
||||||
|
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
|
||||||
|
|
||||||
|
import * as configFunctions from "../functions.config.js";
|
||||||
|
|
||||||
|
export const getNextWorkOrderNumber = (
|
||||||
|
connectedDatabase?: sqlite.Database
|
||||||
|
): string => {
|
||||||
|
const database =
|
||||||
|
connectedDatabase ||
|
||||||
|
sqlite(databasePath, {
|
||||||
|
readonly: true
|
||||||
|
});
|
||||||
|
|
||||||
|
const paddingLength = configFunctions.getProperty(
|
||||||
|
"settings.workOrders.workOrderNumberLength"
|
||||||
|
);
|
||||||
|
const currentYearString = new Date().getFullYear().toString();
|
||||||
|
|
||||||
|
const regex = new RegExp("^" + currentYearString + "-\\d+$");
|
||||||
|
|
||||||
|
database.function(
|
||||||
|
"userFn_matchesWorkOrderNumberSyntax",
|
||||||
|
(workOrderNumber: string) => {
|
||||||
|
return regex.test(workOrderNumber) ? 1 : 0;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const workOrderNumberRecord = database
|
||||||
|
.prepare(
|
||||||
|
"select workOrderNumber from WorkOrders" +
|
||||||
|
" where userFn_matchesWorkOrderNumberSyntax(workOrderNumber) = 1" +
|
||||||
|
" order by cast(substr(workOrderNumber, instr(workOrderNumber, '-') + 1) as integer) desc"
|
||||||
|
)
|
||||||
|
.get();
|
||||||
|
|
||||||
|
if (!connectedDatabase) {
|
||||||
|
database.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
let workOrderNumberIndex = 0;
|
||||||
|
|
||||||
|
if (workOrderNumberRecord) {
|
||||||
|
workOrderNumberIndex = Number.parseInt(
|
||||||
|
workOrderNumberRecord.workOrderNumber.split("-")[1],
|
||||||
|
10
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
workOrderNumberIndex += 1;
|
||||||
|
|
||||||
|
return currentYearString + "-" + workOrderNumberIndex.toString().padStart(paddingLength, "0");
|
||||||
|
};
|
||||||
|
|
||||||
|
export default getNextWorkOrderNumber;
|
||||||
|
|
@ -24,7 +24,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const fieldElement = clickEvent.currentTarget.closest(".field");
|
const fieldElement = clickEvent.currentTarget.closest(".field");
|
||||||
const inputOrSelectElement = fieldElement.querySelector("input, select");
|
const inputOrSelectElement = fieldElement.querySelector("input, select");
|
||||||
if (inputOrSelectElement.tagName === "INPUT") {
|
if (inputOrSelectElement.tagName === "INPUT") {
|
||||||
inputOrSelectElement.disabled = false;
|
inputOrSelectElement.readOnly = false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const optionElements = inputOrSelectElement.querySelectorAll("option");
|
const optionElements = inputOrSelectElement.querySelectorAll("option");
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ import type * as globalTypes from "../types/globalTypes";
|
||||||
) as HTMLInputElement | HTMLSelectElement;
|
) as HTMLInputElement | HTMLSelectElement;
|
||||||
|
|
||||||
if (inputOrSelectElement.tagName === "INPUT") {
|
if (inputOrSelectElement.tagName === "INPUT") {
|
||||||
inputOrSelectElement.disabled = false;
|
(inputOrSelectElement as HTMLInputElement).readOnly = false;
|
||||||
} else {
|
} else {
|
||||||
const optionElements =
|
const optionElements =
|
||||||
inputOrSelectElement.querySelectorAll("option");
|
inputOrSelectElement.querySelectorAll("option");
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const urlPrefix = document.querySelector("main").dataset.urlPrefix;
|
const urlPrefix = document.querySelector("main").dataset.urlPrefix;
|
||||||
const workOrderId = document.querySelector("#workOrderEdit--workOrderId").value;
|
const workOrderId = document.querySelector("#workOrderEdit--workOrderId").value;
|
||||||
const isCreate = workOrderId === "";
|
const isCreate = workOrderId === "";
|
||||||
|
los.initializeUnlockFieldButtons(document.querySelector("#form--workOrderEdit"));
|
||||||
document
|
document
|
||||||
.querySelector("#form--workOrderEdit")
|
.querySelector("#form--workOrderEdit")
|
||||||
.addEventListener("submit", (submitEvent) => {
|
.addEventListener("submit", (submitEvent) => {
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,6 @@ import type { BulmaJS } from "@cityssm/bulma-js/types";
|
||||||
|
|
||||||
import type * as globalTypes from "../types/globalTypes";
|
import type * as globalTypes from "../types/globalTypes";
|
||||||
import type * as recordTypes from "../types/recordTypes";
|
import type * as recordTypes from "../types/recordTypes";
|
||||||
import { response } from "express";
|
|
||||||
import { closeDelimiter } from "ejs";
|
|
||||||
|
|
||||||
declare const cityssm: cityssmGlobal;
|
declare const cityssm: cityssmGlobal;
|
||||||
declare const bulmaJS: BulmaJS;
|
declare const bulmaJS: BulmaJS;
|
||||||
|
|
@ -24,6 +22,10 @@ declare const bulmaJS: BulmaJS;
|
||||||
|
|
||||||
const isCreate = workOrderId === "";
|
const isCreate = workOrderId === "";
|
||||||
|
|
||||||
|
los.initializeUnlockFieldButtons(
|
||||||
|
document.querySelector("#form--workOrderEdit")
|
||||||
|
);
|
||||||
|
|
||||||
document
|
document
|
||||||
.querySelector("#form--workOrderEdit")
|
.querySelector("#form--workOrderEdit")
|
||||||
.addEventListener("submit", (submitEvent) => {
|
.addEventListener("submit", (submitEvent) => {
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=e=>{const t=e.currentTarget.closest(".field").querySelector("input, select");if("INPUT"===t.tagName)t.disabled=!1;else{const e=t.querySelectorAll("option");for(const t of e)t.disabled=!1}t.focus()},t={highlightMap:(e,t,s)=>{let o,a=t;for(;!(o=e.querySelector("#"+a))&&a.includes("-");)a=a.slice(0,Math.max(0,a.lastIndexOf("-")));if(o){o.style.fill=null,o.classList.add("highlight","is-"+s);const e=o.querySelectorAll("path");for(const t of e)t.style.fill=null}},initializeUnlockFieldButtons:t=>{const s=t.querySelectorAll(".is-unlock-field-button");for(const t of s)t.addEventListener("click",e)},populateAliases:e=>{const t=e.querySelectorAll(".alias");for(const e of t)switch(e.dataset.alias){case"Lot":e.textContent=exports.aliases.lot;break;case"lot":e.textContent=exports.aliases.lot.toLowerCase();break;case"Occupancy":e.textContent=exports.aliases.occupancy;break;case"occupancy":e.textContent=exports.aliases.occupancy.toLowerCase();break;case"Occupant":e.textContent=exports.aliases.occupant;break;case"occupant":e.textContent=exports.aliases.occupant.toLowerCase();break;case"ExternalReceiptNumber":e.textContent=exports.aliases.externalReceiptNumber}}};exports.los=t})();
|
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=e=>{const t=e.currentTarget.closest(".field").querySelector("input, select");if("INPUT"===t.tagName)t.readOnly=!1;else{const e=t.querySelectorAll("option");for(const t of e)t.disabled=!1}t.focus()},t={highlightMap:(e,t,s)=>{let o,a=t;for(;!(o=e.querySelector("#"+a))&&a.includes("-");)a=a.slice(0,Math.max(0,a.lastIndexOf("-")));if(o){o.style.fill=null,o.classList.add("highlight","is-"+s);const e=o.querySelectorAll("path");for(const t of e)t.style.fill=null}},initializeUnlockFieldButtons:t=>{const s=t.querySelectorAll(".is-unlock-field-button");for(const t of s)t.addEventListener("click",e)},populateAliases:e=>{const t=e.querySelectorAll(".alias");for(const e of t)switch(e.dataset.alias){case"Lot":e.textContent=exports.aliases.lot;break;case"lot":e.textContent=exports.aliases.lot.toLowerCase();break;case"Occupancy":e.textContent=exports.aliases.occupancy;break;case"occupancy":e.textContent=exports.aliases.occupancy.toLowerCase();break;case"Occupant":e.textContent=exports.aliases.occupant;break;case"occupant":e.textContent=exports.aliases.occupant.toLowerCase();break;case"ExternalReceiptNumber":e.textContent=exports.aliases.externalReceiptNumber}}};exports.los=t})();
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -4,6 +4,8 @@ import handler_search from "../handlers/workOrders-get/search.js";
|
||||||
import handler_doSearchWorkOrders from "../handlers/workOrders-post/doSearchWorkOrders.js";
|
import handler_doSearchWorkOrders from "../handlers/workOrders-post/doSearchWorkOrders.js";
|
||||||
import handler_view from "../handlers/workOrders-get/view.js";
|
import handler_view from "../handlers/workOrders-get/view.js";
|
||||||
import handler_doReopenWorkOrder from "../handlers/workOrders-post/doReopenWorkOrder.js";
|
import handler_doReopenWorkOrder from "../handlers/workOrders-post/doReopenWorkOrder.js";
|
||||||
|
import handler_new from "../handlers/workOrders-get/new.js";
|
||||||
|
import handler_doCreateWorkOrder from "../handlers/workOrders-post/doCreateWorkOrder.js";
|
||||||
import handler_edit from "../handlers/workOrders-get/edit.js";
|
import handler_edit from "../handlers/workOrders-get/edit.js";
|
||||||
import handler_doUpdateWorkOrder from "../handlers/workOrders-post/doUpdateWorkOrder.js";
|
import handler_doUpdateWorkOrder from "../handlers/workOrders-post/doUpdateWorkOrder.js";
|
||||||
import handler_doAddWorkOrderLotOccupancy from "../handlers/workOrders-post/doAddWorkOrderLotOccupancy.js";
|
import handler_doAddWorkOrderLotOccupancy from "../handlers/workOrders-post/doAddWorkOrderLotOccupancy.js";
|
||||||
|
|
@ -18,6 +20,8 @@ import handler_doDeleteWorkOrderMilestone from "../handlers/workOrders-post/doDe
|
||||||
export const router = Router();
|
export const router = Router();
|
||||||
router.get("/", handler_search);
|
router.get("/", handler_search);
|
||||||
router.post("/doSearchWorkOrders", handler_doSearchWorkOrders);
|
router.post("/doSearchWorkOrders", handler_doSearchWorkOrders);
|
||||||
|
router.get("/new", permissionHandlers.adminGetHandler, handler_new);
|
||||||
|
router.post("/doCreateWorkOrder", permissionHandlers.updatePostHandler, handler_doCreateWorkOrder);
|
||||||
router.get("/:workOrderId", handler_view);
|
router.get("/:workOrderId", handler_view);
|
||||||
router.post("/doReopenWorkOrder", permissionHandlers.updatePostHandler, handler_doReopenWorkOrder);
|
router.post("/doReopenWorkOrder", permissionHandlers.updatePostHandler, handler_doReopenWorkOrder);
|
||||||
router.get("/:workOrderId/edit", permissionHandlers.updateGetHandler, handler_edit);
|
router.get("/:workOrderId/edit", permissionHandlers.updateGetHandler, handler_edit);
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,9 @@ import handler_doSearchWorkOrders from "../handlers/workOrders-post/doSearchWork
|
||||||
import handler_view from "../handlers/workOrders-get/view.js";
|
import handler_view from "../handlers/workOrders-get/view.js";
|
||||||
import handler_doReopenWorkOrder from "../handlers/workOrders-post/doReopenWorkOrder.js";
|
import handler_doReopenWorkOrder from "../handlers/workOrders-post/doReopenWorkOrder.js";
|
||||||
|
|
||||||
|
import handler_new from "../handlers/workOrders-get/new.js";
|
||||||
|
import handler_doCreateWorkOrder from "../handlers/workOrders-post/doCreateWorkOrder.js";
|
||||||
|
|
||||||
import handler_edit from "../handlers/workOrders-get/edit.js";
|
import handler_edit from "../handlers/workOrders-get/edit.js";
|
||||||
import handler_doUpdateWorkOrder from "../handlers/workOrders-post/doUpdateWorkOrder.js";
|
import handler_doUpdateWorkOrder from "../handlers/workOrders-post/doUpdateWorkOrder.js";
|
||||||
|
|
||||||
|
|
@ -29,6 +32,14 @@ router.get("/", handler_search);
|
||||||
|
|
||||||
router.post("/doSearchWorkOrders", handler_doSearchWorkOrders);
|
router.post("/doSearchWorkOrders", handler_doSearchWorkOrders);
|
||||||
|
|
||||||
|
router.get("/new", permissionHandlers.adminGetHandler, handler_new);
|
||||||
|
|
||||||
|
router.post(
|
||||||
|
"/doCreateWorkOrder",
|
||||||
|
permissionHandlers.updatePostHandler,
|
||||||
|
handler_doCreateWorkOrder
|
||||||
|
);
|
||||||
|
|
||||||
router.get("/:workOrderId", handler_view);
|
router.get("/:workOrderId", handler_view);
|
||||||
|
|
||||||
router.post(
|
router.post(
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,9 @@ export interface Config {
|
||||||
occupantCityDefault?: string;
|
occupantCityDefault?: string;
|
||||||
occupantProvinceDefault?: string;
|
occupantProvinceDefault?: string;
|
||||||
};
|
};
|
||||||
|
workOrders?: {
|
||||||
|
workOrderNumberLength?: number;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
interface ConfigApplication {
|
interface ConfigApplication {
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,9 @@ export interface Config {
|
||||||
occupantCityDefault?: string;
|
occupantCityDefault?: string;
|
||||||
occupantProvinceDefault?: string;
|
occupantProvinceDefault?: string;
|
||||||
};
|
};
|
||||||
|
workOrders?: {
|
||||||
|
workOrderNumberLength?: number;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,12 +46,20 @@
|
||||||
<div class="panel-block is-block">
|
<div class="panel-block is-block">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<div class="field">
|
|
||||||
<label class="label" for="workOrderEdit--workOrderNumber">Work Order Number</label>
|
<label class="label" for="workOrderEdit--workOrderNumber">Work Order Number</label>
|
||||||
|
<div class="field has-addons">
|
||||||
|
<div class="control is-expanded">
|
||||||
|
<input class="input" id="workOrderEdit--workOrderNumber" name="workOrderNumber" type="text" value="<%= workOrder.workOrderNumber %>" maxlength="50" required readonly />
|
||||||
|
</div>
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<input class="input" id="workOrderEdit--workOrderNumber" name="workOrderNumber" type="text" value="<%= workOrder.workOrderNumber %>" maxlength="50" required />
|
<button class="button is-unlock-field-button" data-tooltip="Unlock Field" type="button" aria-label="Unlock Field">
|
||||||
|
<i class="fas fa-unlock" aria-hidden="true"></i>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<% if (isCreate) { %>
|
||||||
|
<p class="help">Leave work order number blank to autopopulate.</p>
|
||||||
|
<% } %>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<div class="field">
|
<div class="field">
|
||||||
|
|
@ -205,6 +213,7 @@
|
||||||
|
|
||||||
<%- include('_footerA'); -%>
|
<%- include('_footerA'); -%>
|
||||||
|
|
||||||
|
<% if (!isCreate) { %>
|
||||||
<script>
|
<script>
|
||||||
exports.workOrderComments = <%- JSON.stringify(workOrder.workOrderComments) %>;
|
exports.workOrderComments = <%- JSON.stringify(workOrder.workOrderComments) %>;
|
||||||
exports.workOrderLots = <%- JSON.stringify(workOrder.workOrderLots) %>;
|
exports.workOrderLots = <%- JSON.stringify(workOrder.workOrderLots) %>;
|
||||||
|
|
@ -214,6 +223,7 @@
|
||||||
exports.lotStatuses = <%- JSON.stringify(lotStatuses) %>;
|
exports.lotStatuses = <%- JSON.stringify(lotStatuses) %>;
|
||||||
exports.workOrderMilestoneTypes = <%- JSON.stringify(workOrderMilestoneTypes) %>;
|
exports.workOrderMilestoneTypes = <%- JSON.stringify(workOrderMilestoneTypes) %>;
|
||||||
</script>
|
</script>
|
||||||
|
<% } %>
|
||||||
<script src="<% urlPrefix %>/javascripts/workOrderEdit.min.js"></script>
|
<script src="<% urlPrefix %>/javascripts/workOrderEdit.min.js"></script>
|
||||||
|
|
||||||
<%- include('_footerB'); -%>
|
<%- include('_footerB'); -%>
|
||||||
Loading…
Reference in New Issue