diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py index f72e5b6bbaa..98a2c9ff21f 100644 --- a/addons/account/models/account_move.py +++ b/addons/account/models/account_move.py @@ -422,12 +422,17 @@ class AccountMoveLine(models.Model): # since postgresql doesn't implement empty list (so 'AND id in ()' is useless) return [] + assert res_type in ('partner', 'account') + assert account_type in ('payable', 'receivable', None) is_partner = res_type == 'partner' res_alias = is_partner and 'p' or 'a' - self.env.cr.execute( - """ SELECT %s account_id, account_name, account_code, max_date, to_char(last_time_entries_checked, 'YYYY-MM-DD') AS last_time_entries_checked FROM ( - SELECT %s - %s.last_time_entries_checked AS last_time_entries_checked, + + query = (""" + SELECT {0} account_id, account_name, account_code, max_date, + to_char(last_time_entries_checked, 'YYYY-MM-DD') AS last_time_entries_checked + FROM ( + SELECT {1} + {res_alias}.last_time_entries_checked AS last_time_entries_checked, a.id AS account_id, a.name AS account_name, a.code AS account_code, @@ -436,44 +441,42 @@ class AccountMoveLine(models.Model): account_move_line l RIGHT JOIN account_account a ON (a.id = l.account_id) RIGHT JOIN account_account_type at ON (at.id = a.user_type_id) - %s + {2} WHERE a.reconcile IS TRUE - %s - %s - %s + {3} + {4} + {5} AND EXISTS ( SELECT NULL FROM account_move_line l WHERE l.account_id = a.id - %s + {6} AND l.amount_residual > 0 ) AND EXISTS ( SELECT NULL FROM account_move_line l WHERE l.account_id = a.id - %s + {6} AND l.amount_residual < 0 ) - GROUP BY %s a.id, a.name, a.code, %s.last_time_entries_checked - ORDER BY %s.last_time_entries_checked + GROUP BY {7} a.id, a.name, a.code, {res_alias}.last_time_entries_checked + ORDER BY {res_alias}.last_time_entries_checked ) as s - WHERE (last_time_entries_checked IS NULL OR max_date > last_time_entries_checked) - """ % ( + WHERE (last_time_entries_checked IS NULL OR max_date > last_time_entries_checked) + """.format( is_partner and 'partner_id, partner_name,' or ' ', is_partner and 'p.id AS partner_id, p.name AS partner_name,' or ' ', - res_alias, is_partner and 'RIGHT JOIN res_partner p ON (l.partner_id = p.id)' or ' ', is_partner and ' ' or "AND at.type <> 'payable' AND at.type <> 'receivable'", - account_type and "AND at.type = '" + account_type + "'" or '', - res_ids and 'AND ' + res_alias + '.id in (' + ','.join(map(str, res_ids)) + ')' or '', - is_partner and 'AND l.partner_id = p.id' or ' ', + account_type and "AND at.type = %(account_type)s" or '', + res_ids and 'AND ' + res_alias + '.id in %(res_ids)s' or '', is_partner and 'AND l.partner_id = p.id' or ' ', is_partner and 'l.partner_id, p.id,' or ' ', - res_alias, - res_alias, + res_alias=res_alias )) + self.env.cr.execute(query, locals()) # Apply ir_rules by filtering out rows = self.env.cr.dictfetchall() @@ -498,17 +501,18 @@ class AccountMoveLine(models.Model): """ Returns two lines whose amount are opposite """ # Get pairs - partner_id_condition = partner_id and 'AND a.partner_id = %d AND b.partner_id = %d' % (partner_id, partner_id) or '' - self.env.cr.execute( - """ SELECT a.id, b.id + partner_id_condition = partner_id and 'AND a.partner_id = %(partner_id)s AND b.partner_id = %(partner_id)s' or '' + query = """ + SELECT a.id, b.id FROM account_move_line a, account_move_line b WHERE a.amount_residual = -b.amount_residual AND NOT a.reconciled AND NOT b.reconciled - AND a.account_id = %d AND b.account_id = %d - %s + AND a.account_id = %(account_id)s AND b.account_id = %(account_id)s + {partner_id_condition} ORDER BY a.date asc LIMIT 10 - """ % (account_id, account_id, partner_id_condition)) + """.format(**locals()) + self.env.cr.execute(query, locals()) pairs = self.env.cr.fetchall() # Apply ir_rules by filtering out diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py index 2b861562eeb..2c91907a043 100644 --- a/addons/account/models/partner.py +++ b/addons/account/models/partner.py @@ -380,7 +380,7 @@ class ResPartner(models.Model): GROUP BY p.last_time_entries_checked ) as s WHERE (last_time_entries_checked IS NULL OR max_date > last_time_entries_checked) - """ % (self.id,)) + """, (self.id,)) self.has_unreconciled_entries = self.env.cr.rowcount == 1 @api.multi diff --git a/addons/crm/base_partner_merge.py b/addons/crm/base_partner_merge.py index 7f958080ec1..2c203affb6b 100644 --- a/addons/crm/base_partner_merge.py +++ b/addons/crm/base_partner_merge.py @@ -766,9 +766,9 @@ class MergePartnerAutomatic(osv.TransientModel): # don't update the partners if they are more of one who have invoice cr.execute(""" SELECT * FROM res_partner as p - WHERE p.id != %s AND p.email LIKE '%%%s' AND + WHERE p.id != %s AND p.email LIKE %s AND EXISTS (SELECT * FROM account_invoice as a WHERE p.id = a.partner_id AND a.state in ('open','paid')) - """ % (id, email)) + """, (id, '%' + email)) if len(cr.fetchall()) > 1: _logger.info("%s MORE OF ONE COMPANY", email) @@ -777,13 +777,13 @@ class MergePartnerAutomatic(osv.TransientModel): # to display changed values cr.execute(""" SELECT id,email FROM res_partner - WHERE parent_id != %s AND id != %s AND email LIKE '%%%s' - """ % (id, id, email)) + WHERE parent_id != %s AND id != %s AND email LIKE %s + """, (id, id, '%' + email)) _logger.info("%r", cr.fetchall()) # upgrade cr.execute(""" UPDATE res_partner SET parent_id = %s - WHERE id != %s AND email LIKE '%%%s' - """ % (id, id, email)) + WHERE id != %s AND email LIKE %s + """, (id, id, '%' + email)) return False