fix: schedule date
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
index af6e4c8..b99c07e 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py
@@ -245,7 +245,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)
+					get_product_discount_rule(pricing_rule, item_details, doc)
 
 		item_details.has_pricing_rule = 1
 
diff --git a/erpnext/accounts/doctype/pricing_rule/utils.py b/erpnext/accounts/doctype/pricing_rule/utils.py
index 346eba2..bd5a149 100644
--- a/erpnext/accounts/doctype/pricing_rule/utils.py
+++ b/erpnext/accounts/doctype/pricing_rule/utils.py
@@ -7,7 +7,7 @@
 import frappe, copy, json
 from frappe import throw, _
 from six import string_types
-from frappe.utils import flt, cint, get_datetime, get_link_to_form
+from frappe.utils import flt, cint, get_datetime, get_link_to_form, today
 from erpnext.setup.doctype.item_group.item_group import get_child_item_groups
 from erpnext.stock.doctype.warehouse.warehouse import get_child_warehouses
 from erpnext.stock.get_item_details import get_conversion_factor
@@ -434,8 +434,8 @@
 
 				doc.calculate_taxes_and_totals()
 			elif d.price_or_product_discount == 'Product':
-				item_details = frappe._dict()
-				get_product_discount_rule(d, item_details)
+				item_details = frappe._dict({'parenttype': doc.doctype})
+				get_product_discount_rule(d, item_details, doc)
 				apply_pricing_rule_for_free_items(doc, item_details.free_item_data)
 				doc.set_missing_values()
 
@@ -443,7 +443,7 @@
 	return (item_row.get("pricing_rules").split(',')
 		if item_row.get("pricing_rules") else [])
 
-def get_product_discount_rule(pricing_rule, item_details):
+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)
 
@@ -467,6 +467,12 @@
 	item_details.free_item_data['conversion_factor'] = get_conversion_factor(free_item, 
 		item_details.free_item_data['uom']).get("conversion_factor", 1)
 
+	if item_details.get("parenttype") == 'Purchase Order':
+		item_details.free_item_data['schedule_date'] = doc.schedule_date if doc else today()
+
+	if item_details.get("parenttype") == 'Sales Order':
+		item_details.free_item_data['delivery_date'] = doc.delivery_date if doc else today()
+
 def apply_pricing_rule_for_free_items(doc, pricing_rule_args, set_missing_values=False):
 	if pricing_rule_args.get('item_code'):
 		items = [d.item_code for d in doc.items
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index 17fba8e..3ec7aff 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -735,6 +735,10 @@
 		if not self.get("items"):
 			return
 
+		earliest_schedule_date = min([d.schedule_date for d in self.get("items")])
+		if earliest_schedule_date:
+			self.schedule_date = earliest_schedule_date
+
 		if self.schedule_date:
 			for d in self.get('items'):
 				if not d.schedule_date:
@@ -746,10 +750,6 @@
 		else:
 			frappe.throw(_("Please enter Reqd by Date"))
 
-		earliest_schedule_date = min([d.schedule_date for d in self.get("items")])
-		if earliest_schedule_date:
-			self.schedule_date = earliest_schedule_date
-
 	def validate_items(self):
 		# validate items to see if they have is_purchase_item or is_subcontracted_item enabled
 		if self.doctype=="Material Request": return