UNPKG

n8n-nodes-cigotracker

Version:

n8n node for CigoTracker API integration - manage deliveries, routes, and field service operations

963 lines (962 loc) 41.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CigoTrackerWorking = void 0; const CigoTracker_helpers_1 = require("./CigoTracker.helpers"); class CigoTrackerWorking { constructor() { this.description = { displayName: 'CigoTracker', name: 'cigoTracker', icon: 'file:Cigo-Logo.png', group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Interact with CigoTracker API', defaults: { name: 'CigoTracker', }, inputs: ['main'], outputs: ['main'], credentials: [ { name: 'cigoTrackerApi', required: true, }, ], properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'Job', value: 'job', }, { name: 'Action', value: 'action', }, { name: 'Itinerary', value: 'itinerary', }, { name: 'Location', value: 'location', }, { name: 'Vehicle', value: 'vehicle', }, { name: 'Operator', value: 'operator', }, ], default: 'job', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['job'], }, }, options: [ { name: 'Create', value: 'create', description: 'Create a new job', action: 'Create a job', }, { name: 'Get', value: 'get', description: 'Get a job by ID', action: 'Get a job', }, { name: 'Search', value: 'search', description: 'Search for jobs', action: 'Search jobs', }, { name: 'Update', value: 'update', description: 'Update a job', action: 'Update a job', }, { name: 'Delete', value: 'delete', description: 'Delete a job', action: 'Delete a job', }, { name: 'Cancel', value: 'cancel', description: 'Cancel a job', action: 'Cancel a job', }, ], default: 'get', }, { displayName: 'Job ID', name: 'jobId', type: 'string', displayOptions: { show: { resource: ['job'], operation: ['get', 'update', 'delete', 'cancel'], }, }, required: true, default: '', description: 'The ID of the job', }, { displayName: 'Skip Staging', name: 'skipStaging', type: 'boolean', displayOptions: { show: { resource: ['job'], operation: ['create'], }, }, default: true, description: 'Whether to skip the staging area and create the job directly', }, { displayName: 'First Name', name: 'firstName', type: 'string', displayOptions: { show: { resource: ['job'], operation: ['create'], }, }, required: true, default: '', description: 'Customer first name', }, { displayName: 'Last Name', name: 'lastName', type: 'string', displayOptions: { show: { resource: ['job'], operation: ['create'], }, }, default: '', description: 'Customer last name (optional)', }, { displayName: 'Address', name: 'address', type: 'string', displayOptions: { show: { resource: ['job'], operation: ['create'], }, }, required: true, default: '', description: 'Delivery address', }, { displayName: 'Phone Number', name: 'phoneNumber', type: 'string', displayOptions: { show: { resource: ['job'], operation: ['create'], }, }, required: true, default: '', description: 'Phone number associated with the job', }, { displayName: 'Date', name: 'date', type: 'dateTime', displayOptions: { show: { resource: ['job'], operation: ['create'], }, }, required: true, default: '', description: 'Delivery date in YYYY-MM-DD format', }, { displayName: 'Start Date', name: 'startDate', type: 'dateTime', displayOptions: { show: { resource: ['job'], operation: ['search'], }, }, required: true, default: '', description: 'Start date for search range (YYYY-MM-DD)', }, { displayName: 'End Date', name: 'endDate', type: 'dateTime', displayOptions: { show: { resource: ['job'], operation: ['search'], }, }, required: true, default: '', description: 'End date for search range (YYYY-MM-DD)', }, { displayName: 'Update Fields', name: 'updateFields', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: ['job'], operation: ['update'], }, }, options: [ { displayName: 'First Name', name: 'first_name', type: 'string', default: '', description: 'Customer first name', }, { displayName: 'Last Name', name: 'last_name', type: 'string', default: '', description: 'Customer last name', }, { displayName: 'Phone Number', name: 'phone_number', type: 'string', default: '', description: 'Phone number', }, { displayName: 'Email', name: 'email', type: 'string', default: '', description: 'Email address', }, { displayName: 'Address', name: 'address', type: 'string', default: '', description: 'Delivery address', }, { displayName: 'Date', name: 'date', type: 'dateTime', default: '', description: 'Delivery date (YYYY-MM-DD)', }, { displayName: 'Comment', name: 'comment', type: 'string', typeOptions: { rows: 4, }, default: '', description: 'Additional comments', }, { displayName: 'Priority', name: 'priority', type: 'number', default: 0, description: 'Priority level', }, ], }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['action'], }, }, options: [ { name: 'Create', value: 'create', description: 'Create a new action for a job', action: 'Create an action', }, { name: 'Get', value: 'get', description: 'Get an action by ID', action: 'Get an action', }, { name: 'Get All', value: 'getAll', description: 'Get all actions for a job', action: 'Get all actions', }, { name: 'Update', value: 'update', description: 'Update an action', action: 'Update an action', }, { name: 'Delete', value: 'delete', description: 'Delete an action', action: 'Delete an action', }, ], default: 'create', }, { displayName: 'Job ID', name: 'jobId', type: 'string', displayOptions: { show: { resource: ['action'], }, }, required: true, default: '', description: 'The ID of the job this action belongs to', }, { displayName: 'Action ID', name: 'actionId', type: 'string', displayOptions: { show: { resource: ['action'], operation: ['get', 'update', 'delete'], }, }, required: true, default: '', description: 'The ID of the action', }, { displayName: 'Action Type', name: 'actionType', type: 'options', displayOptions: { show: { resource: ['action'], operation: ['create'], }, }, options: [ { name: 'Pickup', value: 'pickup', }, { name: 'Delivery', value: 'delivery', }, { name: 'Task', value: 'task', }, { name: 'Appointment', value: 'appointment', }, ], default: 'delivery', required: true, description: 'The type of action', }, { displayName: 'Update Fields', name: 'updateFields', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: ['action'], operation: ['update'], }, }, options: [ { displayName: 'Type', name: 'type', type: 'options', options: [ { name: 'Pickup', value: 'pickup', }, { name: 'Delivery', value: 'delivery', }, { name: 'Task', value: 'task', }, { name: 'Appointment', value: 'appointment', }, ], default: 'delivery', description: 'The type of action', }, { displayName: 'Status', name: 'status', type: 'options', options: [ { name: 'Planned', value: 'planned', }, { name: 'In Progress', value: 'in_progress', }, { name: 'Completed', value: 'completed', }, { name: 'Failed', value: 'failed', }, ], default: 'planned', description: 'The status of the action', }, { displayName: 'Note', name: 'note', type: 'string', typeOptions: { rows: 4, }, default: '', description: 'Additional notes for the action', }, ], }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['itinerary'], }, }, options: [ { name: 'Create', value: 'create', description: 'Create a new itinerary', action: 'Create an itinerary', }, { name: 'Get', value: 'get', description: 'Get an itinerary by ID', action: 'Get an itinerary', }, { name: 'Get by Date', value: 'getByDate', description: 'Get itineraries for a specific date', action: 'Get itineraries by date', }, { name: 'Update', value: 'update', description: 'Update an itinerary', action: 'Update an itinerary', }, { name: 'Delete', value: 'delete', description: 'Delete an itinerary', action: 'Delete an itinerary', }, { name: 'Add Job', value: 'addJob', description: 'Add a job to an itinerary', action: 'Add job to itinerary', }, { name: 'Remove Job', value: 'removeJob', description: 'Remove a job from an itinerary', action: 'Remove job from itinerary', }, ], default: 'create', }, { displayName: 'Itinerary ID', name: 'itineraryId', type: 'string', displayOptions: { show: { resource: ['itinerary'], operation: ['get', 'update', 'delete', 'addJob', 'removeJob'], }, }, required: true, default: '', description: 'The ID of the itinerary', }, { displayName: 'Name', name: 'itineraryName', type: 'string', displayOptions: { show: { resource: ['itinerary'], operation: ['create'], }, }, required: true, default: '', description: 'Name of the itinerary', }, { displayName: 'Date', name: 'itineraryDate', type: 'dateTime', displayOptions: { show: { resource: ['itinerary'], operation: ['create', 'getByDate'], }, }, required: true, default: '', description: 'Date of the itinerary (YYYY-MM-DD)', }, { displayName: 'Job ID', name: 'jobId', type: 'string', displayOptions: { show: { resource: ['itinerary'], operation: ['addJob', 'removeJob'], }, }, required: true, default: '', description: 'The ID of the job to add or remove', }, { displayName: 'Update Fields', name: 'updateFields', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: ['itinerary'], operation: ['update'], }, }, options: [ { displayName: 'Name', name: 'name', type: 'string', default: '', description: 'Itinerary name', }, { displayName: 'Date', name: 'date', type: 'dateTime', default: '', description: 'Itinerary date (YYYY-MM-DD)', }, { displayName: 'Vehicle ID', name: 'vehicle_id', type: 'string', default: '', description: 'Vehicle ID for the itinerary', }, { displayName: 'Operator IDs', name: 'operator_ids', type: 'string', default: '', description: 'Comma-separated list of operator IDs', }, ], }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['location'], }, }, options: [ { name: 'Get', value: 'get', description: 'Get a location by ID', action: 'Get a location', }, { name: 'Get All', value: 'getAll', description: 'Get all locations', action: 'Get all locations', }, ], default: 'getAll', }, { displayName: 'Location ID', name: 'locationId', type: 'string', displayOptions: { show: { resource: ['location'], operation: ['get'], }, }, required: true, default: '', description: 'The ID of the location', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['vehicle'], }, }, options: [ { name: 'Get', value: 'get', description: 'Get a vehicle by ID', action: 'Get a vehicle', }, { name: 'Get All', value: 'getAll', description: 'Get all vehicles', action: 'Get all vehicles', }, ], default: 'getAll', }, { displayName: 'Vehicle ID', name: 'vehicleId', type: 'string', displayOptions: { show: { resource: ['vehicle'], operation: ['get'], }, }, required: true, default: '', description: 'The ID of the vehicle', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['operator'], }, }, options: [ { name: 'Get', value: 'get', description: 'Get an operator by ID', action: 'Get an operator', }, { name: 'Get All', value: 'getAll', description: 'Get all operators', action: 'Get all operators', }, ], default: 'getAll', }, { displayName: 'Operator ID', name: 'operatorId', type: 'string', displayOptions: { show: { resource: ['operator'], operation: ['get'], }, }, required: true, default: '', description: 'The ID of the operator', }, ], }; } async execute() { const items = this.getInputData(); const returnData = []; const length = items.length > 0 ? items.length : 1; const resource = this.getNodeParameter('resource', 0); for (let i = 0; i < length; i++) { try { const operation = this.getNodeParameter('operation', i); let responseData; if (resource === 'job') { if (operation === 'create') { const date = this.getNodeParameter('date', i); const formatDate = (date) => { const d = new Date(date); return d.toISOString().split('T')[0]; }; const body = { skip_staging: this.getNodeParameter('skipStaging', i), first_name: this.getNodeParameter('firstName', i), phone_number: this.getNodeParameter('phoneNumber', i), address: this.getNodeParameter('address', i), date: formatDate(date), }; const lastName = this.getNodeParameter('lastName', i); if (lastName) { body.last_name = lastName; } responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', '/jobs', body); } else if (operation === 'get') { const jobId = this.getNodeParameter('jobId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/jobs/id/${jobId}`); } else if (operation === 'search') { const startDate = this.getNodeParameter('startDate', i); const endDate = this.getNodeParameter('endDate', i); const formatDate = (date) => { const d = new Date(date); return d.toISOString().split('T')[0]; }; const body = { start_date: formatDate(startDate), end_date: formatDate(endDate), }; responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', '/jobs/search', body); } else if (operation === 'update') { const jobId = this.getNodeParameter('jobId', i); const updateFields = this.getNodeParameter('updateFields', i); if (updateFields.date) { const d = new Date(updateFields.date); updateFields.date = d.toISOString().split('T')[0]; } responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'PUT', `/jobs/id/${jobId}`, updateFields); } else if (operation === 'delete') { const jobId = this.getNodeParameter('jobId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'DELETE', `/jobs/id/${jobId}`); } else if (operation === 'cancel') { const jobId = this.getNodeParameter('jobId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', `/jobs/id/${jobId}/cancel`); } } else if (resource === 'action') { const jobId = this.getNodeParameter('jobId', i); if (operation === 'create') { const body = { type: this.getNodeParameter('actionType', i), }; responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', `/jobs/id/${jobId}/actions`, body); } else if (operation === 'get') { const actionId = this.getNodeParameter('actionId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/jobs/id/${jobId}/actions/${actionId}`); } else if (operation === 'getAll') { responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/jobs/id/${jobId}/actions`); } else if (operation === 'update') { const actionId = this.getNodeParameter('actionId', i); const updateFields = this.getNodeParameter('updateFields', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'PUT', `/jobs/id/${jobId}/actions/${actionId}`, updateFields); } else if (operation === 'delete') { const actionId = this.getNodeParameter('actionId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'DELETE', `/jobs/id/${jobId}/actions/${actionId}`); } } else if (resource === 'itinerary') { if (operation === 'create') { const date = this.getNodeParameter('itineraryDate', i); const formatDate = (date) => { const d = new Date(date); return d.toISOString().split('T')[0]; }; const body = { name: this.getNodeParameter('itineraryName', i), date: formatDate(date), }; responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', '/itineraries', body); } else if (operation === 'get') { const itineraryId = this.getNodeParameter('itineraryId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/itineraries/id/${itineraryId}`); } else if (operation === 'getByDate') { const date = this.getNodeParameter('itineraryDate', i); const formatDate = (date) => { const d = new Date(date); return d.toISOString().split('T')[0]; }; responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/itineraries/date/${formatDate(date)}`); } else if (operation === 'update') { const itineraryId = this.getNodeParameter('itineraryId', i); const updateFields = this.getNodeParameter('updateFields', i); if (updateFields.date) { const d = new Date(updateFields.date); updateFields.date = d.toISOString().split('T')[0]; } if (updateFields.operator_ids) { updateFields.operator_ids = updateFields.operator_ids.split(',').map((id) => id.trim()); } responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'PUT', `/itineraries/id/${itineraryId}`, updateFields); } else if (operation === 'delete') { const itineraryId = this.getNodeParameter('itineraryId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'DELETE', `/itineraries/id/${itineraryId}`); } else if (operation === 'addJob') { const itineraryId = this.getNodeParameter('itineraryId', i); const jobId = this.getNodeParameter('jobId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', `/itineraries/id/${itineraryId}/job_id/${jobId}`); } else if (operation === 'removeJob') { const itineraryId = this.getNodeParameter('itineraryId', i); const jobId = this.getNodeParameter('jobId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'DELETE', `/itineraries/id/${itineraryId}/job_id/${jobId}`); } } else if (resource === 'location') { if (operation === 'get') { const locationId = this.getNodeParameter('locationId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/locations/id/${locationId}`); } else if (operation === 'getAll') { responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', '/locations'); } } else if (resource === 'vehicle') { if (operation === 'get') { const vehicleId = this.getNodeParameter('vehicleId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/vehicles/id/${vehicleId}`); } else if (operation === 'getAll') { responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', '/vehicles'); } } else if (resource === 'operator') { if (operation === 'get') { const operatorId = this.getNodeParameter('operatorId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/operators/id/${operatorId}`); } else if (operation === 'getAll') { responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', '/operators'); } } if (Array.isArray(responseData)) { returnData.push(...responseData.map((item, index) => ({ json: item, pairedItem: i, }))); } else if (responseData) { returnData.push({ json: responseData, pairedItem: i, }); } } catch (error) { if (this.continueOnFail()) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; returnData.push({ json: { error: errorMessage, }, pairedItem: i, }); continue; } throw error; } } return [returnData]; } } exports.CigoTrackerWorking = CigoTrackerWorking;