diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 266f2d1..772f1d5 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -594,7 +594,7 @@
 	if(d && d.has_batch_no && !d.batch_no) {
 		// show_modal_with_oldest_batch(d, d.item_code, d.qty, get_warehouse(d), 1);
 		erpnext.stock.show_batch_serial_modal(frm, d, d.item_code, d.qty, get_warehouse(d), 1);
-	} else if(d && d.has_serial_no && !d.serial_no) {
+	} else if(d && d.has_serial_no && !d.serial_no && frm.doc.purpose !== 'Material Receipt') {
 		erpnext.stock.show_batch_serial_modal(frm, d, d.item_code, d.qty, get_warehouse(d), 0);
 	}
 }
@@ -624,7 +624,7 @@
 						label: __('Select Batch'), in_list_view:1, get_query: function(doc) {
 							return {filters: {item: item_code }};
 						}},
-					{fieldtype:'Float', read_only: 1, fieldname:'available_qty',
+					{fieldtype:'Float', read_only:1, fieldname:'available_qty',
 						label: __('Available'), in_list_view:1, 'default': 0},
 					{fieldtype:'Float', fieldname:'selected_qty',
 						label: __('Qty'), in_list_view:1, 'default': 0},
@@ -757,12 +757,12 @@
 
 erpnext.stock.bind_batch_serial_dialog_qty = (dialog) => {
 	let serial_no_link = dialog.fields_dict.serial_no_select;
-	let serial_no_list = dialog.fields_dict.serial_no;
+	let serial_no_list_field = dialog.fields_dict.serial_no;
 	let batches_field = dialog.fields_dict.batches;
 
 	let warehouse_field = dialog.fields_dict.warehouse;
 	let qty_field = dialog.fields_dict.qty;
-	let item_code = dialog.fields_dict.item_code.get_value();
+	let item_code = dialog.get_value('item_code');
 
 	let update_quantity = (batch) => {
 		if(batch) {
@@ -772,7 +772,7 @@
 			});
 			qty_field.set_input(total_qty);
 		} else {
-			serial_numbers = serial_no_list.get_value().replace(/\n/g, ' ').match(/\S+/g) || [];
+			serial_numbers = serial_no_list_field.get_value().replace(/\n/g, ' ').match(/\S+/g) || [];
 			qty_field.set_input(serial_numbers.length);
 		}
 	}
@@ -799,20 +799,20 @@
 	}
 
 	if(serial_no_link) {
+		let serial_list = [];
 		serial_no_link.$input.on('awesomplete-selectcomplete', function(e) {
 			if(serial_no_link.get_value().length > 0) {
 				let new_no = serial_no_link.get_value();
-				let list_value = serial_no_list.get_value();
+				let list_value = serial_no_list_field.get_value();
 				let new_line = '\n';
-				let list = [];
-				if(!serial_no_list.get_value()) {
+				if(!serial_no_list_field.get_value()) {
 					new_line = '';
 				} else {
-					list = list_value.replace(/\s+/g, ' ').split(' ');
+					serial_list = list_value.replace(/\s+/g, ' ').split(' ');
 				}
-				if(!list.includes(new_no)) {
+				if(!serial_list.includes(new_no)) {
 					serial_no_link.set_new_description('');
-					serial_no_list.set_value(list_value + new_line + new_no);
+					serial_no_list_field.set_value(list_value + new_line + new_no);
 					update_quantity(0);
 				} else {
 					serial_no_link.set_new_description(new_no + ' is already selected.');
@@ -821,22 +821,27 @@
 			serial_no_link.set_input('');
 		});
 
-		serial_no_list.$input.on('input', function() {
+		serial_no_list_field.$input.on('input', function() {
+			serial_list = $(this).get_value().replace(/\s+/g, ' ').split(' ');
 			update_quantity(0);
 		});
 	}
 
 	if(batches_field) {
+		batches_field.grid.add_new_row(null, null, true);
 		batches_field.grid.wrapper.on('change', 'input[data-fieldname="batch_no"]', function(e) {
 			let $row = $(this).closest('.grid-row');
 			let name = $row.attr('data-name');
 			let row = batches_field.grid.grid_rows_by_docname[name];
-			row.on_grid_fields[2].set_value('0');
-			row.on_grid_fields[2].$input.trigger('change');
-			if(warehouse_field.get_value().length > 0) {
-				set_available_qty(item_code, row.doc.batch_no, warehouse_field.get_value(), row.on_grid_fields[1]);
-			} else {
-				frappe.throw(__("Please select a warehouse to get available quantities"));
+			if(row.doc.batch_no) {
+				row.on_grid_fields[2].set_value('0');
+				row.on_grid_fields[2].$input.trigger('change');
+				if(warehouse_field.get_value().length > 0) {
+					set_available_qty(item_code, row.doc.batch_no, warehouse_field.get_value(), row.on_grid_fields[1]);
+				} else {
+					frappe.throw(__("Please select a warehouse to get available quantities"));
+				}
+
 			}
 		});
 
@@ -847,6 +852,7 @@
 		warehouse_field.$input.on('change', function() {
 			batches_field.grid.df.data = [];
 			batches_field.grid.refresh();
+			batches_field.grid.add_new_row(null, null, true);
 		});
 	}
 }
\ No newline at end of file
