import { parseObject } from "../../common/utils.mjs";
import faktoora from "../../faktoora.app.mjs";
export default {
key: "faktoora-create-invoice",
name: "Create Invoice",
description: "Create a new ZUGFeRD/xrechnung invoice. [See the documentation](https://api.faktoora.com/api/v1/api-docs/static/index.html)",
version: "0.0.1",
type: "action",
props: {
faktoora,
format: {
type: "string",
label: "Format",
description: "The format of the invoice (ZUGFeRD/xrechnung).",
options: [
"zf:1",
"zf:2",
"xrechnung",
],
},
invoiceNumber: {
propDefinition: [
faktoora,
"invoiceNumber",
],
},
issueDate: {
type: "string",
label: "Issue Date",
description: "The issue date of the invoice (YYYYMMDD).",
},
currency: {
type: "string",
label: "Currency",
description: "The currency of the invoice.",
},
buyerName: {
type: "string",
label: "Buyer Name",
description: "The name of the buyer.",
},
buyerPostcode: {
type: "string",
label: "Buyer Postcode",
description: "Buyer location postcode.",
},
buyerStreet: {
type: "string",
label: "Buyer Street",
description: "Buyer location street.",
},
buyerCity: {
type: "string",
label: "Buyer City",
description: "Buyer location city.",
},
buyerCountry: {
type: "string",
label: "Buyer Country",
description: "Buyer location country.",
},
invoiceItems: {
type: "string[]",
label: "Invoice Items",
description: "A list of product objects. E.g. **{\"productId\": \"39887\", \"name\": \"Freezer Z7749\", \"quantity\": \"1\", \"unitCode\": \"C62\", \"price\": 100, \"taxes\": [{\"typeCode\": \"VAT\", \"categoryCode\": \"S\", \"rate\": 16}] }**. For further information about init code [click here](https://www.unece.org/fileadmin/DAM/cefact/recommendations/rec20/rec20_rev3_Annex1e.pdf). For further information about Category Code [click here](https://docs.peppol.eu/poacc/billing/3.0/codelist/UNCL5305/)",
},
additionalData: {
type: "object",
label: "Additional Data",
description: "An object to manual input other fields. Please check the fields from [the API doc > POST /invoice > Request Body](https://api.faktoora.com/api/v1/api-docs/static/index.html)",
optional: true,
},
},
async run({ $ }) {
const response = await this.faktoora.createInvoice({
$,
data: {
invoices: [
{
format: this.format,
invoiceNumber: this.invoiceNumber,
issueDate: this.issueDate,
currency: this.currency,
buyer: {
name: this.buyerName,
postcode: this.buyerPostcode,
street: this.buyerStreet,
city: this.buyerCity,
country: this.buyerCountry,
},
invoiceItems: this.invoiceItems && parseObject(this.invoiceItems)
.map((item, index) => ({
id: `${index + 1}`,
product: item,
})),
...(parseObject(this.additionalData) || {}),
},
],
},
});
$.export("$summary", `Successfully created invoice with number ${this.invoiceNumber}`);
return response;
},
};