work order progress

deepsource-autofix-76c6eb20
Dan Gowans 2022-09-07 16:12:55 -04:00
parent f007dd1f63
commit 659318c536
14 changed files with 618 additions and 334 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,14 @@
import * as configFunctions from "../../helpers/functions.config.js";
import { getWorkOrder } from "../../helpers/lotOccupancyDB/getWorkOrder.js";
export const handler = (request, response) => {
const workOrder = getWorkOrder(request.params.workOrderId);
if (!workOrder) {
return response.redirect(configFunctions.getProperty("reverseProxy.urlPrefix") +
"/workOrders/?error=workOrderIdNotFound");
}
response.render("workOrder-edit", {
headTitle: "Work Order #" + workOrder.workOrderNumber,
workOrder
});
};
export default handler;

View File

@ -0,0 +1,23 @@
import type { RequestHandler } from "express";
import * as configFunctions from "../../helpers/functions.config.js";
import { getWorkOrder } from "../../helpers/lotOccupancyDB/getWorkOrder.js";
export const handler: RequestHandler = (request, response) => {
const workOrder = getWorkOrder(request.params.workOrderId);
if (!workOrder) {
return response.redirect(
configFunctions.getProperty("reverseProxy.urlPrefix") +
"/workOrders/?error=workOrderIdNotFound"
);
}
response.render("workOrder-edit", {
headTitle: "Work Order #" + workOrder.workOrderNumber,
workOrder
});
};
export default handler;

View File

@ -64,6 +64,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
lotOccupancyId lotOccupancyId
}, (responseJSON) => { }, (responseJSON) => {
if (responseJSON.success) { if (responseJSON.success) {
cityssm.disableNavBlocker();
window.location.href = window.location.href =
urlPrefix + urlPrefix +
"/lotOccupancies?t=" + "/lotOccupancies?t=" +
@ -119,36 +120,58 @@ Object.defineProperty(exports, "__esModule", { value: true });
for (const occupancyTypeField of responseJSON.occupancyTypeFields) { for (const occupancyTypeField of responseJSON.occupancyTypeFields) {
occupancyTypeFieldIds += occupancyTypeFieldIds +=
"," + occupancyTypeField.occupancyTypeFieldId; "," + occupancyTypeField.occupancyTypeFieldId;
const fieldName = "lotOccupancyFieldValue_" +
occupancyTypeField.occupancyTypeFieldId;
const fieldId = "lotOccupancy--" + fieldName;
const fieldElement = document.createElement("div"); const fieldElement = document.createElement("div");
fieldElement.className = "field"; fieldElement.className = "field";
fieldElement.innerHTML = fieldElement.innerHTML =
'<label class="label" for="lotOccupancy--lotOccupancyFieldValue_' + '<label class="label" for="' +
occupancyTypeField.occupancyTypeFieldId + fieldId +
'"></label>' + '"></label>' +
'<div class="control"></div>'; '<div class="control"></div>';
fieldElement.querySelector("label").textContent = fieldElement.querySelector("label").textContent =
occupancyTypeField.occupancyTypeField; occupancyTypeField.occupancyTypeField;
const inputElement = document.createElement("input"); if (occupancyTypeField.occupancyTypeFieldValues === "") {
inputElement.className = "input"; const inputElement = document.createElement("input");
inputElement.id = inputElement.className = "input";
"lotOccupancy--lotOccupancyFieldValue_" + inputElement.id = fieldId;
occupancyTypeField.occupancyTypeFieldId; inputElement.name = fieldName;
inputElement.name = inputElement.type = "text";
"lotOccupancyFieldValue_" + inputElement.required =
occupancyTypeField.occupancyTypeFieldId; occupancyTypeField.isRequired;
inputElement.type = "text"; inputElement.minLength =
inputElement.required = occupancyTypeField.isRequired; occupancyTypeField.minimumLength;
inputElement.minLength = inputElement.maxLength =
occupancyTypeField.minimumLength; occupancyTypeField.maximumLength;
inputElement.maxLength = if (occupancyTypeField.pattern &&
occupancyTypeField.maximumLength; occupancyTypeField.pattern !== "") {
if (occupancyTypeField.pattern && inputElement.pattern =
occupancyTypeField.pattern !== "") { occupancyTypeField.pattern;
inputElement.pattern = occupancyTypeField.pattern; }
fieldElement
.querySelector(".control")
.append(inputElement);
}
else {
fieldElement.querySelector(".control").innerHTML =
'<div class="select is-fullwidth"><select id="' +
fieldId +
'" name="' +
fieldName +
'">' +
'<option value="">(Not Set)</option>' +
"</select></div>";
fieldElement.querySelector("select").required =
occupancyTypeField.isRequired;
const optionValues = occupancyTypeField.occupancyTypeFieldValues.split("\n");
for (const optionValue of optionValues) {
const optionElement = document.createElement("option");
optionElement.value = optionValue;
optionElement.textContent = optionValue;
fieldElement.querySelector("select").append(optionElement);
}
} }
fieldElement
.querySelector(".control")
.append(inputElement);
lotOccupancyFieldsContainerElement.append(fieldElement); lotOccupancyFieldsContainerElement.append(fieldElement);
} }
lotOccupancyFieldsContainerElement.insertAdjacentHTML("beforeend", '<input name="occupancyTypeFieldIds" type="hidden" value="' + lotOccupancyFieldsContainerElement.insertAdjacentHTML("beforeend", '<input name="occupancyTypeFieldIds" type="hidden" value="' +

View File

@ -110,6 +110,7 @@ declare const bulmaJS: BulmaJS;
errorMessage?: string; errorMessage?: string;
}) => { }) => {
if (responseJSON.success) { if (responseJSON.success) {
cityssm.disableNavBlocker();
window.location.href = window.location.href =
urlPrefix + urlPrefix +
"/lotOccupancies?t=" + "/lotOccupancies?t=" +
@ -187,43 +188,77 @@ declare const bulmaJS: BulmaJS;
occupancyTypeFieldIds += occupancyTypeFieldIds +=
"," + occupancyTypeField.occupancyTypeFieldId; "," + occupancyTypeField.occupancyTypeFieldId;
const fieldName =
"lotOccupancyFieldValue_" +
occupancyTypeField.occupancyTypeFieldId;
const fieldId = "lotOccupancy--" + fieldName;
const fieldElement = document.createElement("div"); const fieldElement = document.createElement("div");
fieldElement.className = "field"; fieldElement.className = "field";
fieldElement.innerHTML = fieldElement.innerHTML =
'<label class="label" for="lotOccupancy--lotOccupancyFieldValue_' + '<label class="label" for="' +
occupancyTypeField.occupancyTypeFieldId + fieldId +
'"></label>' + '"></label>' +
'<div class="control"></div>'; '<div class="control"></div>';
fieldElement.querySelector("label").textContent = fieldElement.querySelector("label").textContent =
occupancyTypeField.occupancyTypeField; occupancyTypeField.occupancyTypeField;
const inputElement = document.createElement("input");
inputElement.className = "input";
inputElement.id =
"lotOccupancy--lotOccupancyFieldValue_" +
occupancyTypeField.occupancyTypeFieldId;
inputElement.name =
"lotOccupancyFieldValue_" +
occupancyTypeField.occupancyTypeFieldId;
inputElement.type = "text";
inputElement.required = occupancyTypeField.isRequired;
inputElement.minLength =
occupancyTypeField.minimumLength;
inputElement.maxLength =
occupancyTypeField.maximumLength;
if ( if (
occupancyTypeField.pattern && occupancyTypeField.occupancyTypeFieldValues === ""
occupancyTypeField.pattern !== ""
) { ) {
inputElement.pattern = occupancyTypeField.pattern; const inputElement =
} document.createElement("input");
fieldElement inputElement.className = "input";
.querySelector(".control")
.append(inputElement); inputElement.id = fieldId;
inputElement.name = fieldName;
inputElement.type = "text";
inputElement.required =
occupancyTypeField.isRequired;
inputElement.minLength =
occupancyTypeField.minimumLength;
inputElement.maxLength =
occupancyTypeField.maximumLength;
if (
occupancyTypeField.pattern &&
occupancyTypeField.pattern !== ""
) {
inputElement.pattern =
occupancyTypeField.pattern;
}
fieldElement
.querySelector(".control")
.append(inputElement);
} else {
fieldElement.querySelector(".control").innerHTML =
'<div class="select is-fullwidth"><select id="' +
fieldId +
'" name="' +
fieldName +
'">' +
'<option value="">(Not Set)</option>' +
"</select></div>";
fieldElement.querySelector("select").required =
occupancyTypeField.isRequired;
const optionValues = occupancyTypeField.occupancyTypeFieldValues.split("\n");
for (const optionValue of optionValues) {
const optionElement = document.createElement("option");
optionElement.value = optionValue;
optionElement.textContent = optionValue;
fieldElement.querySelector("select").append(optionElement);
}
}
lotOccupancyFieldsContainerElement.append(fieldElement); lotOccupancyFieldsContainerElement.append(fieldElement);
} }

File diff suppressed because one or more lines are too long

View File

@ -1,9 +1,12 @@
import { Router } from "express"; import { Router } from "express";
import * as permissionHandlers from "../handlers/permissions.js";
import handler_search from "../handlers/workOrders-get/search.js"; 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_edit from "../handlers/workOrders-get/edit.js";
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("/:workOrderId", handler_view); router.get("/:workOrderId", handler_view);
router.get("/:workOrderId/edit", permissionHandlers.updateGetHandler, handler_edit);
export default router; export default router;

View File

@ -1,13 +1,14 @@
import { Router } from "express"; import { Router } from "express";
import * as permissionHandlers from "../handlers/permissions.js"; import * as permissionHandlers from "../handlers/permissions.js";
import * as configFunctions from "../helpers/functions.config.js";
import handler_search from "../handlers/workOrders-get/search.js"; 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_edit from "../handlers/workOrders-get/edit.js";
export const router = Router(); export const router = Router();
router.get("/", handler_search); router.get("/", handler_search);
@ -16,4 +17,8 @@ router.post("/doSearchWorkOrders", handler_doSearchWorkOrders);
router.get("/:workOrderId", handler_view); router.get("/:workOrderId", handler_view);
router.get("/:workOrderId/edit",
permissionHandlers.updateGetHandler,
handler_edit);
export default router; export default router;

View File

@ -18,7 +18,8 @@
<body> <body>
<nav class="navbar is-light is-fixed-top is-static-print" id="cityssm-theme--navbar" role="navigation" <nav class="navbar is-light is-fixed-top is-static-print" id="cityssm-theme--navbar" role="navigation"
aria-label="main navigation"> aria-label="main navigation"
style="z-index:1100">
<div class="container"> <div class="container">
<div class="navbar-brand"> <div class="navbar-brand">
<a class="navbar-item" href="<%= urlPrefix %>/dashboard"> <a class="navbar-item" href="<%= urlPrefix %>/dashboard">

View File

@ -1,194 +1,189 @@
<%- include('_header'); -%> <%- include('_header'); -%>
<div class="columns is-variable is-4-mobile is-4-tablet is-block-print" id="is-site-layout"> <nav class="breadcrumb">
<ul>
<div class="column is-block-print"> <li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<nav class="breadcrumb"> <li>
<ul> <a href="<%= urlPrefix %>/maps">
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li> <span class="icon is-small"><i class="far fa-map" aria-hidden="true"></i></span>
<li> <span><%= configFunctions.getProperty("aliases.maps") %></span>
<a href="<%= urlPrefix %>/maps"> </a>
<span class="icon is-small"><i class="far fa-map" aria-hidden="true"></i></span> </li>
<span><%= configFunctions.getProperty("aliases.maps") %></span> <% if (!isCreate) { %>
</a> <li><a href="<%= urlPrefix %>/maps/<%= map.mapId %>"><%= map.mapName || "(No Name)" %></a></li>
</li> <% } %>
<% if (!isCreate) { %> <li class="is-active">
<li><a href="<%= urlPrefix %>/maps/<%= map.mapId %>"><%= map.mapName || "(No Name)" %></a></li> <a href="#" aria-current="page">
<% if (isCreate) { %>
Create a New <%= configFunctions.getProperty("aliases.map") %>
<% } else { %>
Update
<% } %> <% } %>
<li class="is-active"> </a>
<a href="#" aria-current="page"> </li>
<% if (isCreate) { %> </ul>
Create a New <%= configFunctions.getProperty("aliases.map") %> </nav>
<% } else { %>
Update
<% } %>
</a>
</li>
</ul>
</nav>
<h1 class="title is-1"> <h1 class="title is-1">
<% if (isCreate) { %> <% if (isCreate) { %>
Create a New <%= configFunctions.getProperty("aliases.map") %> Create a New <%= configFunctions.getProperty("aliases.map") %>
<% } else { %> <% } else { %>
Update <%= configFunctions.getProperty("aliases.map") %> Update <%= configFunctions.getProperty("aliases.map") %>
<% } %> <% } %>
</h1> </h1>
<form id="form--map"> <form id="form--map">
<input id="map--mapId" name="mapId" type="hidden" value="<%= map.mapId %>" /> <input id="map--mapId" name="mapId" type="hidden" value="<%= map.mapId %>" />
<div class="columns"> <div class="columns">
<div class="column"> <div class="column">
<div class="panel"> <div class="panel">
<div class="panel-block is-block"> <div class="panel-block is-block">
<div class="field">
<label class="label" for="map--mapName"><%= configFunctions.getProperty("aliases.map") %> Name</label>
<div class="control">
<input class="input" id="map--mapName" name="mapName" type="text" value="<%= map.mapName %>" maxlength="200" required />
</div>
</div>
<div class="field">
<label class="label" for="map--mapDescription"><%= configFunctions.getProperty("aliases.map") %> Description</label>
<div class="control">
<textarea class="textarea" id="map--mapDescription" name="mapDescription"><%= map.mapDescription %></textarea>
</div>
</div>
</div>
</div>
</div>
<div class="column">
<div class="panel">
<h2 class="panel-heading">Address</h2>
<div class="panel-block is-block">
<div class="field">
<label class="label" for="map--mapAddress1">Address</label>
<div class="control">
<input class="input" id="map--mapAddress1" name="mapAddress1" type="text" value="<%= map.mapAddress1 %>" maxlength="50" placeholder="Line 1" />
</div>
</div>
<div class="field">
<div class="control">
<input class="input" id="map--mapAddress2" name="mapAddress2" type="text" value="<%= map.mapAddress2 %>" maxlength="50" placeholder="Line 2" aria-label="Address Line 2" />
</div>
</div>
<div class="columns">
<div class="column is-8">
<div class="field"> <div class="field">
<label class="label" for="map--mapName"><%= configFunctions.getProperty("aliases.map") %> Name</label> <label class="label" for="map--mapCity">City</label>
<div class="control"> <div class="control">
<input class="input" id="map--mapName" name="mapName" type="text" value="<%= map.mapName %>" maxlength="200" required /> <input class="input" id="map--mapCity" name="mapCity" value="<%= map.mapCity %>" maxlength="20" />
</div> </div>
</div> </div>
</div>
<div class="column">
<div class="field"> <div class="field">
<label class="label" for="map--mapDescription"><%= configFunctions.getProperty("aliases.map") %> Description</label> <label class="label" for="map--mapProvince">Province</label>
<div class="control"> <div class="control">
<textarea class="textarea" id="map--mapDescription" name="mapDescription"><%= map.mapDescription %></textarea> <input class="input" id="map--mapProvince" name="mapProvince" value="<%= map.mapProvince %>" maxlength="2" />
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> <div class="columns">
<div class="column"> <div class="column">
<div class="panel">
<h2 class="panel-heading">Address</h2>
<div class="panel-block is-block">
<div class="field"> <div class="field">
<label class="label" for="map--mapAddress1">Address</label> <label class="label" for="map--mapPostalCode">Postal Code</label>
<div class="control"> <div class="control">
<input class="input" id="map--mapAddress1" name="mapAddress1" type="text" value="<%= map.mapAddress1 %>" maxlength="50" placeholder="Line 1" /> <input class="input" id="map--mapPostalCode" name="mapPostalCode" value="<%= map.mapPostalCode %>" maxlength="7" />
</div> </div>
</div> </div>
</div>
<div class="column">
<div class="field"> <div class="field">
<label class="label" for="map--mapPhoneNumber">Phone Number</label>
<div class="control"> <div class="control">
<input class="input" id="map--mapAddress2" name="mapAddress2" type="text" value="<%= map.mapAddress2 %>" maxlength="50" placeholder="Line 2" aria-label="Address Line 2" /> <input class="input" id="map--mapPhoneNumber" name="mapPhoneNumber" value="<%= map.mapPhoneNumber %>" maxlength="30" />
</div>
</div>
<div class="columns">
<div class="column is-8">
<div class="field">
<label class="label" for="map--mapCity">City</label>
<div class="control">
<input class="input" id="map--mapCity" name="mapCity" value="<%= map.mapCity %>" maxlength="20" />
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="map--mapProvince">Province</label>
<div class="control">
<input class="input" id="map--mapProvince" name="mapProvince" value="<%= map.mapProvince %>" maxlength="2" />
</div>
</div>
</div>
</div>
<div class="columns">
<div class="column">
<div class="field">
<label class="label" for="map--mapPostalCode">Postal Code</label>
<div class="control">
<input class="input" id="map--mapPostalCode" name="mapPostalCode" value="<%= map.mapPostalCode %>" maxlength="7" />
</div>
</div>
</div>
<div class="column">
<div class="field">
<label class="label" for="map--mapPhoneNumber">Phone Number</label>
<div class="control">
<input class="input" id="map--mapPhoneNumber" name="mapPhoneNumber" value="<%= map.mapPhoneNumber %>" maxlength="30" />
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="columns"> </div>
<div class="column">
<div class="panel">
<h2 class="panel-heading">Geographic Location</h2>
<div class="panel-block is-block">
<div class="field">
<label class="label" for="map--mapLatitude">Latitude</label>
<div class="control">
<input class="input" id="map--mapLatitude" name="mapLatitude" type="number" min="-90" max="90" step="0.00000001" value="<%= map.mapLatitude %>" />
</div>
</div>
<div class="field">
<label class="label" for="map--mapLongitude">Longitude</label>
<div class="control">
<input class="input" id="map--mapLongitude" name="mapLongitude" type="number" min="-180" max="180" step="0.00000001" value="<%= map.mapLongitude %>" />
</div>
</div>
</div>
</div>
</div>
<div class="column">
<div class="panel">
<h2 class="panel-heading">Image</h2>
<div class="panel-block is-block">
<div class="field">
<label class="label" for="map--mapSVG">SVG File</label>
<div class="control">
<div class="select is-fullwidth">
<select id="map--mapSVG" name="mapSVG">
<option value="">(Select a File)</option>
<% for (const mapSVG of mapSVGs) { %>
<option value="<%= mapSVG %>" <%= (map.mapSVG === mapSVG) ? " selected" : "" %>>
<%= mapSVG %>
</option>
<% } %>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="has-text-right is-hidden-print">
<button class="button is-primary" type="submit">
<span class="icon is-small"><i class="fas fa-save" aria-hidden="true"></i></span>
<span>
<%= (isCreate ? "Create": "Update") %>
<%= configFunctions.getProperty("aliases.map") %>
</span>
</button>
<% if (!isCreate) { %>
<div class="dropdown is-right ml-2">
<div class="dropdown-trigger">
<button class="button" type="button">
<span>More Options</span>
<span class="icon is-small">
<i class="fas fa-angle-down" aria-hidden="true"></i>
</span>
</button>
</div>
<div class="dropdown-menu">
<div class="dropdown-content">
<a class="dropdown-item" id="button--deleteMap" href="#">
<span class="icon is-small"><i class="fas fa-trash has-text-danger" aria-hidden="true"></i></span>
<span>Delete <%= configFunctions.getProperty("aliases.map") %></span>
</a>
</div>
</div>
</div>
<% } %>
</div>
</form>
</div> </div>
</div> <div class="columns">
<div class="column">
<div class="panel">
<h2 class="panel-heading">Geographic Location</h2>
<div class="panel-block is-block">
<div class="field">
<label class="label" for="map--mapLatitude">Latitude</label>
<div class="control">
<input class="input" id="map--mapLatitude" name="mapLatitude" type="number" min="-90" max="90" step="0.00000001" value="<%= map.mapLatitude %>" />
</div>
</div>
<div class="field">
<label class="label" for="map--mapLongitude">Longitude</label>
<div class="control">
<input class="input" id="map--mapLongitude" name="mapLongitude" type="number" min="-180" max="180" step="0.00000001" value="<%= map.mapLongitude %>" />
</div>
</div>
</div>
</div>
</div>
<div class="column">
<div class="panel">
<h2 class="panel-heading">Image</h2>
<div class="panel-block is-block">
<div class="field">
<label class="label" for="map--mapSVG">SVG File</label>
<div class="control">
<div class="select is-fullwidth">
<select id="map--mapSVG" name="mapSVG">
<option value="">(Select a File)</option>
<% for (const mapSVG of mapSVGs) { %>
<option value="<%= mapSVG %>" <%= (map.mapSVG === mapSVG) ? " selected" : "" %>>
<%= mapSVG %>
</option>
<% } %>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="has-text-right is-hidden-print">
<button class="button is-primary" type="submit">
<span class="icon is-small"><i class="fas fa-save" aria-hidden="true"></i></span>
<span>
<%= (isCreate ? "Create": "Update") %>
<%= configFunctions.getProperty("aliases.map") %>
</span>
</button>
<% if (!isCreate) { %>
<div class="dropdown is-right ml-2">
<div class="dropdown-trigger">
<button class="button" type="button">
<span>More Options</span>
<span class="icon is-small">
<i class="fas fa-angle-down" aria-hidden="true"></i>
</span>
</button>
</div>
<div class="dropdown-menu">
<div class="dropdown-content">
<a class="dropdown-item" id="button--deleteMap" href="#">
<span class="icon is-small"><i class="fas fa-trash has-text-danger" aria-hidden="true"></i></span>
<span>Delete <%= configFunctions.getProperty("aliases.map") %></span>
</a>
</div>
</div>
</div>
<% } %>
</div>
</form>
<%- include('_footerA'); -%> <%- include('_footerA'); -%>

View File

@ -1,115 +1,109 @@
<%- include('_header'); -%> <%- include('_header'); -%>
<div class="columns is-variable is-4-mobile is-4-tablet is-block-print" id="is-site-layout"> <nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="<%= urlPrefix %>/maps">
<span class="icon is-small"><i class="far fa-map" aria-hidden="true"></i></span>
<span><%= configFunctions.getProperty("aliases.maps") %></span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
<%= map.mapName || "(No Name)" %>
</a>
</li>
</ul>
</nav>
<div class="column is-block-print"> <h1 class="title is-1">
<nav class="breadcrumb"> <%= map.mapName || "(No Name)" %>
<ul> </h1>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="<%= urlPrefix %>/maps">
<span class="icon is-small"><i class="far fa-map" aria-hidden="true"></i></span>
<span><%= configFunctions.getProperty("aliases.maps") %></span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
<%= map.mapName || "(No Name)" %>
</a>
</li>
</ul>
</nav>
<h1 class="title is-1"> <% if (user.userProperties.canUpdate) { %>
<%= map.mapName || "(No Name)" %> <div class="fixed-container is-fixed-bottom-right mx-4 my-4 has-text-right is-hidden-print">
</h1> <a class="button is-circle is-primary has-tooltip-left" data-tooltip="Update <%= configFunctions.getProperty("aliases.map") %>" href="<%= urlPrefix %>/maps/<%= map.mapId %>/edit">
<i class="fas fa-pencil-alt" aria-hidden="true"></i>
<span class="sr-only">Update <%= configFunctions.getProperty("aliases.map") %></span>
</a>
</div>
<% } %>
<% if (user.userProperties.canUpdate) { %> <div class="panel">
<div class="fixed-container is-fixed-bottom-right mx-4 my-4 has-text-right is-hidden-print"> <div class="panel-block is-block">
<a class="button is-circle is-primary has-tooltip-left" data-tooltip="Update <%= configFunctions.getProperty("aliases.map") %>" href="<%= urlPrefix %>/maps/<%= map.mapId %>/edit"> <div class="columns">
<i class="fas fa-pencil-alt" aria-hidden="true"></i> <% if (map.mapDescription && map.mapDescription !== "") { %>
<span class="sr-only">Update <%= configFunctions.getProperty("aliases.map") %></span> <div class="column">
</a> <strong>Description</strong><br />
<%= map.mapDescription %>
</div>
<% } %>
<div class="column">
<strong>Address</strong><br />
<% if (map.mapAddress1 !== "") { %>
<%= map.mapAddress1 %><br />
<% } %>
<% if (map.mapAddress2 !== "") { %>
<%= map.mapAddress2 %><br />
<% } %>
<%= map.mapCity %>, <%= map.mapProvince %><br />
<%= map.mapPostalCode %>
</div>
</div>
<% if (map.mapPhoneNumber !== "") { %>
<div class="column">
<strong>Phone Number</strong><br />
<%= map.mapPhoneNumber %>
</div> </div>
<% } %> <% } %>
</div>
</div>
<div class="columns">
<div class="column">
<div class="panel"> <div class="panel">
<h2 class="panel-heading">Geographic Location</h2>
<div class="panel-block is-block"> <div class="panel-block is-block">
<div class="columns"> <% if (map.mapLatitude && map.mapLongitude) { %>
<% if (map.mapDescription && map.mapDescription !== "") { %> <div id="map--leaflet" data-map-latitude="<%= map.mapLatitude %>" data-map-longitude="<%= map.mapLongitude %>" style="height:300px"></div>
<div class="column"> <% } else { %>
<strong>Description</strong><br /> <div class="message is-info">
<%= map.mapDescription %> <p class="message-body">There are no geographic coordinates associated with this <%= configFunctions.getProperty("aliases.map").toLowerCase() %>.</p>
</div>
<% } %>
<div class="column">
<strong>Address</strong><br />
<% if (map.mapAddress1 !== "") { %>
<%= map.mapAddress1 %><br />
<% } %>
<% if (map.mapAddress2 !== "") { %>
<%= map.mapAddress2 %><br />
<% } %>
<%= map.mapCity %>, <%= map.mapProvince %><br />
<%= map.mapPostalCode %>
</div>
</div>
<% if (map.mapPhoneNumber !== "") { %>
<div class="column">
<strong>Phone Number</strong><br />
<%= map.mapPhoneNumber %>
</div> </div>
<% } %> <% } %>
</div> </div>
</div> </div>
</div>
<div class="columns"> <div class="column">
<div class="column">
<div class="panel">
<h2 class="panel-heading">Geographic Location</h2>
<div class="panel-block is-block">
<% if (map.mapLatitude && map.mapLongitude) { %>
<div id="map--leaflet" data-map-latitude="<%= map.mapLatitude %>" data-map-longitude="<%= map.mapLongitude %>" style="height:300px"></div>
<% } else { %>
<div class="message is-info">
<p class="message-body">There are no geographic coordinates associated with this <%= configFunctions.getProperty("aliases.map").toLowerCase() %>.</p>
</div>
<% } %>
</div>
</div>
</div>
<div class="column">
<div class="panel">
<h2 class="panel-heading">Image</h2>
<div class="panel-block is-block">
<% if (map.mapSVG) { %>
<% const imageURL = urlPrefix + "/images/maps/" + map.mapSVG %>
<a class="image" href="<%= urlPrefix %>/images/maps/<%= map.mapSVG %>" target="_blank">
<%- include('../public/images/maps/' + map.mapSVG); -%>
</a>
<% } else { %>
<div class="message is-info">
<p class="message-body">There are no image associated with this <%= configFunctions.getProperty("aliases.map").toLowerCase() %>.</p>
</div>
<% } %>
</div>
</div>
</div>
</div>
<div class="panel"> <div class="panel">
<h2 class="panel-heading"> <h2 class="panel-heading">Image</h2>
Related Searches <div class="panel-block is-block">
</h2> <% if (map.mapSVG) { %>
<div class="panel-block"> <% const imageURL = urlPrefix + "/images/maps/" + map.mapSVG %>
<a class="button is-link" href="<%= urlPrefix %>/lots?mapId=<%= map.mapId %>"> <a class="image" href="<%= urlPrefix %>/images/maps/<%= map.mapSVG %>" target="_blank">
<span class="icon is-small"><i class="fas fa-vector-square" aria-hidden="true"></i></span> <%- include('../public/images/maps/' + map.mapSVG); -%>
<span class="mr-2"><%= configFunctions.getProperty("aliases.lots") %></span> </a>
<span class="tag"><%= map.lotCount %></span> <% } else { %>
</a> <div class="message is-info">
<p class="message-body">There are no image associated with this <%= configFunctions.getProperty("aliases.map").toLowerCase() %>.</p>
</div>
<% } %>
</div> </div>
</div> </div>
</div>
</div>
<div class="panel">
<h2 class="panel-heading">
Related Searches
</h2>
<div class="panel-block">
<a class="button is-link" href="<%= urlPrefix %>/lots?mapId=<%= map.mapId %>">
<span class="icon is-small"><i class="fas fa-vector-square" aria-hidden="true"></i></span>
<span class="mr-2"><%= configFunctions.getProperty("aliases.lots") %></span>
<span class="tag"><%= map.lotCount %></span>
</a>
</div> </div>
</div> </div>

View File

@ -0,0 +1,27 @@
<%- include('_header'); -%>
<nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="<%= urlPrefix %>/workOrders">
<span class="icon is-small"><i class="fas fa-hard-hat" aria-hidden="true"></i></span>
<span>Work Orders</span>
</a>
</li>
<li>
<a href="<%= urlPrefix %>/workOrders/<%= workOrder.workOrderId %>">
Work Order #<%= workOrder.workOrderNumber || "(No Number)" %>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
Update Work Order
</a>
</li>
</ul>
</nav>
<%- include('_footerA'); -%>
<%- include('_footerB'); -%>

View File

@ -3,10 +3,12 @@
<nav class="breadcrumb"> <nav class="breadcrumb">
<ul> <ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li> <li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li class="is-active"><a href="#" aria-current="page"> <li class="is-active">
<a href="#" aria-current="page">
<span class="icon is-small"><i class="fas fa-hard-hat" aria-hidden="true"></i></span> <span class="icon is-small"><i class="fas fa-hard-hat" aria-hidden="true"></i></span>
<span>Work Orders</span> <span>Work Orders</span>
</a></li> </a>
</li>
</ul> </ul>
</nav> </nav>

View File

@ -1,38 +1,197 @@
<%- include('_header'); -%> <%- include('_header'); -%>
<div class="columns is-variable is-4-mobile is-4-tablet is-block-print" id="is-site-layout"> <nav class="breadcrumb">
<ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li>
<li>
<a href="<%= urlPrefix %>/workOrders">
<span class="icon is-small"><i class="fas fa-hard-hat" aria-hidden="true"></i></span>
<span>Work Orders</span>
</a>
</li>
<li class="is-active">
<a href="#" aria-current="page">
Work Order #<%= workOrder.workOrderNumber || "(No Number)" %>
</a>
</li>
</ul>
</nav>
<div class="column is-block-print"> <h1 class="title is-1">
<nav class="breadcrumb"> Work Order #<%= workOrder.workOrderNumber || "(No Number)" %>
</h1>
<% if (user.userProperties.canUpdate) { %>
<div class="fixed-container is-fixed-bottom-right mx-4 my-4 has-text-right is-hidden-print">
<a class="button is-circle is-primary has-tooltip-left" data-tooltip="Update Work Order" href="<%= urlPrefix %>/workOrders/<%= workOrder.workOrderId %>/edit">
<i class="fas fa-pencil-alt" aria-hidden="true"></i>
<span class="sr-only">Update Work Order</span>
</a>
</div>
<% } %>
<div class="panel">
<div class="panel-block is-block">
<div class="columns">
<div class="column">
<p class="mb-2">
<strong>Work Order Type</strong><br />
<%= workOrder.workOrderType %>
</p>
<p>
<strong>Description</strong><br />
<% if (workOrder.workOrderDescription) { %>
<%= workOrder.workOrderDescription %>
<% } else { %>
<span class="has-text-grey">(No Description)</span>
<% } %>
</p>
</div>
<div class="column">
<p class="mb-2">
<strong>Open Date</strong><br />
<%= workOrder.workOrderOpenDateString %>
</p>
<p>
<strong>Close Date</strong><br />
<% if (workOrder.workOrderCloseDate) { %>
<%= workOrder.workOrderCloseDateString %>
<% } else { %>
<span class="has-text-grey">(No Close Date)</span>
<% } %>
</p>
</div>
</div>
</div>
</div>
<div class="panel">
<h2 class="panel-heading">Related <%= configFunctions.getProperty("aliases.lots") %></h2>
<div class="panel-block is-block">
<%
const tabToSelect = (workOrder.workOrderLotOccupancies.length > 0 || workOrder.workOrderLots.length === 0 ? "lotOccupancies" : "lots");
%>
<div class="tabs is-boxed">
<ul> <ul>
<li><a href="<%= urlPrefix %>/dashboard">Home</a></li> <li class="<%= (tabToSelect === "lotOccupancies" ? "is-active" : "") %>">
<li> <a href="#relatedTab--lotOccupancies">
<a href="<%= urlPrefix %>/workOrders"> <span><%= configFunctions.getProperty("aliases.occupancies") %></span>
<span class="icon is-small"><i class="fas fa-hard-hat" aria-hidden="true"></i></span> <span class="ml-2 tag"><%= workOrder.workOrderLotOccupancies.length %></span>
<span>Work Orders</span>
</a> </a>
</li> </li>
<li class="is-active"> <li class="<%= (tabToSelect === "lots" ? "is-active" : "") %>">
<a href="#" aria-current="page"> <a href="#relatedTab--lots">
Work Order #<%= workOrder.workOrderNumber || "(No Number)" %> <span><%= configFunctions.getProperty("aliases.lots") %></span>
<span class="ml-2 tag"><%= workOrder.workOrderLots.length %></span>
</a> </a>
</li> </li>
</ul> </ul>
</nav> </div>
<div class="tab-container">
<h1 class="title is-1"> <div class="<%= (tabToSelect === "lotOccupancies" ? "" : "is-hidden") %>" id="relatedTab--lotOccupancies">
Work Order #<%= workOrder.workOrderNumber || "(No Number)" %> <% if (workOrder.workOrderLotOccupancies.length === 0) { %>
</h1> <div class="message is-info">
<p class="message-body">
<% if (user.userProperties.canUpdate) { %> There are no
<div class="fixed-container is-fixed-bottom-right mx-4 my-4 has-text-right is-hidden-print"> <%= configFunctions.getProperty("aliases.lot").toLowerCase() %>
<a class="button is-circle is-primary has-tooltip-left" data-tooltip="Update Work Order" href="<%= urlPrefix %>/workOrders/<%= workOrder.workOrderId %>/edit"> <%= configFunctions.getProperty("aliases.occupancy").toLowerCase() %>
<i class="fas fa-pencil-alt" aria-hidden="true"></i> records associated with this work order.
<span class="sr-only">Update Work Order</span> </p>
</a> </div>
<% } else { %>
<table class="table is-fullwidth is-striped is-hoverable">
<thead>
<tr>
<th class="has-width-1"></th>
<th>Occupancy Type</th>
<th><%= configFunctions.getProperty("aliases.lot") %></th>
<th>Start Date</th>
<th>End Date</th>
<th><%= configFunctions.getProperty("aliases.occupants") %></th>
</tr>
</thead>
<tbody>
<% for (const lotOccupancy of workOrder.workOrderLotOccupancies) { %>
<% const isActive = !(lotOccupancy.occupancyEndDate && lotOccupancy.occupancyEndDate < currentDate); %>
<tr>
<td class="has-text-centered">
<% if (isActive) { %>
<i class="fas fa-play" title="Current <%= configFunctions.getProperty("aliases.occupancy") %>"></i>
<% } else { %>
<i class="fas fa-stop" title="Previous <%= configFunctions.getProperty("aliases.occupancy") %>"></i>
<% } %>
</td>
<td>
<a class="has-text-weight-bold"
href="<%= urlPrefix %>/lotOccupancies/<%= lotOccupancy.lotOccupancyId %>">
<%= lotOccupancy.occupancyType %>
</a>
</td>
<td>
<% if (lotOccupancy.lotId) { %>
<%= lotOccupancy.lotName %>
<% } else { %>
<span class="has-text-grey">(No <%= configFunctions.getProperty("aliases.lot") %>)</span>
<% } %>
</td>
<td><%= lotOccupancy.occupancyStartDateString %></td>
<td>
<% if (lotOccupancy.occupancyEndDate) { %>
<%= lotOccupancy.occupancyEndDateString %>
<% } else { %>
<span class="has-text-grey">(No End Date)</span>
<% } %>
</td>
<td>
<% if (lotOccupancy.lotOccupancyOccupants.length === 0) { %>
<span class="has-text-grey">(No <%= configFunctions.getProperty("aliases.occupants") %>)</span>
<% } else { %>
<% const occupant = lotOccupancy.lotOccupancyOccupants[0]; %>
<%= occupant.occupantName %>
<%= (lotOccupancy.lotOccupancyOccupants.length > 1 ? " plus " + (lotOccupancy.lotOccupancyOccupants.length - 1) : "") %>
<% } %>
</td>
</tr>
<% } %>
</tbody>
</table>
<% } %>
</div> </div>
<% } %> <div class="<%= (tabToSelect === "lots" ? "" : "is-hidden") %>" id="relatedTab--lots">
<% if (workOrder.workOrderLots.length === 0) { %>
<div class="message is-info">
<p class="message-body">
There are no
<%= configFunctions.getProperty("aliases.lots").toLowerCase() %>
records associated with this work order.
</p>
</div>
<% } else { %>
<table class="table is-fullwidth is-striped is-hoverable">
<thead>
<tr>
<th><%= configFunctions.getProperty("aliases.lot") %></th>
<th><%= configFunctions.getProperty("aliases.map") %></th>
<th><%= configFunctions.getProperty("aliases.lot") %> Type</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<% for (const lot of workOrder.workOrderLots) { %>
<tr>
<td>
<a class="has-text-weight-bold" href="<%= urlPrefix %>/lots/<%= lot.lotId %>"><%= lot.lotName %></a>
</td>
<td><%= lot.mapName %></td>
<td><%= lot.lotType %></td>
<td><%= lot.lotStatus %></td>
</tr>
<% } %>
</tbody>
</table>
<% } %>
</div>
</div>
</div> </div>
</div> </div>