fix: Pricing rule application/removal on qty change (#39084)
fix: Pricing rule application/removal on qty change (cherry picked from commit f52d7c7665d4097b19a8bb6c5f99acf38cd8adcf) Co-authored-by: Deepesh Garg <deepeshgarg6@gmail.com>
This commit is contained in:
		
							parent
							
								
									e76f59803c
								
							
						
					
					
						commit
						f31070741a
					
				| @ -579,12 +579,17 @@ def apply_price_discount_rule(pricing_rule, item_details, args): | |||||||
| 			item_details[field] += pricing_rule.get(field, 0) if pricing_rule else args.get(field, 0) | 			item_details[field] += pricing_rule.get(field, 0) if pricing_rule else args.get(field, 0) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @frappe.whitelist() | ||||||
| def remove_pricing_rule_for_item(pricing_rules, item_details, item_code=None, rate=None): | def remove_pricing_rule_for_item(pricing_rules, item_details, item_code=None, rate=None): | ||||||
| 	from erpnext.accounts.doctype.pricing_rule.utils import ( | 	from erpnext.accounts.doctype.pricing_rule.utils import ( | ||||||
| 		get_applied_pricing_rules, | 		get_applied_pricing_rules, | ||||||
| 		get_pricing_rule_items, | 		get_pricing_rule_items, | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
|  | 	if isinstance(item_details, str): | ||||||
|  | 		item_details = json.loads(item_details) | ||||||
|  | 		item_details = frappe._dict(item_details) | ||||||
|  | 
 | ||||||
| 	for d in get_applied_pricing_rules(pricing_rules): | 	for d in get_applied_pricing_rules(pricing_rules): | ||||||
| 		if not d or not frappe.db.exists("Pricing Rule", d): | 		if not d or not frappe.db.exists("Pricing Rule", d): | ||||||
| 			continue | 			continue | ||||||
|  | |||||||
| @ -1200,8 +1200,9 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe | |||||||
| 		let item = frappe.get_doc(cdt, cdn); | 		let item = frappe.get_doc(cdt, cdn); | ||||||
| 		// item.pricing_rules = ''
 | 		// item.pricing_rules = ''
 | ||||||
| 		frappe.run_serially([ | 		frappe.run_serially([ | ||||||
| 			() => this.remove_pricing_rule(item), | 			() => this.remove_pricing_rule_for_item(item), | ||||||
| 			() => this.conversion_factor(doc, cdt, cdn, true), | 			() => this.conversion_factor(doc, cdt, cdn, true), | ||||||
|  | 			() => this.apply_price_list(item, true), //reapply price list before applying pricing rule
 | ||||||
| 			() => this.calculate_stock_uom_rate(doc, cdt, cdn), | 			() => this.calculate_stock_uom_rate(doc, cdt, cdn), | ||||||
| 			() => this.apply_pricing_rule(item, true) | 			() => this.apply_pricing_rule(item, true) | ||||||
| 		]); | 		]); | ||||||
| @ -1448,8 +1449,8 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe | |||||||
| 
 | 
 | ||||||
| 	ignore_pricing_rule() { | 	ignore_pricing_rule() { | ||||||
| 		if(this.frm.doc.ignore_pricing_rule) { | 		if(this.frm.doc.ignore_pricing_rule) { | ||||||
| 			var me = this; | 			let me = this; | ||||||
| 			var item_list = []; | 			let item_list = []; | ||||||
| 
 | 
 | ||||||
| 			$.each(this.frm.doc["items"] || [], function(i, d) { | 			$.each(this.frm.doc["items"] || [], function(i, d) { | ||||||
| 				if (d.item_code) { | 				if (d.item_code) { | ||||||
| @ -1488,6 +1489,34 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	remove_pricing_rule_for_item(item) { | ||||||
|  | 		let me = this; | ||||||
|  | 		return this.frm.call({ | ||||||
|  | 			method: "erpnext.accounts.doctype.pricing_rule.pricing_rule.remove_pricing_rule_for_item", | ||||||
|  | 			args: { | ||||||
|  | 				pricing_rules: item.pricing_rules, | ||||||
|  | 				item_details: { | ||||||
|  | 					"doctype": item.doctype, | ||||||
|  | 					"name": item.name, | ||||||
|  | 					"item_code": item.item_code, | ||||||
|  | 					"pricing_rules": item.pricing_rules, | ||||||
|  | 					"parenttype": item.parenttype, | ||||||
|  | 					"parent": item.parent, | ||||||
|  | 					"price_list_rate": item.price_list_rate | ||||||
|  | 				}, | ||||||
|  | 				item_code: item.item_code, | ||||||
|  | 				rate: item.price_list_rate, | ||||||
|  | 			}, | ||||||
|  | 			callback: function(r) { | ||||||
|  | 				if (!r.exc && r.message) { | ||||||
|  | 					me.remove_pricing_rule(r.message); | ||||||
|  | 					me.calculate_taxes_and_totals(); | ||||||
|  | 					if(me.frm.doc.apply_discount_on) me.frm.trigger("apply_discount_on"); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	apply_pricing_rule(item, calculate_taxes_and_totals) { | 	apply_pricing_rule(item, calculate_taxes_and_totals) { | ||||||
| 		var me = this; | 		var me = this; | ||||||
| 		var args = this._get_args(item); | 		var args = this._get_args(item); | ||||||
| @ -1712,8 +1741,8 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe | |||||||
| 			this.frm.set_value("plc_conversion_rate", ""); | 			this.frm.set_value("plc_conversion_rate", ""); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		var me = this; | 		let me = this; | ||||||
| 		var args = this._get_args(item); | 		let args = this._get_args(item); | ||||||
| 		if (!((args.items && args.items.length) || args.price_list)) { | 		if (!((args.items && args.items.length) || args.price_list)) { | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| @ -1755,7 +1784,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe | |||||||
| 			"discount_amount", "margin_rate_or_amount", "rate_with_margin"]; | 			"discount_amount", "margin_rate_or_amount", "rate_with_margin"]; | ||||||
| 
 | 
 | ||||||
| 		if(item.remove_free_item) { | 		if(item.remove_free_item) { | ||||||
| 			var items = []; | 			let items = []; | ||||||
| 
 | 
 | ||||||
| 			me.frm.doc.items.forEach(d => { | 			me.frm.doc.items.forEach(d => { | ||||||
| 				if(d.item_code != item.remove_free_item || !d.is_free_item) { | 				if(d.item_code != item.remove_free_item || !d.is_free_item) { | ||||||
|  | |||||||
| @ -497,8 +497,8 @@ def update_barcode_value(out): | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def get_barcode_data(items_list): | def get_barcode_data(items_list): | ||||||
| 	# get itemwise batch no data | 	# get item-wise batch no data | ||||||
| 	# exmaple: {'LED-GRE': [Batch001, Batch002]} | 	# example: {'LED-GRE': [Batch001, Batch002]} | ||||||
| 	# where LED-GRE is item code, SN0001 is serial no and Pune is warehouse | 	# where LED-GRE is item code, SN0001 is serial no and Pune is warehouse | ||||||
| 
 | 
 | ||||||
| 	itemwise_barcode = {} | 	itemwise_barcode = {} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user