@cityssm/worktech-api
Version:
Integrations with the WorkTech (Pearl) work order management system.
79 lines (67 loc) • 2.79 kB
JavaScript
import { NodeCache } from '@cacheable/node-cache';
import { connect } from '@cityssm/mssql-multi-pool';
import { cacheTimeToLiveSeconds } from '../../apiConfig.js';
const sql = `SELECT [SRQISysID] as serviceRequestSystemId,
[] as workOrderNumber,
coalesce([Proj_ID], '') as project,
[] as requestDateTime,
[] as dueDateTime,
[] as scheduledDateTime,
[] as doneDateTime,
[] as closedDateTime,
coalesce([ReqBy], '') as requestedBy,
coalesce([ReqPhone], '') as requestedByPhoneNumber,
coalesce([Add1], '') as address1,
[] as workOrderType,
coalesce([Series], '') as workOrderSeries,
coalesce([SubType], '') as workOrderSubType,
coalesce([Subject], '') as subject,
coalesce([Details], '') as details,
coalesce([Priority], '') as priority,
coalesce([Item_ID], '') as itemId,
coalesce([ExJob_ID], '') as jobId,
coalesce([Actv_ID], '') as activityId,
coalesce([ObjCode], '') as objectCode,
coalesce([ServiceClass], '') as serviceClass,
coalesce([ServiceType], '') as serviceType,
coalesce([Year], '') as fiscalYear,
coalesce([EvaluatedBy], '') as evaluatedBy,
coalesce([AssignTo], '') as assignedTo,
coalesce([Action], '') as action,
coalesce([ResponseNotes], '') as responseNotes,
coalesce([BillName], '') as billingName,
coalesce([UserDef1], '') as userDefined1,
coalesce([UserDef2], '') as userDefined2,
coalesce([UserDef3], '') as userDefined3,
coalesce([UserDef4], '') as userDefined4,
coalesce([UserDef5], '') as userDefined5
FROM [AMSRQI] WITH (NOLOCK)`;
const cache = new NodeCache({
stdTTL: cacheTimeToLiveSeconds
});
/**
* Retrieves a work order.
* @param mssqlConfig - SQL Server configuration.
* @param workOrderNumber - The work order number.
* @param bypassCache - Whether to bypass the cache
* @returns - The work order, if available.
*/
export async function getWorkOrderByWorkOrderNumber(mssqlConfig, workOrderNumber, bypassCache = false) {
const pool = await connect(mssqlConfig);
return await _getWorkOrderByWorkOrderNumber(pool.request(), workOrderNumber, bypassCache);
}
export async function _getWorkOrderByWorkOrderNumber(request, workOrderNumber, bypassCache = false) {
let workOrder = bypassCache ? undefined : cache.get(workOrderNumber);
if (workOrder !== undefined) {
return workOrder;
}
const workOrderResult = (await request
.input('workOrderNumber', workOrderNumber)
.query(`${sql} where WONOs = @workOrderNumber`));
if (workOrderResult.recordset.length === 0) {
return undefined;
}
workOrder = workOrderResult.recordset[0];
cache.set(workOrderNumber, workOrder);
return workOrder;
}