fix: Usability fixes to Serial No and batch selector (#18071)

* fix: Usability fixes to Serial No and batch selector

* fix: Codacy

* Update sales_common.js
diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js
index 7da7478..045a046 100644
--- a/erpnext/public/js/utils/serial_no_batch_selector.js
+++ b/erpnext/public/js/utils/serial_no_batch_selector.js
@@ -44,6 +44,13 @@
 				label: __(me.warehouse_details.type),
 				default: me.warehouse_details.name,
 				onchange: function(e) {
+
+					if(me.has_batch) {
+						fields = fields.concat(me.get_batch_fields());
+					} else {
+						fields = fields.concat(me.get_serial_no_fields());
+					}
+
 					me.warehouse_details.name = this.get_value();
 					var batches = this.layout.fields_dict.batches;
 					if(batches) {
@@ -263,6 +270,15 @@
 
 	get_batch_fields: function() {
 		var me = this;
+
+		let filters = {
+			item_code: me.item_code
+		}
+
+		if (me.warehouse || me.warehouse_details.name) {
+			filters['warehouse'] = me.warehouse || me.warehouse_details.name;
+		}
+
 		return [
 			{fieldtype:'Section Break', label: __('Batches')},
 			{fieldname: 'batches', fieldtype: 'Table', label: __('Batch Entries'),
@@ -276,8 +292,8 @@
 						'in_list_view': 1,
 						get_query: function () {
 							return {
-								filters: { item: me.item_code },
-								query: 'erpnext.controllers.queries.get_batch_numbers'
+								filters: filters,
+								query: 'erpnext.controllers.queries.get_batch_no'
 							};
 						},
 						change: function () {
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index 23dcaa1..9bae58b 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -229,6 +229,9 @@
 					},
 					callback:function(r){
 						if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
+
+							if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
+
 							me.set_batch_number(cdt, cdn);
 							me.batch_no(doc, cdt, cdn);
 						}
@@ -372,13 +375,18 @@
 	    this._super(doc, cdt, cdn, dont_fetch_price_list_rate);
 		if(frappe.meta.get_docfield(cdt, "stock_qty", cdn) &&
 			in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
-			this.set_batch_number(cdt, cdn);
-		}
+				if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
+				this.set_batch_number(cdt, cdn);
+			}
 	},
 
 	qty: function(doc, cdt, cdn) {
 		this._super(doc, cdt, cdn);
-		this.set_batch_number(cdt, cdn);
+
+		if(in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
+			if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
+			this.set_batch_number(cdt, cdn);
+		}
 	},
 
 	/* Determine appropriate batch number and set it in the form.