[FIX] account: prevent crashes when mixing types in context parameters
This commit is contained in:
parent
8d745f9f50
commit
96402a8f3a
|
@ -42,68 +42,77 @@ class account_move_line(osv.osv):
|
|||
context = dict(context or {})
|
||||
initial_bal = context.get('initial_bal', False)
|
||||
company_clause = " "
|
||||
if context.get('company_id', False):
|
||||
company_clause = " AND " +obj+".company_id = %s" % context.get('company_id', False)
|
||||
if not context.get('fiscalyear', False):
|
||||
if context.get('all_fiscalyear', False):
|
||||
query = ''
|
||||
query_params = {}
|
||||
if context.get('company_id'):
|
||||
company_clause = " AND " +obj+".company_id = %(company_id)s"
|
||||
query_params['company_id'] = context['company_id']
|
||||
if not context.get('fiscalyear'):
|
||||
if context.get('all_fiscalyear'):
|
||||
#this option is needed by the aged balance report because otherwise, if we search only the draft ones, an open invoice of a closed fiscalyear won't be displayed
|
||||
fiscalyear_ids = fiscalyear_obj.search(cr, uid, [])
|
||||
else:
|
||||
fiscalyear_ids = fiscalyear_obj.search(cr, uid, [('state', '=', 'draft')])
|
||||
else:
|
||||
#for initial balance as well as for normal query, we check only the selected FY because the best practice is to generate the FY opening entries
|
||||
fiscalyear_ids = [context['fiscalyear']]
|
||||
fiscalyear_ids = context['fiscalyear']
|
||||
if isinstance(context['fiscalyear'], (int, long)):
|
||||
fiscalyear_ids = [fiscalyear_ids]
|
||||
|
||||
fiscalyear_clause = (','.join([str(x) for x in fiscalyear_ids])) or '0'
|
||||
query_params['fiscalyear_ids'] = tuple(fiscalyear_ids) or (0,)
|
||||
state = context.get('state', False)
|
||||
where_move_state = ''
|
||||
where_move_lines_by_date = ''
|
||||
|
||||
if context.get('date_from', False) and context.get('date_to', False):
|
||||
if context.get('date_from') and context.get('date_to'):
|
||||
query_params['date_from'] = context['date_from']
|
||||
query_params['date_to'] = context['date_to']
|
||||
if initial_bal:
|
||||
where_move_lines_by_date = " AND " +obj+".move_id IN (SELECT id FROM account_move WHERE date < '" +context['date_from']+"')"
|
||||
where_move_lines_by_date = " AND " +obj+".move_id IN (SELECT id FROM account_move WHERE date < %(date_from)s)"
|
||||
else:
|
||||
where_move_lines_by_date = " AND " +obj+".move_id IN (SELECT id FROM account_move WHERE date >= '" +context['date_from']+"' AND date <= '"+context['date_to']+"')"
|
||||
where_move_lines_by_date = " AND " +obj+".move_id IN (SELECT id FROM account_move WHERE date >= %(date_from)s AND date <= %(date_to)s)"
|
||||
|
||||
if state:
|
||||
if state.lower() not in ['all']:
|
||||
where_move_state= " AND "+obj+".move_id IN (SELECT id FROM account_move WHERE account_move.state = '"+state+"')"
|
||||
if context.get('period_from', False) and context.get('period_to', False) and not context.get('periods', False):
|
||||
query_params['state'] = state
|
||||
where_move_state= " AND "+obj+".move_id IN (SELECT id FROM account_move WHERE account_move.state = %(state)s)"
|
||||
if context.get('period_from') and context.get('period_to') and not context.get('periods'):
|
||||
if initial_bal:
|
||||
period_company_id = fiscalperiod_obj.browse(cr, uid, context['period_from'], context=context).company_id.id
|
||||
first_period = fiscalperiod_obj.search(cr, uid, [('company_id', '=', period_company_id)], order='date_start', limit=1)[0]
|
||||
context['periods'] = fiscalperiod_obj.build_ctx_periods(cr, uid, first_period, context['period_from'])
|
||||
else:
|
||||
context['periods'] = fiscalperiod_obj.build_ctx_periods(cr, uid, context['period_from'], context['period_to'])
|
||||
if context.get('periods', False):
|
||||
if context.get('periods'):
|
||||
query_params['period_ids'] = tuple(context['periods'])
|
||||
if initial_bal:
|
||||
query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN (%s)) %s %s" % (fiscalyear_clause, where_move_state, where_move_lines_by_date)
|
||||
query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN %(fiscalyear_ids)s)" + where_move_state + where_move_lines_by_date
|
||||
period_ids = fiscalperiod_obj.search(cr, uid, [('id', 'in', context['periods'])], order='date_start', limit=1)
|
||||
if period_ids and period_ids[0]:
|
||||
first_period = fiscalperiod_obj.browse(cr, uid, period_ids[0], context=context)
|
||||
ids = ','.join([str(x) for x in context['periods']])
|
||||
query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN (%s) AND date_start <= '%s' AND id NOT IN (%s)) %s %s" % (fiscalyear_clause, first_period.date_start, ids, where_move_state, where_move_lines_by_date)
|
||||
query_params['date_start'] = first_period.date_start
|
||||
query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN %(fiscalyear_ids)s AND date_start <= %(date_start)s AND id NOT IN %(period_ids)s)" + where_move_state + where_move_lines_by_date
|
||||
else:
|
||||
ids = ','.join([str(x) for x in context['periods']])
|
||||
query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN (%s) AND id IN (%s)) %s %s" % (fiscalyear_clause, ids, where_move_state, where_move_lines_by_date)
|
||||
query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN %(fiscalyear_ids)s AND id IN %(period_ids)s)" + where_move_state + where_move_lines_by_date
|
||||
else:
|
||||
query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN (%s)) %s %s" % (fiscalyear_clause, where_move_state, where_move_lines_by_date)
|
||||
query = obj+".state <> 'draft' AND "+obj+".period_id IN (SELECT id FROM account_period WHERE fiscalyear_id IN %(fiscalyear_ids)s)" + where_move_state + where_move_lines_by_date
|
||||
|
||||
if initial_bal and not context.get('periods', False) and not where_move_lines_by_date:
|
||||
if initial_bal and not context.get('periods') and not where_move_lines_by_date:
|
||||
#we didn't pass any filter in the context, and the initial balance can't be computed using only the fiscalyear otherwise entries will be summed twice
|
||||
#so we have to invalidate this query
|
||||
raise osv.except_osv(_('Warning!'),_("You have not supplied enough arguments to compute the initial balance, please select a period and a journal in the context."))
|
||||
|
||||
if context.get('journal_ids'):
|
||||
query_params['journal_ids'] = tuple(context['journal_ids'])
|
||||
query += ' AND '+obj+'.journal_id IN %(journal_ids)s'
|
||||
|
||||
if context.get('journal_ids', False):
|
||||
query += ' AND '+obj+'.journal_id IN (%s)' % ','.join(map(str, context['journal_ids']))
|
||||
|
||||
if context.get('chart_account_id', False):
|
||||
if context.get('chart_account_id'):
|
||||
child_ids = account_obj._get_children_and_consol(cr, uid, [context['chart_account_id']], context=context)
|
||||
query += ' AND '+obj+'.account_id IN (%s)' % ','.join(map(str, child_ids))
|
||||
query_params['child_ids'] = tuple(child_ids)
|
||||
query += ' AND '+obj+'.account_id IN %(child_ids)s'
|
||||
|
||||
query += company_clause
|
||||
return query
|
||||
return cr.mogrify(query, query_params)
|
||||
|
||||
def _amount_residual(self, cr, uid, ids, field_names, args, context=None):
|
||||
"""
|
||||
|
|
|
@ -116,7 +116,7 @@ class account_fiscalyear_close(osv.osv_memory):
|
|||
|
||||
cr.execute("SELECT id FROM account_fiscalyear WHERE date_stop < %s", (str(new_fyear.date_start),))
|
||||
result = cr.dictfetchall()
|
||||
fy_ids = ','.join([str(x['id']) for x in result])
|
||||
fy_ids = [x['id'] for x in result]
|
||||
query_line = obj_acc_move_line._query_get(cr, uid,
|
||||
obj='account_move_line', context={'fiscalyear': fy_ids})
|
||||
#create the opening move
|
||||
|
|
Loading…
Reference in New Issue