n8n-nodes-fatture-in-cloud
Version:
n8n community node for Fatture in Cloud integration using the official TypeScript SDK
189 lines • 11.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReceiptsModule = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const fattureincloud_ts_sdk_1 = require("@fattureincloud/fattureincloud-ts-sdk");
const ReceiptsResource_1 = require("../resources/ReceiptsResource");
class ReceiptsModule {
constructor() {
this.resource = ReceiptsResource_1.ReceiptsResource;
}
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 receiptsApi = new fattureincloud_ts_sdk_1.ReceiptsApi(config);
const companyId = context.getNodeParameter('companyId', itemIndex);
let responseData;
switch (operation) {
case 'create':
const date = context.getNodeParameter('date', itemIndex);
const number = context.getNodeParameter('number', itemIndex);
const numeration = context.getNodeParameter('numeration', itemIndex, '');
const amountNet = context.getNodeParameter('amountNet', itemIndex);
const amountVat = context.getNodeParameter('amountVat', itemIndex);
const type = context.getNodeParameter('type', itemIndex);
const description = context.getNodeParameter('description', itemIndex);
const rcCenter = context.getNodeParameter('rcCenter', itemIndex, '');
const paymentAccount = context.getNodeParameter('paymentAccount', itemIndex);
const itemsList = context.getNodeParameter('itemsList', itemIndex);
if (!description || description.trim() === '') {
throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Description is required.', { itemIndex });
}
if (!paymentAccount || !paymentAccount.accountDetails || !paymentAccount.accountDetails.id) {
throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Payment account is required.', { itemIndex });
}
if (!itemsList || !itemsList.item || !Array.isArray(itemsList.item) || itemsList.item.length === 0) {
throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'At least one item is required.', { itemIndex });
}
const receiptData = {
date,
number,
numeration: numeration.trim(),
amount_net: amountNet,
amount_vat: amountVat,
type: type,
description: description.trim(),
rc_center: rcCenter.trim(),
payment_account: {
id: paymentAccount.accountDetails.id,
name: paymentAccount.accountDetails.name,
},
items_list: itemsList.item.map((item) => {
if (!item.vat || !item.vat.vatDetails) {
throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'VAT details are required for each item.', { itemIndex });
}
return {
id: item.id || undefined,
amount_net: item.amountNet,
amount_vat: item.amountVat,
category: item.category.trim(),
vat: {
id: item.vat.vatDetails.id,
value: item.vat.vatDetails.value,
description: item.vat.vatDetails.description || '',
},
};
}),
};
const createRequest = {
data: receiptData,
};
const createResponse = await receiptsApi.createReceipt(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 receiptsApi.getReceipt(companyId, documentId);
responseData = getResponse.data;
break;
case 'list':
const filterOptions = context.getNodeParameter('filterOptions', itemIndex, {});
const listResponse = await receiptsApi.listReceipts(companyId, filterOptions.fields, filterOptions.fieldset, filterOptions.page, filterOptions.perPage, filterOptions.sort, filterOptions.q);
responseData = listResponse.data;
break;
case 'update':
const updateDocumentId = context.getNodeParameter('documentId', itemIndex);
const updateDate = context.getNodeParameter('date', itemIndex);
const updateNumber = context.getNodeParameter('number', itemIndex);
const updateNumeration = context.getNodeParameter('numeration', itemIndex, '');
const updateAmountNet = context.getNodeParameter('amountNet', itemIndex);
const updateAmountVat = context.getNodeParameter('amountVat', itemIndex);
const updateType = context.getNodeParameter('type', itemIndex);
const updateDescription = context.getNodeParameter('description', itemIndex);
const updateRcCenter = context.getNodeParameter('rcCenter', itemIndex, '');
const updatePaymentAccount = context.getNodeParameter('paymentAccount', itemIndex);
const updateItemsList = context.getNodeParameter('itemsList', 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 (!updatePaymentAccount || !updatePaymentAccount.accountDetails || !updatePaymentAccount.accountDetails.id) {
throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Payment account is required.', { itemIndex });
}
if (!updateItemsList || !updateItemsList.item || !Array.isArray(updateItemsList.item) || updateItemsList.item.length === 0) {
throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'At least one item is required.', { itemIndex });
}
const updateReceiptData = {
date: updateDate,
number: updateNumber,
numeration: updateNumeration.trim(),
amount_net: updateAmountNet,
amount_vat: updateAmountVat,
type: updateType,
description: updateDescription.trim(),
rc_center: updateRcCenter.trim(),
payment_account: {
id: updatePaymentAccount.accountDetails.id,
name: updatePaymentAccount.accountDetails.name,
},
items_list: updateItemsList.item.map((item) => {
if (!item.vat || !item.vat.vatDetails) {
throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'VAT details are required for each item.', { itemIndex });
}
return {
id: item.id || undefined,
amount_net: item.amountNet,
amount_vat: item.amountVat,
category: item.category.trim(),
vat: {
id: item.vat.vatDetails.id,
value: item.vat.vatDetails.value,
description: item.vat.vatDetails.description || '',
},
};
}),
};
const modifyRequest = {
data: updateReceiptData,
};
const updateResponse = await receiptsApi.modifyReceipt(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 receiptsApi.deleteReceipt(companyId, deleteDocumentId);
responseData = { success: true, message: 'Receipt deleted successfully' };
break;
case 'getMonthlyTotals':
const monthlyFilterOptions = context.getNodeParameter('filterOptions', itemIndex, {});
if (!monthlyFilterOptions.type) {
throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Receipt type is required for monthly totals.', { itemIndex });
}
if (!monthlyFilterOptions.year) {
throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Year is required for monthly totals.', { itemIndex });
}
const monthlyTotalsResponse = await receiptsApi.getReceiptsMonthlyTotals(companyId, monthlyFilterOptions.type, monthlyFilterOptions.year);
responseData = monthlyTotalsResponse.data;
break;
default:
throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Unknown operation: ${operation}`, { itemIndex });
}
return responseData;
}
}
exports.ReceiptsModule = ReceiptsModule;
//# sourceMappingURL=ReceiptsModule.js.map