import square from "../../square.app.mjs";
export default {
key: "square-create-invoice",
name: "Create Invoice",
description: "Creates a draft invoice for an order. You must send (publish) the invoice before Square can process it. [See the documentation](https://developer.squareup.com/reference/square/invoices-api/create-invoice).",
type: "action",
version: "0.0.4",
props: {
square,
location: {
propDefinition: [
square,
"location",
],
},
order: {
propDefinition: [
square,
"order",
(c) => ({
location: c.location,
}),
],
},
customer: {
propDefinition: [
square,
"customer",
],
},
dueDate: {
type: "string",
label: "Due Date",
description: "The due date for the payment request, in `YYYY-MM-DD` format",
},
acceptedPaymentMethods: {
type: "string[]",
label: "Accepted Payment Methods",
description: "The payment methods that customers can use to pay the invoice on the Square-hosted invoice page. This setting is independent of any automatic payment requests for the invoice.",
options: [
"card",
"square_gift_card",
"bank_account",
"buy_now_pay_later",
"cash_app_pay",
],
},
},
async run({ $ }) {
const paymentRequests = [
{
request_type: "BALANCE",
automatic_payment_source: "NONE",
due_date: this.dueDate,
},
];
const acceptedPaymentMethods = {};
this.acceptedPaymentMethods.forEach((method) => acceptedPaymentMethods[method] = true);
const response = await this.square.createInvoice({
$,
generateIdempotencyKey: true,
data: {
invoice: {
location_id: this.location,
order_id: this.order,
payment_requests: paymentRequests,
delivery_method: "EMAIL",
accepted_payment_methods: acceptedPaymentMethods,
primary_recipient: {
customer_id: this.customer,
},
},
},
});
$.export("$summary", `Successfully created invoice with ID ${response.invoice.id}`);
return response;
},
};