diff --git a/helpers/lotOccupancyDB/getWorkOrders.js b/helpers/lotOccupancyDB/getWorkOrders.js
index 6a09fa7b..a2f9babc 100644
--- a/helpers/lotOccupancyDB/getWorkOrders.js
+++ b/helpers/lotOccupancyDB/getWorkOrders.js
@@ -32,9 +32,17 @@ export const getWorkOrders = (filters, options) => {
" w.workOrderTypeId, t.workOrderType," +
" w.workOrderNumber, w.workOrderDescription," +
" w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString," +
- " w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString" +
+ " w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString," +
+ " ifnull(m.workOrderMilestoneCount, 0) as workOrderMilestoneCount," +
+ " ifnull(m.workOrderMilestoneCompletionCount, 0) as workOrderMilestoneCompletionCount" +
" from WorkOrders w" +
" left join WorkOrderTypes t on w.workOrderTypeId = t.workOrderTypeId" +
+ (" left join (select workOrderId," +
+ " count(workOrderMilestoneId) as workOrderMilestoneCount," +
+ " sum(case when workOrderMilestoneCompletionDate is null then 0 else 1 end) as workOrderMilestoneCompletionCount" +
+ " from WorkOrderMilestones" +
+ " where recordDelete_timeMillis is null" +
+ " group by workOrderId) m on w.workOrderId = m.workOrderId") +
sqlWhereClause +
" order by w.workOrderOpenDate desc, w.workOrderNumber" +
(options
diff --git a/helpers/lotOccupancyDB/getWorkOrders.ts b/helpers/lotOccupancyDB/getWorkOrders.ts
index bdb342cd..a28d1144 100644
--- a/helpers/lotOccupancyDB/getWorkOrders.ts
+++ b/helpers/lotOccupancyDB/getWorkOrders.ts
@@ -36,7 +36,7 @@ export const getWorkOrders = (
sqlWhereClause += " and w.workOrderTypeId = ?";
sqlParameters.push(filters.workOrderTypeId);
}
-
+
if (filters.workOrderOpenStatus) {
if (filters.workOrderOpenStatus === "open") {
sqlWhereClause += " and w.workOrderCloseDate is null";
@@ -62,9 +62,17 @@ export const getWorkOrders = (
" w.workOrderTypeId, t.workOrderType," +
" w.workOrderNumber, w.workOrderDescription," +
" w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString," +
- " w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString" +
+ " w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString," +
+ " ifnull(m.workOrderMilestoneCount, 0) as workOrderMilestoneCount," +
+ " ifnull(m.workOrderMilestoneCompletionCount, 0) as workOrderMilestoneCompletionCount" +
" from WorkOrders w" +
" left join WorkOrderTypes t on w.workOrderTypeId = t.workOrderTypeId" +
+ (" left join (select workOrderId," +
+ " count(workOrderMilestoneId) as workOrderMilestoneCount," +
+ " sum(case when workOrderMilestoneCompletionDate is null then 0 else 1 end) as workOrderMilestoneCompletionCount" +
+ " from WorkOrderMilestones" +
+ " where recordDelete_timeMillis is null" +
+ " group by workOrderId) m on w.workOrderId = m.workOrderId") +
sqlWhereClause +
" order by w.workOrderOpenDate desc, w.workOrderNumber" +
(options
diff --git a/public-typescript/workOrderSearch.js b/public-typescript/workOrderSearch.js
index 68675cef..63089239 100644
--- a/public-typescript/workOrderSearch.js
+++ b/public-typescript/workOrderSearch.js
@@ -48,6 +48,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
? workOrder.workOrderCloseDateString
: '(No Close Date)') +
"") +
+ ("
" +
+ (workOrder.workOrderMilestoneCount === 0
+ ? "-"
+ : workOrder.workOrderMilestoneCompletionCount +
+ " / " +
+ workOrder.workOrderMilestoneCount) +
+ " | ") +
"");
}
searchResultsContainerElement.innerHTML =
@@ -58,6 +65,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
"Work Order Description | " +
"Open Date | " +
"Close Date | " +
+ "Progress | " +
"" +
"" +
'' +
diff --git a/public-typescript/workOrderSearch.ts b/public-typescript/workOrderSearch.ts
index a1c3aacd..8476680c 100644
--- a/public-typescript/workOrderSearch.ts
+++ b/public-typescript/workOrderSearch.ts
@@ -79,6 +79,13 @@ declare const cityssm: cityssmGlobal;
? workOrder.workOrderCloseDateString
: '
(No Close Date)') +
"") +
+ ("
" +
+ (workOrder.workOrderMilestoneCount === 0
+ ? "-"
+ : workOrder.workOrderMilestoneCompletionCount +
+ " / " +
+ workOrder.workOrderMilestoneCount) +
+ " | ") +
""
);
}
@@ -91,6 +98,7 @@ declare const cityssm: cityssmGlobal;
"
Work Order Description | " +
"
Open Date | " +
"
Close Date | " +
+ "
Progress | " +
"" +
"
" +
'' +
diff --git a/public/javascripts/workOrderSearch.min.js b/public/javascripts/workOrderSearch.min.js
index 19ddc3a2..1bdbcaac 100644
--- a/public/javascripts/workOrderSearch.min.js
+++ b/public/javascripts/workOrderSearch.min.js
@@ -1 +1 @@
-"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,t=document.querySelector("#form--searchFilters"),r=document.querySelector("#container--searchResults"),s=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),a=document.querySelector("#searchFilter--offset"),i=()=>{const i=Number.parseInt(a.value,10);r.innerHTML='
Loading Work Orders...
',cityssm.postJSON(e+"/workOrders/doSearchWorkOrders",t,t=>{if(0===t.workOrders.length)return void(r.innerHTML='
There are no work orders that meet the search criteria.
');const a=document.createElement("tbody");for(const r of t.workOrders)a.insertAdjacentHTML("beforeend",'
| '+cityssm.escapeHTML(r.workOrderNumber)+" | "+cityssm.escapeHTML(r.workOrderType)+" | "+cityssm.escapeHTML(r.workOrderDescription)+" | "+r.workOrderOpenDateString+" | "+(r.workOrderCloseDate?r.workOrderCloseDateString:'(No Close Date)')+" |
");r.innerHTML='
| Work Order Number | Work Order Type | Work Order Description | Open Date | Close Date |
|---|
Displaying '+(i+1).toString()+" to "+Math.min(t.count,s+i)+" of "+t.count+'
':"")+"
",r.querySelector("table").append(a),i>0&&r.querySelector("button[data-page='previous']").addEventListener("click",d),s+i{a.value="0",i()},d=()=>{a.value=Math.max(Number.parseInt(a.value,10)-s,0).toString(),i()},n=()=>{a.value=(Number.parseInt(a.value,10)+s).toString(),i()},l=t.querySelectorAll("input, select");for(const e of l)e.addEventListener("change",o);t.addEventListener("submit",e=>{e.preventDefault(),o()}),i()})();
\ No newline at end of file
+"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=document.querySelector("main").dataset.urlPrefix,t=document.querySelector("#form--searchFilters"),r=document.querySelector("#container--searchResults"),s=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),a=document.querySelector("#searchFilter--offset"),o=()=>{const o=Number.parseInt(a.value,10);r.innerHTML='
Loading Work Orders...
',cityssm.postJSON(e+"/workOrders/doSearchWorkOrders",t,t=>{if(0===t.workOrders.length)return void(r.innerHTML='There are no work orders that meet the search criteria.
');const a=document.createElement("tbody");for(const r of t.workOrders)a.insertAdjacentHTML("beforeend",'| '+cityssm.escapeHTML(r.workOrderNumber)+" | "+cityssm.escapeHTML(r.workOrderType)+" | "+cityssm.escapeHTML(r.workOrderDescription)+" | "+r.workOrderOpenDateString+" | "+(r.workOrderCloseDate?r.workOrderCloseDateString:'(No Close Date)')+" | "+(0===r.workOrderMilestoneCount?"-":r.workOrderMilestoneCompletionCount+" / "+r.workOrderMilestoneCount)+" |
");r.innerHTML='| Work Order Number | Work Order Type | Work Order Description | Open Date | Close Date | Progress |
|---|
Displaying '+(o+1).toString()+" to "+Math.min(t.count,s+o)+" of "+t.count+'
':"")+"
",r.querySelector("table").append(a),o>0&&r.querySelector("button[data-page='previous']").addEventListener("click",n),s+o{a.value="0",o()},n=()=>{a.value=Math.max(Number.parseInt(a.value,10)-s,0).toString(),o()},d=()=>{a.value=(Number.parseInt(a.value,10)+s).toString(),o()},l=t.querySelectorAll("input, select");for(const e of l)e.addEventListener("change",i);t.addEventListener("submit",e=>{e.preventDefault(),i()}),o()})();
\ No newline at end of file
diff --git a/types/recordTypes.d.ts b/types/recordTypes.d.ts
index fa140217..12989950 100644
--- a/types/recordTypes.d.ts
+++ b/types/recordTypes.d.ts
@@ -232,6 +232,8 @@ export interface WorkOrder extends Record {
workOrderCloseDate?: number;
workOrderCloseDateString?: string;
workOrderMilestones?: WorkOrderMilestone[];
+ workOrderMilestoneCount?: number;
+ workOrderMilestoneCompletionCount?: number;
workOrderComments?: WorkOrderComment[];
workOrderLots?: Lot[];
workOrderLotOccupancies?: LotOccupancy[];
diff --git a/types/recordTypes.ts b/types/recordTypes.ts
index ede323ff..87f4ed7b 100644
--- a/types/recordTypes.ts
+++ b/types/recordTypes.ts
@@ -315,6 +315,9 @@ export interface WorkOrder extends Record {
workOrderCloseDateString?: string;
workOrderMilestones?: WorkOrderMilestone[];
+ workOrderMilestoneCount?: number;
+ workOrderMilestoneCompletionCount?: number;
+
workOrderComments?: WorkOrderComment[];
workOrderLots?: Lot[];
workOrderLotOccupancies?: LotOccupancy[];