diff --git a/addons/loyalty/models/loyalty_card.py b/addons/loyalty/models/loyalty_card.py
index 16c29a0f658..1c7fd86810e 100644
--- a/addons/loyalty/models/loyalty_card.py
+++ b/addons/loyalty/models/loyalty_card.py
@@ -69,6 +69,9 @@ class LoyaltyCard(models.Model):
self.ensure_one()
return None
+ def _has_source_order(self):
+ return False
+
def action_coupon_send(self):
""" Open a window to compose an email, with the default template returned by `_get_default_template`
message loaded by default
diff --git a/addons/point_of_sale/static/src/js/Chrome.js b/addons/point_of_sale/static/src/js/Chrome.js
index 36a67711cf9..ff7d3056997 100644
--- a/addons/point_of_sale/static/src/js/Chrome.js
+++ b/addons/point_of_sale/static/src/js/Chrome.js
@@ -88,7 +88,8 @@ odoo.define('point_of_sale.Chrome', function(require) {
});
onError((error) => {
- console.error(error);
+ // error is an OwlError object.
+ console.error(error.cause);
});
this.props.setupIsDone(this);
diff --git a/addons/point_of_sale/static/src/js/Popups/TextInputPopup.js b/addons/point_of_sale/static/src/js/Popups/TextInputPopup.js
index aee6ea77394..f6c9d28f819 100644
--- a/addons/point_of_sale/static/src/js/Popups/TextInputPopup.js
+++ b/addons/point_of_sale/static/src/js/Popups/TextInputPopup.js
@@ -29,6 +29,7 @@ odoo.define('point_of_sale.TextInputPopup', function(require) {
title: '',
body: '',
startingValue: '',
+ placeholder: '',
};
Registries.Component.add(TextInputPopup);
diff --git a/addons/point_of_sale/static/src/js/Screens/PartnerListScreen/PartnerListScreen.js b/addons/point_of_sale/static/src/js/Screens/PartnerListScreen/PartnerListScreen.js
index 2ee190afd3c..dd16a666d81 100644
--- a/addons/point_of_sale/static/src/js/Screens/PartnerListScreen/PartnerListScreen.js
+++ b/addons/point_of_sale/static/src/js/Screens/PartnerListScreen/PartnerListScreen.js
@@ -98,7 +98,7 @@ odoo.define('point_of_sale.PartnerListScreen', function(require) {
return res
}
get isBalanceDisplayed() {
- return this.env.pos.config.module_pos_loyalty;
+ return false;
}
get partnerLink() {
return `/web#model=res.partner&id=${this.state.editModeProps.partner.id}`;
@@ -176,7 +176,7 @@ odoo.define('point_of_sale.PartnerListScreen', function(require) {
}
async searchPartner() {
let result = await this.getNewPartners();
- this.env.pos.db.add_partners(result);
+ this.env.pos.addPartners(result);
if (!this.env.pos.isEveryPartnerLoaded) await this.env.pos.updateIsEveryPartnerLoaded();
this.render(true);
return result;
diff --git a/addons/point_of_sale/static/src/js/Screens/TicketScreen/TicketScreen.js b/addons/point_of_sale/static/src/js/Screens/TicketScreen/TicketScreen.js
index 0f89df82efc..c1ef0c25d3d 100644
--- a/addons/point_of_sale/static/src/js/Screens/TicketScreen/TicketScreen.js
+++ b/addons/point_of_sale/static/src/js/Screens/TicketScreen/TicketScreen.js
@@ -190,15 +190,19 @@ odoo.define('point_of_sale.TicketScreen', function (require) {
}
async _onDoRefund() {
const order = this.getSelectedSyncedOrder();
+
+ if (this._doesOrderHaveSoleItem(order)) {
+ if (!this._prepareAutoRefundOnOrder(order)) {
+ // Don't proceed on refund if preparation returned false.
+ return;
+ }
+ }
+
if (!order) {
this._state.ui.highlightHeaderNote = !this._state.ui.highlightHeaderNote;
return;
}
- if (this._doesOrderHaveSoleItem(order)) {
- this._prepareAutoRefundOnOrder(order);
- }
-
const partner = order.get_partner();
const allToRefundDetails = this._getRefundableDetails(partner);
@@ -415,13 +419,14 @@ odoo.define('point_of_sale.TicketScreen', function (require) {
_prepareAutoRefundOnOrder(order) {
const selectedOrderlineId = this.getSelectedOrderlineId();
const orderline = order.orderlines.find((line) => line.id == selectedOrderlineId);
- if (!orderline) return;
+ if (!orderline) return false;
const toRefundDetail = this._getToRefundDetail(orderline);
const refundableQty = orderline.get_quantity() - orderline.refunded_qty;
if (this.env.pos.isProductQtyZero(refundableQty - 1)) {
toRefundDetail.qty = 1;
}
+ return true;
}
/**
* Returns the corresponding toRefundDetail of the given orderline.
diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js
index a1cf0709091..bc1c11f4e16 100644
--- a/addons/point_of_sale/static/src/js/models.js
+++ b/addons/point_of_sale/static/src/js/models.js
@@ -193,7 +193,7 @@ class PosGlobalState extends PosModel {
this._loadPoSConfig();
this.bills = loadedData['pos.bill'];
this.partners = loadedData['res.partner'];
- this._loadResPartner();
+ this.addPartners(this.partners);
this.picking_type = loadedData['stock.picking.type'];
this.user = loadedData['res.users'];
this.pricelists = loadedData['product.pricelist'];
@@ -222,8 +222,8 @@ class PosGlobalState extends PosModel {
_loadPoSConfig() {
this.db.set_uuid(this.config.uuid);
}
- _loadResPartner() {
- this.db.add_partners(this.partners);
+ addPartners(partners) {
+ return this.db.add_partners(partners);
}
_assignApplicableItems(pricelist, correspondingProduct, pricelistItem) {
if (!(pricelist.id in correspondingProduct.applicablePricelistItems)) {
@@ -343,7 +343,7 @@ class PosGlobalState extends PosModel {
shadow: true,
})
.then(partners => {
- if (this.db.add_partners(partners)) { // check if the partners we got were real updates
+ if (this.addPartners(partners)) { // check if the partners we got were real updates
resolve();
} else {
reject('Failed in updating partners.');
@@ -492,7 +492,7 @@ class PosGlobalState extends PosModel {
timeout: 3000,
shadow: true,
});
- this.env.pos.db.add_partners(fetchedPartners);
+ this.addPartners(fetchedPartners);
}
}
async _loadMissingPartners(orders) {
@@ -540,7 +540,7 @@ class PosGlobalState extends PosModel {
],
context: this.env.session.user_context,
}, { shadow: true });
- this.db.add_partners(partners);
+ this.addPartners(partners);
i += 1;
} while(partners.length);
}
diff --git a/addons/point_of_sale/static/src/xml/Popups/TextInputPopup.xml b/addons/point_of_sale/static/src/xml/Popups/TextInputPopup.xml
index de38d55d5ba..821957e15dc 100644
--- a/addons/point_of_sale/static/src/xml/Popups/TextInputPopup.xml
+++ b/addons/point_of_sale/static/src/xml/Popups/TextInputPopup.xml
@@ -6,11 +6,11 @@