Skip to content

Commit

Permalink
[16.0][FIX] account_mass_reconcile: New environment is initialized wh…
Browse files Browse the repository at this point in the history
…en the for loop begins so as not to lose the record of last reconciled items by having "commit_every" > 0 configured
  • Loading branch information
sergiobstoj committed Dec 12, 2024
1 parent 75ba5c1 commit 0bd0681
Showing 1 changed file with 17 additions and 15 deletions.
32 changes: 17 additions & 15 deletions account_mass_reconcile/models/mass_reconcile.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,17 +150,17 @@ def _run_reconcile_method(self, reconcile_method):
return auto_rec_id.automatic_reconcile()

def run_reconcile(self):
def find_reconcile_ids(fieldname, move_line_ids):
def find_reconcile_ids(fieldname, move_line_ids, new_env):
if not move_line_ids:
return []
self.env.flush_all()
new_env.flush_all()
sql = """
SELECT DISTINCT %s FROM account_move_line
WHERE %s IS NOT NULL AND id in %s
"""
params = [AsIs(fieldname), AsIs(fieldname), tuple(move_line_ids)]
self.env.cr.execute(sql, params)
res = self.env.cr.fetchall()
new_env.cr.execute(sql, params)
res = new_env.cr.fetchall()
return [row[0] for row in res]

# we use a new cursor to be able to commit the reconciliation
Expand All @@ -169,10 +169,18 @@ def find_reconcile_ids(fieldname, move_line_ids):
# does not.

for rec in self:
ctx = self.env.context.copy()
ctx["commit_every"] = rec.account.company_id.reconciliation_commit_every
if ctx["commit_every"]:
new_cr = sql_db.db_connect(self.env.cr.dbname).cursor()
new_env = api.Environment(new_cr, self.env.uid, ctx)
else:
new_cr = self.env.cr
new_env = self.env
# SELECT FOR UPDATE the mass reconcile row ; this is done in order
# to avoid 2 processes on the same mass reconcile method.
try:
self.env.cr.execute(
new_env.cr.execute(
"SELECT id FROM account_mass_reconcile"
" WHERE id = %s"
" FOR UPDATE NOWAIT",
Expand All @@ -185,14 +193,6 @@ def find_reconcile_ids(fieldname, move_line_ids):
"please try again later."
)
) from e
ctx = self.env.context.copy()
ctx["commit_every"] = rec.account.company_id.reconciliation_commit_every
if ctx["commit_every"]:
new_cr = sql_db.db_connect(self.env.cr.dbname).cursor()
new_env = api.Environment(new_cr, self.env.uid, ctx)
else:
new_cr = self.env.cr
new_env = self.env

try:
all_ml_rec_ids = []
Expand All @@ -202,8 +202,10 @@ def find_reconcile_ids(fieldname, move_line_ids):

all_ml_rec_ids += ml_rec_ids

reconcile_ids = find_reconcile_ids("full_reconcile_id", all_ml_rec_ids)
self.env["mass.reconcile.history"].create(
reconcile_ids = find_reconcile_ids(
"full_reconcile_id", all_ml_rec_ids, new_env
)
new_env["mass.reconcile.history"].create(
{
"mass_reconcile_id": rec.id,
"date": fields.Datetime.now(),
Expand Down

0 comments on commit 0bd0681

Please sign in to comment.