[MERGE] forward port branch saas-15 up to 4703d649dc
This commit is contained in:
@@ -699,6 +699,22 @@ class AccountMoveLine(models.Model):
|
||||
"""
|
||||
if not str:
|
||||
return []
|
||||
|
||||
epsilon = 0.0001
|
||||
|
||||
def _domain_range_amount(field, amount, signed=False):
|
||||
def build_for_amount(amount):
|
||||
return expression.AND([
|
||||
[(field, '>=', amount - epsilon)],
|
||||
[(field, '<=', amount + epsilon)]
|
||||
])
|
||||
|
||||
unsigned_domain = build_for_amount(amount)
|
||||
if not signed:
|
||||
return unsigned_domain
|
||||
|
||||
return expression.OR([unsigned_domain, build_for_amount(-amount)])
|
||||
|
||||
str_domain = [
|
||||
'|', ('move_id.name', 'ilike', str),
|
||||
'|', ('move_id.ref', 'ilike', str),
|
||||
@@ -710,28 +726,32 @@ class AccountMoveLine(models.Model):
|
||||
amounts_str = str.split('|')
|
||||
for amount_str in amounts_str:
|
||||
amount = amount_str[0] == '-' and float(amount_str) or float(amount_str[1:])
|
||||
amount_domain = [
|
||||
'|', ('amount_residual', '=', amount),
|
||||
'|', ('amount_residual_currency', '=', amount),
|
||||
'|', (amount_str[0] == '-' and 'credit' or 'debit', '=', float(amount_str[1:])),
|
||||
('amount_currency', '=', amount),
|
||||
]
|
||||
amount_domain = expression.OR([
|
||||
_domain_range_amount(field, amount)
|
||||
for field in ('amount_residual', 'amount_residual_currency', 'amount_currency')
|
||||
] + [_domain_range_amount(amount_str[0] == '-' and 'credit' or 'debit', float(amount_str[1:]))]
|
||||
)
|
||||
str_domain = expression.OR([str_domain, amount_domain])
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
try:
|
||||
amount = float(str)
|
||||
amount_domain = [
|
||||
'|', ('amount_residual', '=', amount),
|
||||
'|', ('amount_residual_currency', '=', amount),
|
||||
'|', ('amount_residual', '=', -amount),
|
||||
'|', ('amount_residual_currency', '=', -amount),
|
||||
'&', ('account_id.internal_type', '=', 'liquidity'),
|
||||
'|', '|', '|', ('debit', '=', amount), ('credit', '=', amount),
|
||||
('amount_currency', '=', amount),
|
||||
('amount_currency', '=', -amount),
|
||||
]
|
||||
residual_domain = expression.OR([
|
||||
_domain_range_amount(field, amount, True)
|
||||
for field in ('amount_residual', 'amount_residual_currency')
|
||||
])
|
||||
|
||||
liquidity_domain = expression.AND([
|
||||
[('account_id.internal_type', '=', 'liquidity')],
|
||||
expression.OR([
|
||||
_domain_range_amount('debit', amount),
|
||||
_domain_range_amount('credit', amount),
|
||||
_domain_range_amount('amount_currency', amount, True),
|
||||
])
|
||||
])
|
||||
|
||||
amount_domain = expression.OR([residual_domain, liquidity_domain])
|
||||
str_domain = expression.OR([str_domain, amount_domain])
|
||||
except:
|
||||
pass
|
||||
|
||||
@@ -708,7 +708,7 @@ class Lead(models.Model):
|
||||
partner_match_domain.append(('partner_id', '=', partner_id))
|
||||
partner_match_domain = ['|'] * (len(partner_match_domain) - 1) + partner_match_domain
|
||||
if not partner_match_domain:
|
||||
return []
|
||||
return self.env['crm.lead']
|
||||
domain = partner_match_domain
|
||||
if not include_lost:
|
||||
domain += ['&', ('active', '=', True), ('probability', '<', 100)]
|
||||
|
||||
@@ -413,8 +413,8 @@ class Channel(models.Model):
|
||||
AND P.partner_id IN %s
|
||||
AND channel_type LIKE 'chat'
|
||||
GROUP BY P.channel_id
|
||||
HAVING COUNT(P.partner_id) = %s
|
||||
""", (tuple(partners_to), len(partners_to),))
|
||||
HAVING array_agg(P.partner_id ORDER BY P.partner_id) = %s
|
||||
""", (tuple(partners_to), sorted(list(partners_to)),))
|
||||
result = self.env.cr.dictfetchall()
|
||||
if result:
|
||||
# get the existing channel between the given partners
|
||||
|
||||
Reference in New Issue
Block a user