Skip to content

Commit

Permalink
Merge pull request #42126 from ruthra-kumar/sales_order_credit_limit_…
Browse files Browse the repository at this point in the history
…check_on_reopen

fix: Re-open allows SO's to be over credit limit
  • Loading branch information
ruthra-kumar authored Jul 1, 2024
2 parents c5e474f + 60694e0 commit cbd25ae
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
4 changes: 4 additions & 0 deletions erpnext/selling/doctype/sales_order/sales_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -498,6 +498,10 @@ def check_modified_date(self):
def update_status(self, status):
self.check_modified_date()
self.set_status(update=True, status=status)
# Upon Sales Order Re-open, check for credit limit.
# Limit should be checked after the 'Hold/Closed' status is reset.
if status == "Draft" and self.docstatus == 1:
self.check_credit_limit()
self.update_reserved_qty()
self.notify_update()
clear_doctype_notifications(self)
Expand Down
28 changes: 27 additions & 1 deletion erpnext/selling/doctype/sales_order/test_sales_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from frappe.tests.utils import FrappeTestCase, change_settings
from frappe.utils import add_days, flt, getdate, nowdate, today

from erpnext.accounts.test.accounts_mixin import AccountsTestMixin
from erpnext.controllers.accounts_controller import InvalidQtyError, update_child_qty_rate
from erpnext.maintenance.doctype.maintenance_schedule.test_maintenance_schedule import (
make_maintenance_schedule,
Expand All @@ -32,7 +33,7 @@
from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry


class TestSalesOrder(FrappeTestCase):
class TestSalesOrder(AccountsTestMixin, FrappeTestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
Expand All @@ -48,6 +49,9 @@ def tearDownClass(cls) -> None:
)
super().tearDownClass()

def setUp(self):
self.create_customer("_Test Customer Credit")

def tearDown(self):
frappe.set_user("Administrator")

Expand Down Expand Up @@ -2171,6 +2175,28 @@ def test_auto_update_price_list(self):
frappe.db.set_single_value("Stock Settings", "update_existing_price_list_rate", 0)
frappe.db.set_single_value("Stock Settings", "auto_insert_price_list_rate_if_missing", 0)

def test_credit_limit_on_so_reopning(self):
# set credit limit
company = "_Test Company"
customer = frappe.get_doc("Customer", self.customer)
customer.credit_limits = []
customer.append(
"credit_limits", {"company": company, "credit_limit": 1000, "bypass_credit_limit_check": False}
)
customer.save()

so1 = make_sales_order(qty=9, rate=100, do_not_submit=True)
so1.customer = self.customer
so1.save().submit()

so1.update_status("Closed")

so2 = make_sales_order(qty=9, rate=100, do_not_submit=True)
so2.customer = self.customer
so2.save().submit()

self.assertRaises(frappe.ValidationError, so1.update_status, "Draft")


def automatically_fetch_payment_terms(enable=1):
accounts_settings = frappe.get_doc("Accounts Settings")
Expand Down

0 comments on commit cbd25ae

Please sign in to comment.