UNPKG

n8n-nodes-fatture-in-cloud

Version:

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

186 lines 11.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IssuedDocumentsModule = void 0; const n8n_workflow_1 = require("n8n-workflow"); const fattureincloud_ts_sdk_1 = require("@fattureincloud/fattureincloud-ts-sdk"); const IssuedDocumentsResource_1 = require("../resources/IssuedDocumentsResource"); class IssuedDocumentsModule { constructor() { this.resource = IssuedDocumentsResource_1.IssuedDocumentsResource; } async execute(context, operation, itemIndex) { var _a; 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 issuedDocumentsApi = new fattureincloud_ts_sdk_1.IssuedDocumentsApi(config); const companyId = context.getNodeParameter('companyId', itemIndex); let responseData; switch (operation) { case 'create': const documentType = context.getNodeParameter('documentType', itemIndex); const entity = context.getNodeParameter('entity', itemIndex); const date = context.getNodeParameter('date', itemIndex); const number = context.getNodeParameter('number', itemIndex); const subject = context.getNodeParameter('subject', itemIndex, ''); const itemsList = context.getNodeParameter('itemsList', itemIndex, {}); const paymentsList = context.getNodeParameter('paymentsList', itemIndex, {}); const additionalFields = context.getNodeParameter('additionalFields', itemIndex, {}); if (!entity || !entity.entityDetails || !entity.entityDetails.name || entity.entityDetails.name.trim() === '') { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Entity (Client) name is required to create an issued document. Please fill in the client name in the Entity section.', { itemIndex }); } const processedItems = (itemsList.item || []).map((item) => { var _a; return ({ ...item, vat: ((_a = item.vat) === null || _a === void 0 ? void 0 : _a.vatDetails) || { id: 0, value: 22, description: '' } }); }); const processedPayments = (paymentsList.payment || []).map((payment) => { var _a; return ({ ...payment, payment_terms: ((_a = payment.payment_terms) === null || _a === void 0 ? void 0 : _a.termsDetails) || { days: 0, type: 'standard' } }); }); const issuedDocument = { type: documentType, entity: entity.entityDetails, date: date ? new Date(date).toISOString().split('T')[0] : new Date().toISOString().split('T')[0], number: number, subject: subject, items_list: processedItems, payments_list: processedPayments, ...additionalFields, }; const createRequest = { data: issuedDocument }; const createResponse = await issuedDocumentsApi.createIssuedDocument(companyId, createRequest); responseData = createResponse.data; break; case 'get': const documentId = context.getNodeParameter('documentId', itemIndex); const getResponse = await issuedDocumentsApi.getIssuedDocument(companyId, documentId); responseData = getResponse.data; break; case 'getAll': const returnAll = context.getNodeParameter('returnAll', itemIndex, false); const limit = context.getNodeParameter('limit', itemIndex, 50); const listResponse = await issuedDocumentsApi.listIssuedDocuments(companyId, 'invoice'); let documents = listResponse.data.data || []; if (!returnAll && documents.length > limit) { documents = documents.slice(0, limit); } responseData = documents; break; case 'update': const updateDocumentId = context.getNodeParameter('documentId', itemIndex); const updateEntity = context.getNodeParameter('entity', itemIndex); const updateDate = context.getNodeParameter('date', itemIndex); const updateNumber = context.getNodeParameter('number', itemIndex); const updateSubject = context.getNodeParameter('subject', itemIndex, ''); const updateItemsList = context.getNodeParameter('itemsList', itemIndex, {}); const updatePaymentsList = context.getNodeParameter('paymentsList', itemIndex, {}); const updateAdditionalFields = context.getNodeParameter('additionalFields', itemIndex, {}); if (!updateEntity || !updateEntity.entityDetails || Object.keys(updateEntity.entityDetails).length === 0) { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Entity (Client) information is required to update an issued document. Please fill in at least the client name.', { itemIndex }); } const updateProcessedItems = (updateItemsList.item || []).map((item) => { var _a; return ({ ...item, vat: ((_a = item.vat) === null || _a === void 0 ? void 0 : _a.vatDetails) || { id: 0, value: 22, description: '' } }); }); const updateProcessedPayments = (updatePaymentsList.payment || []).map((payment) => { var _a; return ({ ...payment, payment_terms: ((_a = payment.payment_terms) === null || _a === void 0 ? void 0 : _a.termsDetails) || { days: 0, type: 'standard' } }); }); const updateIssuedDocument = { entity: updateEntity.entityDetails, date: updateDate ? new Date(updateDate).toISOString().split('T')[0] : undefined, number: updateNumber, subject: updateSubject, items_list: updateProcessedItems, payments_list: updateProcessedPayments, ...updateAdditionalFields, }; const updateRequest = { data: updateIssuedDocument }; const updateResponse = await issuedDocumentsApi.modifyIssuedDocument(companyId, updateDocumentId, updateRequest); responseData = updateResponse.data; break; case 'delete': const deleteDocumentId = context.getNodeParameter('documentId', itemIndex); await issuedDocumentsApi.deleteIssuedDocument(companyId, deleteDocumentId); responseData = { success: true, deleted: deleteDocumentId }; break; case 'transform': const originalDocumentId = context.getNodeParameter('originalDocumentId', itemIndex); const transformToType = context.getNodeParameter('transformToType', itemIndex); const eInvoice = context.getNodeParameter('eInvoice', itemIndex, false); const keepCopy = context.getNodeParameter('keepCopy', itemIndex, true); if (!originalDocumentId) { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Original Document ID is required.', { itemIndex }); } const transformResponse = await issuedDocumentsApi.transformIssuedDocument(companyId, originalDocumentId, transformToType, transformToType, eInvoice ? fattureincloud_ts_sdk_1.TransformIssuedDocumentEInvoiceEnum.NUMBER_1 : fattureincloud_ts_sdk_1.TransformIssuedDocumentEInvoiceEnum.NUMBER_0, keepCopy ? fattureincloud_ts_sdk_1.TransformIssuedDocumentTransformKeepCopyEnum.NUMBER_1 : fattureincloud_ts_sdk_1.TransformIssuedDocumentTransformKeepCopyEnum.NUMBER_0); responseData = transformResponse.data; break; case 'join': const documentIds = context.getNodeParameter('documentIds', itemIndex); const group = context.getNodeParameter('group', itemIndex, 0); const joinType = context.getNodeParameter('joinType', itemIndex); if (!documentIds || documentIds.trim() === '') { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Document IDs are required.', { itemIndex }); } const idsArray = documentIds.split(',').map(id => parseInt(id.trim())).filter(id => !isNaN(id)); if (idsArray.length < 2) { throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'At least 2 document IDs are required for joining.', { itemIndex }); } let joinTypeEnum; switch (joinType) { case 'delivery_note': joinTypeEnum = fattureincloud_ts_sdk_1.JoinIssuedDocumentsTypeEnum.DeliveryNotes; break; case 'order': joinTypeEnum = fattureincloud_ts_sdk_1.JoinIssuedDocumentsTypeEnum.Orders; break; case 'quote': joinTypeEnum = fattureincloud_ts_sdk_1.JoinIssuedDocumentsTypeEnum.Quotes; break; case 'work_report': joinTypeEnum = fattureincloud_ts_sdk_1.JoinIssuedDocumentsTypeEnum.WorkReports; break; default: joinTypeEnum = fattureincloud_ts_sdk_1.JoinIssuedDocumentsTypeEnum.DeliveryNotes; } const joinResponse = await issuedDocumentsApi.joinIssuedDocuments(companyId, idsArray.join(','), group === 0 ? fattureincloud_ts_sdk_1.JoinIssuedDocumentsGroupEnum.NUMBER_0 : fattureincloud_ts_sdk_1.JoinIssuedDocumentsGroupEnum.NUMBER_1, joinTypeEnum); responseData = joinResponse.data; break; default: throw new Error(`Unknown operation: ${operation}`); } return responseData; } } exports.IssuedDocumentsModule = IssuedDocumentsModule; //# sourceMappingURL=IssuedDocumentsModule.js.map