[FIX] account, crm, l10n_fr: avoid exceptions when processing parameters

This commit is contained in:
Olivier Dony 2015-11-03 21:38:53 +01:00
parent 881a46a7ce
commit 2ae6481233
5 changed files with 92 additions and 37 deletions

View File

@ -371,9 +371,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')]

View File

@ -163,6 +163,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)

View File

@ -71,14 +71,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]
@ -103,10 +114,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']
@ -120,10 +145,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')
@ -136,10 +171,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:

View File

@ -765,9 +765,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)
@ -776,13 +776,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

View File

@ -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)):