From d3cc0209de8f26b38c37c4d589825639af02236b Mon Sep 17 00:00:00 2001 From: Tom Blauwendraat Date: Thu, 26 Nov 2020 18:03:16 +0100 Subject: [PATCH] [IMP] account_financial_report: black, isort, prettier --- account_financial_report/__init__.py | 1 - account_financial_report/__manifest__.py | 80 +- account_financial_report/menuitems.xml | 24 +- account_financial_report/models/account.py | 11 +- .../models/account_group.py | 41 +- .../models/account_move_line.py | 15 +- .../report/abstract_report.py | 10 +- .../report/abstract_report_xlsx.py | 270 ++--- .../report/aged_partner_balance.py | 125 ++- .../report/aged_partner_balance_xlsx.py | 346 ++++--- .../report/general_ledger.py | 485 +++++---- .../report/general_ledger_xlsx.py | 158 ++- .../report/journal_ledger.py | 299 ++---- .../report/journal_ledger_xlsx.py | 202 ++-- account_financial_report/report/open_items.py | 217 ++-- .../report/open_items_xlsx.py | 117 ++- .../report/templates/aged_partner_balance.xml | 526 +++++++--- .../report/templates/general_ledger.xml | 622 +++++++----- .../report/templates/journal_ledger.xml | 474 ++++----- .../report/templates/layouts.xml | 24 +- .../report/templates/open_items.xml | 180 ++-- .../report/templates/trial_balance.xml | 944 ++++++++++++------ .../report/templates/vat_report.xml | 179 ++-- .../report/trial_balance.py | 245 +++-- .../report/trial_balance_xlsx.py | 257 +++-- account_financial_report/report/vat_report.py | 132 +-- .../report/vat_report_xlsx.py | 26 +- account_financial_report/reports.xml | 202 ++-- .../static/src/css/report.css | 74 +- .../js/account_financial_report_backend.js | 77 +- .../js/account_financial_report_widgets.js | 96 +- account_financial_report/tests/__init__.py | 1 - .../tests/abstract_test.py | 475 +++++---- .../tests/abstract_test_foreign_currency.py | 110 +- .../tests/abstract_test_tax_report.py | 62 +- .../tests/test_aged_partner_balance.py | 22 +- .../tests/test_general_ledger.py | 574 +++++------ .../tests/test_journal_ledger.py | 500 +++++----- .../tests/test_open_items.py | 44 +- .../tests/test_trial_balance.py | 911 +++++++++-------- .../tests/test_vat_report.py | 494 ++++----- .../view/account_view.xml | 6 +- .../view/report_aged_partner_balance.xml | 6 +- .../view/report_general_ledger.xml | 6 +- .../view/report_journal_ledger.xml | 6 +- .../view/report_open_items.xml | 6 +- .../view/report_template.xml | 49 +- .../view/report_trial_balance.xml | 8 +- .../view/report_vat_report.xml | 6 +- .../wizard/abstract_wizard.py | 29 +- .../wizard/aged_partner_balance_wizard.py | 92 +- .../aged_partner_balance_wizard_view.xml | 82 +- .../wizard/general_ledger_wizard.py | 265 ++--- .../wizard/general_ledger_wizard_view.xml | 198 ++-- .../wizard/journal_ledger_wizard.py | 122 +-- .../wizard/journal_ledger_wizard_view.xml | 82 +- .../wizard/open_items_wizard.py | 117 ++- .../wizard/open_items_wizard_view.xml | 105 +- .../wizard/trial_balance_wizard.py | 236 ++--- .../wizard/trial_balance_wizard_view.xml | 164 +-- .../wizard/vat_report_wizard.py | 98 +- .../wizard/vat_report_wizard_view.xml | 75 +- .../odoo/addons/account_financial_report | 1 + setup/account_financial_report/setup.py | 6 + 64 files changed, 6245 insertions(+), 5172 deletions(-) create mode 120000 setup/account_financial_report/odoo/addons/account_financial_report create mode 100644 setup/account_financial_report/setup.py diff --git a/account_financial_report/__init__.py b/account_financial_report/__init__.py index b8f60543..a6e5ff78 100644 --- a/account_financial_report/__init__.py +++ b/account_financial_report/__init__.py @@ -1,4 +1,3 @@ - # Author: Damien Crier # Copyright 2016 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). diff --git a/account_financial_report/__manifest__.py b/account_financial_report/__manifest__.py index aaaef0b6..7d8888d3 100644 --- a/account_financial_report/__manifest__.py +++ b/account_financial_report/__manifest__.py @@ -3,48 +3,44 @@ # Copyright 2016 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Account Financial Reports', - 'version': '12.0.1.4.1', - 'category': 'Reporting', - 'summary': 'OCA Financial Reports', - 'author': 'Camptocamp SA,' - 'initOS GmbH,' - 'redCOR AG,' - 'Eficent,' - 'Odoo Community Association (OCA)', + "name": "Account Financial Reports", + "version": "12.0.1.4.1", + "category": "Reporting", + "summary": "OCA Financial Reports", + "author": "Camptocamp SA," + "initOS GmbH," + "redCOR AG," + "Eficent," + "Odoo Community Association (OCA)", "website": "https://odoo-community.org/", - 'depends': [ - 'account', - 'date_range', - 'report_xlsx', + "depends": ["account", "date_range", "report_xlsx",], + "data": [ + "wizard/aged_partner_balance_wizard_view.xml", + "wizard/general_ledger_wizard_view.xml", + "wizard/journal_ledger_wizard_view.xml", + "wizard/open_items_wizard_view.xml", + "wizard/trial_balance_wizard_view.xml", + "wizard/vat_report_wizard_view.xml", + "menuitems.xml", + "reports.xml", + "report/templates/layouts.xml", + "report/templates/aged_partner_balance.xml", + "report/templates/general_ledger.xml", + "report/templates/journal_ledger.xml", + "report/templates/open_items.xml", + "report/templates/trial_balance.xml", + "report/templates/vat_report.xml", + "view/account_view.xml", + "view/report_template.xml", + "view/report_general_ledger.xml", + "view/report_journal_ledger.xml", + "view/report_trial_balance.xml", + "view/report_open_items.xml", + "view/report_aged_partner_balance.xml", + "view/report_vat_report.xml", ], - 'data': [ - 'wizard/aged_partner_balance_wizard_view.xml', - 'wizard/general_ledger_wizard_view.xml', - 'wizard/journal_ledger_wizard_view.xml', - 'wizard/open_items_wizard_view.xml', - 'wizard/trial_balance_wizard_view.xml', - 'wizard/vat_report_wizard_view.xml', - 'menuitems.xml', - 'reports.xml', - 'report/templates/layouts.xml', - 'report/templates/aged_partner_balance.xml', - 'report/templates/general_ledger.xml', - 'report/templates/journal_ledger.xml', - 'report/templates/open_items.xml', - 'report/templates/trial_balance.xml', - 'report/templates/vat_report.xml', - 'view/account_view.xml', - 'view/report_template.xml', - 'view/report_general_ledger.xml', - 'view/report_journal_ledger.xml', - 'view/report_trial_balance.xml', - 'view/report_open_items.xml', - 'view/report_aged_partner_balance.xml', - 'view/report_vat_report.xml', - ], - 'installable': True, - 'application': True, - 'auto_install': False, - 'license': 'AGPL-3', + "installable": True, + "application": True, + "auto_install": False, + "license": "AGPL-3", } diff --git a/account_financial_report/menuitems.xml b/account_financial_report/menuitems.xml index beb3128c..c5fe0c73 100644 --- a/account_financial_report/menuitems.xml +++ b/account_financial_report/menuitems.xml @@ -1,53 +1,45 @@ - + - - + /> - + /> - + /> - + /> - + /> - + /> - + /> diff --git a/account_financial_report/models/account.py b/account_financial_report/models/account.py index 9df8b2c8..c1131b8a 100644 --- a/account_financial_report/models/account.py +++ b/account_financial_report/models/account.py @@ -1,13 +1,14 @@ # © 2011 Guewen Baconnier (Camptocamp) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).- -from odoo import models, fields +from odoo import fields, models class AccountAccount(models.Model): - _inherit = 'account.account' + _inherit = "account.account" centralized = fields.Boolean( - 'Centralized', + "Centralized", help="If flagged, no details will be displayed in " - "the General Ledger report (the webkit one only), " - "only centralized amounts per period.") + "the General Ledger report (the webkit one only), " + "only centralized amounts per period.", + ) diff --git a/account_financial_report/models/account_group.py b/account_financial_report/models/account_group.py index bbc3b0b3..f47ebbf4 100644 --- a/account_financial_report/models/account_group.py +++ b/account_financial_report/models/account_group.py @@ -5,27 +5,24 @@ from odoo import api, fields, models class AccountGroup(models.Model): - _inherit = 'account.group' + _inherit = "account.group" group_child_ids = fields.One2many( - comodel_name='account.group', - inverse_name='parent_id', - string='Child Groups') - level = fields.Integer( - string='Level', - compute='_compute_level', - store=True) + comodel_name="account.group", inverse_name="parent_id", string="Child Groups" + ) + level = fields.Integer(string="Level", compute="_compute_level", store=True) account_ids = fields.One2many( - comodel_name='account.account', - inverse_name='group_id', - string="Accounts") + comodel_name="account.account", inverse_name="group_id", string="Accounts" + ) compute_account_ids = fields.Many2many( - 'account.account', - compute='_compute_group_accounts', - string="Compute accounts", store=True) + "account.account", + compute="_compute_group_accounts", + string="Compute accounts", + store=True, + ) @api.multi - @api.depends('parent_id', 'parent_id.level') + @api.depends("parent_id", "parent_id.level") def _compute_level(self): for group in self: if not group.parent_id: @@ -34,13 +31,17 @@ class AccountGroup(models.Model): group.level = group.parent_id.level + 1 @api.multi - @api.depends('code_prefix', 'account_ids', 'account_ids.code', - 'group_child_ids', 'group_child_ids.account_ids.code') + @api.depends( + "code_prefix", + "account_ids", + "account_ids.code", + "group_child_ids", + "group_child_ids.account_ids.code", + ) def _compute_group_accounts(self): - account_obj = self.env['account.account'] + account_obj = self.env["account.account"] accounts = account_obj.search([]) for group in self: prefix = group.code_prefix if group.code_prefix else group.name - gr_acc = accounts.filtered( - lambda a: a.code.startswith(prefix)).ids + gr_acc = accounts.filtered(lambda a: a.code.startswith(prefix)).ids group.compute_account_ids = [(6, 0, gr_acc)] diff --git a/account_financial_report/models/account_move_line.py b/account_financial_report/models/account_move_line.py index 70e921e1..72fd9e26 100644 --- a/account_financial_report/models/account_move_line.py +++ b/account_financial_report/models/account_move_line.py @@ -4,7 +4,7 @@ from odoo import api, models class AccountMoveLine(models.Model): - _inherit = 'account.move.line' + _inherit = "account.move.line" @api.model_cr def init(self): @@ -21,10 +21,13 @@ class AccountMoveLine(models.Model): By adding the following index, performances are strongly increased. :return: """ - self._cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = ' - '%s', - ('account_move_line_account_id_partner_id_index',)) + self._cr.execute( + "SELECT indexname FROM pg_indexes WHERE indexname = " "%s", + ("account_move_line_account_id_partner_id_index",), + ) if not self._cr.fetchone(): - self._cr.execute(""" + self._cr.execute( + """ CREATE INDEX account_move_line_account_id_partner_id_index - ON account_move_line (account_id, partner_id)""") + ON account_move_line (account_id, partner_id)""" + ) diff --git a/account_financial_report/report/abstract_report.py b/account_financial_report/report/abstract_report.py index db9afeee..cead332f 100644 --- a/account_financial_report/report/abstract_report.py +++ b/account_financial_report/report/abstract_report.py @@ -1,17 +1,19 @@ # Copyright 2018 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models from psycopg2.extensions import AsIs +from odoo import models + class AbstractReport(models.AbstractModel): - _name = 'account_financial_report_abstract' - _description = 'Abstract Report' + _name = "account_financial_report_abstract" + _description = "Abstract Report" def _transient_clean_rows_older_than(self, seconds): - assert self._transient, \ + assert self._transient, ( "Model %s is not transient, it cannot be vacuumed!" % self._name + ) # Never delete rows used in last 5 minutes seconds = max(seconds, 300) query = ( diff --git a/account_financial_report/report/abstract_report_xlsx.py b/account_financial_report/report/abstract_report_xlsx.py index d4a867c6..381058e8 100644 --- a/account_financial_report/report/abstract_report_xlsx.py +++ b/account_financial_report/report/abstract_report_xlsx.py @@ -1,16 +1,15 @@ - # Author: Julien Coux # Copyright 2016 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models import datetime +from odoo import models from odoo.tools import format_date class AbstractReportXslx(models.AbstractModel): - _name = 'report.account_financial_report.abstract_report_xlsx' - _inherit = 'report.report_xlsx.abstract' + _name = "report.account_financial_report.abstract_report_xlsx" + _inherit = "report.report_xlsx.abstract" def __init__(self, pool, cr): # main sheet which will contains report @@ -35,7 +34,7 @@ class AbstractReportXslx(models.AbstractModel): self.format_percent_bold_italic = None def get_workbook_options(self): - return {'constant_memory': True} + return {"constant_memory": True} def generate_xlsx_report(self, workbook, data, objects): report = objects @@ -76,58 +75,57 @@ class AbstractReportXslx(models.AbstractModel): * format_amount * format_percent_bold_italic """ - self.format_bold = workbook.add_format({'bold': True}) - self.format_right = workbook.add_format({'align': 'right'}) - self.format_left = workbook.add_format({'align': 'left'}) + self.format_bold = workbook.add_format({"bold": True}) + self.format_right = workbook.add_format({"align": "right"}) + self.format_left = workbook.add_format({"align": "left"}) self.format_right_bold_italic = workbook.add_format( - {'align': 'right', 'bold': True, 'italic': True} + {"align": "right", "bold": True, "italic": True} ) self.format_header_left = workbook.add_format( - {'bold': True, - 'border': True, - 'bg_color': '#FFFFCC'}) + {"bold": True, "border": True, "bg_color": "#FFFFCC"} + ) self.format_header_center = workbook.add_format( - {'bold': True, - 'align': 'center', - 'border': True, - 'bg_color': '#FFFFCC'}) + {"bold": True, "align": "center", "border": True, "bg_color": "#FFFFCC"} + ) self.format_header_right = workbook.add_format( - {'bold': True, - 'align': 'right', - 'border': True, - 'bg_color': '#FFFFCC'}) + {"bold": True, "align": "right", "border": True, "bg_color": "#FFFFCC"} + ) self.format_header_amount = workbook.add_format( - {'bold': True, - 'border': True, - 'bg_color': '#FFFFCC'}) - currency_id = self.env['res.company']._get_user_currency() + {"bold": True, "border": True, "bg_color": "#FFFFCC"} + ) + currency_id = self.env["res.company"]._get_user_currency() self.format_header_amount.set_num_format( - '#,##0.'+'0'*currency_id.decimal_places) + "#,##0." + "0" * currency_id.decimal_places + ) self.format_amount = workbook.add_format() - self.format_amount.set_num_format( - '#,##0.'+'0'*currency_id.decimal_places) - self.format_amount_bold = workbook.add_format({'bold': True}) + self.format_amount.set_num_format("#,##0." + "0" * currency_id.decimal_places) + self.format_amount_bold = workbook.add_format({"bold": True}) self.format_amount_bold.set_num_format( - '#,##0.' + '0' * currency_id.decimal_places) + "#,##0." + "0" * currency_id.decimal_places + ) self.format_percent_bold_italic = workbook.add_format( - {'bold': True, 'italic': True} + {"bold": True, "italic": True} ) - self.format_percent_bold_italic.set_num_format('#,##0.00%') + self.format_percent_bold_italic.set_num_format("#,##0.00%") def _set_column_width(self): """Set width for all defined columns. Columns are defined with `_get_report_columns` method. """ for position, column in self.columns.items(): - self.sheet.set_column(position, position, column['width']) + self.sheet.set_column(position, position, column["width"]) def _write_report_title(self, title): """Write report title on current line using all defined columns width. Columns are defined with `_get_report_columns` method. """ self.sheet.merge_range( - self.row_pos, 0, self.row_pos, len(self.columns) - 1, - title, self.format_bold + self.row_pos, + 0, + self.row_pos, + len(self.columns) - 1, + title, + self.format_bold, ) self.row_pos += 3 @@ -138,8 +136,12 @@ class AbstractReportXslx(models.AbstractModel): if footer: self.row_pos += 1 self.sheet.merge_range( - self.row_pos, 0, self.row_pos, len(self.columns) - 1, - footer, self.format_left + self.row_pos, + 0, + self.row_pos, + len(self.columns) - 1, + footer, + self.format_left, ) self.row_pos += 1 @@ -156,13 +158,20 @@ class AbstractReportXslx(models.AbstractModel): col_value = col_name + col_count_filter_name + 1 for title, value in filters: self.sheet.merge_range( - self.row_pos, col_name, - self.row_pos, col_name + col_count_filter_name - 1, - title, self.format_header_left) + self.row_pos, + col_name, + self.row_pos, + col_name + col_count_filter_name - 1, + title, + self.format_header_left, + ) self.sheet.merge_range( - self.row_pos, col_value, - self.row_pos, col_value + col_count_filter_value - 1, - value) + self.row_pos, + col_value, + self.row_pos, + col_value + col_count_filter_value - 1, + value, + ) self.row_pos += 1 self.row_pos += 2 @@ -171,8 +180,12 @@ class AbstractReportXslx(models.AbstractModel): Columns are defined with `_get_report_columns` method. """ self.sheet.merge_range( - self.row_pos, 0, self.row_pos, len(self.columns) - 1, - title, self.format_bold + self.row_pos, + 0, + self.row_pos, + len(self.columns) - 1, + title, + self.format_bold, ) self.row_pos += 1 @@ -181,8 +194,9 @@ class AbstractReportXslx(models.AbstractModel): Columns are defined with `_get_report_columns` method. """ for col_pos, column in self.columns.items(): - self.sheet.write(self.row_pos, col_pos, column['header'], - self.format_header_center) + self.sheet.write( + self.row_pos, col_pos, column["header"], self.format_header_center + ) self.row_pos += 1 def write_line(self, line_object): @@ -190,30 +204,36 @@ class AbstractReportXslx(models.AbstractModel): Columns are defined with `_get_report_columns` method. """ for col_pos, column in self.columns.items(): - value = getattr(line_object, column['field']) + value = getattr(line_object, column["field"]) if isinstance(value, datetime.date): value = format_date(self.env, value) - cell_type = column.get('type', 'string') - if cell_type == 'many2one': + cell_type = column.get("type", "string") + if cell_type == "many2one": self.sheet.write_string( - self.row_pos, col_pos, value.name or '', self.format_right) - elif cell_type == 'string': - if hasattr(line_object, 'account_group_id') and \ - line_object.account_group_id: - self.sheet.write_string(self.row_pos, col_pos, value or '', - self.format_bold) + self.row_pos, col_pos, value.name or "", self.format_right + ) + elif cell_type == "string": + if ( + hasattr(line_object, "account_group_id") + and line_object.account_group_id + ): + self.sheet.write_string( + self.row_pos, col_pos, value or "", self.format_bold + ) else: - self.sheet.write_string(self.row_pos, col_pos, value or '') - elif cell_type == 'amount': - if hasattr(line_object, 'account_group_id') and \ - line_object.account_group_id: + self.sheet.write_string(self.row_pos, col_pos, value or "") + elif cell_type == "amount": + if ( + hasattr(line_object, "account_group_id") + and line_object.account_group_id + ): cell_format = self.format_amount_bold else: cell_format = self.format_amount self.sheet.write_number( self.row_pos, col_pos, float(value), cell_format ) - elif cell_type == 'amount_currency': + elif cell_type == "amount_currency": if line_object.currency_id: format_amt = self._get_currency_amt_format(line_object) self.sheet.write_number( @@ -230,32 +250,28 @@ class AbstractReportXslx(models.AbstractModel): col_pos_label = self._get_col_pos_initial_balance_label() self.sheet.write(self.row_pos, col_pos_label, label, self.format_right) for col_pos, column in self.columns.items(): - if column.get('field_initial_balance'): - value = getattr(my_object, column['field_initial_balance']) - cell_type = column.get('type', 'string') - if cell_type == 'string': - self.sheet.write_string(self.row_pos, col_pos, value or '') - elif cell_type == 'amount': + if column.get("field_initial_balance"): + value = getattr(my_object, column["field_initial_balance"]) + cell_type = column.get("type", "string") + if cell_type == "string": + self.sheet.write_string(self.row_pos, col_pos, value or "") + elif cell_type == "amount": self.sheet.write_number( self.row_pos, col_pos, float(value), self.format_amount ) - elif cell_type == 'amount_currency': + elif cell_type == "amount_currency": if my_object.currency_id: - format_amt = self._get_currency_amt_format( - my_object) + format_amt = self._get_currency_amt_format(my_object) self.sheet.write_number( - self.row_pos, col_pos, - float(value), format_amt + self.row_pos, col_pos, float(value), format_amt ) - elif column.get('field_currency_balance'): - value = getattr(my_object, column['field_currency_balance']) - cell_type = column.get('type', 'string') - if cell_type == 'many2one': + elif column.get("field_currency_balance"): + value = getattr(my_object, column["field_currency_balance"]) + cell_type = column.get("type", "string") + if cell_type == "many2one": if my_object.currency_id: self.sheet.write_string( - self.row_pos, col_pos, - value.name or '', - self.format_right + self.row_pos, col_pos, value.name or "", self.format_right ) self.row_pos += 1 @@ -266,85 +282,85 @@ class AbstractReportXslx(models.AbstractModel): Columns are defined with `_get_report_columns` method. """ for i in range(0, len(self.columns)): - self.sheet.write(self.row_pos, i, '', self.format_header_right) + self.sheet.write(self.row_pos, i, "", self.format_header_right) row_count_name = self._get_col_count_final_balance_name() col_pos_label = self._get_col_pos_final_balance_label() self.sheet.merge_range( - self.row_pos, 0, self.row_pos, row_count_name - 1, name, - self.format_header_left + self.row_pos, + 0, + self.row_pos, + row_count_name - 1, + name, + self.format_header_left, ) - self.sheet.write(self.row_pos, col_pos_label, label, - self.format_header_right) + self.sheet.write(self.row_pos, col_pos_label, label, self.format_header_right) for col_pos, column in self.columns.items(): - if column.get('field_final_balance'): - value = getattr(my_object, column['field_final_balance']) - cell_type = column.get('type', 'string') - if cell_type == 'string': - self.sheet.write_string(self.row_pos, col_pos, value or '', - self.format_header_right) - elif cell_type == 'amount': + if column.get("field_final_balance"): + value = getattr(my_object, column["field_final_balance"]) + cell_type = column.get("type", "string") + if cell_type == "string": + self.sheet.write_string( + self.row_pos, col_pos, value or "", self.format_header_right + ) + elif cell_type == "amount": self.sheet.write_number( - self.row_pos, col_pos, float(value), - self.format_header_amount + self.row_pos, col_pos, float(value), self.format_header_amount ) - elif cell_type == 'amount_currency': + elif cell_type == "amount_currency": if my_object.currency_id: - format_amt = self._get_currency_amt_header_format( - my_object) + format_amt = self._get_currency_amt_header_format(my_object) self.sheet.write_number( - self.row_pos, col_pos, float(value), - format_amt + self.row_pos, col_pos, float(value), format_amt ) - elif column.get('field_currency_balance'): - value = getattr(my_object, column['field_currency_balance']) - cell_type = column.get('type', 'string') - if cell_type == 'many2one': + elif column.get("field_currency_balance"): + value = getattr(my_object, column["field_currency_balance"]) + cell_type = column.get("type", "string") + if cell_type == "many2one": if my_object.currency_id: self.sheet.write_string( - self.row_pos, col_pos, - value.name or '', - self.format_header_right + self.row_pos, + col_pos, + value.name or "", + self.format_header_right, ) self.row_pos += 1 def _get_currency_amt_format(self, line_object): """ Return amount format specific for each currency. """ - if hasattr(line_object, 'account_group_id') and \ - line_object.account_group_id: - format_amt = getattr(self, 'format_amount_bold') - field_prefix = 'format_amount_bold' + if hasattr(line_object, "account_group_id") and line_object.account_group_id: + format_amt = getattr(self, "format_amount_bold") + field_prefix = "format_amount_bold" else: - format_amt = getattr(self, 'format_amount') - field_prefix = 'format_amount' + format_amt = getattr(self, "format_amount") + field_prefix = "format_amount" if line_object.currency_id: - field_name = \ - '%s_%s' % (field_prefix, line_object.currency_id.name) + field_name = "{}_{}".format(field_prefix, line_object.currency_id.name) if hasattr(self, field_name): format_amt = getattr(self, field_name) else: format_amt = self.workbook.add_format() - setattr(self, 'field_name', format_amt) - format_amount = \ - '#,##0.' + ('0' * line_object.currency_id.decimal_places) + setattr(self, "field_name", format_amt) + format_amount = "#,##0." + ( + "0" * line_object.currency_id.decimal_places + ) format_amt.set_num_format(format_amount) return format_amt def _get_currency_amt_header_format(self, line_object): """ Return amount header format for each currency. """ - format_amt = getattr(self, 'format_header_amount') + format_amt = getattr(self, "format_header_amount") if line_object.currency_id: - field_name = \ - 'format_header_amount_%s' % line_object.currency_id.name + field_name = "format_header_amount_%s" % line_object.currency_id.name if hasattr(self, field_name): format_amt = getattr(self, field_name) else: format_amt = self.workbook.add_format( - {'bold': True, - 'border': True, - 'bg_color': '#FFFFCC'}) - setattr(self, 'field_name', format_amt) - format_amount = \ - '#,##0.' + ('0' * line_object.currency_id.decimal_places) + {"bold": True, "border": True, "bg_color": "#FFFFCC"} + ) + setattr(self, "field_name", format_amt) + format_amount = "#,##0." + ( + "0" * line_object.currency_id.decimal_places + ) format_amt.set_num_format(format_amount) return format_amt @@ -356,8 +372,10 @@ class AbstractReportXslx(models.AbstractModel): def _get_report_complete_name(self, report, prefix): if report.company_id: - suffix = ' - %s - %s' % ( - report.company_id.name, report.company_id.currency_id.name) + suffix = " - {} - {}".format( + report.company_id.name, + report.company_id.currency_id.name, + ) return prefix + suffix return prefix diff --git a/account_financial_report/report/aged_partner_balance.py b/account_financial_report/report/aged_partner_balance.py index 3a0b25f4..92677beb 100644 --- a/account_financial_report/report/aged_partner_balance.py +++ b/account_financial_report/report/aged_partner_balance.py @@ -1,7 +1,7 @@ # © 2016 Julien Coux (Camptocamp) # 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 class AgedPartnerBalanceReport(models.TransientModel): @@ -17,43 +17,37 @@ class AgedPartnerBalanceReport(models.TransientModel): If "show_move_line_details" is selected """ - _name = 'report_aged_partner_balance' - _inherit = 'account_financial_report_abstract' + _name = "report_aged_partner_balance" + _inherit = "account_financial_report_abstract" # Filters fields, used for data computation date_at = fields.Date() only_posted_moves = fields.Boolean() - company_id = fields.Many2one(comodel_name='res.company') - filter_account_ids = fields.Many2many(comodel_name='account.account') - filter_partner_ids = fields.Many2many(comodel_name='res.partner') + company_id = fields.Many2one(comodel_name="res.company") + filter_account_ids = fields.Many2many(comodel_name="account.account") + filter_partner_ids = fields.Many2many(comodel_name="res.partner") show_move_line_details = fields.Boolean() # Open Items Report Data fields, used as base for compute the data reports - open_items_id = fields.Many2one(comodel_name='report_open_items') + open_items_id = fields.Many2one(comodel_name="report_open_items") # Data fields, used to browse report data account_ids = fields.One2many( - comodel_name='report_aged_partner_balance_account', - inverse_name='report_id' + comodel_name="report_aged_partner_balance_account", inverse_name="report_id" ) class AgedPartnerBalanceReportAccount(models.TransientModel): - _name = 'report_aged_partner_balance_account' - _inherit = 'account_financial_report_abstract' - _order = 'code ASC' + _name = "report_aged_partner_balance_account" + _inherit = "account_financial_report_abstract" + _order = "code ASC" report_id = fields.Many2one( - comodel_name='report_aged_partner_balance', - ondelete='cascade', - index=True + comodel_name="report_aged_partner_balance", ondelete="cascade", index=True ) # Data fields, used to keep link with real object - account_id = fields.Many2one( - 'account.account', - index=True - ) + account_id = fields.Many2one("account.account", index=True) # Data fields, used for report display code = fields.Char() @@ -76,38 +70,35 @@ class AgedPartnerBalanceReportAccount(models.TransientModel): # Data fields, used to browse report data partner_ids = fields.One2many( - comodel_name='report_aged_partner_balance_partner', - inverse_name='report_account_id' + comodel_name="report_aged_partner_balance_partner", + inverse_name="report_account_id", ) class AgedPartnerBalanceReportPartner(models.TransientModel): - _name = 'report_aged_partner_balance_partner' - _inherit = 'account_financial_report_abstract' + _name = "report_aged_partner_balance_partner" + _inherit = "account_financial_report_abstract" report_account_id = fields.Many2one( - comodel_name='report_aged_partner_balance_account', - ondelete='cascade', - index=True + comodel_name="report_aged_partner_balance_account", + ondelete="cascade", + index=True, ) # Data fields, used to keep link with real object - partner_id = fields.Many2one( - 'res.partner', - index=True - ) + partner_id = fields.Many2one("res.partner", index=True) # Data fields, used for report display name = fields.Char() # Data fields, used to browse report data move_line_ids = fields.One2many( - comodel_name='report_aged_partner_balance_move_line', - inverse_name='report_partner_id' + comodel_name="report_aged_partner_balance_move_line", + inverse_name="report_partner_id", ) line_ids = fields.One2many( - comodel_name='report_aged_partner_balance_line', - inverse_name='report_partner_id' + comodel_name="report_aged_partner_balance_line", + inverse_name="report_partner_id", ) @api.model @@ -126,13 +117,13 @@ ORDER BY class AgedPartnerBalanceReportLine(models.TransientModel): - _name = 'report_aged_partner_balance_line' - _inherit = 'account_financial_report_abstract' + _name = "report_aged_partner_balance_line" + _inherit = "account_financial_report_abstract" report_partner_id = fields.Many2one( - comodel_name='report_aged_partner_balance_partner', - ondelete='cascade', - index=True + comodel_name="report_aged_partner_balance_partner", + ondelete="cascade", + index=True, ) # Data fields, used for report display @@ -147,17 +138,17 @@ class AgedPartnerBalanceReportLine(models.TransientModel): class AgedPartnerBalanceReportMoveLine(models.TransientModel): - _name = 'report_aged_partner_balance_move_line' - _inherit = 'account_financial_report_abstract' + _name = "report_aged_partner_balance_move_line" + _inherit = "account_financial_report_abstract" report_partner_id = fields.Many2one( - comodel_name='report_aged_partner_balance_partner', - ondelete='cascade', - index=True + comodel_name="report_aged_partner_balance_partner", + ondelete="cascade", + index=True, ) # Data fields, used to keep link with real object - move_line_id = fields.Many2one('account.move.line') + move_line_id = fields.Many2one("account.move.line") # Data fields, used for report display date = fields.Date() @@ -182,31 +173,31 @@ class AgedPartnerBalanceReportCompute(models.TransientModel): For class fields, go more top at this file. """ - _inherit = 'report_aged_partner_balance' + _inherit = "report_aged_partner_balance" @api.multi def print_report(self, report_type): self.ensure_one() - if report_type == 'xlsx': - report_name = 'a_f_r.report_aged_partner_balance_xlsx' + if report_type == "xlsx": + report_name = "a_f_r.report_aged_partner_balance_xlsx" else: - report_name = 'account_financial_report.' \ - 'report_aged_partner_balance_qweb' - report = self.env['ir.actions.report'].search( - [('report_name', '=', report_name), - ('report_type', '=', report_type)], limit=1) + report_name = "account_financial_report." "report_aged_partner_balance_qweb" + report = self.env["ir.actions.report"].search( + [("report_name", "=", report_name), ("report_type", "=", report_type)], + limit=1, + ) return report.report_action(self, config=False) def _get_html(self): result = {} rcontext = {} context = dict(self.env.context) - report = self.browse(context.get('active_id')) + report = self.browse(context.get("active_id")) if report: - rcontext['o'] = report - result['html'] = self.env.ref( - 'account_financial_report.report_aged_partner_balance').render( - rcontext) + rcontext["o"] = report + result["html"] = self.env.ref( + "account_financial_report.report_aged_partner_balance" + ).render(rcontext) return result @api.model @@ -216,11 +207,11 @@ class AgedPartnerBalanceReportCompute(models.TransientModel): def _prepare_report_open_items(self): self.ensure_one() return { - 'date_at': self.date_at, - 'only_posted_moves': self.only_posted_moves, - 'company_id': self.company_id.id, - 'filter_account_ids': [(6, 0, self.filter_account_ids.ids)], - 'filter_partner_ids': [(6, 0, self.filter_partner_ids.ids)], + "date_at": self.date_at, + "only_posted_moves": self.only_posted_moves, + "company_id": self.company_id.id, + "filter_account_ids": [(6, 0, self.filter_account_ids.ids)], + "filter_partner_ids": [(6, 0, self.filter_partner_ids.ids)], } @api.multi @@ -229,7 +220,7 @@ class AgedPartnerBalanceReportCompute(models.TransientModel): # Compute Open Items Report Data. # The data of Aged Partner Balance Report # are based on Open Items Report data. - model = self.env['report_open_items'] + model = self.env["report_open_items"] self.open_items_id = model.create(self._prepare_report_open_items()) self.open_items_id.compute_data_for_report() @@ -550,8 +541,7 @@ AND ra.report_id = %s self.open_items_id.id, self.id, ) - self.env.cr.execute(query_inject_move_line, - query_inject_move_line_params) + self.env.cr.execute(query_inject_move_line, query_inject_move_line_params) def _compute_accounts_cumul(self): """ Compute cumulative amount for @@ -629,5 +619,4 @@ WHERE id = c.report_account_id """ params_compute_accounts_cumul = (self.id,) - self.env.cr.execute(query_compute_accounts_cumul, - params_compute_accounts_cumul) + self.env.cr.execute(query_compute_accounts_cumul, params_compute_accounts_cumul) diff --git a/account_financial_report/report/aged_partner_balance_xlsx.py b/account_financial_report/report/aged_partner_balance_xlsx.py index a438cd83..76a06914 100644 --- a/account_financial_report/report/aged_partner_balance_xlsx.py +++ b/account_financial_report/report/aged_partner_balance_xlsx.py @@ -1,4 +1,3 @@ - # Author: Julien Coux # Copyright 2016 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). @@ -7,123 +6,154 @@ from odoo import _, models class AgedPartnerBalanceXslx(models.AbstractModel): - _name = 'report.a_f_r.report_aged_partner_balance_xlsx' - _inherit = 'report.account_financial_report.abstract_report_xlsx' + _name = "report.a_f_r.report_aged_partner_balance_xlsx" + _inherit = "report.account_financial_report.abstract_report_xlsx" def _get_report_name(self, report): - report_name = _('Aged Partner Balance') + report_name = _("Aged Partner Balance") return self._get_report_complete_name(report, report_name) def _get_report_columns(self, report): if not report.show_move_line_details: return { - 0: {'header': _('Partner'), 'field': 'partner', 'width': 70}, - 1: {'header': _('Residual'), - 'field': 'amount_residual', - 'field_footer_total': 'cumul_amount_residual', - 'type': 'amount', - 'width': 14}, - 2: {'header': _('Current'), - 'field': 'current', - 'field_footer_total': 'cumul_current', - 'field_footer_percent': 'percent_current', - 'type': 'amount', - 'width': 14}, - 3: {'header': _(u'Age ≤ 30 d.'), - 'field': 'age_30_days', - 'field_footer_total': 'cumul_age_30_days', - 'field_footer_percent': 'percent_age_30_days', - 'type': 'amount', - 'width': 14}, - 4: {'header': _(u'Age ≤ 60 d.'), - 'field': 'age_60_days', - 'field_footer_total': 'cumul_age_60_days', - 'field_footer_percent': 'percent_age_60_days', - 'type': 'amount', - 'width': 14}, - 5: {'header': _(u'Age ≤ 90 d.'), - 'field': 'age_90_days', - 'field_footer_total': 'cumul_age_90_days', - 'field_footer_percent': 'percent_age_90_days', - 'type': 'amount', - 'width': 14}, - 6: {'header': _(u'Age ≤ 120 d.'), - 'field': 'age_120_days', - 'field_footer_total': 'cumul_age_120_days', - 'field_footer_percent': 'percent_age_120_days', - 'type': 'amount', - 'width': 14}, - 7: {'header': _('Older'), - 'field': 'older', - 'field_footer_total': 'cumul_older', - 'field_footer_percent': 'percent_older', - 'type': 'amount', - 'width': 14}, + 0: {"header": _("Partner"), "field": "partner", "width": 70}, + 1: { + "header": _("Residual"), + "field": "amount_residual", + "field_footer_total": "cumul_amount_residual", + "type": "amount", + "width": 14, + }, + 2: { + "header": _("Current"), + "field": "current", + "field_footer_total": "cumul_current", + "field_footer_percent": "percent_current", + "type": "amount", + "width": 14, + }, + 3: { + "header": _(u"Age ≤ 30 d."), + "field": "age_30_days", + "field_footer_total": "cumul_age_30_days", + "field_footer_percent": "percent_age_30_days", + "type": "amount", + "width": 14, + }, + 4: { + "header": _(u"Age ≤ 60 d."), + "field": "age_60_days", + "field_footer_total": "cumul_age_60_days", + "field_footer_percent": "percent_age_60_days", + "type": "amount", + "width": 14, + }, + 5: { + "header": _(u"Age ≤ 90 d."), + "field": "age_90_days", + "field_footer_total": "cumul_age_90_days", + "field_footer_percent": "percent_age_90_days", + "type": "amount", + "width": 14, + }, + 6: { + "header": _(u"Age ≤ 120 d."), + "field": "age_120_days", + "field_footer_total": "cumul_age_120_days", + "field_footer_percent": "percent_age_120_days", + "type": "amount", + "width": 14, + }, + 7: { + "header": _("Older"), + "field": "older", + "field_footer_total": "cumul_older", + "field_footer_percent": "percent_older", + "type": "amount", + "width": 14, + }, } return { - 0: {'header': _('Date'), 'field': 'date', 'width': 11}, - 1: {'header': _('Entry'), 'field': 'entry', 'width': 18}, - 2: {'header': _('Journal'), 'field': 'journal', 'width': 8}, - 3: {'header': _('Account'), 'field': 'account', 'width': 9}, - 4: {'header': _('Partner'), 'field': 'partner', 'width': 25}, - 5: {'header': _('Ref - Label'), 'field': 'label', 'width': 40}, - 6: {'header': _('Due date'), 'field': 'date_due', 'width': 11}, - 7: {'header': _('Residual'), - 'field': 'amount_residual', - 'field_footer_total': 'cumul_amount_residual', - 'field_final_balance': 'amount_residual', - 'type': 'amount', - 'width': 14}, - 8: {'header': _('Current'), - 'field': 'current', - 'field_footer_total': 'cumul_current', - 'field_footer_percent': 'percent_current', - 'field_final_balance': 'current', - 'type': 'amount', - 'width': 14}, - 9: {'header': _(u'Age ≤ 30 d.'), - 'field': 'age_30_days', - 'field_footer_total': 'cumul_age_30_days', - 'field_footer_percent': 'percent_age_30_days', - 'field_final_balance': 'age_30_days', - 'type': 'amount', - 'width': 14}, - 10: {'header': _(u'Age ≤ 60 d.'), - 'field': 'age_60_days', - 'field_footer_total': 'cumul_age_60_days', - 'field_footer_percent': 'percent_age_60_days', - 'field_final_balance': 'age_60_days', - 'type': 'amount', - 'width': 14}, - 11: {'header': _(u'Age ≤ 90 d.'), - 'field': 'age_90_days', - 'field_footer_total': 'cumul_age_90_days', - 'field_footer_percent': 'percent_age_90_days', - 'field_final_balance': 'age_90_days', - 'type': 'amount', - 'width': 14}, - 12: {'header': _(u'Age ≤ 120 d.'), - 'field': 'age_120_days', - 'field_footer_total': 'cumul_age_120_days', - 'field_footer_percent': 'percent_age_120_days', - 'field_final_balance': 'age_120_days', - 'type': 'amount', - 'width': 14}, - 13: {'header': _('Older'), - 'field': 'older', - 'field_footer_total': 'cumul_older', - 'field_footer_percent': 'percent_older', - 'field_final_balance': 'older', - 'type': 'amount', - 'width': 14}, + 0: {"header": _("Date"), "field": "date", "width": 11}, + 1: {"header": _("Entry"), "field": "entry", "width": 18}, + 2: {"header": _("Journal"), "field": "journal", "width": 8}, + 3: {"header": _("Account"), "field": "account", "width": 9}, + 4: {"header": _("Partner"), "field": "partner", "width": 25}, + 5: {"header": _("Ref - Label"), "field": "label", "width": 40}, + 6: {"header": _("Due date"), "field": "date_due", "width": 11}, + 7: { + "header": _("Residual"), + "field": "amount_residual", + "field_footer_total": "cumul_amount_residual", + "field_final_balance": "amount_residual", + "type": "amount", + "width": 14, + }, + 8: { + "header": _("Current"), + "field": "current", + "field_footer_total": "cumul_current", + "field_footer_percent": "percent_current", + "field_final_balance": "current", + "type": "amount", + "width": 14, + }, + 9: { + "header": _(u"Age ≤ 30 d."), + "field": "age_30_days", + "field_footer_total": "cumul_age_30_days", + "field_footer_percent": "percent_age_30_days", + "field_final_balance": "age_30_days", + "type": "amount", + "width": 14, + }, + 10: { + "header": _(u"Age ≤ 60 d."), + "field": "age_60_days", + "field_footer_total": "cumul_age_60_days", + "field_footer_percent": "percent_age_60_days", + "field_final_balance": "age_60_days", + "type": "amount", + "width": 14, + }, + 11: { + "header": _(u"Age ≤ 90 d."), + "field": "age_90_days", + "field_footer_total": "cumul_age_90_days", + "field_footer_percent": "percent_age_90_days", + "field_final_balance": "age_90_days", + "type": "amount", + "width": 14, + }, + 12: { + "header": _(u"Age ≤ 120 d."), + "field": "age_120_days", + "field_footer_total": "cumul_age_120_days", + "field_footer_percent": "percent_age_120_days", + "field_final_balance": "age_120_days", + "type": "amount", + "width": 14, + }, + 13: { + "header": _("Older"), + "field": "older", + "field_footer_total": "cumul_older", + "field_footer_percent": "percent_older", + "field_final_balance": "older", + "type": "amount", + "width": 14, + }, } def _get_report_filters(self, report): return [ - [_('Date at filter'), report.date_at], - [_('Target moves filter'), - _('All posted entries') if report.only_posted_moves else _( - 'All entries')], + [_("Date at filter"), report.date_at], + [ + _("Target moves filter"), + _("All posted entries") + if report.only_posted_moves + else _("All entries"), + ], ] def _get_col_count_filter_name(self): @@ -146,7 +176,7 @@ class AgedPartnerBalanceXslx(models.AbstractModel): # For each account for account in report.account_ids: # Write account title - self.write_array_title(account.code + ' - ' + account.name) + self.write_array_title(account.code + " - " + account.name) # Display array header for partners lines self.write_array_header() @@ -156,20 +186,24 @@ class AgedPartnerBalanceXslx(models.AbstractModel): self.write_line(partner.line_ids) # Display account lines - self.write_account_footer(report, - account, - _('Total'), - 'field_footer_total', - self.format_header_right, - self.format_header_amount, - False) - self.write_account_footer(report, - account, - _('Percents'), - 'field_footer_percent', - self.format_right_bold_italic, - self.format_percent_bold_italic, - True) + self.write_account_footer( + report, + account, + _("Total"), + "field_footer_total", + self.format_header_right, + self.format_header_amount, + False, + ) + self.write_account_footer( + report, + account, + _("Percents"), + "field_footer_percent", + self.format_right_bold_italic, + self.format_percent_bold_italic, + True, + ) # 2 lines break self.row_pos += 2 @@ -177,7 +211,7 @@ class AgedPartnerBalanceXslx(models.AbstractModel): # For each account for account in report.account_ids: # Write account title - self.write_array_title(account.code + ' - ' + account.name) + self.write_array_title(account.code + " - " + account.name) # For each partner for partner in account.partner_ids: @@ -198,20 +232,24 @@ class AgedPartnerBalanceXslx(models.AbstractModel): self.row_pos += 1 # Display account lines - self.write_account_footer(report, - account, - _('Total'), - 'field_footer_total', - self.format_header_right, - self.format_header_amount, - False) - self.write_account_footer(report, - account, - _('Percents'), - 'field_footer_percent', - self.format_right_bold_italic, - self.format_percent_bold_italic, - True) + self.write_account_footer( + report, + account, + _("Total"), + "field_footer_total", + self.format_header_right, + self.format_header_amount, + False, + ) + self.write_account_footer( + report, + account, + _("Percents"), + "field_footer_percent", + self.format_right_bold_italic, + self.format_percent_bold_italic, + True, + ) # 2 lines break self.row_pos += 2 @@ -222,13 +260,19 @@ class AgedPartnerBalanceXslx(models.AbstractModel): for Aged Partner Balance """ name = None - label = _('Partner cumul aged balance') - super(AgedPartnerBalanceXslx, self).write_ending_balance( - my_object, name, label - ) + label = _("Partner cumul aged balance") + super(AgedPartnerBalanceXslx, self).write_ending_balance(my_object, name, label) - def write_account_footer(self, report, account, label, field_name, - string_format, amount_format, amount_is_percent): + def write_account_footer( + self, + report, + account, + label, + field_name, + string_format, + amount_format, + amount_is_percent, + ): """ Specific function to write account footer for Aged Partner Balance """ @@ -239,19 +283,19 @@ class AgedPartnerBalanceXslx(models.AbstractModel): value = label else: value = getattr(account, column[field_name]) - cell_type = column.get('type', 'string') - if cell_type == 'string' or col_pos == col_pos_footer_label: - self.sheet.write_string(self.row_pos, col_pos, value or '', - string_format) - elif cell_type == 'amount': + cell_type = column.get("type", "string") + if cell_type == "string" or col_pos == col_pos_footer_label: + self.sheet.write_string( + self.row_pos, col_pos, value or "", string_format + ) + elif cell_type == "amount": number = float(value) if amount_is_percent: number /= 100 - self.sheet.write_number(self.row_pos, col_pos, - number, - amount_format) + self.sheet.write_number( + self.row_pos, col_pos, number, amount_format + ) else: - self.sheet.write_string(self.row_pos, col_pos, '', - string_format) + self.sheet.write_string(self.row_pos, col_pos, "", string_format) self.row_pos += 1 diff --git a/account_financial_report/report/general_ledger.py b/account_financial_report/report/general_ledger.py index 5beb736d..36ce45c8 100644 --- a/account_financial_report/report/general_ledger.py +++ b/account_financial_report/report/general_ledger.py @@ -1,8 +1,7 @@ - # © 2016 Julien Coux (Camptocamp) # 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 class GeneralLedgerReport(models.TransientModel): @@ -21,8 +20,8 @@ class GeneralLedgerReport(models.TransientModel): For receivable/payable and not centralized accounts """ - _name = 'report_general_ledger' - _inherit = 'account_financial_report_abstract' + _name = "report_general_ledger" + _inherit = "account_financial_report_abstract" # Filters fields, used for data computation date_from = fields.Date() @@ -32,71 +31,60 @@ class GeneralLedgerReport(models.TransientModel): hide_account_at_0 = fields.Boolean() foreign_currency = fields.Boolean() show_analytic_tags = fields.Boolean() - company_id = fields.Many2one(comodel_name='res.company') - filter_account_ids = fields.Many2many(comodel_name='account.account') - filter_partner_ids = fields.Many2many(comodel_name='res.partner') - filter_cost_center_ids = fields.Many2many( - comodel_name='account.analytic.account' - ) - filter_analytic_tag_ids = fields.Many2many( - comodel_name='account.analytic.tag', - ) - filter_journal_ids = fields.Many2many( - comodel_name='account.journal', - ) + company_id = fields.Many2one(comodel_name="res.company") + filter_account_ids = fields.Many2many(comodel_name="account.account") + filter_partner_ids = fields.Many2many(comodel_name="res.partner") + filter_cost_center_ids = fields.Many2many(comodel_name="account.analytic.account") + filter_analytic_tag_ids = fields.Many2many(comodel_name="account.analytic.tag",) + filter_journal_ids = fields.Many2many(comodel_name="account.journal",) centralize = fields.Boolean() # Flag fields, used for report display show_cost_center = fields.Boolean( default=lambda self: self.env.user.has_group( - 'analytic.group_analytic_accounting' + "analytic.group_analytic_accounting" ) ) partner_ungrouped = fields.Boolean( - string='Partner ungrouped', - help='If set moves are not grouped by partner in any case' + string="Partner ungrouped", + help="If set moves are not grouped by partner in any case", ) # Data fields, used to browse report data account_ids = fields.One2many( - comodel_name='report_general_ledger_account', - inverse_name='report_id' + comodel_name="report_general_ledger_account", inverse_name="report_id" ) # Compute of unaffected earnings account - @api.depends('company_id') + @api.depends("company_id") def _compute_unaffected_earnings_account(self): - account_type = self.env.ref('account.data_unaffected_earnings') - self.unaffected_earnings_account = self.env['account.account'].search( + account_type = self.env.ref("account.data_unaffected_earnings") + self.unaffected_earnings_account = self.env["account.account"].search( [ - ('user_type_id', '=', account_type.id), - ('company_id', '=', self.company_id.id) - ]) + ("user_type_id", "=", account_type.id), + ("company_id", "=", self.company_id.id), + ] + ) unaffected_earnings_account = fields.Many2one( - comodel_name='account.account', - compute='_compute_unaffected_earnings_account', - store=True + comodel_name="account.account", + compute="_compute_unaffected_earnings_account", + store=True, ) class GeneralLedgerReportAccount(models.TransientModel): - _name = 'report_general_ledger_account' - _inherit = 'account_financial_report_abstract' - _order = 'code ASC' + _name = "report_general_ledger_account" + _inherit = "account_financial_report_abstract" + _order = "code ASC" report_id = fields.Many2one( - comodel_name='report_general_ledger', - ondelete='cascade', - index=True + comodel_name="report_general_ledger", ondelete="cascade", index=True ) # Data fields, used to keep link with real object - account_id = fields.Many2one( - 'account.account', - index=True - ) + account_id = fields.Many2one("account.account", index=True) # Data fields, used for report display code = fields.Char() @@ -104,7 +92,7 @@ class GeneralLedgerReportAccount(models.TransientModel): initial_debit = fields.Float(digits=(16, 2)) initial_credit = fields.Float(digits=(16, 2)) initial_balance = fields.Float(digits=(16, 2)) - currency_id = fields.Many2one('res.currency') + currency_id = fields.Many2one("res.currency") initial_balance_foreign_currency = fields.Float(digits=(16, 2)) final_debit = fields.Float(digits=(16, 2)) final_credit = fields.Float(digits=(16, 2)) @@ -116,38 +104,31 @@ class GeneralLedgerReportAccount(models.TransientModel): # Data fields, used to browse report data move_line_ids = fields.One2many( - comodel_name='report_general_ledger_move_line', - inverse_name='report_account_id' + comodel_name="report_general_ledger_move_line", inverse_name="report_account_id" ) partner_ids = fields.One2many( - comodel_name='report_general_ledger_partner', - inverse_name='report_account_id' + comodel_name="report_general_ledger_partner", inverse_name="report_account_id" ) class GeneralLedgerReportPartner(models.TransientModel): - _name = 'report_general_ledger_partner' - _inherit = 'account_financial_report_abstract' + _name = "report_general_ledger_partner" + _inherit = "account_financial_report_abstract" report_account_id = fields.Many2one( - comodel_name='report_general_ledger_account', - ondelete='cascade', - index=True + comodel_name="report_general_ledger_account", ondelete="cascade", index=True ) # Data fields, used to keep link with real object - partner_id = fields.Many2one( - 'res.partner', - index=True - ) + partner_id = fields.Many2one("res.partner", index=True) # Data fields, used for report display name = fields.Char() initial_debit = fields.Float(digits=(16, 2)) initial_credit = fields.Float(digits=(16, 2)) initial_balance = fields.Float(digits=(16, 2)) - currency_id = fields.Many2one('res.currency') + currency_id = fields.Many2one("res.currency") initial_balance_foreign_currency = fields.Float(digits=(16, 2)) final_debit = fields.Float(digits=(16, 2)) final_credit = fields.Float(digits=(16, 2)) @@ -156,8 +137,7 @@ class GeneralLedgerReportPartner(models.TransientModel): # Data fields, used to browse report data move_line_ids = fields.One2many( - comodel_name='report_general_ledger_move_line', - inverse_name='report_partner_id' + comodel_name="report_general_ledger_move_line", inverse_name="report_partner_id" ) @api.model @@ -176,22 +156,18 @@ ORDER BY class GeneralLedgerReportMoveLine(models.TransientModel): - _name = 'report_general_ledger_move_line' - _inherit = 'account_financial_report_abstract' + _name = "report_general_ledger_move_line" + _inherit = "account_financial_report_abstract" report_account_id = fields.Many2one( - comodel_name='report_general_ledger_account', - ondelete='cascade', - index=True + comodel_name="report_general_ledger_account", ondelete="cascade", index=True ) report_partner_id = fields.Many2one( - comodel_name='report_general_ledger_partner', - ondelete='cascade', - index=True + comodel_name="report_general_ledger_partner", ondelete="cascade", index=True ) # Data fields, used to keep link with real object - move_line_id = fields.Many2one('account.move.line') + move_line_id = fields.Many2one("account.move.line") # Data fields, used for report display date = fields.Date() @@ -207,7 +183,7 @@ class GeneralLedgerReportMoveLine(models.TransientModel): debit = fields.Float(digits=(16, 2)) credit = fields.Float(digits=(16, 2)) cumul_balance = fields.Float(digits=(16, 2)) - currency_id = fields.Many2one('res.currency') + currency_id = fields.Many2one("res.currency") amount_currency = fields.Float(digits=(16, 2)) @@ -216,31 +192,34 @@ class GeneralLedgerReportCompute(models.TransientModel): For class fields, go more top at this file. """ - _inherit = 'report_general_ledger' + _inherit = "report_general_ledger" @api.multi def print_report(self, report_type): self.ensure_one() - if report_type == 'xlsx': - report_name = 'a_f_r.report_general_ledger_xlsx' + if report_type == "xlsx": + report_name = "a_f_r.report_general_ledger_xlsx" else: - report_name = 'account_financial_report.' \ - 'report_general_ledger_qweb' - return self.env['ir.actions.report'].search( - [('report_name', '=', report_name), - ('report_type', '=', report_type)], - limit=1).report_action(self, config=False) + report_name = "account_financial_report." "report_general_ledger_qweb" + return ( + self.env["ir.actions.report"] + .search( + [("report_name", "=", report_name), ("report_type", "=", report_type)], + limit=1, + ) + .report_action(self, config=False) + ) def _get_html(self): result = {} rcontext = {} context = dict(self.env.context) - report = self.browse(context.get('active_id')) + report = self.browse(context.get("active_id")) if report: - rcontext['o'] = report - result['html'] = self.env.ref( - 'account_financial_report.report_general_ledger').render( - rcontext) + rcontext["o"] = report + result["html"] = self.env.ref( + "account_financial_report.report_general_ledger" + ).render(rcontext) return result @api.model @@ -248,9 +227,7 @@ class GeneralLedgerReportCompute(models.TransientModel): return self._get_html() @api.multi - def compute_data_for_report(self, - with_line_details=True, - with_partners=True): + def compute_data_for_report(self, with_line_details=True, with_partners=True): self.ensure_one() # Compute report data self._inject_account_values() @@ -260,9 +237,10 @@ class GeneralLedgerReportCompute(models.TransientModel): if not self.filter_partner_ids: self._inject_partner_values(only_empty_partner=True) # Add unaffected earnings account - if (not self.filter_account_ids or - self.unaffected_earnings_account.id in - self.filter_account_ids.ids): + if ( + not self.filter_account_ids + or self.unaffected_earnings_account.id in self.filter_account_ids.ids + ): self._inject_unaffected_earnings_account_values() # Call this function even if we don't want line details because, @@ -276,13 +254,14 @@ class GeneralLedgerReportCompute(models.TransientModel): if with_line_details: self._inject_line_not_centralized_values( - is_account_line=False, - is_partner_line=True) + is_account_line=False, is_partner_line=True + ) self._inject_line_not_centralized_values( is_account_line=False, is_partner_line=True, - only_empty_partner_line=True) + only_empty_partner_line=True, + ) if self.centralize: self._inject_line_centralized_values() @@ -295,7 +274,8 @@ class GeneralLedgerReportCompute(models.TransientModel): self.invalidate_cache() def _get_account_sub_subquery_sum_amounts( - self, include_initial_balance, date_included): + self, include_initial_balance, date_included + ): """ Return subquery used to compute sum amounts on accounts """ sub_subquery_sum_amounts = """ SELECT @@ -339,7 +319,9 @@ class GeneralLedgerReportCompute(models.TransientModel): sub_subquery_sum_amounts += """ AND ml.journal_id IN %s - """ % (tuple(self.filter_journal_ids.ids,),) + """ % ( + tuple(self.filter_journal_ids.ids,), + ) if self.only_posted_moves: sub_subquery_sum_amounts += """ @@ -425,9 +407,9 @@ WITH account_account a """ if ( - self.filter_partner_ids or - self.filter_cost_center_ids or - self.filter_analytic_tag_ids + self.filter_partner_ids + or self.filter_cost_center_ids + or self.filter_analytic_tag_ids ): query_inject_account += """ INNER JOIN @@ -473,9 +455,9 @@ WITH p.id IN %s """ if ( - self.filter_partner_ids or - self.filter_cost_center_ids or - self.filter_analytic_tag_ids + self.filter_partner_ids + or self.filter_cost_center_ids + or self.filter_analytic_tag_ids ): query_inject_account += """ GROUP BY @@ -514,9 +496,14 @@ WITH date_included=True ) - query_inject_account += """ - initial_sum_amounts AS ( """ + init_subquery + """ ), - final_sum_amounts AS ( """ + final_subquery + """ ) + query_inject_account += ( + """ + initial_sum_amounts AS ( """ + + init_subquery + + """ ), + final_sum_amounts AS ( """ + + final_subquery + + """ ) INSERT INTO report_general_ledger_account ( @@ -572,6 +559,7 @@ WHERE OR f.balance IS NOT NULL AND f.balance != 0 ) """ + ) if self.hide_account_at_0: query_inject_account += """ AND @@ -579,59 +567,37 @@ AND """ query_inject_account_params = () if self.filter_cost_center_ids: - query_inject_account_params += ( - tuple(self.filter_cost_center_ids.ids), - ) + query_inject_account_params += (tuple(self.filter_cost_center_ids.ids),) if self.filter_analytic_tag_ids: - query_inject_account_params += ( - tuple(self.filter_analytic_tag_ids.ids), - ) + query_inject_account_params += (tuple(self.filter_analytic_tag_ids.ids),) query_inject_account_params += ( self.company_id.id, self.unaffected_earnings_account.id, ) if self.filter_account_ids: - query_inject_account_params += ( - tuple(self.filter_account_ids.ids), - ) + query_inject_account_params += (tuple(self.filter_account_ids.ids),) if self.filter_partner_ids: - query_inject_account_params += ( - tuple(self.filter_partner_ids.ids), - ) + query_inject_account_params += (tuple(self.filter_partner_ids.ids),) if self.filter_analytic_tag_ids: - query_inject_account_params += ( - tuple(self.filter_analytic_tag_ids.ids), - ) + query_inject_account_params += (tuple(self.filter_analytic_tag_ids.ids),) query_inject_account_params += ( self.date_from, self.fy_start_date, ) if self.filter_cost_center_ids: - query_inject_account_params += ( - tuple(self.filter_cost_center_ids.ids), - ) - query_inject_account_params += ( - self.date_from, - ) + query_inject_account_params += (tuple(self.filter_cost_center_ids.ids),) + query_inject_account_params += (self.date_from,) if self.filter_cost_center_ids: - query_inject_account_params += ( - tuple(self.filter_cost_center_ids.ids), - ) + query_inject_account_params += (tuple(self.filter_cost_center_ids.ids),) query_inject_account_params += ( self.date_to, self.fy_start_date, ) if self.filter_cost_center_ids: - query_inject_account_params += ( - tuple(self.filter_cost_center_ids.ids), - ) - query_inject_account_params += ( - self.date_to, - ) + query_inject_account_params += (tuple(self.filter_cost_center_ids.ids),) + query_inject_account_params += (self.date_to,) if self.filter_cost_center_ids: - query_inject_account_params += ( - tuple(self.filter_cost_center_ids.ids), - ) + query_inject_account_params += (tuple(self.filter_cost_center_ids.ids),) query_inject_account_params += ( self.id, self.env.uid, @@ -639,7 +605,7 @@ AND self.env.cr.execute(query_inject_account, query_inject_account_params) def _get_partner_sub_subquery_sum_amounts( - self, only_empty_partner, include_initial_balance, date_included + self, only_empty_partner, include_initial_balance, date_included ): """ Return subquery used to compute sum amounts on partners """ sub_subquery_sum_amounts = """ @@ -713,8 +679,9 @@ AND """ return sub_subquery_sum_amounts - def _get_final_partner_sub_subquery_sum_amounts(self, only_empty_partner, - date_included): + def _get_final_partner_sub_subquery_sum_amounts( + self, only_empty_partner, date_included + ): """Return final subquery used to compute sum amounts on partners""" subquery_sum_amounts = """ @@ -733,7 +700,7 @@ AND subquery_sum_amounts += self._get_partner_sub_subquery_sum_amounts( only_empty_partner, include_initial_balance=False, - date_included=date_included + date_included=date_included, ) subquery_sum_amounts += """ UNION @@ -741,7 +708,7 @@ AND subquery_sum_amounts += self._get_partner_sub_subquery_sum_amounts( only_empty_partner, include_initial_balance=True, - date_included=date_included + date_included=date_included, ) subquery_sum_amounts += """ ) sub @@ -756,7 +723,8 @@ AND Only for "partner" accounts (payable and receivable). """ # pylint: disable=sql-injection - query_inject_partner = """ + query_inject_partner = ( + """ WITH accounts_partners AS ( @@ -773,7 +741,9 @@ WITH THEN p.name || ' (' || p.ref || ')' ELSE p.name END, - '""" + _('No partner allocated') + """' + '""" + + _("No partner allocated") + + """' ) AS partner_name FROM report_general_ledger_account ra @@ -786,6 +756,7 @@ WITH LEFT JOIN res_partner p ON ml.partner_id = p.id """ + ) if self.filter_cost_center_ids: query_inject_partner += """ INNER JOIN @@ -834,12 +805,10 @@ WITH """ init_subquery = self._get_final_partner_sub_subquery_sum_amounts( - only_empty_partner, - date_included=False + only_empty_partner, date_included=False ) final_subquery = self._get_final_partner_sub_subquery_sum_amounts( - only_empty_partner, - date_included=True + only_empty_partner, date_included=True ) query_inject_partner += """ @@ -873,9 +842,14 @@ WITH ), """ - query_inject_partner += """ - initial_sum_amounts AS ( """ + init_subquery + """ ), - final_sum_amounts AS ( """ + final_subquery + """ ) + query_inject_partner += ( + """ + initial_sum_amounts AS ( """ + + init_subquery + + """ ), + final_sum_amounts AS ( """ + + final_subquery + + """ ) INSERT INTO report_general_ledger_partner ( @@ -916,6 +890,7 @@ LEFT JOIN ON ( """ + ) if not only_empty_partner: query_inject_partner += """ ap.partner_id = i.partner_id @@ -960,65 +935,42 @@ AND """ query_inject_partner_params = () if self.filter_cost_center_ids: - query_inject_partner_params += ( - tuple(self.filter_cost_center_ids.ids), - ) + query_inject_partner_params += (tuple(self.filter_cost_center_ids.ids),) if self.filter_analytic_tag_ids: - query_inject_partner_params += ( - tuple(self.filter_analytic_tag_ids.ids), - ) - query_inject_partner_params += ( - self.id, - ) + query_inject_partner_params += (tuple(self.filter_analytic_tag_ids.ids),) + query_inject_partner_params += (self.id,) if self.filter_partner_ids: - query_inject_partner_params += ( - tuple(self.filter_partner_ids.ids), - ) + query_inject_partner_params += (tuple(self.filter_partner_ids.ids),) if self.filter_analytic_tag_ids: - query_inject_partner_params += ( - tuple(self.filter_analytic_tag_ids.ids), - ) + query_inject_partner_params += (tuple(self.filter_analytic_tag_ids.ids),) query_inject_partner_params += ( self.date_from, self.fy_start_date, ) if self.filter_cost_center_ids: - query_inject_partner_params += ( - tuple(self.filter_cost_center_ids.ids), - ) - query_inject_partner_params += ( - self.date_from, - ) + query_inject_partner_params += (tuple(self.filter_cost_center_ids.ids),) + query_inject_partner_params += (self.date_from,) if self.filter_cost_center_ids: - query_inject_partner_params += ( - tuple(self.filter_cost_center_ids.ids), - ) + query_inject_partner_params += (tuple(self.filter_cost_center_ids.ids),) query_inject_partner_params += ( self.date_to, self.fy_start_date, ) if self.filter_cost_center_ids: - query_inject_partner_params += ( - tuple(self.filter_cost_center_ids.ids), - ) - query_inject_partner_params += ( - self.date_to, - ) + query_inject_partner_params += (tuple(self.filter_cost_center_ids.ids),) + query_inject_partner_params += (self.date_to,) if self.filter_cost_center_ids: - query_inject_partner_params += ( - tuple(self.filter_cost_center_ids.ids), - ) - query_inject_partner_params += ( - self.env.uid, - ) + query_inject_partner_params += (tuple(self.filter_cost_center_ids.ids),) + query_inject_partner_params += (self.env.uid,) self.env.cr.execute(query_inject_partner, query_inject_partner_params) def _inject_line_not_centralized_values( - self, - is_account_line=True, - is_partner_line=False, - only_empty_partner_line=False, - only_unaffected_earnings_account=False): + self, + is_account_line=True, + is_partner_line=False, + only_empty_partner_line=False, + only_unaffected_earnings_account=False, + ): """ Inject report values for report_general_ledger_move_line. If centralized option have been chosen, @@ -1151,9 +1103,13 @@ SELECT END AS partner, """ elif only_empty_partner_line: - query_inject_move_line += """ - '""" + _('No partner allocated') + """' AS partner, + query_inject_move_line += ( + """ + '""" + + _("No partner allocated") + + """' AS partner, """ + ) query_inject_move_line += """ CONCAT_WS(' - ', NULLIF(ml.ref, ''), NULLIF(ml.name, '')) AS label, aa.name AS cost_center, @@ -1243,7 +1199,7 @@ LEFT JOIN account_analytic_account aa ON ml.analytic_account_id = aa.id """ if self.filter_analytic_tag_ids: - query_inject_move_line += """ + query_inject_move_line += """ INNER JOIN move_lines_on_tags ON ml.id = move_lines_on_tags.ml_id """ @@ -1313,32 +1269,19 @@ ORDER BY self.id, tuple(self.filter_analytic_tag_ids.ids), ) - query_inject_move_line_params += ( - self.env.uid, - ) + query_inject_move_line_params += (self.env.uid,) if self.filter_cost_center_ids: - query_inject_move_line_params += ( - tuple(self.filter_cost_center_ids.ids), - ) - query_inject_move_line_params += ( - self.id, - ) + query_inject_move_line_params += (tuple(self.filter_cost_center_ids.ids),) + query_inject_move_line_params += (self.id,) if only_unaffected_earnings_account: - query_inject_move_line_params += ( - self.unaffected_earnings_account.id, - ) + query_inject_move_line_params += (self.unaffected_earnings_account.id,) query_inject_move_line_params += ( self.date_from, self.date_to, ) if self.filter_journal_ids: - query_inject_move_line_params += (tuple( - self.filter_journal_ids.ids, - ),) - self.env.cr.execute( - query_inject_move_line, - query_inject_move_line_params - ) + query_inject_move_line_params += (tuple(self.filter_journal_ids.ids,),) + self.env.cr.execute(query_inject_move_line, query_inject_move_line_params) def _inject_line_centralized_values(self): """ Inject report values for report_general_ledger_move_line. @@ -1423,7 +1366,8 @@ WITH AND m.state = 'posted' """ - query_inject_move_line_centralized += """ + query_inject_move_line_centralized += ( + """ GROUP BY ra.id, ml.account_id, a.code, 2, ml.currency_id, ml.journal_id ) @@ -1448,7 +1392,9 @@ SELECT ml.date, a.code AS account, j.code AS journal, - '""" + _('Centralized Entries') + """' AS label, + '""" + + _("Centralized Entries") + + """' AS label, ml.debit AS debit, ml.credit AS credit, ra.initial_balance + ( @@ -1470,6 +1416,7 @@ WHERE AND (a.centralized IS NOT NULL AND a.centralized = TRUE) """ + ) if self.filter_journal_ids: query_inject_move_line_centralized += """ AND @@ -1498,12 +1445,12 @@ ORDER BY self.id, ) if self.filter_journal_ids: - query_inject_move_line_centralized_params += (tuple( - self.filter_journal_ids.ids, - ),) + query_inject_move_line_centralized_params += ( + tuple(self.filter_journal_ids.ids,), + ) self.env.cr.execute( query_inject_move_line_centralized, - query_inject_move_line_centralized_params + query_inject_move_line_centralized_params, ) def _compute_analytic_tags(self): @@ -1572,7 +1519,7 @@ WHERE report_general_ledger_move_line.id = tags_values.report_id """ params = { - 'report_id': self.id, + "report_id": self.id, } self.env.cr.execute(query_update_analytic_tags, params) @@ -1589,20 +1536,21 @@ WHERE """ self.env.cr.execute(query_unaffected_earnings_account_ids) pl_account_ids = [r[0] for r in self.env.cr.fetchall()] - unaffected_earnings_account_ids = \ - pl_account_ids + [self.unaffected_earnings_account.id] + unaffected_earnings_account_ids = pl_account_ids + [ + self.unaffected_earnings_account.id + ] # Fetch the current fiscal year start date date = fields.Datetime.from_string(self.date_from) res = self.company_id.compute_fiscalyear_dates(date) - fy_start_date = res['date_from'] + fy_start_date = res["date_from"] query_select_previous_fy_unaffected_earnings_params = { - 'date_to': fy_start_date, - 'company_id': self.company_id.id, - 'account_ids': tuple(unaffected_earnings_account_ids), - 'analytic_tag_ids': tuple(self.filter_analytic_tag_ids.ids), + "date_to": fy_start_date, + "company_id": self.company_id.id, + "account_ids": tuple(unaffected_earnings_account_ids), + "analytic_tag_ids": tuple(self.filter_analytic_tag_ids.ids), } - query_select_previous_fy_unaffected_earnings = '' - q_analytic_tags = '' + query_select_previous_fy_unaffected_earnings = "" + q_analytic_tags = "" if self.filter_analytic_tag_ids: q_analytic_tags = """ WITH move_lines_on_tags AS @@ -1642,7 +1590,8 @@ WITH move_lines_on_tags AS AND aa.id IN %(cost_center_ids)s """ query_select_previous_fy_unaffected_earnings_params[ - 'cost_center_ids'] = tuple(self.filter_cost_center_ids.ids) + "cost_center_ids" + ] = tuple(self.filter_cost_center_ids.ids) if self.filter_analytic_tag_ids: query_select_previous_fy_unaffected_earnings += """ INNER JOIN move_lines_on_tags ON ml.id = @@ -1657,27 +1606,29 @@ WITH move_lines_on_tags AS query_select_previous_fy_unaffected_earnings += """ AND j.id IN %(journal_ids)s """ - query_select_previous_fy_unaffected_earnings_params[ - 'journal_ids'] = tuple(self.filter_journal_ids.ids) + query_select_previous_fy_unaffected_earnings_params["journal_ids"] = tuple( + self.filter_journal_ids.ids + ) if self.only_posted_moves: query_select_previous_fy_unaffected_earnings += """ AND am.state = 'posted' """ self.env.cr.execute( query_select_previous_fy_unaffected_earnings, - query_select_previous_fy_unaffected_earnings_params) + query_select_previous_fy_unaffected_earnings_params, + ) res = self.env.cr.fetchone() unaffected_earnings_initial_balance = res[0] or 0.0 # Now select the current period unaffected earnings, # excluding the current period P&L. query_select_period_unaffected_earnings_params = { - 'date_from': self.date_from, - 'date_to': self.date_to, - 'company_id': self.company_id.id, - 'unaffected_earnings_id': self.unaffected_earnings_account.id, - 'analytic_tag_ids': tuple(self.filter_analytic_tag_ids.ids), + "date_from": self.date_from, + "date_to": self.date_to, + "company_id": self.company_id.id, + "unaffected_earnings_id": self.unaffected_earnings_account.id, + "analytic_tag_ids": tuple(self.filter_analytic_tag_ids.ids), } - query_select_period_unaffected_earnings = '' + query_select_period_unaffected_earnings = "" if self.filter_analytic_tag_ids: query_select_period_unaffected_earnings += q_analytic_tags query_select_period_unaffected_earnings += """ @@ -1697,8 +1648,9 @@ WITH move_lines_on_tags AS ON ml.analytic_account_id = aa.id AND aa.id IN %(cost_center_ids)s """ - query_select_period_unaffected_earnings_params[ - 'cost_center_ids'] = tuple(self.filter_cost_center_ids.ids) + query_select_period_unaffected_earnings_params["cost_center_ids"] = tuple( + self.filter_cost_center_ids.ids + ) if self.filter_analytic_tag_ids: query_select_period_unaffected_earnings += """ INNER JOIN move_lines_on_tags @@ -1714,14 +1666,17 @@ WITH move_lines_on_tags AS query_select_period_unaffected_earnings += """ AND j.id IN %(journal_ids)s """ - query_select_period_unaffected_earnings_params[ - 'journal_ids'] = tuple(self.filter_journal_ids.ids) + query_select_period_unaffected_earnings_params["journal_ids"] = tuple( + self.filter_journal_ids.ids + ) if self.only_posted_moves: query_select_period_unaffected_earnings += """ AND am.state = 'posted' """ - self.env.cr.execute(query_select_period_unaffected_earnings, - query_select_period_unaffected_earnings_params) + self.env.cr.execute( + query_select_period_unaffected_earnings, + query_select_period_unaffected_earnings_params, + ) res = self.env.cr.fetchone() unaffected_earnings_period_debit = res[0] or 0.0 unaffected_earnings_period_credit = res[1] or 0.0 @@ -1760,24 +1715,30 @@ WITH move_lines_on_tags AS %(final_balance)s ) """ - initial_debit = unaffected_earnings_initial_balance >= 0 and \ - unaffected_earnings_initial_balance or 0 - initial_credit = unaffected_earnings_initial_balance < 0 and \ - -1 * unaffected_earnings_initial_balance or 0 - final_balance = unaffected_earnings_initial_balance + \ - unaffected_earnings_period_balance + initial_debit = ( + unaffected_earnings_initial_balance >= 0 + and unaffected_earnings_initial_balance + or 0 + ) + initial_credit = ( + unaffected_earnings_initial_balance < 0 + and -1 * unaffected_earnings_initial_balance + or 0 + ) + final_balance = ( + unaffected_earnings_initial_balance + unaffected_earnings_period_balance + ) query_inject_account_params = { - 'report_id': self.id, - 'user_id': self.env.uid, - 'account_id': self.unaffected_earnings_account.id, - 'code': self.unaffected_earnings_account.code, - 'name': self.unaffected_earnings_account.name, - 'initial_debit': initial_debit, - 'initial_credit': initial_credit, - 'initial_balance': unaffected_earnings_initial_balance, - 'final_debit': initial_debit + unaffected_earnings_period_debit, - 'final_credit': initial_credit + unaffected_earnings_period_credit, - 'final_balance': final_balance, + "report_id": self.id, + "user_id": self.env.uid, + "account_id": self.unaffected_earnings_account.id, + "code": self.unaffected_earnings_account.code, + "name": self.unaffected_earnings_account.name, + "initial_debit": initial_debit, + "initial_credit": initial_credit, + "initial_balance": unaffected_earnings_initial_balance, + "final_debit": initial_debit + unaffected_earnings_period_debit, + "final_credit": initial_credit + unaffected_earnings_period_credit, + "final_balance": final_balance, } - self.env.cr.execute(query_inject_account, - query_inject_account_params) + self.env.cr.execute(query_inject_account, query_inject_account_params) diff --git a/account_financial_report/report/general_ledger_xlsx.py b/account_financial_report/report/general_ledger_xlsx.py index 6f1ffa06..d4baec67 100644 --- a/account_financial_report/report/general_ledger_xlsx.py +++ b/account_financial_report/report/general_ledger_xlsx.py @@ -1,4 +1,3 @@ - # Author: Damien Crier # Author: Julien Coux # Copyright 2016 Camptocamp SA @@ -8,64 +7,67 @@ from odoo import _, models class GeneralLedgerXslx(models.AbstractModel): - _name = 'report.a_f_r.report_general_ledger_xlsx' - _inherit = 'report.account_financial_report.abstract_report_xlsx' + _name = "report.a_f_r.report_general_ledger_xlsx" + _inherit = "report.account_financial_report.abstract_report_xlsx" def _get_report_name(self, report): - report_name = _('General Ledger') + report_name = _("General Ledger") return self._get_report_complete_name(report, report_name) def _get_report_columns(self, report): res = { - 0: {'header': _('Date'), 'field': 'date', 'width': 11}, - 1: {'header': _('Entry'), 'field': 'entry', 'width': 18}, - 2: {'header': _('Journal'), 'field': 'journal', 'width': 8}, - 3: {'header': _('Account'), 'field': 'account', 'width': 9}, - 4: {'header': _('Taxes'), - 'field': 'taxes_description', - 'width': 15}, - 5: {'header': _('Partner'), 'field': 'partner', 'width': 25}, - 6: {'header': _('Ref - Label'), 'field': 'label', 'width': 40}, - 7: {'header': _('Cost center'), - 'field': 'cost_center', - 'width': 15}, - 8: {'header': _('Tags'), - 'field': 'tags', - 'width': 10}, - 9: {'header': _('Rec.'), 'field': 'matching_number', 'width': 5}, - 10: {'header': _('Debit'), - 'field': 'debit', - 'field_initial_balance': 'initial_debit', - 'field_final_balance': 'final_debit', - 'type': 'amount', - 'width': 14}, - 11: {'header': _('Credit'), - 'field': 'credit', - 'field_initial_balance': 'initial_credit', - 'field_final_balance': 'final_credit', - 'type': 'amount', - 'width': 14}, - 12: {'header': _('Cumul. Bal.'), - 'field': 'cumul_balance', - 'field_initial_balance': 'initial_balance', - 'field_final_balance': 'final_balance', - 'type': 'amount', - 'width': 14}, + 0: {"header": _("Date"), "field": "date", "width": 11}, + 1: {"header": _("Entry"), "field": "entry", "width": 18}, + 2: {"header": _("Journal"), "field": "journal", "width": 8}, + 3: {"header": _("Account"), "field": "account", "width": 9}, + 4: {"header": _("Taxes"), "field": "taxes_description", "width": 15}, + 5: {"header": _("Partner"), "field": "partner", "width": 25}, + 6: {"header": _("Ref - Label"), "field": "label", "width": 40}, + 7: {"header": _("Cost center"), "field": "cost_center", "width": 15}, + 8: {"header": _("Tags"), "field": "tags", "width": 10}, + 9: {"header": _("Rec."), "field": "matching_number", "width": 5}, + 10: { + "header": _("Debit"), + "field": "debit", + "field_initial_balance": "initial_debit", + "field_final_balance": "final_debit", + "type": "amount", + "width": 14, + }, + 11: { + "header": _("Credit"), + "field": "credit", + "field_initial_balance": "initial_credit", + "field_final_balance": "final_credit", + "type": "amount", + "width": 14, + }, + 12: { + "header": _("Cumul. Bal."), + "field": "cumul_balance", + "field_initial_balance": "initial_balance", + "field_final_balance": "final_balance", + "type": "amount", + "width": 14, + }, } if report.foreign_currency: foreign_currency = { - 13: {'header': _('Cur.'), - 'field': 'currency_id', - 'field_currency_balance': 'currency_id', - 'type': 'many2one', 'width': 7}, - 14: {'header': _('Amount cur.'), - 'field': 'amount_currency', - 'field_initial_balance': - 'initial_balance_foreign_currency', - 'field_final_balance': - 'final_balance_foreign_currency', - 'type': 'amount_currency', - 'width': 14}, + 13: { + "header": _("Cur."), + "field": "currency_id", + "field_currency_balance": "currency_id", + "type": "many2one", + "width": 7, + }, + 14: { + "header": _("Amount cur."), + "field": "amount_currency", + "field_initial_balance": "initial_balance_foreign_currency", + "field_final_balance": "final_balance_foreign_currency", + "type": "amount_currency", + "width": 14, + }, } res = {**res, **foreign_currency} return res @@ -73,29 +75,27 @@ class GeneralLedgerXslx(models.AbstractModel): def _get_report_filters(self, report): return [ [ - _('Date range filter'), - _('From: %s To: %s') % (report.date_from, report.date_to), - ], - [ - _('Target moves filter'), - _('All posted entries') if report.only_posted_moves - else _('All entries'), + _("Date range filter"), + _("From: %s To: %s") % (report.date_from, report.date_to), ], [ - _('Account balance at 0 filter'), - _('Hide') if report.hide_account_at_0 else _('Show'), + _("Target moves filter"), + _("All posted entries") + if report.only_posted_moves + else _("All entries"), ], [ - _('Centralize filter'), - _('Yes') if report.centralize else _('No'), + _("Account balance at 0 filter"), + _("Hide") if report.hide_account_at_0 else _("Show"), ], + [_("Centralize filter"), _("Yes") if report.centralize else _("No"),], [ - _('Show analytic tags'), - _('Yes') if report.show_analytic_tags else _('No'), + _("Show analytic tags"), + _("Yes") if report.show_analytic_tags else _("No"), ], [ - _('Show foreign currency'), - _('Yes') if report.foreign_currency else _('No') + _("Show foreign currency"), + _("Yes") if report.foreign_currency else _("No"), ], ] @@ -118,7 +118,7 @@ class GeneralLedgerXslx(models.AbstractModel): # For each account for account in report.account_ids: # Write account title - self.write_array_title(account.code + ' - ' + account.name) + self.write_array_title(account.code + " - " + account.name) if not account.partner_ids: # Display array header for move lines @@ -162,23 +162,19 @@ class GeneralLedgerXslx(models.AbstractModel): def write_initial_balance(self, my_object): """Specific function to write initial balance for General Ledger""" - if 'partner' in my_object._name: - label = _('Partner Initial balance') + if "partner" in my_object._name: + label = _("Partner Initial balance") my_object.currency_id = my_object.report_account_id.currency_id - elif 'account' in my_object._name: - label = _('Initial balance') - super(GeneralLedgerXslx, self).write_initial_balance( - my_object, label - ) + elif "account" in my_object._name: + label = _("Initial balance") + super(GeneralLedgerXslx, self).write_initial_balance(my_object, label) def write_ending_balance(self, my_object): """Specific function to write ending balance for General Ledger""" - if 'partner' in my_object._name: + if "partner" in my_object._name: name = my_object.name - label = _('Partner ending balance') - elif 'account' in my_object._name: - name = my_object.code + ' - ' + my_object.name - label = _('Ending balance') - super(GeneralLedgerXslx, self).write_ending_balance( - my_object, name, label - ) + label = _("Partner ending balance") + elif "account" in my_object._name: + name = my_object.code + " - " + my_object.name + label = _("Ending balance") + super(GeneralLedgerXslx, self).write_ending_balance(my_object, name, label) diff --git a/account_financial_report/report/journal_ledger.py b/account_financial_report/report/journal_ledger.py index 3e4d7293..b4bbc924 100644 --- a/account_financial_report/report/journal_ledger.py +++ b/account_financial_report/report/journal_ledger.py @@ -1,80 +1,60 @@ # Copyright 2017 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models, fields, api +from odoo import api, fields, models DIGITS = (16, 2) class ReportJournalLedger(models.TransientModel): - _name = 'report_journal_ledger' - _inherit = 'account_financial_report_abstract' + _name = "report_journal_ledger" + _inherit = "account_financial_report_abstract" - date_from = fields.Date( - required=True - ) - date_to = fields.Date( - required=True - ) + date_from = fields.Date(required=True) + date_to = fields.Date(required=True) company_id = fields.Many2one( - comodel_name='res.company', - required=True, - ondelete='cascade' + comodel_name="res.company", required=True, ondelete="cascade" ) move_target = fields.Selection( - selection='_get_move_targets', - default='all', - required=True, + selection="_get_move_targets", default="all", required=True, ) sort_option = fields.Selection( - selection='_get_sort_options', - default='move_name', - required=True, + selection="_get_sort_options", default="move_name", required=True, ) group_option = fields.Selection( - selection='_get_group_options', - default='journal', - required=True, - ) - journal_ids = fields.Many2many( - comodel_name='account.journal', - required=True, + selection="_get_group_options", default="journal", required=True, ) + journal_ids = fields.Many2many(comodel_name="account.journal", required=True,) report_journal_ledger_ids = fields.One2many( - comodel_name='report_journal_ledger_journal', - inverse_name='report_id', + comodel_name="report_journal_ledger_journal", inverse_name="report_id", ) report_move_ids = fields.One2many( - comodel_name='report_journal_ledger_move', - inverse_name='report_id', + comodel_name="report_journal_ledger_move", inverse_name="report_id", ) report_move_line_ids = fields.One2many( - comodel_name='report_journal_ledger_move_line', - inverse_name='report_id', + comodel_name="report_journal_ledger_move_line", inverse_name="report_id", ) report_journal_ledger_tax_line_ids = fields.One2many( - comodel_name='report_journal_ledger_journal_tax_line', - inverse_name='report_id', + comodel_name="report_journal_ledger_journal_tax_line", inverse_name="report_id", ) report_tax_line_ids = fields.One2many( - comodel_name='report_journal_ledger_report_tax_line', - inverse_name='report_id', + comodel_name="report_journal_ledger_report_tax_line", inverse_name="report_id", ) foreign_currency = fields.Boolean() with_account_name = fields.Boolean() @api.model def _get_move_targets(self): - return self.env['journal.ledger.report.wizard']._get_move_targets() + return self.env["journal.ledger.report.wizard"]._get_move_targets() @api.model def _get_sort_options(self): - return self.env['journal.ledger.report.wizard']._get_sort_options() + return self.env["journal.ledger.report.wizard"]._get_sort_options() @api.model def _get_group_options(self): - return self.env['journal.ledger.report.wizard']._get_group_options() + return self.env["journal.ledger.report.wizard"]._get_group_options() @api.multi def compute_data_for_report(self): @@ -85,7 +65,7 @@ class ReportJournalLedger(models.TransientModel): self._inject_journal_tax_values() self._update_journal_report_total_values() - if self.group_option == 'none': + if self.group_option == "none": self._inject_report_tax_values() # Refresh cache because all data are computed with SQL requests @@ -99,9 +79,7 @@ class ReportJournalLedger(models.TransientModel): FROM report_journal_ledger_journal WHERE report_id = %s """ - params = ( - self.id, - ) + params = (self.id,) self.env.cr.execute(sql, params) sql = """ INSERT INTO report_journal_ledger_journal ( @@ -150,9 +128,7 @@ class ReportJournalLedger(models.TransientModel): FROM report_journal_ledger_move WHERE report_id = %s """ - params = ( - self.id, - ) + params = (self.id,) self.env.cr.execute(sql, params) sql = self._get_inject_move_insert() sql += self._get_inject_move_select() @@ -204,7 +180,7 @@ class ReportJournalLedger(models.TransientModel): AND am.date <= %s """ - if self.move_target != 'all': + if self.move_target != "all": where_clause += """ AND am.state = %s @@ -217,22 +193,17 @@ class ReportJournalLedger(models.TransientModel): order_by = """ ORDER BY """ - if self.sort_option == 'move_name': + if self.sort_option == "move_name": order_by += " am.name" - elif self.sort_option == 'date': + elif self.sort_option == "date": order_by += " am.date, am.name" return order_by @api.multi def _get_inject_move_params(self): - params = [ - self.env.uid, - self.id, - self.date_from, - self.date_to - ] + params = [self.env.uid, self.id, self.date_from, self.date_to] - if self.move_target != 'all': + if self.move_target != "all": params.append(self.move_target) return tuple(params) @@ -245,9 +216,7 @@ class ReportJournalLedger(models.TransientModel): FROM report_journal_ledger_move_line WHERE report_id = %s """ - params = ( - self.id, - ) + params = (self.id,) self.env.cr.execute(sql, params) sql = """ INSERT INTO report_journal_ledger_move_line ( @@ -360,7 +329,7 @@ class ReportJournalLedger(models.TransientModel): """ self.env.cr.execute(sql_distinct_tax_id, (self.id,)) rows = self.env.cr.fetchall() - tax_ids = set([row[0] for row in rows]) + tax_ids = {row[0] for row in rows} sql = """ INSERT INTO report_journal_ledger_report_tax_line ( @@ -443,9 +412,7 @@ class ReportJournalLedger(models.TransientModel): FROM report_journal_ledger_journal_tax_line WHERE report_id = %s """ - params = ( - self.id, - ) + params = (self.id,) self.env.cr.execute(sql, params) sql_distinct_tax_id = """ SELECT @@ -462,9 +429,9 @@ class ReportJournalLedger(models.TransientModel): tax_ids_by_journal_id[report_journal.id] = [] self.env.cr.execute(sql_distinct_tax_id, (report_journal.id,)) rows = self.env.cr.fetchall() - tax_ids_by_journal_id[report_journal.id].extend([ - row[0] for row in rows if row[0] - ]) + tax_ids_by_journal_id[report_journal.id].extend( + [row[0] for row in rows if row[0]] + ) sql = """ INSERT INTO report_journal_ledger_journal_tax_line ( @@ -587,26 +554,29 @@ class ReportJournalLedger(models.TransientModel): @api.multi def print_report(self, report_type): self.ensure_one() - if report_type == 'xlsx': - report_name = 'a_f_r.report_journal_ledger_xlsx' + if report_type == "xlsx": + report_name = "a_f_r.report_journal_ledger_xlsx" else: - report_name = 'account_financial_report.' \ - 'report_journal_ledger_qweb' - return self.env['ir.actions.report'].search( - [('report_name', '=', report_name), - ('report_type', '=', report_type)], - limit=1).report_action(self, config=False) + report_name = "account_financial_report." "report_journal_ledger_qweb" + return ( + self.env["ir.actions.report"] + .search( + [("report_name", "=", report_name), ("report_type", "=", report_type)], + limit=1, + ) + .report_action(self, config=False) + ) def _get_html(self): result = {} rcontext = {} context = dict(self.env.context) - report = self.browse(context.get('active_id')) + report = self.browse(context.get("active_id")) if report: - rcontext['o'] = report - result['html'] = self.env.ref( - 'account_financial_report.report_journal_ledger').render( - rcontext) + rcontext["o"] = report + result["html"] = self.env.ref( + "account_financial_report.report_journal_ledger" + ).render(rcontext) return result @api.model @@ -629,183 +599,114 @@ class ReportJournalLedger(models.TransientModel): class ReportJournalLedgerJournal(models.TransientModel): - _name = 'report_journal_ledger_journal' - _inherit = 'account_financial_report_abstract' + _name = "report_journal_ledger_journal" + _inherit = "account_financial_report_abstract" - name = fields.Char( - required=True, - ) + name = fields.Char(required=True,) code = fields.Char() report_id = fields.Many2one( - comodel_name='report_journal_ledger', - required=True, - ondelete='cascade' + comodel_name="report_journal_ledger", required=True, ondelete="cascade" ) journal_id = fields.Many2one( - comodel_name='account.journal', - required=True, - ondelete='cascade', + comodel_name="account.journal", required=True, ondelete="cascade", ) report_move_ids = fields.One2many( - comodel_name='report_journal_ledger_move', - inverse_name='report_journal_ledger_id', + comodel_name="report_journal_ledger_move", + inverse_name="report_journal_ledger_id", ) report_tax_line_ids = fields.One2many( - comodel_name='report_journal_ledger_journal_tax_line', - inverse_name='report_journal_ledger_id', - ) - debit = fields.Float( - digits=DIGITS, - ) - credit = fields.Float( - digits=DIGITS, + comodel_name="report_journal_ledger_journal_tax_line", + inverse_name="report_journal_ledger_id", ) + debit = fields.Float(digits=DIGITS,) + credit = fields.Float(digits=DIGITS,) company_id = fields.Many2one( - comodel_name='res.company', - required=True, - ondelete='cascade' - ) - currency_id = fields.Many2one( - comodel_name='res.currency', + comodel_name="res.company", required=True, ondelete="cascade" ) + currency_id = fields.Many2one(comodel_name="res.currency",) class ReportJournalLedgerMove(models.TransientModel): - _name = 'report_journal_ledger_move' - _inherit = 'account_financial_report_abstract' + _name = "report_journal_ledger_move" + _inherit = "account_financial_report_abstract" report_id = fields.Many2one( - comodel_name='report_journal_ledger', - required=True, - ondelete='cascade' + comodel_name="report_journal_ledger", required=True, ondelete="cascade" ) report_journal_ledger_id = fields.Many2one( - comodel_name='report_journal_ledger_journal', - required=True, - ondelete='cascade', + comodel_name="report_journal_ledger_journal", required=True, ondelete="cascade", ) move_id = fields.Many2one( - comodel_name='account.move', - required=True, - ondelete='cascade', + comodel_name="account.move", required=True, ondelete="cascade", ) report_move_line_ids = fields.One2many( - comodel_name='report_journal_ledger_move_line', - inverse_name='report_move_id', + comodel_name="report_journal_ledger_move_line", inverse_name="report_move_id", ) name = fields.Char() company_id = fields.Many2one( - comodel_name='res.company', - required=True, - ondelete='cascade' + comodel_name="res.company", required=True, ondelete="cascade" ) class ReportJournalLedgerMoveLine(models.TransientModel): - _name = 'report_journal_ledger_move_line' - _inherit = 'account_financial_report_abstract' - _order = 'partner_id desc, account_id desc' + _name = "report_journal_ledger_move_line" + _inherit = "account_financial_report_abstract" + _order = "partner_id desc, account_id desc" report_id = fields.Many2one( - comodel_name='report_journal_ledger', - required=True, - ondelete='cascade' + comodel_name="report_journal_ledger", required=True, ondelete="cascade" ) report_journal_ledger_id = fields.Many2one( - comodel_name='report_journal_ledger_journal', - required=True, - ondelete='cascade', + comodel_name="report_journal_ledger_journal", required=True, ondelete="cascade", ) report_move_id = fields.Many2one( - comodel_name='report_journal_ledger_move', - required=True, - ondelete='cascade', + comodel_name="report_journal_ledger_move", required=True, ondelete="cascade", ) move_line_id = fields.Many2one( - comodel_name='account.move.line', - required=True, - ondelete='cascade', - ) - account_id = fields.Many2one( - comodel_name='account.account', - string='Account ID', + comodel_name="account.move.line", required=True, ondelete="cascade", ) + account_id = fields.Many2one(comodel_name="account.account", string="Account ID",) account = fields.Char() account_code = fields.Char() account_type = fields.Char() partner = fields.Char() - partner_id = fields.Many2one( - comodel_name='res.partner', - string='Partner ID', - ) + partner_id = fields.Many2one(comodel_name="res.partner", string="Partner ID",) date = fields.Date() entry = fields.Char() label = fields.Char() - debit = fields.Float( - digits=DIGITS, - ) - credit = fields.Float( - digits=DIGITS, - ) - company_currency_id = fields.Many2one( - comodel_name='res.currency', - ) - amount_currency = fields.Monetary( - currency_field='currency_id', - ) - currency_id = fields.Many2one( - comodel_name='res.currency', - ) + debit = fields.Float(digits=DIGITS,) + credit = fields.Float(digits=DIGITS,) + company_currency_id = fields.Many2one(comodel_name="res.currency",) + amount_currency = fields.Monetary(currency_field="currency_id",) + currency_id = fields.Many2one(comodel_name="res.currency",) currency_name = fields.Char() taxes_description = fields.Char() - tax_id = fields.Many2one( - comodel_name='account.tax' - ) + tax_id = fields.Many2one(comodel_name="account.tax") company_id = fields.Many2one( - comodel_name='res.company', - required=True, - ondelete='cascade' + comodel_name="res.company", required=True, ondelete="cascade" ) class ReportJournalLedgerReportTaxLine(models.TransientModel): - _name = 'report_journal_ledger_report_tax_line' - _inherit = 'account_financial_report_abstract' - _order = 'tax_code' + _name = "report_journal_ledger_report_tax_line" + _inherit = "account_financial_report_abstract" + _order = "tax_code" report_id = fields.Many2one( - comodel_name='report_journal_ledger', - required=True, - ondelete='cascade' - ) - tax_id = fields.Many2one( - comodel_name='account.tax' + comodel_name="report_journal_ledger", required=True, ondelete="cascade" ) + tax_id = fields.Many2one(comodel_name="account.tax") tax_name = fields.Char() tax_code = fields.Char() - base_debit = fields.Float( - digits=DIGITS, - ) - base_credit = fields.Float( - digits=DIGITS, - ) - base_balance = fields.Float( - digits=DIGITS, - compute='_compute_base_balance', - ) - tax_debit = fields.Float( - digits=DIGITS, - ) - tax_credit = fields.Float( - digits=DIGITS, - ) - tax_balance = fields.Float( - digits=DIGITS, - compute='_compute_tax_balance' - ) + base_debit = fields.Float(digits=DIGITS,) + base_credit = fields.Float(digits=DIGITS,) + base_balance = fields.Float(digits=DIGITS, compute="_compute_base_balance",) + tax_debit = fields.Float(digits=DIGITS,) + tax_credit = fields.Float(digits=DIGITS,) + tax_balance = fields.Float(digits=DIGITS, compute="_compute_tax_balance") @api.multi def _compute_base_balance(self): @@ -820,12 +721,10 @@ class ReportJournalLedgerReportTaxLine(models.TransientModel): class ReportJournalLedgerJournalTaxLine(models.TransientModel): - _name = 'report_journal_ledger_journal_tax_line' - _inherit = 'report_journal_ledger_report_tax_line' - _order = 'tax_code' + _name = "report_journal_ledger_journal_tax_line" + _inherit = "report_journal_ledger_report_tax_line" + _order = "tax_code" report_journal_ledger_id = fields.Many2one( - comodel_name='report_journal_ledger_journal', - required=True, - ondelete='cascade', + comodel_name="report_journal_ledger_journal", required=True, ondelete="cascade", ) diff --git a/account_financial_report/report/journal_ledger_xlsx.py b/account_financial_report/report/journal_ledger_xlsx.py index 0d0bc559..0712b08f 100644 --- a/account_financial_report/report/journal_ledger_xlsx.py +++ b/account_financial_report/report/journal_ledger_xlsx.py @@ -7,82 +7,46 @@ from odoo import _, models class JournalLedgerXslx(models.AbstractModel): - _name = 'report.a_f_r.report_journal_ledger_xlsx' - _inherit = 'report.account_financial_report.abstract_report_xlsx' + _name = "report.a_f_r.report_journal_ledger_xlsx" + _inherit = "report.account_financial_report.abstract_report_xlsx" def _get_report_name(self, report): - report_name = _('Journal Ledger') + report_name = _("Journal Ledger") return self._get_report_complete_name(report, report_name) def _get_report_columns(self, report): columns = [ - { - 'header': _('Entry'), - 'field': 'entry', - 'width': 18 - }, - { - 'header': _('Date'), - 'field': 'date', - 'width': 11 - }, - { - 'header': _('Account'), - 'field': 'account_code', - 'width': 9 - }, + {"header": _("Entry"), "field": "entry", "width": 18}, + {"header": _("Date"), "field": "date", "width": 11}, + {"header": _("Account"), "field": "account_code", "width": 9}, ] if report.with_account_name: - columns.append({ - 'header': _('Account Name'), - 'field': 'account', - 'width': 15 - }) + columns.append( + {"header": _("Account Name"), "field": "account", "width": 15} + ) columns += [ - { - 'header': _('Partner'), - 'field': 'partner', - 'width': 25 - }, - { - 'header': _('Ref - Label'), - 'field': 'label', - 'width': 40 - }, - { - 'header': _('Taxes'), - 'field': 'taxes_description', - 'width': 11 - }, - { - 'header': _('Debit'), - 'field': 'debit', - 'type': 'amount', - 'width': 14, - }, - { - 'header': _('Credit'), - 'field': 'credit', - 'type': 'amount', - 'width': 14 - } + {"header": _("Partner"), "field": "partner", "width": 25}, + {"header": _("Ref - Label"), "field": "label", "width": 40}, + {"header": _("Taxes"), "field": "taxes_description", "width": 11}, + {"header": _("Debit"), "field": "debit", "type": "amount", "width": 14,}, + {"header": _("Credit"), "field": "credit", "type": "amount", "width": 14}, ] if report.foreign_currency: columns += [ { - 'header': _('Currency'), - 'field': 'currency_id', - 'type': 'many2one', - 'width': 14 + "header": _("Currency"), + "field": "currency_id", + "type": "many2one", + "width": 14, }, { - 'header': _('Amount Currency'), - 'field': 'amount_currency', - 'type': 'amount', - 'width': 18 + "header": _("Amount Currency"), + "field": "amount_currency", + "type": "amount", + "width": 18, }, ] @@ -93,51 +57,43 @@ class JournalLedgerXslx(models.AbstractModel): def _get_journal_tax_columns(self, report): return { - 0: { - 'header': _('Name'), - 'field': 'tax_name', - 'width': 35 - }, - 1: { - 'header': _('Description'), - 'field': 'tax_code', - 'width': 18 - }, + 0: {"header": _("Name"), "field": "tax_name", "width": 35}, + 1: {"header": _("Description"), "field": "tax_code", "width": 18}, 2: { - 'header': _('Base Debit'), - 'field': 'base_debit', - 'type': 'amount', - 'width': 14 + "header": _("Base Debit"), + "field": "base_debit", + "type": "amount", + "width": 14, }, 3: { - 'header': _('Base Credit'), - 'field': 'base_credit', - 'type': 'amount', - 'width': 14 + "header": _("Base Credit"), + "field": "base_credit", + "type": "amount", + "width": 14, }, 4: { - 'header': _('Base Balance'), - 'field': 'base_balance', - 'type': 'amount', - 'width': 14 + "header": _("Base Balance"), + "field": "base_balance", + "type": "amount", + "width": 14, }, 5: { - 'header': _('Tax Debit'), - 'field': 'tax_debit', - 'type': 'amount', - 'width': 14 + "header": _("Tax Debit"), + "field": "tax_debit", + "type": "amount", + "width": 14, }, 6: { - 'header': _('Tax Credit'), - 'field': 'tax_credit', - 'type': 'amount', - 'width': 14 + "header": _("Tax Credit"), + "field": "tax_credit", + "type": "amount", + "width": 14, }, 7: { - 'header': _('Tax Balance'), - 'field': 'tax_balance', - 'type': 'amount', - 'width': 14 + "header": _("Tax Balance"), + "field": "tax_balance", + "type": "amount", + "width": 14, }, } @@ -150,80 +106,84 @@ class JournalLedgerXslx(models.AbstractModel): def _get_report_filters(self, report): target_label_by_value = { value: label - for value, label in - self.env['journal.ledger.report.wizard']._get_move_targets() + for value, label in self.env[ + "journal.ledger.report.wizard" + ]._get_move_targets() } sort_option_label_by_value = { value: label - for value, label in - self.env['journal.ledger.report.wizard']._get_sort_options() + for value, label in self.env[ + "journal.ledger.report.wizard" + ]._get_sort_options() } return [ + [_("Company"), report.company_id.name], [ - _('Company'), - report.company_id.name + _("Date range filter"), + _("From: %s To: %s") % (report.date_from, report.date_to), ], [ - _('Date range filter'), - _('From: %s To: %s') % (report.date_from, report.date_to) - ], - [ - _('Target moves filter'), + _("Target moves filter"), _("%s") % target_label_by_value[report.move_target], ], [ - _('Entries sorted by'), + _("Entries sorted by"), _("%s") % sort_option_label_by_value[report.sort_option], ], [ - _('Journals'), - ', '.join([ - "%s - %s" % (report_journal.code, report_journal.name) - for report_journal in report.report_journal_ledger_ids - ]) - - ] + _("Journals"), + ", ".join( + [ + "{} - {}".format(report_journal.code, report_journal.name) + for report_journal in report.report_journal_ledger_ids + ] + ), + ], ] def _generate_report_content(self, workbook, report): group_option = report.group_option - if group_option == 'journal': + if group_option == "journal": for report_journal in report.report_journal_ledger_ids: self._generate_journal_content(workbook, report_journal) - elif group_option == 'none': + elif group_option == "none": self._generate_no_group_content(workbook, report) def _generate_no_group_content(self, workbook, report): - self._generate_moves_content( - workbook, report, "Report", report.report_move_ids) + self._generate_moves_content(workbook, report, "Report", report.report_move_ids) self._generate_no_group_taxes_summary(workbook, report) def _generate_journal_content(self, workbook, report_journal): - sheet_name = "%s (%s) - %s" % ( + sheet_name = "{} ({}) - {}".format( report_journal.code, report_journal.currency_id.name, report_journal.name, ) self._generate_moves_content( - workbook, report_journal.report_id, sheet_name, - report_journal.report_move_ids) + workbook, + report_journal.report_id, + sheet_name, + report_journal.report_move_ids, + ) self._generate_journal_taxes_summary(workbook, report_journal) def _generate_no_group_taxes_summary(self, workbook, report): self._generate_taxes_summary( - workbook, report, "Tax Report", report.report_tax_line_ids) + workbook, report, "Tax Report", report.report_tax_line_ids + ) def _generate_journal_taxes_summary(self, workbook, report_journal): - sheet_name = "Tax - %s (%s) - %s" % ( + sheet_name = "Tax - {} ({}) - {}".format( report_journal.code, report_journal.currency_id.name, report_journal.name, ) report = report_journal.report_id self._generate_taxes_summary( - workbook, report, sheet_name, report_journal.report_tax_line_ids) + workbook, report, sheet_name, report_journal.report_tax_line_ids + ) def _generate_moves_content(self, workbook, report, sheet_name, moves): self.workbook = workbook diff --git a/account_financial_report/report/open_items.py b/account_financial_report/report/open_items.py index 1ad2a944..31c06d99 100644 --- a/account_financial_report/report/open_items.py +++ b/account_financial_report/report/open_items.py @@ -1,8 +1,7 @@ - # © 2016 Julien Coux (Camptocamp) # 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 class OpenItemsReport(models.TransientModel): @@ -16,47 +15,41 @@ class OpenItemsReport(models.TransientModel): **** OpenItemsReportMoveLine """ - _name = 'report_open_items' - _inherit = 'account_financial_report_abstract' + _name = "report_open_items" + _inherit = "account_financial_report_abstract" # Filters fields, used for data computation date_at = fields.Date() only_posted_moves = fields.Boolean() hide_account_at_0 = fields.Boolean() foreign_currency = fields.Boolean() - company_id = fields.Many2one(comodel_name='res.company') - filter_account_ids = fields.Many2many(comodel_name='account.account') - filter_partner_ids = fields.Many2many(comodel_name='res.partner') + company_id = fields.Many2one(comodel_name="res.company") + filter_account_ids = fields.Many2many(comodel_name="account.account") + filter_partner_ids = fields.Many2many(comodel_name="res.partner") # Data fields, used to browse report data account_ids = fields.One2many( - comodel_name='report_open_items_account', - inverse_name='report_id' + comodel_name="report_open_items_account", inverse_name="report_id" ) class OpenItemsReportAccount(models.TransientModel): - _name = 'report_open_items_account' - _inherit = 'account_financial_report_abstract' - _order = 'code ASC' + _name = "report_open_items_account" + _inherit = "account_financial_report_abstract" + _order = "code ASC" report_id = fields.Many2one( - comodel_name='report_open_items', - ondelete='cascade', - index=True + comodel_name="report_open_items", ondelete="cascade", index=True ) # Data fields, used to keep link with real object - account_id = fields.Many2one( - 'account.account', - index=True - ) + account_id = fields.Many2one("account.account", index=True) # Data fields, used for report display code = fields.Char() name = fields.Char() - currency_id = fields.Many2one('res.currency') + currency_id = fields.Many2one("res.currency") final_amount_residual = fields.Float(digits=(16, 2)) final_amount_total_due = fields.Float(digits=(16, 2)) final_amount_residual_currency = fields.Float(digits=(16, 2)) @@ -64,31 +57,25 @@ class OpenItemsReportAccount(models.TransientModel): # Data fields, used to browse report data partner_ids = fields.One2many( - comodel_name='report_open_items_partner', - inverse_name='report_account_id' + comodel_name="report_open_items_partner", inverse_name="report_account_id" ) class OpenItemsReportPartner(models.TransientModel): - _name = 'report_open_items_partner' - _inherit = 'account_financial_report_abstract' + _name = "report_open_items_partner" + _inherit = "account_financial_report_abstract" report_account_id = fields.Many2one( - comodel_name='report_open_items_account', - ondelete='cascade', - index=True + comodel_name="report_open_items_account", ondelete="cascade", index=True ) # Data fields, used to keep link with real object - partner_id = fields.Many2one( - 'res.partner', - index=True - ) + partner_id = fields.Many2one("res.partner", index=True) # Data fields, used for report display name = fields.Char() - currency_id = fields.Many2one('res.currency') + currency_id = fields.Many2one("res.currency") final_amount_residual = fields.Float(digits=(16, 2)) final_amount_total_due = fields.Float(digits=(16, 2)) final_amount_residual_currency = fields.Float(digits=(16, 2)) @@ -96,8 +83,7 @@ class OpenItemsReportPartner(models.TransientModel): # Data fields, used to browse report data move_line_ids = fields.One2many( - comodel_name='report_open_items_move_line', - inverse_name='report_partner_id' + comodel_name="report_open_items_move_line", inverse_name="report_partner_id" ) @api.model @@ -116,17 +102,15 @@ ORDER BY class OpenItemsReportMoveLine(models.TransientModel): - _name = 'report_open_items_move_line' - _inherit = 'account_financial_report_abstract' + _name = "report_open_items_move_line" + _inherit = "account_financial_report_abstract" report_partner_id = fields.Many2one( - comodel_name='report_open_items_partner', - ondelete='cascade', - index=True + comodel_name="report_open_items_partner", ondelete="cascade", index=True ) # Data fields, used to keep link with real object - move_line_id = fields.Many2one('account.move.line') + move_line_id = fields.Many2one("account.move.line") # Data fields, used for report display date = fields.Date() @@ -138,7 +122,7 @@ class OpenItemsReportMoveLine(models.TransientModel): label = fields.Char() amount_total_due = fields.Float(digits=(16, 2)) amount_residual = fields.Float(digits=(16, 2)) - currency_id = fields.Many2one('res.currency') + currency_id = fields.Many2one("res.currency") amount_total_due_currency = fields.Float(digits=(16, 2)) amount_residual_currency = fields.Float(digits=(16, 2)) @@ -148,31 +132,34 @@ class OpenItemsReportCompute(models.TransientModel): For class fields, go more top at this file. """ - _inherit = 'report_open_items' + _inherit = "report_open_items" @api.multi def print_report(self, report_type): self.ensure_one() - if report_type == 'xlsx': - report_name = 'a_f_r.report_open_items_xlsx' + if report_type == "xlsx": + report_name = "a_f_r.report_open_items_xlsx" else: - report_name = 'account_financial_report.' \ - 'report_open_items_qweb' - return self.env['ir.actions.report'].search( - [('report_name', '=', report_name), - ('report_type', '=', report_type)], - limit=1).report_action(self, config=False) + report_name = "account_financial_report." "report_open_items_qweb" + return ( + self.env["ir.actions.report"] + .search( + [("report_name", "=", report_name), ("report_type", "=", report_type)], + limit=1, + ) + .report_action(self, config=False) + ) def _get_html(self): result = {} rcontext = {} context = dict(self.env.context) - report = self.browse(context.get('active_id')) + report = self.browse(context.get("active_id")) if report: - rcontext['o'] = report - result['html'] = self.env.ref( - 'account_financial_report.report_open_items').render( - rcontext) + rcontext["o"] = report + result["html"] = self.env.ref( + "account_financial_report.report_open_items" + ).render(rcontext) return result @api.model @@ -190,9 +177,7 @@ class OpenItemsReportCompute(models.TransientModel): self._clean_partners_and_accounts() self._compute_partners_and_accounts_cumul() if self.hide_account_at_0: - self._clean_partners_and_accounts( - only_delete_account_balance_at_0=True - ) + self._clean_partners_and_accounts(only_delete_account_balance_at_0=True) # Refresh cache because all data are computed with SQL requests self.invalidate_cache() @@ -271,13 +256,9 @@ FROM self.company_id.id, ) if self.filter_account_ids: - query_inject_account_params += ( - tuple(self.filter_account_ids.ids), - ) + query_inject_account_params += (tuple(self.filter_account_ids.ids),) if self.filter_partner_ids: - query_inject_account_params += ( - tuple(self.filter_partner_ids.ids), - ) + query_inject_account_params += (tuple(self.filter_partner_ids.ids),) query_inject_account_params += ( self.id, self.env.uid, @@ -287,7 +268,8 @@ FROM def _inject_partner_values(self): """ Inject report values for report_open_items_partner. """ # pylint: disable=sql-injection - query_inject_partner = """ + query_inject_partner = ( + """ WITH accounts_partners AS ( @@ -304,7 +286,9 @@ WITH THEN p.name || ' (' || p.ref || ')' ELSE p.name END, - '""" + _('No partner allocated') + """' + '""" + + _("No partner allocated") + + """' ) AS partner_name FROM report_open_items_account ra @@ -315,6 +299,7 @@ WITH INNER JOIN account_move_line ml ON a.id = ml.account_id AND ml.date <= %s """ + ) if self.only_posted_moves: query_inject_partner += """ INNER JOIN @@ -361,17 +346,13 @@ FROM self.id, ) if self.filter_partner_ids: - query_inject_partner_params += ( - tuple(self.filter_partner_ids.ids), - ) - query_inject_partner_params += ( - self.env.uid, - ) + query_inject_partner_params += (tuple(self.filter_partner_ids.ids),) + query_inject_partner_params += (self.env.uid,) self.env.cr.execute(query_inject_partner, query_inject_partner_params) - def _get_line_sub_query_move_lines(self, - only_empty_partner_line=False, - positive_balance=True): + def _get_line_sub_query_move_lines( + self, only_empty_partner_line=False, positive_balance=True + ): """ Return subquery used to compute sum amounts on lines """ sub_query = """ SELECT @@ -465,15 +446,13 @@ WITH ( """ query_inject_move_line += self._get_line_sub_query_move_lines( - only_empty_partner_line=only_empty_partner_line, - positive_balance=True + only_empty_partner_line=only_empty_partner_line, positive_balance=True ) query_inject_move_line += """ UNION """ query_inject_move_line += self._get_line_sub_query_move_lines( - only_empty_partner_line=only_empty_partner_line, - positive_balance=False + only_empty_partner_line=only_empty_partner_line, positive_balance=False ) query_inject_move_line += """ ), @@ -552,9 +531,13 @@ SELECT END AS partner, """ elif only_empty_partner_line: - query_inject_move_line += """ - '""" + _('No partner allocated') + """' AS partner, + query_inject_move_line += ( + """ + '""" + + _("No partner allocated") + + """' AS partner, """ + ) query_inject_move_line += """ CONCAT_WS(' - ', NULLIF(ml.ref, ''), NULLIF(ml.name, '')) AS label, ml.balance, @@ -620,15 +603,17 @@ ORDER BY """ self.env.cr.execute( query_inject_move_line, - (self.date_at, - self.date_at, - self.id, - self.date_at, - self.date_at, - self.id, - self.env.uid, - self.id, - self.date_at,) + ( + self.date_at, + self.date_at, + self.id, + self.date_at, + self.date_at, + self.id, + self.env.uid, + self.id, + self.date_at, + ), ) def _compute_partners_and_accounts_cumul(self): @@ -667,8 +652,10 @@ WHERE ) """ params_compute_partners_residual_cumul = (self.id,) - self.env.cr.execute(query_computer_partner_residual_cumul, - params_compute_partners_residual_cumul) + self.env.cr.execute( + query_computer_partner_residual_cumul, + params_compute_partners_residual_cumul, + ) query_compute_partners_due_cumul = """ UPDATE @@ -698,8 +685,9 @@ WHERE ) """ params_compute_partner_due_cumul = (self.id,) - self.env.cr.execute(query_compute_partners_due_cumul, - params_compute_partner_due_cumul) + self.env.cr.execute( + query_compute_partners_due_cumul, params_compute_partner_due_cumul + ) # Manage currency in partner query_compute_partners_cur_id_cumul = """ @@ -730,8 +718,9 @@ WHERE ) """ params_compute_partners_cur_id_cumul = (self.id,) - self.env.cr.execute(query_compute_partners_cur_id_cumul, - params_compute_partners_cur_id_cumul) + self.env.cr.execute( + query_compute_partners_cur_id_cumul, params_compute_partners_cur_id_cumul + ) query_compute_partners_cur_residual_cumul = """ UPDATE @@ -762,8 +751,10 @@ WHERE ) """ params_compute_partners_cur_residual_cumul = (self.id,) - self.env.cr.execute(query_compute_partners_cur_residual_cumul, - params_compute_partners_cur_residual_cumul) + self.env.cr.execute( + query_compute_partners_cur_residual_cumul, + params_compute_partners_cur_residual_cumul, + ) query_compute_partners_cur_due_cumul = """ UPDATE @@ -794,8 +785,9 @@ WHERE ) """ params_compute_partners_cur_due_cumul = (self.id,) - self.env.cr.execute(query_compute_partners_cur_due_cumul, - params_compute_partners_cur_due_cumul) + self.env.cr.execute( + query_compute_partners_cur_due_cumul, params_compute_partners_cur_due_cumul + ) def _compute_account_cumul(self): query_compute_accounts_residual_cumul = """ @@ -815,8 +807,10 @@ WHERE report_id = %s """ params_compute_accounts_residual_cumul = (self.id,) - self.env.cr.execute(query_compute_accounts_residual_cumul, - params_compute_accounts_residual_cumul) + self.env.cr.execute( + query_compute_accounts_residual_cumul, + params_compute_accounts_residual_cumul, + ) query_compute_accounts_cur_residual_cumul = """ UPDATE @@ -836,8 +830,10 @@ WHERE report_id = %s """ params_compute_accounts_cur_residual_cumul = (self.id,) - self.env.cr.execute(query_compute_accounts_cur_residual_cumul, - params_compute_accounts_cur_residual_cumul) + self.env.cr.execute( + query_compute_accounts_cur_residual_cumul, + params_compute_accounts_cur_residual_cumul, + ) query_compute_accounts_due_cumul = """ UPDATE @@ -856,8 +852,9 @@ WHERE report_id = %s """ params_compute_accounts_due_cumul = (self.id,) - self.env.cr.execute(query_compute_accounts_due_cumul, - params_compute_accounts_due_cumul) + self.env.cr.execute( + query_compute_accounts_due_cumul, params_compute_accounts_due_cumul + ) query_compute_accounts_cur_due_cumul = """ UPDATE @@ -877,11 +874,11 @@ WHERE report_id = %s """ params_compute_accounts_cur_due_cumul = (self.id,) - self.env.cr.execute(query_compute_accounts_cur_due_cumul, - params_compute_accounts_cur_due_cumul) + self.env.cr.execute( + query_compute_accounts_cur_due_cumul, params_compute_accounts_cur_due_cumul + ) - def _clean_partners_and_accounts(self, - only_delete_account_balance_at_0=False): + def _clean_partners_and_accounts(self, only_delete_account_balance_at_0=False): """ Delete empty data for report_open_items_partner and report_open_items_account. diff --git a/account_financial_report/report/open_items_xlsx.py b/account_financial_report/report/open_items_xlsx.py index 8bb2dcde..8f808698 100644 --- a/account_financial_report/report/open_items_xlsx.py +++ b/account_financial_report/report/open_items_xlsx.py @@ -6,63 +6,80 @@ from odoo import _, models class OpenItemsXslx(models.AbstractModel): - _name = 'report.a_f_r.report_open_items_xlsx' - _inherit = 'report.account_financial_report.abstract_report_xlsx' + _name = "report.a_f_r.report_open_items_xlsx" + _inherit = "report.account_financial_report.abstract_report_xlsx" def _get_report_name(self, report): - report_name = _('Open Items') + report_name = _("Open Items") return self._get_report_complete_name(report, report_name) def _get_report_columns(self, report): res = { - 0: {'header': _('Date'), 'field': 'date', 'width': 11}, - 1: {'header': _('Entry'), 'field': 'entry', 'width': 18}, - 2: {'header': _('Journal'), 'field': 'journal', 'width': 8}, - 3: {'header': _('Account'), 'field': 'account', 'width': 9}, - 4: {'header': _('Partner'), 'field': 'partner', 'width': 25}, - 5: {'header': _('Ref - Label'), 'field': 'label', 'width': 40}, - 6: {'header': _('Due date'), 'field': 'date_due', 'width': 11}, - 7: {'header': _('Original'), - 'field': 'amount_total_due', - 'type': 'amount', - 'width': 14}, - 8: {'header': _('Residual'), - 'field': 'amount_residual', - 'field_final_balance': 'final_amount_residual', - 'type': 'amount', - 'width': 14}, + 0: {"header": _("Date"), "field": "date", "width": 11}, + 1: {"header": _("Entry"), "field": "entry", "width": 18}, + 2: {"header": _("Journal"), "field": "journal", "width": 8}, + 3: {"header": _("Account"), "field": "account", "width": 9}, + 4: {"header": _("Partner"), "field": "partner", "width": 25}, + 5: {"header": _("Ref - Label"), "field": "label", "width": 40}, + 6: {"header": _("Due date"), "field": "date_due", "width": 11}, + 7: { + "header": _("Original"), + "field": "amount_total_due", + "type": "amount", + "width": 14, + }, + 8: { + "header": _("Residual"), + "field": "amount_residual", + "field_final_balance": "final_amount_residual", + "type": "amount", + "width": 14, + }, } if report.foreign_currency: foreign_currency = { - 9: {'header': _('Cur.'), 'field': 'currency_id', - 'field_currency_balance': 'currency_id', - 'type': 'many2one', 'width': 7}, - 10: {'header': _('Cur. Original'), - 'field': 'amount_total_due_currency', - 'field_final_balance': - 'final_amount_total_due_currency', - 'type': 'amount_currency', - 'width': 14}, - 11: {'header': _('Cur. Residual'), - 'field': 'amount_residual_currency', - 'field_final_balance': - 'final_amount_residual_currency', - 'type': 'amount_currency', - 'width': 14}, + 9: { + "header": _("Cur."), + "field": "currency_id", + "field_currency_balance": "currency_id", + "type": "many2one", + "width": 7, + }, + 10: { + "header": _("Cur. Original"), + "field": "amount_total_due_currency", + "field_final_balance": "final_amount_total_due_currency", + "type": "amount_currency", + "width": 14, + }, + 11: { + "header": _("Cur. Residual"), + "field": "amount_residual_currency", + "field_final_balance": "final_amount_residual_currency", + "type": "amount_currency", + "width": 14, + }, } res = {**res, **foreign_currency} return res def _get_report_filters(self, report): return [ - [_('Date at filter'), report.date_at], - [_('Target moves filter'), - _('All posted entries') if report.only_posted_moves else _( - 'All entries')], - [_('Account balance at 0 filter'), - _('Hide') if report.hide_account_at_0 else _('Show')], - [_('Show foreign currency'), - _('Yes') if report.foreign_currency else _('No')], + [_("Date at filter"), report.date_at], + [ + _("Target moves filter"), + _("All posted entries") + if report.only_posted_moves + else _("All entries"), + ], + [ + _("Account balance at 0 filter"), + _("Hide") if report.hide_account_at_0 else _("Show"), + ], + [ + _("Show foreign currency"), + _("Yes") if report.foreign_currency else _("No"), + ], ] def _get_col_count_filter_name(self): @@ -81,7 +98,7 @@ class OpenItemsXslx(models.AbstractModel): # For each account for account in report.account_ids: # Write account title - self.write_array_title(account.code + ' - ' + account.name) + self.write_array_title(account.code + " - " + account.name) # For each partner for partner in account.partner_ids: @@ -96,24 +113,24 @@ class OpenItemsXslx(models.AbstractModel): self.write_line(line) # Display ending balance line for partner - self.write_ending_balance(partner, 'partner') + self.write_ending_balance(partner, "partner") # Line break self.row_pos += 1 # Display ending balance line for account - self.write_ending_balance(account, 'account') + self.write_ending_balance(account, "account") # 2 lines break self.row_pos += 2 def write_ending_balance(self, my_object, type_object): """Specific function to write ending balance for Open Items""" - if type_object == 'partner': + if type_object == "partner": name = my_object.name - label = _('Partner ending balance') + label = _("Partner ending balance") my_object.currency_id = my_object.report_account_id.currency_id - elif type_object == 'account': - name = my_object.code + ' - ' + my_object.name - label = _('Ending balance') + elif type_object == "account": + name = my_object.code + " - " + my_object.name + label = _("Ending balance") super(OpenItemsXslx, self).write_ending_balance(my_object, name, label) diff --git a/account_financial_report/report/templates/aged_partner_balance.xml b/account_financial_report/report/templates/aged_partner_balance.xml index d6816058..0fc90d5d 100644 --- a/account_financial_report/report/templates/aged_partner_balance.xml +++ b/account_financial_report/report/templates/aged_partner_balance.xml @@ -1,87 +1,95 @@ - + - - - - - - - - - diff --git a/account_financial_report/report/templates/general_ledger.xml b/account_financial_report/report/templates/general_ledger.xml index a31b7aa2..32da70c3 100644 --- a/account_financial_report/report/templates/general_ledger.xml +++ b/account_financial_report/report/templates/general_ledger.xml @@ -1,81 +1,95 @@ - + - - - - - - diff --git a/account_financial_report/report/templates/journal_ledger.xml b/account_financial_report/report/templates/journal_ledger.xml index 8d04fb35..400eb15b 100644 --- a/account_financial_report/report/templates/journal_ledger.xml +++ b/account_financial_report/report/templates/journal_ledger.xml @@ -1,70 +1,84 @@ - + - -