From e0bda56035d5a9504e1e87a5a286a962713de726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Sat, 17 Sep 2022 19:46:31 +0200 Subject: [PATCH] [IMP] account_financial_report: Add tax grouping in general ledger TT38721 --- .../i18n/account_financial_report.pot | 31 ++++++++- account_financial_report/i18n/es.po | 33 +++++++++- .../report/general_ledger.py | 63 ++++++++++++++++--- .../report/general_ledger_xlsx.py | 4 ++ .../wizard/general_ledger_wizard.py | 2 +- 5 files changed, 119 insertions(+), 14 deletions(-) diff --git a/account_financial_report/i18n/account_financial_report.pot b/account_financial_report/i18n/account_financial_report.pot index 647d7e20..cd517577 100644 --- a/account_financial_report/i18n/account_financial_report.pot +++ b/account_financial_report/i18n/account_financial_report.pot @@ -6,6 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-09-20 07:00+0000\n" +"PO-Revision-Date: 2022-09-20 07:00+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -890,6 +892,11 @@ msgstr "" msgid "Group entries by" msgstr "" +#. module: account_financial_report +#: model:ir.model.fields,field_description:account_financial_report.field_general_ledger_report_wizard__grouped_by +msgid "Grouped by" +msgstr "" + #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:0 #: code:addons/account_financial_report/report/open_items_xlsx.py:0 @@ -1163,6 +1170,11 @@ msgstr "" msgid "No limit" msgstr "" +#. module: account_financial_report +#: model:ir.model.fields.selection,name:account_financial_report.selection__general_ledger_report_wizard__grouped_by__none +msgid "None" +msgstr "" + #. module: account_financial_report #: code:addons/account_financial_report/wizard/journal_ledger_wizard.py:0 #, python-format @@ -1290,6 +1302,11 @@ msgstr "" msgid "Partner ending balance" msgstr "" +#. module: account_financial_report +#: model:ir.model.fields.selection,name:account_financial_report.selection__general_ledger_report_wizard__grouped_by__partners +msgid "Partners" +msgstr "" + #. module: account_financial_report #: model:ir.model.fields,field_description:account_financial_report.field_aged_partner_balance_report_wizard__payable_accounts_only #: model:ir.model.fields,field_description:account_financial_report.field_general_ledger_report_wizard__payable_accounts_only @@ -1420,7 +1437,6 @@ msgid "Show Move Line Details" msgstr "" #. module: account_financial_report -#: model:ir.model.fields,field_description:account_financial_report.field_general_ledger_report_wizard__show_partner_details #: model:ir.model.fields,field_description:account_financial_report.field_open_items_report_wizard__show_partner_details #: model:ir.model.fields,field_description:account_financial_report.field_trial_balance_report_wizard__show_partner_details msgid "Show Partner Details" @@ -1541,6 +1557,12 @@ msgstr "" msgid "Tax Groups" msgstr "" +#. module: account_financial_report +#: code:addons/account_financial_report/report/general_ledger_xlsx.py:0 +#, python-format +msgid "Tax Initial balance" +msgstr "" + #. module: account_financial_report #: code:addons/account_financial_report/report/vat_report_xlsx.py:0 #: model:ir.model.fields.selection,name:account_financial_report.selection__vat_report_wizard__based_on__taxtags @@ -1548,9 +1570,16 @@ msgstr "" msgid "Tax Tags" msgstr "" +#. module: account_financial_report +#: code:addons/account_financial_report/report/general_ledger_xlsx.py:0 +#, python-format +msgid "Tax ending balance" +msgstr "" + #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:0 #: code:addons/account_financial_report/report/journal_ledger_xlsx.py:0 +#: model:ir.model.fields.selection,name:account_financial_report.selection__general_ledger_report_wizard__grouped_by__taxes #: model_terms:ir.ui.view,arch_db:account_financial_report.report_general_ledger_lines #: model_terms:ir.ui.view,arch_db:account_financial_report.report_journal_ledger_journal_table_header #, python-format diff --git a/account_financial_report/i18n/es.po b/account_financial_report/i18n/es.po index 92120119..a88c061f 100644 --- a/account_financial_report/i18n/es.po +++ b/account_financial_report/i18n/es.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0+e\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-01 13:35+0000\n" -"PO-Revision-Date: 2022-09-01 15:36+0200\n" +"POT-Creation-Date: 2022-09-20 07:00+0000\n" +"PO-Revision-Date: 2022-09-20 09:01+0200\n" "Last-Translator: Pedro M. Baeza \n" "Language-Team: \n" "Language: es\n" @@ -902,6 +902,11 @@ msgstr "" msgid "Group entries by" msgstr "Agrupar por" +#. module: account_financial_report +#: model:ir.model.fields,field_description:account_financial_report.field_general_ledger_report_wizard__grouped_by +msgid "Grouped by" +msgstr "Agrupado por" + #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:0 #: code:addons/account_financial_report/report/open_items_xlsx.py:0 @@ -1178,6 +1183,11 @@ msgstr "Sin grupo" msgid "No limit" msgstr "Sin lĂ­mite" +#. module: account_financial_report +#: model:ir.model.fields.selection,name:account_financial_report.selection__general_ledger_report_wizard__grouped_by__none +msgid "None" +msgstr "Ninguna" + #. module: account_financial_report #: code:addons/account_financial_report/wizard/journal_ledger_wizard.py:0 #, python-format @@ -1304,6 +1314,11 @@ msgstr "Saldo Acumulado de Empresa" msgid "Partner ending balance" msgstr "Saldo final de empresa" +#. module: account_financial_report +#: model:ir.model.fields.selection,name:account_financial_report.selection__general_ledger_report_wizard__grouped_by__partners +msgid "Partners" +msgstr "Empresas" + #. module: account_financial_report #: model:ir.model.fields,field_description:account_financial_report.field_aged_partner_balance_report_wizard__payable_accounts_only #: model:ir.model.fields,field_description:account_financial_report.field_general_ledger_report_wizard__payable_accounts_only @@ -1434,7 +1449,6 @@ msgid "Show Move Line Details" msgstr "Mostrar Detalles Apuntes" #. module: account_financial_report -#: model:ir.model.fields,field_description:account_financial_report.field_general_ledger_report_wizard__show_partner_details #: model:ir.model.fields,field_description:account_financial_report.field_open_items_report_wizard__show_partner_details #: model:ir.model.fields,field_description:account_financial_report.field_trial_balance_report_wizard__show_partner_details msgid "Show Partner Details" @@ -1555,6 +1569,12 @@ msgstr "Debe" msgid "Tax Groups" msgstr "Grupo de impuestos" +#. module: account_financial_report +#: code:addons/account_financial_report/report/general_ledger_xlsx.py:0 +#, python-format +msgid "Tax Initial balance" +msgstr "Saldo inicial de impuesto" + #. module: account_financial_report #: code:addons/account_financial_report/report/vat_report_xlsx.py:0 #: model:ir.model.fields.selection,name:account_financial_report.selection__vat_report_wizard__based_on__taxtags @@ -1562,9 +1582,16 @@ msgstr "Grupo de impuestos" msgid "Tax Tags" msgstr "Etiquetas de impuestos" +#. module: account_financial_report +#: code:addons/account_financial_report/report/general_ledger_xlsx.py:0 +#, python-format +msgid "Tax ending balance" +msgstr "Saldo final de impuesto" + #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:0 #: code:addons/account_financial_report/report/journal_ledger_xlsx.py:0 +#: model:ir.model.fields.selection,name:account_financial_report.selection__general_ledger_report_wizard__grouped_by__taxes #: model_terms:ir.ui.view,arch_db:account_financial_report.report_general_ledger_lines #: model_terms:ir.ui.view,arch_db:account_financial_report.report_journal_ledger_journal_table_header #, python-format diff --git a/account_financial_report/report/general_ledger.py b/account_financial_report/report/general_ledger.py index 45c980f2..8981d89f 100644 --- a/account_financial_report/report/general_ledger.py +++ b/account_financial_report/report/general_ledger.py @@ -50,16 +50,19 @@ class GeneralLedgerReport(models.AbstractModel): ) return taxes_data - def _get_acc_prt_accounts_ids(self, company_id): + def _get_account_internal_types(self, grouped_by): + return ["receivable", "payable"] if grouped_by != "taxes" else ["other"] + + def _get_acc_prt_accounts_ids(self, company_id, grouped_by): accounts_domain = [ ("company_id", "=", company_id), - ("internal_type", "in", ["receivable", "payable"]), + ("internal_type", "in", self._get_account_internal_types(grouped_by)), ] acc_prt_accounts = self.env["account.account"].search(accounts_domain) return acc_prt_accounts.ids def _get_initial_balances_bs_ml_domain( - self, account_ids, company_id, date_from, base_domain, acc_prt=False + self, account_ids, company_id, date_from, base_domain, grouped_by, acc_prt=False ): accounts_domain = [ ("company_id", "=", company_id), @@ -73,7 +76,8 @@ class GeneralLedgerReport(models.AbstractModel): accounts = self.env["account.account"].search(accounts_domain) domain += [("account_id", "in", accounts.ids)] if acc_prt: - domain += [("account_id.internal_type", "in", ["receivable", "payable"])] + internal_types = self._get_account_internal_types(grouped_by) + domain += [("account_id.internal_type", "in", internal_types)] return domain def _get_initial_balances_pl_ml_domain( @@ -147,10 +151,10 @@ class GeneralLedgerReport(models.AbstractModel): return pl_initial_balance def _get_gl_initial_acc( - self, account_ids, company_id, date_from, fy_start_date, base_domain + self, account_ids, company_id, date_from, fy_start_date, base_domain, grouped_by ): initial_domain_bs = self._get_initial_balances_bs_ml_domain( - account_ids, company_id, date_from, base_domain + account_ids, company_id, date_from, base_domain, grouped_by ) initial_domain_pl = self._get_initial_balances_pl_ml_domain( account_ids, company_id, date_from, fy_start_date, base_domain @@ -209,6 +213,36 @@ class GeneralLedgerReport(models.AbstractModel): data[acc_id][grouped_by] = True return data + def _prepare_gen_ld_data_group_taxes(self, data, domain, grouped_by): + gl_initial_acc_prt = self.env["account.move.line"].read_group( + domain=domain, + fields=[ + "account_id", + "debit", + "credit", + "balance", + "amount_currency", + "tax_line_id", + ], + groupby=["account_id"], + lazy=False, + ) + if gl_initial_acc_prt: + for gl in gl_initial_acc_prt: + if "tax_line_id" in gl and gl["tax_line_id"]: + tax_id = gl["tax_line_id"][0] + tax_name = gl["tax_line_id"][1] + tax_name = tax_name._value + else: + tax_id = 0 + tax_name = "Missing Tax" + acc_id = gl["account_id"][0] + data[acc_id][tax_id] = self._prepare_gen_ld_data_item(gl) + data[acc_id][tax_id]["id"] = tax_id + data[acc_id][tax_id]["name"] = tax_name + data[acc_id][grouped_by] = True + return data + def _get_initial_balance_data( self, account_ids, @@ -244,10 +278,10 @@ class GeneralLedgerReport(models.AbstractModel): if extra_domain: base_domain += extra_domain gl_initial_acc = self._get_gl_initial_acc( - account_ids, company_id, date_from, fy_start_date, base_domain + account_ids, company_id, date_from, fy_start_date, base_domain, grouped_by ) domain = self._get_initial_balances_bs_ml_domain( - account_ids, company_id, date_from, base_domain, acc_prt=True + account_ids, company_id, date_from, base_domain, grouped_by, acc_prt=True ) data = self._prepare_gen_ld_data(gl_initial_acc, domain, grouped_by) accounts_ids = list(data.keys()) @@ -391,6 +425,17 @@ class GeneralLedgerReport(models.AbstractModel): else "Missing Partner" ) res.append({"id": item_id, "name": item_name}) + elif grouped_by == "taxes": + if move_line["tax_line_id"]: + item_id = move_line["tax_line_id"][0] + item_name = move_line["tax_line_id"][1] + res.append({"id": item_id, "name": item_name}) + elif move_line["tax_ids"]: + for tax_id in move_line["tax_ids"]: + tax_item = self.env["account.tax"].browse(tax_id) + res.append({"id": tax_item.id, "name": tax_item.name}) + else: + res.append({"id": 0, "name": "Missing Tax"}) return res def _get_period_ml_data( @@ -449,7 +494,7 @@ class GeneralLedgerReport(models.AbstractModel): taxes_ids = set() tags_ids = set() full_reconcile_data = {} - acc_prt_account_ids = self._get_acc_prt_accounts_ids(company_id) + acc_prt_account_ids = self._get_acc_prt_accounts_ids(company_id, grouped_by) for move_line in move_lines: journal_ids.add(move_line["journal_id"][0]) for tax_id in move_line["tax_ids"]: diff --git a/account_financial_report/report/general_ledger_xlsx.py b/account_financial_report/report/general_ledger_xlsx.py index 8f81e45a..eb6b20c0 100644 --- a/account_financial_report/report/general_ledger_xlsx.py +++ b/account_financial_report/report/general_ledger_xlsx.py @@ -349,6 +349,8 @@ class GeneralLedgerXslx(models.AbstractModel): if "account" not in my_object["type"] and "grouped_by" in my_object: if my_object["grouped_by"] == "partners": label = _("Partner Initial balance") + elif my_object["grouped_by"] == "taxes": + label = _("Tax Initial balance") label = label if label else _("Initial balance") super().write_initial_balance_from_dict(my_object, label, report_data) @@ -361,5 +363,7 @@ class GeneralLedgerXslx(models.AbstractModel): name = my_object["name"] if my_object["grouped_by"] == "partners": label = _("Partner ending balance") + elif my_object["grouped_by"] == "taxes": + label = _("Tax ending balance") label = label if label else _("Ending balance") super().write_ending_balance_from_dict(my_object, name, label, report_data) diff --git a/account_financial_report/wizard/general_ledger_wizard.py b/account_financial_report/wizard/general_ledger_wizard.py index bcec5987..048a6dbf 100644 --- a/account_financial_report/wizard/general_ledger_wizard.py +++ b/account_financial_report/wizard/general_ledger_wizard.py @@ -84,7 +84,7 @@ class GeneralLedgerReportWizard(models.TransientModel): help="Ending account in a range", ) grouped_by = fields.Selection( - selection=[("none", "None"), ("partners", "Partners")], + selection=[("none", "None"), ("partners", "Partners"), ("taxes", "Taxes")], default="partners", string="Grouped by", )