From 6dfb294b434a5451f884470f49b5a5fb9f71f409 Mon Sep 17 00:00:00 2001 From: Ahmad Khanalizadeh Date: Thu, 13 Jul 2023 09:55:35 +0000 Subject: [PATCH] [FIX] point_of_sale: load partners when scanning barcode Before this commit, because limited partner loading is enabled by default, only a limited number of partners were loaded. If the user tries to add a partner that is not loaded in the PoS, it is not fetched from the server. To fix this, we should load the partner when their barcode is scanned. opw-3398628 closes odoo/odoo#129798 X-original-commit: 6b7e18382ec35565ed978bb0ba7f3d5fd6c5e76c Signed-off-by: Joseph Caburnay (jcb) Signed-off-by: Ahmad Khanalizadeh (khah) --- .../screens/product_screen/product_screen.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/addons/point_of_sale/static/src/app/screens/product_screen/product_screen.js b/addons/point_of_sale/static/src/app/screens/product_screen/product_screen.js index 56f55f63e66..8e4146e5d5b 100644 --- a/addons/point_of_sale/static/src/app/screens/product_screen/product_screen.js +++ b/addons/point_of_sale/static/src/app/screens/product_screen/product_screen.js @@ -183,8 +183,23 @@ export class ProductScreen extends ControlButtonsMixin(Component) { this.currentOrder.add_product(product, options); this.numberBuffer.reset(); } - _barcodePartnerAction(code) { - const partner = this.pos.db.get_partner_by_barcode(code.code); + async _getPartnerByBarcode(code) { + let partner = this.pos.db.get_partner_by_barcode(code.code); + if (!partner) { + // find the partner in the backend by the barcode + const foundPartnerIds = await this.orm.search("res.partner", [ + ["barcode", "=", code.code] + ]); + if (foundPartnerIds.length) { + await this.pos._loadPartners(foundPartnerIds); + // assume that the result is unique. + partner = this.pos.db.get_partner_by_id(foundPartnerIds[0]); + } + } + return partner; + } + async _barcodePartnerAction(code) { + const partner = await this._getPartnerByBarcode(code); if (partner) { if (this.currentOrder.get_partner() !== partner) { this.currentOrder.set_partner(partner);