Browse Source

[ADD] Se agrega Mayor Analitico

pull/79/head
Humberto Arocha 12 years ago
parent
commit
24353820d9
  1. 11
      account_financial_report/model/account_financial_report.py
  2. 251
      account_financial_report/report/balance_full_4_cols_analytic_ledger.rml
  3. 63
      account_financial_report/report/parser.py
  4. 9
      account_financial_report/view/account_financial_report_view.xml
  5. 11
      account_financial_report/view/report.xml
  6. 9
      account_financial_report/view/wizard.xml
  7. 16
      account_financial_report/wizard/wizard.py

11
account_financial_report/model/account_financial_report.py

@ -46,6 +46,8 @@ class account_financial_report(osv.osv):
'fiscalyear_id': fields.many2one('account.fiscalyear','Fiscal year',help='Fiscal Year for this report',required=True),
'period_ids': fields.many2many('account.period','afr_period_rel','afr_id','period_id','Periods',help='All periods in the fiscal year if empty'),
'analytic_ledger': fields.boolean('Analytic Ledger', help="Allows to Generate an Analytic Ledger for accounts with moves. Available when Balance Sheet and 'Initial | Debit | Credit | YTD' are selected"),
'tot_check': fields.boolean('Summarize?', help='Checking will add a new line at the end of the Report which will Summarize Columns in Report'),
'lab_str': fields.char('Description', help='Description for the Summary', size= 128),
@ -92,6 +94,15 @@ class account_financial_report(osv.osv):
res['value'].update({'period_ids':[]})
return res
def onchange_analytic_ledger(self,cr,uid,ids,company_id,analytic_ledger,context=None):
if context is None:
context = {}
context['company_id']=company_id
res = {'value':{}}
cur_id = self.pool.get('res.company').browse(cr,uid,company_id,context=context).currency_id.id
res['value'].update({'currency_id':cur_id})
return res
def onchange_company_id(self,cr,uid,ids,company_id,context=None):
if context is None:
context = {}

251
account_financial_report/report/balance_full_4_cols_analytic_ledger.rml

@ -0,0 +1,251 @@
<?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="0.5cm" y1="1.0cm" width="20.5cm" height="23cm"/>
<pageGraphics>
<setFont name="Helvetica" size="9"/>
<image x="1.0cm" y="24.0cm" width="5.0cm">[[company.logo and company.logo or removeParentNode('image')]]</image>
<!--
<drawString x="1.0cm" y="24.5cm">[[company.logo and removeParentNode('para') or company.name]]</drawString>
-->
<place x="-3.5cm" y="22.50cm" width="19cm" height="5.0cm">
<blockTable colWidths="9.6cm,9.4cm" style="TITLE">
<tr>
<td><para style="TOP_TITLE"></para></td>
<td><para style="TITLE_CENTER_NAME">
<font>[[ (company.name and company.name or 'NOMBRE DE COMPANIA NO DISPONIBLE')]]</font>
<font>[[ company.partner_id.vat and ('- %s-%s-%s'%(company.partner_id.vat[2:3],company.partner_id.vat[3:11],company.partner_id.vat[11:12])) or '' ]]</font>
</para></td>
</tr>
<tr>
<td><para style="TOP_TITLE"></para></td>
<td><para style="TITLE_CENTER">[[ get_informe_text(data['form']) ]]</para></td>
</tr>
<tr>
<td><para style="TOP_TITLE"></para></td>
<td><para style="TITLE_CENTER">[[data['form'] and (' (Expresado en %s)'%( exchange_name(data['form']))) or '']]</para></td>
</tr>
<tr>
<td><para style="TOP_TITLE"></para></td>
<td><para style="TITLE_CENTER">[[data['form'] and get_month(data['form']) or '']]</para></td>
</tr>
</blockTable>
</place>
<drawRightString x="192mm" y="5mm">[[ get_informe_text(data['form']) ]] / Pág.: <pageNumber/>-<pageCount/> </drawRightString>
</pageGraphics>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="BODY_LINE">
<blockValign value="TOP"/>
<blockAlignment value="RIGHT"/>
<blockTopPadding length="1.0"/>
<blockBottomPadding length="1.0"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="0,1" stop="-1,-1" thickness='0.25'/>
</blockTableStyle>
<blockTableStyle id="TITLE">
<blockValign value="TOP"/>
</blockTableStyle>
<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_NEW"
fontName="Courier"
fontSize="7.0"
leading="10"
alignment="RIGHT"
spaceBefore="0.0"
spaceAfter="0.0"/>
<paraStyle name="TITLES_NEW"
fontName="Courier"
fontSize="7.0"
leading="10"
alignment="LEFT"
spaceBefore="0.0"
spaceAfter="0.0"/>
<paraStyle
name="TITLE_LEFT_ALIGN"
fontName="Helvetica-Bold"
fontSize="6.0"
leading="10"
alignment="RIGHT"
spaceBefore="0.0"
spaceAfter="0.0"/>
<paraStyle name="TOP_TITLE" fontName="Helvetica-Bold" fontSize="7" leftIndent="0.0" alignment="LEFT"/>
<paraStyle name="TITLES" fontName="Helvetica-Bold" fontSize="6.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="TITLE_CENTER" fontName="Helvetica-Bold" fontSize="7" leading="10" leftIndent="0.0" alignment="CENTER"/>
<paraStyle name="TITLE_CENTER_NAME" fontName="Helvetica-Bold" fontSize="12" leading="13" leftIndent="0.0" alignment="CENTER"/>
<paraStyle name="TITLE" alignment="CENTER" fontName="Helvetica" fontSize="18.0" leading="20" spaceBefore="-3.0" textColor="black"/>
</stylesheet>
<images/>
<story>
<para>[[setLang(user.context_lang)]]</para>
<blockTable colWidths="2.5cm,6.5cm,2.5cm,3.5cm,3.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['type']=='view' and a['name'].upper() or a['name'].title() ]]</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'] and a['balanceinit'] * a.get('change_sign') or 0.0, 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'] and a['balance'] * a.get('change_sign') or 0.0, digits=2, grouping=True) or '']]</font>
</para>
</td>
</tr>
</blockTable>
<section>
<blockTable colWidths="4.0cm,7.0cm,3.0cm,3.0cm,3.0cm,3.0cm,3.0cm" style="BODY_LINE" repeatRows="1">
[[ (a['type'] &lt;&gt; 'view') or removeParentNode('blockTable') ]]
<tr noRowsplits="1">
<td>
<para style="TITLE_LEFT_ALIGN">
<font>Date</font>
</para>
<para style="TITLE_LEFT_ALIGN">
<font>Period</font>
</para>
</td>
<td>
<para style="TITLES">Reference</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">Journal Entry</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN">Partner</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_NEW">[[ repeatIn(a['mayor'], 'm') ]]
<font>[[ set_fecha(m['date']) ]]</font>
</para>
<para style="TITLE_LEFT_ALIGN_NEW">
<font>[[ m['period'] ]]</font>
</para>
</td>
<td>
<para style="TITLES_NEW">
<font>[[ m['name'] ]] [[ m['ref'] and (' - Ref %s'%m['ref']) or '' ]] </font>
</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN_NEW">
<font>[[ m['entry'] ]]</font>
</para>
<para style="TITLE_LEFT_ALIGN_NEW">
<font>[[ m['journal'] ]]</font>
</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN_NEW">
<font>[[ m['partner'] ]]</font>
</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN_NEW">
<font>[[ formatLang(m['debit'], digits=2) or '0,00' ]]</font>
</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN_NEW">
<font>[[ formatLang(m['credit'], digits=2) or '0,00' ]]</font>
</para>
</td>
<td>
<para style="TITLE_LEFT_ALIGN_NEW">
<font>[[ formatLang(m['balance'], digits=2) or '0,00' ]]</font>
</para>
</td>
</tr>
</blockTable>
</section>
</story>
</document>

63
account_financial_report/report/parser.py

@ -155,7 +155,55 @@ class account_balance(report_sxw.rml_parse):
return [brw.id for brw in rc_obj.browse(self.cr, self.uid, company_id).credit_account_ids]
else:
return [brw.id for brw in rc_obj.browse(self.cr, self.uid, company_id).debit_account_ids]
def _get_analytic_ledger(self, account, ctx={}):
res = []
if account['type'] in ('other','liquidity','receivable','payable'):
#~ TODO: CUANDO EL PERIODO ESTE VACIO LLENARLO CON LOS PERIODOS DEL EJERCICIO
#~ FISCAL, SIN LOS PERIODOS ESPECIALES
periods = str(tuple(ctx['periods']))
where = """where aml.period_id in %s and aa.id = %s and aml.state <> 'draft'"""%(periods,account['id'])
sql_detalle = """select aml.id as id, aj.name as diario, aa.name as descripcion,
(select name from res_partner where aml.partner_id = id) as partner,
aa.code as cuenta, aml.name as name,
aml.ref as ref,
case when aml.debit is null then 0.00 else aml.debit end as debit,
case when aml.credit is null then 0.00 else aml.credit end as credit,
(select code from account_analytic_account where aml.analytic_account_id = id) as analitica,
aml.date as fecha, ap.name as periodo,
am.name as asiento
from account_move_line aml
inner join account_journal aj on aj.id = aml.journal_id
inner join account_account aa on aa.id = aml.account_id
inner join account_period ap on ap.id = aml.period_id
inner join account_move am on am.id = aml.move_id """ + where +\
""" order by fecha"""
self.cr.execute(sql_detalle)
resultat = self.cr.dictfetchall()
balance = account['balanceinit']
#~ print balance
for det in resultat:
balance += det['debit'] - det['credit']
res.append({
'id': det['id'],
'date': det['fecha'],
'journal':det['diario'],
'partner':det['partner'],
'name':det['name'],
'entry':det['asiento'],
'ref': det['ref'],
'debit': det['debit'],
'credit': det['credit'],
'analytic': det['analitica'],
'period': det['periodo'],
'balance': balance,
})
return res
def lines(self, form, level=0):
"""
Returns all the data needed for the report lines
@ -546,7 +594,12 @@ class account_balance(report_sxw.rml_parse):
else:
# Include all accounts
to_include = True
#~ ANALYTIC LEDGER
if to_include and form['analytic_ledger'] and form['columns']=='four' and form['inf_type'] == 'BS' and res['type'] in ('other','liquidity','receivable','payable'):
res['mayor'] = self._get_analytic_ledger(res,ctx=ctx_end)
if to_include:
result_acc.append(res)
#
@ -649,6 +702,12 @@ report_sxw.report_sxw('report.afr.4cols',
'account_financial_report/report/balance_full_4_cols.rml',
parser=account_balance,
header=False)
report_sxw.report_sxw('report.afr.analytic.ledger',
'wizard.report',
'account_financial_report/report/balance_full_4_cols_analytic_ledger.rml',
parser=account_balance,
header=False)
report_sxw.report_sxw('report.afr.5cols',
'wizard.report',

9
account_financial_report/view/account_financial_report_view.xml

@ -15,12 +15,19 @@
<group colspan="2">
<separator string="Company Info" colspan="4"/>
<field name="company_id" on_change='onchange_company_id(company_id)' colspan="4"/>
<field name="currency_id" domain="[('company_id','=',company_id)]" colspan="4"/>
<field name="currency_id"
domain="[('company_id','=',company_id)]"
attrs="{'readonly':[('analytic_ledger','=',True)]}"
colspan="4"/>
</group>
<group colspan="2">
<separator string="Report Info" colspan="4"/>
<field name="inf_type" colspan="4"/>
<field name="columns" on_change='onchange_columns(columns,fiscalyear_id,period_ids)' colspan="4"/>
<field name="analytic_ledger" colspan="4"
attrs="{'readonly':['|',('columns','!=','four'),('inf_type','!=','BS')],}"
on_change='onchange_analytic_ledger(company_id,analytic_ledger)'
/>
</group>
</group>
<group colspan='4'>

11
account_financial_report/view/report.xml

@ -34,6 +34,17 @@
string="Balance 4 Columnas"
header="False"
/>
<report
auto="False"
id="analytic_ledger_report"
menu="True"
model="wizard.report"
name="afr.analytic.ledger"
rml="account_financial_report/report/balance_full_4_cols_analytic_ledger.rml"
string="Analytic Ledger"
header="False"
/>
<report
auto="False"

9
account_financial_report/view/wizard.xml

@ -12,13 +12,20 @@
<group colspan="2">
<separator string="Company Info" colspan="4"/>
<field name="company_id" on_change='onchange_company_id(company_id)' colspan="4"/>
<field name="currency_id" domain="[('company_id','=',company_id)]" colspan="4"/>
<field name="currency_id"
domain="[('company_id','=',company_id)]"
attrs="{'readonly':[('analytic_ledger','=',True)]}"
colspan="4"/>
</group>
<group colspan="2">
<separator string="Report Info" colspan="4"/>
<field name="afr_id" on_change='onchange_afr_id(afr_id)' colspan="4"/>
<field name="inf_type" colspan="4"/>
<field name="columns" on_change='onchange_columns(columns,fiscalyear,periods)' colspan="4"/>
<field name="analytic_ledger" colspan="4"
attrs="{'readonly':['|',('columns','!=','four'),('inf_type','!=','BS')],}"
on_change='onchange_analytic_ledger(company_id,analytic_ledger)'
/>
</group>
</group>
<group colspan='4'>

16
account_financial_report/wizard/wizard.py

@ -48,6 +48,8 @@ class wizard_report(osv.osv_memory):
'fiscalyear': fields.many2one('account.fiscalyear','Fiscal year',help='Fiscal Year for this report',required=True),
'periods': fields.many2many('account.period','rel_wizard_period','wizard_id','period_id','Periods',help='All periods in the fiscal year if empty'),
'analytic_ledger': fields.boolean('Analytic Ledger', help="Allows to Generate an Analytic Ledger for accounts with moves. Available when Balance Sheet and 'Initial | Debit | Credit | YTD' are selected"),
'tot_check': fields.boolean('Summarize?', help='Checking will add a new line at the end of the Report which will Summarize Columns in Report'),
'lab_str': fields.char('Description', help='Description for the Summary', size= 128),
@ -81,6 +83,15 @@ class wizard_report(osv.osv_memory):
res['value'].update({'periods':[]})
return res
def onchange_analytic_ledger(self,cr,uid,ids,company_id,analytic_ledger,context=None):
if context is None:
context = {}
context['company_id']=company_id
res = {'value':{}}
cur_id = self.pool.get('res.company').browse(cr,uid,company_id,context=context).currency_id.id
res['value'].update({'currency_id':cur_id})
return res
def onchange_company_id(self,cr,uid,ids,company_id,context=None):
if context is None:
context = {}
@ -191,7 +202,10 @@ class wizard_report(osv.osv_memory):
if data['form']['columns'] == 'two':
name = 'afr.2cols'
if data['form']['columns'] == 'four':
name = 'afr.4cols'
if data['form']['analytic_ledger'] and data['form']['inf_type'] == 'BS':
name = 'afr.analytic.ledger'
else:
name = 'afr.4cols'
if data['form']['columns'] == 'five':
name = 'afr.5cols'
if data['form']['columns'] == 'qtr':

Loading…
Cancel
Save