diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 26e4f16..979e83d 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -619,6 +619,7 @@
 				"name": "prevdoc_detail_docname",
 				"parent": "prevdoc_docname",
 				"parenttype": "prevdoc_doctype",
+				"base_amount": "grand_total"
 			}
 		}
 	}, target_doc, postprocess)
diff --git a/erpnext/stock/doctype/shipment/shipment.js b/erpnext/stock/doctype/shipment/shipment.js
index aa792a4..62070e4 100644
--- a/erpnext/stock/doctype/shipment/shipment.js
+++ b/erpnext/stock/doctype/shipment/shipment.js
@@ -23,76 +23,20 @@
 	},
 	onload: function(frm) {
 		frm.set_query("delivery_address_name", () => {
-			let link_doctype = '';
-			let link_name = '';
-			let is_your_company_address = 0;
-			if (frm.doc.delivery_to_type == 'Customer') {
-				link_doctype = 'Customer';
-				link_name = frm.doc.delivery_customer;
-			}
-			if (frm.doc.delivery_to_type == 'Supplier') {
-				link_doctype = 'Supplier';
-				link_name = frm.doc.delivery_supplier;
-			}
-			if (frm.doc.delivery_to_type == 'Company') {
-				link_doctype = 'Company';
-				link_name = frm.doc.delivery_company;
-				is_your_company_address = 1;
-			}
-			return frm.events.address_query(frm, link_doctype, link_name, is_your_company_address);
+			let delivery_to = `delivery_${frappe.model.scrub(frm.doc.delivery_to_type)}`
+			return frm.events.address_query(frm, frm.doc.delivery_to_type, frm.doc[delivery_to], frm.doc.delivery_to_type === 'Company' ? 1 : 0);
 		});
 		frm.set_query("pickup_address_name", () => {
-			let link_doctype = '';
-			let link_name = '';
-			let is_your_company_address = 0;
-			if (frm.doc.pickup_from_type == 'Customer') {
-				link_doctype = 'Customer';
-				link_name = frm.doc.pickup_customer;
-			}
-			if (frm.doc.pickup_from_type == 'Supplier') {
-				link_doctype = 'Supplier';
-				link_name = frm.doc.pickup_supplier;
-			}
-			if (frm.doc.pickup_from_type == 'Company') {
-				link_doctype = 'Company';
-				link_name = frm.doc.pickup_company;
-				is_your_company_address = 1;
-			}
-			return frm.events.address_query(frm, link_doctype, link_name, is_your_company_address);
+			let pickup_from = `pickup_${frappe.model.scrub(frm.doc.pickup_from_type)}`
+			return frm.events.address_query(frm, frm.doc.pickup_from_type, frm.doc[pickup_from], frm.doc.pickup_from_type === 'Company' ? 1 : 0);
 		});
 		frm.set_query("delivery_contact_name", () => {
-			let link_doctype = '';
-			let link_name = '';
-			if (frm.doc.delivery_to_type == 'Customer') {
-				link_doctype = 'Customer';
-				link_name = frm.doc.delivery_customer;
-			}
-			if (frm.doc.delivery_to_type == 'Supplier') {
-				link_doctype = 'Supplier';
-				link_name = frm.doc.delivery_supplier;
-			}
-			if (frm.doc.delivery_to_type == 'Company') {
-				link_doctype = 'Company';
-				link_name = frm.doc.delivery_company;
-			}
-			return frm.events.contact_query(frm, link_doctype, link_name);
+			let delivery_to = `delivery_${frappe.model.scrub(frm.doc.delivery_to_type)}`
+			return frm.events.contact_query(frm, frm.doc.delivery_to_type, frm.doc[delivery_to]);
 		});
 		frm.set_query("pickup_contact_name", () => {
-			let link_doctype = '';
-			let link_name = '';
-			if (frm.doc.pickup_from_type == 'Customer') {
-				link_doctype = 'Customer';
-				link_name = frm.doc.pickup_customer;
-			}
-			if (frm.doc.pickup_from_type == 'Supplier') {
-				link_doctype = 'Supplier';
-				link_name = frm.doc.pickup_supplier;
-			}
-			if (frm.doc.pickup_from_type == 'Company') {
-				link_doctype = 'Company';
-				link_name = frm.doc.pickup_company;
-			}
-			return frm.events.contact_query(frm, link_doctype, link_name);
+			let pickup_from = `pickup_${frappe.model.scrub(frm.doc.pickup_from_type)}`
+			return frm.events.contact_query(frm, frm.doc.pickup_from_type, frm.doc[pickup_from]);
 		});
 		frm.set_query("delivery_note", "shipment_delivery_note", function() {
 			let customer = '';
@@ -120,24 +64,10 @@
 		$('div[data-fieldname=delivery_contact] > div > .clearfix').hide();
 	},
 	before_save: function(frm) {
-		if (frm.doc.delivery_to_type == 'Company') {
-			frm.set_value("delivery_to", frm.doc.delivery_company);
-		}
-		if (frm.doc.delivery_to_type == 'Customer') {
-			frm.set_value("delivery_to", frm.doc.delivery_customer);
-		}
-		if (frm.doc.delivery_to_type == 'Supplier') {
-			frm.set_value("delivery_to", frm.doc.delivery_supplier);
-		}
-		if (frm.doc.pickup_from_type == 'Company') {
-			frm.set_value("pickup", frm.doc.pickup_company);
-		}
-		if (frm.doc.pickup_from_type == 'Customer') {
-			frm.set_value("pickup", frm.doc.pickup_customer);
-		}
-		if (frm.doc.pickup_from_type == 'Supplier') {
-			frm.set_value("pickup", frm.doc.pickup_supplier);
-		}
+		let delivery_to = `delivery_${frappe.model.scrub(frm.doc.delivery_to_type)}`
+		frm.set_value("delivery_to", frm.doc[delivery_to]);
+		let pickup_from = `pickup_${frappe.model.scrub(frm.doc.pickup_from_type)}`
+		frm.set_value("pickup", frm.doc[pickup_from]);
 	},
 	set_pickup_company_address: function(frm) {
 		frappe.db.get_value('Address', {
@@ -476,18 +406,11 @@
 			current_min = '00';
 			current_hour = Number(current_hour)+1;
 		}
-		if (Number(current_hour) > 19 || Number(current_hour) === 19){
-			frappe.throw(__("Today's pickup time is over, please select different date"));
-		}
-		current_hour = (current_hour < 10) ? '0' + current_hour : current_hour;
 		let pickup_time = current_hour +':'+ current_min;
 		return pickup_time;
 	},
 	set_pickup_to_time: function(frm) {
 		let pickup_to_hour = Number(frm.doc.pickup_from.split(':')[0])+5;
-		if (Number(pickup_to_hour) > 19 || Number(pickup_to_hour) === 19){
-			pickup_to_hour = 19;
-		}
 		let pickup_to_min = frm.doc.pickup_from.split(':')[1];
 		let pickup_to = pickup_to_hour +':'+ pickup_to_min;
 		frm.set_value("pickup_to", pickup_to);
diff --git a/erpnext/stock/doctype/shipment/shipment.json b/erpnext/stock/doctype/shipment/shipment.json
index 9ac6102..7e2c5ba 100644
--- a/erpnext/stock/doctype/shipment/shipment.json
+++ b/erpnext/stock/doctype/shipment/shipment.json
@@ -460,13 +460,28 @@
  ],
  "is_submittable": 1,
  "links": [],
- "modified": "2020-11-20 16:19:06.157106",
+ "modified": "2020-11-23 16:26:28.132608",
  "modified_by": "Administrator",
  "module": "Stock",
  "name": "Shipment",
  "owner": "Administrator",
  "permissions": [
   {
+   "cancel": 1,
+   "create": 1,
+   "delete": 1,
+   "email": 1,
+   "export": 1,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Stock Manager",
+   "share": 1,
+   "submit": 1,
+   "write": 1
+  },
+  {
+   "cancel": 1,
    "create": 1,
    "delete": 1,
    "email": 1,
@@ -476,6 +491,7 @@
    "report": 1,
    "role": "System Manager",
    "share": 1,
+   "submit": 1,
    "write": 1
   }
  ],
diff --git a/erpnext/stock/doctype/shipment/test_shipment.py b/erpnext/stock/doctype/shipment/test_shipment.py
index 6a06930..f61b87f 100644
--- a/erpnext/stock/doctype/shipment/test_shipment.py
+++ b/erpnext/stock/doctype/shipment/test_shipment.py
@@ -7,89 +7,19 @@
 
 import frappe
 import unittest
-from erpnext.stock.doctype.shipment.shipment import fetch_shipping_rates
-from erpnext.stock.doctype.shipment.shipment import create_shipment
-from erpnext.stock.doctype.shipment.shipment import update_tracking
+from erpnext.stock.doctype.delivery_note.delivery_note import make_shipment
 
 class TestShipment(unittest.TestCase):
-	pass
-
-	def test_shipment_booking(self):
-		shipment = create_test_shipment()
-		try:
-			shipment.submit()
-		except:
-			frappe.throw('Error occurred on submit shipment')
-		doc, rate, tracking_data = make_shipment_transaction(shipment)
-		if doc and rate and tracking_data:
-			self.assertEqual(doc.service_provider, rate.get('service_provider'))
-			self.assertEqual(doc.shipment_amount, rate.get('actual_price'))
-			self.assertEqual(doc.carrier, rate.get('carrier'))
-			self.assertEqual(doc.tracking_status, tracking_data.get('tracking_status'))
-			self.assertEqual(doc.tracking_url, tracking_data.get('tracking_url'))
-
 	def test_shipment_from_delivery_note(self):
 		delivery_note = create_test_delivery_note()
-		try:
-			delivery_note.submit()
-		except:
-			frappe.throw('An error occurred.')
-		
+		delivery_note.submit()
 		shipment = create_test_shipment([ delivery_note ])
-		try:
-			shipment.submit()
-		except:
-			frappe.throw('Error occurred on submit shipment')
-		doc, rate, tracking_data = make_shipment_transaction(shipment)
-		if doc and rate and tracking_data:
-			self.assertEqual(doc.service_provider, rate.get('service_provider'))
-			self.assertEqual(doc.shipment_amount, rate.get('actual_price'))
-			self.assertEqual(doc.carrier, rate.get('carrier'))
-			self.assertEqual(doc.tracking_status, tracking_data.get('tracking_status'))
-			self.assertEqual(doc.tracking_url, tracking_data.get('tracking_url'))
-
-		
-
-def make_shipment_transaction(shipment):
-	shipment_parcel = convert_shipmet_parcel(shipment.shipment_parcel)
-	shipment_rates = fetch_shipping_rates(shipment.pickup_from_type, shipment.delivery_to_type, 
-		shipment.pickup_address_name, shipment.delivery_address_name,
-		shipment_parcel, shipment.description_of_content,
-		shipment.pickup_date, shipment.value_of_goods,
-		pickup_contact_name=shipment.pickup_contact_name,
-		delivery_contact_name=shipment.delivery_contact_name
-	)
-	if len(shipment_rates) > 0:
-		# We are taking the first shipment rate
-		rate = shipment_rates[0]
-		new_shipment = create_shipment(
-			shipment=shipment.name,
-			pickup_from_type=shipment.pickup_from_type,
-			delivery_to_type=shipment.delivery_to_type,
-			pickup_address_name=shipment.pickup_address_name,
-			delivery_address_name=shipment.delivery_address_name,
-			shipment_parcel=shipment_parcel,
-			description_of_content=shipment.description_of_content,
-			pickup_date=shipment.pickup_date,
-			pickup_contact_name=shipment.pickup_contact_name,
-			delivery_contact_name=shipment.delivery_contact_name,
-			value_of_goods=shipment.value_of_goods,
-			service_data=json.dumps(rate),
-			shipment_notific_email=None,
-			tracking_notific_email=None,
-			delivery_notes=None
-		)
-		service_provider = rate.get('service_provider')
-		shipment_id = new_shipment.get('shipment_id')
-		tracking_data = update_tracking(
-			shipment.name,
-			service_provider,
-			shipment_id,
-			delivery_notes=None
-		)
-		doc = frappe.get_doc('Shipment', shipment.name)
-		return doc, rate, tracking_data
-	return None, None, None
+		shipment.submit()
+		second_shipment = make_shipment(delivery_note.name)
+		self.assertEqual(second_shipment.value_of_goods, delivery_note.grand_total)
+		self.assertEqual(second_shipment.grand_total, delivery_note.grand_total)
+		self.assertEqual(len(second_shipment.shipment_delivery_note), 1)
+		self.assertEqual(second_shipment.shipment_delivery_note[0].delivery_note, delivery_note.name)
 
 def create_test_delivery_note():
 	company = get_shipment_company()
@@ -316,18 +246,3 @@
 	except:
 		frappe.throw('An error occurred.')
 	return item
-
-
-def convert_shipmet_parcel(shipmet_parcel):
-	data = []
-	for parcel in shipmet_parcel:
-		data.append(
-			{
-				"length": parcel.length,
-				"width": parcel.width,
-				"height": parcel.height,
-				"weight": parcel.weight,
-				"count": parcel.count
-			}
-		)
-	return json.dumps(data)
