@cityssm/worktech-api
Version:
Integrations with the WorkTech (Pearl) work order management system.
101 lines (89 loc) • 3.14 kB
text/typescript
import { type mssql, connect } from '@cityssm/mssql-multi-pool'
import {
type DateString,
dateToString,
dateToTimeString
} from '@cityssm/utils-datetime'
import type { WorkOrderResource } from './types.js'
const sql = `SELECT [SRISysID] as serviceRequestItemSystemId,
[SRQISysID] as serviceRequestSystemId,
[WONOS] as workOrderNumber,
[SchedDateTime] as startDateTime,
[ITMSysID] as itemSystemId,
[Item_ID] as itemId,
[Qty] as quantity,
[UnitPrice] as unitPrice,
[Amt] as baseAmount,
[LockEst] as lockUnitPrice,
[LocMargin] as lockMargin,
[WorkDesc] as workDescription,
[EndDateTime] as endDateTime,
[Step] as step
FROM [AMSRI] WITH (NOLOCK)`
/**
* Retrieves a list of work order resources.
* @param mssqlConfig - SQL Server configuration.
* @param workOrderNumber - The work order number.
* @returns - An array of resources associated with a work order.
*/
export async function getWorkOrderResourcesByWorkOrderNumber(
mssqlConfig: mssql.config,
workOrderNumber: string
): Promise<WorkOrderResource[]> {
const pool = await connect(mssqlConfig)
const resourcesResult = (await pool
.request()
.input('workOrderNumber', workOrderNumber)
.query(
`${sql} where WONOs = @workOrderNumber`
)) as mssql.IResult<WorkOrderResource>
return resourcesResult.recordset
}
/**
* Retrieves a list of work order resources.
* @param mssqlConfig - SQL Server configuration.
* @param startDateTimeFrom - The minimum start date.
* @param startDateTimeTo - The maximum start date.
* @returns - An array of resources between a given start time range.
*/
export async function getWorkOrderResourcesByStartDateTimeRange(
mssqlConfig: mssql.config,
startDateTimeFrom: Date | string,
startDateTimeTo: Date | string
): Promise<WorkOrderResource[]> {
const startDateFromString =
typeof startDateTimeFrom === 'string'
? startDateTimeFrom
: `${dateToString(startDateTimeFrom)} ${dateToTimeString(
startDateTimeFrom
)}`
const startDateToString =
typeof startDateTimeTo === 'string'
? startDateTimeTo
: `${dateToString(startDateTimeTo)} ${dateToTimeString(startDateTimeTo)}`
const pool = await connect(mssqlConfig)
const resourcesResult = (await pool
.request()
.input('startDateFrom', startDateFromString)
.input('startDateTo', startDateToString)
.query(
`${sql} where SchedDateTime between @startDateFrom and @startDateTo`
)) as mssql.IResult<WorkOrderResource>
return resourcesResult.recordset
}
/**
* Retrieves a list of work order resources.
* @param mssqlConfig - SQL Server configuration.
* @param startDateString - The start date.
* @returns - An array of resources on a given start date.
*/
export async function getWorkOrderResourcesByStartDate(
mssqlConfig: mssql.config,
startDateString: DateString
): Promise<WorkOrderResource[]> {
return await getWorkOrderResourcesByStartDateTimeRange(
mssqlConfig,
startDateString,
`${startDateString} 23:59:59`
)
}