@cityssm/worktech-api
Version:
Integrations with the WorkTech (Pearl) work order management system.
81 lines (80 loc) • 3.1 kB
JavaScript
import { NodeCache } from '@cacheable/node-cache';
import { connect } from '@cityssm/mssql-multi-pool';
import { cacheTimeToLiveSeconds } from '../../apiConfig.js';
const sql = `SELECT [OCSysID] as objectCodeSystemId,
[CodeID] as objectCode,
coalesce([DESC], '') as objectCodeDescription,
coalesce([AcctSeg], '') as accountSegment
FROM [WMOCD] WITH (NOLOCK)`;
const cache = new NodeCache({
stdTTL: cacheTimeToLiveSeconds
});
/**
* Retrieves an object code.
* @param mssqlConfig - SQL Server configuration.
* @param objectCode - The object code
* @param bypassCache - Whether to bypass the cache
* @returns The object code, if available.
*/
export async function getObjectCodeByObjectCode(mssqlConfig, objectCode, bypassCache = false) {
let objectCodeObject = bypassCache ? undefined : cache.get(objectCode);
if (objectCodeObject !== undefined) {
return objectCodeObject;
}
const pool = await connect(mssqlConfig);
const result = (await pool
.request()
.input('objectCode', objectCode)
.query(`${sql} where CodeID = @objectCode`));
if (result.recordset.length === 0) {
return undefined;
}
objectCodeObject = result.recordset[0];
cache.set(objectCode, objectCodeObject);
return objectCodeObject;
}
const jobAssignedSql = `SELECT o.[OCSysID] as objectCodeSystemId,
o.[CodeID] as objectCode,
coalesce(o.[DESC], '') as objectCodeDescription,
coalesce(o.[AcctSeg], '') as accountSegment,
j.[Acct] as accountNumber
FROM [WMOCD] o WITH (NOLOCK)
left join WMJOCA j on o.OCSysID = j.OCSysID`;
/**
* Retrieves a list of object codes 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 object codes assigned to a given job.
*/
export async function getObjectCodesAssignedToJobByFiscalYear(mssqlConfig, jobId, fiscalYear) {
const pool = await connect(mssqlConfig);
const result = (await pool
.request()
.input('jobId', jobId)
.input('fiscalYear', fiscalYear)
.query(`${jobAssignedSql} where j.Job_ID = @jobId and j.Year = @fiscalYear`));
return result.recordset;
}
/**
* Retrieves an object code associated with a given job and fiscal year.
* @param mssqlConfig - SQL Server configuration.
* @param jobId - The job id.
* @param objectCode - The object code.
* @param fiscalYear - The fiscal year.
* @returns - The object code, if available.
*/
export async function getObjectCodeAssignedToJobByObjectCodeAndFiscalYear(mssqlConfig, jobId, objectCode, fiscalYear) {
const pool = await connect(mssqlConfig);
const result = (await pool
.request()
.input('jobId', jobId)
.input('objectCode', objectCode)
.input('fiscalYear', fiscalYear)
.query(`${jobAssignedSql} where o.CodeID = @objectCode
and j.Job_ID = @jobId and j.Year = @fiscalYear`));
if (result.recordset.length === 0) {
return undefined;
}
return result.recordset[0];
}