diff --git a/handlers/workOrders-get/milestoneCalendar.d.ts b/handlers/workOrders-get/milestoneCalendar.d.ts new file mode 100644 index 00000000..9621c611 --- /dev/null +++ b/handlers/workOrders-get/milestoneCalendar.d.ts @@ -0,0 +1,3 @@ +import type { RequestHandler } from "express"; +export declare const handler: RequestHandler; +export default handler; diff --git a/handlers/workOrders-get/milestoneCalendar.js b/handlers/workOrders-get/milestoneCalendar.js new file mode 100644 index 00000000..359b4ed8 --- /dev/null +++ b/handlers/workOrders-get/milestoneCalendar.js @@ -0,0 +1,6 @@ +export const handler = (request, response) => { + response.render("workOrder-milestoneCalendar", { + headTitle: "Work Order Milestone Calendar" + }); +}; +export default handler; diff --git a/handlers/workOrders-get/milestoneCalendar.ts b/handlers/workOrders-get/milestoneCalendar.ts new file mode 100644 index 00000000..a8fd8670 --- /dev/null +++ b/handlers/workOrders-get/milestoneCalendar.ts @@ -0,0 +1,9 @@ +import type { RequestHandler } from "express"; + +export const handler: RequestHandler = (request, response) => { + response.render("workOrder-milestoneCalendar", { + headTitle: "Work Order Milestone Calendar" + }); +}; + +export default handler; diff --git a/handlers/workOrders-post/doAddWorkOrderMilestone.js b/handlers/workOrders-post/doAddWorkOrderMilestone.js index 069dc191..0b2bc029 100644 --- a/handlers/workOrders-post/doAddWorkOrderMilestone.js +++ b/handlers/workOrders-post/doAddWorkOrderMilestone.js @@ -2,7 +2,9 @@ import { addWorkOrderMilestone } from "../../helpers/lotOccupancyDB/addWorkOrder import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js"; export const handler = async (request, response) => { const success = addWorkOrderMilestone(request.body, request.session); - const workOrderMilestones = getWorkOrderMilestones(request.body.workOrderId); + const workOrderMilestones = getWorkOrderMilestones({ + workOrderId: request.body.workOrderId + }); response.json({ success, workOrderMilestones diff --git a/handlers/workOrders-post/doAddWorkOrderMilestone.ts b/handlers/workOrders-post/doAddWorkOrderMilestone.ts index 9d931926..782bdc58 100644 --- a/handlers/workOrders-post/doAddWorkOrderMilestone.ts +++ b/handlers/workOrders-post/doAddWorkOrderMilestone.ts @@ -6,9 +6,9 @@ import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrde export const handler: RequestHandler = async (request, response) => { const success = addWorkOrderMilestone(request.body, request.session); - const workOrderMilestones = getWorkOrderMilestones( - request.body.workOrderId - ); + const workOrderMilestones = getWorkOrderMilestones({ + workOrderId: request.body.workOrderId + }); response.json({ success, diff --git a/handlers/workOrders-post/doCompleteWorkOrderMilestone.js b/handlers/workOrders-post/doCompleteWorkOrderMilestone.js index 0e18c572..a8ac95fe 100644 --- a/handlers/workOrders-post/doCompleteWorkOrderMilestone.js +++ b/handlers/workOrders-post/doCompleteWorkOrderMilestone.js @@ -4,7 +4,9 @@ export const handler = async (request, response) => { const success = completeWorkOrderMilestone({ workOrderMilestoneId: request.body.workOrderMilestoneId }, request.session); - const workOrderMilestones = getWorkOrderMilestones(request.body.workOrderId); + const workOrderMilestones = getWorkOrderMilestones({ + workOrderId: request.body.workOrderId + }); response.json({ success, workOrderMilestones diff --git a/handlers/workOrders-post/doCompleteWorkOrderMilestone.ts b/handlers/workOrders-post/doCompleteWorkOrderMilestone.ts index 324c0550..1b7f1158 100644 --- a/handlers/workOrders-post/doCompleteWorkOrderMilestone.ts +++ b/handlers/workOrders-post/doCompleteWorkOrderMilestone.ts @@ -12,9 +12,9 @@ export const handler: RequestHandler = async (request, response) => { request.session ); - const workOrderMilestones = getWorkOrderMilestones( - request.body.workOrderId - ); + const workOrderMilestones = getWorkOrderMilestones({ + workOrderId: request.body.workOrderId + }); response.json({ success, diff --git a/handlers/workOrders-post/doDeleteWorkOrderMilestone.js b/handlers/workOrders-post/doDeleteWorkOrderMilestone.js index dab411dc..1b440168 100644 --- a/handlers/workOrders-post/doDeleteWorkOrderMilestone.js +++ b/handlers/workOrders-post/doDeleteWorkOrderMilestone.js @@ -2,7 +2,9 @@ import { deleteWorkOrderMilestone } from "../../helpers/lotOccupancyDB/deleteWor import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js"; export const handler = async (request, response) => { const success = deleteWorkOrderMilestone(request.body.workOrderMilestoneId, request.session); - const workOrderMilestones = getWorkOrderMilestones(request.body.workOrderId); + const workOrderMilestones = getWorkOrderMilestones({ + workOrderId: request.body.workOrderId + }); response.json({ success, workOrderMilestones diff --git a/handlers/workOrders-post/doDeleteWorkOrderMilestone.ts b/handlers/workOrders-post/doDeleteWorkOrderMilestone.ts index 008dba44..d3dccaf8 100644 --- a/handlers/workOrders-post/doDeleteWorkOrderMilestone.ts +++ b/handlers/workOrders-post/doDeleteWorkOrderMilestone.ts @@ -10,9 +10,9 @@ export const handler: RequestHandler = async (request, response) => { request.session ); - const workOrderMilestones = getWorkOrderMilestones( - request.body.workOrderId - ); + const workOrderMilestones = getWorkOrderMilestones({ + workOrderId: request.body.workOrderId + }); response.json({ success, diff --git a/handlers/workOrders-post/doGetWorkOrderMilestones.d.ts b/handlers/workOrders-post/doGetWorkOrderMilestones.d.ts new file mode 100644 index 00000000..e69de29b diff --git a/handlers/workOrders-post/doGetWorkOrderMilestones.js b/handlers/workOrders-post/doGetWorkOrderMilestones.js new file mode 100644 index 00000000..e69de29b diff --git a/handlers/workOrders-post/doGetWorkOrderMilestones.ts b/handlers/workOrders-post/doGetWorkOrderMilestones.ts new file mode 100644 index 00000000..e69de29b diff --git a/handlers/workOrders-post/doReopenWorkOrderMilestone.js b/handlers/workOrders-post/doReopenWorkOrderMilestone.js index 8ea0cd7e..5003576c 100644 --- a/handlers/workOrders-post/doReopenWorkOrderMilestone.js +++ b/handlers/workOrders-post/doReopenWorkOrderMilestone.js @@ -2,7 +2,9 @@ import { reopenWorkOrderMilestone } from "../../helpers/lotOccupancyDB/reopenWor import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js"; export const handler = async (request, response) => { const success = reopenWorkOrderMilestone(request.body.workOrderMilestoneId, request.session); - const workOrderMilestones = getWorkOrderMilestones(request.body.workOrderId); + const workOrderMilestones = getWorkOrderMilestones({ + workOrderId: request.body.workOrderId + }); response.json({ success, workOrderMilestones diff --git a/handlers/workOrders-post/doReopenWorkOrderMilestone.ts b/handlers/workOrders-post/doReopenWorkOrderMilestone.ts index 72dc1250..d8c4cef2 100644 --- a/handlers/workOrders-post/doReopenWorkOrderMilestone.ts +++ b/handlers/workOrders-post/doReopenWorkOrderMilestone.ts @@ -10,9 +10,9 @@ export const handler: RequestHandler = async (request, response) => { request.session ); - const workOrderMilestones = getWorkOrderMilestones( - request.body.workOrderId - ); + const workOrderMilestones = getWorkOrderMilestones({ + workOrderId: request.body.workOrderId + }); response.json({ success, diff --git a/handlers/workOrders-post/doUpdateWorkOrderMilestone.js b/handlers/workOrders-post/doUpdateWorkOrderMilestone.js index 54783961..211da0c4 100644 --- a/handlers/workOrders-post/doUpdateWorkOrderMilestone.js +++ b/handlers/workOrders-post/doUpdateWorkOrderMilestone.js @@ -2,7 +2,9 @@ import { updateWorkOrderMilestone } from "../../helpers/lotOccupancyDB/updateWor import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrderMilestones.js"; export const handler = async (request, response) => { const success = updateWorkOrderMilestone(request.body, request.session); - const workOrderMilestones = getWorkOrderMilestones(request.body.workOrderId); + const workOrderMilestones = getWorkOrderMilestones({ + workOrderId: request.body.workOrderId + }); response.json({ success, workOrderMilestones diff --git a/handlers/workOrders-post/doUpdateWorkOrderMilestone.ts b/handlers/workOrders-post/doUpdateWorkOrderMilestone.ts index d9a97503..371d227e 100644 --- a/handlers/workOrders-post/doUpdateWorkOrderMilestone.ts +++ b/handlers/workOrders-post/doUpdateWorkOrderMilestone.ts @@ -6,9 +6,9 @@ import { getWorkOrderMilestones } from "../../helpers/lotOccupancyDB/getWorkOrde export const handler: RequestHandler = async (request, response) => { const success = updateWorkOrderMilestone(request.body, request.session); - const workOrderMilestones = getWorkOrderMilestones( - request.body.workOrderId - ); + const workOrderMilestones = getWorkOrderMilestones({ + workOrderId: request.body.workOrderId + }); response.json({ success, diff --git a/helpers/lotOccupancyDB/getWorkOrder.js b/helpers/lotOccupancyDB/getWorkOrder.js index 314f4c45..7db34f24 100644 --- a/helpers/lotOccupancyDB/getWorkOrder.js +++ b/helpers/lotOccupancyDB/getWorkOrder.js @@ -36,7 +36,9 @@ const _getWorkOrder = (sql, workOrderId_or_workOrderNumber) => { includeOccupants: true }, database).lotOccupancies; workOrder.workOrderComments = getWorkOrderComments(workOrder.workOrderId, database); - workOrder.workOrderMilestones = getWorkOrderMilestones(workOrder.workOrderId, database); + workOrder.workOrderMilestones = getWorkOrderMilestones({ + workOrderId: workOrder.workOrderId + }, database); } database.close(); return workOrder; diff --git a/helpers/lotOccupancyDB/getWorkOrder.ts b/helpers/lotOccupancyDB/getWorkOrder.ts index 80da4911..41413c82 100644 --- a/helpers/lotOccupancyDB/getWorkOrder.ts +++ b/helpers/lotOccupancyDB/getWorkOrder.ts @@ -68,7 +68,9 @@ const _getWorkOrder = ( ); workOrder.workOrderMilestones = getWorkOrderMilestones( - workOrder.workOrderId, + { + workOrderId: workOrder.workOrderId + }, database ); } diff --git a/helpers/lotOccupancyDB/getWorkOrderMilestones.d.ts b/helpers/lotOccupancyDB/getWorkOrderMilestones.d.ts index 90228713..8a26ffe3 100644 --- a/helpers/lotOccupancyDB/getWorkOrderMilestones.d.ts +++ b/helpers/lotOccupancyDB/getWorkOrderMilestones.d.ts @@ -1,4 +1,7 @@ import sqlite from "better-sqlite3"; import type * as recordTypes from "../../types/recordTypes"; -export declare const getWorkOrderMilestones: (workOrderId: number | string, connectedDatabase?: sqlite.Database) => recordTypes.WorkOrderMilestone[]; +interface WorkOrderMilestoneFilters { + workOrderId?: number | string; +} +export declare const getWorkOrderMilestones: (filters: WorkOrderMilestoneFilters, connectedDatabase?: sqlite.Database) => recordTypes.WorkOrderMilestone[]; export default getWorkOrderMilestones; diff --git a/helpers/lotOccupancyDB/getWorkOrderMilestones.js b/helpers/lotOccupancyDB/getWorkOrderMilestones.js index 05b2bbba..41655efb 100644 --- a/helpers/lotOccupancyDB/getWorkOrderMilestones.js +++ b/helpers/lotOccupancyDB/getWorkOrderMilestones.js @@ -1,13 +1,19 @@ import sqlite from "better-sqlite3"; import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js"; import { dateIntegerToString, timeIntegerToString } from "@cityssm/expressjs-server-js/dateTimeFns.js"; -export const getWorkOrderMilestones = (workOrderId, connectedDatabase) => { +export const getWorkOrderMilestones = (filters, connectedDatabase) => { const database = connectedDatabase || sqlite(databasePath, { readonly: true }); database.function("userFn_dateIntegerToString", dateIntegerToString); database.function("userFn_timeIntegerToString", timeIntegerToString); + let sqlWhereClause = " where m.recordDelete_timeMillis is null"; + const sqlParameters = []; + if (filters.workOrderId) { + sqlWhereClause += " and m.workOrderId = ?"; + sqlParameters.push(filters.workOrderId); + } const workOrderMilestones = database .prepare("select m.workOrderMilestoneId," + " m.workOrderMilestoneTypeId, t.workORderMilestoneType," + @@ -19,13 +25,12 @@ export const getWorkOrderMilestones = (workOrderId, connectedDatabase) => { " m.recordCreate_userName, m.recordUpdate_userName" + " from WorkOrderMilestones m" + " left join WorkOrderMilestoneTypes t on m.workOrderMilestoneTypeId = t.workOrderMilestoneTypeId" + - " where m.recordDelete_timeMillis is null" + - " and m.workOrderId = ?" + + sqlWhereClause + " order by" + " m.workOrderMilestoneCompletionDate, m.workOrderMilestoneCompletionTime," + " m.workOrderMilestoneDate, case when m.workOrderMilestoneTime = 0 then 9999 else m.workOrderMilestoneTime end," + " t.orderNumber, m.workOrderMilestoneId") - .all(workOrderId); + .all(sqlParameters); if (!connectedDatabase) { database.close(); } diff --git a/helpers/lotOccupancyDB/getWorkOrderMilestones.ts b/helpers/lotOccupancyDB/getWorkOrderMilestones.ts index 1aeeddb3..546ff482 100644 --- a/helpers/lotOccupancyDB/getWorkOrderMilestones.ts +++ b/helpers/lotOccupancyDB/getWorkOrderMilestones.ts @@ -9,8 +9,12 @@ import { import type * as recordTypes from "../../types/recordTypes"; +interface WorkOrderMilestoneFilters { + workOrderId?: number | string; +} + export const getWorkOrderMilestones = ( - workOrderId: number | string, + filters: WorkOrderMilestoneFilters, connectedDatabase?: sqlite.Database ): recordTypes.WorkOrderMilestone[] => { const database = @@ -22,6 +26,14 @@ export const getWorkOrderMilestones = ( database.function("userFn_dateIntegerToString", dateIntegerToString); database.function("userFn_timeIntegerToString", timeIntegerToString); + let sqlWhereClause = " where m.recordDelete_timeMillis is null"; + const sqlParameters = []; + + if (filters.workOrderId) { + sqlWhereClause += " and m.workOrderId = ?"; + sqlParameters.push(filters.workOrderId); + } + const workOrderMilestones = database .prepare( "select m.workOrderMilestoneId," + @@ -34,14 +46,13 @@ export const getWorkOrderMilestones = ( " m.recordCreate_userName, m.recordUpdate_userName" + " from WorkOrderMilestones m" + " left join WorkOrderMilestoneTypes t on m.workOrderMilestoneTypeId = t.workOrderMilestoneTypeId" + - " where m.recordDelete_timeMillis is null" + - " and m.workOrderId = ?" + + sqlWhereClause + " order by" + " m.workOrderMilestoneCompletionDate, m.workOrderMilestoneCompletionTime," + " m.workOrderMilestoneDate, case when m.workOrderMilestoneTime = 0 then 9999 else m.workOrderMilestoneTime end," + " t.orderNumber, m.workOrderMilestoneId" ) - .all(workOrderId); + .all(sqlParameters); if (!connectedDatabase) { database.close(); diff --git a/public-typescript/workOrderMilestoneCalendar.d.ts b/public-typescript/workOrderMilestoneCalendar.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/public-typescript/workOrderMilestoneCalendar.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/public-typescript/workOrderMilestoneCalendar.js b/public-typescript/workOrderMilestoneCalendar.js new file mode 100644 index 00000000..2e16c5fb --- /dev/null +++ b/public-typescript/workOrderMilestoneCalendar.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +(() => { + const urlPrefix = document.querySelector("main").dataset.urlPrefix; + const workOrderSearchFiltersFormElement = document.querySelector("#form--searchFilters"); + const workOrderMilestoneDateFilterElement = workOrderSearchFiltersFormElement.querySelector("#searchFilter--workOrderMilestoneDateFilter"); + const workOrderMilestoneDateStringElement = workOrderSearchFiltersFormElement.querySelector("#searchFilter--workOrderMilestoneDateString"); + const renderMilestones = (workOrderMilestones) => { + }; + const getMilestones = (event) => { + if (event) { + event.preventDefault(); + } + cityssm.postJSON(urlPrefix + "/workOrders/doGetWorkOrderMilestones", workOrderSearchFiltersFormElement, (responseJSON) => { + renderMilestones(responseJSON.workOrderMilestones); + }); + }; + workOrderMilestoneDateFilterElement.addEventListener("change", () => { + workOrderMilestoneDateStringElement.disabled = (workOrderMilestoneDateFilterElement.value !== "date"); + getMilestones(); + }); + workOrderMilestoneDateStringElement.addEventListener("change", getMilestones); + workOrderSearchFiltersFormElement.addEventListener("submit", getMilestones); + getMilestones(); +})(); diff --git a/public-typescript/workOrderMilestoneCalendar.ts b/public-typescript/workOrderMilestoneCalendar.ts new file mode 100644 index 00000000..80c30139 --- /dev/null +++ b/public-typescript/workOrderMilestoneCalendar.ts @@ -0,0 +1,42 @@ +/* eslint-disable unicorn/prefer-module */ + +import type * as recordTypes from "../types/recordTypes"; + +import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; + +declare const cityssm: cityssmGlobal; + +(() => { + const urlPrefix = document.querySelector("main").dataset.urlPrefix; + + const workOrderSearchFiltersFormElement = document.querySelector("#form--searchFilters") as HTMLFormElement; + + const workOrderMilestoneDateFilterElement = workOrderSearchFiltersFormElement.querySelector("#searchFilter--workOrderMilestoneDateFilter") as HTMLSelectElement; + const workOrderMilestoneDateStringElement = workOrderSearchFiltersFormElement.querySelector("#searchFilter--workOrderMilestoneDateString") as HTMLInputElement; + + const renderMilestones = (workOrderMilestones: recordTypes.WorkOrderMilestone[]) => { + + }; + + const getMilestones = (event?: Event) => { + if (event) { + event.preventDefault(); + } + + cityssm.postJSON(urlPrefix + "/workOrders/doGetWorkOrderMilestones", + workOrderSearchFiltersFormElement, + (responseJSON: {workOrderMilestones: recordTypes.WorkOrderMilestone[]}) => { + renderMilestones(responseJSON.workOrderMilestones); + }) + } ; + + workOrderMilestoneDateFilterElement.addEventListener("change", () => { + workOrderMilestoneDateStringElement.disabled = (workOrderMilestoneDateFilterElement.value !== "date"); + getMilestones(); + }); + + workOrderMilestoneDateStringElement.addEventListener("change", getMilestones); + workOrderSearchFiltersFormElement.addEventListener("submit", getMilestones); + + getMilestones(); +})(); \ No newline at end of file diff --git a/public/javascripts/workOrderMilestoneCalendar.min.js b/public/javascripts/workOrderMilestoneCalendar.min.js new file mode 100644 index 00000000..c2d8304e --- /dev/null +++ b/public/javascripts/workOrderMilestoneCalendar.min.js @@ -0,0 +1 @@ +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,r=document.querySelector("#form--searchFilters"),t=r.querySelector("#searchFilter--workOrderMilestoneDateFilter"),s=r.querySelector("#searchFilter--workOrderMilestoneDateString"),o=t=>{t&&t.preventDefault(),cityssm.postJSON(e+"/workOrders/doGetWorkOrderMilestones",r,e=>{e.workOrderMilestones})};t.addEventListener("change",()=>{s.disabled="date"!==t.value,o()}),s.addEventListener("change",o),r.addEventListener("submit",o),o()})(); \ No newline at end of file diff --git a/routes/workOrders.js b/routes/workOrders.js index 42925b81..5f6d326b 100644 --- a/routes/workOrders.js +++ b/routes/workOrders.js @@ -2,6 +2,7 @@ import { Router } from "express"; import * as permissionHandlers from "../handlers/permissions.js"; import handler_search from "../handlers/workOrders-get/search.js"; import handler_doSearchWorkOrders from "../handlers/workOrders-post/doSearchWorkOrders.js"; +import handler_milestoneCalendar from "../handlers/workOrders-get/milestoneCalendar.js"; import handler_view from "../handlers/workOrders-get/view.js"; import handler_doReopenWorkOrder from "../handlers/workOrders-post/doReopenWorkOrder.js"; import handler_new from "../handlers/workOrders-get/new.js"; @@ -20,6 +21,7 @@ import handler_doDeleteWorkOrderMilestone from "../handlers/workOrders-post/doDe export const router = Router(); router.get("/", handler_search); router.post("/doSearchWorkOrders", handler_doSearchWorkOrders); +router.get("/milestoneCalendar", handler_milestoneCalendar); router.get("/new", permissionHandlers.adminGetHandler, handler_new); router.post("/doCreateWorkOrder", permissionHandlers.updatePostHandler, handler_doCreateWorkOrder); router.get("/:workOrderId", handler_view); diff --git a/routes/workOrders.ts b/routes/workOrders.ts index 10a9c019..f0f1d01b 100644 --- a/routes/workOrders.ts +++ b/routes/workOrders.ts @@ -5,6 +5,8 @@ import * as permissionHandlers from "../handlers/permissions.js"; import handler_search from "../handlers/workOrders-get/search.js"; import handler_doSearchWorkOrders from "../handlers/workOrders-post/doSearchWorkOrders.js"; +import handler_milestoneCalendar from "../handlers/workOrders-get/milestoneCalendar.js"; + import handler_view from "../handlers/workOrders-get/view.js"; import handler_doReopenWorkOrder from "../handlers/workOrders-post/doReopenWorkOrder.js"; @@ -28,10 +30,18 @@ import handler_doDeleteWorkOrderMilestone from "../handlers/workOrders-post/doDe export const router = Router(); +// Search + router.get("/", handler_search); router.post("/doSearchWorkOrders", handler_doSearchWorkOrders); +// Milestone Calendar + +router.get("/milestoneCalendar", handler_milestoneCalendar); + +// New + router.get("/new", permissionHandlers.adminGetHandler, handler_new); router.post( @@ -40,6 +50,8 @@ router.post( handler_doCreateWorkOrder ); +// View + router.get("/:workOrderId", handler_view); router.post( @@ -48,6 +60,8 @@ router.post( handler_doReopenWorkOrder ); +// Edit + router.get( "/:workOrderId/edit", permissionHandlers.updateGetHandler, diff --git a/views/_menu-workOrders.ejs b/views/_menu-workOrders.ejs new file mode 100644 index 00000000..d034dc17 --- /dev/null +++ b/views/_menu-workOrders.ejs @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/views/workOrder-milestoneCalendar.ejs b/views/workOrder-milestoneCalendar.ejs new file mode 100644 index 00000000..4477a018 --- /dev/null +++ b/views/workOrder-milestoneCalendar.ejs @@ -0,0 +1,66 @@ +<%- include('_header'); -%> + +<%- include('_header'); -%> + +
+
+ <%- include('_menu-workOrders'); -%> +
+
+ + +

+ Milestone Calendar +

+ +
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+ +<%- include('_footerA'); -%> + + + +<%- include('_footerB'); -%> \ No newline at end of file diff --git a/views/workOrder-search.ejs b/views/workOrder-search.ejs index 4674e092..2ede23ef 100644 --- a/views/workOrder-search.ejs +++ b/views/workOrder-search.ejs @@ -1,76 +1,85 @@ <%- include('_header'); -%> - - -

- Work Order Search -

- -<% if (user.userProperties.canUpdate) { %> -
- - - Create a New Work Order - -
-<% } %> - -
-
- - - -
-
-
- -
-
- -
- - - -
-
-
-
-
- -
-
- -
-
-
- -
-
-
+ <% } %> -
+
+
+ + + +
+
+
+ +
+
+ +
+ + + +
+
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+
+ +
+ + <%- include('_footerA'); -%>