From 13f6bc6f4027b8e31cb786e94078c9c84e168e45 Mon Sep 17 00:00:00 2001 From: git_admin Date: Fri, 1 May 2026 14:20:14 +0000 Subject: [PATCH] Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) --- .../report/report_trial_balance.py | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 addons/accounting_pdf_reports/report/report_trial_balance.py diff --git a/addons/accounting_pdf_reports/report/report_trial_balance.py b/addons/accounting_pdf_reports/report/report_trial_balance.py new file mode 100644 index 0000000..d092c6c --- /dev/null +++ b/addons/accounting_pdf_reports/report/report_trial_balance.py @@ -0,0 +1,90 @@ +import time +from odoo import api, models, _ +from odoo.exceptions import UserError + + +class ReportTrialBalance(models.AbstractModel): + _name = 'report.accounting_pdf_reports.report_trialbalance' + _description = 'Trial Balance Report' + + def _get_accounts(self, accounts, display_account): + """ compute the balance, debit and credit for the provided accounts + :Arguments: + `accounts`: list of accounts record, + `display_account`: it's used to display either all accounts or those accounts which balance is > 0 + :Returns a list of dictionary of Accounts with following key and value + `name`: Account name, + `code`: Account code, + `credit`: total amount of credit, + `debit`: total amount of debit, + `balance`: total amount of balance, + """ + + account_result = {} + # Prepare sql query base on selected parameters from wizard + tables, where_clause, where_params = self.env['account.move.line']._query_get() + tables = tables.replace('"','') + if not tables: + tables = 'account_move_line' + wheres = [""] + if where_clause.strip(): + wheres.append(where_clause.strip()) + filters = " AND ".join(wheres) + # compute the balance, debit and credit for the provided accounts + request = ("SELECT account_id AS id, SUM(debit) AS debit, SUM(credit) AS credit, " + "(SUM(debit) - SUM(credit)) AS balance" +\ + " FROM " + tables + " WHERE account_id IN %s " + filters + " GROUP BY account_id") + params = (tuple(accounts.ids),) + tuple(where_params) + self.env.cr.execute(request, params) + for row in self.env.cr.dictfetchall(): + account_result[row.pop('id')] = row + + account_res = [] + for account in accounts: + res = dict((fn, 0.0) for fn in ['credit', 'debit', 'balance']) + currency = account.currency_id and account.currency_id or self.env.company.currency_id + res['code'] = account.code + res['name'] = account.name + if account.id in account_result: + res['debit'] = account_result[account.id].get('debit') + res['credit'] = account_result[account.id].get('credit') + res['balance'] = account_result[account.id].get('balance') + if display_account == 'all': + account_res.append(res) + if display_account == 'not_zero' and not currency.is_zero(res['balance']): + account_res.append(res) + if display_account == 'movement' and (not currency.is_zero(res['debit']) or not currency.is_zero(res['credit'])): + account_res.append(res) + return account_res + + @api.model + def _get_report_values(self, docids, data=None): + if not data.get('form') or not self.env.context.get('active_model'): + raise UserError(_("Form content is missing, this report cannot be printed.")) + + model = self.env.context.get('active_model') + docs = self.env[model].browse(self.env.context.get('active_ids', [])) + display_account = data['form'].get('display_account') + accounts = docs if model == 'account.account' else self.env['account.account'].search([]) + context = data['form'].get('used_context') + analytic_accounts = [] + if data['form'].get('analytic_account_ids'): + analytic_account_ids = self.env['account.analytic.account'].browse(data['form'].get('analytic_account_ids')) + context['analytic_account_ids'] = analytic_account_ids + analytic_accounts = [account.name for account in analytic_account_ids] + account_res = self.with_context(context)._get_accounts(accounts, display_account) + codes = [] + if data['form'].get('journal_ids', False): + codes = [journal.code for journal in + self.env['account.journal'].search( + [('id', 'in', data['form']['journal_ids'])])] + return { + 'doc_ids': self.ids, + 'doc_model': model, + 'data': data['form'], + 'docs': docs, + 'print_journal': codes, + 'analytic_accounts': analytic_accounts, + 'time': time, + 'Accounts': account_res, + }