Merge pull request #20732 from deepeshgarg007/loan_security_pledge_api
fix: API fix for loan security pledge creation
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
index 924e108..e13fcb9 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
@@ -248,7 +248,7 @@
if pricing_rule.price_or_product_discount == "Price":
apply_price_discount_rule(pricing_rule, item_details, args)
else:
- get_product_discount_rule(pricing_rule, item_details, doc)
+ get_product_discount_rule(pricing_rule, item_details, args, doc)
item_details.has_pricing_rule = 1
diff --git a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py
index 9c1fef6..2da71df 100644
--- a/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py
+++ b/erpnext/accounts/doctype/pricing_rule/test_pricing_rule.py
@@ -326,6 +326,66 @@
self.assertEquals(item.discount_amount, 110)
self.assertEquals(item.rate, 990)
+ def test_pricing_rule_for_product_discount_on_same_item(self):
+ frappe.delete_doc_if_exists('Pricing Rule', '_Test Pricing Rule')
+ test_record = {
+ "doctype": "Pricing Rule",
+ "title": "_Test Pricing Rule",
+ "apply_on": "Item Code",
+ "currency": "USD",
+ "items": [{
+ "item_code": "_Test Item",
+ }],
+ "selling": 1,
+ "rate_or_discount": "Discount Percentage",
+ "rate": 0,
+ "min_qty": 0,
+ "max_qty": 7,
+ "discount_percentage": 17.5,
+ "price_or_product_discount": "Product",
+ "same_item": 1,
+ "free_qty": 1,
+ "company": "_Test Company"
+ }
+ frappe.get_doc(test_record.copy()).insert()
+
+ # With pricing rule
+ so = make_sales_order(item_code="_Test Item", qty=1)
+ so.load_from_db()
+ self.assertEqual(so.items[1].is_free_item, 1)
+ self.assertEqual(so.items[1].item_code, "_Test Item")
+
+
+ def test_pricing_rule_for_product_discount_on_different_item(self):
+ frappe.delete_doc_if_exists('Pricing Rule', '_Test Pricing Rule')
+ test_record = {
+ "doctype": "Pricing Rule",
+ "title": "_Test Pricing Rule",
+ "apply_on": "Item Code",
+ "currency": "USD",
+ "items": [{
+ "item_code": "_Test Item",
+ }],
+ "selling": 1,
+ "rate_or_discount": "Discount Percentage",
+ "rate": 0,
+ "min_qty": 0,
+ "max_qty": 7,
+ "discount_percentage": 17.5,
+ "price_or_product_discount": "Product",
+ "same_item": 0,
+ "free_item": "_Test Item 2",
+ "free_qty": 1,
+ "company": "_Test Company"
+ }
+ frappe.get_doc(test_record.copy()).insert()
+
+ # With pricing rule
+ so = make_sales_order(item_code="_Test Item", qty=1)
+ so.load_from_db()
+ self.assertEqual(so.items[1].is_free_item, 1)
+ self.assertEqual(so.items[1].item_code, "_Test Item 2")
+
def make_pricing_rule(**args):
args = frappe._dict(args)
diff --git a/erpnext/accounts/doctype/pricing_rule/utils.py b/erpnext/accounts/doctype/pricing_rule/utils.py
index e475563..a2bb2ee 100644
--- a/erpnext/accounts/doctype/pricing_rule/utils.py
+++ b/erpnext/accounts/doctype/pricing_rule/utils.py
@@ -435,7 +435,7 @@
doc.calculate_taxes_and_totals()
elif d.price_or_product_discount == 'Product':
item_details = frappe._dict({'parenttype': doc.doctype})
- get_product_discount_rule(d, item_details, doc)
+ get_product_discount_rule(d, item_details, doc=doc)
apply_pricing_rule_for_free_items(doc, item_details.free_item_data)
doc.set_missing_values()
@@ -443,9 +443,10 @@
return (item_row.get("pricing_rules").split(',')
if item_row.get("pricing_rules") else [])
-def get_product_discount_rule(pricing_rule, item_details, doc=None):
- free_item = (pricing_rule.free_item
- if not pricing_rule.same_item or pricing_rule.apply_on == 'Transaction' else item_details.item_code)
+def get_product_discount_rule(pricing_rule, item_details, args=None, doc=None):
+ free_item = pricing_rule.free_item
+ if pricing_rule.same_item:
+ free_item = item_details.item_code or args.item_code
if not free_item:
frappe.throw(_("Free item not set in the pricing rule {0}")
diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js
index 7ef2d64..6b26d38 100644
--- a/erpnext/stock/doctype/material_request/material_request.js
+++ b/erpnext/stock/doctype/material_request/material_request.js
@@ -145,6 +145,7 @@
},
get_item_data: function(frm, item) {
+ if (!item.item_code) return;
frm.call({
method: "erpnext.stock.get_item_details.get_item_details",
child: item,