Merge PR #1308 into 18.0

Signed-off-by pedrobaeza
This commit is contained in:
OCA-git-bot
2025-04-14 07:46:27 +00:00

View File

@@ -3,6 +3,7 @@
import itertools import itertools
import operator import operator
from collections import defaultdict
from odoo import models from odoo import models
@@ -181,13 +182,23 @@ class JournalLedgerReport(models.AbstractModel):
return {"move_line_ids": tuple(move_lines.ids)} return {"move_line_ids": tuple(move_lines.ids)}
def _get_move_lines(self, move_ids, wizard, journal_ids): def _get_move_lines(self, move_ids, wizard, journal_ids):
move_lines = self.env["account.move.line"].search( move_lines = (
self._get_move_lines_domain(move_ids, wizard, journal_ids), self.env["account.move.line"]
order=self._get_move_lines_order(move_ids, wizard, journal_ids), .with_context(prefetch_fields=False)
.search(
self._get_move_lines_domain(move_ids, wizard, journal_ids),
order=self._get_move_lines_order(move_ids, wizard, journal_ids),
)
) )
move_lines_exigible = self.env["account.move.line"].search( # Get the exigible move lines ids instead of the recordset to increase
self._get_move_lines_domain(move_ids, wizard, journal_ids) # performance with a large number of journal items
+ self.env["account.move.line"]._get_tax_exigible_domain(), move_lines_exigible_ids = set(
self.env["account.move.line"]
.search(
self._get_move_lines_domain(move_ids, wizard, journal_ids)
+ self.env["account.move.line"]._get_tax_exigible_domain(),
)
.ids
) )
move_line_ids_taxes_data = {} move_line_ids_taxes_data = {}
if move_lines: if move_lines:
@@ -209,36 +220,24 @@ class JournalLedgerReport(models.AbstractModel):
"description": tax_description, "description": tax_description,
} }
Move_Lines = {} Move_Lines = {}
accounts = self.env["account.account"]
partners = self.env["res.partner"]
currencies = self.env["res.currency"]
tax_lines = self.env["account.tax"]
auto_sequence = len(move_ids) auto_sequence = len(move_ids)
Move_Lines = defaultdict(list)
for ml in move_lines: for ml in move_lines:
if ml.account_id not in accounts: move_id = ml.move_id.id
accounts |= ml.account_id if move_id not in Move_Lines:
if ml.partner_id not in partners:
partners |= ml.partner_id
if ml.currency_id not in currencies:
currencies |= ml.currency_id
if ml.tax_line_id not in tax_lines:
tax_lines |= ml.tax_line_id
if ml.move_id.id not in Move_Lines.keys():
Move_Lines[ml.move_id.id] = []
auto_sequence -= 1 auto_sequence -= 1
taxes = ( taxes = move_line_ids_taxes_data.get(ml.id, {})
ml.id in move_line_ids_taxes_data.keys() # Check the exigibility of the move line by id
and move_line_ids_taxes_data[ml.id] # this way we avoid the recreation of the recordset which affects to the
or {} # performance in the case of a large number of journal items
) exigible = ml.id in move_lines_exigible_ids
exigible = ml in move_lines_exigible Move_Lines[move_id].append(
Move_Lines[ml.move_id.id].append(
self._get_move_lines_data(ml, wizard, taxes, auto_sequence, exigible) self._get_move_lines_data(ml, wizard, taxes, auto_sequence, exigible)
) )
account_ids_data = self._get_account_data(accounts) account_ids_data = self._get_account_data(move_lines.account_id)
partner_ids_data = self._get_partner_data(partners) partner_ids_data = self._get_partner_data(move_lines.partner_id)
currency_ids_data = self._get_currency_data(currencies) currency_ids_data = self._get_currency_data(move_lines.currency_id)
tax_line_ids_data = self._get_tax_line_data(tax_lines) tax_line_ids_data = self._get_tax_line_data(move_lines.tax_line_id)
return ( return (
move_lines.ids, move_lines.ids,
Move_Lines, Move_Lines,