|
@ -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] |
|
|