From 43ccf2e12fde8d0dfbdd00e372dae5f5de4d0937 Mon Sep 17 00:00:00 2001 From: "Jerome (jev)" Date: Wed, 20 Oct 2021 14:53:16 +0000 Subject: [PATCH] [FIX] point_of_sale: Show warning when pricelist company missmatches This commit ensure the pricelists are properly configured before launching a pos session. Steps to reproduce: - Have a V13 with point_of_sale - Have minimum 2 companies A & B - Select both companies in the company selector - Go to Settings / General Settings - Point of Sale - Check Pricelists - Go to Point of Sale - Open a pos.config PC - Set a Pricelist PL as Default Pricelist - Go to Point of Sale / Products / Pricelists - Open PL - Set a company (must be different than PC) - Go to Point of Sale - Click "New session" on PC --> Traceback In V13, the traceback shows as "Traceback not available" As from V14, the traceback is shown properly A variant would be to start the session before changing the pricelist company then click on "Resume" on PC closes odoo/odoo#78767 X-original-commit: 86381c60214d210a42f736261a54e32042eedaba Signed-off-by: pimodoo --- addons/point_of_sale/models/pos_config.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/addons/point_of_sale/models/pos_config.py b/addons/point_of_sale/models/pos_config.py index 7863ebf8074..5547c21ebee 100644 --- a/addons/point_of_sale/models/pos_config.py +++ b/addons/point_of_sale/models/pos_config.py @@ -339,6 +339,14 @@ class PosConfig(models.Model): _("You must have at least one payment method configured to launch a session.") ) + @api.constrains('pricelist_id', 'available_pricelist_ids') + def _check_pricelists(self): + self._check_companies() + self = self.sudo() + if self.pricelist_id.company_id and self.pricelist_id.company_id != self.company_id: + raise ValidationError( + _("The default pricelist must belong to no company or the company of the point of sale.")) + @api.constrains('company_id', 'available_pricelist_ids') def _check_companies(self): for config in self: @@ -558,6 +566,7 @@ class PosConfig(models.Model): """ self.ensure_one() if not self.current_session_id: + self._check_pricelists() self._check_company_journal() self._check_company_invoice_journal() self._check_company_payment() @@ -579,6 +588,7 @@ class PosConfig(models.Model): return self._open_session(self.current_session_id.id) def _open_session(self, session_id): + self._check_pricelists() # The pricelist company might have changed after the first opening of the session return { 'name': _('Session'), 'view_mode': 'form,tree',