Skip to content

Commit

Permalink
fix: enqueue submit/cancel action for stock entry to avoid time out e…
Browse files Browse the repository at this point in the history
…rror

(cherry picked from commit 7a38015)
  • Loading branch information
rohitwaghchaure authored and mergify[bot] committed May 12, 2023
1 parent c8e3ce4 commit 457846e
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 2 deletions.
44 changes: 43 additions & 1 deletion erpnext/stock/doctype/stock_entry/stock_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,17 @@
from frappe import _
from frappe.model.mapper import get_mapped_doc
from frappe.query_builder.functions import Sum
from frappe.utils import cint, comma_or, cstr, flt, format_time, formatdate, getdate, nowdate
from frappe.utils import (
cint,
comma_or,
cstr,
flt,
format_time,
formatdate,
getdate,
month_diff,
nowdate,
)

import erpnext
from erpnext.accounts.general_ledger import process_gl_map
Expand Down Expand Up @@ -154,6 +164,38 @@ def validate(self):
self.reset_default_field_value("from_warehouse", "items", "s_warehouse")
self.reset_default_field_value("to_warehouse", "items", "t_warehouse")

def submit(self):
if self.is_enqueue_action():
frappe.msgprint(
_(
"The task has been enqueued as a background job. In case there is any issue on processing in background, the system will add a comment about the error on this Stock Reconciliation and revert to the Draft stage"
)
)
self.queue_action("submit", timeout=2000)
else:
self._submit()

def cancel(self):
if self.is_enqueue_action():
frappe.msgprint(
_(
"The task has been enqueued as a background job. In case there is any issue on processing in background, the system will add a comment about the error on this Stock Reconciliation and revert to the Submitted stage"
)
)
self.queue_action("cancel", timeout=2000)
else:
self._cancel()

def is_enqueue_action(self, force=False) -> bool:
if force:
return True

# If line items are more than 100 or record is older than 6 months
if len(self.items) > 100 or month_diff(nowdate(), self.posting_date) > 6:
return True

return False

def on_submit(self):
self.update_stock_ledger()

Expand Down
30 changes: 29 additions & 1 deletion erpnext/stock/doctype/stock_entry/test_stock_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import frappe
from frappe.permissions import add_user_permission, remove_user_permission
from frappe.tests.utils import FrappeTestCase, change_settings
from frappe.utils import add_days, flt, nowdate, nowtime, today
from frappe.utils import add_days, add_to_date, flt, nowdate, nowtime, today

from erpnext.accounts.doctype.account.test_account import get_inventory_account
from erpnext.stock.doctype.item.test_item import (
Expand Down Expand Up @@ -1707,6 +1707,34 @@ def test_negative_stock_reco(self):

self.assertRaises(frappe.ValidationError, sr_doc.submit)

def test_enqueue_action(self):
item_code = "Test Enqueue Item - 001"
create_item(item_code=item_code, is_stock_item=1, valuation_rate=10)

doc = make_stock_entry(
item_code=item_code,
posting_date=add_to_date(today(), months=-7),
posting_time="00:00:00",
purpose="Material Receipt",
qty=10,
to_warehouse="_Test Warehouse - _TC",
do_not_submit=True,
)

self.assertTrue(doc.is_enqueue_action())

doc = make_stock_entry(
item_code=item_code,
posting_date=today(),
posting_time="00:00:00",
purpose="Material Receipt",
qty=10,
to_warehouse="_Test Warehouse - _TC",
do_not_submit=True,
)

self.assertFalse(doc.is_enqueue_action())


def make_serialized_item(**args):
args = frappe._dict(args)
Expand Down

0 comments on commit 457846e

Please sign in to comment.