diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py index f7e65e0b39a..7327fdefd42 100644 --- a/erpnext/selling/doctype/sales_order/test_sales_order.py +++ b/erpnext/selling/doctype/sales_order/test_sales_order.py @@ -2141,6 +2141,40 @@ class TestSalesOrder(FrappeTestCase): dn.submit() dn.reload() + def test_auto_update_price_list(self): + item = make_item( + "_Test Auto Update Price List Item", + ) + + frappe.db.set_single_value("Stock Settings", "auto_insert_price_list_rate_if_missing", 1) + so = make_sales_order( + item_code=item.name, currency="USD", qty=1, rate=100, price_list_rate=100, do_not_submit=True + ) + so.save() + + item_price = frappe.db.get_value("Item Price", {"item_code": item.name}, "price_list_rate") + self.assertEqual(item_price, 100) + + so = make_sales_order( + item_code=item.name, currency="USD", qty=1, rate=200, price_list_rate=100, do_not_submit=True + ) + so.save() + + item_price = frappe.db.get_value("Item Price", {"item_code": item.name}, "price_list_rate") + self.assertEqual(item_price, 100) + + frappe.db.set_single_value("Stock Settings", "update_existing_price_list_rate", 1) + so = make_sales_order( + item_code=item.name, currency="USD", qty=1, rate=200, price_list_rate=200, do_not_submit=True + ) + so.save() + + item_price = frappe.db.get_value("Item Price", {"item_code": item.name}, "price_list_rate") + self.assertEqual(item_price, 200) + + 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 automatically_fetch_payment_terms(enable=1): accounts_settings = frappe.get_doc("Accounts Settings") diff --git a/erpnext/setup/demo_data/item.json b/erpnext/setup/demo_data/item.json index 330e114dd53..17024341225 100644 --- a/erpnext/setup/demo_data/item.json +++ b/erpnext/setup/demo_data/item.json @@ -4,6 +4,7 @@ "item_group": "Demo Item Group", "item_code": "SKU001", "item_name": "T-shirt", + "valuation_rate": 400.0, "gst_hsn_code": "999512", "image": "https://images.pexels.com/photos/1484808/pexels-photo-1484808.jpeg" }, @@ -11,6 +12,7 @@ "doctype": "Item", "item_group": "Demo Item Group", "item_code": "SKU002", + "valuation_rate": 300.0, "item_name": "Laptop", "gst_hsn_code": "999512", "image": "https://images.pexels.com/photos/3999538/pexels-photo-3999538.jpeg" @@ -19,6 +21,7 @@ "doctype": "Item", "item_group": "Demo Item Group", "item_code": "SKU003", + "valuation_rate": 523.0, "item_name": "Book", "gst_hsn_code": "999512", "image": "https://images.pexels.com/photos/2422178/pexels-photo-2422178.jpeg" @@ -27,6 +30,7 @@ "doctype": "Item", "item_group": "Demo Item Group", "item_code": "SKU004", + "valuation_rate": 725.0, "item_name": "Smartphone", "gst_hsn_code": "999512", "image": "https://images.pexels.com/photos/1647976/pexels-photo-1647976.jpeg" @@ -35,6 +39,7 @@ "doctype": "Item", "item_group": "Demo Item Group", "item_code": "SKU005", + "valuation_rate": 222.0, "item_name": "Sneakers", "gst_hsn_code": "999512", "image": "https://images.pexels.com/photos/1598505/pexels-photo-1598505.jpeg" @@ -43,6 +48,7 @@ "doctype": "Item", "item_group": "Demo Item Group", "item_code": "SKU006", + "valuation_rate": 420.0, "item_name": "Coffee Mug", "gst_hsn_code": "999512", "image": "https://images.pexels.com/photos/585753/pexels-photo-585753.jpeg" @@ -51,6 +57,7 @@ "doctype": "Item", "item_group": "Demo Item Group", "item_code": "SKU007", + "valuation_rate": 375.0, "item_name": "Television", "gst_hsn_code": "999512", "image": "https://images.pexels.com/photos/8059376/pexels-photo-8059376.jpeg" @@ -59,6 +66,7 @@ "doctype": "Item", "item_group": "Demo Item Group", "item_code": "SKU008", + "valuation_rate": 333.0, "item_name": "Backpack", "gst_hsn_code": "999512", "image": "https://images.pexels.com/photos/3731256/pexels-photo-3731256.jpeg" @@ -67,6 +75,7 @@ "doctype": "Item", "item_group": "Demo Item Group", "item_code": "SKU009", + "valuation_rate": 700.0, "item_name": "Headphones", "gst_hsn_code": "999512", "image": "https://images.pexels.com/photos/3587478/pexels-photo-3587478.jpeg" @@ -75,6 +84,7 @@ "doctype": "Item", "item_group": "Demo Item Group", "item_code": "SKU010", + "valuation_rate": 500.0, "item_name": "Camera", "gst_hsn_code": "999512", "image": "https://images.pexels.com/photos/51383/photo-camera-subject-photographer-51383.jpeg" diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 1cb10575cd1..85da0348265 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -816,7 +816,9 @@ def get_price_list_rate(args, item_doc, out=None): price_list_rate = get_price_list_rate_for(args, item_doc.variant_of) # insert in database - if price_list_rate is None: + if price_list_rate is None or frappe.db.get_single_value( + "Stock Settings", "update_existing_price_list_rate" + ): if args.price_list and args.rate: insert_item_price(args) return out