Browse Source

[MIG] account_financial_report_horizontal (#249)

pull/341/head
Holger Brunn 8 years ago
committed by mreficent
parent
commit
0229585e34
  1. 2
      account_financial_report_horizontal/README.rst
  2. 31
      account_financial_report_horizontal/__manifest__.py
  3. 20
      account_financial_report_horizontal/models/__init__.py
  4. 43
      account_financial_report_horizontal/models/account_financial_report.py
  5. 2
      account_financial_report_horizontal/report/__init__.py
  6. 64
      account_financial_report_horizontal/report/report_financial.py
  7. 20
      account_financial_report_horizontal/report/report_financial.xml
  8. 4
      account_financial_report_horizontal/tests/__init__.py
  9. 20
      account_financial_report_horizontal/tests/test_account_financial_report_horizontal.py

2
account_financial_report_horizontal/README.rst

@ -11,8 +11,6 @@ Usage
After the module is installed, the balance sheet and profit and loss reports will be in landscape mode with assets left and liabilities right. After the module is installed, the balance sheet and profit and loss reports will be in landscape mode with assets left and liabilities right.
* https://www.odoo.com/forum/help-1
Credits Credits
======= =======

31
account_financial_report_horizontal/__manifest__.py

@ -1,28 +1,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2012 Therp BV (<http://therp.nl>),
# Copyright (C) 2013 Agile Business Group sagl
# (<http://www.agilebg.com>) (<lorenzo.battistini@agilebg.com>)
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
# © 2012-2016 Therp BV <http://therp.nl>
# © 2013 Agile Business Group sagl <http://www.agilebg.com>
# <lorenzo.battistini@agilebg.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{ {
"name": "Accounting Financial Reports Horizontal", "name": "Accounting Financial Reports Horizontal",
"version": "8.0.0.3.0",
"version": "9.0.0.0.0",
"author": "Therp BV,Agile Business Group,Odoo Community Association (OCA)", "author": "Therp BV,Agile Business Group,Odoo Community Association (OCA)",
"category": 'Accounting & Finance', "category": 'Accounting & Finance',
'website': 'https://github.com/OCA/account-financial-reporting', 'website': 'https://github.com/OCA/account-financial-reporting',
@ -33,8 +16,4 @@
"data/ir_actions_report_xml.xml", "data/ir_actions_report_xml.xml",
"report/report_financial.xml", "report/report_financial.xml",
], ],
'demo': [],
'test': [],
'active': False,
'installable': False,
} }

20
account_financial_report_horizontal/models/__init__.py

@ -1,21 +1,3 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2015 Therp BV (<http://therp.nl>).
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
# © 2015 Therp BV <http://therp.nl>
from . import account_financial_report from . import account_financial_report

43
account_financial_report_horizontal/models/account_financial_report.py

@ -1,23 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2015 Therp BV (<http://therp.nl>).
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
# © 2015 Therp BV <http://therp.nl>
from openerp import models, api from openerp import models, api
@ -29,11 +11,11 @@ class AccountFinancialReport(models.Model):
self.ensure_one() self.ensure_one()
if self.type == 'accounts': if self.type == 'accounts':
for account in self.account_ids: for account in self.account_ids:
if account.user_type.report_type not in report_types:
if account.user_type_id.type not in report_types:
return False return False
elif self.type == 'account_type': elif self.type == 'account_type':
for account_type in self.account_type_ids: for account_type in self.account_type_ids:
if account_type.report_type not in report_types:
if account_type.type not in report_types:
return False return False
elif self.type == 'account_report': elif self.type == 'account_report':
# this will have mixed types usually, we rely upon this being # this will have mixed types usually, we rely upon this being
@ -49,23 +31,24 @@ class AccountFinancialReport(models.Model):
if self.env.context.get('account_financial_report_horizontal_side'): if self.env.context.get('account_financial_report_horizontal_side'):
side = self.env.context['account_financial_report_horizontal_side'] side = self.env.context['account_financial_report_horizontal_side']
report_types = { report_types = {
'left': ['income', 'asset', 'none'],
'right': ['expense', 'liability', 'none']
'left': ['receivable', 'liquidity', 'other'],
'right': ['payable', 'other']
}[side] }[side]
last_good_report = None
last_bad_report = None
for report in self.browse(reports):
last_good_report = self.browse([])
last_bad_report = self.browse([])
result = self.browse([])
for report in reports:
if not report.parent_id: if not report.parent_id:
yield report.id
result += report
# don't check children if we already checked the parent # don't check children if we already checked the parent
elif report.parent_id == last_bad_report: elif report.parent_id == last_bad_report:
continue continue
elif report.parent_id == last_good_report\ elif report.parent_id == last_good_report\
or report._has_exclusively_report_types(report_types): or report._has_exclusively_report_types(report_types):
last_good_report = report last_good_report = report
yield report.id
result += report
else: else:
last_bad_report = report last_bad_report = report
return result
else: else:
for report_id in reports:
yield report_id
return reports

2
account_financial_report_horizontal/report/__init__.py

@ -1 +1,3 @@
# -*- coding: utf-8 -*-
# © 2015 Therp BV <http://therp.nl>
from . import report_financial from . import report_financial

64
account_financial_report_horizontal/report/report_financial.py

@ -1,54 +1,28 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# This module copyright (C) 2015 Therp BV (<http://therp.nl>).
#
# 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 <http://www.gnu.org/licenses/>.
#
##############################################################################
import copy
from openerp import models
from openerp.addons.account.report.account_financial_report import\
report_account_common
# © 2016 Therp BV <http://therp.nl>
from openerp import api, models
class report_account_common_horizontal(report_account_common):
def __init__(self, cr, uid, name, context=None):
super(report_account_common_horizontal, self).__init__(
cr, uid, name, context=context)
self.localcontext.update({
'get_left_lines': self.get_left_lines,
'get_right_lines': self.get_right_lines,
})
class ReportFinancial(models.AbstractModel):
_inherit = 'report.account.report_financial'
def get_lines(self, data, side=None):
data = copy.deepcopy(data)
if data['form']['used_context'] is None:
data['form']['used_context'] = {}
data['form']['used_context'].update(
account_financial_report_horizontal_side=side)
return super(report_account_common_horizontal, self).get_lines(
data)
def get_account_lines(self, data, side=None):
return super(
ReportFinancial, self.with_context(
account_financial_report_horizontal_side=side,
)
).get_account_lines(data)
def get_left_lines(self, data): def get_left_lines(self, data):
return self.get_lines(data, side='left')
return self.get_account_lines(data, side='left')
def get_right_lines(self, data): def get_right_lines(self, data):
return self.get_lines(data, side='right')
return self.get_account_lines(data, side='right')
class ReportFinancial(models.AbstractModel):
_inherit = 'report.account.report_financial'
_wrapped_report_class = report_account_common_horizontal
@api.multi
def render_html(self, data):
data.setdefault('form', {}).update(
get_left_lines=self.get_left_lines,
get_right_lines=self.get_right_lines,
)
return super(ReportFinancial, self).render_html(data)

20
account_financial_report_horizontal/report/report_financial.xml

@ -10,15 +10,15 @@
<!-- filtered without credit/debit /--> <!-- filtered without credit/debit /-->
<xpath expr="//div[@class='page']/table" position="replace"> <xpath expr="//div[@class='page']/table" position="replace">
<div class="row"> <div class="row">
<div class="col-xs-6" t-foreach="[get_left_lines, get_right_lines]" t-as="get_lines_function">
<div class="col-xs-6" t-foreach="[data['get_left_lines'], data['get_right_lines']]" t-as="get_lines_function">
<table class="table table-condensed"> <table class="table table-condensed">
<thead> <thead>
<tr> <tr>
<th>Name</th> <th>Name</th>
<th class="text-right" t-if="data['form']['debit_credit'] == 1">Debit</th>
<th class="text-right" t-if="data['form']['debit_credit'] == 1">Credit</th>
<th class="text-right" t-if="data['debit_credit'] == 1">Debit</th>
<th class="text-right" t-if="data['debit_credit'] == 1">Credit</th>
<th class="text-right">Balance</th> <th class="text-right">Balance</th>
<th class="text-right" t-if="data['form']['enable_filter'] == 1 and not data['form']['debit_credit']"><span t-esc="data['form']['label_filter']"/></th>
<th class="text-right" t-if="data['enable_filter'] == 1 and not data['debit_credit']"><span t-esc="data['label_filter']"/></th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -31,14 +31,14 @@
<span style="color: white;" t-esc="'..' * a.get('level', 0)"/> <span style="color: white;" t-esc="'..' * a.get('level', 0)"/>
<span t-att-style="style" t-esc="a.get('name')"/> <span t-att-style="style" t-esc="a.get('name')"/>
</td> </td>
<td class="text-right" style="white-space: nowrap;" t-if="data['form']['debit_credit'] == 1">
<span t-att-style="style" t-esc="formatLang(a.get('debit'), currency_obj=res_company.currency_id)"/>
<td class="text-right" style="white-space: nowrap;" t-if="['debit_credit'] == 1">
<span t-att-style="style" t-esc="a.get('debit')" t-esc-options='{"widget": "monetary", "display_currency": "res_company.currency_id"}'/>
</td> </td>
<td class="text-right" style="white-space: nowrap;" t-if="data['form']['debit_credit'] == 1">
<span t-att-style="style" t-esc="formatLang(a.get('credit'), currency_obj=res_company.currency_id)"/>
<td class="text-right" style="white-space: nowrap;" t-if="data['debit_credit'] == 1">
<span t-att-style="style" t-esc="a.get('credit')" t-esc-options='{"widget": "monetary", "display_currency": "res_company.currency_id"}'/>
</td> </td>
<td class="text-right"><span t-att-style="style" t-esc="formatLang(a.get('balance'), currency_obj=res_company.currency_id)"/></td>
<td class="text-right" t-if="data['form']['enable_filter'] == 1 and not data['form']['debit_credit']"><span t-att-style="style" t-esc="formatLang(a.get('balance_cmp'), currency_obj=res_company.currency_id)"/></td>
<td class="text-right"><span t-att-style="style" t-esc="a.get('balance')" t-esc-options='{"widget": "monetary", "display_currency": "res_company.currency_id"}'/></td>
<td class="text-right" t-if="data['enable_filter'] == 1 and not data['debit_credit']"><span t-att-style="style" t-esc="a.get('balance_cmp')" t-esc-options='{"widget": "monetary", "display_currency": "res_company.currency_id"}'/></td>
</t> </t>
</tr> </tr>
</tbody> </tbody>

4
account_financial_report_horizontal/tests/__init__.py

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# © 2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import test_account_financial_report_horizontal

20
account_financial_report_horizontal/tests/test_account_financial_report_horizontal.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# © 2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from lxml import etree
from openerp.tests.common import TransactionCase
class TestAccountFinancialReportHorizontal(TransactionCase):
def test_account_financial_report_horizontal(self):
action = self.env['accounting.report'].with_context(
active_id=self.env.ref('account.menu_account_report_pl').id,
active_model='ir.ui.view',
).create({}).check_report()
data = action['data']
html = self.env['report'].with_context(action['context']).get_html(
self.env[data['model']].browse(data['ids']),
action['report_name'],
data=data,
)
self.assertTrue(etree.fromstring(html).xpath('//div[@class="row"]'))
Loading…
Cancel
Save