@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user