mirror of
https://github.com/OCA/account-reconcile.git
synced 2025-01-20 12:27:39 +02:00
59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
# Copyright 2015-2019 Camptocamp SA
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
|
|
from itertools import product
|
|
|
|
from odoo import _, models
|
|
|
|
|
|
class MassReconciledAdvancedRefDeepSearch(models.TransientModel):
|
|
|
|
_name = "mass.reconcile.advanced.ref.deep.search"
|
|
_inherit = "mass.reconcile.advanced.ref"
|
|
|
|
@staticmethod
|
|
def _compare_values(key, value, opposite_value):
|
|
"""Can be inherited to modify the equality condition
|
|
specifically according to the matcher key (maybe using
|
|
a like operator instead of equality on 'ref' as instance)
|
|
"""
|
|
# consider that empty vals are not valid matchers
|
|
# it can still be inherited for some special cases
|
|
# where it would be allowed
|
|
if not (value and opposite_value):
|
|
return False
|
|
|
|
if value == opposite_value or (key == "ref" and value in opposite_value):
|
|
return True
|
|
return False
|
|
|
|
@staticmethod
|
|
def _compare_matcher_values(key, values, opposite_values):
|
|
""" Compare every values from a matcher vs an opposite matcher
|
|
and return True if it matches
|
|
"""
|
|
for value, ovalue in product(values, opposite_values):
|
|
# we do not need to compare all values, if one matches
|
|
# we are done
|
|
if MassReconciledAdvancedRefDeepSearch._compare_values(key, value, ovalue):
|
|
return True
|
|
return False
|
|
|
|
@staticmethod
|
|
def _compare_matchers(matcher, opposite_matcher):
|
|
"""
|
|
Prepare and check the matchers to compare
|
|
"""
|
|
mkey, mvalue = matcher
|
|
omkey, omvalue = opposite_matcher
|
|
assert mkey == omkey, _(
|
|
"A matcher %s is compared with a matcher %s, the _matchers and "
|
|
"_opposite_matchers are probably wrong"
|
|
) % (mkey, omkey)
|
|
if not isinstance(mvalue, (list, tuple)):
|
|
mvalue = (mvalue,)
|
|
if not isinstance(omvalue, (list, tuple)):
|
|
omvalue = (omvalue,)
|
|
return MassReconciledAdvancedRefDeepSearch._compare_matcher_values(
|
|
mkey, mvalue, omvalue
|
|
)
|