Spaces:
Runtime error
Runtime error
File size: 4,436 Bytes
9d33d07 8ff7834 9d33d07 8ff7834 d747060 8ff7834 9d33d07 2ef2e04 9d33d07 2ef2e04 9d33d07 2ef2e04 9d33d07 d747060 9d33d07 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | 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;
}
|