Browse Source

[IMP] account_financial_report:

- adapt the wizards to multicompany
- improve titles of reports
pull/490/head
mreficent 7 years ago
committed by Jordi Ballester Alomar
parent
commit
6262655082
  1. 1
      account_financial_report_qweb/README.rst
  2. 1
      account_financial_report_qweb/readme/CONTRIBUTORS.rst
  3. 4
      account_financial_report_qweb/report/abstract_report_xlsx.py
  4. 6
      account_financial_report_qweb/report/aged_partner_balance_xlsx.py
  5. 6
      account_financial_report_qweb/report/general_ledger_xlsx.py
  6. 6
      account_financial_report_qweb/report/journal_report_xlsx.py
  7. 6
      account_financial_report_qweb/report/open_items_xlsx.py
  8. 7
      account_financial_report_qweb/report/templates/aged_partner_balance.xml
  9. 8
      account_financial_report_qweb/report/templates/general_ledger.xml
  10. 9
      account_financial_report_qweb/report/templates/journal.xml
  11. 10
      account_financial_report_qweb/report/templates/layouts.xml
  12. 7
      account_financial_report_qweb/report/templates/open_items.xml
  13. 8
      account_financial_report_qweb/report/templates/trial_balance.xml
  14. 6
      account_financial_report_qweb/report/trial_balance_xlsx.py
  15. 14
      account_financial_report_qweb/wizard/aged_partner_balance_wizard.py
  16. 11
      account_financial_report_qweb/wizard/aged_partner_balance_wizard_view.xml
  17. 29
      account_financial_report_qweb/wizard/general_ledger_wizard.py
  18. 19
      account_financial_report_qweb/wizard/general_ledger_wizard_view.xml
  19. 14
      account_financial_report_qweb/wizard/open_items_wizard.py
  20. 14
      account_financial_report_qweb/wizard/open_items_wizard_view.xml
  21. 25
      account_financial_report_qweb/wizard/trial_balance_wizard.py
  22. 22
      account_financial_report_qweb/wizard/trial_balance_wizard_view.xml

1
account_financial_report_qweb/README.rst

@ -101,6 +101,7 @@ Contributors
* Alexis de Lattre <alexis@via.ecp.fr>
* Mihai Fekete <feketemihai@gmail.com>
* Benjamin Willig <benjamin.willig@acsone.eu>
* Miquel Raïch <miquel.raich@eficent.com>
Much of the work in this module was done at a sprint in Sorrento, Italy in
April 2016.

1
account_financial_report_qweb/readme/CONTRIBUTORS.rst

@ -15,6 +15,7 @@
* Alexis de Lattre <alexis@via.ecp.fr>
* Mihai Fekete <feketemihai@gmail.com>
* Benjamin Willig <benjamin.willig@acsone.eu>
* Miquel Raïch <miquel.raich@eficent.com>
Much of the work in this module was done at a sprint in Sorrento, Italy in
April 2016.

4
account_financial_report_qweb/report/abstract_report_xlsx.py

@ -43,7 +43,7 @@ class AbstractReportXslx(ReportXlsx):
self._define_formats(workbook)
report_name = self._get_report_name()
report_name = self._get_report_name(objects)
report_footer = self._get_report_footer()
filters = self._get_report_filters(report)
self.columns = self._get_report_columns(report)
@ -360,7 +360,7 @@ class AbstractReportXslx(ReportXlsx):
def _generate_report_content(self, workbook, report):
pass
def _get_report_name(self):
def _get_report_name(self, objects):
"""
Allow to define the report name.
Report name will be used as sheet name and as report title.

6
account_financial_report_qweb/report/aged_partner_balance_xlsx.py

@ -15,8 +15,10 @@ class AgedPartnerBalanceXslx(abstract_report_xlsx.AbstractReportXslx):
super(AgedPartnerBalanceXslx, self).__init__(
name, table, rml, parser, header, store)
def _get_report_name(self):
return _('Aged Partner Balance')
def _get_report_name(self, objects):
report = objects
return _('Aged Partner Balance - %s - %s') % (
report.company_id.name, report.company_id.currency_id.name)
def _get_report_columns(self, report):
if not report.show_move_line_details:

6
account_financial_report_qweb/report/general_ledger_xlsx.py

@ -16,8 +16,10 @@ class GeneralLedgerXslx(abstract_report_xlsx.AbstractReportXslx):
super(GeneralLedgerXslx, self).__init__(
name, table, rml, parser, header, store)
def _get_report_name(self):
return _('General Ledger')
def _get_report_name(self, objects):
report = objects
return _('General Ledger - %s - %s') % (
report.company_id.name, report.company_id.currency_id.name)
def _get_report_columns(self, report):
res = {

6
account_financial_report_qweb/report/journal_report_xlsx.py

@ -17,8 +17,10 @@ class JournalXslx(abstract_report_xlsx.AbstractReportXslx):
super(JournalXslx, self).__init__(
name, table, rml, parser, header, store)
def _get_report_name(self):
return _('Journal')
def _get_report_name(self, objects):
report = objects
return _('Journal Ledger - %s - %s') % (
report.company_id.name, report.company_id.currency_id.name)
def _get_report_columns(self, report):
columns = [

6
account_financial_report_qweb/report/open_items_xlsx.py

@ -15,8 +15,10 @@ class OpenItemsXslx(abstract_report_xlsx.AbstractReportXslx):
super(OpenItemsXslx, self).__init__(
name, table, rml, parser, header, store)
def _get_report_name(self):
return _('Open Items')
def _get_report_name(self, objects):
report = objects
return _('Open Items - %s - %s') % (
report.company_id.name, report.company_id.currency_id.name)
def _get_report_columns(self, report):
res = {

7
account_financial_report_qweb/report/templates/aged_partner_balance.xml

@ -16,10 +16,13 @@
<t t-set="show_move_line_details" t-value="o.show_move_line_details"/>
<!-- Defines global variables used by internal layout -->
<t t-set="title">Aged Partner Balance</t>
<t t-set="title" >Aged Partner Balance - <t t-raw="o.company_id.name"/> - <t t-raw="o.company_id.currency_id.name"/></t>
<t t-set="res_company" t-value="o.company_id"/>
<div class="page">
<div class="page data_table">
<div class="row">
<h4 class="mt0" t-esc="title or 'Odoo Report'" style="text-align: center;"/>
</div>
<!-- Display filters -->
<t t-call="account_financial_report_qweb.report_aged_partner_balance_filters"/>

8
account_financial_report_qweb/report/templates/general_ledger.xml

@ -18,12 +18,14 @@
<t t-set="show_cost_center" t-value="o.show_cost_center"/>
<t t-set="foreign_currency" t-value="o.foreign_currency"/>
<!-- Defines global variables used by internal layout -->
<t t-set="title">General Ledger</t>
<t t-set="title" style="text-align: center;">General Ledger - <t t-raw="o.company_id.name"/> - <t t-raw="o.company_id.currency_id.name"/></t>
<t t-set="res_company" t-value="o.company_id"/>
<div class="page">
<div class="page data_table">
<div class="row">
<h4 class="mt0" t-esc="title or 'Odoo Report'" style="text-align: center;"/>
</div>
<!-- Display filters -->
<t t-call="account_financial_report_qweb.report_general_ledger_filters"/>
<t t-foreach="o.account_ids" t-as="account">
<div class="page_break">
<!-- Display account header -->

9
account_financial_report_qweb/report/templates/journal.xml

@ -12,12 +12,15 @@
</template>
<template id="report_journal_qweb_base">
<t t-set="title">Journal Ledger</t>
<t t-set="title" >Journal Ledger - <t t-raw="o.company_id.name"/> - <t t-raw="o.company_id.currency_id.name"/></t>
<t t-set="company_name" t-value="o.company_id.name"/>
<t t-set="display_currency" t-value="o.foreign_currency"/>
<t t-set="display_account_name" t-value="o.with_account_name"/>
<div class="page">
<t t-set="company_name" t-value="o.company_id.name"/>
<div class="page data_table">
<div class="row">
<h4 class="mt0" t-esc="title or 'Odoo Report'" style="text-align: center;"/>
</div>
<t t-if="o.group_option == 'none'">
<div class="page_break">
<t t-call="account_financial_report_qweb.report_journal_qweb_all"/>

10
account_financial_report_qweb/report/templates/layouts.xml

@ -8,16 +8,6 @@
</template>
<template id="account_financial_report_qweb.internal_layout">
<div class="header">
<div class="row">
<div class="col-xs-6">
<span t-esc="title"/>
</div>
<div class="col-xs-6 text-right">
<span t-esc="company_name"/>
</div>
</div>
</div>
<t t-raw="0" />
<div class="footer">
<div class="row">

7
account_financial_report_qweb/report/templates/open_items.xml

@ -13,11 +13,14 @@
<template id="report_open_items_base">
<!-- Defines global variables used by internal layout -->
<t t-set="title">Open Items</t>
<t t-set="title" >Open Items - <t t-raw="o.company_id.name"/> - <t t-raw="o.company_id.currency_id.name"/></t>
<t t-set="company_name" t-value="o.company_id.name"/>
<t t-set="res_company" t-value="o.company_id"/>
<t t-set="foreign_currency" t-value="o.foreign_currency"/>
<div class="page">
<div class="page data_table">
<div class="row">
<h4 class="mt0" t-esc="title or 'Odoo Report'" style="text-align: center;"/>
</div>
<!-- Display filters -->
<t t-call="account_financial_report_qweb.report_open_items_qweb_filters"/>

8
account_financial_report_qweb/report/templates/trial_balance.xml

@ -16,11 +16,13 @@
<t t-set="show_partner_details" t-value="o.show_partner_details"/>
<t t-set="foreign_currency" t-value="o.foreign_currency"/>
<!-- Defines global variables used by internal layout -->
<t t-set="title">Trial Balance</t>
<t t-set="title" >Trial Balance - <t t-raw="o.company_id.name"/> - <t t-raw="o.company_id.currency_id.name"/></t>
<t t-set="company_name" t-value="o.company_id.name"/>
<t t-set="res_company" t-value="o.company_id"/>
<div class="page">
<div class="page data_table">
<div class="row">
<h4 class="mt0" t-esc="title or 'Odoo Report'" style="text-align: center;"/>
</div>
<!-- Display filters -->
<t t-call="account_financial_report_qweb.report_trial_balance_qweb_filters"/>
<div class="act_as_table list_table" style="margin-top: 10px;"/>

6
account_financial_report_qweb/report/trial_balance_xlsx.py

@ -15,8 +15,10 @@ class TrialBalanceXslx(abstract_report_xlsx.AbstractReportXslx):
super(TrialBalanceXslx, self).__init__(
name, table, rml, parser, header, store)
def _get_report_name(self):
return _('Trial Balance')
def _get_report_name(self, objects):
report = objects
return _('Trial Balance - %s - %s') % (
report.company_id.name, report.company_id.currency_id.name)
def _get_report_columns(self, report):
if not report.show_partner_details:

14
account_financial_report_qweb/wizard/aged_partner_balance_wizard.py

@ -17,6 +17,7 @@ class AgedPartnerBalance(models.TransientModel):
company_id = fields.Many2one(
comodel_name='res.company',
default=lambda self: self.env.user.company_id,
required=True,
string='Company'
)
date_at = fields.Date(required=True,
@ -38,11 +39,22 @@ class AgedPartnerBalance(models.TransientModel):
)
show_move_line_details = fields.Boolean()
@api.onchange('company_id')
def onchange_company_id(self):
"""Handle company change."""
if self.company_id and self.partner_ids:
self.partner_ids = self.partner_ids.filtered(
lambda p: p.company_id == self.company_id or
not p.company_id)
if self.company_id and self.account_ids:
self.account_ids = self.account_ids.filtered(
lambda a: a.company_id == self.company_id)
@api.onchange('receivable_accounts_only', 'payable_accounts_only')
def onchange_type_accounts_only(self):
"""Handle receivable/payable accounts only change."""
if self.receivable_accounts_only or self.payable_accounts_only:
domain = []
domain = [('company_id', '=', self.company_id.id)]
if self.receivable_accounts_only and self.payable_accounts_only:
domain += [('internal_type', 'in', ('receivable', 'payable'))]
elif self.receivable_accounts_only:

11
account_financial_report_qweb/wizard/aged_partner_balance_wizard_view.xml

@ -21,13 +21,20 @@
</group>
<group name="partner_filter" col="1">
<label for="partner_ids"/>
<field name="partner_ids" nolabel="1" widget="many2many_tags" options="{'no_create': True}"/>
<field name="partner_ids" nolabel="1"
widget="many2many_tags"
options="{'no_create': True}"
domain="['|',('company_id','=',company_id), ('company_id','=',False)]"/>
</group>
<group name="account_filter" col="4">
<label for="account_ids" colspan="4"/>
<field name="receivable_accounts_only"/>
<field name="payable_accounts_only"/>
<field name="account_ids" nolabel="1" widget="many2many_tags" options="{'no_create': True}" colspan="4"/>
<field name="account_ids" nolabel="1"
widget="many2many_tags"
options="{'no_create': True}"
domain="[('company_id','=',company_id)]"
colspan="4"/>
</group>
<footer>
<button name="button_export_html" string="View"

29
account_financial_report_qweb/wizard/general_ledger_wizard.py

@ -5,8 +5,9 @@
# Copyright 2017 Akretion - Alexis de Lattre
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models, fields, api
from odoo import api, fields, models, _
from odoo.tools.safe_eval import safe_eval
from odoo.exceptions import ValidationError
class GeneralLedgerReportWizard(models.TransientModel):
@ -18,6 +19,7 @@ class GeneralLedgerReportWizard(models.TransientModel):
company_id = fields.Many2one(
comodel_name='res.company',
default=lambda self: self.env.user.company_id,
required=True,
string='Company'
)
date_range_id = fields.Many2one(
@ -95,6 +97,19 @@ class GeneralLedgerReportWizard(models.TransientModel):
('company_id', '=', self.company_id.id)
])
self.not_only_one_unaffected_earnings_account = count != 1
if self.company_id and self.date_range_id.company_id and \
self.date_range_id.company_id != self.company_id:
self.date_range_id = False
if self.company_id and self.partner_ids:
self.partner_ids = self.partner_ids.filtered(
lambda p: p.company_id == self.company_id or
not p.company_id)
if self.company_id and self.account_ids:
self.account_ids = self.account_ids.filtered(
lambda a: a.company_id == self.company_id)
if self.company_id and self.cost_center_ids:
self.cost_center_ids = self.cost_center_ids.filtered(
lambda c: c.company_id == self.company_id)
@api.onchange('date_range_id')
def onchange_date_range_id(self):
@ -102,11 +117,21 @@ class GeneralLedgerReportWizard(models.TransientModel):
self.date_from = self.date_range_id.date_start
self.date_to = self.date_range_id.date_end
@api.multi
@api.constrains('company_id', 'date_range_id')
def _check_company_id_date_range_id(self):
for rec in self.sudo():
if rec.company_id and rec.date_range_id.company_id and\
rec.company_id != rec.date_range_id.company_id:
raise ValidationError(
_('The Company in the General Ledger Report Wizard and in '
'Date Range must be the same.'))
@api.onchange('receivable_accounts_only', 'payable_accounts_only')
def onchange_type_accounts_only(self):
"""Handle receivable/payable accounts only change."""
if self.receivable_accounts_only or self.payable_accounts_only:
domain = []
domain = [('company_id', '=', self.company_id.id)]
if self.receivable_accounts_only and self.payable_accounts_only:
domain += [('internal_type', 'in', ('receivable', 'payable'))]
elif self.receivable_accounts_only:

19
account_financial_report_qweb/wizard/general_ledger_wizard_view.xml

@ -13,7 +13,8 @@
<div attrs="{'invisible': [('not_only_one_unaffected_earnings_account', '=', True)]}">
<group name="filters">
<group name="date_range">
<field name="date_range_id" domain="['|',('company_id','=',company_id), ('company_id','=',False)]"/>
<field name="date_range_id"
domain="['|',('company_id','=',company_id), ('company_id','=',False)]"/>
<field name="date_from"/>
<field name="date_to"/>
<field name="fy_start_date" invisible="1"/>
@ -33,13 +34,23 @@
<field name="receivable_accounts_only"/>
<field name="payable_accounts_only"/>
</group>
<field name="account_ids" nolabel="1" widget="many2many_tags" options="{'no_create': True}"/>
<field name="account_ids"
nolabel="1"
widget="many2many_tags"
options="{'no_create': True}"
domain="[('company_id','=',company_id)]"/>
</page>
<page string="Filter partners">
<field name="partner_ids" nolabel="1" widget="many2many_tags" options="{'no_create': True}"/>
<field name="partner_ids" nolabel="1"
widget="many2many_tags"
domain="['|',('company_id','=',company_id), ('company_id','=',False)]"
options="{'no_create': True}"/>
</page>
<page string="Filter cost centers" groups="analytic.group_analytic_accounting">
<field name="cost_center_ids" nolabel="1" options="{'no_create': True}" groups="analytic.group_analytic_accounting"/>
<field name="cost_center_ids" nolabel="1"
options="{'no_create': True}"
domain="[('company_id','=',company_id)]"
groups="analytic.group_analytic_accounting"/>
</page>
<page string="Filter analytic tags">
<field name="analytic_tag_ids" widget="many2many_tags" nolabel="1" options="{'no_create': True}"/>

14
account_financial_report_qweb/wizard/open_items_wizard.py

@ -17,6 +17,7 @@ class OpenItemsReportWizard(models.TransientModel):
company_id = fields.Many2one(
comodel_name='res.company',
default=lambda self: self.env.user.company_id,
required=True,
string='Company'
)
date_at = fields.Date(required=True,
@ -51,11 +52,22 @@ class OpenItemsReportWizard(models.TransientModel):
'will display initial and final balance in that currency.'
)
@api.onchange('company_id')
def onchange_company_id(self):
"""Handle company change."""
if self.company_id and self.partner_ids:
self.partner_ids = self.partner_ids.filtered(
lambda p: p.company_id == self.company_id or
not p.company_id)
if self.company_id and self.account_ids:
self.account_ids = self.account_ids.filtered(
lambda a: a.company_id == self.company_id)
@api.onchange('receivable_accounts_only', 'payable_accounts_only')
def onchange_type_accounts_only(self):
"""Handle receivable/payable accounts only change."""
if self.receivable_accounts_only or self.payable_accounts_only:
domain = []
domain = [('company_id', '=', self.company_id.id)]
if self.receivable_accounts_only and self.payable_accounts_only:
domain += [('internal_type', 'in', ('receivable', 'payable'))]
elif self.receivable_accounts_only:

14
account_financial_report_qweb/wizard/open_items_wizard_view.xml

@ -22,13 +22,21 @@
</group>
<group name="partner_filter" col="1">
<label for="partner_ids"/>
<field name="partner_ids" nolabel="1" widget="many2many_tags" options="{'no_create': True}"/>
<field name="partner_ids"
nolabel="1"
domain="['|',('company_id','=',company_id), ('company_id','=',False)]"
widget="many2many_tags"
options="{'no_create': True}"/>
</group>
<group name="account_filter" col="4">
<label for="account_ids" colspan="4"/>
<field name="receivable_accounts_only"/>
<field name="payable_accounts_only"/>
<field name="account_ids" nolabel="1" widget="many2many_tags" options="{'no_create': True}" colspan="4"/>
<field name="account_ids"
nolabel="1"
widget="many2many_tags"
domain="[('company_id','=',company_id)]"
options="{'no_create': True}"
colspan="4"/>
</group>
<footer>
<button name="button_export_html" string="View"

25
account_financial_report_qweb/wizard/trial_balance_wizard.py

@ -7,7 +7,7 @@
from odoo import api, fields, models, _
from odoo.tools.safe_eval import safe_eval
from odoo.exceptions import UserError
from odoo.exceptions import UserError, ValidationError
class TrialBalanceReportWizard(models.TransientModel):
@ -19,6 +19,7 @@ class TrialBalanceReportWizard(models.TransientModel):
company_id = fields.Many2one(
comodel_name='res.company',
default=lambda self: self.env.user.company_id,
required=True,
string='Company'
)
date_range_id = fields.Many2one(
@ -108,6 +109,16 @@ class TrialBalanceReportWizard(models.TransientModel):
('company_id', '=', self.company_id.id)
])
self.not_only_one_unaffected_earnings_account = count != 1
if self.company_id and self.date_range_id.company_id and \
self.date_range_id.company_id != self.company_id:
self.date_range_id = False
if self.company_id and self.partner_ids:
self.partner_ids = self.partner_ids.filtered(
lambda p: p.company_id == self.company_id or
not p.company_id)
if self.company_id and self.account_ids:
self.account_ids = self.account_ids.filtered(
lambda a: a.company_id == self.company_id)
@api.onchange('date_range_id')
def onchange_date_range_id(self):
@ -115,11 +126,21 @@ class TrialBalanceReportWizard(models.TransientModel):
self.date_from = self.date_range_id.date_start
self.date_to = self.date_range_id.date_end
@api.multi
@api.constrains('company_id', 'date_range_id')
def _check_company_id_date_range_id(self):
for rec in self.sudo():
if rec.company_id and rec.date_range_id.company_id and\
rec.company_id != rec.date_range_id.company_id:
raise ValidationError(
_('The Company in the Trial Balance Report Wizard and in '
'Date Range must be the same.'))
@api.onchange('receivable_accounts_only', 'payable_accounts_only')
def onchange_type_accounts_only(self):
"""Handle receivable/payable accounts only change."""
if self.receivable_accounts_only or self.payable_accounts_only:
domain = []
domain = [('company_id', '=', self.company_id.id)]
if self.receivable_accounts_only and self.payable_accounts_only:
domain += [('internal_type', 'in', ('receivable', 'payable'))]
elif self.receivable_accounts_only:

22
account_financial_report_qweb/wizard/trial_balance_wizard_view.xml

@ -31,13 +31,31 @@
</group>
<group name="partner_filter" attrs="{'invisible':[('show_partner_details','!=',True)]}" col="1">
<label for="partner_ids"/>
<field name="partner_ids" nolabel="1" widget="many2many_tags" options="{'no_create': True}"/>
<field name="partner_ids"
nolabel="1"
domain="['|',('company_id','=',company_id), ('company_id','=',False)]"
widget="many2many_tags"
options="{'no_create': True}"/>
</group>
<label for="journal_ids"/>
<field name="journal_ids"
widget="many2many_tags"
domain="[('company_id','=',company_id)]"
nolabel="1"
options="{'no_create': True}"
/>
<group attrs="{'invisible':[('show_partner_details','!=',True)]}"/>
<div/>
<group name="account_filter" col="4">
<label for="account_ids" colspan="4"/>
<field name="receivable_accounts_only"/>
<field name="payable_accounts_only"/>
<field name="account_ids" nolabel="1" widget="many2many_tags" options="{'no_create': True}" colspan="4"/>
<field name="account_ids"
nolabel="1"
widget="many2many_tags"
domain="[('company_id','=',company_id)]"
options="{'no_create': True}"
colspan="4"/>
</group>
</div>
<div attrs="{'invisible': [('not_only_one_unaffected_earnings_account', '=', False)]}">

Loading…
Cancel
Save