Files
automatisch/packages/backend/src/apps/invoice-ninja/actions/create-invoice/index.ts
2023-10-16 18:22:57 +03:00

128 lines
3.2 KiB
TypeScript

import defineAction from '../../../../helpers/define-action';
import { filterProvidedFields } from '../../common/filter-provided-fields';
import { fields } from './fields';
export default defineAction({
name: 'Create invoice',
key: 'createInvoice',
description: 'Creates a new invoice.',
arguments: fields,
async run($) {
const {
clientId,
sendEmail,
markSent,
paid,
amountPaid,
number,
discount,
poNumber,
date,
dueDate,
taxRate1,
taxName1,
taxRate2,
taxName2,
taxRate3,
taxName3,
customField1,
customField2,
customField3,
customField4,
customSurcharge1,
customSurcharge2,
customSurcharge3,
customSurcharge4,
isAmountDiscount,
partialDeposit,
partialDueDate,
lineItemCost,
lineItemQuantity,
lineItemProduct,
lineItemDiscount,
lineItemDescription,
lineItemTaxRate1,
lineItemTaxName1,
lineItemTaxRate2,
lineItemTaxName2,
lineItemTaxRate3,
lineItemTaxName3,
lineItemCustomField1,
lineItemCustomField2,
lineItemCustomField3,
lineItemCustomField4,
lineItemProductCost,
publicNotes,
privateNotes,
terms,
footer,
} = $.step.parameters;
const paramFields = {
send_email: sendEmail,
mark_sent: markSent,
paid: paid,
amount_paid: amountPaid,
};
const params = filterProvidedFields(paramFields);
const bodyFields = {
client_id: clientId,
number: number,
discount: discount,
po_number: poNumber,
date: date,
due_date: dueDate,
tax_rate1: taxRate1,
tax_name1: taxName1,
tax_rate2: taxRate2,
tax_name2: taxName2,
tax_rate3: taxRate3,
tax_name3: taxName3,
custom_value1: customField1,
custom_value2: customField2,
custom_value3: customField3,
custom_value4: customField4,
custom_surcharge1: customSurcharge1,
custom_surcharge2: customSurcharge2,
custom_surcharge3: customSurcharge3,
custom_surcharge4: customSurcharge4,
is_amount_discount: Boolean(isAmountDiscount),
partial: partialDeposit,
partial_due_date: partialDueDate,
line_items: [
{
cost: lineItemCost,
quantity: lineItemQuantity,
product_key: lineItemProduct,
discount: lineItemDiscount,
notes: lineItemDescription,
tax_rate1: lineItemTaxRate1,
tax_name1: lineItemTaxName1,
tax_rate2: lineItemTaxRate2,
tax_name2: lineItemTaxName2,
tax_rate3: lineItemTaxRate3,
tax_name3: lineItemTaxName3,
custom_value1: lineItemCustomField1,
custom_value2: lineItemCustomField2,
custom_value3: lineItemCustomField3,
custom_value4: lineItemCustomField4,
product_cost: lineItemProductCost,
},
],
public_notes: publicNotes,
private_notes: privateNotes,
terms: terms,
footer: footer,
};
const body = filterProvidedFields(bodyFields);
const response = await $.http.post('/v1/invoices', body, { params });
$.setActionItem({ raw: response.data.data });
},
});