34 lines
1.2 KiB
JavaScript
34 lines
1.2 KiB
JavaScript
import { TicketScreen } from "@point_of_sale/app/screens/ticket_screen/ticket_screen";
|
|
import { patch } from "@web/core/utils/patch";
|
|
|
|
patch(TicketScreen.prototype, {
|
|
/**
|
|
* Mark every refundable line of the selected order for a full refund and
|
|
* trigger the standard refund flow.
|
|
*
|
|
* `onDoRefund` is what the "Refund" action of the ticket screen calls: it
|
|
* builds the negative lines, links the combo children, carries over the
|
|
* fiscal position and the partner, and switches to the destination order.
|
|
*/
|
|
async onDoFullRefund() {
|
|
const order = this.getSelectedOrder();
|
|
if (!order) {
|
|
return;
|
|
}
|
|
for (const line of order.lines) {
|
|
const toRefundDetails = line
|
|
.getAllLinesInCombo()
|
|
.map((comboLine) => this.getToRefundDetail(comboLine));
|
|
for (const toRefundDetail of toRefundDetails) {
|
|
// Per line, and net of what was already refunded: the same
|
|
// guard the core applies in `_onUpdateSelectedOrderline`.
|
|
const refundableQty =
|
|
toRefundDetail.line.qty - toRefundDetail.line.refunded_qty;
|
|
if (refundableQty > 0) {
|
|
toRefundDetail.qty = refundableQty;
|
|
}
|
|
}
|
|
}
|
|
await this.onDoRefund();
|
|
},
|
|
});
|