Browse Source

Fix union between recordset and parent recordset in base_exception

pull/1602/head
Florian da Costa 6 years ago
parent
commit
ad39e06685
  1. 2
      base_exception/__manifest__.py
  2. 13
      base_exception/models/base_exception.py

2
base_exception/__manifest__.py

@ -4,7 +4,7 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{ {
'name': 'Exception Rule', 'name': 'Exception Rule',
'version': '12.0.2.0.2',
'version': '12.0.2.0.3',
'category': 'Generic Modules', 'category': 'Generic Modules',
'summary': """ 'summary': """
This module provide an abstract model to manage customizable This module provide an abstract model to manage customizable

13
base_exception/models/base_exception.py

@ -61,6 +61,16 @@ class BaseExceptionMethod(models.AbstractModel):
_name = 'base.exception.method' _name = 'base.exception.method'
_description = 'Exception Rule Methods' _description = 'Exception Rule Methods'
@api.multi
def _get_main_records(self):
"""
Used in case we check exceptions on a record but write these
exceptions on a parent record. Typical example is with
sale.order.line. We check exceptions on some sale order lines but
write these exceptions on the sale order, so they are visible.
"""
return self
@api.multi @api.multi
def _reverse_field(self): def _reverse_field(self):
raise NotImplementedError() raise NotImplementedError()
@ -85,7 +95,8 @@ class BaseExceptionMethod(models.AbstractModel):
records_with_exception = self._detect_exceptions(rule) records_with_exception = self._detect_exceptions(rule)
reverse_field = self._reverse_field() reverse_field = self._reverse_field()
if self: if self:
commons = self & rule[reverse_field]
main_records = self._get_main_records()
commons = main_records & rule[reverse_field]
to_remove = commons - records_with_exception to_remove = commons - records_with_exception
to_add = records_with_exception - commons to_add = records_with_exception - commons
to_remove_list = [(3, x.id, _) for x in to_remove] to_remove_list = [(3, x.id, _) for x in to_remove]

Loading…
Cancel
Save