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)') + "") + + ("
") + "" ); } @@ -91,6 +98,7 @@ declare const cityssm: cityssmGlobal; "" + "" + "" + + "" + "" + "
" + + (workOrder.workOrderMilestoneCount === 0 + ? "-" + : workOrder.workOrderMilestoneCompletionCount + + " / " + + workOrder.workOrderMilestoneCount) + + "
Work Order DescriptionOpen DateClose DateProgress
" + '
' + 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",'
");r.innerHTML='
'+cityssm.escapeHTML(r.workOrderNumber)+""+cityssm.escapeHTML(r.workOrderType)+""+cityssm.escapeHTML(r.workOrderDescription)+""+r.workOrderOpenDateString+""+(r.workOrderCloseDate?r.workOrderCloseDateString:'(No Close Date)')+"
Work Order NumberWork Order TypeWork Order DescriptionOpen DateClose Date
Displaying '+(i+1).toString()+" to "+Math.min(t.count,s+i)+" of "+t.count+'
'+(i>0?'
':"")+(s+i
':"")+"
",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",'
");r.innerHTML='
'+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)+"
Work Order NumberWork Order TypeWork Order DescriptionOpen DateClose DateProgress
Displaying '+(o+1).toString()+" to "+Math.min(t.count,s+o)+" of "+t.count+'
'+(o>0?'
':"")+(s+o
':"")+"
",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[];