diff --git a/erpnext/buying/page/purchase_analytics/purchase_analytics.js b/erpnext/buying/page/purchase_analytics/purchase_analytics.js
index f695a49..2e29d01 100644
--- a/erpnext/buying/page/purchase_analytics/purchase_analytics.js
+++ b/erpnext/buying/page/purchase_analytics/purchase_analytics.js
@@ -1,18 +1,18 @@
 // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.pages['purchase-analytics'].onload = function(wrapper) { 
+frappe.pages['purchase-analytics'].onload = function(wrapper) {
 	frappe.ui.make_app_page({
 		parent: wrapper,
 		title: __('Purchase Analytics'),
 		single_column: true
-	});					
-	
+	});
+
 	new erpnext.PurchaseAnalytics(wrapper);
-	
+
 
 	wrapper.appframe.add_module_icon("Buying")
-	
+
 }
 
 erpnext.PurchaseAnalytics = frappe.views.TreeGridReport.extend({
@@ -22,19 +22,19 @@
 			page: wrapper,
 			parent: $(wrapper).find('.layout-main'),
 			appframe: wrapper.appframe,
-			doctypes: ["Item", "Item Group", "Supplier", "Supplier Type", "Company", "Fiscal Year", 
-				"Purchase Invoice", "Purchase Invoice Item", 
-				"Purchase Order", "Purchase Order Item[Purchase Analytics]", 
+			doctypes: ["Item", "Item Group", "Supplier", "Supplier Type", "Company", "Fiscal Year",
+				"Purchase Invoice", "Purchase Invoice Item",
+				"Purchase Order", "Purchase Order Item[Purchase Analytics]",
 				"Purchase Receipt", "Purchase Receipt Item[Purchase Analytics]"],
 			tree_grid: { show: true }
 		});
-		
+
 		this.tree_grids = {
 			"Supplier Type": {
 				label: __("Supplier Type / Supplier"),
-				show: true, 
+				show: true,
 				item_key: "supplier",
-				parent_field: "parent_supplier_type", 
+				parent_field: "parent_supplier_type",
 				formatter: function(item) {
 					// return repl('<a href="#Report/stock-invoices/customer=%(enc_value)s">%(value)s</a>', {
 					// 		value: item.name,
@@ -45,29 +45,29 @@
 			},
 			"Supplier": {
 				label: __("Supplier"),
-				show: false, 
+				show: false,
 				item_key: "supplier",
 				formatter: function(item) {
 					return item.name;
 				}
-			},	
+			},
 			"Item Group": {
 				label: "Item",
-				show: true, 
-				parent_field: "parent_item_group", 
+				show: true,
+				parent_field: "parent_item_group",
 				item_key: "item_code",
 				formatter: function(item) {
 					return item.name;
 				}
-			},	
+			},
 			"Item": {
 				label: "Item",
-				show: false, 
+				show: false,
 				item_key: "item_code",
 				formatter: function(item) {
 					return item.name;
 				}
-			},			
+			},
 		}
 	},
 	setup_columns: function() {
@@ -82,24 +82,24 @@
 				formatter: this.currency_formatter}
 		];
 
-		this.make_date_range_columns();		
+		this.make_date_range_columns();
 		this.columns = std_columns.concat(this.columns);
 	},
 	filters: [
-		{fieldtype:"Select", label: __("Tree Type"), options:["Supplier Type", "Supplier", 
+		{fieldtype:"Select", label: __("Tree Type"), options:["Supplier Type", "Supplier",
 			"Item Group", "Item"],
 			filter: function(val, item, opts, me) {
 				return me.apply_zero_filter(val, item, opts, me);
 			}},
-		{fieldtype:"Select", label: __("Based On"), options:["Purchase Invoice", 
+		{fieldtype:"Select", label: __("Based On"), options:["Purchase Invoice",
 			"Purchase Order", "Purchase Receipt"]},
 		{fieldtype:"Select", label: __("Value or Qty"), options:["Value", "Quantity"]},
-		{fieldtype:"Select", label: __("Company"), link:"Company", 
+		{fieldtype:"Select", label: __("Company"), link:"Company",
 			default_value: "Select Company..."},
 		{fieldtype:"Date", label: __("From Date")},
 		{fieldtype:"Label", label: __("To")},
 		{fieldtype:"Date", label: __("To Date")},
-		{fieldtype:"Select", label: __("Range"), 
+		{fieldtype:"Select", label: __("Range"),
 			options:["Daily", "Weekly", "Monthly", "Quarterly", "Yearly"]},
 		{fieldtype:"Button", label: __("Refresh"), icon:"icon-refresh icon-white"},
 		{fieldtype:"Button", label: __("Reset Filters"), icon: "icon-filter"}
@@ -107,10 +107,10 @@
 	setup_filters: function() {
 		var me = this;
 		this._super();
-		
+
 		this.trigger_refresh_on_change(["value_or_qty", "tree_type", "based_on", "company"]);
 
-		this.show_zero_check()		
+		this.show_zero_check()
 		this.setup_plot_check();
 	},
 	init_filter_values: function() {
@@ -124,34 +124,34 @@
 			// Add 'All Supplier Types' Supplier Type
 			// (Supplier / Item are not mandatory!!)
 			// Set parent supplier type for tree view
-			
+
 			$.each(frappe.report_dump.data["Supplier Type"], function(i, v) {
 				v['parent_supplier_type'] = "All Supplier Types"
 			})
-			
+
 			frappe.report_dump.data["Supplier Type"] = [{
-				name: __("All Supplier Types"), 
+				name: __("All Supplier Types"),
 				id: "All Supplier Types",
 			}].concat(frappe.report_dump.data["Supplier Type"]);
-			
+
 			frappe.report_dump.data["Supplier"].push({
-				name: __("Not Set"), 
+				name: __("Not Set"),
 				parent_supplier_type: "All Supplier Types",
 				id: "Not Set",
 			});
 
 			frappe.report_dump.data["Item"].push({
-				name: __("Not Set"), 
+				name: __("Not Set"),
 				parent_item_group: "All Item Groups",
 				id: "Not Set",
 			});
 		}
-		
+
 		if (!this.tl || !this.tl[this.based_on]) {
 			this.make_transaction_list(this.based_on, this.based_on + " Item");
 		}
-		
-		
+
+
 		if(!this.data || me.item_type != me.tree_type) {
 			if(me.tree_type=='Supplier') {
 				var items = frappe.report_dump.data["Supplier"];
@@ -177,20 +177,20 @@
 					me.parent_map[d.name] = d[me.tree_grid.parent_field];
 				}
 				me.reset_item_values(d);
-			});			
-			
+			});
+
 			this.set_indent();
-			
+
 		} else {
 			// otherwise, only reset values
 			$.each(this.data, function(i, d) {
 				me.reset_item_values(d);
 			});
 		}
-		
+
 		this.prepare_balances();
 		if(me.tree_grid.show) {
-			this.set_totals(false);			
+			this.set_totals(false);
 			this.update_groups();
 		} else {
 			this.set_totals(true);
@@ -201,14 +201,14 @@
 		var from_date = dateutil.str_to_obj(this.from_date);
 		var to_date = dateutil.str_to_obj(this.to_date);
 		var is_val = this.value_or_qty == 'Value';
-		
+
 		$.each(this.tl[this.based_on], function(i, tl) {
-			if (me.is_default('company') ? true : tl.company === me.company) { 
+			if (me.is_default('company') ? true : tl.company === me.company) {
 				var posting_date = dateutil.str_to_obj(tl.posting_date);
 				if (posting_date >= from_date && posting_date <= to_date) {
-					var item = me.item_by_name[tl[me.tree_grid.item_key]] || 
+					var item = me.item_by_name[tl[me.tree_grid.item_key]] ||
 						me.item_by_name['Not Set'];
-					item[me.column_map[tl.posting_date].field] += (is_val ? tl.amount : tl.qty);
+					item[me.column_map[tl.posting_date].field] += (is_val ? tl.base_amount : tl.qty);
 				}
 			}
 		});
@@ -220,10 +220,10 @@
 			var parent = me.parent_map[item.name];
 			while(parent) {
 				parent_group = me.item_by_name[parent];
-				
+
 				$.each(me.columns, function(c, col) {
 					if (col.formatter == me.currency_formatter) {
-						parent_group[col.field] = 
+						parent_group[col.field] =
 							flt(parent_group[col.field])
 							+ flt(item[col.field]);
 					}
@@ -235,10 +235,10 @@
 	set_totals: function(sort) {
 		var me = this;
 		var checked = false;
-		$.each(this.data, function(i, d) { 
+		$.each(this.data, function(i, d) {
 			d.total = 0.0;
 			$.each(me.columns, function(i, col) {
-				if(col.formatter==me.currency_formatter && !col.hidden && col.field!="total") 
+				if(col.formatter==me.currency_formatter && !col.hidden && col.field!="total")
 					d.total += d[col.field];
 				if(d.checked) checked = true;
 			})
@@ -251,7 +251,7 @@
 		}
 	},
 	get_plot_points: function(item, col, idx) {
-		return [[dateutil.str_to_obj(col.id).getTime(), item[col.field]], 
+		return [[dateutil.str_to_obj(col.id).getTime(), item[col.field]],
 			[dateutil.user_to_obj(col.name).getTime(), item[col.field]]];
 	}
-});
\ No newline at end of file
+});
diff --git a/erpnext/selling/page/sales_analytics/sales_analytics.js b/erpnext/selling/page/sales_analytics/sales_analytics.js
index 25c8f80..2117370 100644
--- a/erpnext/selling/page/sales_analytics/sales_analytics.js
+++ b/erpnext/selling/page/sales_analytics/sales_analytics.js
@@ -1,17 +1,17 @@
 // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.pages['sales-analytics'].onload = function(wrapper) { 
+frappe.pages['sales-analytics'].onload = function(wrapper) {
 	frappe.ui.make_app_page({
 		parent: wrapper,
 		title: __('Sales Analytics'),
 		single_column: true
 	});
 	new erpnext.SalesAnalytics(wrapper);
-	
+
 
 	wrapper.appframe.add_module_icon("Selling")
-	
+
 }
 
 erpnext.SalesAnalytics = frappe.views.TreeGridReport.extend({
@@ -21,55 +21,55 @@
 			page: wrapper,
 			parent: $(wrapper).find('.layout-main'),
 			appframe: wrapper.appframe,
-			doctypes: ["Item", "Item Group", "Customer", "Customer Group", "Company", "Territory", 
-				"Fiscal Year", "Sales Invoice", "Sales Invoice Item", 
-				"Sales Order", "Sales Order Item[Sales Analytics]", 
+			doctypes: ["Item", "Item Group", "Customer", "Customer Group", "Company", "Territory",
+				"Fiscal Year", "Sales Invoice", "Sales Invoice Item",
+				"Sales Order", "Sales Order Item[Sales Analytics]",
 				"Delivery Note", "Delivery Note Item[Sales Analytics]"],
 			tree_grid: { show: true }
 		});
-		
+
 		this.tree_grids = {
 			"Customer Group": {
 				label: __("Customer Group / Customer"),
-				show: true, 
+				show: true,
 				item_key: "customer",
-				parent_field: "parent_customer_group", 
+				parent_field: "parent_customer_group",
 				formatter: function(item) { return item.name; }
 			},
 			"Customer": {
 				label: __("Customer"),
-				show: false, 
+				show: false,
 				item_key: "customer",
 				formatter: function(item) {
 					return item.name;
 				}
-			},	
+			},
 			"Item Group": {
 				label: __("Item"),
-				show: true, 
-				parent_field: "parent_item_group", 
+				show: true,
+				parent_field: "parent_item_group",
 				item_key: "item_code",
 				formatter: function(item) {
 					return item.name;
 				}
-			},	
+			},
 			"Item": {
 				label: __("Item"),
-				show: false, 
+				show: false,
 				item_key: "item_code",
 				formatter: function(item) {
 					return item.name;
 				}
-			},	
+			},
 			"Territory": {
 				label: __("Territory / Customer"),
-				show: true, 
+				show: true,
 				item_key: "customer",
-				parent_field: "parent_territory", 
+				parent_field: "parent_territory",
 				formatter: function(item) {
 					return item.name;
 				}
-			}			
+			}
 		}
 	},
 	setup_columns: function() {
@@ -84,24 +84,24 @@
 				formatter: this.currency_formatter}
 		];
 
-		this.make_date_range_columns();		
+		this.make_date_range_columns();
 		this.columns = std_columns.concat(this.columns);
 	},
 	filters: [
-		{fieldtype:"Select", fieldname: "tree_type", label: __("Tree Type"), options:["Customer Group", "Customer", 
+		{fieldtype:"Select", fieldname: "tree_type", label: __("Tree Type"), options:["Customer Group", "Customer",
 			"Item Group", "Item", "Territory"],
 			filter: function(val, item, opts, me) {
 				return me.apply_zero_filter(val, item, opts, me);
 			}},
-		{fieldtype:"Select", fieldname: "based_on", label: __("Based On"), options:["Sales Invoice", 
+		{fieldtype:"Select", fieldname: "based_on", label: __("Based On"), options:["Sales Invoice",
 			"Sales Order", "Delivery Note"]},
 		{fieldtype:"Select", fieldname: "value_or_qty", label:  __("Value or Qty"), options:["Value", "Quantity"]},
-		{fieldtype:"Select", fieldname: "company", label: __("Company"), link:"Company", 
+		{fieldtype:"Select", fieldname: "company", label: __("Company"), link:"Company",
 			default_value: "Select Company..."},
 		{fieldtype:"Date", fieldname: "from_date", label: __("From Date")},
 		{fieldtype:"Label", fieldname: "to", label: __("To")},
 		{fieldtype:"Date", fieldname: "to_date", label: __("To Date")},
-		{fieldtype:"Select", fieldname: "range", label: __("Range"), 
+		{fieldtype:"Select", fieldname: "range", label: __("Range"),
 			options:["Daily", "Weekly", "Monthly", "Quarterly", "Yearly"]},
 		{fieldtype:"Button", fieldname: "refresh", label: __("Refresh"), icon:"icon-refresh"},
 		{fieldtype:"Button", fieldname: "reset_filters", label: __("Reset Filters"), icon:"icon-filter"}
@@ -109,10 +109,10 @@
 	setup_filters: function() {
 		var me = this;
 		this._super();
-		
+
 		this.trigger_refresh_on_change(["value_or_qty", "tree_type", "based_on", "company"]);
 
-		this.show_zero_check()		
+		this.show_zero_check()
 		this.setup_plot_check();
 	},
 	init_filter_values: function() {
@@ -125,14 +125,14 @@
 			// add 'Not Set' Customer & Item
 			// (Customer / Item are not mandatory!!)
 			frappe.report_dump.data["Customer"].push({
-				name: "Not Set", 
+				name: "Not Set",
 				parent_customer_group: "All Customer Groups",
 				parent_territory: "All Territories",
 				id: "Not Set",
 			});
 
 			frappe.report_dump.data["Item"].push({
-				name: "Not Set", 
+				name: "Not Set",
 				parent_item_group: "All Item Groups",
 				id: "Not Set",
 			});
@@ -141,7 +141,7 @@
 		if (!this.tl || !this.tl[this.based_on]) {
 			this.make_transaction_list(this.based_on, this.based_on + " Item");
 		}
-		
+
 		if(!this.data || me.item_type != me.tree_type) {
 			if(me.tree_type=='Customer') {
 				var items = frappe.report_dump.data["Customer"];
@@ -159,7 +159,7 @@
 			me.parent_map = {};
 			me.item_by_name = {};
 			me.data = [];
-			
+
 			$.each(items, function(i, v) {
 				var d = copy_dict(v);
 
@@ -169,20 +169,20 @@
 					me.parent_map[d.name] = d[me.tree_grid.parent_field];
 				}
 				me.reset_item_values(d);
-			});			
-			
+			});
+
 			this.set_indent();
-			
+
 		} else {
 			// otherwise, only reset values
 			$.each(this.data, function(i, d) {
 				me.reset_item_values(d);
 			});
 		}
-		
+
 		this.prepare_balances();
 		if(me.tree_grid.show) {
-			this.set_totals(false);			
+			this.set_totals(false);
 			this.update_groups();
 		} else {
 			this.set_totals(true);
@@ -194,14 +194,14 @@
 		var from_date = dateutil.str_to_obj(this.from_date);
 		var to_date = dateutil.str_to_obj(this.to_date);
 		var is_val = this.value_or_qty == 'Value';
-		
+
 		$.each(this.tl[this.based_on], function(i, tl) {
-			if (me.is_default('company') ? true : tl.company === me.company) { 
+			if (me.is_default('company') ? true : tl.company === me.company) {
 				var posting_date = dateutil.str_to_obj(tl.posting_date);
 				if (posting_date >= from_date && posting_date <= to_date) {
-					var item = me.item_by_name[tl[me.tree_grid.item_key]] || 
+					var item = me.item_by_name[tl[me.tree_grid.item_key]] ||
 						me.item_by_name['Not Set'];
-					item[me.column_map[tl.posting_date].field] += (is_val ? tl.amount : tl.qty);
+					item[me.column_map[tl.posting_date].field] += (is_val ? tl.base_amount : tl.qty);
 				}
 			}
 		});
@@ -213,10 +213,10 @@
 			var parent = me.parent_map[item.name];
 			while(parent) {
 				parent_group = me.item_by_name[parent];
-				
+
 				$.each(me.columns, function(c, col) {
 					if (col.formatter == me.currency_formatter) {
-						parent_group[col.field] = 
+						parent_group[col.field] =
 							flt(parent_group[col.field])
 							+ flt(item[col.field]);
 					}
@@ -228,10 +228,10 @@
 	set_totals: function(sort) {
 		var me = this;
 		var checked = false;
-		$.each(this.data, function(i, d) { 
+		$.each(this.data, function(i, d) {
 			d.total = 0.0;
 			$.each(me.columns, function(i, col) {
-				if(col.formatter==me.currency_formatter && !col.hidden && col.field!="total") 
+				if(col.formatter==me.currency_formatter && !col.hidden && col.field!="total")
 					d.total += d[col.field];
 				if(d.checked) checked = true;
 			})
@@ -244,7 +244,7 @@
 		}
 	},
 	get_plot_points: function(item, col, idx) {
-		return [[dateutil.str_to_obj(col.id).getTime(), item[col.field]], 
+		return [[dateutil.str_to_obj(col.id).getTime(), item[col.field]],
 			[dateutil.user_to_obj(col.name).getTime(), item[col.field]]];
 	}
 });
