You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

83 lines
3.9 KiB

odoo.define('advanced_loyalty_management.TicketScreen', function (require) {
'use strict';
const TicketScreen = require('point_of_sale.TicketScreen');
const Registries = require('point_of_sale.Registries');
const { parse } = require('web.field_utils');
const {_t} = require('web.core');
const NumberBuffer = require('point_of_sale.NumberBuffer');
const LoyaltyRefundTicketScreen = (TicketScreen) =>
class extends TicketScreen {
async _onDoRefund() {
//----points cost is stored to local storage when the parent order has reward lines
var res = super._onDoRefund()
let pointsCost = []
var refundOrder = this._state.syncedOrders.cache[this._state.ui.selectedSyncedOrderId]
var rewardLines = refundOrder._get_reward_lines()
for(var line in rewardLines ){
var dict = {}
dict[rewardLines[line].coupon_id] = rewardLines[line].points_cost
pointsCost.push(dict)
}
localStorage.setItem("pointsCost", JSON.stringify(pointsCost))
return res
}
_onUpdateSelectedOrderline({ detail }) {
//----to prevent the return of reward lines
const buffer = detail.buffer;
const order = this.getSelectedSyncedOrder();
if (!order) return NumberBuffer.reset();
let pointsCost = []
var reward_product_id = []
var refundOrder = this._state.syncedOrders.cache[this._state.ui.selectedSyncedOrderId]
var rewardLines = refundOrder._get_reward_lines()
for(var line in rewardLines ){
var dict = {}
dict[rewardLines[line].coupon_id] = rewardLines[line].points_cost
pointsCost.push(dict)
reward_product_id.push(rewardLines[line].product.id)
}
const selectedOrderlineId = this.getSelectedOrderlineId();
const orderline = order.orderlines.find((line) => line.id == selectedOrderlineId);
if (!orderline) return NumberBuffer.reset();
const toRefundDetail = this._getToRefundDetail(orderline);
// When already linked to an order, do not modify the to refund quantity.
if (toRefundDetail.destinationOrderUid) return NumberBuffer.reset();
const refundableQty = toRefundDetail.orderline.qty - toRefundDetail.orderline.refundedQty;
if (refundableQty <= 0) return NumberBuffer.reset();
if (buffer == null || buffer == '') {
toRefundDetail.qty = 0;
} else {
const quantity = Math.abs(parse.float(buffer));
if(orderline.is_reward_line == true || orderline.product.id == reward_product_id[0] -1){
if(quantity > 0){
this.showPopup('ErrorPopup', {
title: _t("REFUND NOT POSSIBLE"),
body: _t(
"You cannot refund a rewarded line",
),
});
}
}
else{
if (quantity > refundableQty) {
NumberBuffer.reset();
this.showPopup('ErrorPopup', {
title: this.env._t('Maximum Exceeded'),
body: _.str.sprintf(
this.env._t(
'The requested quantity to be refunded is higher than the ordered quantity. %s is requested while only %s can be refunded.'
),
quantity,
refundableQty
),
});
} else {
toRefundDetail.qty = quantity;
}
}
}
}
}
Registries.Component.extend(TicketScreen, LoyaltyRefundTicketScreen);
});