n8n-nodes-fatture-in-cloud
Version:
n8n community node for Fatture in Cloud integration using the official TypeScript SDK
186 lines • 11.4 kB
JavaScript
"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