UNPKG

n8n-nodes-base

Version:

Base nodes of n8n

963 lines (962 loc) 56.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.InvoiceNinja = void 0; const n8n_workflow_1 = require("n8n-workflow"); const ISOCountryCodes_1 = require("../../utils/ISOCountryCodes"); const BankTransactionDescription_1 = require("./BankTransactionDescription"); const ClientDescription_1 = require("./ClientDescription"); const ExpenseDescription_1 = require("./ExpenseDescription"); const GenericFunctions_1 = require("./GenericFunctions"); const InvoiceDescription_1 = require("./InvoiceDescription"); const PaymentDescription_1 = require("./PaymentDescription"); const QuoteDescription_1 = require("./QuoteDescription"); const TaskDescription_1 = require("./TaskDescription"); class InvoiceNinja { description = { displayName: 'Invoice Ninja', name: 'invoiceNinja', icon: 'file:invoiceNinja.svg', group: ['output'], version: [1, 2], subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Consume Invoice Ninja API', defaults: { name: 'Invoice Ninja', }, usableAsTool: true, inputs: [n8n_workflow_1.NodeConnectionTypes.Main], outputs: [n8n_workflow_1.NodeConnectionTypes.Main], credentials: [ { name: 'invoiceNinjaApi', required: true, }, ], properties: [ { displayName: 'API Version', name: 'apiVersion', type: 'options', isNodeSetting: true, displayOptions: { show: { '@version': [1], }, }, options: [ { name: 'Version 4', value: 'v4', }, { name: 'Version 5', value: 'v5', }, ], default: 'v4', }, { displayName: 'API Version', name: 'apiVersion', type: 'options', isNodeSetting: true, displayOptions: { show: { '@version': [2], }, }, options: [ { name: 'Version 4', value: 'v4', }, { name: 'Version 5', value: 'v5', }, ], default: 'v5', }, { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'Bank Transaction', value: 'bank_transaction', displayOptions: { show: { apiVersion: ['v5'], }, }, }, { name: 'Client', value: 'client', }, { name: 'Expense', value: 'expense', }, { name: 'Invoice', value: 'invoice', }, { name: 'Payment', value: 'payment', }, { name: 'Quote', value: 'quote', }, { name: 'Task', value: 'task', }, ], default: 'client', }, ...ClientDescription_1.clientOperations, ...ClientDescription_1.clientFields, ...InvoiceDescription_1.invoiceOperations, ...InvoiceDescription_1.invoiceFields, ...TaskDescription_1.taskOperations, ...TaskDescription_1.taskFields, ...PaymentDescription_1.paymentOperations, ...PaymentDescription_1.paymentFields, ...ExpenseDescription_1.expenseOperations, ...ExpenseDescription_1.expenseFields, ...QuoteDescription_1.quoteOperations, ...QuoteDescription_1.quoteFields, ...BankTransactionDescription_1.bankTransactionOperations, ...BankTransactionDescription_1.bankTransactionFields, ], }; methods = { loadOptions: { // Get all the available clients to display them to user so that they can // select them easily async getClients() { const returnData = []; const clients = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/clients'); for (const client of clients) { const clientName = client.display_name; const clientId = client.id; returnData.push({ name: clientName, value: clientId, }); } return returnData; }, // Get all the available projects to display them to user so that they can // select them easily async getProjects() { const returnData = []; const projects = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/projects'); for (const project of projects) { const projectName = project.name; const projectId = project.id; returnData.push({ name: projectName, value: projectId, }); } return returnData; }, // Get all the available invoices to display them to user so that they can // select them easily async getInvoices() { const returnData = []; const invoices = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/invoices'); for (const invoice of invoices) { const invoiceName = (invoice.invoice_number || invoice.number); const invoiceId = invoice.id; returnData.push({ name: invoiceName, value: invoiceId, }); } return returnData; }, // Get all the available country codes to display them to user so that they can // select them easily async getCountryCodes() { const returnData = []; for (let i = 0; i < ISOCountryCodes_1.isoCountryCodes.length; i++) { const countryName = ISOCountryCodes_1.isoCountryCodes[i].name; const countryId = ISOCountryCodes_1.isoCountryCodes[i].numeric; returnData.push({ name: countryName, value: countryId, }); } return returnData; }, // Get all the available vendors to display them to user so that they can // select them easily async getVendors() { const returnData = []; const vendors = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/vendors'); for (const vendor of vendors) { const vendorName = vendor.name; const vendorId = vendor.id; returnData.push({ name: vendorName, value: vendorId, }); } return returnData; }, // Get all the available expense categories to display them to user so that they can // select them easily async getExpenseCategories() { const returnData = []; const categories = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/expense_categories'); for (const category of categories) { const categoryName = category.name; const categoryId = category.id; returnData.push({ name: categoryName, value: categoryId, }); } return returnData; }, // Get all the available bank integrations to display them to user so that they can // select them easily async getBankIntegrations() { const returnData = []; let banks = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/bank_integrations'); banks = banks.filter((e) => !e.is_deleted); for (const bank of banks) { const providerName = bank.provider_name; const accountName = bank.bank_account_name; const bankId = bank.id; returnData.push({ name: providerName != accountName ? `${providerName} - ${accountName}` : accountName || providerName, value: bankId, }); } return returnData; }, // Get all the matchable payments to display them to user so that they can // select them easily async getPayments() { const returnData = []; const qs = {}; // Only select payments that can be matched to transactions qs.match_transactions = true; const payments = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/payments', {}, qs); for (const payment of payments) { const paymentName = [payment.number, payment.date, payment.amount] .filter((e) => e) .join(' - '); const paymentId = payment.id; returnData.push({ name: paymentName, value: paymentId, }); } return returnData; }, // Get all the currencies to display them to user so that they can // select them easily async getCurrencies() { const returnData = []; const statics = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/statics'); Object.entries(statics) .filter(([key]) => key === 'currencies') .forEach(([key, value]) => { if (key === 'currencies' && Array.isArray(value)) { for (const currency of value) { const currencyName = [currency.number, currency.code].filter((e) => e).join(' - '); const currencyId = currency.id; returnData.push({ name: currencyName, value: currencyId, }); } } }); return returnData; }, }, }; async execute() { const items = this.getInputData(); const returnData = []; const length = items.length; const qs = {}; let responseData; const resource = this.getNodeParameter('resource', 0); const operation = this.getNodeParameter('operation', 0); const apiVersion = this.getNodeParameter('apiVersion', 0); for (let i = 0; i < length; i++) { //Routes: https://github.com/invoiceninja/invoiceninja/blob/ff455c8ed9fd0c0326956175ecd509efa8bad263/routes/api.php try { if (resource === 'client') { if (operation === 'create') { const additionalFields = this.getNodeParameter('additionalFields', i); const body = {}; if (additionalFields.clientName) { body.name = additionalFields.clientName; } if (additionalFields.clientName) { body.name = additionalFields.clientName; } if (additionalFields.idNumber) { body.id_number = additionalFields.idNumber; } if (additionalFields.idNumber) { body.id_number = additionalFields.idNumber; } if (additionalFields.privateNotes) { body.private_notes = additionalFields.privateNotes; } if (additionalFields.vatNumber) { body.vat_number = additionalFields.vatNumber; } if (additionalFields.workPhone) { body.work_phone = additionalFields.workPhone; } if (additionalFields.website) { body.website = additionalFields.website; } const contactsValues = this.getNodeParameter('contactsUi', i) .contacstValues; if (contactsValues) { const contacts = []; for (const contactValue of contactsValues) { const contact = { first_name: contactValue.firstName, last_name: contactValue.lastName, email: contactValue.email, phone: contactValue.phone, }; contacts.push(contact); } body.contacts = contacts; } const shippingAddressValue = this.getNodeParameter('shippingAddressUi', i).shippingAddressValue; if (shippingAddressValue) { body.shipping_address1 = shippingAddressValue.streetAddress; body.shipping_address2 = shippingAddressValue.aptSuite; body.shipping_city = shippingAddressValue.city; body.shipping_state = shippingAddressValue.state; body.shipping_postal_code = shippingAddressValue.postalCode; body.shipping_country_id = parseInt(shippingAddressValue.countryCode, 10); } const billingAddressValue = this.getNodeParameter('billingAddressUi', i).billingAddressValue; if (billingAddressValue) { body.address1 = billingAddressValue.streetAddress; body.address2 = billingAddressValue.aptSuite; body.city = billingAddressValue.city; body.state = billingAddressValue.state; body.postal_code = billingAddressValue.postalCode; body.country_id = parseInt(billingAddressValue.countryCode, 10); } responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'POST', '/clients', body); responseData = responseData.data; } if (operation === 'get') { const clientId = this.getNodeParameter('clientId', i); const options = this.getNodeParameter('options', i); if (options.include) { qs.include = options.include; } responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', `/clients/${clientId}`, {}, qs); responseData = responseData.data; } if (operation === 'getAll') { const returnAll = this.getNodeParameter('returnAll', 0); const options = this.getNodeParameter('options', i); if (options.include) { qs.include = options.include; } if (options.status) { qs.status = options.status; } if (options.createdAt) { qs.created_at = options.createdAt; } if (options.updatedAt) { qs.updated_at = options.updatedAt; } if (options.isDeleted) { qs.is_deleted = options.isDeleted; } if (returnAll) { responseData = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/clients', {}, qs); } else { qs.per_page = this.getNodeParameter('limit', 0); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', '/clients', {}, qs); responseData = responseData.data; } } if (operation === 'delete') { const clientId = this.getNodeParameter('clientId', i); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'DELETE', `/clients/${clientId}`); responseData = responseData.data; } } if (resource === 'invoice') { if (operation === 'create') { const additionalFields = this.getNodeParameter('additionalFields', i); const body = {}; if (additionalFields.email) { body.email = additionalFields.email; } if (additionalFields.client) { body.client_id = additionalFields.client; } if (additionalFields.autoBill) { body.auto_bill = additionalFields.autoBill; } if (additionalFields.customValue1) { body.custom_value1 = additionalFields.customValue1; } if (additionalFields.customValue2) { body.custom_value2 = additionalFields.customValue2; } if (additionalFields.dueDate) { body.due_date = additionalFields.dueDate; } if (additionalFields.invoiceDate) { body.invoice_date = additionalFields.invoiceDate; } if (additionalFields.invoiceNumber) { if (apiVersion === 'v4') { body.invoice_number = additionalFields.invoiceNumber; } else if (apiVersion === 'v5') { body.number = additionalFields.invoiceNumber; } } if (additionalFields.invoiceStatus) { body.invoice_status_id = additionalFields.invoiceStatus; } if (additionalFields.isAmountDiscount) { body.is_amount_discount = additionalFields.isAmountDiscount; } if (additionalFields.partial) { body.partial = additionalFields.partial; } if (additionalFields.partialDueDate) { body.partial_due_date = additionalFields.partialDueDate; } if (additionalFields.poNumber) { body.po_number = additionalFields.poNumber; } if (additionalFields.privateNotes) { body.private_notes = additionalFields.privateNotes; } if (additionalFields.publicNotes) { body.public_notes = additionalFields.publicNotes; } if (additionalFields.taxName1) { body.tax_name1 = additionalFields.taxName1; } if (additionalFields.taxName2) { body.tax_name2 = additionalFields.taxName2; } if (additionalFields.taxRate1) { body.tax_rate1 = additionalFields.taxRate1; } if (additionalFields.taxRate2) { body.tax_rate2 = additionalFields.taxRate2; } if (additionalFields.discount) { body.discount = additionalFields.discount; } if (additionalFields.paid) { if (apiVersion === 'v4') { body.paid = additionalFields.paid; } else if (apiVersion === 'v5') { qs.amount_paid = additionalFields.paid; } } if (additionalFields.emailInvoice) { if (apiVersion === 'v4') { body.email_invoice = additionalFields.emailInvoice; } else if (apiVersion === 'v5') { qs.send_email = additionalFields.emailInvoice; } } if (additionalFields.markSent) { qs.mark_sent = additionalFields.markSent; } const invoiceItemsValues = this.getNodeParameter('invoiceItemsUi', i) .invoiceItemsValues; if (invoiceItemsValues) { const invoiceItems = []; for (const itemValue of invoiceItemsValues) { const item = { cost: itemValue.cost, notes: itemValue.description, product_key: itemValue.service, tax_rate1: itemValue.taxRate1, tax_rate2: itemValue.taxRate2, tax_name1: itemValue.taxName1, tax_name2: itemValue.taxName2, }; if (apiVersion === 'v4') { item.qty = itemValue.hours; } if (apiVersion === 'v5') { item.quantity = itemValue.hours; } invoiceItems.push(item); } if (apiVersion === 'v4') { body.invoice_items = invoiceItems; } if (apiVersion === 'v5') { body.line_items = invoiceItems; } } responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'POST', '/invoices', body, qs); responseData = responseData.data; } if (operation === 'email') { const invoiceId = this.getNodeParameter('invoiceId', i); if (apiVersion === 'v4') { responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'POST', '/email_invoice', { id: invoiceId, }); } if (apiVersion === 'v5') { responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', `/invoices/${invoiceId}/email`); } } if (operation === 'get') { const invoiceId = this.getNodeParameter('invoiceId', i); const options = this.getNodeParameter('options', i); if (options.include) { qs.include = options.include; } responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', `/invoices/${invoiceId}`, {}, qs); responseData = responseData.data; } if (operation === 'getAll') { const returnAll = this.getNodeParameter('returnAll', 0); const options = this.getNodeParameter('options', i); if (options.include) { qs.include = options.include; } if (options.invoiceNumber) { if (apiVersion === 'v4') { qs.invoice_number = options.invoiceNumber; } else if (apiVersion === 'v5') { // eslint-disable-next-line id-denylist qs.number = options.invoiceNumber; } } if (options.status) { qs.status = options.status; } if (options.createdAt) { qs.created_at = options.createdAt; } if (options.updatedAt) { qs.updated_at = options.updatedAt; } if (options.isDeleted) { qs.is_deleted = options.isDeleted; } if (options.clientStatus) { qs.client_status = options.clientStatus; } if (returnAll) { responseData = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/invoices', {}, qs); } else { qs.per_page = this.getNodeParameter('limit', 0); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', '/invoices', {}, qs); responseData = responseData.data; } } if (operation === 'delete') { const invoiceId = this.getNodeParameter('invoiceId', i); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'DELETE', `/invoices/${invoiceId}`); responseData = responseData.data; } } if (resource === 'task') { if (operation === 'create') { const additionalFields = this.getNodeParameter('additionalFields', i); const body = {}; if (additionalFields.client) { body.client_id = additionalFields.client; } if (additionalFields.project) { body.project_id = additionalFields.project; } if (additionalFields.customValue1) { body.custom_value1 = additionalFields.customValue1; } if (additionalFields.customValue2) { body.custom_value2 = additionalFields.customValue2; } if (additionalFields.description) { body.description = additionalFields.description; } const timeLogsValues = this.getNodeParameter('timeLogsUi', i) .timeLogsValues; if (timeLogsValues) { const logs = []; for (const logValue of timeLogsValues) { let from = 0, to; if (logValue.startDate) { from = new Date(logValue.startDate).getTime() / 1000; } if (logValue.endDate) { to = new Date(logValue.endDate).getTime() / 1000; } if (logValue.duration) { to = from + logValue.duration * 3600; } logs.push([from, to]); } body.time_log = JSON.stringify(logs); } responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'POST', '/tasks', body); responseData = responseData.data; } if (operation === 'get') { const taskId = this.getNodeParameter('taskId', i); const options = this.getNodeParameter('options', i); if (options.include) { qs.include = options.include; } responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', `/tasks/${taskId}`, {}, qs); responseData = responseData.data; } if (operation === 'getAll') { const returnAll = this.getNodeParameter('returnAll', 0); const options = this.getNodeParameter('options', i); if (options.include) { qs.include = options.include; } if (returnAll) { responseData = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/tasks', {}, qs); } else { qs.per_page = this.getNodeParameter('limit', 0); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', '/tasks', {}, qs); responseData = responseData.data; } } if (operation === 'delete') { const taskId = this.getNodeParameter('taskId', i); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'DELETE', `/tasks/${taskId}`); responseData = responseData.data; } } if (resource === 'payment') { if (operation === 'create') { const additionalFields = this.getNodeParameter('additionalFields', i); const invoice = this.getNodeParameter('invoice', i); const client = (await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', `/invoices/${invoice}`, {}, qs)).data?.client_id; const amount = this.getNodeParameter('amount', i); const body = { amount, client_id: client, }; if (apiVersion === 'v4') { body.invoice_id = invoice; } else if (apiVersion === 'v5') { body.invoices = [ { invoice_id: invoice, amount, }, ]; } if (additionalFields.paymentType) { if (apiVersion === 'v4') { body.payment_type_id = additionalFields.paymentType; } else if (apiVersion == 'v5') { body.type_id = additionalFields.paymentType; } } if (additionalFields.transferReference) { body.transaction_reference = additionalFields.transferReference; } if (additionalFields.privateNotes) { body.private_notes = additionalFields.privateNotes; } responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'POST', '/payments', body); responseData = responseData.data; } if (operation === 'get') { const paymentId = this.getNodeParameter('paymentId', i); const options = this.getNodeParameter('options', i); if (options.include) { qs.include = options.include; } responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', `/payments/${paymentId}`, {}, qs); responseData = responseData.data; } if (operation === 'getAll') { const returnAll = this.getNodeParameter('returnAll', 0); const options = this.getNodeParameter('options', i); if (options.include) { qs.include = options.include; } if (options.status) { qs.status = options.status; } if (options.createdAt) { qs.created_at = options.createdAt; } if (options.updatedAt) { qs.updated_at = options.updatedAt; } if (options.isDeleted) { qs.is_deleted = options.isDeleted; } if (returnAll) { responseData = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/payments', {}, qs); } else { qs.per_page = this.getNodeParameter('limit', 0); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', '/payments', {}, qs); responseData = responseData.data; } } if (operation === 'delete') { const paymentId = this.getNodeParameter('paymentId', i); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'DELETE', `/payments/${paymentId}`); responseData = responseData.data; } } if (resource === 'expense') { if (operation === 'create') { const additionalFields = this.getNodeParameter('additionalFields', i); const body = {}; if (additionalFields.amount) { body.amount = additionalFields.amount; } if (additionalFields.billable) { body.should_be_invoiced = additionalFields.billable; } if (additionalFields.client) { body.client_id = additionalFields.client; } if (additionalFields.customValue1) { body.custom_value1 = additionalFields.customValue1; } if (additionalFields.customValue2) { body.custom_value2 = additionalFields.customValue2; } if (additionalFields.category) { body.expense_category_id = additionalFields.category; } if (additionalFields.expenseDate) { body.expense_date = additionalFields.expenseDate; } if (additionalFields.paymentDate) { body.payment_date = additionalFields.paymentDate; } if (additionalFields.paymentType) { body.payment_type_id = additionalFields.paymentType; } if (additionalFields.publicNotes) { body.public_notes = additionalFields.publicNotes; } if (additionalFields.privateNotes) { body.private_notes = additionalFields.privateNotes; } if (additionalFields.taxName1) { body.tax_name1 = additionalFields.taxName1; } if (additionalFields.taxName2) { body.tax_name2 = additionalFields.taxName2; } if (additionalFields.taxRate1) { body.tax_rate1 = additionalFields.taxRate1; } if (additionalFields.taxRate2) { body.tax_rate2 = additionalFields.taxRate2; } if (additionalFields.transactionReference) { body.transaction_reference = additionalFields.transactionReference; } if (additionalFields.vendor) { body.vendor_id = additionalFields.vendor; } responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'POST', '/expenses', body); responseData = responseData.data; } if (operation === 'get') { const expenseId = this.getNodeParameter('expenseId', i); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', `/expenses/${expenseId}`, {}, qs); responseData = responseData.data; } if (operation === 'getAll') { const returnAll = this.getNodeParameter('returnAll', 0); if (returnAll) { responseData = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', '/expenses', {}, qs); } else { qs.per_page = this.getNodeParameter('limit', 0); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', '/expenses', {}, qs); responseData = responseData.data; } } if (operation === 'delete') { const expenseId = this.getNodeParameter('expenseId', i); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'DELETE', `/expenses/${expenseId}`); responseData = responseData.data; } } if (resource === 'bank_transaction') { const resourceEndpoint = '/bank_transactions'; if (operation === 'create') { const additionalFields = this.getNodeParameter('additionalFields', i); const body = {}; if (additionalFields.amount) { body.amount = additionalFields.amount; } if (additionalFields.baseType) { body.base_type = additionalFields.baseType; } if (additionalFields.bankIntegrationId) { body.bank_integration_id = additionalFields.bankIntegrationId; } if (additionalFields.client) { body.date = additionalFields.date; } if (additionalFields.currencyId) { body.currency_id = additionalFields.currencyId; } if (additionalFields.email) { body.description = additionalFields.description; } responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'POST', resourceEndpoint, body); responseData = responseData.data; } if (operation === 'get') { const bankTransactionId = this.getNodeParameter('bankTransactionId', i); const options = this.getNodeParameter('options', i); if (options.include) { qs.include = options.include; } responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', `${resourceEndpoint}/${bankTransactionId}`, {}, qs); responseData = responseData.data; } if (operation === 'getAll') { const returnAll = this.getNodeParameter('returnAll', 0); const options = this.getNodeParameter('options', i); if (options.include) { qs.include = options.include; } if (options.invoiceNumber) { qs.invoice_number = options.invoiceNumber; } if (returnAll) { responseData = await GenericFunctions_1.invoiceNinjaApiRequestAllItems.call(this, 'data', 'GET', resourceEndpoint, {}, qs); } else { qs.per_page = this.getNodeParameter('limit', 0); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'GET', resourceEndpoint, {}, qs); responseData = responseData.data; } } if (operation === 'delete') { const bankTransactionId = this.getNodeParameter('bankTransactionId', i); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'DELETE', `${resourceEndpoint}/${bankTransactionId}`); responseData = responseData.data; } if (operation === 'matchPayment') { const bankTransactionId = this.getNodeParameter('bankTransactionId', i); const paymentId = this.getNodeParameter('paymentId', i); const body = { transactions: [] }; const bankTransaction = {}; if (bankTransactionId) { bankTransaction.id = bankTransactionId; } if (paymentId) { bankTransaction.payment_id = paymentId; } body.transactions.push(bankTransaction); responseData = await GenericFunctions_1.invoiceNinjaApiRequest.call(this, 'POST', `${resourceEndpoint}/match`, body); } } if (resource === 'quote') { const resourceEndpoint = apiVersion === 'v4' ? '/invoices' : '/quotes'; if (operation === 'create') { const additionalFields = this.getNodeParameter('additionalFields', i); const body = { is_quote: true, }; if (additionalFields.client) { body.client_id = additionalFields.client; } if (additionalFields.email) { body.email = additionalFields.email; } if (additionalFields.autoBill) { body.auto_bill = additionalFields.autoBill; } if (additionalFields.customValue1) { body.custom_value1 = additionalFields.customValue1; } if (additionalFields.customValue2) { body.custom_value2 = additionalFields.customValue2; } if (additionalFields.dueDate) { body.due_date = additionalFields.dueDate; } if (additionalFields.quoteDate) { body.invoice_date = additionalFields.quoteDate; } if (additionalFields.quoteNumber) { if (apiVersion === 'v4') { body.invoice_number = additionalFields.quoteNumber; } else if (apiVersion === 'v5') { body.number = additionalFields.quoteNumber; } } if (additionalFields.invoiceStatus) { body.invoice_status_id = additionalFields.invoiceStatus; } if (additionalFields.isAmountDiscount) { body.is_amount_discount = additionalFields.isAmountDiscount; } if (additionalFields.partial) { body.partial = additionalFields.partial; } if (additionalFields.partialDueDate) { body.partial_due_date = additionalFields.partialDueDate; } if (additionalFields.poNumber) { body.po_number = additionalFields.poNumber; } if (additionalFields.privateNotes) { body.private_notes = additionalFields.privateNotes; } if (additionalFields.publicNotes) { body.public_notes = additionalFields.publicNotes; } if (additionalFields.taxName1) { body.tax_name1 = additionalFields.taxName1; } if (additionalFields.taxName2) { body.tax_name2 = additionalFields.taxName2; } if (additionalFields.taxRate1) { body.tax_rate1 = additionalFields.taxRate1;