From a9f326f9523455fd1b176bfcae33df5a1c6e5cf5 Mon Sep 17 00:00:00 2001 From: Dirk van der Laarse Date: Wed, 10 Jun 2026 08:06:06 +0000 Subject: [PATCH 1/2] feat: better guarding against simultaneous runs --- erpnext_mrp/mrp/tasks/mrp_run.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/erpnext_mrp/mrp/tasks/mrp_run.py b/erpnext_mrp/mrp/tasks/mrp_run.py index 8f17705..1a70aad 100644 --- a/erpnext_mrp/mrp/tasks/mrp_run.py +++ b/erpnext_mrp/mrp/tasks/mrp_run.py @@ -75,11 +75,26 @@ def get_forecast_coverage_status() -> dict: def mrp_run(enqueue: bool = True): + # Guard against overlapping runs + if enqueue and _finalise_jobs_in_progress(): + frappe.logger("mrp_run").warning( + "Skipping MRP run: a previous run's finalise jobs are still in progress." + ) + return _publish_mrp_run_started() create_mrp_item_entries() process_mrp_item_entries(enqueue=enqueue) +def _finalise_jobs_in_progress() -> bool: + """True if any _finalise_item_batch job from a previous run is still queued or running.""" + return any( + j.status in ("queued", "started") + for j in _get_batch_jobs() + if j.job_name == "erpnext_mrp.mrp.tasks.mrp_run._finalise_item_batch" + ) + + def create_mrp_item_entries(): """ Calculate BOM levels and create MRP Entry records for each item for each week in a look-ahead period. @@ -774,6 +789,7 @@ def _calculate_suggested_receipts_batch( (entry.on_hand_inventory_no_action or 0) - demand + (entry.scheduled_receipts or 0) ) + # Use save() here so the row's metadata (modified/modified_by) and fetch_from fields materialise for entry in mrp_entry_docs: entry.save() @@ -1021,7 +1037,7 @@ def _finalise_item_batch( entry.total_payable = (entry.suggested_orders_value_payable or 0) + ( entry.scheduled_receipts_value_payable or 0 ) - entry.save() + entry.db_update() if total_batches > 1: try: From 728dbbb187bd1084d9178f8fa9c83ef7f0296ff1 Mon Sep 17 00:00:00 2001 From: Dirk van der Laarse Date: Wed, 10 Jun 2026 08:08:14 +0000 Subject: [PATCH 2/2] chore: bump to v0.8.6 --- erpnext_mrp/__init__.py | 2 +- frontend/package.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext_mrp/__init__.py b/erpnext_mrp/__init__.py index af46754..de77196 100644 --- a/erpnext_mrp/__init__.py +++ b/erpnext_mrp/__init__.py @@ -1 +1 @@ -__version__ = "0.8.5" +__version__ = "0.8.6" diff --git a/frontend/package.json b/frontend/package.json index f75b6fb..4617427 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "erpnext-mrp-ui", "private": true, - "version": "0.8.5", + "version": "0.8.6", "type": "module", "scripts": { "dev": "vite --host", diff --git a/package.json b/package.json index db68cee..387d6de 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "erpnext_mrp", - "version": "0.8.5", + "version": "0.8.6", "author": "Starktail (Pty) Ltd ", "workspaces": [ "frontend",