refactor: `packing_slip.js`
diff --git a/erpnext/stock/doctype/packing_slip/packing_slip.js b/erpnext/stock/doctype/packing_slip/packing_slip.js
index 40d4685..f9cd2bf 100644
--- a/erpnext/stock/doctype/packing_slip/packing_slip.js
+++ b/erpnext/stock/doctype/packing_slip/packing_slip.js
@@ -1,113 +1,122 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
+// Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
 
-cur_frm.fields_dict['delivery_note'].get_query = function(doc, cdt, cdn) {
-	return{
-		filters:{ 'docstatus': 0}
-	}
-}
+frappe.ui.form.on("Packing Slip", {
+    setup: (frm) => {
+        frm.set_query('delivery_note', () => {
+            return {
+                filters: {
+                    docstatus: 0,
+                }
+            }
+        });
 
+        frm.set_query('item_code', 'items', (doc, cdt, cdn) => {
+            if (!doc.delivery_note) {
+                frappe.throw(__("Please select a Delivery Note"));
+            } else {
+                let d = locals[cdt][cdn];
+                return {
+                    query: 'erpnext.stock.doctype.packing_slip.packing_slip.item_details',
+                    filters: {
+                        delivery_note: doc.delivery_note,
+                    }
+                }
+            }
+        });
+	},
 
-cur_frm.fields_dict['items'].grid.get_field('item_code').get_query = function(doc, cdt, cdn) {
-	if(!doc.delivery_note) {
-		frappe.throw(__("Please select a Delivery Note"));
-	} else {
-		return {
-			query: "erpnext.stock.doctype.packing_slip.packing_slip.item_details",
-			filters:{ 'delivery_note': doc.delivery_note}
+	refresh: (frm) => {
+		frm.toggle_display("misc_details", frm.doc.amended_from);
+	},
+
+	validate: (frm) => {
+		frm.trigger("validate_case_nos");
+		frm.trigger("validate_calculate_item_details");
+	},
+
+	onload_post_render: (frm) => {
+		if(frm.doc.delivery_note && frm.doc.__islocal) {
+			frm.trigger("get_items");
 		}
-	}
-}
+	},
 
-cur_frm.cscript.onload_post_render = function(doc, cdt, cdn) {
-	if(doc.delivery_note && doc.__islocal) {
-		cur_frm.cscript.get_items(doc, cdt, cdn);
-	}
-}
+	get_items: (frm) => {
+		return frm.call({
+			doc: frm.doc,
+			method: "get_items",
+			callback: function(r) {
+				if(!r.exc) {
+					frm.refresh();
+				}
+			}
+		});
+	},
 
-cur_frm.cscript.get_items = function(doc, cdt, cdn) {
-	return this.frm.call({
-		doc: this.frm.doc,
-		method: "get_items",
-		callback: function(r) {
-			if(!r.exc) cur_frm.refresh();
+	// 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;
 		}
-	});
-}
+	},
 
-cur_frm.cscript.refresh = function(doc, dt, dn) {
-	cur_frm.toggle_display("misc_details", doc.amended_from);
-}
+	validate_calculate_item_details: (frm) => {
+		doc = locals[frm.doc.doctype][frm.doc.name];
+		var ps_detail = doc.items || [];
 
-cur_frm.cscript.validate = function(doc, cdt, cdn) {
-	cur_frm.cscript.validate_case_nos(doc);
-	cur_frm.cscript.validate_calculate_item_details(doc);
-}
+		frm.events.validate_duplicate_items(doc, ps_detail);
+		frm.events.calc_net_total_pkg(doc, ps_detail);
+	},
 
-// To Case No. cannot be less than From Case No.
-cur_frm.cscript.validate_case_nos = function(doc) {
-	doc = locals[doc.doctype][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;
-	}
-}
+	// Do not allow duplicate items i.e. items with same item_code
+	// Also check for 0 qty
+	validate_duplicate_items: (doc, ps_detail) => {
+		for(var i=0; i<ps_detail.length; i++) {
+			for(var j=0; j<ps_detail.length; j++) {
+				if(i!=j && ps_detail[i].item_code && ps_detail[i].item_code == ps_detail[j].item_code) {
+					frappe.msgprint(__("You have entered duplicate items. Please rectify and try again."));
+					frappe.validated = false;
+					return;
+				}
+			}
 
-
-cur_frm.cscript.validate_calculate_item_details = function(doc) {
-	doc = locals[doc.doctype][doc.name];
-	var ps_detail = doc.items || [];
-
-	cur_frm.cscript.validate_duplicate_items(doc, ps_detail);
-	cur_frm.cscript.calc_net_total_pkg(doc, ps_detail);
-}
-
-
-// Do not allow duplicate items i.e. items with same item_code
-// Also check for 0 qty
-cur_frm.cscript.validate_duplicate_items = function(doc, ps_detail) {
-	for(var i=0; i<ps_detail.length; i++) {
-		for(var j=0; j<ps_detail.length; j++) {
-			if(i!=j && ps_detail[i].item_code && ps_detail[i].item_code==ps_detail[j].item_code) {
-				frappe.msgprint(__("You have entered duplicate items. Please rectify and try again."));
+			if(flt(ps_detail[i].qty) <= 0) {
+				frappe.msgprint(__("Invalid quantity specified for item {0}. Quantity should be greater than 0.", [ps_detail[i].item_code]));
 				frappe.validated = false;
-				return;
 			}
 		}
-		if(flt(ps_detail[i].qty)<=0) {
-			frappe.msgprint(__("Invalid quantity specified for item {0}. Quantity should be greater than 0.", [ps_detail[i].item_code]));
-			frappe.validated = false;
+	},
+
+	// Calculate Net Weight of Package
+	calc_net_total_pkg: (doc, ps_detail) => {
+		var net_weight_pkg = 0;
+		doc.net_weight_uom = (ps_detail && ps_detail.length) ? ps_detail[0].weight_uom : '';
+		doc.gross_weight_uom = doc.net_weight_uom;
+
+		for(var i=0; i<ps_detail.length; i++) {
+			var item = ps_detail[i];
+			if(item.weight_uom != 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);
 		}
-	}
-}
 
+		doc.net_weight_pkg = roundNumber(net_weight_pkg, 2);
 
-// Calculate Net Weight of Package
-cur_frm.cscript.calc_net_total_pkg = function(doc, ps_detail) {
-	var net_weight_pkg = 0;
-	doc.net_weight_uom = (ps_detail && ps_detail.length) ? ps_detail[0].weight_uom : '';
-	doc.gross_weight_uom = doc.net_weight_uom;
-
-	for(var i=0; i<ps_detail.length; i++) {
-		var item = ps_detail[i];
-		if(item.weight_uom != 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;
+		if(!flt(doc.gross_weight_pkg)) {
+			doc.gross_weight_pkg = doc.net_weight_pkg;
 		}
-		net_weight_pkg += flt(item.net_weight) * flt(item.qty);
-	}
 
-	doc.net_weight_pkg = roundNumber(net_weight_pkg, 2);
-	if(!flt(doc.gross_weight_pkg)) {
-		doc.gross_weight_pkg = doc.net_weight_pkg;
+		refresh_many(['net_weight_pkg', 'net_weight_uom', 'gross_weight_uom', 'gross_weight_pkg']);
 	}
-	refresh_many(['net_weight_pkg', 'net_weight_uom', 'gross_weight_uom', 'gross_weight_pkg']);
-}
-
-// TODO: validate gross weight field
+});