From ebac256e177e64c338179d6bba0e3a0fc9a1639f Mon Sep 17 00:00:00 2001 From: Ahmed Aly Date: Thu, 19 Apr 2018 16:50:55 +0200 Subject: [PATCH] =?UTF-8?q?Feedback=201648:=20=C3=84ndern=20des=20Rabatt?= =?UTF-8?q?=20in=20ATOC18-000010?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ext/custom-addons/dp_custom/models/sale.py | 24 +++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/ext/custom-addons/dp_custom/models/sale.py b/ext/custom-addons/dp_custom/models/sale.py index 1e139348..1cf0e533 100644 --- a/ext/custom-addons/dp_custom/models/sale.py +++ b/ext/custom-addons/dp_custom/models/sale.py @@ -25,6 +25,7 @@ from odoo import api, fields, models, _ from odoo.tools import float_is_zero from odoo.exceptions import ValidationError, UserError from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT +from odoo.tools import float_compare class SaleOrder(models.Model): @@ -325,7 +326,7 @@ class SaleOrder(models.Model): vals['origin'] = "siehe Detail" if order.client_order_ref and (order.client_order_ref == "siehe Detail" or ( order.client_order_ref not in invoices[group_key].name.split( - ', ') and order.client_order_ref != invoices[group_key].name)): + ', ') and order.client_order_ref != invoices[group_key].name)): vals['name'] = "siehe Detail" invoices[group_key].write(vals) if line.qty_to_invoice > 0: @@ -419,11 +420,28 @@ class SaleOrderLine(models.Model): elif vals.get('intrastat_id', False) and not lot_id: raise UserError(_('Der Intrastrat Code kann nur gesetzt werden wenn ein Lot angegeben wurde.')) - if record.from_designbox and set(vals.keys()).intersection( - ['product_uom_qty', 'product_uom', 'price_unit']): + not_allowed_designbox_keys = ['product_uom_qty', 'product_uom', 'price_unit'] + if not self.check_allowed_vals_from_designbox(not_allowed_designbox_keys, vals): raise ValidationError(_("Menge und Preis können von Produkten aus der Designbox nicht geändert werden")) return super(SaleOrderLine, self).write(vals) + @api.multi + def check_allowed_vals_from_designbox(self, not_allowed_designbox_keys, vals): + self.ensure_one() + allowed_write = True + precision_digits = self.env['decimal.precision'].precision_get('Product Price') + if self.from_designbox and set(vals.keys()).intersection(not_allowed_designbox_keys): + for val_key in not_allowed_designbox_keys: + if val_key in list(vals.keys()) and type(self.__getattribute__(val_key)) is float: + if float_compare(self.__getattribute__(val_key), vals[val_key], + precision_digits=precision_digits) != 0: + allowed_write = False + break + elif val_key in list(vals.keys()): + allowed_write = False + break + return allowed_write + @api.model def correct_values(self, vals): if vals.get('product_id', False):