[fix] set previous doc links for document flow
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 71e9c42..ceba01e 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -663,6 +663,18 @@
 
 	def on_recurring(self, reference_doc):
 		self.due_date = None
+	
+	def get_link_filters(self, for_doctype):
+		self.prev_link_mapper = {
+			"Purchase Order": {
+				"fieldname": "purchase_order"
+			},
+			"Purchase Receipt": {
+				"fieldname": "purchase_receipt"
+			}
+		}
+		
+		return super(PurchaseInvoice, self).get_link_filters(for_doctype)
 
 @frappe.whitelist()
 def make_debit_note(source_name, target_doc=None):
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 2584d40..377f9fa 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -696,6 +696,18 @@
 			self.set(fieldname, reference_doc.get(fieldname))
 
 		self.due_date = None
+	
+	def get_link_filters(self, for_doctype):
+		self.prev_link_mapper = {
+			"Sales Order": {
+				"fieldname": "sales_order"
+			},
+			"Delivery Note": {
+				"fieldname": "delivery_note"
+			}
+		}
+		
+		return super(SalesInvoice, self).get_link_filters(for_doctype)
 
 def get_list_context(context=None):
 	from erpnext.controllers.website_list_for_contact import get_list_context
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index 6184236..49a44e9 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -235,6 +235,15 @@
 			if item.delivered_by_supplier == 1:
 				item.received_qty = item.qty
 
+	def get_link_filters(self, for_doctype):
+		self.prev_link_mapper = {
+			"Supplier Quotation": {
+				"fieldname": "supplier_quotation"
+			}
+		}
+		
+		return super(PurchaseOrder, self).get_link_filters(for_doctype)
+
 @frappe.whitelist()
 def close_or_unclose_purchase_orders(names, status):
 	if not frappe.has_permission("Purchase Order", "write"):
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 2e0a272..63e307d 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -307,6 +307,15 @@
 		self.set("delivery_date", get_next_date(reference_doc.delivery_date, mcount,
 						cint(reference_doc.repeat_on_day_of_month)))
 
+	def get_link_filters(self, for_doctype):
+		self.prev_link_mapper = {
+			"Quotation": {
+				"fieldname": "prevdoc_docname"
+			}
+		}
+		
+		return super(SalesOrder, self).get_link_filters(for_doctype)
+		
 def get_list_context(context=None):
 	from erpnext.controllers.website_list_for_contact import get_list_context
 	list_context = get_list_context(context)
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 6c6a3b3..be6c797 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -282,6 +282,15 @@
 			dn_doc.update_billing_percentage(update_modified=update_modified)
 
 		self.load_from_db()
+	
+	def get_link_filters(self, for_doctype):
+		self.prev_link_mapper = {
+			"Sales Order": {
+				"fieldname": "against_sales_order"
+			}
+		}
+		
+		return super(DeliveryNote, self).get_link_filters(for_doctype)
 
 def update_billed_amount_based_on_so(so_detail, update_modified=True):
 	# Billed against Sales Order directly
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 70cef36..bfcecbd 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -333,6 +333,15 @@
 
 		self.load_from_db()
 
+	def get_link_filters(self, for_doctype):
+		self.prev_link_mapper = {
+			"Purchase Order": {
+				"fieldname": "prevdoc_docname"
+			}
+		}
+		
+		return super(PurchaseReceipt, self).get_link_filters(for_doctype)
+
 def update_billed_amount_based_on_po(po_detail, update_modified=True):
 	# Billed against Sales Order directly
 	billed_against_po = frappe.db.sql("""select sum(amount) from `tabPurchase Invoice Item`
diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py
index d088f59..9105553 100644
--- a/erpnext/utilities/transaction_base.py
+++ b/erpnext/utilities/transaction_base.py
@@ -107,6 +107,24 @@
 						frappe.throw(_("Row #{0}: Rate must be same as {1}: {2} ({3} / {4}) ")
 							.format(d.idx, ref_dt, d.get(ref_dn_field), d.rate, ref_rate))
 
+	def get_link_filters(self, for_doctype):
+		if self.prev_link_mapper.get(for_doctype):
+			fieldname = self.prev_link_mapper[for_doctype]["fieldname"]
+			
+			values = filter(None, tuple([item.as_dict()[fieldname] for item in self.items]))
+
+			if values:
+				ret = {
+					for_doctype : {
+						"filters": [[for_doctype, "name", "in", values]]
+					}
+				}
+			else:
+				ret = None
+		else:
+			ret = None
+		
+		return ret
 
 def delete_events(ref_type, ref_name):
 	frappe.delete_doc("Event", frappe.db.sql_list("""select name from `tabEvent`