UNPKG

@cityssm/worktech-api

Version:

Integrations with the WorkTech (Pearl) work order management system.

77 lines (76 loc) 2.96 kB
import { NodeCache } from '@cacheable/node-cache'; import { connect } from '@cityssm/mssql-multi-pool'; import { cacheTimeToLiveSeconds } from '../../apiConfig.js'; const sql = `SELECT [ActvSysID] as activitySystemId, [Actv_ID] as activityId, coalesce([ActvType], '') as activityType, coalesce([DESC], '') as activityDescription, coalesce([ShortDesc], '') as activityShortDescription, coalesce([ActvClass], '') as activityClass, coalesce([AcctSeg], '') as accountSegment FROM [WMACD] WITH (NOLOCK)`; const cache = new NodeCache({ stdTTL: cacheTimeToLiveSeconds }); /** * Retrieves an activity. * @param mssqlConfig - SQL Server configuration. * @param activityId - The activity id * @param bypassCache - Whether to bypass the cache * @returns The activity, if available. */ export async function getActivityByActivityId(mssqlConfig, activityId, bypassCache = false) { let activityObject = bypassCache ? undefined : cache.get(activityId); if (activityObject !== undefined) { return activityObject; } const pool = await connect(mssqlConfig); const result = (await pool .request() .input('activityId', activityId) .query(`${sql} where Actv_ID = @activityId`)); if (result.recordset.length === 0) { return undefined; } activityObject = result.recordset[0]; cache.set(activityId, activityObject); return activityObject; } /** * Retrieves the activity associated with a given job and fiscal year. * @param mssqlConfig - SQL Server configuration * @param jobId - The job id * @param activityId - The activity id. * @param fiscalYear - The fiscal year * @returns - An array of activities. */ export async function getActivityAssignedToJobByActivityIdAndFiscalYear(mssqlConfig, jobId, activityId, fiscalYear) { const pool = await connect(mssqlConfig); const result = (await pool .request() .input('jobId', jobId) .input('activityId', activityId) .input('fiscalYear', fiscalYear) .query(`${sql} where Actv_ID = @activityId and Actv_ID in (select Actv_ID from WMJACA with (nolock) where Job_ID = @jobId and Year = @fiscalYear)`)); if (result.recordset.length === 0) { return undefined; } return result.recordset[0]; } /** * Retrieves the activities associated with a given job and fiscal year. * @param mssqlConfig - SQL Server configuration * @param jobId - The job id * @param fiscalYear - The fiscal year * @returns - An array of activities. */ export async function getActivitiesAssignedToJobByFiscalYear(mssqlConfig, jobId, fiscalYear) { const pool = await connect(mssqlConfig); const result = (await pool .request() .input('jobId', jobId) .input('fiscalYear', fiscalYear) .query(`${sql} where Actv_ID in (select Actv_ID from WMJACA with (nolock) where Job_ID = @jobId and Year = @fiscalYear)`)); return result.recordset; }