diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 147785a..28a9bdd 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -1142,49 +1142,6 @@
 		if update:
 			self.db_set('status', self.status, update_modified = update_modified)
 
-@frappe.whitelist()
-def set_payment_terms_from_po(doc):
-	if isinstance(doc, six.string_types):
-		doc = json.loads(doc)
-
-	purchase_order = doc.get('items')[0].get('purchase_order')
-	
-	if purchase_order and all_items_have_same_po(doc, purchase_order):
-		purchase_order = frappe.get_cached_doc('Purchase Order', purchase_order)
-	else:
-		return
-
-	if has_default_payment_terms(doc) and not has_default_payment_terms(purchase_order):
-		doc['payment_schedule'] = []
-		doc['payment_terms_template'] = purchase_order.payment_terms_template
-
-		for schedule in purchase_order.payment_schedule:
-			payment_schedule = {
-				'payment_term': schedule.payment_term,
-				'due_date': schedule.due_date,
-				'invoice_portion': schedule.invoice_portion,
-				'discount_type': schedule.discount_type,
-				'discount': schedule.discount,
-				'base_payment_amount': schedule.base_payment_amount,
-				'payment_amount': schedule.payment_amount,
-				'outstanding': schedule.outstanding
-			}
-			doc['payment_schedule'].append(payment_schedule)
-
-		return doc
-
-def all_items_have_same_po(doc, purchase_order):
-	for item in doc.get('items'):
-		if item.get('purchase_order') != purchase_order:
-			return False
-	
-	return True
-
-def has_default_payment_terms(doc):
-	if doc.get('payment_schedule')[0].get('invoice_portion') == 100:
-		return True
-	return False
-
 # to get details of purchase invoice/receipt from which this doc was created for exchange rate difference handling
 def get_purchase_document_details(doc):
 	if doc.doctype == 'Purchase Invoice':
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index eaa502f..a0bac51 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -443,6 +443,8 @@
 	frappe.response.location = '/purchase-invoices/' + doc.name
 
 def get_mapped_purchase_invoice(source_name, target_doc=None, ignore_permissions=False):
+	from erpnext.controllers.accounts_controller import fetch_payment_terms_from_order	
+
 	def postprocess(source, target):
 		target.flags.ignore_permissions = ignore_permissions
 		set_missing_values(source, target)
@@ -489,15 +491,13 @@
 		},
 	}
 
-	if frappe.get_single("Accounts Settings").automatically_fetch_payment_terms == 1:
-		fields["Payment Schedule"] = {
-			"doctype": "Payment Schedule",
-			"add_if_empty": True
-		}
-
 	doc = get_mapped_doc("Purchase Order", source_name,	fields,
 		target_doc, postprocess, ignore_permissions=ignore_permissions)
 
+	automatically_fetch_payment_terms = cint(frappe.db.get_single_value('Accounts Settings', 'automatically_fetch_payment_terms'))
+	if automatically_fetch_payment_terms:
+		fetch_payment_terms_from_order(doc)
+
 	return doc
 
 @frappe.whitelist()
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index cdd865a..f7ea77b 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -1803,3 +1803,46 @@
 @erpnext.allow_regional
 def validate_einvoice_fields(doc):
 	pass
+
+def fetch_payment_terms_from_order(doc):
+	"""
+		Fetch Payment Terms from Purchase/Sales Order on creating a new Purchase/Sales Invoice.
+	"""
+
+	if doc.doctype == "Sales Invoice":
+		po_or_so = doc.get('items')[0].get('sales_order')
+		po_or_so_doctype = "Sales Order"
+		po_or_so_doctype_name = "sales_order"
+	else:
+		po_or_so = doc.get('items')[0].get('purchase_order')
+		po_or_so_doctype = "Purchase Order"
+		po_or_so_doctype_name = "purchase_order"
+
+	if po_or_so and all_items_have_same_po_or_so(doc, po_or_so, po_or_so_doctype_name):
+		po_or_so = frappe.get_cached_doc(po_or_so_doctype, po_or_so)
+	else:
+		doc.set_payment_schedule()
+		return
+
+	doc.payment_schedule = []
+	doc.payment_terms_template = po_or_so.payment_terms_template
+
+	for schedule in po_or_so.payment_schedule:
+		payment_schedule = {
+			'payment_term': schedule.payment_term,
+			'due_date': schedule.due_date,
+			'invoice_portion': schedule.invoice_portion,
+			'discount_type': schedule.discount_type,
+			'discount': schedule.discount,
+			'base_payment_amount': schedule.base_payment_amount,
+			'payment_amount': schedule.payment_amount,
+			'outstanding': schedule.outstanding
+		}
+		doc.append("payment_schedule", payment_schedule)
+
+def all_items_have_same_po_or_so(doc, po_or_so, po_or_so_fieldname):
+	for item in doc.get('items'):
+		if item.get(po_or_so_fieldname) != po_or_so:
+			return False
+	
+	return True
\ No newline at end of file
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 41f57a3..a58c381 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -621,6 +621,8 @@
 
 @frappe.whitelist()
 def make_sales_invoice(source_name, target_doc=None, ignore_permissions=False):
+	from erpnext.controllers.accounts_controller import fetch_payment_terms_from_order
+
 	def postprocess(source, target):
 		set_missing_values(source, target)
 		#Get the advance paid Journal Entries in Sales Invoice Advance
@@ -693,6 +695,10 @@
 		}
 	}, target_doc, postprocess, ignore_permissions=ignore_permissions)
 
+	automatically_fetch_payment_terms = cint(frappe.db.get_single_value('Accounts Settings', 'automatically_fetch_payment_terms'))
+	if automatically_fetch_payment_terms:
+		fetch_payment_terms_from_order(doclist)
+
 	return doclist
 
 @frappe.whitelist()
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 4808e94..1628f93 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -414,6 +414,8 @@
 
 @frappe.whitelist()
 def make_sales_invoice(source_name, target_doc=None):
+	from erpnext.controllers.accounts_controller import fetch_payment_terms_from_order
+
 	doc = frappe.get_doc('Delivery Note', source_name)
 
 	to_make_invoice_qty_map = {}
@@ -503,6 +505,10 @@
 		}
 	}, target_doc, set_missing_values)
 
+	automatically_fetch_payment_terms = cint(frappe.db.get_single_value('Accounts Settings', 'automatically_fetch_payment_terms'))
+	if automatically_fetch_payment_terms:
+		fetch_payment_terms_from_order(doc)
+
 	return doc
 
 @frappe.whitelist()
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 82c87a8..cf6cac2 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -583,6 +583,7 @@
 @frappe.whitelist()
 def make_purchase_invoice(source_name, target_doc=None):
 	from erpnext.accounts.party import get_payment_terms_template
+	from erpnext.controllers.accounts_controller import fetch_payment_terms_from_order
 
 	doc = frappe.get_doc('Purchase Receipt', source_name)
 	returned_qty_map = get_returned_qty_map(source_name)
@@ -654,6 +655,10 @@
 		}
 	}, target_doc, set_missing_values)
 
+	automatically_fetch_payment_terms = cint(frappe.db.get_single_value('Accounts Settings', 'automatically_fetch_payment_terms'))
+	if automatically_fetch_payment_terms:
+		fetch_payment_terms_from_order(doclist)
+
 	return doclist
 
 def get_invoiced_qty_map(purchase_receipt):
