[fix] [minor] stock balance report for serialized item
diff --git a/public/js/stock_grid_report.js b/public/js/stock_grid_report.js
index 495ea43..e87228f 100644
--- a/public/js/stock_grid_report.js
+++ b/public/js/stock_grid_report.js
@@ -25,7 +25,11 @@
 					add_qty = 0;
 				}
 			}
-			var value_diff = (rate * add_qty);
+			if(sl.serial_no) {
+				var value_diff = this.get_serialized_value_diff(sl);
+			} else {
+				var value_diff = (rate * add_qty);
+			}
 		
 			if(add_qty)
 				wh.fifo_stack.push([add_qty, sl.incoming_rate, sl.posting_date]);				
@@ -108,15 +112,8 @@
 	get_serialized_buying_rates: function() {
 		var serialized_buying_rates = {};
 		
-		$.each(wn.report_dump.data["Stock Ledger Entry"], function(i, sle) {
-			if(sle.qty > 0 && sle.serial_no) {
-				$.each(sle.serial_no.trim().split("\n"), function(i, sr) {
-					if(sr && sle.incoming_rate !== undefined 
-							&& !serialized_buying_rates[sr.trim().toLowerCase()]) {
-						serialized_buying_rates[sr.trim().toLowerCase()] = flt(sle.incoming_rate);
-					}
-				});
-			}
+		$.each(wn.report_dump.data["Serial No"], function(i, sn) {
+			serialized_buying_rates[sn.name.toLowerCase()] = flt(sn.incoming_rate);
 		});
 		
 		return serialized_buying_rates;
diff --git a/public/js/transaction.js b/public/js/transaction.js
index 664bbe2..29fe32b 100644
--- a/public/js/transaction.js
+++ b/public/js/transaction.js
@@ -502,13 +502,14 @@
 		var company_currency = this.get_company_currency();
 		
 		if(!this.frm.doc.conversion_rate) {
-			wn.throw(wn._('%(conversion_rate_label)s is mandatory. Maybe Currency Exchange \
-				record is not created for %(from_currency)s to %(to_currency)s'), 
+			wn.throw(repl('%(conversion_rate_label)s' + 
+				wn._(' is mandatory. Maybe Currency Exchange record is not created for ') + 
+				'%(from_currency)s' + wn._(" to ") + '%(to_currency)s', 
 				{
 					"conversion_rate_label": conversion_rate_label,
-					"from_currency": self.doc.currency,
+					"from_currency": this.frm.doc.currency,
 					"to_currency": company_currency
-				});
+				}));
 		}
 	},
 	
diff --git a/startup/report_data_map.py b/startup/report_data_map.py
index 54453f6..12ceae4 100644
--- a/startup/report_data_map.py
+++ b/startup/report_data_map.py
@@ -88,6 +88,11 @@
 		},
 		"force_index": "posting_sort_index"
 	},
+	"Serial No": {
+		"columns": ["name", "purchase_rate as incoming_rate"],
+		"conditions": ["docstatus < 2"],
+		"order_by": "name"
+	},
 	"Stock Entry": {
 		"columns": ["name", "purpose"],
 		"conditions": ["docstatus=1"],
diff --git a/stock/page/stock_balance/stock_balance.js b/stock/page/stock_balance/stock_balance.js
index b45a610..7db3b6c 100644
--- a/stock/page/stock_balance/stock_balance.js
+++ b/stock/page/stock_balance/stock_balance.js
@@ -22,7 +22,7 @@
 		this._super(wrapper, {
 			title: "Stock Balance",
 			doctypes: ["Item", "Item Group", "Warehouse", "Stock Ledger Entry", "Brand",
-				"Stock Entry", "Project"],
+				"Stock Entry", "Project", "Serial No"],
 		});
 	},
 	setup_columns: function() {