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 @@
-
+

- +