############################################################################## # # OpenERP, Open Source Management Solution # Copyright (C) 2004-2009 Tiny SPRL (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # ############################################################################## import time from openerp.report import report_sxw from common_report_header import common_report_header from openerp.tools.translate import _ class report_account_common(report_sxw.rml_parse, common_report_header): def __init__(self, cr, uid, name, context=None): super(report_account_common, self).__init__(cr, uid, name, context=context) self.localcontext.update( { 'get_lines': self.get_lines, 'time': time, 'get_fiscalyear': self._get_fiscalyear, 'get_account': self._get_account, 'get_start_period': self.get_start_period, 'get_end_period': self.get_end_period, 'get_filter': self._get_filter, 'get_start_date':self._get_start_date, 'get_end_date':self._get_end_date, 'get_target_move': self._get_target_move, }) self.context = context def set_context(self, objects, data, ids, report_type=None): new_ids = ids if (data['model'] == 'ir.ui.menu'): new_ids = 'chart_account_id' in data['form'] and [data['form']['chart_account_id']] or [] objects = self.pool.get('account.account').browse(self.cr, self.uid, new_ids) return super(report_account_common, self).set_context(objects, data, new_ids, report_type=report_type) def get_lines(self, data): lines = [] account_obj = self.pool.get('account.account') currency_obj = self.pool.get('res.currency') ids2 = self.pool.get('account.financial.report')._get_children_by_order(self.cr, self.uid, [data['form']['account_report_id'][0]], context=data['form']['used_context']) for report in self.pool.get('account.financial.report').browse(self.cr, self.uid, ids2, context=data['form']['used_context']): vals = { 'name': report.name, 'balance': report.balance * report.sign or 0.0, 'type': 'report', 'level': bool(report.style_overwrite) and report.style_overwrite or report.level, 'account_type': report.type =='sum' and 'view' or False, #used to underline the financial report balances } if data['form']['debit_credit']: vals['debit'] = report.debit vals['credit'] = report.credit if data['form']['enable_filter']: vals['balance_cmp'] = self.pool.get('account.financial.report').browse(self.cr, self.uid, report.id, context=data['form']['comparison_context']).balance * report.sign or 0.0 lines.append(vals) account_ids = [] if report.display_detail == 'no_detail': #the rest of the loop is used to display the details of the financial report, so it's not needed here. continue if report.type == 'accounts' and report.account_ids: account_ids = account_obj._get_children_and_consol(self.cr, self.uid, [x.id for x in report.account_ids]) elif report.type == 'account_type' and report.account_type_ids: account_ids = account_obj.search(self.cr, self.uid, [('user_type','in', [x.id for x in report.account_type_ids])]) if account_ids: for account in account_obj.browse(self.cr, self.uid, account_ids, context=data['form']['used_context']): #if there are accounts to display, we add them to the lines with a level equals to their level in #the COA + 1 (to avoid having them with a too low level that would conflicts with the level of data #financial reports for Assets, liabilities...) if report.display_detail == 'detail_flat' and account.type == 'view': continue flag = False vals = { 'name': account.code + ' ' + account.name, 'balance': account.balance != 0 and account.balance * report.sign or account.balance, 'type': 'account', 'level': report.display_detail == 'detail_with_hierarchy' and min(account.level + 1,6) or 6, #account.level + 1 'account_type': account.type, } if data['form']['debit_credit']: vals['debit'] = account.debit vals['credit'] = account.credit if not currency_obj.is_zero(self.cr, self.uid, account.company_id.currency_id, vals['balance']): flag = True if data['form']['enable_filter']: vals['balance_cmp'] = account_obj.browse(self.cr, self.uid, account.id, context=data['form']['comparison_context']).balance * report.sign or 0.0 if not currency_obj.is_zero(self.cr, self.uid, account.company_id.currency_id, vals['balance_cmp']): flag = True if flag: lines.append(vals) return lines report_sxw.report_sxw('report.account.financial.report', 'account.financial.report', 'addons/account/report/account_financial_report.rml', parser=report_account_common, header='internal') # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: