@cityssm/worktech-api
Version:
Integrations with the WorkTech work order management system.
59 lines (58 loc) • 2.03 kB
JavaScript
import { connect } from '@cityssm/mssql-multi-pool';
import NodeCache from 'node-cache';
import { cacheTimeToLiveSeconds } from '../../apiConfig.js';
const sql = `SELECT [ITMSysID] as itemSystemId,
[] as itemId,
coalesce([DESC], '') as itemDescription,
coalesce([ItemClass], '') as itemClass,
coalesce([Type], '') as itemType,
coalesce([Brand], '') as itemBrand,
coalesce([Model], '') as itemModel,
[] as itemModelYear,
coalesce([Serial], '') as serialNumber,
coalesce([Status], '') as itemStatus,
coalesce([Location], '') as location,
coalesce([Dept], '') as department,
coalesce([Division], '') as division,
coalesce([Company], '') as company,
coalesce([FlType], '') as fuelType,
coalesce([ExJob_ID], '') as expenseJobId,
coalesce([ExActv_ID], '') as expenseActivityId,
coalesce([ExObjCode], '') as expenseObjectCode,
coalesce([RevJob_ID], '') as revenueJobId,
coalesce([RevActv_ID], '') as revenueActivityId,
coalesce([RevObjCode], '') as revenueObjectCode,
[] as stock,
coalesce([Units], '') as unit,
[] as unitCost,
[] as quantityOnHand,
coalesce([ExtItem_ID], '') as externalItemId,
coalesce([Comments], '') as comments
FROM [WMITM] WITH (NOLOCK)
where [Type] not in ('Employee', 'Equipment')`;
const cache = new NodeCache({
stdTTL: cacheTimeToLiveSeconds
});
/**
* Retrieves an item.
* @param mssqlConfig - SQL Server configuration.
* @param itemId - The item id.
* @returns - The item, if available.
*/
export async function getItemByItemId(mssqlConfig, itemId) {
let item = cache.get(itemId);
if (item !== undefined) {
return item;
}
const pool = await connect(mssqlConfig);
const itemResult = (await pool
.request()
.input('itemId', itemId)
.query(`${sql} and Item_ID = @itemId`));
if (itemResult.recordset.length === 0) {
return undefined;
}
item = itemResult.recordset[0];
cache.set(itemId, item);
return item;
}