fixes in transaction history of customer and supplier
diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js
index 498dbb4..5678e98 100644
--- a/erpnext/buying/doctype/supplier/supplier.js
+++ b/erpnext/buying/doctype/supplier/supplier.js
@@ -105,47 +105,48 @@
 	cur_frm.contact_list.run();
 }
 
-// make purchase order list
-cur_frm.cscript.make_po_list = function(parent, doc){
-	wn.require('js/listing.js');
-	var lst = new Listing();
-	lst.colwidths = ['5%','25%','20%','25%','25%'];
-	lst.colnames = ['Sr.','Id','Status','PO Date','Grand Total'];
-	lst.coltypes = ['Data','Link','Data','Data','Currency'];
-	lst.coloptions = ['','Purchase Order','','','',''];
 
-	var q = repl("select name,status,transaction_date, grand_total from `tabPurchase Order` where supplier='%(sup)s' order by transaction_date desc", {'sup':doc.name});
-	var q_max = repl("select count(name) from `tabPurchase Order` where supplier='%(sup)s'", {'sup':doc.name});
-	
-	cur_frm.cscript.run_list(lst,parent,q,q_max,doc,'Purchase Order','Purchase Order');
+// Transaction History
+
+cur_frm.cscript.make_po_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Purchase Order', 
+		[
+			{fieldname: 'name', width: '28%', label: 'Id', type: 'Link'},
+			{fieldname: 'status', width: '25%', label: 'Status', type: 'Data'},
+			{fieldname: 'modified', width: '12%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
 }
 
-// make purchase receipt list
-cur_frm.cscript.make_pr_list = function(parent,doc){
-	wn.require('js/listing.js');
-	var lst = new Listing();
-	lst.colwidths = ['5%','20%','20%','20%','15%','20%'];
-	lst.colnames = ['Sr.','Id','Status','Receipt Date','% Billed','Grand Total'];
-	lst.coltypes = ['Data','Link','Data','Data','Currency','Currency'];
-	lst.coloptions = ['','Purchase Receipt','','','',''];
-	
-	var q = repl("select name,status,transaction_date,per_billed,grand_total from `tabPurchase Receipt` where supplier='%(sup)s' order by transaction_date desc", {'sup':doc.name});
-	var q_max = repl("select count(name) from `tabPurchase Receipt` where supplier='%(sup)s'", {'sup':doc.name});
-	
-	cur_frm.cscript.run_list(lst,parent,q,q_max,doc,'Purchase Receipt','Purchase Receipt');
+cur_frm.cscript.make_pr_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Purchase Receipt', 
+		[
+			{fieldname: 'name', width: '28%', label: 'Id', type: 'Link'},
+			{fieldname: 'status', width: '15%', label: 'Status', type: 'Data'},
+			{fieldname: 'per_billed', width: '10%', label: '% Billed', 
+				type: 'Percentage', style: 'text-align: right'},
+			{fieldname: 'modified', width: '12%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
 }
 
-// make purchase invoice list
-cur_frm.cscript.make_pi_list = function(parent,doc){
-	wn.require('js/listing.js');
-	var lst = new Listing();
-	lst.colwidths = ['5%','20%','20%','20%','15%','20%'];
-	lst.colnames = ['Sr.','Id','Posting Date','Credit To','Bill Date','Grand Total'];
-	lst.coltypes = ['Data','Link','Data','Data','Currency','Currency'];
-	lst.coloptions = ['','Purchase Invoice','','','',''];
-
-	var q = repl("select name, posting_date, credit_to, bill_date, grand_total from `tabPurchase Invoice` where supplier='%(sup)s' order by posting_date desc", {'sup':doc.name});
-	var q_max = repl("select count(name) from `tabPurchase Invoice` where supplier='%(sup)s'", {'sup':doc.name});
-	
-	cur_frm.cscript.run_list(lst,parent,q,q_max,doc,'Purchase Invoice','Purchase Invoice');	
-}
+cur_frm.cscript.make_pi_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Purchase Invoice', 
+		[
+			{fieldname: 'name', width: '30%', label: 'Id', type: 'Link'},
+			{fieldname: 'modified', width: '35%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
+}
\ No newline at end of file
diff --git a/erpnext/selling/doctype/customer/customer.js b/erpnext/selling/doctype/customer/customer.js
index 3ff20a3..f64d3f2 100644
--- a/erpnext/selling/doctype/customer/customer.js
+++ b/erpnext/selling/doctype/customer/customer.js
@@ -148,114 +148,63 @@
 	return 'SELECT `tabLead`.`name` FROM `tabLead` WHERE `tabLead`.`status`!="Converted" AND `tabLead`.%(key)s LIKE "%s" ORDER BY `tabLead`.`name` ASC LIMIT 50';	
 }
 
-/* ********************************* transaction history ************************************** */
 
-cur_frm.render_transaction_history_row = function(data) {
-	data.grand_total = fmt_money(data.grand_total);
-	data.modified = wn.datetime.only_date(data.modified);
-	return repl('\
-		<table><tr> \
-			<td width="30%" title="Id"> \
-				<a href="#!Form/%(doctype)s/%(name)s">%(name)s</a> \
-			</td> \
-			<td width="20%" title="Status">%(status)s</td> \
-			<td width="30%" title="Grand Total" style="text-align: right;"> \
-				%(currency)s %(grand_total)s \
-			</td> \
-			<td width="20%" title="Modified Date" style="text-align: right;"> \
-				%(modified)s \
-			</td> \
-		</tr></table>', data);
+// Transaction History
+// functions called by these functions are defined in contact_control.js
+cur_frm.cscript.make_qtn_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Quotation', 
+		[
+			{fieldname: 'name', width: '28%', label: 'Id', type: 'Link'},
+			{fieldname: 'status', width: '25%', label: 'Status', type: 'Data'},
+			{fieldname: 'modified', width: '12%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
 }
 
-cur_frm.get_query_transaction_history = function(args) {
-	return repl("\
-		select name, status, modified, currency, \
-			grand_total \
-		from `tab%(doctype)s` \
-		where customer='%(customer)s' \
-		order by modified desc", args);
+cur_frm.cscript.make_so_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Sales Order', 
+		[
+			{fieldname: 'name', width: '28%', label: 'Id', type: 'Link'},
+			{fieldname: 'status', width: '25%', label: 'Status', type: 'Data'},
+			{fieldname: 'modified', width: '12%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
 }
 
-cur_frm.render_transaction_history = function(parent, doc, doctype, get_query, render_row) {
-	$(parent).css({
-		'padding-top': '10px',
-	});
-	
-	cur_frm.transaction_list = new wn.ui.Listing({
-		parent: parent,
-		page_length: 10,
-		get_query: get_query || function() {
-			return cur_frm.get_query_transaction_history({
-				customer: doc.name,
-				doctype: doctype,
-			});
-		},
-		as_dict: 1,
-		no_result_message: repl('No %(doctype)s created for this customer', { doctype: doctype }),
-		render_row: function(wrapper, data) {
-			data.doctype = doctype;
-			render_html = render_row
-						? render_row(data)
-						: cur_frm.render_transaction_history_row(data);
-			$(wrapper).html(render_html);
-		},
-	});
-	
-	cur_frm.transaction_list.run();
-}
-// --------------------
-// make quotation list
-// --------------------
-cur_frm.cscript.make_qtn_list = function(parent,doc){
-	cur_frm.render_transaction_history(parent, doc, 'Quotation');
+cur_frm.cscript.make_dn_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Delivery Note', 
+		[
+			{fieldname: 'name', width: '28%', label: 'Id', type: 'Link'},
+			{fieldname: 'status', width: '25%', label: 'Status', type: 'Data'},
+			{fieldname: 'modified', width: '12%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
 }
 
-// -------------
-// make so list
-// -------------
-cur_frm.cscript.make_so_list = function(parent,doc){
-	cur_frm.render_transaction_history(parent, doc, 'Sales Order');
-}
-
-
-// -------------
-// make dn list
-// -------------
-cur_frm.cscript.make_dn_list = function(parent,doc){
-	cur_frm.render_transaction_history(parent, doc, 'Delivery Note');
-}
-
-// -------------
-// make si list
-// -------------
-cur_frm.cscript.make_si_list = function(parent,doc){
-	cur_frm.render_transaction_history(parent, doc, 'Sales Invoice', function() {
-		return repl("\
-			select name, outstanding_amount, modified, currency, \
-				grand_total \
-			from `tab%(doctype)s` \
-			where customer='%(customer)s' \
-			order by modified desc", { doctype: 'Sales Invoice', customer: doc.name });
-	}, function(data) {
-		data.grand_total = fmt_money(data.grand_total);
-		data.modified = wn.datetime.only_date(data.modified);
-		data.outstanding_amount = fmt_money(data.outstanding_amount);
-		return repl('\
-			<table><tr> \
-				<td width="30%" title="Id"> \
-					<a href="#!Form/%(doctype)s/%(name)s">%(name)s</a> \
-				</td> \
-				<td width="20%" title="Outstanding Amount" \
-					style="text-align: right; color: #777"> \
-					%(currency)s %(outstanding_amount)s \
-				</td>\
-				<td width="30%" title="Grand Total" style="text-align: right;"> \
-					%(currency)s %(grand_total)s\
-				</td> \
-				<td width="20%" title="Modified Date" style="text-align: right;"> \
-					%(modified)s \
-				</td> \
-			</tr></table>', data);
-	});
+cur_frm.cscript.make_si_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Sales Invoice', 
+		[
+			{fieldname: 'name', width: '28%', label: 'Id', type: 'Link'},
+			{fieldname: 'outstanding_amount', width: '25%',
+				label: 'Outstanding Amount',
+				type: 'Currency', style: 'text-align: right; color: #777'},
+			{fieldname: 'modified', width: '12%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
 }
\ No newline at end of file
diff --git a/erpnext/setup/doctype/contact_control/contact_control.js b/erpnext/setup/doctype/contact_control/contact_control.js
index 51fc5cf..f9dc2c9 100755
--- a/erpnext/setup/doctype/contact_control/contact_control.js
+++ b/erpnext/setup/doctype/contact_control/contact_control.js
@@ -121,3 +121,80 @@
 		return 'SELECT `tabTerritory`.`name`,`tabTerritory`.`parent_territory` FROM `tabTerritory` WHERE `tabTerritory`.`is_group` = "No" AND `tabTerritory`.`docstatus`!= 2 AND `tabTerritory`.%(key)s LIKE "%s"  ORDER BY  `tabTerritory`.`name` ASC LIMIT 50';
 	}
 }
+
+
+// Transaction History related functions
+cur_frm.cscript.render_transaction_history = function(parent, doc, doctype, args) {
+	$(parent).css({ 'padding-top': '10px' });
+	cur_frm.transaction_list = new wn.ui.Listing({
+		parent: parent,
+		page_length: 10,
+		get_query: function() {
+			return cur_frm.cscript.get_query_transaction_history({
+				parent: doc.doctype.toLowerCase(),
+				parent_name: doc.name,
+				doctype: doctype,
+				fields: (function() {
+					var fields = [];
+					for(var i in args) {
+						fields.push(args[i].fieldname);
+					}
+					return fields.join(", ");
+				})(),
+			});
+		},
+		as_dict: 1,
+		no_result_message: repl('No %(doctype)s created for this %(parent)s', 
+								{ doctype: doctype, parent: doc.doctype }),
+		render_row: function(wrapper, data) {
+			render_html = cur_frm.cscript.render_transaction_history_row(data, args, doctype);
+			$(wrapper).html(render_html);
+		},
+	});
+	cur_frm.transaction_list.run();
+}
+
+cur_frm.cscript.render_transaction_history_row = function(data, args, doctype) {
+	var content = [];
+	var currency = data.currency;
+	for (var a in args) {
+		for (var d in data) {
+			if (args[a].fieldname === d && args[a].fieldname !== 'currency') {
+				if (args[a].type === 'Link') {
+					data[d] = repl('<a href="#!Form/%(doctype)s/%(name)s">\
+						%(name)s</a>', { doctype: doctype, name: data[d]});
+				} else if (args[a].type === 'Currency') {
+					data[d] = currency + " " + fmt_money(data[d]);
+				} else if (args[a].type === 'Percentage') {
+					data[d] = flt(data[d]) + '%';
+				} else if (args[a].type === 'Date') {
+					data[d] = wn.datetime.only_date(data[d]);
+				}
+				if (args[a].style == undefined) {
+					args[a].style = '';
+				}
+				data[d] = repl('\
+					<td width="%(width)s" title="%(title)s" style="%(style)s">\
+					%(content)s</td>',
+					{
+						content: data[d],
+						width: args[a].width,
+						title: args[a].label,
+						style: args[a].style,
+					});
+				content.push(data[d]);
+				break;
+			}
+		}
+	}
+	content = content.join("\n");
+	return '<table><tr>' + content + '</tr></table>';
+}
+
+cur_frm.cscript.get_query_transaction_history = function(args) {
+	var query = repl("\
+		select %(fields)s from `tab%(doctype)s` \
+		where %(parent)s = '%(parent_name)s' \
+		order by modified desc", args);
+	return query;
+}
\ No newline at end of file