@cityssm/worktech-api
Version:
Integrations with the WorkTech (Pearl) work order management system.
78 lines (77 loc) • 3.2 kB
JavaScript
import { accountSegmentSeparator } from '../apiConfig.js';
import { getJobActivityObjectCodeByKeys } from '../queries/jobs/getJobActivityObjectCodes.js';
import { getJobByJobId } from '../queries/jobs/getJobs.js';
import { getObjectCodeAssignedToJobByObjectCodeAndFiscalYear, getObjectCodeByObjectCode } from '../queries/jobs/getObjectCodes.js';
import { getWorkOrderByWorkOrderNumber } from '../queries/workOrders/getWorkOrders.js';
/**
* Retrieves an account number for a given work order.
* @param mssqlConfig - SQL Server configuration.
* @param workOrderNumber - The work order number.
* @param optionalObjectCode - An optional object code.
* @returns - The account number and its source, if available.
*/
export async function getAccountNumberByWorkOrderNumberAndObjectCode(mssqlConfig, workOrderNumber, optionalObjectCode) {
/*
* Get work order
*/
const workOrder = await getWorkOrderByWorkOrderNumber(mssqlConfig, workOrderNumber);
if (workOrder === undefined) {
throw new Error(`Work order not found: ${workOrderNumber}`);
}
/*
* Determine object code
*/
const objectCode = optionalObjectCode ?? workOrder.objectCode;
if (objectCode === '') {
throw new Error('No object code available for lookup.');
}
/*
* Get job - activity - object code
*/
if (workOrder.activityId !== '') {
const code = await getJobActivityObjectCodeByKeys(mssqlConfig, {
jobId: workOrder.jobId,
activityId: workOrder.activityId,
objectCode,
fiscalYear: workOrder.fiscalYear
});
if (code !== undefined && code.accountNumber !== '') {
return {
// eslint-disable-next-line no-secrets/no-secrets
accountNumberSource: 'assignedJobActivityObjectCode',
accountNumber: code.accountNumber
};
}
}
/*
* Get job - object code
*/
const code = await getObjectCodeAssignedToJobByObjectCodeAndFiscalYear(mssqlConfig, workOrder.jobId, objectCode, workOrder.fiscalYear);
if (code !== undefined && code.accountNumber !== '') {
return {
accountNumberSource: 'assignedJobObjectCode',
accountNumber: code.accountNumber
};
}
/*
* Build from job and object code
*/
const jobObject = await getJobByJobId(mssqlConfig, workOrder.jobId);
if (jobObject === undefined) {
throw new Error(`Job not found: ${workOrder.jobId}`);
}
else if (jobObject.accountSegment === '') {
throw new Error(`Job has no associated account segment: ${workOrder.jobId}`);
}
const objectCodeObject = await getObjectCodeByObjectCode(mssqlConfig, objectCode);
if (objectCodeObject === undefined) {
throw new Error(`Object code not found: ${objectCode}`);
}
else if (objectCodeObject.accountSegment === '') {
throw new Error(`Object code has no associated account segment: ${objectCode}`);
}
return {
accountNumberSource: 'jobObjectCode',
accountNumber: `${jobObject.accountSegment}${accountSegmentSeparator}${objectCodeObject.accountSegment}`
};
}