diff --git a/erpnext/stock/doctype/packing_slip/packing_slip.js b/erpnext/stock/doctype/packing_slip/packing_slip.js
index 85a611f..ae3d9ba 100644
--- a/erpnext/stock/doctype/packing_slip/packing_slip.js
+++ b/erpnext/stock/doctype/packing_slip/packing_slip.js
@@ -28,63 +28,5 @@
 
 	refresh: (frm) => {
 		frm.toggle_display("misc_details", frm.doc.amended_from);
-	},
-
-	validate: (frm) => {
-		frm.trigger("validate_case_nos");
-		frm.trigger("validate_calculate_item_details");
-	},
-
-	// To Case No. cannot be less than From Case No.
-	validate_case_nos: (frm) => {
-		doc = locals[frm.doc.doctype][frm.doc.name];
-
-		if(cint(doc.from_case_no) == 0) {
-			frappe.msgprint(__("The 'From Package No.' field must neither be empty nor it's value less than 1."));
-			frappe.validated = false;
-		} else if(!cint(doc.to_case_no)) {
-			doc.to_case_no = doc.from_case_no;
-			refresh_field('to_case_no');
-		} else if(cint(doc.to_case_no) < cint(doc.from_case_no)) {
-			frappe.msgprint(__("'To Case No.' cannot be less than 'From Case No.'"));
-			frappe.validated = false;
-		}
-	},
-
-	validate_calculate_item_details: (frm) => {
-		frm.trigger("validate_items_qty");
-		frm.trigger("calc_net_total_pkg");
-	},
-
-	validate_items_qty: (frm) => {
-		frm.doc.items.forEach(item => {
-			if (item.qty <= 0) {
-				frappe.msgprint(__("Invalid quantity specified for item {0}. Quantity should be greater than 0.", [item.item_code]));
-				frappe.validated = false;
-			}
-		});
-	},
-
-	calc_net_total_pkg: (frm) => {
-		var net_weight_pkg = 0;
-		var items = frm.doc.items || [];
-		frm.doc.net_weight_uom = (items && items.length) ? items[0].weight_uom : '';
-		frm.doc.gross_weight_uom = frm.doc.net_weight_uom;
-
-		items.forEach(item => {
-			if(item.weight_uom != frm.doc.net_weight_uom) {
-				frappe.msgprint(__("Different UOM for items will lead to incorrect (Total) Net Weight value. Make sure that Net Weight of each item is in the same UOM."));
-				frappe.validated = false;
-			}
-			net_weight_pkg += flt(item.net_weight) * flt(item.qty);
-		});
-
-		frm.doc.net_weight_pkg = roundNumber(net_weight_pkg, 2);
-
-		if(!flt(frm.doc.gross_weight_pkg)) {
-			frm.doc.gross_weight_pkg = frm.doc.net_weight_pkg;
-		}
-
-		refresh_many(['net_weight_pkg', 'net_weight_uom', 'gross_weight_uom', 'gross_weight_pkg']);
 	}
 });
diff --git a/erpnext/stock/doctype/packing_slip/packing_slip.py b/erpnext/stock/doctype/packing_slip/packing_slip.py
index c5b928b..6ea5938 100644
--- a/erpnext/stock/doctype/packing_slip/packing_slip.py
+++ b/erpnext/stock/doctype/packing_slip/packing_slip.py
@@ -4,7 +4,7 @@
 
 import frappe
 from frappe import _
-from frappe.utils import cint
+from frappe.utils import cint, flt
 
 from erpnext.controllers.status_updater import StatusUpdater
 
@@ -44,6 +44,7 @@
 		validate_uom_is_integer(self, "weight_uom", "net_weight")
 
 		self.set_missing_values()
+		self.calculate_net_total_pkg()
 
 	def on_submit(self):
 		self.update_prevdoc_status()
@@ -62,9 +63,13 @@
 	def validate_case_nos(self):
 		"""Validate if case nos overlap. If they do, recommend next case no."""
 
-		if not self.to_case_no:
+		if cint(self.from_case_no) <= 0:
+			frappe.throw(
+				_("The 'From Package No.' field must neither be empty nor it's value less than 1.")
+			)
+		elif not self.to_case_no:
 			self.to_case_no = self.from_case_no
-		elif cint(self.from_case_no) > cint(self.to_case_no):
+		elif cint(self.to_case_no) < cint(self.from_case_no):
 			frappe.throw(_("'To Package No.' cannot be less than 'From Package No.'"))
 		else:
 			ps = frappe.qb.DocType("Packing Slip")
@@ -93,9 +98,14 @@
 
 	def validate_items(self):
 		for item in self.items:
+			if item.qty <= 0:
+				frappe.throw(_("Row {0}: Qty must be greater than 0.").format(item.idx))
+
 			if not item.dn_detail and not item.pi_detail:
 				frappe.throw(
-					_("Row {0}: Either Delivery Note Item or Packed Item reference is mandatory").format(item.idx)
+					_("Row {0}: Either Delivery Note Item or Packed Item reference is mandatory.").format(
+						item.idx
+					)
 				)
 
 			remaining_qty = frappe.db.get_value(
@@ -150,6 +160,26 @@
 			+ 1
 		)
 
+	def calculate_net_total_pkg(self):
+		self.net_weight_uom = self.items[0].weight_uom if self.items else None
+		self.gross_weight_uom = self.net_weight_uom
+
+		net_weight_pkg = 0
+		for item in self.items:
+			if item.weight_uom != self.net_weight_uom:
+				frappe.throw(
+					_(
+						"Different UOM for items will lead to incorrect (Total) Net Weight value. Make sure that Net Weight of each item is in the same UOM."
+					)
+				)
+
+			net_weight_pkg += flt(item.net_weight) * flt(item.qty)
+
+		self.net_weight_pkg = round(net_weight_pkg, 2)
+
+		if not flt(self.gross_weight_pkg):
+			self.gross_weight_pkg = self.net_weight_pkg
+
 
 @frappe.whitelist()
 @frappe.validate_and_sanitize_search_inputs
