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; | |
| } | |