narinder1231's picture
improve error logging and error messages
d747060
import { fetchAllWorkorders, fetchAllWorkordersJson, fetchLatestWorkordersJson, getIndexByLabel } from './propertyware.service';
import { logger } from '../../utils/logger';
import PwWorkOrders from '../../models/pwWorkOrders';
import PwUnit from '../../models/pwUnits';
export const syncWorkOrderDataService = async (): Promise<string> => {
try {
const workOrderData = await fetchAllWorkorders();
const workOrderResponseData = workOrderData.map((workOrder: {
id: number;
number: number;
location: string;
portfolioID: number;
buildingID: number;
unitID: number;
status: string;
assignedVendors: string[];
}) => ({
pw_id: workOrder.id,
number: workOrder.number,
location: workOrder.location,
portfolio_id: workOrder.portfolioID,
building_id: workOrder.buildingID,
unit_id: workOrder.unitID,
status: workOrder.status,
assignedVendors: workOrder.assignedVendors || [],
}));
await PwWorkOrders.bulkCreate(workOrderResponseData, {
updateOnDuplicate: ['number', 'location', 'portfolio_id', 'building_id', 'unit_id', 'status', 'assigned_vendors'],
});
logger.info("Work order data synced successfully");
return "Work order data synced successfully";
} catch (error) {
logger.error("Error syncing Work order");
logger.error(error);
throw new Error("Error syncing Work order");
}
};
export const syncWorkOrderDataFromJsonService = async (syncAll = false): Promise<string> => {
try {
let workOrderData;
if (syncAll) {
workOrderData = await fetchAllWorkordersJson();
} else {
workOrderData = await fetchLatestWorkordersJson();
}
const indexes = {
pw_id: getIndexByLabel(workOrderData.columns, "WO Entity ID"),
number:getIndexByLabel(workOrderData.columns, "WO#"),
portfolio: getIndexByLabel(workOrderData.columns, "Portfolio"),
building: getIndexByLabel(workOrderData.columns, "Building"),
unit: getIndexByLabel(workOrderData.columns, "Unit"),
buildingID: getIndexByLabel(workOrderData.columns, "Building ID"),
unitID: getIndexByLabel(workOrderData.columns, "Unit ID"),
status: getIndexByLabel(workOrderData.columns, "Status"),
assignedVendors: getIndexByLabel(workOrderData.columns, "Vendors"),
location: getIndexByLabel(workOrderData.columns, "Address"),
};
const workOrderResponseData: any[] = [];
for (const record of workOrderData.records) {
const portfolioData = await PwUnit.findOne({
where: {
pw_id: record[indexes.unitID as number],
},
attributes: ['pw_portfolio_id'],
});
const portfolio_id= portfolioData ? portfolioData.getDataValue('pw_portfolio_id') : null;
workOrderResponseData.push({
pw_id: record[indexes.pw_id as number],
number: extractWorkOrderNumber(record[indexes.number as number]),
portfolio_id: portfolio_id,
building_id: record[indexes.buildingID as number],
unit_id: record[indexes.unitID as number],
location: record[indexes.location as number],
status: record[indexes.status as number],
assigned_vendors: record[indexes.assignedVendors as number] || []
});
}
await PwWorkOrders.bulkCreate(workOrderResponseData, {
updateOnDuplicate: ['number', 'location', 'portfolio_id', 'building_id', 'unit_id', 'status', 'assigned_vendors'],
});
logger.info("Total " + workOrderResponseData.length + " Work orders synced successfully");
return "Total " + workOrderResponseData.length + " Work orders synced successfully";
} catch (error) {
logger.error("Error syncing Work order");
logger.error(error);
throw new Error("Error syncing Work order");
}
};
const extractWorkOrderNumber = (workOrder: string): string | null => {
const match = workOrder.match(/#(\d+)/); // Matches "#" followed by one or more digits
return match ? match[1] : null;
}