import loyverse from "../../loyverse.app.mjs";
import { parseAsJSON } from "../../common/utils.mjs";
export default {
key: "loyverse-create-receipt",
name: "Create Receipt",
description: "Creates a new receipt for a specific store. [See the documentation](https://developer.loyverse.com/docs/#tag/Receipts/paths/~1receipts/post)",
version: "0.0.1",
type: "action",
props: {
loyverse,
storeId: {
propDefinition: [
loyverse,
"storeId",
],
},
lineItems: {
type: "string[]",
label: "Line Items",
description: "[An array of JSON-stringified objects](https://developer.loyverse.com/docs/#tag/Receipts/paths/~1receipts/post). You can use the **Generate Receipt Items** action to generate these items.",
},
paymentTypeId: {
propDefinition: [
loyverse,
"paymentTypeId",
],
},
employeeId: {
propDefinition: [
loyverse,
"employeeId",
],
},
order: {
type: "string",
label: "Order",
description: "The order name or number associated with the receipt",
optional: true,
},
customerId: {
propDefinition: [
loyverse,
"customerId",
],
description: "Select a customer or provide a customer ID.",
},
source: {
type: "string",
label: "Source",
description: "The name of the source this receipt comes from. By default it is the name of the application that created the receipt.",
optional: true,
},
receiptDate: {
type: "string",
label: "Receipt Date",
description: "A date/time string such as `2022-03-15T18:30:00Z`. By default, this is the date/time the receipt was created.",
optional: true,
},
totalDiscounts: {
type: "string[]",
label: "Total Discounts",
description: "The list of all discounts applied in the receipt, as JSON-stringified objects. [See the documentation](https://developer.loyverse.com/docs/#tag/Receipts/paths/~1receipts/post) for the expected properties.",
optional: true,
},
note: {
type: "string",
label: "Note",
description: "The receipt's note",
optional: true,
},
},
async run({ $ }) {
const {
lineItems, totalDiscounts,
} = this;
const discounts = totalDiscounts?.map?.(parseAsJSON);
const response = await this.loyverse.createReceipt({
$,
data: {
store_id: this.storeId,
line_items: lineItems.map?.(parseAsJSON) ?? JSON.parse(lineItems),
payments: [
{
payment_type_id: this.paymentTypeId,
},
],
employee_id: this.employeeId,
order: this.order,
customer_id: this.customerId,
source: this.source,
receipt_date: this.receiptDate,
total_discounts: discounts ?? (totalDiscounts && JSON.parse(totalDiscounts)),
note: this.note,
},
});
$.export("$summary", `Successfully created receipt with number ${response.receipt_number}`);
return response;
},
};