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 Sep 4, 2024
1 parent 1d6cf18 commit 1fde2d1
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)

Check warning on line 176 in account_mass_reconcile/models/mass_reconcile.py

View check run for this annotation

Codecov / codecov/patch

account_mass_reconcile/models/mass_reconcile.py#L175-L176

Added lines #L175 - L176 were not covered by tests
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 1fde2d1

Please sign in to comment.