Spaces:
Runtime error
Runtime error
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; | |
} | |