UNPKG

n8n-nodes-fatture-in-cloud

Version:

n8n community node for Fatture in Cloud integration using the official TypeScript SDK

295 lines 17.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ReceivedDocumentsModule = void 0; const n8n_workflow_1 = require("n8n-workflow"); const fattureincloud_ts_sdk_1 = require("@fattureincloud/fattureincloud-ts-sdk"); const ReceivedDocumentsResource_1 = require("../resources/ReceivedDocumentsResource"); class ReceivedDocumentsModule { constructor() { this.resource = ReceivedDocumentsResource_1.ReceivedDocumentsResource; } async execute(context, operation, itemIndex) { var _a, _b, _c; const credentials = await context.getCredentials('fattureInCloudOAuth2Api'); let accessToken; if ((_a = credentials.oauthTokenData) === null || _a === void 0 ? void 0 : _a.access_token) { accessToken = credentials.oauthTokenData.access_token; } else if (credentials.access_token) { accessToken = credentials.access_token; } else if (credentials.accessToken) { accessToken = credentials.accessToken; } else { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Access token not found in credentials. Please re-authenticate your Fatture in Cloud connection.', { itemIndex }); } const config = new fattureincloud_ts_sdk_1.Configuration({ accessToken, }); const receivedDocumentsApi = new fattureincloud_ts_sdk_1.ReceivedDocumentsApi(config); const companyId = context.getNodeParameter('companyId', itemIndex); let responseData; switch (operation) { case 'create': const type = context.getNodeParameter('type', itemIndex); const description = context.getNodeParameter('description', itemIndex); const entity = context.getNodeParameter('entity', itemIndex); const date = context.getNodeParameter('date', itemIndex); const amountNet = context.getNodeParameter('amountNet', itemIndex); const amountVat = context.getNodeParameter('amountVat', itemIndex, 0); const amountGross = context.getNodeParameter('amountGross', itemIndex, 0); const additionalFields = context.getNodeParameter('additionalFields', itemIndex, {}); const paymentsList = context.getNodeParameter('paymentsList', itemIndex, {}); if (!description || description.trim() === '') { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Description is required.', { itemIndex }); } if (!entity || !entity.entityDetails || !entity.entityDetails.name || entity.entityDetails.name.trim() === '') { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Entity name is required.', { itemIndex }); } const documentData = { type: type, description: description.trim(), entity: { id: entity.entityDetails.id || undefined, name: entity.entityDetails.name.trim(), }, date, amount_net: amountNet, amount_vat: amountVat, amount_gross: amountGross || (amountNet + amountVat), }; if (additionalFields.amortization !== undefined) { documentData.amortization = additionalFields.amortization; } if (additionalFields.rcCenter) { documentData.rc_center = additionalFields.rcCenter; } if (additionalFields.invoiceNumber) { documentData.invoice_number = additionalFields.invoiceNumber; } if (additionalFields.isMarked !== undefined) { documentData.is_marked = additionalFields.isMarked; } if (additionalFields.isDetailed !== undefined) { documentData.is_detailed = additionalFields.isDetailed; } if (additionalFields.eInvoice !== undefined) { documentData.e_invoice = additionalFields.eInvoice; } if (additionalFields.nextDueDate) { documentData.next_due_date = additionalFields.nextDueDate; } if ((_b = additionalFields.currency) === null || _b === void 0 ? void 0 : _b.currencyDetails) { documentData.currency = { id: additionalFields.currency.currencyDetails.id, exchange_rate: additionalFields.currency.currencyDetails.exchangeRate, symbol: additionalFields.currency.currencyDetails.symbol, }; } if (additionalFields.amountWithholdingTax !== undefined) { documentData.amount_withholding_tax = additionalFields.amountWithholdingTax; } if (additionalFields.amountOtherWithholdingTax !== undefined) { documentData.amount_other_withholding_tax = additionalFields.amountOtherWithholdingTax; } if (additionalFields.taxDeductibility !== undefined) { documentData.tax_deductibility = additionalFields.taxDeductibility; } if (additionalFields.vatDeductibility !== undefined) { documentData.vat_deductibility = additionalFields.vatDeductibility; } if (additionalFields.attachmentToken) { documentData.attachment_token = additionalFields.attachmentToken; } if (paymentsList.payment && Array.isArray(paymentsList.payment)) { documentData.payments_list = paymentsList.payment.map((payment) => { var _a, _b; return ({ amount: payment.amount, due_date: payment.dueDate, paid_date: payment.paidDate || undefined, status: payment.status, payment_terms: ((_a = payment.paymentTerms) === null || _a === void 0 ? void 0 : _a.termsDetails) ? { days: payment.paymentTerms.termsDetails.days, type: payment.paymentTerms.termsDetails.type, } : undefined, payment_account: ((_b = payment.paymentAccount) === null || _b === void 0 ? void 0 : _b.accountDetails) ? { id: payment.paymentAccount.accountDetails.id, name: payment.paymentAccount.accountDetails.name, virtual: payment.paymentAccount.accountDetails.virtual, } : undefined, }); }); } const createRequest = { data: documentData, }; const createResponse = await receivedDocumentsApi.createReceivedDocument(companyId, createRequest); responseData = createResponse.data; break; case 'get': const documentId = context.getNodeParameter('documentId', itemIndex); if (!documentId) { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Document ID is required.', { itemIndex }); } const getResponse = await receivedDocumentsApi.getReceivedDocument(companyId, documentId); responseData = getResponse.data; break; case 'list': const filterOptions = context.getNodeParameter('filterOptions', itemIndex, {}); const listParams = { companyId }; if (filterOptions.type) { listParams.type = filterOptions.type; } if (filterOptions.fields) { listParams.fields = filterOptions.fields; } if (filterOptions.fieldset) { listParams.fieldset = filterOptions.fieldset; } if (filterOptions.sort) { listParams.sort = filterOptions.sort; } if (filterOptions.page) { listParams.page = filterOptions.page; } if (filterOptions.perPage) { listParams.perPage = filterOptions.perPage; } if (filterOptions.q) { listParams.q = filterOptions.q; } const listResponse = await receivedDocumentsApi.listReceivedDocuments(companyId, filterOptions.type, filterOptions.fields, filterOptions.fieldset, filterOptions.sort, filterOptions.page, filterOptions.perPage, filterOptions.q); responseData = listResponse.data; break; case 'update': const updateDocumentId = context.getNodeParameter('documentId', itemIndex); const updateType = context.getNodeParameter('type', itemIndex); const updateDescription = context.getNodeParameter('description', itemIndex); const updateEntity = context.getNodeParameter('entity', itemIndex); const updateDate = context.getNodeParameter('date', itemIndex); const updateAmountNet = context.getNodeParameter('amountNet', itemIndex); const updateAmountVat = context.getNodeParameter('amountVat', itemIndex, 0); const updateAmountGross = context.getNodeParameter('amountGross', itemIndex, 0); const updateAdditionalFields = context.getNodeParameter('additionalFields', itemIndex, {}); const updatePaymentsList = context.getNodeParameter('paymentsList', itemIndex, {}); if (!updateDocumentId) { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Document ID is required.', { itemIndex }); } if (!updateDescription || updateDescription.trim() === '') { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Description is required.', { itemIndex }); } if (!updateEntity || !updateEntity.entityDetails || !updateEntity.entityDetails.name || updateEntity.entityDetails.name.trim() === '') { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Entity name is required.', { itemIndex }); } const updateDocumentData = { type: updateType, description: updateDescription.trim(), entity: { id: updateEntity.entityDetails.id || undefined, name: updateEntity.entityDetails.name.trim(), }, date: updateDate, amount_net: updateAmountNet, amount_vat: updateAmountVat, amount_gross: updateAmountGross || (updateAmountNet + updateAmountVat), }; if (updateAdditionalFields.amortization !== undefined) { updateDocumentData.amortization = updateAdditionalFields.amortization; } if (updateAdditionalFields.rcCenter) { updateDocumentData.rc_center = updateAdditionalFields.rcCenter; } if (updateAdditionalFields.invoiceNumber) { updateDocumentData.invoice_number = updateAdditionalFields.invoiceNumber; } if (updateAdditionalFields.isMarked !== undefined) { updateDocumentData.is_marked = updateAdditionalFields.isMarked; } if (updateAdditionalFields.isDetailed !== undefined) { updateDocumentData.is_detailed = updateAdditionalFields.isDetailed; } if (updateAdditionalFields.eInvoice !== undefined) { updateDocumentData.e_invoice = updateAdditionalFields.eInvoice; } if (updateAdditionalFields.nextDueDate) { updateDocumentData.next_due_date = updateAdditionalFields.nextDueDate; } if ((_c = updateAdditionalFields.currency) === null || _c === void 0 ? void 0 : _c.currencyDetails) { updateDocumentData.currency = { id: updateAdditionalFields.currency.currencyDetails.id, exchange_rate: updateAdditionalFields.currency.currencyDetails.exchangeRate, symbol: updateAdditionalFields.currency.currencyDetails.symbol, }; } if (updateAdditionalFields.amountWithholdingTax !== undefined) { updateDocumentData.amount_withholding_tax = updateAdditionalFields.amountWithholdingTax; } if (updateAdditionalFields.amountOtherWithholdingTax !== undefined) { updateDocumentData.amount_other_withholding_tax = updateAdditionalFields.amountOtherWithholdingTax; } if (updateAdditionalFields.taxDeductibility !== undefined) { updateDocumentData.tax_deductibility = updateAdditionalFields.taxDeductibility; } if (updateAdditionalFields.vatDeductibility !== undefined) { updateDocumentData.vat_deductibility = updateAdditionalFields.vatDeductibility; } if (updateAdditionalFields.attachmentToken) { updateDocumentData.attachment_token = updateAdditionalFields.attachmentToken; } if (updatePaymentsList.payment && Array.isArray(updatePaymentsList.payment)) { updateDocumentData.payments_list = updatePaymentsList.payment.map((payment) => { var _a, _b; return ({ amount: payment.amount, due_date: payment.dueDate, paid_date: payment.paidDate || undefined, status: payment.status, payment_terms: ((_a = payment.paymentTerms) === null || _a === void 0 ? void 0 : _a.termsDetails) ? { days: payment.paymentTerms.termsDetails.days, type: payment.paymentTerms.termsDetails.type, } : undefined, payment_account: ((_b = payment.paymentAccount) === null || _b === void 0 ? void 0 : _b.accountDetails) ? { id: payment.paymentAccount.accountDetails.id, name: payment.paymentAccount.accountDetails.name, virtual: payment.paymentAccount.accountDetails.virtual, } : undefined, }); }); } const modifyRequest = { data: updateDocumentData, }; const updateResponse = await receivedDocumentsApi.modifyReceivedDocument(companyId, updateDocumentId, modifyRequest); responseData = updateResponse.data; break; case 'delete': const deleteDocumentId = context.getNodeParameter('documentId', itemIndex); if (!deleteDocumentId) { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Document ID is required.', { itemIndex }); } await receivedDocumentsApi.deleteReceivedDocument(companyId, deleteDocumentId); responseData = { success: true, message: 'Received document deleted successfully' }; break; case 'getTotals': const totalsDocumentId = context.getNodeParameter('documentId', itemIndex); if (!totalsDocumentId) { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Document ID is required.', { itemIndex }); } const totalsRequest = { data: { amount_vat: 0, }, }; const totalsResponse = await receivedDocumentsApi.getExistingReceivedDocumentTotals(companyId, totalsDocumentId, totalsRequest); responseData = totalsResponse.data; break; default: throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Unknown operation: ${operation}`, { itemIndex }); } return responseData; } } exports.ReceivedDocumentsModule = ReceivedDocumentsModule; //# sourceMappingURL=ReceivedDocumentsModule.js.map