UNPKG

@skriptfabrik/n8n-nodes-moco

Version:
429 lines 26.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Moco = void 0; const tslib_1 = require("tslib"); const n8n_workflow_1 = require("n8n-workflow"); const GenericFunctions_1 = require("./GenericFunctions"); const UserDescription_1 = require("./UserDescription"); const ActivityDescription_1 = require("./ActivityDescription"); const CompanyDescription_1 = require("./CompanyDescription"); const ProjectDescription_1 = require("./ProjectDescription"); class Moco { constructor() { this.description = { displayName: 'MOCO', name: 'moco', icon: 'file:moco.svg', group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Consume MOCO API', defaults: { name: 'MOCO', }, inputs: [n8n_workflow_1.NodeConnectionTypes.Main], outputs: [n8n_workflow_1.NodeConnectionTypes.Main], credentials: [ { name: 'mocoApi', required: true, }, ], properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'Activity', value: 'activity', }, { name: 'Company', value: 'company', }, { name: 'Project', value: 'project', }, { name: 'User', value: 'user', }, ], default: 'user', }, ...ActivityDescription_1.activityOperations, ...ActivityDescription_1.activityFields, ...CompanyDescription_1.companyOperations, ...CompanyDescription_1.companyFields, ...ProjectDescription_1.projectOperations, ...ProjectDescription_1.projectFields, ...UserDescription_1.userOperations, ...UserDescription_1.userFields, ], }; this.methods = { loadOptions: { listCompanies() { return tslib_1.__awaiter(this, void 0, void 0, function* () { const returnData = []; const companies = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/companies'); for (const company of companies) { returnData.push({ name: company.name, value: company.id, }); } return returnData.sort((a, b) => a.name.localeCompare(b.name)); }); }, listCustomers() { return tslib_1.__awaiter(this, void 0, void 0, function* () { const returnData = []; const companies = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/companies', { qs: { type: 'customer' } }); for (const company of companies) { returnData.push({ name: company.name, value: company.id, }); } return returnData.sort((a, b) => a.name.localeCompare(b.name)); }); }, listLeads() { return tslib_1.__awaiter(this, void 0, void 0, function* () { const returnData = []; const deals = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/deals'); for (const deal of deals) { returnData.push({ name: deal.name, value: deal.id, }); } return returnData.sort((a, b) => a.name.localeCompare(b.name)); }); }, listProjects() { return tslib_1.__awaiter(this, void 0, void 0, function* () { const returnData = []; const projects = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/projects'); for (const project of projects) { returnData.push({ name: `${project.customer.name} > ${project.name}`, value: project.id, }); } return returnData.sort((a, b) => a.name.localeCompare(b.name)); }); }, listProjectTasks() { return tslib_1.__awaiter(this, void 0, void 0, function* () { const returnData = []; const projectId = this.getCurrentNodeParameter('projectId') || undefined; if (projectId === undefined) { const projects = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/projects'); for (const project of projects) { for (const projectTask of project.tasks) { returnData.push({ name: `${project.customer.name} > ${project.name} > ${projectTask.name}`, value: projectTask.id, }); } } } else { const projectTasks = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', `/projects/${projectId}/tasks`); for (const projectTask of projectTasks) { returnData.push({ name: projectTask.name, value: projectTask.id, }); } } return returnData.sort((a, b) => a.name.localeCompare(b.name)); }); }, listTeams() { return tslib_1.__awaiter(this, void 0, void 0, function* () { const returnData = []; const units = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/units'); for (const unit of units) { returnData.push({ name: unit.name, value: unit.id, }); } return returnData.sort((a, b) => a.name.localeCompare(b.name)); }); }, listUsers() { return tslib_1.__awaiter(this, void 0, void 0, function* () { const returnData = []; const users = yield GenericFunctions_1.mocoApiRequestAllItems.call(this, undefined, 'GET', '/users'); for (const user of users) { returnData.push({ name: `${user.firstname} ${user.lastname}`, value: user.id, }); } return returnData.sort((a, b) => a.name.localeCompare(b.name)); }); }, }, }; } execute() { return tslib_1.__awaiter(this, void 0, void 0, function* () { const items = this.getInputData(); const returnData = []; let responseData = {}; const resource = this.getNodeParameter('resource', 0); const operation = this.getNodeParameter('operation', 0); for (let item = 0; item < items.length; item++) { try { if (resource === 'activity') { if (operation === 'create') { const impersonateUserId = this.getNodeParameter('impersonateUserId', item) || undefined; const body = Object.assign({ date: this.getNodeParameter('date', item), project_id: this.getNodeParameter('projectId', item), task_id: this.getNodeParameter('taskId', item), seconds: this.getNodeParameter('seconds', item), description: this.getNodeParameter('description', item) }, GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, ['billable', 'tag', 'remoteService', 'remoteId', 'remoteUrl'])); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'POST', '/activities', { impersonateUserId, body })); } if (operation === 'delete') { const activityId = this.getNodeParameter('activityId', item); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'DELETE', `/activities/${activityId}`)); } if (operation === 'get') { const activityId = this.getNodeParameter('activityId', item); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'GET', `/activities/${activityId}`)); } if (operation === 'list') { const returnAll = this.getNodeParameter('returnAll', item); const qs = Object.assign(Object.assign({}, (returnAll ? {} : { limit: this.getNodeParameter('limit', item) || undefined, ids: this.getNodeParameter('ids', item) || undefined, updated_after: GenericFunctions_1.createUTCStringFromNodeParameter.call(this, 'updatedAfter', item), })), GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, [ 'from', 'to', 'userId', 'projectId', 'taskId', 'companyId', 'term', 'sortBy', ])); responseData = (yield GenericFunctions_1.mocoApiRequestAllItems.call(this, item, 'GET', '/activities', { qs })); } if (operation === 'update') { const activityId = this.getNodeParameter('activityId', item); const body = Object.assign({ date: this.getNodeParameter('date', item), project_id: this.getNodeParameter('projectId', item), task_id: this.getNodeParameter('taskId', item), seconds: this.getNodeParameter('seconds', item), description: this.getNodeParameter('description', item) }, GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, ['billable', 'tag', 'remoteService', 'remoteId', 'remoteUrl'])); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'PUT', `/activities/${activityId}`, { body })); } } if (resource === 'company') { if (operation === 'create' || operation === 'update') { const type = this.getNodeParameter('type', item); let typeSpecificParameters = {}; const additionalFields = [ 'countryCode', 'vatIdentifier', 'alternativeCorrespondenceLanguage', 'website', 'fax', 'phone', 'email', 'billingEmailCc', 'address', 'info', 'customProperties', 'tags', 'footer', ]; if (type === 'customer') { typeSpecificParameters = { currency: this.getNodeParameter('currency', item), identifier: this.getNodeParameter('identifier', item), }; additionalFields.push('customerTax', 'defaultInvoiceDueDays', 'debitNumber'); } if (type === 'supplier') { additionalFields.push('iban', 'supplierTax', 'creditNumber'); } const additionalFieldsParameters = GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, additionalFields); // Patch custom properties to be in the correct format if (additionalFieldsParameters.custom_properties) { additionalFieldsParameters.custom_properties = additionalFieldsParameters.custom_properties.values.reduce((properties, { key, value }) => { properties[key] = value; return properties; }, {}); } const body = Object.assign(Object.assign({ name: this.getNodeParameter('name', item), type }, typeSpecificParameters), additionalFieldsParameters); let companyId = undefined; if (operation === 'update') { companyId = this.getNodeParameter('companyId', item); } responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, operation === 'create' ? 'POST' : 'PUT', operation === 'create' ? '/companies' : `/companies/${companyId}`, { body, })); } if (operation === 'delete') { const companyId = this.getNodeParameter('companyId', item); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'DELETE', `/companies/${companyId}`)); } if (operation === 'get') { const companyId = this.getNodeParameter('companyId', item); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'GET', `/companies/${companyId}`)); } if (operation === 'list') { const returnAll = this.getNodeParameter('returnAll', item); const qs = Object.assign(Object.assign({}, (returnAll ? {} : { limit: this.getNodeParameter('limit', item) || undefined, ids: this.getNodeParameter('ids', item) || undefined, updated_after: GenericFunctions_1.createUTCStringFromNodeParameter.call(this, 'updatedAfter', item), })), GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, ['type', 'tags', 'identifier', 'term', 'sortBy'])); responseData = (yield GenericFunctions_1.mocoApiRequestAllItems.call(this, item, 'GET', '/companies', { qs })); } } if (resource === 'project') { if (operation === 'create') { const body = Object.assign({ name: this.getNodeParameter('name', item), currency: this.getNodeParameter('currency', item), start_date: this.getNodeParameter('startDate', item), finish_date: this.getNodeParameter('finishDate', item), fixed_price: this.getNodeParameter('fixedPrice', item), retainer: this.getNodeParameter('retainer', item), leader_id: this.getNodeParameter('leaderId', item), customer_id: this.getNodeParameter('customerId', item), budget_monthly: this.getNodeParameter('budgetMonthly', item), identifier: this.getNodeParameter('identifier', item) }, GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, [ 'coLeaderId', 'dealId', 'billingAddress', 'billingEmailTo', 'billingEmailCc', 'billingNotes', 'settingIncludeTimeReport', 'billingVariant', 'hourlyRate', 'budget', 'budgetExpenses', 'tags', 'customProperties', 'info', ])); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'POST', '/projects', { body, })); } if (operation === 'delete') { const projectId = this.getNodeParameter('projectId', item); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'DELETE', `/projects/${projectId}`)); } if (operation === 'get') { const projectId = this.getNodeParameter('projectId', item); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'GET', `/projects/${projectId}`)); } if (operation === 'list') { const returnAll = this.getNodeParameter('returnAll', item); const qs = Object.assign(Object.assign({}, (returnAll ? {} : { limit: this.getNodeParameter('limit', item) || undefined, ids: this.getNodeParameter('ids', item) || undefined, updated_after: GenericFunctions_1.createUTCStringFromNodeParameter.call(this, 'updatedAfter', item), })), GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, [ 'includeArchived', 'includeCompany', 'leaderId', 'companyId', 'createdFrom', 'createdTo', 'updatedFrom', 'updatedTo', 'tags', 'identifier', 'retainer', 'projectGroupId', 'sortBy', ])); responseData = (yield GenericFunctions_1.mocoApiRequestAllItems.call(this, item, 'GET', '/projects', { qs })); } if (operation === 'update') { const projectId = this.getNodeParameter('projectId', item); const body = Object.assign({ name: this.getNodeParameter('name', item), currency: this.getNodeParameter('currency', item), start_date: this.getNodeParameter('startDate', item), finish_date: this.getNodeParameter('finishDate', item), fixed_price: this.getNodeParameter('fixedPrice', item), retainer: this.getNodeParameter('retainer', item), leader_id: this.getNodeParameter('leaderId', item), customer_id: this.getNodeParameter('customerId', item), budget_monthly: this.getNodeParameter('budgetMonthly', item), identifier: this.getNodeParameter('identifier', item) }, GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, [ 'coLeaderId', 'dealId', 'billingAddress', 'billingEmailTo', 'billingEmailCc', 'billingNotes', 'settingIncludeTimeReport', 'billingVariant', 'hourlyRate', 'budget', 'budgetExpenses', 'tags', 'customProperties', 'info', ])); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'PUT', `/projects/${projectId}`, { body })); } } if (resource === 'user') { if (operation === 'create') { const body = Object.assign({ firstname: this.getNodeParameter('firstname', item), lastname: this.getNodeParameter('lastname', item), email: this.getNodeParameter('email', item), password: this.getNodeParameter('password', item), unit_id: this.getNodeParameter('unitId', item) }, GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, ['active', 'external'])); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'POST', '/users', { body, })); } if (operation === 'delete') { const userId = this.getNodeParameter('userId', item); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'DELETE', `/users/${userId}`)); } if (operation === 'get') { const userId = this.getNodeParameter('userId', item); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'GET', `/users/${userId}`)); } if (operation === 'list') { const returnAll = this.getNodeParameter('returnAll', item); const qs = Object.assign(Object.assign({}, (returnAll ? {} : { limit: this.getNodeParameter('limit', item) || undefined, ids: this.getNodeParameter('ids', item) || undefined, updated_after: GenericFunctions_1.createUTCStringFromNodeParameter.call(this, 'updatedAfter', item), })), GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, ['includeArchived', 'sortBy'])); responseData = (yield GenericFunctions_1.mocoApiRequestAllItems.call(this, item, 'GET', '/users', { qs })); } if (operation === 'update') { const userId = this.getNodeParameter('userId', item); const body = Object.assign({ firstname: this.getNodeParameter('firstname', item), lastname: this.getNodeParameter('lastname', item), email: this.getNodeParameter('email', item), password: this.getNodeParameter('password', item), unit_id: this.getNodeParameter('unitId', item) }, GenericFunctions_1.createParametersFromNodeParameter.call(this, 'additionalFields', item, ['active', 'external'])); responseData = (yield GenericFunctions_1.mocoApiRequest.call(this, item, 'PUT', `/users/${userId}`, { body })); } } const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item } }); returnData.push(...executionData); } catch (error) { if (this.continueOnFail()) { returnData.push({ json: { error: error.message }, pairedItem: { item }, }); continue; } throw error; } } return [returnData]; }); } } exports.Moco = Moco; //# sourceMappingURL=Moco.node.js.map