From 46ec9fd9ccef84db680e9a5bb892ec90a471776e Mon Sep 17 00:00:00 2001 From: Jordi Ballester Alomar Date: Wed, 7 Nov 2018 14:57:35 +0100 Subject: [PATCH] [account_financial_report] adds the following features to Trial Balance: - Adds 'Period balance' column - Renames the option 'Hide accounts at 0'. Means no initial, no debit, credit or ending balance for the period. - Fixes logic to remove lines with 0 activity for the period. - improve the calculation in the Trial Balance of undistributed profits/losses account, and provide a footer note to the user explaining why will the ending balances will not be zero, but the period's total profit and loss. - add an extra line for P&L application so that the trial balance zeroes in the balance, and total debits = total credits - refactoring of the unaffected earnings reporting in the general ledger and trial balance. --- .../i18n/account_financial_report.pot | 101 ++++-- .../report/abstract_report_xlsx.py | 24 ++ .../report/general_ledger.py | 316 +++++++++--------- .../report/templates/trial_balance.xml | 61 +++- .../report/trial_balance.py | 55 ++- .../report/trial_balance_xlsx.py | 22 +- .../tests/test_general_ledger.py | 32 +- .../tests/test_trial_balance.py | 142 +++++++- .../wizard/trial_balance_wizard.py | 33 +- .../wizard/trial_balance_wizard_view.xml | 2 +- 10 files changed, 534 insertions(+), 254 deletions(-) diff --git a/account_financial_report/i18n/account_financial_report.pot b/account_financial_report/i18n/account_financial_report.pot index c52b5cc3..b50b4840 100644 --- a/account_financial_report/i18n/account_financial_report.pot +++ b/account_financial_report/i18n/account_financial_report.pot @@ -109,10 +109,15 @@ msgstr "" msgid "Account Type" msgstr "" +#. module: account_financial_report +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:108 +#, python-format +msgid "Account at 0 filter" +msgstr "" + #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:76 #: code:addons/account_financial_report/report/open_items_xlsx.py:61 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:100 #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_filters #: model:ir.ui.view,arch_db:account_financial_report.report_open_items_filters #: model:ir.ui.view,arch_db:account_financial_report.report_trial_balance_filters @@ -257,7 +262,7 @@ msgstr "" #: code:addons/account_financial_report/report/aged_partner_balance_xlsx.py:124 #: code:addons/account_financial_report/report/general_ledger_xlsx.py:74 #: code:addons/account_financial_report/report/open_items_xlsx.py:59 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:98 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:106 #: model:ir.ui.view,arch_db:account_financial_report.report_aged_partner_balance_filters #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_filters #: model:ir.ui.view,arch_db:account_financial_report.report_open_items_filters @@ -270,7 +275,7 @@ msgstr "" #: code:addons/account_financial_report/report/aged_partner_balance_xlsx.py:124 #: code:addons/account_financial_report/report/general_ledger_xlsx.py:74 #: code:addons/account_financial_report/report/open_items_xlsx.py:59 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:98 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:106 #: model:ir.ui.view,arch_db:account_financial_report.report_aged_partner_balance_filters #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_filters #: model:ir.ui.view,arch_db:account_financial_report.report_open_items_filters @@ -462,6 +467,18 @@ msgstr "" msgid "Computed Accounts" msgstr "" +#. module: account_financial_report +#: model:ir.model.fields,help:account_financial_report.field_report_trial_balance_hierarchy_on +#: model:ir.model.fields,help:account_financial_report.field_trial_balance_report_wizard_hierarchy_on +msgid "Computed Accounts: Use when the account group have codes\n" +" that represent prefixes of the actual accounts.\n" +"\n" +" Child Accounts: Use when your account groups are hierarchical.\n" +"\n" +" No hierarchy: Use to display just the accounts, without any grouping.\n" +" " +msgstr "" + #. module: account_financial_report #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_lines msgid "Cost\n" @@ -553,7 +570,7 @@ msgstr "" #: code:addons/account_financial_report/report/general_ledger_xlsx.py:38 #: code:addons/account_financial_report/report/journal_ledger_xlsx.py:65 #: code:addons/account_financial_report/report/trial_balance_xlsx.py:29 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:66 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:70 #: model:ir.model.fields,field_description:account_financial_report.field_report_general_ledger_move_line_credit #: model:ir.model.fields,field_description:account_financial_report.field_report_journal_ledger_journal_credit #: model:ir.model.fields,field_description:account_financial_report.field_report_journal_ledger_move_line_credit @@ -618,8 +635,8 @@ msgstr "" #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:53 #: code:addons/account_financial_report/report/open_items_xlsx.py:36 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:40 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:77 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:44 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:85 #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_lines #: model:ir.ui.view,arch_db:account_financial_report.report_journal_ledger_journal_table_header #: model:ir.ui.view,arch_db:account_financial_report.report_open_items_lines @@ -753,7 +770,7 @@ msgstr "" #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:71 #: code:addons/account_financial_report/report/journal_ledger_xlsx.py:168 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:95 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:103 #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_filters #: model:ir.ui.view,arch_db:account_financial_report.report_trial_balance_filters #, python-format @@ -770,7 +787,7 @@ msgstr "" #: code:addons/account_financial_report/report/general_ledger_xlsx.py:32 #: code:addons/account_financial_report/report/journal_ledger_xlsx.py:59 #: code:addons/account_financial_report/report/trial_balance_xlsx.py:25 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:62 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:66 #: model:ir.model.fields,field_description:account_financial_report.field_report_general_ledger_move_line_debit #: model:ir.model.fields,field_description:account_financial_report.field_report_journal_ledger_journal_debit #: model:ir.model.fields,field_description:account_financial_report.field_report_journal_ledger_move_line_debit @@ -881,10 +898,10 @@ msgstr "" #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:162 #: code:addons/account_financial_report/report/open_items_xlsx.py:117 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:33 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:48 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:70 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:85 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:37 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:52 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:78 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:93 #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_ending_cumul #: model:ir.ui.view,arch_db:account_financial_report.report_trial_balance_lines_header #, python-format @@ -1068,7 +1085,7 @@ msgstr "" #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:72 #: code:addons/account_financial_report/report/journal_ledger_xlsx.py:169 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:96 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:104 #, python-format msgid "From: %s To: %s" msgstr "" @@ -1122,7 +1139,7 @@ msgstr "" #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:77 #: code:addons/account_financial_report/report/open_items_xlsx.py:62 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:101 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:109 #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_filters #: model:ir.ui.view,arch_db:account_financial_report.report_open_items_filters #: model:ir.ui.view,arch_db:account_financial_report.report_trial_balance_filters @@ -1130,20 +1147,28 @@ msgstr "" msgid "Hide" msgstr "" +#. module: account_financial_report +#: model:ir.model.fields,field_description:account_financial_report.field_report_trial_balance_hide_account_at_0 +msgid "Hide Account At 0" +msgstr "" + #. module: account_financial_report #: model:ir.model.fields,field_description:account_financial_report.field_report_general_ledger_hide_account_balance_at_0 #: model:ir.model.fields,field_description:account_financial_report.field_report_open_items_hide_account_balance_at_0 -#: model:ir.model.fields,field_description:account_financial_report.field_report_trial_balance_hide_account_balance_at_0 msgid "Hide Account Balance At 0" msgstr "" #. module: account_financial_report #: model:ir.model.fields,field_description:account_financial_report.field_general_ledger_report_wizard_hide_account_balance_at_0 #: model:ir.model.fields,field_description:account_financial_report.field_open_items_report_wizard_hide_account_balance_at_0 -#: model:ir.model.fields,field_description:account_financial_report.field_trial_balance_report_wizard_hide_account_balance_at_0 msgid "Hide account ending balance at 0" msgstr "" +#. module: account_financial_report +#: model:ir.model.fields,field_description:account_financial_report.field_trial_balance_report_wizard_hide_account_at_0 +msgid "Hide accounts at 0" +msgstr "" + #. module: account_financial_report #: model:ir.model.fields,field_description:account_financial_report.field_report_trial_balance_hierarchy_on #: model:ir.model.fields,field_description:account_financial_report.field_trial_balance_report_wizard_hierarchy_on @@ -1235,9 +1260,9 @@ msgstr "" #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:150 #: code:addons/account_financial_report/report/trial_balance_xlsx.py:21 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:44 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:58 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:81 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:48 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:62 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:89 #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_lines #, python-format msgid "Initial balance" @@ -1501,7 +1526,7 @@ msgstr "" #: code:addons/account_financial_report/report/general_ledger_xlsx.py:79 #: code:addons/account_financial_report/report/general_ledger_xlsx.py:81 #: code:addons/account_financial_report/report/open_items_xlsx.py:64 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:103 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:111 #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_filters #, python-format msgid "No" @@ -1513,6 +1538,12 @@ msgstr "" msgid "No group" msgstr "" +#. module: account_financial_report +#: selection:report_trial_balance,hierarchy_on:0 +#: selection:trial.balance.report.wizard,hierarchy_on:0 +msgid "No hierarchy" +msgstr "" + #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger.py:688 #: code:addons/account_financial_report/report/general_ledger.py:985 @@ -1608,7 +1639,7 @@ msgstr "" #: code:addons/account_financial_report/report/general_ledger_xlsx.py:26 #: code:addons/account_financial_report/report/journal_ledger_xlsx.py:44 #: code:addons/account_financial_report/report/open_items_xlsx.py:21 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:57 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:61 #: model:ir.model.fields,field_description:account_financial_report.field_report_aged_partner_balance_account_partner_ids #: model:ir.model.fields,field_description:account_financial_report.field_report_aged_partner_balance_line_partner #: model:ir.model.fields,field_description:account_financial_report.field_report_aged_partner_balance_move_line_partner @@ -1706,6 +1737,20 @@ msgstr "" msgid "Percents" msgstr "" +#. module: account_financial_report +#: model:ir.model.fields,field_description:account_financial_report.field_report_trial_balance_account_period_balance +#: model:ir.model.fields,field_description:account_financial_report.field_report_trial_balance_partner_period_balance +msgid "Period Balance" +msgstr "" + +#. module: account_financial_report +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:33 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:74 +#: model:ir.ui.view,arch_db:account_financial_report.report_trial_balance_lines_header +#, python-format +msgid "Period balance" +msgstr "" + #. module: account_financial_report #: model:ir.ui.view,arch_db:account_financial_report.journal_ledger_wizard msgid "Periods" @@ -1837,7 +1882,7 @@ msgstr "" #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:77 #: code:addons/account_financial_report/report/open_items_xlsx.py:62 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:101 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:109 #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_filters #: model:ir.ui.view,arch_db:account_financial_report.report_open_items_filters #: model:ir.ui.view,arch_db:account_financial_report.report_trial_balance_filters @@ -1865,7 +1910,7 @@ msgstr "" #. module: account_financial_report #: code:addons/account_financial_report/report/general_ledger_xlsx.py:80 #: code:addons/account_financial_report/report/open_items_xlsx.py:63 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:102 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:110 #: model:ir.model.fields,field_description:account_financial_report.field_general_ledger_report_wizard_foreign_currency #: model:ir.model.fields,field_description:account_financial_report.field_open_items_report_wizard_foreign_currency #: model:ir.model.fields,field_description:account_financial_report.field_trial_balance_report_wizard_foreign_currency @@ -1906,7 +1951,7 @@ msgstr "" #: code:addons/account_financial_report/report/general_ledger_xlsx.py:73 #: code:addons/account_financial_report/report/journal_ledger_xlsx.py:172 #: code:addons/account_financial_report/report/open_items_xlsx.py:58 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:97 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:105 #: model:ir.ui.view,arch_db:account_financial_report.report_aged_partner_balance_filters #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_filters #: model:ir.ui.view,arch_db:account_financial_report.report_open_items_filters @@ -2067,7 +2112,6 @@ msgstr "" #. module: account_financial_report #: model:ir.model.fields,help:account_financial_report.field_general_ledger_report_wizard_hide_account_balance_at_0 #: model:ir.model.fields,help:account_financial_report.field_open_items_report_wizard_hide_account_balance_at_0 -#: model:ir.model.fields,help:account_financial_report.field_trial_balance_report_wizard_hide_account_balance_at_0 msgid "Use this filter to hide an account or a partner with an ending balance at 0. If partners are filtered, debits and credits totals will not match the trial balance." msgstr "" @@ -2103,6 +2147,11 @@ msgstr "" msgid "View" msgstr "" +#. module: account_financial_report +#: model:ir.model.fields,help:account_financial_report.field_trial_balance_report_wizard_hide_account_at_0 +msgid "When this option is enabled, the trial balance will not display accounts that have initial balance = debit = credit = end balance = 0" +msgstr "" + #. module: account_financial_report #: model:ir.model.fields,field_description:account_financial_report.field_journal_ledger_report_wizard_with_account_name #: model:ir.model.fields,field_description:account_financial_report.field_report_journal_ledger_with_account_name @@ -2113,7 +2162,7 @@ msgstr "" #: code:addons/account_financial_report/report/general_ledger_xlsx.py:79 #: code:addons/account_financial_report/report/general_ledger_xlsx.py:81 #: code:addons/account_financial_report/report/open_items_xlsx.py:64 -#: code:addons/account_financial_report/report/trial_balance_xlsx.py:103 +#: code:addons/account_financial_report/report/trial_balance_xlsx.py:111 #: model:ir.ui.view,arch_db:account_financial_report.report_general_ledger_filters #, python-format msgid "Yes" diff --git a/account_financial_report/report/abstract_report_xlsx.py b/account_financial_report/report/abstract_report_xlsx.py index 886538e8..eacea35d 100644 --- a/account_financial_report/report/abstract_report_xlsx.py +++ b/account_financial_report/report/abstract_report_xlsx.py @@ -21,6 +21,7 @@ class AbstractReportXslx(models.AbstractModel): # Formats self.format_right = None + self.format_left = None self.format_right_bold_italic = None self.format_bold = None self.format_header_left = None @@ -41,6 +42,7 @@ class AbstractReportXslx(models.AbstractModel): self._define_formats(workbook) report_name = self._get_report_name() + report_footer = self._get_report_footer() filters = self._get_report_filters(report) self.columns = self._get_report_columns(report) self.workbook = workbook @@ -54,6 +56,8 @@ class AbstractReportXslx(models.AbstractModel): self._generate_report_content(workbook, report) + self._write_report_footer(report_footer) + def _define_formats(self, workbook): """ Add cell formats to current workbook. Those formats can be used on all cell. @@ -71,6 +75,7 @@ class AbstractReportXslx(models.AbstractModel): """ 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} ) @@ -120,6 +125,18 @@ class AbstractReportXslx(models.AbstractModel): ) self.row_pos += 3 + def _write_report_footer(self, footer): + """Write report footer . + Columns are defined with `_get_report_columns` method. + """ + 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 += 1 + def _write_filters(self, filters): """Write one line per filters on starting on current line. Columns number for filter name is defined @@ -322,6 +339,13 @@ class AbstractReportXslx(models.AbstractModel): """ raise NotImplementedError() + def _get_report_footer(self): + """ + Allow to define the report footer. + :return: the report footer + """ + return False + def _get_report_columns(self, report): """ Allow to define the report columns diff --git a/account_financial_report/report/general_ledger.py b/account_financial_report/report/general_ledger.py index 0299c55c..4feef2ed 100644 --- a/account_financial_report/report/general_ledger.py +++ b/account_financial_report/report/general_ledger.py @@ -1287,173 +1287,9 @@ ORDER BY query_inject_move_line_centralized_params ) - def _get_unaffected_earnings_account_sub_subquery_sum_initial( - self - ): - """ Return subquery used to compute sum amounts on - unaffected earnings accounts """ - sub_subquery_sum_amounts = """ - SELECT - SUM(ml.balance) AS initial_balance, - 0.0 AS final_balance - FROM - account_account a - INNER JOIN - account_account_type at ON a.user_type_id = at.id - INNER JOIN - account_move_line ml - ON a.id = ml.account_id - AND ml.date < %(date_from)s - """ - if self.only_posted_moves: - sub_subquery_sum_amounts += """ - INNER JOIN - account_move m ON ml.move_id = m.id AND m.state = 'posted' - """ - if self.filter_cost_center_ids: - sub_subquery_sum_amounts += """ - INNER JOIN - account_analytic_account aa - ON - ml.analytic_account_id = aa.id - AND aa.id IN %(cost_center_ids)s - """ - sub_subquery_sum_amounts += """ - WHERE - a.company_id = %(company_id)s - AND - a.id IN %(unaffected_earnings_account_ids)s - """ - if self.filter_journal_ids: - sub_subquery_sum_amounts += """ - AND - ml.journal_id in %(filter_journal_ids)s - """ - return sub_subquery_sum_amounts - - def _get_unaffected_earnings_account_sub_subquery_sum_final(self): - """ Return subquery used to compute sum amounts on - unaffected earnings accounts """ - - sub_subquery_sum_amounts = """ - SELECT - 0.0 AS initial_balance, - SUM(ml.balance) AS final_balance - """ - sub_subquery_sum_amounts += """ - FROM - account_account a - INNER JOIN - account_account_type at ON a.user_type_id = at.id - INNER JOIN - account_move_line ml - ON a.id = ml.account_id - AND ml.date <= %(date_to)s - """ - if self.only_posted_moves: - sub_subquery_sum_amounts += """ - INNER JOIN - account_move m ON ml.move_id = m.id AND m.state = 'posted' - """ - if self.filter_cost_center_ids: - sub_subquery_sum_amounts += """ - INNER JOIN - account_analytic_account aa - ON - ml.analytic_account_id = aa.id - AND aa.id IN %(cost_center_ids)s - """ - sub_subquery_sum_amounts += """ - WHERE - a.company_id = %(company_id)s - AND - a.id IN %(unaffected_earnings_account_ids)s - """ - if self.filter_journal_ids: - sub_subquery_sum_amounts += """ - AND - ml.journal_id in %(filter_journal_ids)s - """ - return sub_subquery_sum_amounts - def _inject_unaffected_earnings_account_values(self): """Inject the report values of the unaffected earnings account for report_general_ledger_account.""" - subquery_sum_amounts = """ - SELECT - SUM(COALESCE(sub.initial_balance, 0.0)) AS initial_balance, - SUM(COALESCE(sub.final_balance, 0.0)) AS final_balance - FROM - ( - """ - # Initial balances - subquery_sum_amounts += \ - self._get_unaffected_earnings_account_sub_subquery_sum_initial() - subquery_sum_amounts += """ - UNION - """ - subquery_sum_amounts += \ - self._get_unaffected_earnings_account_sub_subquery_sum_final() - subquery_sum_amounts += """ - ) sub - """ - - # pylint: disable=sql-injection - query_inject_account = """ - WITH - sum_amounts AS ( """ + subquery_sum_amounts + """ ) - INSERT INTO - report_general_ledger_account - ( - report_id, - create_uid, - create_date, - account_id, - code, - name, - is_partner_account, - initial_balance, - final_balance, - currency_id - ) - SELECT - %(report_id)s AS report_id, - %(user_id)s AS create_uid, - NOW() AS create_date, - a.id AS account_id, - a.code, - a.name, - False AS is_partner_account, - COALESCE(i.initial_balance, 0.0) AS initial_balance, - COALESCE(i.final_balance, 0.0) AS final_balance, - c.id as currency_id - FROM - account_account a - LEFT JOIN - res_currency c ON c.id = a.currency_id, - sum_amounts i - WHERE - a.company_id = %(company_id)s - AND a.id = %(unaffected_earnings_account_id)s - """ - query_inject_account_params = { - 'date_from': self.date_from, - 'date_to': self.date_to, - 'fy_start_date': self.fy_start_date, - } - if self.filter_cost_center_ids: - query_inject_account_params['cost_center_ids'] = \ - tuple(self.filter_cost_center_ids.ids) - query_inject_account_params['company_id'] = self.company_id.id - query_inject_account_params['unaffected_earnings_account_id'] = \ - self.unaffected_earnings_account.id - query_inject_account_params['report_id'] = self.id - query_inject_account_params['user_id'] = self.env.uid - - if self.filter_journal_ids: - query_inject_account_params['filter_journal_ids'] = (tuple( - self.filter_journal_ids.ids, - ),) # Fetch the profit and loss accounts query_unaffected_earnings_account_ids = """ SELECT a.id @@ -1464,7 +1300,155 @@ ORDER BY """ self.env.cr.execute(query_unaffected_earnings_account_ids) pl_account_ids = [r[0] for r in self.env.cr.fetchall()] - query_inject_account_params['unaffected_earnings_account_ids'] = \ - tuple(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'] + 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), + } + query_select_previous_fy_unaffected_earnings = """ + SELECT sum(aml.balance) as balance + FROM account_move_line as aml + INNER JOIN account_move as am + ON am.id = aml.move_id + INNER JOIN account_journal j + ON am.journal_id = j.id + """ + if self.filter_cost_center_ids: + query_select_previous_fy_unaffected_earnings += """ + INNER JOIN account_analytic_account aa + ON aml.analytic_account_id = aa.id + 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) + + query_select_previous_fy_unaffected_earnings += """ + WHERE aml.date < %(date_to)s + AND aml.company_id = %(company_id)s + AND aml.account_id IN %(account_ids)s + """ + if self.filter_journal_ids: + 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) + 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) + 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, + } + query_select_period_unaffected_earnings = """ + SELECT + sum(aml.debit) as sum_debit, + sum(aml.credit) as sum_credit, + sum(aml.balance) as balance + FROM account_move_line as aml + INNER JOIN account_move as am + ON am.id = aml.move_id + INNER JOIN account_journal j + ON am.journal_id = j.id + """ + if self.filter_cost_center_ids: + query_select_period_unaffected_earnings += """ + INNER JOIN account_analytic_account aa + ON aml.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 += """ + WHERE am.date >= %(date_from)s + AND aml.date <= %(date_to)s + AND aml.company_id = %(company_id)s + AND aml.account_id = %(unaffected_earnings_id)s + """ + if self.filter_journal_ids: + 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) + 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) + res = self.env.cr.fetchone() + unaffected_earnings_period_debit = res[0] or 0.0 + unaffected_earnings_period_credit = res[1] or 0.0 + unaffected_earnings_period_balance = res[2] or 0.0 + # pylint: disable=sql-injection + query_inject_account = """ + INSERT INTO + report_general_ledger_account ( + report_id, + create_uid, + create_date, + account_id, + code, + name, + is_partner_account, + initial_debit, + initial_credit, + initial_balance, + final_debit, + final_credit, + final_balance + ) + VALUES ( + %(report_id)s, + %(user_id)s, + NOW(), + %(account_id)s, + %(code)s, + %(name)s, + False, + %(initial_debit)s, + %(initial_credit)s, + %(initial_balance)s, + %(final_debit)s, + %(final_credit)s, + %(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 + 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, + } self.env.cr.execute(query_inject_account, query_inject_account_params) diff --git a/account_financial_report/report/templates/trial_balance.xml b/account_financial_report/report/templates/trial_balance.xml index 69d7ee3c..d820d48d 100644 --- a/account_financial_report/report/templates/trial_balance.xml +++ b/account_financial_report/report/templates/trial_balance.xml @@ -35,7 +35,12 @@ - + + + + + + @@ -96,7 +101,6 @@ -