diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index df6cd1dc8d9..9e0d49b53b8 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -372,9 +372,15 @@ class account_move_line(osv.osv): context = {} if not args: return [] - where = ' AND '.join(map(lambda x: '(abs(sum(debit-credit))'+x[1]+str(x[2])+')',args)) + + where = ' AND '.join( + '(abs(sum(debit-credit)) %s %%s)' % operator + for field, operator, value in args + ) + params = tuple(value for field, operator, value in args) + cursor.execute('SELECT id, SUM(debit-credit) FROM account_move_line \ - GROUP BY id, debit, credit having '+where) + GROUP BY id, debit, credit having '+where, params) res = cursor.fetchall() if not res: return [('id', '=', '0')] diff --git a/addons/account/report/account_journal.py b/addons/account/report/account_journal.py index 97e19be4b0c..051804bea9c 100644 --- a/addons/account/report/account_journal.py +++ b/addons/account/report/account_journal.py @@ -159,6 +159,14 @@ class journal_print(report_sxw.rml_parse, common_report_header): if self.target_move == 'posted': move_state = ['posted'] + fg = self.pool.get('account.print.journal').fields_get( + self.cr, self.uid, ['sort_selection']) + allowed = [v for v, l in fg['sort_selection']['selection']] + + assert self.sort_selection in allowed, \ + "unknown sorting directive %s expected one of %s" % ( + self.sort_selection, allowed) + self.cr.execute('SELECT l.id FROM account_move_line l, account_move am WHERE l.move_id=am.id AND am.state IN %s AND l.period_id=%s AND l.journal_id IN %s ' + self.query_get_clause + ' ORDER BY '+ self.sort_selection + ', l.move_id',(tuple(move_state), period_id, tuple(journal_id) )) ids = map(lambda x: x[0], self.cr.fetchall()) return obj_mline.browse(self.cr, self.uid, ids) diff --git a/addons/account_analytic_plans/report/crossovered_analytic.py b/addons/account_analytic_plans/report/crossovered_analytic.py index b1a8f965d6b..b572fc3e803 100644 --- a/addons/account_analytic_plans/report/crossovered_analytic.py +++ b/addons/account_analytic_plans/report/crossovered_analytic.py @@ -70,14 +70,25 @@ class crossovered_analytic(report_sxw.rml_parse): line_pool = self.pool.get('account.analytic.line') self.dict_acc_ref = {} + filters = [ + 'date >= %(date1)s', + 'date <= %(date2)s', + ] + params = { + 'date1': form['date1'], + 'date2': form['date2'] + } if form['journal_ids']: - journal = " in (" + ','.join(map(lambda x: str(x), form['journal_ids'])) + ")" + filters.append('journal_id IN %(journal_ids)s') + params['journal_ids'] = tuple(form['journal_ids']) else: - journal = 'is not null' + filters.append('journal_id IS NOT NULL') - query_general = "SELECT id FROM account_analytic_line WHERE (journal_id " + journal +") AND date>='"+ str(form['date1']) +"'"" AND date<='" + str(form['date2']) + "'" + self.cr.execute( + "SELECT id FROM account_analytic_line WHERE " + ' AND '.join(filters), + params + ) - self.cr.execute(query_general) l_ids = self.cr.fetchall() line_ids = [x[0] for x in l_ids] @@ -102,10 +113,24 @@ class crossovered_analytic(report_sxw.rml_parse): self.base_amount = 0.0 if selected_ids: - query = "SELECT SUM(aal.amount) AS amt, SUM(aal.unit_amount) AS qty FROM account_analytic_line AS aal, account_analytic_account AS aaa \ - WHERE aal.account_id = aaa.id AND aal.id IN ("+','.join(map(str,selected_ids))+") AND (aal.journal_id " + journal +") AND aal.date>='"+ str(form['date1']) +"'"" AND aal.date<='" + str(form['date2']) + "'" + params['selected_ids'] = tuple(selected_ids) + filters = [ + 'aal.account_id = aaa.id', + 'aal.id IN %(selected_ids)s', + 'aal.date >= %(date1)s', + 'aal.date <= %(date2)s', + ] + if form['journal_ids']: + filters.append('aal.journal_id in %(journal_ids)s') + else: + filters.append('aal.journal_id IS NOT NULL') - self.cr.execute(query) + self.cr.execute( + "SELECT SUM(aal.amount) AS amt, SUM(aal.unit_amount) AS qty" + " FROM account_analytic_line AS aal, account_analytic_account AS aaa" + " WHERE " + ' AND '.join(filters), + params + ) info=self.cr.dictfetchall() res['ref_qty'] = info[0]['qty'] res['ref_amt'] = info[0]['amt'] @@ -119,10 +144,20 @@ class crossovered_analytic(report_sxw.rml_parse): if not ids: ids = self.ids + filters = [ + 'aal.account_id = aaa.id', + 'aal.date >= %(date1)s', + 'aal.date <= %(date2)s', + ] + params = { + 'date1': form['date1'], + 'date2': form['date2'], + } if form['journal_ids']: - journal=" in (" + ','.join(map(lambda x: str(x), form['journal_ids'])) + ")" + filters.append('aal.journal_id IN %(journal_ids)s') + params['journal_ids'] = tuple(form['journal_ids']) else: - journal= 'is not null' + filters.append('aal.journal_id IS NOT NULL') acc_pool = self.pool.get('account.analytic.account') line_pool = self.pool.get('account.analytic.line') @@ -135,10 +170,15 @@ class crossovered_analytic(report_sxw.rml_parse): for acc_id in self.final_list: selected_ids = line_pool.search(self.cr, self.uid, [('account_id','=',acc_id), ('move_id', 'in', self.dict_acc_ref[form['ref']])]) if selected_ids: - query="SELECT aaa.code AS code, SUM(aal.amount) AS amt, SUM(aal.unit_amount) AS qty, aaa.name AS acc_name, aal.account_id AS id FROM account_analytic_line AS aal, account_analytic_account AS aaa \ - WHERE aal.account_id=aaa.id AND aal.id IN ("+','.join(map(str,selected_ids))+") AND (aal.journal_id " + journal +") AND aal.date>='"+ str(form['date1']) +"'"" AND aal.date<='" + str(form['date2']) + "'"" GROUP BY aal.account_id,aaa.name,aaa.code ORDER BY aal.account_id" + filters.append('aal.id IN %(selected_ids)s') + params['selected_ids'] = tuple(selected_ids) - self.cr.execute(query) + self.cr.execute( + "SELECT aaa.code AS code, SUM(aal.amount) AS amt, SUM(aal.unit_amount) AS qty, aaa.name AS acc_name, aal.account_id AS id" + " FROM account_analytic_line AS aal, account_analytic_account AS aaa" + " WHERE " + ' AND '.join(filters) + + " GROUP BY aal.account_id,aaa.name,aaa.code ORDER BY aal.account_id" + ) res = self.cr.dictfetchall() if res: for element in res: diff --git a/addons/l10n_fr/report/base_report.py b/addons/l10n_fr/report/base_report.py index d17bc273638..b4496125a36 100644 --- a/addons/l10n_fr/report/base_report.py +++ b/addons/l10n_fr/report/base_report.py @@ -73,30 +73,31 @@ class base_report(report_sxw.rml_parse): accounts[p[1]] = [p[0],p[2]] sum = 0.0 if fiscalyear.state != 'done' or not code.startswith('bpcheck'): - query_params = [] - query_cond = "(" - for account in accounts: - query_cond += "aa.code LIKE '" + account + "%%' OR " - query_cond = query_cond[:-4]+")" + conditions = ['(' + ' OR '.join( + 'aa.code LIKE %s' for _ in accounts + ) + ')'] + params = [account + '%' for account in accounts] - if len(definition['except']) > 0: - query_cond = query_cond+" and (" - for account in definition['except']: - query_cond += "aa.code NOT LIKE '"+account+"%%' AND " - query_cond = query_cond[:-5]+")" + for account in definition['except']: + conditions.append('aa.code NOT LIKE %s') + params.append(account + '%') - closed_cond = "" if fiscalyear.state == 'done': - closed_cond=" AND (aml.move_id NOT IN (SELECT account_move.id as move_id FROM account_move WHERE period_id = ANY(%s) AND journal_id=(SELECT res_id FROM ir_model_data WHERE name='closing_journal' AND module='l10n_fr')) OR (aa.type != 'income' AND aa.type !='expense'))" - query_params.append(list(period_ids)) + conditions.append("(aml.move_id NOT IN (SELECT account_move.id as move_id FROM account_move WHERE period_id IN %s AND journal_id=(SELECT res_id FROM ir_model_data WHERE name='closing_journal' AND module='l10n_fr')) OR (aa.type != 'income' AND aa.type !='expense'))") + params.append(tuple(period_ids)) + + conditions.append('aml.state = %s') + params.append('valid') + + conditions.append('aml.period_id IN %s') + params.append(tuple(period_ids)) query = "SELECT aa.code AS code, SUM(debit) as debit, SUM(credit) as credit " \ " FROM account_move_line aml LEFT JOIN account_account aa ON aa.id=aml.account_id "\ - " WHERE "+query_cond+closed_cond+" AND aml.state='valid' AND aml.period_id = ANY(%s) GROUP BY code" - query_params.append(list(period_ids)) - self.cr.execute(query, query_params) + " WHERE "+ ' AND '.join(conditions) + " GROUP BY code" + self.cr.execute(query, params) - lines =self.cr.dictfetchall() + lines = self.cr.dictfetchall() for line in lines: for account in accounts: if(line["code"].startswith(account)):