n8n-nodes-base
Version:
Base nodes of n8n
825 lines • 65.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ZohoCrm = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const descriptions_1 = require("./descriptions");
const GenericFunctions_1 = require("./GenericFunctions");
class ZohoCrm {
description = {
displayName: 'Zoho CRM',
name: 'zohoCrm',
icon: 'file:zoho.svg',
group: ['transform'],
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
version: 1,
description: 'Consume Zoho CRM API',
defaults: {
name: 'Zoho CRM',
},
usableAsTool: true,
inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
credentials: [
{
name: 'zohoOAuth2Api',
required: true,
},
],
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: [
{
name: 'Account',
value: 'account',
},
{
name: 'Contact',
value: 'contact',
},
{
name: 'Deal',
value: 'deal',
},
{
name: 'Invoice',
value: 'invoice',
},
{
name: 'Lead',
value: 'lead',
},
{
name: 'Product',
value: 'product',
},
{
name: 'Purchase Order',
value: 'purchaseOrder',
},
{
name: 'Quote',
value: 'quote',
},
{
name: 'Sales Order',
value: 'salesOrder',
},
{
name: 'Vendor',
value: 'vendor',
},
],
default: 'account',
},
...descriptions_1.accountOperations,
...descriptions_1.accountFields,
...descriptions_1.contactOperations,
...descriptions_1.contactFields,
...descriptions_1.dealOperations,
...descriptions_1.dealFields,
...descriptions_1.invoiceOperations,
...descriptions_1.invoiceFields,
...descriptions_1.leadOperations,
...descriptions_1.leadFields,
...descriptions_1.productOperations,
...descriptions_1.productFields,
...descriptions_1.purchaseOrderOperations,
...descriptions_1.purchaseOrderFields,
...descriptions_1.quoteOperations,
...descriptions_1.quoteFields,
...descriptions_1.salesOrderOperations,
...descriptions_1.salesOrderFields,
...descriptions_1.vendorOperations,
...descriptions_1.vendorFields,
],
};
methods = {
loadOptions: {
// ----------------------------------------
// resources
// ----------------------------------------
async getAccounts() {
const accounts = (await GenericFunctions_1.zohoApiRequestAllItems.call(this, 'GET', '/accounts'));
return (0, GenericFunctions_1.toLoadOptions)(accounts, 'Account_Name');
},
async getContacts() {
const contacts = (await GenericFunctions_1.zohoApiRequestAllItems.call(this, 'GET', '/contacts'));
return (0, GenericFunctions_1.toLoadOptions)(contacts, 'Full_Name');
},
async getDeals() {
const deals = (await GenericFunctions_1.zohoApiRequestAllItems.call(this, 'GET', '/deals'));
return (0, GenericFunctions_1.toLoadOptions)(deals, 'Deal_Name');
},
async getProducts() {
const products = (await GenericFunctions_1.zohoApiRequestAllItems.call(this, 'GET', '/products'));
return (0, GenericFunctions_1.toLoadOptions)(products, 'Product_Name');
},
async getVendors() {
const vendors = (await GenericFunctions_1.zohoApiRequestAllItems.call(this, 'GET', '/vendors'));
return (0, GenericFunctions_1.toLoadOptions)(vendors, 'Vendor_Name');
},
// ----------------------------------------
// resource fields
// ----------------------------------------
// standard fields - called from `makeGetAllFields`
async getAccountFields() {
return await GenericFunctions_1.getFields.call(this, 'account');
},
async getContactFields() {
return await GenericFunctions_1.getFields.call(this, 'contact');
},
async getDealFields() {
return await GenericFunctions_1.getFields.call(this, 'deal');
},
async getInvoiceFields() {
return await GenericFunctions_1.getFields.call(this, 'invoice');
},
async getLeadFields() {
return await GenericFunctions_1.getFields.call(this, 'lead');
},
async getProductFields() {
return await GenericFunctions_1.getFields.call(this, 'product');
},
async getPurchaseOrderFields() {
return await GenericFunctions_1.getFields.call(this, 'purchase_order');
},
async getVendorOrderFields() {
return await GenericFunctions_1.getFields.call(this, 'vendor');
},
async getQuoteFields() {
return await GenericFunctions_1.getFields.call(this, 'quote');
},
async getSalesOrderFields() {
return await GenericFunctions_1.getFields.call(this, 'sales_order');
},
async getVendorFields() {
return await GenericFunctions_1.getFields.call(this, 'vendor');
},
// custom fields
async getCustomAccountFields() {
return await GenericFunctions_1.getFields.call(this, 'account', { onlyCustom: true });
},
async getCustomContactFields() {
return await GenericFunctions_1.getFields.call(this, 'contact', { onlyCustom: true });
},
async getCustomDealFields() {
return await GenericFunctions_1.getFields.call(this, 'deal', { onlyCustom: true });
},
async getCustomInvoiceFields() {
return await GenericFunctions_1.getFields.call(this, 'invoice', { onlyCustom: true });
},
async getCustomLeadFields() {
return await GenericFunctions_1.getFields.call(this, 'lead', { onlyCustom: true });
},
async getCustomProductFields() {
return await GenericFunctions_1.getFields.call(this, 'product', { onlyCustom: true });
},
async getCustomPurchaseOrderFields() {
return await GenericFunctions_1.getFields.call(this, 'purchase_order', { onlyCustom: true });
},
async getCustomVendorOrderFields() {
return await GenericFunctions_1.getFields.call(this, 'vendor', { onlyCustom: true });
},
async getCustomQuoteFields() {
return await GenericFunctions_1.getFields.call(this, 'quote', { onlyCustom: true });
},
async getCustomSalesOrderFields() {
return await GenericFunctions_1.getFields.call(this, 'sales_order', { onlyCustom: true });
},
async getCustomVendorFields() {
return await GenericFunctions_1.getFields.call(this, 'vendor', { onlyCustom: true });
},
// ----------------------------------------
// resource picklist options
// ----------------------------------------
async getAccountType() {
return await GenericFunctions_1.getPicklistOptions.call(this, 'account', 'Account_Type');
},
async getDealStage() {
return await GenericFunctions_1.getPicklistOptions.call(this, 'deal', 'Stage');
},
async getPurchaseOrderStatus() {
return await GenericFunctions_1.getPicklistOptions.call(this, 'purchaseOrder', 'Status');
},
async getSalesOrderStatus() {
return await GenericFunctions_1.getPicklistOptions.call(this, 'salesOrder', 'Status');
},
async getQuoteStage() {
return await GenericFunctions_1.getPicklistOptions.call(this, 'quote', 'Quote_Stage');
},
},
};
async execute() {
const items = this.getInputData();
const returnData = [];
const resource = this.getNodeParameter('resource', 0);
const operation = this.getNodeParameter('operation', 0);
let responseData;
for (let i = 0; i < items.length; i++) {
// https://www.zoho.com/crm/developer/docs/api/insert-records.html
// https://www.zoho.com/crm/developer/docs/api/get-records.html
// https://www.zoho.com/crm/developer/docs/api/update-specific-record.html
// https://www.zoho.com/crm/developer/docs/api/delete-specific-record.html
// https://www.zoho.com/crm/developer/docs/api/v2/upsert-records.html
try {
if (resource === 'account') {
// **********************************************************************
// account
// **********************************************************************
// https://www.zoho.com/crm/developer/docs/api/v2/accounts-response.html
// https://help.zoho.com/portal/en/kb/crm/customize-crm-account/customizing-fields/articles/standard-modules-fields#Accounts
if (operation === 'create') {
// ----------------------------------------
// account: create
// ----------------------------------------
const body = {
Account_Name: this.getNodeParameter('accountName', i),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustAccountPayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/accounts', body);
responseData = responseData.data[0].details;
}
else if (operation === 'delete') {
// ----------------------------------------
// account: delete
// ----------------------------------------
const accountId = this.getNodeParameter('accountId', i);
const endpoint = `/accounts/${accountId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'DELETE', endpoint);
responseData = responseData.data[0].details;
}
else if (operation === 'get') {
// ----------------------------------------
// account: get
// ----------------------------------------
const accountId = this.getNodeParameter('accountId', i);
const endpoint = `/accounts/${accountId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'GET', endpoint);
responseData = responseData.data;
}
else if (operation === 'getAll') {
// ----------------------------------------
// account: getAll
// ----------------------------------------
const qs = {};
const options = this.getNodeParameter('options', i);
(0, GenericFunctions_1.addGetAllFilterOptions)(qs, options);
responseData = await GenericFunctions_1.handleListing.call(this, 'GET', '/accounts', {}, qs);
}
else if (operation === 'update') {
// ----------------------------------------
// account: update
// ----------------------------------------
const body = {};
const updateFields = this.getNodeParameter('updateFields', i);
if (Object.keys(updateFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustAccountPayload)(updateFields));
}
else {
GenericFunctions_1.throwOnEmptyUpdate.call(this, resource);
}
const accountId = this.getNodeParameter('accountId', i);
const endpoint = `/accounts/${accountId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'PUT', endpoint, body);
responseData = responseData.data[0].details;
}
else if (operation === 'upsert') {
// ----------------------------------------
// account: upsert
// ----------------------------------------
const body = {
Account_Name: this.getNodeParameter('accountName', i),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustAccountPayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/accounts/upsert', body);
responseData = responseData.data[0].details;
}
}
else if (resource === 'contact') {
// **********************************************************************
// contact
// **********************************************************************
// https://www.zoho.com/crm/developer/docs/api/v2/contacts-response.html
// https://help.zoho.com/portal/en/kb/crm/customize-crm-account/customizing-fields/articles/standard-modules-fields#Contacts
if (operation === 'create') {
// ----------------------------------------
// contact: create
// ----------------------------------------
const body = {
Last_Name: this.getNodeParameter('lastName', i),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustContactPayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/contacts', body);
responseData = responseData.data[0].details;
}
else if (operation === 'delete') {
// ----------------------------------------
// contact: delete
// ----------------------------------------
const contactId = this.getNodeParameter('contactId', i);
const endpoint = `/contacts/${contactId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'DELETE', endpoint);
responseData = responseData.data[0].details;
}
else if (operation === 'get') {
// ----------------------------------------
// contact: get
// ----------------------------------------
const contactId = this.getNodeParameter('contactId', i);
const endpoint = `/contacts/${contactId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'GET', endpoint);
responseData = responseData.data;
}
else if (operation === 'getAll') {
// ----------------------------------------
// contact: getAll
// ----------------------------------------
const qs = {};
const options = this.getNodeParameter('options', i);
(0, GenericFunctions_1.addGetAllFilterOptions)(qs, options);
responseData = await GenericFunctions_1.handleListing.call(this, 'GET', '/contacts', {}, qs);
}
else if (operation === 'update') {
// ----------------------------------------
// contact: update
// ----------------------------------------
const body = {};
const updateFields = this.getNodeParameter('updateFields', i);
if (Object.keys(updateFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustContactPayload)(updateFields));
}
else {
GenericFunctions_1.throwOnEmptyUpdate.call(this, resource);
}
const contactId = this.getNodeParameter('contactId', i);
const endpoint = `/contacts/${contactId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'PUT', endpoint, body);
responseData = responseData.data[0].details;
}
else if (operation === 'upsert') {
// ----------------------------------------
// contact: upsert
// ----------------------------------------
const body = {
Last_Name: this.getNodeParameter('lastName', i),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustContactPayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/contacts/upsert', body);
responseData = responseData.data[0].details;
}
}
else if (resource === 'deal') {
// **********************************************************************
// deal
// **********************************************************************
// https://www.zoho.com/crm/developer/docs/api/v2/deals-response.html
// https://help.zoho.com/portal/en/kb/crm/customize-crm-account/customizing-fields/articles/standard-modules-fields#Deals
if (operation === 'create') {
// ----------------------------------------
// deal: create
// ----------------------------------------
const body = {
Deal_Name: this.getNodeParameter('dealName', i),
Stage: this.getNodeParameter('stage', i),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustDealPayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/deals', body);
responseData = responseData.data[0].details;
}
else if (operation === 'delete') {
// ----------------------------------------
// deal: delete
// ----------------------------------------
const dealId = this.getNodeParameter('dealId', i);
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'DELETE', `/deals/${dealId}`);
responseData = responseData.data[0].details;
}
else if (operation === 'get') {
// ----------------------------------------
// deal: get
// ----------------------------------------
const dealId = this.getNodeParameter('dealId', i);
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'GET', `/deals/${dealId}`);
responseData = responseData.data;
}
else if (operation === 'getAll') {
// ----------------------------------------
// deal: getAll
// ----------------------------------------
const qs = {};
const options = this.getNodeParameter('options', i);
(0, GenericFunctions_1.addGetAllFilterOptions)(qs, options);
responseData = await GenericFunctions_1.handleListing.call(this, 'GET', '/deals', {}, qs);
}
else if (operation === 'update') {
// ----------------------------------------
// deal: update
// ----------------------------------------
const body = {};
const updateFields = this.getNodeParameter('updateFields', i);
if (Object.keys(updateFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustDealPayload)(updateFields));
}
else {
GenericFunctions_1.throwOnEmptyUpdate.call(this, resource);
}
const dealId = this.getNodeParameter('dealId', i);
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'PUT', `/deals/${dealId}`, body);
responseData = responseData.data[0].details;
}
else if (operation === 'upsert') {
// ----------------------------------------
// deal: upsert
// ----------------------------------------
const body = {
Deal_Name: this.getNodeParameter('dealName', i),
Stage: this.getNodeParameter('stage', i),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustDealPayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/deals/upsert', body);
responseData = responseData.data[0].details;
}
}
else if (resource === 'invoice') {
// **********************************************************************
// invoice
// **********************************************************************
// https://www.zoho.com/crm/developer/docs/api/v2/invoices-response.html
// https://help.zoho.com/portal/en/kb/crm/customize-crm-account/customizing-fields/articles/standard-modules-fields#Invoices
if (operation === 'create') {
// ----------------------------------------
// invoice: create
// ----------------------------------------
const productDetails = this.getNodeParameter('Product_Details', i);
GenericFunctions_1.throwOnMissingProducts.call(this, resource, productDetails);
const body = {
Subject: this.getNodeParameter('subject', i),
Product_Details: (0, GenericFunctions_1.adjustProductDetails)(productDetails),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustInvoicePayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/invoices', body);
responseData = responseData.data[0].details;
}
else if (operation === 'delete') {
// ----------------------------------------
// invoice: delete
// ----------------------------------------
const invoiceId = this.getNodeParameter('invoiceId', i);
const endpoint = `/invoices/${invoiceId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'DELETE', endpoint);
responseData = responseData.data[0].details;
}
else if (operation === 'get') {
// ----------------------------------------
// invoice: get
// ----------------------------------------
const invoiceId = this.getNodeParameter('invoiceId', i);
const endpoint = `/invoices/${invoiceId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'GET', endpoint);
responseData = responseData.data;
}
else if (operation === 'getAll') {
// ----------------------------------------
// invoice: getAll
// ----------------------------------------
const qs = {};
const options = this.getNodeParameter('options', i);
(0, GenericFunctions_1.addGetAllFilterOptions)(qs, options);
responseData = await GenericFunctions_1.handleListing.call(this, 'GET', '/invoices', {}, qs);
}
else if (operation === 'update') {
// ----------------------------------------
// invoice: update
// ----------------------------------------
const body = {};
const updateFields = this.getNodeParameter('updateFields', i);
if (Object.keys(updateFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustInvoicePayloadOnUpdate)(updateFields));
}
else {
GenericFunctions_1.throwOnEmptyUpdate.call(this, resource);
}
const invoiceId = this.getNodeParameter('invoiceId', i);
const endpoint = `/invoices/${invoiceId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'PUT', endpoint, body);
responseData = responseData.data[0].details;
}
else if (operation === 'upsert') {
// ----------------------------------------
// invoice: upsert
// ----------------------------------------
const productDetails = this.getNodeParameter('Product_Details', i);
const body = {
Subject: this.getNodeParameter('subject', i),
Product_Details: (0, GenericFunctions_1.adjustProductDetails)(productDetails),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustInvoicePayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/invoices/upsert', body);
responseData = responseData.data[0].details;
}
}
else if (resource === 'lead') {
// **********************************************************************
// lead
// **********************************************************************
// https://www.zoho.com/crm/developer/docs/api/v2/leads-response.html
// https://help.zoho.com/portal/en/kb/crm/customize-crm-account/customizing-fields/articles/standard-modules-fields#Leads
if (operation === 'create') {
// ----------------------------------------
// lead: create
// ----------------------------------------
const body = {
Company: this.getNodeParameter('Company', i),
Last_Name: this.getNodeParameter('lastName', i),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustLeadPayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/leads', body);
responseData = responseData.data[0].details;
}
else if (operation === 'delete') {
// ----------------------------------------
// lead: delete
// ----------------------------------------
const leadId = this.getNodeParameter('leadId', i);
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'DELETE', `/leads/${leadId}`);
responseData = responseData.data[0].details;
}
else if (operation === 'get') {
// ----------------------------------------
// lead: get
// ----------------------------------------
const leadId = this.getNodeParameter('leadId', i);
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'GET', `/leads/${leadId}`);
}
else if (operation === 'getAll') {
// ----------------------------------------
// lead: getAll
// ----------------------------------------
const qs = {};
const options = this.getNodeParameter('options', i);
(0, GenericFunctions_1.addGetAllFilterOptions)(qs, options);
responseData = await GenericFunctions_1.handleListing.call(this, 'GET', '/leads', {}, qs);
}
else if (operation === 'getFields') {
// ----------------------------------------
// lead: getFields
// ----------------------------------------
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'GET', '/settings/fields', {}, { module: 'leads' });
responseData = responseData.fields;
}
else if (operation === 'update') {
// ----------------------------------------
// lead: update
// ----------------------------------------
const body = {};
const updateFields = this.getNodeParameter('updateFields', i);
if (Object.keys(updateFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustLeadPayload)(updateFields));
}
else {
GenericFunctions_1.throwOnEmptyUpdate.call(this, resource);
}
const leadId = this.getNodeParameter('leadId', i);
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'PUT', `/leads/${leadId}`, body);
responseData = responseData.data[0].details;
}
else if (operation === 'upsert') {
// ----------------------------------------
// lead: upsert
// ----------------------------------------
const body = {
Company: this.getNodeParameter('Company', i),
Last_Name: this.getNodeParameter('lastName', i),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustLeadPayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/leads/upsert', body);
responseData = responseData.data[0].details;
}
}
else if (resource === 'product') {
// **********************************************************************
// product
// **********************************************************************
// https://www.zoho.com/crm/developer/docs/api/v2/products-response.html
// https://help.zoho.com/portal/en/kb/crm/customize-crm-account/customizing-fields/articles/standard-modules-fields#Products
if (operation === 'create') {
// ----------------------------------------
// product: create
// ----------------------------------------
const body = {
Product_Name: this.getNodeParameter('productName', i),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustProductPayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/products', body);
responseData = responseData.data[0].details;
}
else if (operation === 'delete') {
// ----------------------------------------
// product: delete
// ----------------------------------------
const productId = this.getNodeParameter('productId', i);
const endpoint = `/products/${productId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'DELETE', endpoint);
responseData = responseData.data[0].details;
}
else if (operation === 'get') {
// ----------------------------------------
// product: get
// ----------------------------------------
const productId = this.getNodeParameter('productId', i);
const endpoint = `/products/${productId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'GET', endpoint);
responseData = responseData.data;
}
else if (operation === 'getAll') {
// ----------------------------------------
// product: getAll
// ----------------------------------------
const qs = {};
const options = this.getNodeParameter('options', i);
(0, GenericFunctions_1.addGetAllFilterOptions)(qs, options);
responseData = await GenericFunctions_1.handleListing.call(this, 'GET', '/products', {}, qs);
}
else if (operation === 'update') {
// ----------------------------------------
// product: update
// ----------------------------------------
const body = {};
const updateFields = this.getNodeParameter('updateFields', i);
if (Object.keys(updateFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustProductPayload)(updateFields));
}
else {
GenericFunctions_1.throwOnEmptyUpdate.call(this, resource);
}
const productId = this.getNodeParameter('productId', i);
const endpoint = `/products/${productId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'PUT', endpoint, body);
responseData = responseData.data[0].details;
}
else if (operation === 'upsert') {
// ----------------------------------------
// product: upsert
// ----------------------------------------
const body = {
Product_Name: this.getNodeParameter('productName', i),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustProductPayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/products/upsert', body);
responseData = responseData.data[0].details;
}
}
else if (resource === 'purchaseOrder') {
// **********************************************************************
// purchaseOrder
// **********************************************************************
// https://www.zoho.com/crm/developer/docs/api/v2/purchase-orders-response.html
// https://help.zoho.com/portal/en/kb/crm/customize-crm-account/customizing-fields/articles/standard-modules-fields#Purchase_Order
if (operation === 'create') {
// ----------------------------------------
// purchaseOrder: create
// ----------------------------------------
const productDetails = this.getNodeParameter('Product_Details', i);
GenericFunctions_1.throwOnMissingProducts.call(this, resource, productDetails);
const body = {
Subject: this.getNodeParameter('subject', i),
Vendor_Name: { id: this.getNodeParameter('vendorId', i) },
Product_Details: (0, GenericFunctions_1.adjustProductDetails)(productDetails),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustPurchaseOrderPayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/purchase_orders', body);
responseData = responseData.data[0].details;
}
else if (operation === 'delete') {
// ----------------------------------------
// purchaseOrder: delete
// ----------------------------------------
const purchaseOrderId = this.getNodeParameter('purchaseOrderId', i);
const endpoint = `/purchase_orders/${purchaseOrderId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'DELETE', endpoint);
responseData = responseData.data[0].details;
}
else if (operation === 'get') {
// ----------------------------------------
// purchaseOrder: get
// ----------------------------------------
const purchaseOrderId = this.getNodeParameter('purchaseOrderId', i);
const endpoint = `/purchase_orders/${purchaseOrderId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'GET', endpoint);
responseData = responseData.data;
}
else if (operation === 'getAll') {
// ----------------------------------------
// purchaseOrder: getAll
// ----------------------------------------
const qs = {};
const options = this.getNodeParameter('options', i);
(0, GenericFunctions_1.addGetAllFilterOptions)(qs, options);
responseData = await GenericFunctions_1.handleListing.call(this, 'GET', '/purchase_orders', {}, qs);
}
else if (operation === 'update') {
// ----------------------------------------
// purchaseOrder: update
// ----------------------------------------
const body = {};
const updateFields = this.getNodeParameter('updateFields', i);
if (Object.keys(updateFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustPurchaseOrderPayload)(updateFields));
}
else {
GenericFunctions_1.throwOnEmptyUpdate.call(this, resource);
}
const purchaseOrderId = this.getNodeParameter('purchaseOrderId', i);
const endpoint = `/purchase_orders/${purchaseOrderId}`;
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'PUT', endpoint, body);
responseData = responseData.data[0].details;
}
else if (operation === 'upsert') {
// ----------------------------------------
// purchaseOrder: upsert
// ----------------------------------------
const productDetails = this.getNodeParameter('Product_Details', i);
const body = {
Subject: this.getNodeParameter('subject', i),
Vendor_Name: { id: this.getNodeParameter('vendorId', i) },
Product_Details: (0, GenericFunctions_1.adjustProductDetails)(productDetails),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustPurchaseOrderPayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/purchase_orders/upsert', body);
responseData = responseData.data[0].details;
}
}
else if (resource === 'quote') {
// **********************************************************************
// quote
// **********************************************************************
// https://www.zoho.com/crm/developer/docs/api/v2/quotes-response.html
// https://help.zoho.com/portal/en/kb/crm/customize-crm-account/customizing-fields/articles/standard-modules-fields#Quotes
if (operation === 'create') {
// ----------------------------------------
// quote: create
// ----------------------------------------
const productDetails = this.getNodeParameter('Product_Details', i);
GenericFunctions_1.throwOnMissingProducts.call(this, resource, productDetails);
const body = {
Subject: this.getNodeParameter('subject', i),
Product_Details: (0, GenericFunctions_1.adjustProductDetails)(productDetails),
};
const additionalFields = this.getNodeParameter('additionalFields', i);
if (Object.keys(additionalFields).length) {
Object.assign(body, (0, GenericFunctions_1.adjustQuotePayload)(additionalFields));
}
responseData = await GenericFunctions_1.zohoApiRequest.call(this, 'POST', '/quotes', body);
responseData = responseData.data[0].details;
}
else if (operation === 'delete') {
// ----------------------------------------
// quote: delete
// ----------------------------------------
con