@cityssm/worktech-api
Version:
Integrations with the WorkTech (Pearl) work order management system.
296 lines (295 loc) • 13.8 kB
JavaScript
import { minutesToMillis } from '@cityssm/to-millis';
import { getAccountNumberByWorkOrderNumberAndObjectCode } from './helpers/getAccountNumber.js';
import { getEmployeePayCodes } from './queries/employees/getEmployeePayCodes.js';
import { getEmployees } from './queries/employees/getEmployees.js';
import { getEmployeeTimeCodes } from './queries/employees/getEmployeeTimeCodes.js';
import { getTimeCodes } from './queries/employees/getTimeCodes.js';
import { getTimesheetBatchEntries } from './queries/employees/getTimesheetBatchEntries.js';
import { addEquipment } from './queries/equipment/addEquipment.js';
import { getEquipment } from './queries/equipment/getEquipment.js';
import { getEquipmentByEquipmentId } from './queries/equipment/getEquipmentByEquipmentId.js';
import { updateEquipmentFields } from './queries/equipment/updateEquipment.js';
import { addResourceItem } from './queries/items/addResourceItem.js';
import { createStockTransactionBatch } from './queries/items/createStockTransactionBatch.js';
import { getItemByItemId } from './queries/items/getItems.js';
import { getActivitiesAssignedToJobByFiscalYear, getActivityByActivityId } from './queries/jobs/getActivities.js';
import { getJobActivityObjectCodeByKeys } from './queries/jobs/getJobActivityObjectCodes.js';
import { getJobByJobId } from './queries/jobs/getJobs.js';
import { getObjectCodeAssignedToJobByObjectCodeAndFiscalYear, getObjectCodeByObjectCode, getObjectCodesAssignedToJobByFiscalYear } from './queries/jobs/getObjectCodes.js';
import { addWorkOrderResource } from './queries/workOrders/addWorkOrderResource.js';
import { deleteWorkOrderResource } from './queries/workOrders/deleteWorkOrderResource.js';
import { getWorkOrderResourcesByStartDate, getWorkOrderResourcesByStartDateTimeRange, getWorkOrderResourcesByWorkOrderNumber } from './queries/workOrders/getWorkOrderResources.js';
import { getWorkOrderByWorkOrderNumber } from './queries/workOrders/getWorkOrders.js';
import { updateWorkOrderResource } from './queries/workOrders/updateWorkOrderResource.js';
// eslint-disable-next-line @typescript-eslint/no-magic-numbers
const timeoutMillis = minutesToMillis(5);
/**
* WorkTech API
*/
export class WorkTechAPI {
#mssqlConfig;
/**
* @param mssqlConfig - SQL Server configuration.
*/
constructor(mssqlConfig) {
this.#mssqlConfig = mssqlConfig;
this.#mssqlConfig.connectionTimeout = Math.max(this.#mssqlConfig.connectionTimeout ?? 0, timeoutMillis);
this.#mssqlConfig.requestTimeout = Math.max(this.#mssqlConfig.requestTimeout ?? 0, timeoutMillis);
}
/**
* Retrieves equipment based on filters.
* @param filters - The equipment filters.
* @returns The equipment list.
*/
async getEquipment(filters) {
return await getEquipment(this.#mssqlConfig, filters);
}
/**
* Retrieves a piece of equipment.
* @param equipmentId - The equipment id.
* @returns The equipment record, if available.
*/
async getEquipmentByEquipmentId(equipmentId) {
return await getEquipmentByEquipmentId(this.#mssqlConfig, equipmentId);
}
/**
* Creates a new equipment record.
* @param equipment - The equipment to add.
* @returns The system id for the new equipment record.
*/
async addEquipment(equipment) {
return await addEquipment(this.#mssqlConfig, equipment);
}
async updateEquipmentFields(equipmentSystemId, fields) {
return await updateEquipmentFields(this.#mssqlConfig, equipmentSystemId, fields);
}
/**
* Retrieves an item.
* @param itemId - The item id.
* @returns - The item, if available.
*/
async getItemByItemId(itemId) {
return await getItemByItemId(this.#mssqlConfig, itemId);
}
async addResourceItem(resourceItem) {
return await addResourceItem(this.#mssqlConfig, resourceItem);
}
/**
* Creates a new stock transaction batch.
* @param batch - The batch details
* @returns - The batch id.
*/
async createStockTransactionBatch(batch) {
return await createStockTransactionBatch(this.#mssqlConfig, batch);
}
/**
* Retrieves a work order.
* @param workOrderNumber - The work order number.
* @returns - The work order, if available.
*/
async getWorkOrderByWorkOrderNumber(workOrderNumber) {
return await getWorkOrderByWorkOrderNumber(this.#mssqlConfig, workOrderNumber);
}
/**
* Retrieves a list of work order resources.
* @param workOrderNumber - The work order number.
* @returns - An array of resources associated with a work order.
*/
async getWorkOrderResourcesByWorkOrderNumber(workOrderNumber) {
return await getWorkOrderResourcesByWorkOrderNumber(this.#mssqlConfig, workOrderNumber);
}
/**
* Retrieves a list of work order resources.
* @param startDateFrom - The minimum start date.
* @param startDateTo - The maximum start date.
* @returns - An array of resources between a given start time range.
*/
async getWorkOrderResourcesByStartDateTimeRange(startDateFrom, startDateTo) {
return await getWorkOrderResourcesByStartDateTimeRange(this.#mssqlConfig, startDateFrom, startDateTo);
}
/**
* Retrieves a list of work order resources.
* @param startDateString - The start date.
* @returns - An array of resources on a given start date.
*/
async getWorkOrderResourcesByStartDate(startDateString) {
return await getWorkOrderResourcesByStartDate(this.#mssqlConfig, startDateString);
}
/**
* Adds a resource to a work order.
* @param workOrderResource - The work order resource fields.
* @returns - The system id for the new resource record.
*/
async addWorkOrderResource(workOrderResource) {
return await addWorkOrderResource(this.#mssqlConfig, workOrderResource);
}
/**
* Updates a resource on a work order.
* Note that only a subset of fields can be updated,
* and each group must have all fields within it's grouping defined to be updated.
* - workDescription
* - serviceRequestSystemId, workOrderNumber
* - startDateTime
* - quantity, unitPrice, baseAmount
* @param workOrderResource - The work order resource fields.
* @returns - True when the update is processed successfully.
*/
async updateWorkOrderResource(workOrderResource) {
return await updateWorkOrderResource(this.#mssqlConfig, workOrderResource);
}
/**
* Deletes a resource on a work order.
* @param serviceRequestItemSystemId - The work order resource id.
* @returns - True when the delete is processed successfully.
*/
async deleteWorkOrderResource(serviceRequestItemSystemId) {
return await deleteWorkOrderResource(this.#mssqlConfig, serviceRequestItemSystemId);
}
/**
* Retrieves a job.
* @param jobId - The job id
* @returns - The job, if available.
*/
async getJobByJobId(jobId) {
return await getJobByJobId(this.#mssqlConfig, jobId);
}
/**
* Retrieves an activity.
* @param activityId - The activity id
* @returns - The activity, if available.
*/
async getActivityByActivityId(activityId) {
return await getActivityByActivityId(this.#mssqlConfig, activityId);
}
/**
* Retrieves the activities associated with a given job and fiscal year.
* @param jobId - The job id
* @param fiscalYear - The fiscal year
* @returns - An array of activities.
*/
async getActivitiesAssignedToJobByFiscalYear(jobId, fiscalYear) {
return await getActivitiesAssignedToJobByFiscalYear(this.#mssqlConfig, jobId, fiscalYear);
}
/**
* Retrieves an object code.
* @param objectCode - The object code
* @returns - The object code, if available.
*/
async getObjectCodeByObjectCode(objectCode) {
return await getObjectCodeByObjectCode(this.#mssqlConfig, objectCode);
}
/**
* Retrieves a list of object codes associated with a given job and fiscal year.
* @param jobId - The job id.
* @param fiscalYear - The fiscal year.
* @returns - An array of object codes assigned to a given job.
*/
async getObjectCodesAssignedToJobByFiscalYear(jobId, fiscalYear) {
return await getObjectCodesAssignedToJobByFiscalYear(this.#mssqlConfig, jobId, fiscalYear);
}
/**
* Retrieves an object code associated with a given job and fiscal year.
* @param jobId - The job id.
* @param objectCode - The object code.
* @param fiscalYear - The fiscal year.
* @returns - The object code, if available.
*/
async getObjectCodeAssignedToJobByObjectCodeAndFiscalYear(jobId, objectCode, fiscalYear) {
return await getObjectCodeAssignedToJobByObjectCodeAndFiscalYear(this.#mssqlConfig, jobId, objectCode, fiscalYear);
}
/**
* Retrieves a job - activity - object code.
* @param keys - The keys to search on.
* @param keys.jobId - The job id.
* @param keys.activityId - The activity id.
* @param keys.objectCode - The object code.
* @param keys.fiscalYear - The fiscal year.
* @returns - The job - activity - object code combination if available.
*/
async getJobActivityObjectCodeByKeys(keys) {
return await getJobActivityObjectCodeByKeys(this.#mssqlConfig, keys);
}
/**
* Retrieves an account number for a given work order.
* @param workOrderNumber - The work order number.
* @param optionalObjectCode - An optional object code.
* @returns - The account number and its source, if available.
*/
async getAccountNumberByWorkOrderNumberAndObjectCode(workOrderNumber, optionalObjectCode) {
return await getAccountNumberByWorkOrderNumberAndObjectCode(this.#mssqlConfig, workOrderNumber, optionalObjectCode);
}
/**
* Retrieves employees.
* @param employeeFilters - The employee filters.
* @returns The employees.
*/
async getEmployees(employeeFilters) {
return await getEmployees(this.#mssqlConfig, employeeFilters);
}
/**
* Retrieves an employee.
* @param employeeNumber - The employee number
* @returns The employee, if available.
*/
async getEmployeeByEmployeeNumber(employeeNumber) {
const employees = await getEmployees(this.#mssqlConfig, {
employeeNumbers: [employeeNumber]
});
if (employees.length === 0) {
return undefined;
}
return employees[0];
}
/**
* Retrieves employee pay codes.
* @param employeeNumber - The employee number.
* @param effectiveDate - The effective date.
* @returns The employee pay codes.
*/
async getEmployeePayCodes(employeeNumber, effectiveDate) {
return await getEmployeePayCodes(this.#mssqlConfig, employeeNumber, effectiveDate);
}
/**
* Retrieves available time codes.
* @returns The available time codes.
*/
async getTimeCodes() {
const timeCodes = await getTimeCodes(this.#mssqlConfig);
return timeCodes;
}
/**
* Retrieves time codes for a specific employee.
* @param employeeNumber - The employee number.
* @param timesheetMaxAgeDays - The maximum timesheet age.
* @returns The time codes for the specified employee.
*/
async getEmployeeTimeCodes(employeeNumber, timesheetMaxAgeDays) {
const timeCodes = await getEmployeeTimeCodes(this.#mssqlConfig, employeeNumber, timesheetMaxAgeDays);
return timeCodes;
}
async getTimesheetBatchEntries(filters) {
return await getTimesheetBatchEntries(this.#mssqlConfig, filters);
}
}
export { getAccountNumberByWorkOrderNumberAndObjectCode } from './helpers/getAccountNumber.js';
export { getEmployeePayCodes } from './queries/employees/getEmployeePayCodes.js';
export { getEmployees } from './queries/employees/getEmployees.js';
export { getEmployeeTimeCodes } from './queries/employees/getEmployeeTimeCodes.js';
export { getTimeCodes } from './queries/employees/getTimeCodes.js';
export { getTimesheetBatchEntries } from './queries/employees/getTimesheetBatchEntries.js';
export { addEquipment } from './queries/equipment/addEquipment.js';
export { getEquipment } from './queries/equipment/getEquipment.js';
export { getEquipmentByEquipmentId } from './queries/equipment/getEquipmentByEquipmentId.js';
export { updateEquipmentFields } from './queries/equipment/updateEquipment.js';
export { addResourceItem } from './queries/items/addResourceItem.js';
export { getItemByItemId } from './queries/items/getItems.js';
export { createStockTransactionBatch } from './queries/items/createStockTransactionBatch.js';
export { getActivitiesAssignedToJobByFiscalYear, getActivityByActivityId } from './queries/jobs/getActivities.js';
export { getJobActivityObjectCodeByKeys } from './queries/jobs/getJobActivityObjectCodes.js';
export { getJobByJobId } from './queries/jobs/getJobs.js';
export { getObjectCodeAssignedToJobByObjectCodeAndFiscalYear, getObjectCodeByObjectCode, getObjectCodesAssignedToJobByFiscalYear } from './queries/jobs/getObjectCodes.js';
export { getWorkOrderByWorkOrderNumber } from './queries/workOrders/getWorkOrders.js';
export { addWorkOrderResource } from './queries/workOrders/addWorkOrderResource.js';
export { deleteWorkOrderResource } from './queries/workOrders/deleteWorkOrderResource.js';
export { getWorkOrderResourcesByStartDate, getWorkOrderResourcesByStartDateTimeRange, getWorkOrderResourcesByWorkOrderNumber } from './queries/workOrders/getWorkOrderResources.js';
export { updateWorkOrderResource } from './queries/workOrders/updateWorkOrderResource.js';