Browse Source

[ADD] migration of account financial reports to version 6.0

6.0
Miguel Delgado 13 years ago
commit
6d43323878
  1. 29
      __init__.py
  2. 44
      __openerp__.py
  3. 1120
      i18n/account_financial_report.pot
  4. 1154
      i18n/ca.po
  5. 1139
      i18n/ca_ES.po
  6. 1154
      i18n/es.po
  7. 1132
      i18n/es_ES.po
  8. 1149
      i18n/pl.po
  9. 30
      report/__init__.py
  10. 285
      report/account_balance.py
  11. 257
      report/account_balance_2_cols.py
  12. 339
      report/account_balance_4_cols.py
  13. 33
      report/account_report_report.xml
  14. 122
      report/balance_full.rml
  15. 132
      report/balance_full_2_cols.rml
  16. 148
      report/balance_full_4_cols.rml
  17. 32
      wizard/__init__.py
  18. 214
      wizard/account_report_wizard.xml
  19. 118
      wizard/wizard_account_balance_2_report.py
  20. 89
      wizard/wizard_account_balance_4_report.py
  21. 118
      wizard/wizard_account_balance_report.py
  22. 36
      wizard/wizard_report_report.xml

29
__init__.py

@ -0,0 +1,29 @@
# -*- encoding: utf-8 -*-
###########################################################################
# Module Writen to OpenERP, Open Source Management Solution
# Copyright (C) OpenERP Venezuela (<http://openerp.com.ve>).
# All Rights Reserved
###############Credits######################################################
# Coded by: Humberto Arocha humberto@openerp.com.ve
# Angelica Barrios angelicaisabelb@gmail.com
# Jordi Esteve <jesteve@zikzakmedia.com>
# Planified by: Humberto Arocha
# Finance by: LUBCAN COL S.A.S http://www.lubcancol.com
# Audited by: Humberto Arocha humberto@openerp.com.ve
#############################################################################
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##############################################################################
import report
import wizard

44
__openerp__.py

@ -0,0 +1,44 @@
# -*- encoding: utf-8 -*-
###########################################################################
# Module Writen to OpenERP, Open Source Management Solution
# Copyright (C) OpenERP Venezuela (<http://openerp.com.ve>).
# All Rights Reserved
###############Credits######################################################
# Coded by: Humberto Arocha humberto@openerp.com.ve
# Angelica Barrios angelicaisabelb@gmail.com
# Jordi Esteve <jesteve@zikzakmedia.com>
# Planified by: Humberto Arocha
# Finance by: LUBCAN COL S.A.S http://www.lubcancol.com
# Audited by: Humberto Arocha humberto@openerp.com.ve
#############################################################################
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##############################################################################
{
"name" : "Common financial reports" ,
"version" : "1.0" ,
"author" : "OpenERP Venezuela" ,
"website" : "http://wiki.openerp.org.ve/" ,
"depends" : ["base","account"] ,
"category" : "Localisation/Accounting" ,
"description": """
""" ,
"init_xml" : [] ,
"demo_xml" : [] ,
"update_xml" : [
"wizard/wizard_report_report.xml" ,
"wizard/account_report_wizard.xml" ,
] ,
"active": False ,
"installable": True
}

1120
i18n/account_financial_report.pot
File diff suppressed because it is too large
View File

1154
i18n/ca.po
File diff suppressed because it is too large
View File

1139
i18n/ca_ES.po
File diff suppressed because it is too large
View File

1154
i18n/es.po
File diff suppressed because it is too large
View File

1132
i18n/es_ES.po
File diff suppressed because it is too large
View File

1149
i18n/pl.po
File diff suppressed because it is too large
View File

30
report/__init__.py

@ -0,0 +1,30 @@
# -*- encoding: utf-8 -*-
###########################################################################
# Module Writen to OpenERP, Open Source Management Solution
# Copyright (C) OpenERP Venezuela (<http://openerp.com.ve>).
# All Rights Reserved
###############Credits######################################################
# Coded by: Humberto Arocha humberto@openerp.com.ve
# Angelica Barrios angelicaisabelb@gmail.com
# Jordi Esteve <jesteve@zikzakmedia.com>
# Planified by: Humberto Arocha
# Finance by: LUBCAN COL S.A.S http://www.lubcancol.com
# Audited by: Humberto Arocha humberto@openerp.com.ve
#############################################################################
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##############################################################################
import account_balance
import account_balance_4_cols
import account_balance_2_cols

285
report/account_balance.py

@ -0,0 +1,285 @@
# -*- encoding: utf-8 -*-
###########################################################################
# Module Writen to OpenERP, Open Source Management Solution
# Copyright (C) OpenERP Venezuela (<http://openerp.com.ve>).
# All Rights Reserved
###############Credits######################################################
# Coded by: Humberto Arocha humberto@openerp.com.ve
# Angelica Barrios angelicaisabelb@gmail.com
# Jordi Esteve <jesteve@zikzakmedia.com>
# Javier Duran <javieredm@gmail.com>
# Planified by: Humberto Arocha
# Finance by: LUBCAN COL S.A.S http://www.lubcancol.com
# Audited by: Humberto Arocha humberto@openerp.com.ve
#############################################################################
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##############################################################################
import xml
import copy
from operator import itemgetter
import time
import datetime
from report import report_sxw
from tools import config
class account_balance(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
print 'INICIO: ',datetime.datetime.now()
super(account_balance, self).__init__(cr, uid, name, context)
self.sum_debit = 0.00
self.sum_credit = 0.00
self.sum_balance = 0.00
self.sum_debit_fy = 0.00
self.sum_credit_fy = 0.00
self.sum_balance_fy = 0.00
self.date_lst = []
self.date_lst_string = ''
self.localcontext.update({
'time': time,
'lines': self.lines,
'get_fiscalyear_text': self.get_fiscalyear_text,
'get_periods_and_date_text': self.get_periods_and_date_text,
'get_inf_text': self.get_informe_text,
})
self.context = context
def get_fiscalyear_text(self, form):
"""
Returns the fiscal year text used on the report.
"""
fiscalyear_obj = self.pool.get('account.fiscalyear')
fiscalyear = None
if form.get('fiscalyear'):
fiscalyear = fiscalyear_obj.browse(self.cr, self.uid, form['fiscalyear'])
return fiscalyear.name or fiscalyear.code
else:
fiscalyear = fiscalyear_obj.browse(self.cr, self.uid, fiscalyear_obj.find(self.cr, self.uid))
return "%s*" % (fiscalyear.name or fiscalyear.code)
def get_informe_text(self, form):
"""
Returns the header text used on the report.
"""
inf_type = {
'bgen' : ' Balance General',
'bcom' : ' Balance de Comprobacion',
'edogp': 'Estado de Ganancias y Perdidas'
}
return inf_type[form['inf_type']]
def get_periods_and_date_text(self, form):
"""
Returns the text with the periods/dates used on the report.
"""
period_obj = self.pool.get('account.period')
periods_str = None
fiscalyear_id = form['fiscalyear'] or fiscalyear_obj.find(self.cr, self.uid)
period_ids = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',fiscalyear_id),('special','=',False)])
if form['state'] in ['byperiod', 'all']:
period_ids = form['periods']
periods_str = ', '.join([period.name or period.code for period in period_obj.browse(self.cr, self.uid, period_ids)])
dates_str = None
if form['state'] in ['bydate', 'all']:
dates_str = self.formatLang(form['date_from'], date=True) + ' - ' + self.formatLang(form['date_to'], date=True) + ' '
return {'periods':periods_str, 'date':dates_str}
def lines(self, form, ids={}, done=None, level=0):
"""
Returns all the data needed for the report lines
(account info plus debit/credit/balance in the selected period
and the full year)
"""
tot_eje = 0.0
if not ids:
ids = self.ids
if not ids:
return []
if not done:
done = {}
if form.has_key('account_list') and form['account_list']:
account_ids = form['account_list']
del form['account_list']
res = {}
result_acc = []
accounts_levels = {}
account_obj = self.pool.get('account.account')
period_obj = self.pool.get('account.period')
fiscalyear_obj = self.pool.get('account.fiscalyear')
# Get the fiscal year
fiscalyear = None
if form.get('fiscalyear'):
fiscalyear = fiscalyear_obj.browse(self.cr, self.uid, form['fiscalyear'])
else:
fiscalyear = fiscalyear_obj.browse(self.cr, self.uid, fiscalyear_obj.find(self.cr, self.uid))
#
# Get the accounts
#
def _get_children_and_consol(cr, uid, ids, level, context={}):
aa_obj = self.pool.get('account.account')
ids2=[]
temp=[]
read_data= aa_obj.read(cr, uid, ids,['id','child_id','level','type'], context)
for data in read_data:
if data['child_id'] and data['level'] < level and data['type']!='consolidation':
#ids2.append([data['id'],'Label', 'Total'])
ids2.append([data['id'],True, False])
temp=[]
for x in data['child_id']:
temp.append(x)
ids2 += _get_children_and_consol(cr, uid, temp, level, context)
ids2.append([data['id'],False,True])
else:
ids2.append([data['id'],True,True])
return ids2
child_ids = _get_children_and_consol(self.cr, self.uid, account_ids, form['display_account_level'] and form['display_account_level'] or 100,self.context)
if child_ids:
account_ids = child_ids
#
# Calculate the FY Balance.
# (from full fiscal year without closing periods)
#
ctx = self.context.copy()
if form.get('fiscalyear'):
# Use only the current fiscal year
ctx['fiscalyear'] = fiscalyear.id
ctx['periods'] = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',fiscalyear.id),'|',('special','=',False),('date_stop','<',fiscalyear.date_stop)])
else:
# Use all the open fiscal years
open_fiscalyear_ids = fiscalyear_obj.search(self.cr, self.uid, [('state','=','draft')])
ctx['periods'] = period_obj.search(self.cr, self.uid, [('fiscalyear_id','in',open_fiscalyear_ids),'|',('special','=',False),('date_stop','<',fiscalyear.date_stop)])
fy_balance = {}
for acc in account_obj.read(self.cr, self.uid, [x[0] for x in account_ids], ['balance'], ctx):
fy_balance[acc['id']] = acc['balance']
#
# Calculate the FY Debit/Credit
# (from full fiscal year without opening or closing periods)
#
ctx = self.context.copy()
ctx['fiscalyear'] = fiscalyear.id
ctx['periods'] = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',fiscalyear.id),('special','=',False)])
#
# Calculate the period Debit/Credit
# (from the selected period or all the non special periods in the fy)
#
ctx = self.context.copy()
ctx['state'] = form.get('state','all')
ctx['fiscalyear'] = fiscalyear.id
ctx['periods'] = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',fiscalyear.id)])
if form['state'] in ['byperiod', 'all']:
ctx['periods'] = form['periods']
if form['state'] in ['bydate', 'all']:
ctx['date_from'] = form['date_from']
ctx['date_to'] = form['date_to']
accounts=[]
for aa_id in account_ids:
new_acc = account_obj.read(self.cr, self.uid, aa_id[0], ['type','code','name','balance','parent_id','level'], ctx)
new_acc.update({'label':aa_id[1],'total':aa_id[2]})
accounts.append(new_acc)
#
# Generate the report lines (checking each account)
#
tot = {}
for account in accounts:
account_id = account['id']
if account_id in done:
pass
done[account_id] = 1
#
# Calculate the account level
#
accounts_levels[account_id] = account['level']
#
# Check if we need to include this level
#
if not form['display_account_level'] or account['level'] <= form['display_account_level']:
#
# Copy the account values
#
res = {
'id' : account_id,
'type' : account['type'],
'code': account['code'],
'name': (account['total'] and not account['label']) and 'TOTAL %s'%(account['name'].upper()) or account['name'],
'level': account['level'],
'balance': account['balance'],
'parent_id': account['parent_id'],
'bal_type': '',
'label': account['label'],
'total': account['total'],
}
#
# Round the values to zero if needed (-0.000001 ~= 0)
#
if abs(res['balance']) < 0.5 * 10**-int(2):
res['balance'] = 0.0
#
# Check whether we must include this line in the report or not
#
if form['display_account'] == 'bal_mouvement' and account['parent_id']:
# Include accounts with movements
if abs(res['balance']) >= 0.5 * 10**-int(2):
result_acc.append(res)
elif form['display_account'] == 'bal_solde' and account['parent_id']:
# Include accounts with balance
if abs(res['balance']) >= 0.5 * 10**-int(2):
result_acc.append(res)
else:
# Include all accounts
result_acc.append(res)
if form['tot_check'] and res['type'] == 'view' and res['level'] == 1 and (res['id'] not in tot):
tot[res['id']] = True
tot_eje += res['balance']
print 'FIN: ',datetime.datetime.now()
if form['tot_check']:
str_label = form['lab_str']
res2 = {
'type' : 'view',
'name': 'TOTAL %s'%(str_label),
'balance': tot_eje,
'label': False,
'total': True,
}
result_acc.append(res2)
return result_acc
report_sxw.report_sxw('report.account.account.balance.gene',
'wizard.report.account.balance.gene',
'addons/l10n_co_account_financial_report/report/balance_full.rml',
parser=account_balance,
header=False)

257
report/account_balance_2_cols.py

@ -0,0 +1,257 @@
# -*- encoding: utf-8 -*-
###########################################################################
# Module Writen to OpenERP, Open Source Management Solution
# Copyright (C) OpenERP Venezuela (<http://openerp.com.ve>).
# All Rights Reserved
###############Credits######################################################
# Coded by: Humberto Arocha humberto@openerp.com.ve
# Angelica Barrios angelicaisabelb@gmail.com
# Jordi Esteve <jesteve@zikzakmedia.com>
# Javier Duran <javieredm@gmail.com>
# Planified by: Humberto Arocha
# Finance by: LUBCAN COL S.A.S http://www.lubcancol.com
# Audited by: Humberto Arocha humberto@openerp.com.ve
#############################################################################
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##############################################################################
import xml
import copy
from operator import itemgetter
import time
import datetime
from report import report_sxw
from tools import config
class account_balance(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
print 'INICIO: ',datetime.datetime.now()
super(account_balance, self).__init__(cr, uid, name, context)
self.sum_debit = 0.00
self.sum_credit = 0.00
self.sum_balance = 0.00
self.sum_debit_fy = 0.00
self.sum_credit_fy = 0.00
self.sum_balance_fy = 0.00
self.date_lst = []
self.date_lst_string = ''
self.localcontext.update({
'time': time,
'lines': self.lines,
'get_fiscalyear_text': self.get_fiscalyear_text,
'get_periods_and_date_text': self.get_periods_and_date_text,
'get_inf_text': self.get_informe_text,
})
self.context = context
def get_fiscalyear_text(self, form):
"""
Returns the fiscal year text used on the report.
"""
fiscalyear_obj = self.pool.get('account.fiscalyear')
fiscalyear = None
if form.get('fiscalyear'):
fiscalyear = fiscalyear_obj.browse(self.cr, self.uid, form['fiscalyear'])
return fiscalyear.name or fiscalyear.code
else:
fiscalyear = fiscalyear_obj.browse(self.cr, self.uid, fiscalyear_obj.find(self.cr, self.uid))
return "%s*" % (fiscalyear.name or fiscalyear.code)
def get_informe_text(self, form):
"""
Returns the header text used on the report.
"""
inf_type = {
'bgen' : ' Balance General',
'bcom' : ' Balance de Comprobacion',
'edogp': 'Estado de Ganancias y Perdidas'
}
return inf_type[form['inf_type']]
def get_periods_and_date_text(self, form):
"""
Returns the text with the periods/dates used on the report.
"""
period_obj = self.pool.get('account.period')
periods_str = None
fiscalyear_id = form['fiscalyear'] or fiscalyear_obj.find(self.cr, self.uid)
period_ids = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',fiscalyear_id),('special','=',False)])
if form['state'] in ['byperiod', 'all']:
period_ids = form['periods'][0][2]
periods_str = ', '.join([period.name or period.code for period in period_obj.browse(self.cr, self.uid, period_ids)])
dates_str = None
if form['state'] in ['bydate', 'all']:
dates_str = self.formatLang(form['date_from'], date=True) + ' - ' + self.formatLang(form['date_to'], date=True) + ' '
return {'periods':periods_str, 'date':dates_str}
def lines(self, form, ids={}, done=None, level=0):
"""
Returns all the data needed for the report lines
(account info plus debit/credit/balance in the selected period
and the full year)
"""
tot_deb = 0.0
tot_crd = 0.0
if not ids:
ids = self.ids
if not ids:
return []
if not done:
done = {}
if form.has_key('account_list') and form['account_list']:
account_ids = form['account_list']
del form['account_list']
res = {}
result_acc = []
accounts_levels = {}
account_obj = self.pool.get('account.account')
period_obj = self.pool.get('account.period')
fiscalyear_obj = self.pool.get('account.fiscalyear')
# Get the fiscal year
fiscalyear = None
if form.get('fiscalyear'):
fiscalyear = fiscalyear_obj.browse(self.cr, self.uid, form['fiscalyear'])
else:
fiscalyear = fiscalyear_obj.browse(self.cr, self.uid, fiscalyear_obj.find(self.cr, self.uid))
#
# Get the accounts
#
def _get_children_and_consol(cr, uid, ids, level, context={}):
aa_obj = self.pool.get('account.account')
ids2=[]
temp=[]
read_data= aa_obj.read(cr, uid, ids,['id','child_id','level','type'], context)
for data in read_data:
if data['child_id'] and data['level'] < level and data['type']!='consolidation':
ids2.append([data['id'],True, False])
temp=[]
for x in data['child_id']:
temp.append(x)
ids2 += _get_children_and_consol(cr, uid, temp, level, context)
ids2.append([data['id'],False,True])
else:
ids2.append([data['id'],True,True])
return ids2
child_ids = _get_children_and_consol(self.cr, self.uid, account_ids, form['display_account_level'] and form['display_account_level'] or 100,self.context)
if child_ids:
account_ids = child_ids
#
# Calculate the period Debit/Credit
# (from the selected period or all the non special periods in the fy)
#
ctx = self.context.copy()
ctx['state'] = form.get('state','all')
ctx['fiscalyear'] = fiscalyear.id
ctx['periods'] = form.get('periods')
if form['state'] in ['byperiod', 'all']:
date_start = min([period.date_start for period in period_obj.browse(self.cr, self.uid, ctx['periods'])])
ctx['periods'] = ctx['periods'] = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',fiscalyear.id),('date_stop','<=',date_start)])
if form['state'] in ['bydate', 'all']:
ctx['date_from'] = form['date_from']
ctx['date_to'] = form['date_to']
accounts=[]
for aa_id in account_ids:
new_acc = account_obj.read(self.cr, self.uid, aa_id[0], ['type','code','name','debit','credit','parent_id','level'], ctx)
new_acc.update({'label':aa_id[1],'total':aa_id[2]})
accounts.append(new_acc)
def missing_period():
ctx['fiscalyear'] = fiscalyear_obj.search(self.cr, self.uid, [('date_stop','<',fiscalyear.date_start)],order='date_stop') and \
fiscalyear_obj.search(self.cr, self.uid, [('date_stop','<',fiscalyear.date_start)],order='date_stop')[-1] or []
ctx['periods'] = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',ctx['fiscalyear']),('date_stop','<',fiscalyear.date_start)])
#
# Generate the report lines (checking each account)
#
tot = {}
for account in accounts:
account_id = account['id']
if account_id in done:
pass
done[account_id] = 1
accounts_levels[account_id] = account['level']
#
# Check if we need to include this level
#
if not form['display_account_level'] or account['level'] <= form['display_account_level']:
#
# Copy the account values
#
res = {
'id' : account_id,
'type' : account['type'],
'code': account['code'],
'name': (account['total'] and not account['label']) and 'TOTAL %s'%(account['name'].upper()) or account['name'],
'level': account['level'],
'debit': account['debit'],
'credit': account['credit'],
'parent_id': account['parent_id'],
'bal_type': '',
'label': account['label'],
'total': account['total'],
}
#
# Check whether we must include this line in the report or not
#
if form['display_account'] == 'bal_mouvement' and account['parent_id']:
# Include accounts with movements
result_acc.append(res)
result_acc.append(res)
if form['tot_check'] and res['type'] == 'view' and res['level'] == 1 and (res['id'] not in tot):
tot[res['id']] = True
tot_deb += res['debit']
tot_crd += res['credit']
if form['tot_check']:
str_label = form['lab_str']
res2 = {
'type' : 'view',
'name': 'TOTAL %s'%(str_label),
'debit': tot_deb,
'credit': tot_crd,
'label': False,
'total': True,
}
result_acc.append(res2)
print 'FIN: ',datetime.datetime.now()
return result_acc
report_sxw.report_sxw('report.account.account.balance.gene.2',
'wizard.report.account.balance.gene.2',
'addons/l10n_co_account_financial_report/report/balance_full_2_cols.rml',
parser=account_balance,
header=False)

339
report/account_balance_4_cols.py

@ -0,0 +1,339 @@
# -*- encoding: utf-8 -*-
###########################################################################
# Module Writen to OpenERP, Open Source Management Solution
# Copyright (C) OpenERP Venezuela (<http://openerp.com.ve>).
# All Rights Reserved
###############Credits######################################################
# Coded by: Humberto Arocha humberto@openerp.com.ve
# Angelica Barrios angelicaisabelb@gmail.com
# Jordi Esteve <jesteve@zikzakmedia.com>
# Javier Duran <javieredm@gmail.com>
# Planified by: Humberto Arocha
# Finance by: LUBCAN COL S.A.S http://www.lubcancol.com
# Audited by: Humberto Arocha humberto@openerp.com.ve
#############################################################################
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##############################################################################
import xml
import copy
from operator import itemgetter
import time
import datetime
from report import report_sxw
from tools import config
class account_balance(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
print 'INICIO: ',datetime.datetime.now()
super(account_balance, self).__init__(cr, uid, name, context)
self.sum_debit = 0.00
self.sum_credit = 0.00
self.sum_balance = 0.00
self.sum_debit_fy = 0.00
self.sum_credit_fy = 0.00
self.sum_balance_fy = 0.00
self.date_lst = []
self.date_lst_string = ''
self.localcontext.update({
'time': time,
'lines': self.lines,
'get_fiscalyear_text': self.get_fiscalyear_text,
'get_periods_and_date_text': self.get_periods_and_date_text,
'get_inf_text': self.get_informe_text,
})
self.context = context
def get_fiscalyear_text(self, form):
"""
Returns the fiscal year text used on the report.
"""
fiscalyear_obj = self.pool.get('account.fiscalyear')
fiscalyear = None
if form.get('fiscalyear'):
fiscalyear = fiscalyear_obj.browse(self.cr, self.uid, form['fiscalyear'])
return fiscalyear.name or fiscalyear.code
else:
fiscalyear = fiscalyear_obj.browse(self.cr, self.uid, fiscalyear_obj.find(self.cr, self.uid))
return "%s*" % (fiscalyear.name or fiscalyear.code)
def get_informe_text(self, form):
"""
Returns the header text used on the report.
"""
inf_type = {
'bgen' : ' Balance General',
'bcom' : ' Balance de Comprobacion',
'edogp': 'Estado de Ganancias y Perdidas'
}
return inf_type[form['inf_type']]
def get_periods_and_date_text(self, form):
"""
Returns the text with the periods/dates used on the report.
"""
period_obj = self.pool.get('account.period')
periods_str = None
fiscalyear_id = form['fiscalyear'] or fiscalyear_obj.find(self.cr, self.uid)
period_ids = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',fiscalyear_id),('special','=',False)])
if form['state'] in ['byperiod', 'all']:
period_ids = form['periods']
periods_str = ', '.join([period.name or period.code for period in period_obj.browse(self.cr, self.uid, period_ids)])
dates_str = None
if form['state'] in ['bydate', 'all']:
dates_str = self.formatLang(form['date_from'], date=True) + ' - ' + self.formatLang(form['date_to'], date=True) + ' '
return {'periods':periods_str, 'date':dates_str}
def lines(self, form, ids={}, done=None, level=0):
"""
Returns all the data needed for the report lines
(account info plus debit/credit/balance in the selected period
and the full year)
"""
tot_bin = 0.0
tot_deb = 0.0
tot_crd = 0.0
tot_eje = 0.0
if not ids:
ids = self.ids
if not ids:
return []
if not done:
done = {}
print "Lista Form %s"%form
print "Tipo de Obj %s"%type(form)
print "form:%s"%form
if form.has_key('account_list') and form['account_list']:
account_ids = form['account_list']
del form['account_list']
res = {}
result_acc = []
accounts_levels = {}
account_obj = self.pool.get('account.account')
period_obj = self.pool.get('account.period')
fiscalyear_obj = self.pool.get('account.fiscalyear')
fiscalyear = None
if form.get('fiscalyear'):
fiscalyear = fiscalyear_obj.browse(self.cr, self.uid, form['fiscalyear'])
else:
fiscalyear = fiscalyear_obj.browse(self.cr, self.uid, fiscalyear_obj.find(self.cr, self.uid))
#
# Get the accounts
#
def _get_children_and_consol(cr, uid, ids, level, context={}):
aa_obj = self.pool.get('account.account')
ids2=[]
temp=[]
read_data= aa_obj.read(cr, uid, ids,['id','child_id','level','type'], context)
for data in read_data:
if data['child_id'] and data['level'] < level and data['type']!='consolidation':
ids2.append([data['id'],True, False])
temp=[]
for x in data['child_id']:
temp.append(x)
ids2 += _get_children_and_consol(cr, uid, temp, level, context)
ids2.append([data['id'],False,True])
else:
ids2.append([data['id'],True,True])
return ids2
child_ids = _get_children_and_consol(self.cr, self.uid, account_ids, form['display_account_level'] and form['display_account_level'] or 100,self.context)
if child_ids:
account_ids = child_ids
account_obj = self.pool.get('account.account')
period_obj = self.pool.get('account.period')
fiscalyear_obj = self.pool.get('account.fiscalyear')
#############################################################################
# Calculate the period Debit/Credit #
# (from the selected period or all the non special periods in the fy) #
#############################################################################
ctx = self.context.copy()
ctx['state'] = form.get('state','all')
ctx['fiscalyear'] = fiscalyear.id
print "Fiscal year %s"%ctx['fiscalyear']
ctx['periods'] = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',fiscalyear.id),('special','=',False)])
print "Periodos del Context: %s"%ctx['periods']
if form['state'] in ['byperiod', 'all']:
print "PERIODOS ANTERIORES DEBIT / CREDIT: ",ctx['periods']
ctx['periods'] = period_obj.search(self.cr, self.uid, [('id','in',form['periods'] or ctx['periods']),('special','=',False)])
print "PERIODOS DESPUES DEBIT / CREDIT: ",ctx['periods']
#~ ctx['periods'] = form['periods']
if form['state'] in ['bydate', 'all']:
ctx['date_from'] = form['date_from']
ctx['date_to'] = form['date_to']
accounts=[]
print 'INICIANDO CALCULO DEBIT/CREDIT: ',datetime.datetime.now()
val = account_obj.browse(self.cr, self.uid, [aa_id[0] for aa_id in account_ids], ctx)
print "Valor de Account_ids en get_children: %s"%account_ids
print "Valor de context %s"%ctx
#~ val = account_obj.browse(self.cr, self.uid, account_ids, ctx)
print 'INTERMEDIO CALCULO DEBIT/CREDIT: ',datetime.datetime.now()
c = 0
for aa_id in account_ids:
new_acc = {
'id' :val[c].id,
'type' :val[c].type,
'code' :val[c].code,
'name' :val[c].name,
'debit' :val[c].debit,
'credit' :val[c].credit,
'parent_id' :val[c].parent_id and val[c].parent_id.id,
'level' :val[c].level,
'label' :aa_id[1],
'total' :aa_id[2],
}
c += 1
print "Diccionario new_acc: %s"%new_acc
accounts.append(new_acc)
print 'FINALIZANDO CALCULO DEBIT/CREDIT: ',datetime.datetime.now()
def missing_period():
ctx['fiscalyear'] = fiscalyear_obj.search(self.cr, self.uid, [('date_stop','<',fiscalyear.date_start)],order='date_stop') and \
fiscalyear_obj.search(self.cr, self.uid, [('date_stop','<',fiscalyear.date_start)],order='date_stop')[-1] or []
ctx['periods'] = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',ctx['fiscalyear']),('date_stop','<',fiscalyear.date_start)])
#############################################################################
# Calculate the period initial Balance #
# (fy balance minus the balance from the start of the selected period #
# to the end of the year) #
#############################################################################
ctx = self.context.copy()
ctx['state'] = form.get('state','all')
ctx['fiscalyear'] = fiscalyear.id
if form['state'] in ['byperiod', 'all']:
ctx['periods'] = form['periods']
print "PERIODOS ANTERIORES ctx['periods']: ",ctx['periods']
date_start = min([period.date_start for period in period_obj.browse(self.cr, self.uid, ctx['periods'])])
ctx['periods'] = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',fiscalyear.id),('date_stop','<=',date_start)])
print "PERIODOS DESPUES ctx['periods']: ",ctx['periods']
if not ctx['periods']:
missing_period()
elif form['state'] in ['bydate']:
ctx['date_from'] = fiscalyear.date_start
ctx['date_to'] = form['date_from']
ctx['periods'] = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',fiscalyear.id),('date_stop','<=',ctx['date_to'])])
elif form['state'] == 'none':
ctx['periods'] = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',fiscalyear.id),('special','=',True)])
date_start = min([period.date_start for period in period_obj.browse(self.cr, self.uid, ctx['periods'])])
ctx['periods'] = period_obj.search(self.cr, self.uid, [('fiscalyear_id','=',fiscalyear.id),('date_start','<=',date_start),('special','=',True)])
period_balanceinit = {}
for acc in account_obj.browse(self.cr, self.uid, [x[0] for x in account_ids], ctx):
period_balanceinit[acc['id']] = acc.balance
print 'FINALIZANDO CALCULO INITIAL BALANCE: ',datetime.datetime.now()
#
# Generate the report lines (checking each account)
#
tot = {}
for account in accounts:
account_id = account['id']
if account_id in done:
pass
done[account_id] = 1
accounts_levels[account_id] = account['level']
#
# Check if we need to include this level
#
if not form['display_account_level'] or account['level'] <= form['display_account_level']:
#
# Copy the account values
#
res = {
'id' : account_id,
'type' : account['type'],
'code': account['code'],
'name': (account['total'] and not account['label']) and 'TOTAL %s'%(account['name'].upper()) or account['name'],
'level': account['level'],
'balanceinit': period_balanceinit[account_id],
'debit': account['debit'],
'credit': account['credit'],
'balance': period_balanceinit[account_id]+account['debit']-account['credit'],
'parent_id': account['parent_id'],
'bal_type': '',
'label': account['label'],
'total': account['total'],
}
#
# Round the values to zero if needed (-0.000001 ~= 0)
#
if abs(res['balance']) < 0.5 * 10**-4:
res['balance'] = 0.0
#
# Check whether we must include this line in the report or not
#
if form['display_account'] == 'bal_mouvement' and account['parent_id']:
# Include accounts with movements
if abs(res['balance']) >= 0.5 * 10**-int(2):
result_acc.append(res)
elif form['display_account'] == 'bal_solde' and account['parent_id']:
# Include accounts with balance
if abs(res['balance']) >= 0.5 * 10**-4:
result_acc.append(res)
else:
# Include all accounts
result_acc.append(res)
if form['tot_check'] and res['type'] == 'view' and res['level'] == 1 and (res['id'] not in tot):
tot[res['id']] = True
tot_bin += res['balanceinit']
tot_deb += res['debit']
tot_crd += res['credit']
tot_eje += res['balance']
if form['tot_check']:
str_label = form['lab_str']
res2 = {
'type' : 'view',
'name': 'TOTAL %s'%(str_label),
'balanceinit': tot_bin,
'debit': tot_deb,
'credit': tot_crd,
'balance': tot_eje,
'label': False,
'total': True,
}
result_acc.append(res2)
print 'FIN: ',datetime.datetime.now()
print "result_acc %s"%result_acc
return result_acc
report_sxw.report_sxw('report.wizard.report.reporte',
'wizard.report',
'l10n_co_account_financial_report/report/balance_full_4_cols.rml',
parser=account_balance,
header=False)

33
report/account_report_report.xml

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data >
<report
id="account_balance_full"
string="General account balance"
model="account.account"
name="account.account.balance.gene"
rml="l10n_co_account_financial_report/report/balance_full.rml"
header="False"
auto="False"
menu="False"/>
<report
id="account_balance_full_4_cols"
string="General account balance Four Columns"
model="account.account"
name="account.account.balance.gene.4"
rml="l10n_co_account_financial_report/report/balance_full_4_cols.rml"
header="False"
auto="False"
menu="False"/>
<report
id="account_balance_full_2_cols"
string="General account balance Two Columns"
model="account.account"
name="account.account.balance.gene.2"
rml="l10n_co_account_financial_report/report/balance_full_2_cols.rml"
header="False"
auto="False"
menu="False"/>
</data>
</openerp>

122
report/balance_full.rml

@ -0,0 +1,122 @@
<?xml version="1.0"?>
<document filename="test.pdf">
<template pageSize="(21.59cm,27.94cm)" title="Test" author="Martin Simon" allowSplitting="20" showBoundary="0">
<pageTemplate id="first">
<frame id="first" x1="1cm" y1="2cm" width="19.0cm" height="25cm"/>
<pageGraphics>
<setFont name="Helvetica-Bold" size="9"/>
<!--COL 1-->
<drawString x="1.0cm" y="27.0cm">[[ company.name ]]</drawString>
<drawString x="14.5cm" y="27.0cm">[[ get_inf_text(data['form']) ]] - [[ company.currency_id.name ]]</drawString>
<!--COL 2-->
<setFont name="Helvetica" size="8"/>
<drawString x="1.0cm" y="1cm"> [[ formatLang(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),date_time = True) ]]</drawString>
<drawString x="18.5cm" y="1cm">Page <pageNumber/></drawString>
<lineMode width="0.7"/>
<lines>1cm 26.9cm 20.0cm 26.9cm</lines>
<setFont name="Helvetica" size="8"/>
</pageGraphics>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="BODY">
<blockValign value="TOP"/>
<blockAlignment value="RIGHT"/>
<blockTopPadding length="1.0"/>
<blockBottomPadding length="1.0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,1" stop="-1,-1" thickness='0.25'/>
</blockTableStyle>
<blockTableStyle id="BODY_STRIKE">
<blockValign value="TOP"/>
<blockAlignment value="RIGHT"/>
<blockTopPadding length="1.0"/>
<blockBottomPadding length="1.0"/>
<lineStyle kind="LINEBELOW" colorName="#FFFFFF" start="0,1" stop="-1,-1" thickness='0.5'/>
</blockTableStyle>
<blockTableStyle id="TOP_TABLE">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#FFFFFF" start="0,-1" stop="0,-1" thickness='0.25'/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle
name="TITLE_LEFT_ALIGN"
fontName="Helvetica-Bold"
fontSize="8.0"
leading="10"
alignment="RIGHT"
spaceBefore="0.0"
spaceAfter="0.0"/>
<paraStyle
name="TOP_TITLE"
fontName="Helvetica-Bold"
fontSize="9"
leftIndent="0.0"
alignment="LEFT"/>
<paraStyle name="TITLES"
fontName="Helvetica-Bold"
fontSize="8.0"
leading="10"
alignment="LEFT"
spaceBefore="0.0"
spaceAfter="0.0"/>
</stylesheet>
<images/>
<story>
<para>[[setLang(user.context_lang)]]</para>
<blockTable colWidths="19cm" style="TOP_TABLE" repeatRows="1">
<tr>
<td>
<para style="TOP_TITLE">Fiscal year: [[ get_fiscalyear_text(data['form']) or removeParentNode('para') ]]</para>
<para style="TOP_TITLE">Periods range: [[ get_periods_and_date_text(data['form'])['periods'] or removeParentNode('para') ]]</para>
<para style="TOP_TITLE">Date: [[ get_periods_and_date_text(data['form'])['date'] or removeParentNode('para') ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="2.5cm,13.5cm,3.0cm" style="BODY" repeatRows="1">
<tr noRowsplits="1">
<td>
<para style="TITLE_LEFT_ALIGN">
<font>[[ setTag('para','para',{'alignment':"RIGHT"}) ]]</font>
<font>Code</font>
</para>
</td>
<td>
<para style="TITLES">Account</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN"></para>
</td>
</tr>
<tr>
<td>
<para style="TITLE_LEFT_ALIGN">[[ repeatIn(lines(data['form']), 'a') ]]
<font>[[ a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}) or removeParentNode('font') ]]</font>
<i>[[a['label']==True and a['code'] or '' ]]</i>
</para>
</td>
<td>
<para style="TITLES">
<font>[[ ((a['total'] and not a['label']) and setTag('para','para',{'alignment':"RIGHT"}) or (a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}))) or removeParentNode('font') ]]</font>
<font>[[ a['name'] ]]</font>
</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">
<font>[[ a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}) or removeParentNode('font') ]]</font>
<font>[[ (a['total']==True) and formatLang(a['balance']) or '']]</font>
</para>
</td>
</tr>
</blockTable>
</story>
</document>

132
report/balance_full_2_cols.rml

@ -0,0 +1,132 @@
<?xml version="1.0"?>
<document filename="test.pdf">
<template pageSize="(21.59cm,27.94cm)" title="Test" author="Martin Simon" allowSplitting="20" showBoundary="0">
<pageTemplate id="first">
<frame id="first" x1="1cm" y1="2cm" width="19.0cm" height="25cm"/>
<pageGraphics>
<setFont name="Helvetica-Bold" size="9"/>
<!--COL 1-->
<drawString x="1.0cm" y="27.0cm">[[ company.name ]]</drawString>
<drawString x="14.5cm" y="27.0cm">[[ get_inf_text(data['form']) ]] - [[ company.currency_id.name ]]</drawString>
<!--COL 2-->
<setFont name="Helvetica" size="8"/>
<drawString x="1.0cm" y="1cm"> [[ formatLang(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),date_time = True) ]]</drawString>
<drawString x="18.5cm" y="1cm">Page <pageNumber/></drawString>
<lineMode width="0.7"/>
<lines>1cm 26.9cm 20.0cm 26.9cm</lines>
<setFont name="Helvetica" size="8"/>
</pageGraphics>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="BODY">
<blockValign value="TOP"/>
<blockAlignment value="RIGHT"/>
<blockTopPadding length="1.0"/>
<blockBottomPadding length="1.0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,1" stop="-1,-1" thickness='0.25'/>
</blockTableStyle>
<blockTableStyle id="BODY_STRIKE">
<blockValign value="TOP"/>
<blockAlignment value="RIGHT"/>
<blockTopPadding length="1.0"/>
<blockBottomPadding length="1.0"/>
<lineStyle kind="LINEBELOW" colorName="#FFFFFF" start="0,1" stop="-1,-1" thickness='0.5'/>
</blockTableStyle>
<blockTableStyle id="TOP_TABLE">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#FFFFFF" start="0,-1" stop="0,-1" thickness='0.25'/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle
name="TITLE_LEFT_ALIGN"
fontName="Helvetica-Bold"
fontSize="8.0"
leading="10"
alignment="RIGHT"
spaceBefore="0.0"
spaceAfter="0.0"/>
<paraStyle
name="TOP_TITLE"
fontName="Helvetica-Bold"
fontSize="9"
leftIndent="0.0"
alignment="LEFT"/>
<paraStyle name="TITLES"
fontName="Helvetica-Bold"
fontSize="8.0"
leading="10"
alignment="LEFT"
spaceBefore="0.0"
spaceAfter="0.0"/>
</stylesheet>
<images/>
<story>
<para>[[setLang(user.context_lang)]]</para>
<blockTable colWidths="19cm" style="TOP_TABLE" repeatRows="1">
<tr>
<td>
<para style="TOP_TITLE">Fiscal year: [[ get_fiscalyear_text(data['form']) or removeParentNode('para') ]]</para>
<para style="TOP_TITLE">Periods range: [[ get_periods_and_date_text(data['form'])['periods'] or removeParentNode('para') ]]</para>
<para style="TOP_TITLE">Date: [[ get_periods_and_date_text(data['form'])['date'] or removeParentNode('para') ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="2.5cm,11.5cm,2.5cm,2.5cm" style="BODY" repeatRows="1">
<tr noRowsplits="1">
<td>
<para style="TITLE_LEFT_ALIGN">
<font>Code</font>
</para>
</td>
<td>
<para style="TITLES">Account</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">Debit</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">Credit</para>
</td>
</tr>
<tr>
<td>
<para style="TITLE_LEFT_ALIGN">[[ repeatIn(lines(data['form']), 'a') ]]
<font>[[ a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}) or removeParentNode('font') ]]</font>
<i>[[a['label']==True and a['code'] or '' ]]</i>
</para>
</td>
<td>
<para style="TITLES">
<font>[[ ((a['total'] and not a['label']) and setTag('para','para',{'alignment':"RIGHT"}) or (a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}))) or removeParentNode('font') ]]</font>
<font>[[ a['name'] ]]</font>
</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">
<font>[[ a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}) or removeParentNode('font') ]]</font>
<font>[[ (a['total']==True) and formatLang(a['debit'], digits=2, grouping=True) or '']]</font>
</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">
<font>[[ a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}) or removeParentNode('font') ]]</font>
<font>[[ (a['total']==True) and formatLang(a['credit'], digits=2, grouping=True) or '']]</font>
</para>
</td>
</tr>
</blockTable>
</story>
</document>

148
report/balance_full_4_cols.rml

@ -0,0 +1,148 @@
<?xml version="1.0"?>
<document filename="test.pdf">
<template pageSize="(21.59cm,27.94cm)" title="Test" author="Martin Simon" allowSplitting="20" showBoundary="0">
<pageTemplate id="first">
<frame id="first" x1="1cm" y1="2cm" width="19.0cm" height="25cm"/>
<pageGraphics>
<setFont name="Helvetica-Bold" size="9"/>
<!--COL 1-->
<drawString x="1.0cm" y="27.0cm">[[ company.name ]]</drawString>
<drawString x="14.5cm" y="27.0cm">[[ get_inf_text(data['form']) ]] - [[ company.currency_id.name ]]</drawString>
<!--COL 2-->
<setFont name="Helvetica" size="8"/>
<drawString x="1.0cm" y="1cm"> [[ formatLang(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),date_time = True) ]]</drawString>
<drawString x="18.5cm" y="1cm">Page <pageNumber/></drawString>
<lineMode width="0.7"/>
<lines>1cm 26.9cm 20.0cm 26.9cm</lines>
<setFont name="Helvetica" size="8"/>
</pageGraphics>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="BODY">
<blockValign value="TOP"/>
<blockAlignment value="RIGHT"/>
<blockTopPadding length="1.0"/>
<blockBottomPadding length="1.0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,1" stop="-1,-1" thickness='0.25'/>
</blockTableStyle>
<blockTableStyle id="BODY_STRIKE">
<blockValign value="TOP"/>
<blockAlignment value="RIGHT"/>
<blockTopPadding length="1.0"/>
<blockBottomPadding length="1.0"/>
<lineStyle kind="LINEBELOW" colorName="#FFFFFF" start="0,1" stop="-1,-1" thickness='0.5'/>
</blockTableStyle>
<blockTableStyle id="TOP_TABLE">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#FFFFFF" start="0,-1" stop="0,-1" thickness='0.25'/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle
name="TITLE_LEFT_ALIGN"
fontName="Helvetica-Bold"
fontSize="8.0"
leading="10"
alignment="RIGHT"
spaceBefore="0.0"
spaceAfter="0.0"/>
<paraStyle
name="TOP_TITLE"
fontName="Helvetica-Bold"
fontSize="9"
leftIndent="0.0"
alignment="LEFT"/>
<paraStyle name="TITLES"
fontName="Helvetica-Bold"
fontSize="8.0"
leading="10"
alignment="LEFT"
spaceBefore="0.0"
spaceAfter="0.0"/>
</stylesheet>
<images/>
<story>
<para>[[setLang(user.context_lang)]]</para>
<blockTable colWidths="19cm" style="TOP_TABLE" repeatRows="1">
<tr>
<td>
<para style="TOP_TITLE">Fiscal year: [[ get_fiscalyear_text(data['form']) or removeParentNode('para') ]]</para>
<para style="TOP_TITLE">Periods range: [[ get_periods_and_date_text(data['form'])['periods'] or removeParentNode('para') ]]</para>
<para style="TOP_TITLE">Date: [[ get_periods_and_date_text(data['form'])['date'] or removeParentNode('para') ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="2.5cm,6.5cm,2.5cm,2.5cm,2.5cm,2.5cm" style="BODY" repeatRows="1">
<tr noRowsplits="1">
<td>
<para style="TITLE_LEFT_ALIGN">
<font>Code</font>
</para>
</td>
<td>
<para style="TITLES">Account</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">Initial</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">Debit</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">Credit</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">Balance</para>
</td>
</tr>
<tr>
<td>
<para style="TITLE_LEFT_ALIGN">[[ repeatIn(lines(data['form']), 'a') ]]
<font>[[ a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}) or removeParentNode('font') ]]</font>
<i>[[a['label']==True and a['code'] or '' ]]</i>
</para>
</td>
<td>
<para style="TITLES">
<font>[[ ((a['total'] and not a['label']) and setTag('para','para',{'alignment':"RIGHT"}) or (a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}))) or removeParentNode('font') ]]</font>
<font>[[ a['name'] ]]</font>
</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">
<font>[[ a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}) or removeParentNode('font') ]]</font>
<font>[[ (a['total']==True) and formatLang(a['balanceinit'], digits=2, grouping=True) or '']]</font>
</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">
<font>[[ a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}) or removeParentNode('font') ]]</font>
<font>[[ (a['total']==True) and formatLang(a['debit'], digits=2, grouping=True) or '']]</font>
</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">
<font>[[ a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}) or removeParentNode('font') ]]</font>
<font>[[ (a['total']==True) and formatLang(a['credit'], digits=2, grouping=True) or '']]</font>
</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">
<font>[[ a['type']&lt;&gt;'view' and setTag('para','para',{'fontName':"Courier"}) or removeParentNode('font') ]]</font>
<font>[[ (a['total']==True) and formatLang(a['balance'], digits=2, grouping=True) or '']]</font>
</para>
</td>
</tr>
</blockTable>
</story>
</document>

32
wizard/__init__.py

@ -0,0 +1,32 @@
# -*- encoding: utf-8 -*-
###########################################################################
# Module Writen to OpenERP, Open Source Management Solution
# Copyright (C) OpenERP Venezuela (<http://openerp.com.ve>).
# All Rights Reserved
###############Credits######################################################
# Coded by: Humberto Arocha humberto@openerp.com.ve
# Angelica Barrios angelicaisabelb@gmail.com
# Jordi Esteve <jesteve@zikzakmedia.com>
# Planified by: Humberto Arocha
# Finance by: LUBCAN COL S.A.S http://www.lubcancol.com
# Audited by: Humberto Arocha humberto@openerp.com.ve
#############################################################################
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##############################################################################
import wizard_account_balance_4_report
import wizard_account_balance_2_report
import wizard_account_balance_report

214
wizard/account_report_wizard.xml

@ -0,0 +1,214 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="wizard_report_view" model="ir.ui.view">
<field name="name">Wizard Report Balance Four Columns</field>
<field name="model">wizard.report</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="General Account Balance [ Initial | Debit | Credit | Balance ]">
<group width='800' height='600'>
<field name="company_id"/>
<newline/>
<group colspan="4">
<separator string="Accounts to include" colspan="4"/>
<field name="account_list" nolabel="1" colspan="4" domain="[('company_id','=',company_id)]"/>
<!--
<field name="account_list" nolabel="1" colspan="4"/>
-->
<field name="display_account" required="True"/>
<field name="display_account_level" required="True" />
</group>
<group colspan="4">
<separator string="Period" colspan="4"/>
<field name="fiscalyear"/>
<newline/>
<field name="state" required="True"/>
<newline/>
<!--
<group colspan="4">
<group colspan="4">
<separator string="Date Filter" colspan="4"/>
<field name="date_from"/>
<field name="date_to"/>
</group>
<group colspan="4">
<separator string="Filter on Periods" colspan="4"/>
<field name="periods" colspan="4" nolabel="1" domain="[('fiscalyear_id','=',fiscalyear)]"/>
</group>
</group>
-->
<group attrs="{'invisible':[('state','=','none')]}" colspan="4">
<group attrs="{'invisible':[('state','=','byperiod')]}" colspan="4">
<separator string="Date Filter" colspan="4"/>
<field name="date_from"/>
<field name="date_to"/>
</group>
<group attrs="{'invisible':[('state','=','bydate')]}" colspan="4">
<separator string="Filter on Periods" colspan="4"/>
<field name="periods" colspan="4" nolabel="1" domain="[('fiscalyear_id','=',fiscalyear)]"/>
</group>
</group>
</group>
<group colspan="4">
<separator string="Total" colspan="4"/>
<field name="tot_check"/>
<field name="lab_str"/>
<field name="inf_type"/>
<button name="print_report" string="Print" type="object"/>
</group>
</group>
</form>
</field>
</record>
<record id="action_wizard_report" model="ir.actions.act_window">
<field name="name">Reporte Balance Con Wizard</field>
<field name="res_model">wizard.report</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="wizard_report_view"/>
<field name="target">new</field>
</record>
<menuitem
id="menu_wizard_report"
name="Reporte Balance 4 Columnas"
parent="account.final_accounting_reports"
sequence="99"
action="action_wizard_report"/>
<record id="wizard_report_view2" model="ir.ui.view">
<field name="name">Wizard Report Balance Two Columns</field>
<field name="model">wizard.report.account.balance.gene.2</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="General Account Balance [ Initial | Debit | Credit | Balance ]">
<group width='800' height='600'>
<field name="company_id"/>
<newline/>
<group colspan="4">
<separator string="Accounts to include" colspan="4"/>
<field name="account_list" nolabel="1" colspan="4" domain="[('company_id','=',company_id)]"/>
<field name="display_account" required="True"/>
<field name="display_account_level" required="True" />
</group>
<group colspan="4">
<separator string="Period" colspan="4"/>
<field name="fiscalyear"/>
<newline/>
<field name="state" required="True"/>
<newline/>
<group attrs="{'invisible':[('state','=','none')]}" colspan="4">
<group attrs="{'invisible':[('state','=','byperiod')]}" colspan="4">
<separator string="Date Filter" colspan="4"/>
<field name="date_from"/>
<field name="date_to"/>
</group>
<group attrs="{'invisible':[('state','=','bydate')]}" colspan="4">
<separator string="Filter on Periods" colspan="4"/>
<field name="periods" colspan="4" nolabel="1" domain="[('fiscalyear_id','=',fiscalyear)]"/>
</group>
</group>
</group>
<group colspan="4">
<separator string="Total" colspan="4"/>
<field name="tot_check"/>
<field name="lab_str"/>
<field name="inf_type"/>
<button name="print_report" string="Print" type="object"/>
</group>
</group>
</form>
</field>
</record>
<record id="action_wizard_report2" model="ir.actions.act_window">
<field name="name">Reporte Balance Dos Columnas Con Wizard</field>
<field name="res_model">wizard.report.account.balance.gene.2</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="wizard_report_view2"/>
<field name="target">new</field>
</record>
<menuitem
id="menu_wizard_report2"
name="Reporte Balance 2 Columnas"
parent="account.final_accounting_reports"
sequence="99"
action="action_wizard_report2"/>
<record id="wizard_report_view3" model="ir.ui.view">
<field name="name">Wizard Report Balance</field>
<field name="model">wizard.report.account.balance.gene</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="General Account Balance [ Initial | Debit | Credit | Balance ]">
<group width='800' height='600'>
<field name="company_id"/>
<newline/>
<group colspan="4">
<separator string="Accounts to include" colspan="4"/>
<field name="account_list" nolabel="1" colspan="4" domain="[('company_id','=',company_id)]"/>
<field name="display_account" required="True"/>
<field name="display_account_level" required="True" />
</group>
<group colspan="4">
<separator string="Period" colspan="4"/>
<field name="fiscalyear"/>
<newline/>
<field name="state" required="True"/>
<newline/>
<group attrs="{'invisible':[('state','=','none')]}" colspan="4">
<group attrs="{'invisible':[('state','=','byperiod')]}" colspan="4">
<separator string="Date Filter" colspan="4"/>
<field name="date_from"/>
<field name="date_to"/>
</group>
<group attrs="{'invisible':[('state','=','bydate')]}" colspan="4">
<separator string="Filter on Periods" colspan="4"/>
<field name="periods" colspan="4" nolabel="1" domain="[('fiscalyear_id','=',fiscalyear)]"/>
</group>
</group>
</group>
<group colspan="4">
<separator string="Total" colspan="4"/>
<field name="tot_check"/>
<field name="lab_str"/>
<field name="inf_type"/>
<button name="print_report" string="Print" type="object"/>
</group>
</group>
</form>
</field>
</record>
<record id="action_wizard_report3" model="ir.actions.act_window">
<field name="name">Reporte Balance Dos Columnas Con Wizard</field>
<field name="res_model">wizard.report.account.balance.gene</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="wizard_report_view3"/>
<field name="target">new</field>
</record>
<menuitem
id="menu_wizard_report3"
name="Reporte Balance "
parent="account.final_accounting_reports"
sequence="99"
action="action_wizard_report3"/>
</data>
</openerp>

118
wizard/wizard_account_balance_2_report.py

@ -0,0 +1,118 @@
# -*- encoding: utf-8 -*-
###########################################################################
# Module Writen to OpenERP, Open Source Management Solution
# Copyright (C) OpenERP Venezuela (<http://www.vauxoo.com>).
# All Rights Reserved
###############Credits######################################################
# Coded by: Humberto Arocha humberto@openerp.com.ve
# Angelica Barrios angelicaisabelb@gmail.com
# Jordi Esteve <jesteve@zikzakmedia.com>
# Javier Duran <javieredm@gmail.com>
# Planified by: Humberto Arocha
# Finance by: HELADOS GILDA, C.A. http://www.heladosgilda.com.ve
# Audited by: Humberto Arocha hbto@vauxoo.com
#############################################################################
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##############################################################################
from osv import osv,fields
import pooler
import time
class wizard_account_balance_gene_2(osv.osv_memory):
_name = "wizard.report.account.balance.gene.2"
_columns = {
'company_id': fields.many2one('res.company','Company',required=True),
'account_list': fields.many2many ('account.account','rel_wizard_account','account_list','account_id','Root accounts',required=True),
'state': fields.selection([('bydate','By Date'),('byperiod','By Period'),('all','By Date and Period'),('none','No Filter')],'Date/Period Filter'),
'fiscalyear': fields.many2one('account.fiscalyear','Fiscal year',help='Keep empty to use all open fiscal years to compute the balance',required=True),
'periods': fields.many2many('account.period','rel_wizard_period','wizard_id','period_id','Periods',help='All periods in the fiscal year if empty'),
'display_account': fields.selection([('bal_all','All'),('bal_solde', 'With balance'),('bal_mouvement','With movements')],'Display accounts'),
'display_account_level': fields.integer('Up to level',help='Display accounts up to this level (0 to show all)'),
'date_from': fields.date('Start date',required=True),
'date_to': fields.date('End date',required=True),
'tot_check': fields.boolean('Show Total'),
'lab_str': fields.char('Description', size= 128),
'inf_type': fields.selection([('bgen','Balance General'),('bcom','Balance Comprobacion'),('edogp','Estado Ganancias y Perdidas')],'Tipo Informe',required=True),
}
_defaults = {
'date_from': lambda *a: time.strftime('%Y-%m-%d'),
'date_to': lambda *a: time.strftime('%Y-%m-%d'),
'state': lambda *a:'byperiod',
'display_account_level': lambda *a: 0,
'inf_type': lambda *a:'bcom',
'company_id': lambda *a: 1,
'fiscalyear': lambda *a: 1,
'display_account': lambda *a:'bal_mouvement',
}
def _get_defaults(self, cr, uid, data, context=None):
if context is None:
context = {}
user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid, context=context)
if user.company_id:
company_id = user.company_id.id
else:
company_id = pooler.get_pool(cr.dbname).get('res.company').search(cr, uid, [('parent_id', '=', False)])[0]
data['form']['company_id'] = company_id
fiscalyear_obj = pooler.get_pool(cr.dbname).get('account.fiscalyear')
data['form']['fiscalyear'] = fiscalyear_obj.find(cr, uid)
data['form']['context'] = context
return data['form']
def _check_state(self, cr, uid, data, context=None):
if context is None:
context = {}
if data['form']['state'] == 'bydate':
self._check_date(cr, uid, data, context)
return data['form']
def _check_date(self, cr, uid, data, context=None):
if context is None:
context = {}
sql = """SELECT f.id, f.date_start, f.date_stop
FROM account_fiscalyear f
WHERE '%s' between f.date_start and f.date_stop """%(data['form']['date_from'])
cr.execute(sql)
res = cr.dictfetchall()
if res:
if (data['form']['date_to'] > res[0]['date_stop'] or data['form']['date_to'] < res[0]['date_start']):
raise wizard.except_wizard(_('UserError'),_('Date to must be set between %s and %s') % (res[0]['date_start'], res[0]['date_stop']))
else:
return 'report'
else:
raise wizard.except_wizard(_('UserError'),_('Date not in a defined fiscal year'))
def print_report(self, cr, uid, ids,data, context=None):
if context is None:
context = {}
data = {}
print "Context %s"%context
print "Data %s"%data
print "Lista IDS:%s"%ids
data['ids'] = context.get('active_ids', [])
data['model'] = context.get('active_model', 'ir.ui.menu')
data['form'] = self.read(cr, uid, ids[0])
print "Context Mod%s"%context
print "Data Mod%s"%data
print "Lista IDS Mod:%s"%ids
return {'type': 'ir.actions.report.xml', 'report_name': 'account.account.balance.gene.2', 'datas': data}
wizard_account_balance_gene_2()

89
wizard/wizard_account_balance_4_report.py

@ -0,0 +1,89 @@
# -*- encoding: utf-8 -*-
from osv import osv,fields
import pooler
import time
class wizard_report(osv.osv_memory):
_name = "wizard.report"
_columns = {
'company_id': fields.many2one('res.company','Company',required=True),
'account_list': fields.many2many ('account.account','rel_wizard_account','account_list','account_id','Root accounts',required=True),
'state': fields.selection([('bydate','By Date'),('byperiod','By Period'),('all','By Date and Period'),('none','No Filter')],'Date/Period Filter'),
'fiscalyear': fields.many2one('account.fiscalyear','Fiscal year',help='Keep empty to use all open fiscal years to compute the balance',required=True),
'periods': fields.many2many('account.period','rel_wizard_period','wizard_id','period_id','Periods',help='All periods in the fiscal year if empty'),
'display_account': fields.selection([('bal_all','All'),('bal_solde', 'With balance'),('bal_mouvement','With movements')],'Display accounts'),
'display_account_level': fields.integer('Up to level',help='Display accounts up to this level (0 to show all)'),
'date_from': fields.date('Start date',required=True),
'date_to': fields.date('End date',required=True),
'tot_check': fields.boolean('Show Total'),
'lab_str': fields.char('Description', size= 128),
'inf_type': fields.selection([('bgen','Balance General'),('bcom','Balance Comprobacion'),('edogp','Estado Ganancias y Perdidas')],'Tipo Informe',required=True),
}
_defaults = {
'date_from': lambda *a: time.strftime('%Y-%m-%d'),
'date_to': lambda *a: time.strftime('%Y-%m-%d'),
'state': lambda *a:'byperiod',
'display_account_level': lambda *a: 0,
'inf_type': lambda *a:'bcom',
'company_id': lambda *a: 1,
'fiscalyear': lambda *a: 1,
'display_account': lambda *a:'bal_mouvement',
}
def _get_defaults(self, cr, uid, data, context=None):
if context is None:
context = {}
user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid, context=context)
if user.company_id:
company_id = user.company_id.id
else:
company_id = pooler.get_pool(cr.dbname).get('res.company').search(cr, uid, [('parent_id', '=', False)])[0]
data['form']['company_id'] = company_id
fiscalyear_obj = pooler.get_pool(cr.dbname).get('account.fiscalyear')
data['form']['fiscalyear'] = fiscalyear_obj.find(cr, uid)
data['form']['context'] = context
return data['form']
def _check_state(self, cr, uid, data, context=None):
if context is None:
context = {}
if data['form']['state'] == 'bydate':
self._check_date(cr, uid, data, context)
return data['form']
def _check_date(self, cr, uid, data, context=None):
if context is None:
context = {}
sql = """SELECT f.id, f.date_start, f.date_stop
FROM account_fiscalyear f
WHERE '%s' between f.date_start and f.date_stop """%(data['form']['date_from'])
cr.execute(sql)
res = cr.dictfetchall()
if res:
if (data['form']['date_to'] > res[0]['date_stop'] or data['form']['date_to'] < res[0]['date_start']):
raise wizard.except_wizard(_('UserError'),_('Date to must be set between %s and %s') % (res[0]['date_start'], res[0]['date_stop']))
else:
return 'report'
else:
raise wizard.except_wizard(_('UserError'),_('Date not in a defined fiscal year'))
def print_report(self, cr, uid, ids,data, context=None):
if context is None:
context = {}
data = {}
print "Context %s"%context
print "Data %s"%data
print "Lista IDS:%s"%ids
data['ids'] = context.get('active_ids', [])
data['model'] = context.get('active_model', 'ir.ui.menu')
data['form'] = self.read(cr, uid, ids[0])
print "Context Mod%s"%context
print "Data Mod%s"%data
print "Lista IDS Mod:%s"%ids
return {'type': 'ir.actions.report.xml', 'report_name': 'wizard.report.reporte', 'datas': data}
wizard_report()

118
wizard/wizard_account_balance_report.py

@ -0,0 +1,118 @@
# -*- encoding: utf-8 -*-
###########################################################################
# Module Writen to OpenERP, Open Source Management Solution
# Copyright (C) OpenERP Venezuela (<http://openerp.com.ve>).
# All Rights Reserved
###############Credits######################################################
# Coded by: Humberto Arocha humberto@openerp.com.ve
# Angelica Barrios angelicaisabelb@gmail.com
# Jordi Esteve <jesteve@zikzakmedia.com>
# Javier Duran <javieredm@gmail.com>
# Planified by: Humberto Arocha
# Finance by: LUBCAN COL S.A.S http://www.lubcancol.com
# Audited by: Humberto Arocha humberto@openerp.com.ve
#############################################################################
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##############################################################################
from osv import osv,fields
import pooler
import time
class wizard_account_balance_gene(osv.osv_memory):
_name = "wizard.report.account.balance.gene"
_columns = {
'company_id': fields.many2one('res.company','Company',required=True),
'account_list': fields.many2many ('account.account','rel_wizard_account','account_list','account_id','Root accounts',required=True),
'state': fields.selection([('bydate','By Date'),('byperiod','By Period'),('all','By Date and Period'),('none','No Filter')],'Date/Period Filter'),
'fiscalyear': fields.many2one('account.fiscalyear','Fiscal year',help='Keep empty to use all open fiscal years to compute the balance',required=True),
'periods': fields.many2many('account.period','rel_wizard_period','wizard_id','period_id','Periods',help='All periods in the fiscal year if empty'),
'display_account': fields.selection([('bal_all','All'),('bal_solde', 'With balance'),('bal_mouvement','With movements')],'Display accounts'),
'display_account_level': fields.integer('Up to level',help='Display accounts up to this level (0 to show all)'),
'date_from': fields.date('Start date',required=True),
'date_to': fields.date('End date',required=True),
'tot_check': fields.boolean('Show Total'),
'lab_str': fields.char('Description', size= 128),
'inf_type': fields.selection([('bgen','Balance General'),('bcom','Balance Comprobacion'),('edogp','Estado Ganancias y Perdidas')],'Tipo Informe',required=True),
}
_defaults = {
'date_from': lambda *a: time.strftime('%Y-%m-%d'),
'date_to': lambda *a: time.strftime('%Y-%m-%d'),
'state': lambda *a:'byperiod',
'display_account_level': lambda *a: 0,
'inf_type': lambda *a:'bcom',
'company_id': lambda *a: 1,
'fiscalyear': lambda *a: 1,
'display_account': lambda *a:'bal_mouvement',
}
def _get_defaults(self, cr, uid, data, context=None):
if context is None:
context = {}
user = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid, context=context)
if user.company_id:
company_id = user.company_id.id
else:
company_id = pooler.get_pool(cr.dbname).get('res.company').search(cr, uid, [('parent_id', '=', False)])[0]
data['form']['company_id'] = company_id
fiscalyear_obj = pooler.get_pool(cr.dbname).get('account.fiscalyear')
data['form']['fiscalyear'] = fiscalyear_obj.find(cr, uid)
data['form']['context'] = context
return data['form']
def _check_state(self, cr, uid, data, context=None):
if context is None:
context = {}
if data['form']['state'] == 'bydate':
self._check_date(cr, uid, data, context)
return data['form']
def _check_date(self, cr, uid, data, context=None):
if context is None:
context = {}
sql = """SELECT f.id, f.date_start, f.date_stop
FROM account_fiscalyear f
WHERE '%s' between f.date_start and f.date_stop """%(data['form']['date_from'])
cr.execute(sql)
res = cr.dictfetchall()
if res:
if (data['form']['date_to'] > res[0]['date_stop'] or data['form']['date_to'] < res[0]['date_start']):
raise wizard.except_wizard(_('UserError'),_('Date to must be set between %s and %s') % (res[0]['date_start'], res[0]['date_stop']))
else:
return 'report'
else:
raise wizard.except_wizard(_('UserError'),_('Date not in a defined fiscal year'))
def print_report(self, cr, uid, ids,data, context=None):
if context is None:
context = {}
data = {}
print "Context %s"%context
print "Data %s"%data
print "Lista IDS:%s"%ids
data['ids'] = context.get('active_ids', [])
data['model'] = context.get('active_model', 'ir.ui.menu')
data['form'] = self.read(cr, uid, ids[0])
print "Context Mod%s"%context
print "Data Mod%s"%data
print "Lista IDS Mod:%s"%ids
return {'type': 'ir.actions.report.xml', 'report_name': 'account.account.balance.gene', 'datas': data}
wizard_account_balance_gene()

36
wizard/wizard_report_report.xml

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<report
auto="False"
id="wizard_report_reporte_4_col"
menu="True"
model="wizard.report"
name="wizard.report.reporte"
rml="l10n_co_account_financial_report/report/balance_full_4_cols.rml"
string="Balance de Comprobacion Wizard 4 Columnas"
header="False"
/>
<report
auto="False"
id="wizard_report_reporte_2_col"
menu="True"
model="wizard.report.account.balance.gene.2"
name="account.account.balance.gene.2"
rml="l10n_co_account_financial_report/report/balance_full_2_cols.rml"
string="Balance de Comprobacion Wizard 2 Columnas"
header="False"
/>
<report
auto="False"
id="wizard_report_reporte"
menu="True"
model="wizard.report.account.balance.gene"
name="account.account.balance.gene"
rml="l10n_co_account_financial_report/report/balance_full.rml"
string="Balance de Comprobacion Wizard"
header="False"
/>
</data>
</openerp>
Loading…
Cancel
Save