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