diff --git a/erpnext/stock/doctype/batch/batch.py b/erpnext/stock/doctype/batch/batch.py
index 4a0e89a..6428835 100644
--- a/erpnext/stock/doctype/batch/batch.py
+++ b/erpnext/stock/doctype/batch/batch.py
@@ -123,4 +123,10 @@
 		frappe.msgprint(_('Please select a Batch for Item {0}. Unable to find a single batch that fulfills this requirement').format(frappe.bold(item_code)))
 		if throw: raise UnableToSelectBatchError
 
+	# oldest_expiry_date = min([batch.expiry_date for batch in batches])
+
+	# for batch in batches:
+	# 	if batch.expiry_date == oldest_expiry_date:
+	# 		batch_no = batch.batch_no
+
 	return batch_no
\ No newline at end of file
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 83c6139..e43325f 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -43,6 +43,7 @@
 		});
 	},
 	refresh: function(frm) {
+		erpnext.select_batch_and_serial_no(frm);
 		if(!frm.doc.docstatus) {
 			frm.add_custom_button(__('Make Material Request'), function() {
 				frappe.model.with_doctype('Material Request', function() {
@@ -76,6 +77,10 @@
 		frm.fields_dict.items.grid.refresh();
 		frm.cscript.toggle_related_fields(frm.doc);
 	},
+	before_save: function(frm) {
+		console.log("before_save");
+		erpnext.select_batch_and_serial_no(frm);
+	},
 	company: function(frm) {
 		if(frm.doc.company) {
 			var company_doc = frappe.get_doc(":Company", frm.doc.company);
@@ -544,33 +549,54 @@
 });
 
 erpnext.select_batch_and_serial_no = (frm) => {
-	frm.items.forEach(function(d) {
-		if(d.has_batch_no && !d.batch_no) {
-			show_modal(item_code, qty);
-		}
-	});
 
 	let show_modal = (item_code, qty) => {
 		let d = new frappe.ui.Dialog({
 			fields: [
 				{fieldname: 'item_code', read_only: 1, fieldtype:'Link', options: 'Item',
 					label: __('Item Code'), 'default': item_code},
+				{fieldtype:'Column Break'},
 				{fieldname: 'qty', fieldtype:'Float', label: __('Qty'), 'default': qty},
+				{fieldtype:'Section Break'},
 				{fieldname: 'batches', fieldtype: 'Table',
 					fields: [
-						{fieldtype:'Link', fieldname:'batch_no', options: 'Batch', reqd: 1,
+						{fieldtype:'Link', fieldname:'batch_no', options: 'Batch',
 							label: __('Select Batch'), in_list_view:1, get_query: function(doc) {
 								return {filters: {item: item_code }};
 							}},
-						{fieldtype:'Float', fieldname:'available_qty', reqd: 1,
+						{fieldtype:'Float', fieldname:'available_qty',
 							label: __('Available'), in_list_view:1},
-						{fieldtype:'Float', fieldname:'selected_qty', reqd: 1,
+						{fieldtype:'Float', fieldname:'selected_qty',
 							label: __('Qty'), in_list_view:1},
 					],
+					get_data: function() {
+						console.log("in get data");
+						return [
+							{
+
+							},
+							{
+
+							},
+							{
+
+							}
+						]
+					}
 				}
 			]
 		});
+
+		d.show();
 	}
 
+	show_modal("_Test FG Item", 1);
+
+	// frm.doc.items.forEach(function(d) {
+	// 	if(d.has_batch_no && !d.batch_no) {
+	// 		show_modal(d.item_code, d.qty);
+	// 	}
+	// });
+
 
 }
\ No newline at end of file
