[IMP] account: improved join

Joining on a case is far to be optimal. doing 3 left joins and a coalesce is faster.
partner_id is a required field in res.partner.bank, but some migrated database have
records in res.partner.bank model without id. To keep existing behaviour, the third
join (the one on the name) is kept for backward compatibility.

closes odoo/odoo#29276
This commit is contained in:
Nicolas Seinlet
2018-12-05 12:41:32 +00:00
parent 937d870ffc
commit 59c2559e97
+4 -10
View File
@@ -82,18 +82,12 @@ class AccountReconciliation(models.AbstractModel):
query = '''
SELECT
st_line.id AS id,
partner.id AS partner_id
COALESCE(p1.id,p2.id,p3.id) AS partner_id
FROM account_bank_statement_line st_line
LEFT JOIN res_partner_bank bank ON bank.id = st_line.bank_account_id OR bank.acc_number = st_line.account_number
LEFT JOIN res_partner partner ON (
CASE WHEN st_line.partner_id IS NOT NULL THEN
partner.id = st_line.partner_id
WHEN bank.partner_id IS NOT NULL THEN
partner.id = bank.partner_id
ELSE
partner.name ILIKE st_line.partner_name
END
)
LEFT JOIN res_partner p1 ON st_line.partner_id=p1.id
LEFT JOIN res_partner p2 ON bank.partner_id=p2.id
LEFT JOIN res_partner p3 ON p3.name ILIKE st_line.partner_name
WHERE st_line.id IN %s
'''
params = [tuple(st_lines.ids)]