addons-cm/pos_cashdro_allow_manual/static/src/js/PaymentScreen.esm.js

45 lines
1.8 KiB
JavaScript

/** @odoo-module **/
// Copyright 2026 Criptomart
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import {Component} from "point_of_sale.Registries";
import PaymentScreen from "point_of_sale.PaymentScreen";
import {useListener} from "@web/core/utils/hooks";
const CashdroAllowManualPaymentScreen = (OriginalPaymentScreen) =>
class extends OriginalPaymentScreen {
setup() {
super.setup();
useListener("cashdro-send-manual", this._cashdroSendManual);
}
/**
* Mark the Cashdro payment line as done using the amount that is already
* set on the line (entered manually via the numpad), without contacting
* the CashDro machine.
*
* Sets `cashdro_manual_done = true` on the line so the delete button
* remains visible even in `done` state, letting the cashier undo the
* operation in case of a mistake.
*
* Refuses to proceed when the amount is 0 to avoid locking the POS with
* an undeletable zero-amount payment line.
*/
async _cashdroSendManual({detail: line}) {
if (!line.get_amount()) {
this.showPopup("ErrorPopup", {
title: this.env._t("Importe no válido"),
body: this.env._t(
"Introduzca el importe en el teclado numérico antes de confirmar manualmente el pago."
),
});
return;
}
// Flag this line as manually confirmed so the template keeps
// showing its delete button even after the status is 'done'.
line.cashdro_manual_done = true;
line.set_payment_status("done");
}
};
Component.extend(PaymentScreen, CashdroAllowManualPaymentScreen);