fix(accounts): reject disabled price lists in buying and selling (#58891)

(cherry picked from commit f8c2f3440b)
This commit is contained in:
pandiyan
2026-09-09 06:57:48 +05:30
parent b6120ea56a
commit 47662b9af2
2 changed files with 28 additions and 4 deletions

View File

@@ -253,6 +253,8 @@ class AccountsController(TransactionBase):
if self.get("_action") and self._action != "update_after_submit":
self.set_missing_values(for_validate=True)
self.validate_price_list()
if self.get("_action") == "submit":
self.remove_bundle_for_non_stock_invoices()
@@ -384,6 +386,28 @@ class AccountsController(TransactionBase):
def is_drop_ship(items):
return any(item.delivered_by_supplier for item in items)
def validate_price_list(self):
price_list_field = "selling_price_list" if self.get("selling_price_list") else "buying_price_list"
price_list = self.get(price_list_field)
if not price_list or frappe.db.get_value("Price List", price_list, "enabled"):
return
# Returns retain a submitted voucher's pricing even if its price list is now disabled.
if (
self.get("is_return")
and self.get("return_against")
and price_list
== frappe.db.get_value(
self.doctype, {"name": self.return_against, "docstatus": 1}, price_list_field
)
):
return
frappe.throw(
_("Price List {0} is disabled").format(get_link_to_form("Price List", price_list)),
title=_("Disabled Price List"),
)
def set_default_letter_head(self):
if hasattr(self, "letter_head") and not self.letter_head:
self.letter_head = frappe.db.get_value("Company", self.company, "default_letter_head")

View File

@@ -53,7 +53,7 @@ def set_booking_setting(field, value):
def slot_on(days_from_now, hour, minute=0):
day = datetime.date.today() + datetime.timedelta(days=days_from_now)
day = getdate() + datetime.timedelta(days=days_from_now)
return datetime.datetime.combine(day, datetime.time(hour, minute))
@@ -136,7 +136,7 @@ class TestAppointment(FrappeTestCase):
with self.set_user("Guest"), patch.object(Appointment, "send_confirmation_email") as mock_send:
appointment = create_appointment(
date=str(datetime.date.today() + datetime.timedelta(days=days_from_now)),
date=str(getdate() + datetime.timedelta(days=days_from_now)),
time=time,
tz=get_system_timezone(),
contact={"name": "Portal Visitor", "email": email, "number": "123", "skype": "", "notes": ""},
@@ -280,7 +280,7 @@ class TestAppointment(FrappeTestCase):
with self.set_user("Guest"), self.assertRaises(frappe.Redirect):
create_appointment(
date=str(datetime.date.today() + datetime.timedelta(days=3)),
date=str(getdate() + datetime.timedelta(days=3)),
time="10:00:00",
tz="UTC",
contact={
@@ -295,7 +295,7 @@ class TestAppointment(FrappeTestCase):
def test_booked_slot_unavailable_on_portal(self):
self._configure_booking_settings()
tz = get_system_timezone()
day = datetime.date.today() + datetime.timedelta(days=2)
day = getdate() + datetime.timedelta(days=2)
def get_availability():
with self.set_user("Guest"):