Browse Source

Merge pull request #1601 from akretion/10-fix-base-exception-apple-orange

[10.0][base_exception] Fix union between recordset and parent recordset in base_exception
pull/1605/merge
beau sebastien 6 years ago
committed by GitHub
parent
commit
96919d7c61
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      base_exception/__manifest__.py
  2. 13
      base_exception/models/base_exception.py

2
base_exception/__manifest__.py

@ -3,7 +3,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{'name': 'Exception Rule', {'name': 'Exception Rule',
'version': '10.0.3.0.1',
'version': '10.0.3.0.2',
'category': 'Generic Modules', 'category': 'Generic Modules',
'summary': """This module provide an abstract model to manage customizable 'summary': """This module provide an abstract model to manage customizable
exceptions to be applied on different models (sale order, invoice, ...)""", exceptions to be applied on different models (sale order, invoice, ...)""",

13
base_exception/models/base_exception.py

@ -73,6 +73,16 @@ class ExceptionRule(models.Model):
class BaseExceptionMethod(models.AbstractModel): class BaseExceptionMethod(models.AbstractModel):
_name = 'base.exception.method' _name = 'base.exception.method'
@api.multi
def _get_main_records(self):
"""
Used in case we check exception 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()
@ -98,7 +108,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