From 4dfbacfd9230365b2f4ce0875bb4d0f4c36628c5 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Thu, 26 Feb 2026 12:14:05 +0530 Subject: [PATCH] fix: same reposting entry picked by multiple rq jobs --- .../repost_item_valuation.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py index 43196e4b113..7df3447ab44 100644 --- a/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py +++ b/erpnext/stock/doctype/repost_item_valuation/repost_item_valuation.py @@ -570,7 +570,20 @@ def run_parallel_reposting(): riv_entries = get_repost_item_valuation_entries() + rq_jobs = frappe.get_all( + "RQ Job", + fields=["arguments"], + filters={ + "status": ("like", "%started%"), + "job_name": "erpnext.stock.doctype.repost_item_valuation.repost_item_valuation.execute_reposting_entry", + }, + ) + for row in riv_entries: + if rq_jobs: + if job_running_for_entry(row.name, rq_jobs): + continue + if row.based_on != "Item and Warehouse" or row.repost_only_accounting_ledgers: execute_reposting_entry(row.name) continue @@ -719,3 +732,19 @@ def get_existing_reposting_only_gl_entries(reposting_reference): reposting_map[key] = d.reposting_reference return reposting_map + + +def job_running_for_entry(reposting_entry, rq_jobs): + for job in rq_jobs: + if not job.arguments: + continue + + try: + job_args = json.loads(job.arguments) + except (TypeError, json.JSONDecodeError): + continue + + if isinstance(job_args, dict) and job_args.get("kwargs", {}).get("name") == reposting_entry: + return True + + return False