create new work orders

deepsource-autofix-76c6eb20
Dan Gowans 2022-09-13 15:01:42 -04:00
parent 8fbc1202aa
commit d5b58cd985
28 changed files with 239 additions and 13 deletions

View File

@ -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;

View File

@ -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;

View File

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

View File

@ -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;

View File

@ -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;

View File

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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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(".");

View File

@ -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;

View File

@ -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)

View File

@ -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)

View File

@ -0,0 +1,3 @@
import sqlite from "better-sqlite3";
export declare const getNextWorkOrderNumber: (connectedDatabase?: sqlite.Database) => string;
export default getNextWorkOrderNumber;

View File

@ -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;

View File

@ -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;

View File

@ -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");

View File

@ -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");

View File

@ -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) => {

View File

@ -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) => {

View File

@ -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

View File

@ -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);

View File

@ -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(

View File

@ -42,6 +42,9 @@ export interface Config {
occupantCityDefault?: string; occupantCityDefault?: string;
occupantProvinceDefault?: string; occupantProvinceDefault?: string;
}; };
workOrders?: {
workOrderNumberLength?: number;
};
}; };
} }
interface ConfigApplication { interface ConfigApplication {

View File

@ -42,6 +42,9 @@ export interface Config {
occupantCityDefault?: string; occupantCityDefault?: string;
occupantProvinceDefault?: string; occupantProvinceDefault?: string;
}; };
workOrders?: {
workOrderNumberLength?: number;
};
}; };
} }

View File

@ -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'); -%>