diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index a85bfd00316..42efd14aa97 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -36,12 +36,18 @@ class account_move_line(osv.osv): fiscalperiod_obj = self.pool.get('account.period') fiscalyear_ids = [] fiscalperiod_ids = [] - if not context.get('fiscalyear', False) and not context.get('empty_fy_allow', False): + 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): fiscalyear_ids = fiscalyear_obj.search(cr, uid, [('state', '=', 'draft')]) - elif context.get('empty_fy_allow', False): - fiscalyear_ids = context['fiscalyear'] else: - fiscalyear_ids = [context['fiscalyear']] + if initial_bal: + fiscalyear_date_start = fiscalyear_obj.read(cr, uid, context['fiscalyear'], ['date_start'])['date_start'] + fiscalyear_ids = fiscalyear_obj.search(cr, uid, [('date_stop', '<', fiscalyear_date_start), ('state', '=', 'draft')], context=context) + else: + fiscalyear_ids = [context['fiscalyear']] fiscalyear_clause = (','.join([str(x) for x in fiscalyear_ids])) or '0' state = context.get('state',False) @@ -50,12 +56,23 @@ class account_move_line(osv.osv): where_move_lines_by_date = '' if context.get('date_from', False) and context.get('date_to', False): - 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']+"')" + if initital_bal: + where_move_lines_by_date = " AND " +obj+".move_id in ( select id from account_move where date < '"+context['date_from']+"')" + 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']+"')" 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('periof_from', False) and not context.get('periods', False): + if initial_bal: + period_company_id = period_obj.browse(cr, uid, data['form']['period_from'], context=context).company_id.id + first_period = self.pool.get('account.period').search(cr, uid, [('company_id', '=', period_company_id)], order='date_start', limit=1)[0] + context['periods'] = period_obj.build_ctx_periods(cr, uid, first_period, data['form']['period_from']) + else: + context['periods'] = period_obj.build_ctx_periods(cr, uid, data['form']['period_from'], data['form']['period_to']) + if context.get('periods', False): 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) @@ -69,6 +86,8 @@ class account_move_line(osv.osv): child_ids = self.pool.get('account.account')._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 += company_clause + if context.get('period_manner','') == 'created': #the query have to be build with no reference to periods but thanks to the creation date if context.get('periods',False): diff --git a/addons/account/report/account_general_ledger.py b/addons/account/report/account_general_ledger.py index e1d14ba8789..053d5f23e09 100644 --- a/addons/account/report/account_general_ledger.py +++ b/addons/account/report/account_general_ledger.py @@ -41,7 +41,9 @@ class general_ledger(rml_parse.rml_parse, common_report_header): obj_move = self.pool.get('account.move.line') self.sortby = data['form'].get('sortby', 'sort_date') self.query = obj_move._query_get(self.cr, self.uid, obj='l', context=data['form'].get('used_context',{})) - self.init_query = obj_move._query_get(self.cr, self.uid, obj='l', context=data['form'].get('used_context_initial_bal', {})) + ctx2 = data['form'].get('used_context',{}).copy() + ctx2.update({'initial_bal': True}) + self.init_query = obj_move._query_get(self.cr, self.uid, obj='l', context=ctx2) self.init_balance = data['form']['initial_balance'] self.display_account = data['form']['display_account'] self.target_move = data['form'].get('target_move', 'all') diff --git a/addons/account/wizard/account_report_common.py b/addons/account/wizard/account_report_common.py index ff15585e655..14efbfcf1e3 100644 --- a/addons/account/wizard/account_report_common.py +++ b/addons/account/wizard/account_report_common.py @@ -112,29 +112,16 @@ class account_common_report(osv.osv_memory): result['fiscalyear'] = 'fiscalyear_id' in data['form'] and data['form']['fiscalyear_id'] or False result['journal_ids'] = 'journal_ids' in data['form'] and data['form']['journal_ids'] or False result['chart_account_id'] = 'chart_account_id' in data['form'] and data['form']['chart_account_id'] or False - result_initial_bal = result.copy() if data['form']['filter'] == 'filter_date': result['date_from'] = data['form']['date_from'] result['date_to'] = data['form']['date_to'] - result_initial_bal['date_from'] = '0001-01-01' - result_initial_bal['date_to'] = (datetime.datetime.strptime(data['form']['date_from'], "%Y-%m-%d") + timedelta(days=-1)).strftime('%Y-%m-%d') elif data['form']['filter'] == 'filter_period': if not data['form']['period_from'] or not data['form']['period_to']: raise osv.except_osv(_('Error'),_('Select a starting and an ending period')) - company_id = period_obj.browse(cr, uid, data['form']['period_from'], context=context).company_id.id result['periods'] = period_obj.build_ctx_periods(cr, uid, data['form']['period_from'], data['form']['period_to']) - first_period = self.pool.get('account.period').search(cr, uid, [('company_id', '=', company_id)], order='date_start', limit=1)[0] - result_initial_bal['periods'] = period_obj.build_ctx_periods(cr, uid, first_period, data['form']['period_from']) - else: - if data['form']['fiscalyear_id']: - fiscal_date_start = fiscal_obj.browse(cr, uid, [data['form']['fiscalyear_id']], context=context)[0].date_start - result_initial_bal['empty_fy_allow'] = True #Improve me => there should be something generic in account.move.line -> query get - result_initial_bal['fiscalyear'] = fiscal_obj.search(cr, uid, [('date_stop', '<', fiscal_date_start), ('state', '=', 'draft')], context=context) - result_initial_bal['date_from'] = '0001-01-01' - result_initial_bal['date_to'] = (datetime.datetime.strptime(fiscal_date_start, "%Y-%m-%d") + timedelta(days=-1)).strftime('%Y-%m-%d') - return result, result_initial_bal + return result - def _print_report(self, cr, uid, ids, data, query_line, context=None): + def _print_report(self, cr, uid, ids, data, context=None): raise (_('Error'), _('not implemented')) def check_report(self, cr, uid, ids, context=None): @@ -145,12 +132,10 @@ class account_common_report(osv.osv_memory): data['ids'] = context.get('active_ids', []) data['model'] = context.get('active_model', 'ir.ui.menu') data['form'] = self.read(cr, uid, ids, ['date_from', 'date_to', 'fiscalyear_id', 'journal_ids', 'period_from', 'period_to', 'filter', 'chart_account_id'])[0] - used_context, used_context_initial_bal = self._build_contexts(cr, uid, ids, data, context=context) - query_line = obj_move._query_get(cr, uid, obj='l', context=used_context) + used_context = self._build_contexts(cr, uid, ids, data, context=context) data['form']['periods'] = used_context.get('periods', False) and used_context['periods'] or [] data['form']['used_context'] = used_context - data['form']['used_context_initial_bal'] = used_context_initial_bal - return self._print_report(cr, uid, ids, data, query_line, context=context) + return self._print_report(cr, uid, ids, data, context=context) account_common_report() diff --git a/addons/account/wizard/account_report_common_account.py b/addons/account/wizard/account_report_common_account.py index 4f84d8f3264..4ed71ec9389 100644 --- a/addons/account/wizard/account_report_common_account.py +++ b/addons/account/wizard/account_report_common_account.py @@ -35,7 +35,7 @@ class account_common_account_report(osv.osv_memory): 'display_account': 'bal_all', } - def pre_print_report(self, cr, uid, ids, data, query_line, context=None): + def pre_print_report(self, cr, uid, ids, data, context=None): if context is None: context = {} data['form'].update(self.read(cr, uid, ids, ['display_account'])[0]) @@ -43,4 +43,4 @@ class account_common_account_report(osv.osv_memory): account_common_account_report() -#vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file +#vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_report_general_ledger.py b/addons/account/wizard/account_report_general_ledger.py index ada80db1762..37ac27bc2ec 100644 --- a/addons/account/wizard/account_report_general_ledger.py +++ b/addons/account/wizard/account_report_general_ledger.py @@ -49,10 +49,10 @@ class account_report_general_ledger(osv.osv_memory): res['value'] = {'initial_balance': False} return res - def _print_report(self, cr, uid, ids, data, query_line, context=None): + def _print_report(self, cr, uid, ids, data, context=None): if context is None: context = {} - data = self.pre_print_report(cr, uid, ids, data, query_line, context=context) + data = self.pre_print_report(cr, uid, ids, data, context=context) data['form'].update(self.read(cr, uid, ids, ['landscape', 'initial_balance', 'amount_currency', 'sortby', 'target_move'])[0]) if not data['form']['fiscalyear_id']:# GTK client problem onchange does not consider in save record data['form'].update({'initial_balance': False}) @@ -62,4 +62,4 @@ class account_report_general_ledger(osv.osv_memory): account_report_general_ledger() -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: