diff --git a/product.py b/product.py index 30b63016a6..60b394b89f 100644 --- a/product.py +++ b/product.py @@ -94,21 +94,27 @@ class SaleSecondaryMixin: return factor @classmethod - def validate(cls, records): - super().validate(records) - for record in records: - record.check_sale_secondary_uom_factor_and_rate() + def validate_fields(cls, records, field_names): + super().validate_fields(records, field_names) + cls.check_sale_secondary_uom_factor_and_rate(records, field_names) - def check_sale_secondary_uom_factor_and_rate(self): - factor = self.sale_secondary_uom_factor - rate = self.sale_secondary_uom_rate - if factor and rate: - if ((rate != round(1. / factor, uom_conversion_digits[1])) - and factor != round(1. / rate, uom_conversion_digits[1])): - raise UOMValidationError( - gettext('sale_secondary_unit' - '.msg_sale_secondary_uom_incompatible_factor_rate', - record=self)) + @classmethod + def check_sale_secondary_uom_factor_and_rate( + cls, records, field_names=None): + if field_names and not (field_names & { + 'sale_secondary_uom_factor', 'sale_secondary_uom_rate'}): + return + for record in records: + factor = record.sale_secondary_uom_factor + rate = record.sale_secondary_uom_rate + if factor and rate: + new_rate = round(1. / factor, uom_conversion_digits[1]) + new_factor = round(1. / rate, uom_conversion_digits[1]) + if rate != new_rate and factor != new_factor: + raise UOMValidationError( + gettext('sale_secondary_unit' + '.msg_sale_secondary_uom_incompatible_factor_rate', + record=record.rec_name)) class Template(SaleSecondaryMixin, metaclass=PoolMeta):