import constants, { parseObject } from "../../common/constants.mjs";
import fakturoid from "../../fakturoid.app.mjs";
export default {
key: "fakturoid-create-invoice",
name: "Create Invoice",
description: "Creates a new invoice. [See the documentation](https://www.fakturoid.cz/api/v3/invoices)",
version: "0.0.1",
type: "action",
props: {
fakturoid,
accountSlug: {
propDefinition: [
fakturoid,
"accountSlug",
],
},
customId: {
type: "string",
label: "Custom Id",
description: "Identifier in your application",
optional: true,
},
documentType: {
type: "string",
label: "Document Type",
description: "Type of document",
options: constants.DOCUMENT_TYPE_OPTIONS,
reloadProps: true,
optional: true,
},
subjectId: {
propDefinition: [
fakturoid,
"subjectId",
({ accountSlug }) => ({
accountSlug,
}),
],
},
orderNumber: {
type: "string",
label: "Order Number",
description: "Order number in your application",
optional: true,
},
note: {
type: "string",
label: "Note",
description: "Additional notes for the invoice",
optional: true,
},
due: {
type: "string",
label: "Due",
description: "Invoice due date in number of days from today",
optional: true,
},
issuedOn: {
type: "string",
label: "Issued On",
description: "Date of issue. **Format: YYYY-MM-DD**",
optional: true,
},
taxableFulfillmentDue: {
type: "string",
label: "Taxable Fulfillment Due",
description: "Chargeable event date.",
optional: true,
},
tags: {
type: "string[]",
label: "Tags",
description: "List of tags",
optional: true,
},
roundTotal: {
type: "boolean",
label: "Round Total",
description: "Round total amount (VAT included)",
optional: true,
},
subtotal: {
type: "string",
label: "Subtotal",
description: "Total without VAT",
optional: true,
},
total: {
type: "string",
label: "Total",
description: "Total with VAT",
optional: true,
},
lines: {
type: "string[]",
label: "Lines",
description: "List of object lines to invoice. [See the documentation](https://www.fakturoid.cz/api/v3/invoices#attributes). **Example: {\"name\": \"Hard work\",\"quantity\": \"1.0\",\"unit_name\": \"h\",\"unit_price\": \"40000\",\"vat_rate\": \"21\"}**",
},
},
async additionalProps() {
const props = {};
if (this.documentType === "proforma") {
props.proformaFollowupDocument = {
type: "string",
label: "Proforma Followup Document",
description: "What to issue after a proforma is paid.",
options: constants.PROFORMA_OPTIONS,
optional: true,
};
}
return props;
},
async run({ $ }) {
const response = await this.fakturoid.createInvoice({
$,
accountSlug: this.accountSlug,
data: {
custom_id: this.customId,
document_type: this.documentType,
proforma_followup_document: this.proformaFollowupDocument,
subject_id: this.subjectId,
order_number: this.orderNumber,
note: this.note,
due: this.due,
issued_on: this.issuedOn,
taxable_fulfillment_due: this.taxableFulfillmentDue,
tags: parseObject(this.tags),
round_total: this.roundTotal,
subtotal: this.subtotal && parseFloat(this.subtotal),
total: this.total && parseFloat(this.total),
lines: parseObject(this.lines),
},
});
$.export("$summary", `Successfully created invoice with ID ${response.id}`);
return response;
},
};