diff --git a/helpers/lotOccupancyDB/getWorkOrders.js b/helpers/lotOccupancyDB/getWorkOrders.js index 10fe30d5..b49833d8 100644 --- a/helpers/lotOccupancyDB/getWorkOrders.js +++ b/helpers/lotOccupancyDB/getWorkOrders.js @@ -65,26 +65,33 @@ export async function getWorkOrders(filters, options, connectedDatabase) { let workOrders = []; if (count > 0) { workOrders = database - .prepare('select w.workOrderId,' + - ' w.workOrderTypeId, t.workOrderType,' + - ' w.workOrderNumber, w.workOrderDescription,' + - ' w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString,' + - ' 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 desc' + - (options.limit === -1 - ? '' - : ` limit ${options.limit} offset ${options.offset}`)) + .prepare(`select w.workOrderId, + w.workOrderTypeId, t.workOrderType, + w.workOrderNumber, w.workOrderDescription, + w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString, + w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString, + ifnull(m.workOrderMilestoneCount, 0) as workOrderMilestoneCount, + ifnull(m.workOrderMilestoneCompletionCount, 0) as workOrderMilestoneCompletionCount, + ifnull(l.workOrderLotCount, 0) as workOrderLotCount + 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 + left join ( + select workOrderId, count(lotId) as workOrderLotCount + from WorkOrderLots + where recordDelete_timeMillis is null + group by workOrderId) l on w.workOrderId = l.workOrderId + ${sqlWhereClause} + order by w.workOrderOpenDate desc, w.workOrderNumber desc + ${options.limit === -1 + ? '' + : ` limit ${options.limit} offset ${options.offset}`}`) .all(sqlParameters); } const hasInclusions = (options.includeComments ?? false) || @@ -96,13 +103,18 @@ export async function getWorkOrders(filters, options, connectedDatabase) { workOrder.workOrderComments = await getWorkOrderComments(workOrder.workOrderId, database); } if (options.includeLotsAndLotOccupancies ?? false) { - const workOrderLotsResults = await getLots({ - workOrderId: workOrder.workOrderId - }, { - limit: -1, - offset: 0 - }, database); - workOrder.workOrderLots = workOrderLotsResults.lots; + if (workOrder.workOrderLotCount === 0) { + workOrder.workOrderLots = []; + } + else { + const workOrderLotsResults = await getLots({ + workOrderId: workOrder.workOrderId + }, { + limit: -1, + offset: 0 + }, database); + workOrder.workOrderLots = workOrderLotsResults.lots; + } const lotOccupancies = await getLotOccupancies({ workOrderId: workOrder.workOrderId }, { diff --git a/helpers/lotOccupancyDB/getWorkOrders.ts b/helpers/lotOccupancyDB/getWorkOrders.ts index a4b7d63b..52fa40dd 100644 --- a/helpers/lotOccupancyDB/getWorkOrders.ts +++ b/helpers/lotOccupancyDB/getWorkOrders.ts @@ -121,26 +121,35 @@ export async function getWorkOrders( if (count > 0) { workOrders = database .prepare( - 'select w.workOrderId,' + - ' w.workOrderTypeId, t.workOrderType,' + - ' w.workOrderNumber, w.workOrderDescription,' + - ' w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString,' + - ' 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 desc' + - (options.limit === -1 - ? '' - : ` limit ${options.limit} offset ${options.offset}`) + `select w.workOrderId, + w.workOrderTypeId, t.workOrderType, + w.workOrderNumber, w.workOrderDescription, + w.workOrderOpenDate, userFn_dateIntegerToString(w.workOrderOpenDate) as workOrderOpenDateString, + w.workOrderCloseDate, userFn_dateIntegerToString(w.workOrderCloseDate) as workOrderCloseDateString, + ifnull(m.workOrderMilestoneCount, 0) as workOrderMilestoneCount, + ifnull(m.workOrderMilestoneCompletionCount, 0) as workOrderMilestoneCompletionCount, + ifnull(l.workOrderLotCount, 0) as workOrderLotCount + 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 + left join ( + select workOrderId, count(lotId) as workOrderLotCount + from WorkOrderLots + where recordDelete_timeMillis is null + group by workOrderId) l on w.workOrderId = l.workOrderId + ${sqlWhereClause} + order by w.workOrderOpenDate desc, w.workOrderNumber desc + ${ + options.limit === -1 + ? '' + : ` limit ${options.limit} offset ${options.offset}` + }` ) .all(sqlParameters) } @@ -160,18 +169,22 @@ export async function getWorkOrders( } if (options.includeLotsAndLotOccupancies ?? false) { - const workOrderLotsResults = await getLots( - { - workOrderId: workOrder.workOrderId - }, - { - limit: -1, - offset: 0 - }, - database - ) + if (workOrder.workOrderLotCount === 0) { + workOrder.workOrderLots = [] + } else { + const workOrderLotsResults = await getLots( + { + workOrderId: workOrder.workOrderId + }, + { + limit: -1, + offset: 0 + }, + database + ) - workOrder.workOrderLots = workOrderLotsResults.lots + workOrder.workOrderLots = workOrderLotsResults.lots + } const lotOccupancies = await getLotOccupancies( { diff --git a/types/recordTypes.d.ts b/types/recordTypes.d.ts index 797136b7..13a04127 100644 --- a/types/recordTypes.d.ts +++ b/types/recordTypes.d.ts @@ -264,6 +264,7 @@ export interface WorkOrder extends Record { workOrderMilestoneCompletionCount?: number; workOrderComments?: WorkOrderComment[]; workOrderLots?: Lot[]; + workOrderLotCount?: number; workOrderLotOccupancies?: LotOccupancy[]; } export interface User { diff --git a/types/recordTypes.ts b/types/recordTypes.ts index 107c0f82..ddf4d1ff 100644 --- a/types/recordTypes.ts +++ b/types/recordTypes.ts @@ -353,7 +353,10 @@ export interface WorkOrder extends Record { workOrderMilestoneCompletionCount?: number workOrderComments?: WorkOrderComment[] + workOrderLots?: Lot[] + workOrderLotCount?: number + workOrderLotOccupancies?: LotOccupancy[] }