From 800ec90de1b75eca16ddf36abbbdb069d7a5a71a Mon Sep 17 00:00:00 2001 From: Matteo Bilotta Date: Wed, 12 Dec 2018 12:44:09 +0100 Subject: [PATCH] =?UTF-8?q?[FIX]=20Fix=20the=20double=20SO=20confirmation?= =?UTF-8?q?=20due=20to=20hysterical=20clicks=20on=20the=20"Confirm"=20butt?= =?UTF-8?q?on.=20=F0=9F=A4=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +++++ sale_discount_total/__manifest__.py | 2 +- sale_discount_total/models/discount_approval.py | 17 ++++++++++++----- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 0420d9dd6..0984da891 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ +# IDEs files and dirs +# +.idea/ +.vscode/ + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/sale_discount_total/__manifest__.py b/sale_discount_total/__manifest__.py index 2a50776f9..658043682 100644 --- a/sale_discount_total/__manifest__.py +++ b/sale_discount_total/__manifest__.py @@ -22,7 +22,7 @@ { 'name': 'Sale Discount on Total Amount', - 'version': '11.0.1.0.0', + 'version': '11.0.1.0.1', 'category': 'Sales Management', 'summary': "Discount on Total in Sale and Invoice With Discount Limit and Approval", 'author': 'Cybrosys Techno Solutions', diff --git a/sale_discount_total/models/discount_approval.py b/sale_discount_total/models/discount_approval.py index bd17fc6f8..3541baeaf 100644 --- a/sale_discount_total/models/discount_approval.py +++ b/sale_discount_total/models/discount_approval.py @@ -20,10 +20,11 @@ # ################################################################################### -from odoo import api, fields, models +from odoo import _, api, fields, models +from odoo.exceptions import UserError -class sale_discount(models.Model): +class SaleDiscount(models.Model): _inherit = 'sale.order' state = fields.Selection([ @@ -37,17 +38,20 @@ class sale_discount(models.Model): @api.multi def action_confirm(self): + if self._get_forbidden_state_confirm() & set(self.mapped('state')): + raise UserError(_("It is not allowed to confirm an order in the following states: %s") + % (", ".join(self._get_forbidden_state_confirm()))) discnt = 0.0 no_line = 0.0 for order in self: - if self.company_id.so_double_validation == 'two_step': + if order.company_id.so_double_validation == 'two_step': for line in order.order_line: no_line += 1 discnt += line.discount discnt = (discnt / no_line) if order.company_id.so_double_validation_limit and discnt > order.company_id.so_double_validation_limit: order.state = 'waiting' - return True + continue order._action_confirm() if order.env['ir.config_parameter'].sudo().get_param('sale.auto_done_setting'): order.action_done() @@ -55,6 +59,9 @@ class sale_discount(models.Model): @api.multi def action_approve(self): + if self._get_forbidden_state_confirm() & set(self.mapped('state')): + raise UserError(_("It is not allowed to approve an order in the following states: %s") + % (", ".join(self._get_forbidden_state_confirm()))) self._action_confirm() if self.env['ir.config_parameter'].sudo().get_param('sale.auto_done_setting'): self.action_done() @@ -110,4 +117,4 @@ class ResDiscountSettings(models.TransientModel): def set_values(self): super(ResDiscountSettings, self).set_values() - self.so_double_validation = 'two_step' if self.so_order_approval else 'one_step' \ No newline at end of file + self.so_double_validation = 'two_step' if self.so_order_approval else 'one_step'