[customer login] [minor] commonified listing of orders, invoices, shipments, tickets and messages
diff --git a/website/css/website.css b/website/css/website.css
index 88bf7fd..619658e 100644
--- a/website/css/website.css
+++ b/website/css/website.css
@@ -164,21 +164,32 @@
 }
 
 /* buttons */
+
 .btn-default {
   color: #ffffff;
   background-color: #a7a9aa;
   border-color: #a7a9aa;
 }
 
+.dropup .btn-default .caret,
+.btn-default .caret {
+	border-bottom-color: #ffffff;
+	border-top-color: #ffffff;
+}
+
 .btn-default:hover,
 .btn-default:focus,
 .btn-default:active,
-.btn-default.active {
-  color: #ffffff;
+.btn-default.active,
+.open .dropdown-toggle.btn-default {
   background-color: #9a9c9d;
   border-color: #8d9091;
+  color: #ffffff;
 }
 
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
 .btn-default.disabled:hover,
 .btn-default[disabled]:hover,
 fieldset[disabled] .btn-default:hover,
@@ -193,4 +204,4 @@
 fieldset[disabled] .btn-default.active {
   background-color: #a7a9aa;
   border-color: #a7a9aa;
-}
\ No newline at end of file
+}
diff --git a/website/helpers/transaction.py b/website/helpers/transaction.py
index 336be2a..1aded2e 100644
--- a/website/helpers/transaction.py
+++ b/website/helpers/transaction.py
@@ -15,7 +15,7 @@
 		transactions = webnotes.conn.sql("""select name, creation, currency, grand_total_export 
 			from `tab%s` where customer=%s and docstatus=1
 			order by creation desc
-			limit %s, 20""" % (doctype, "%s", "%s"), (customer, cint(start)), as_dict=1)
+			limit %s, 20""" % (doctype, "%s", "%s"), (customer, cint(start)), as_dict=True)
 		for doc in transactions:
 			doc.items = ", ".join(webnotes.conn.sql_list("""select item_name
 				from `tab%s Item` where parent=%s limit 5""" % (doctype, "%s"), doc.name))
@@ -60,4 +60,60 @@
 		"empty_list_message": "No Invoices Found",
 		"page": "invoice"
 	})
-	return args
\ No newline at end of file
+	return args
+
+@webnotes.whitelist()
+def get_shipments(start=0):
+	return get_transaction_list("Delivery Note", start)
+
+def shipment_list_args():
+	args = get_common_args()
+	args.update({
+		"title": "Shipments",
+		"method": "website.helpers.transaction.get_shipments",
+		"icon": "icon-truck",
+		"empty_list_message": "No Shipments Found",
+		"page": "shipment"
+	})
+	return args
+	
+@webnotes.whitelist()
+def get_tickets(start=0):
+	tickets = webnotes.conn.sql("""select name, subject, status, creation 
+		from `tabSupport Ticket` where raised_by=%s 
+		order by modified desc
+		limit %s, 20""", (webnotes.session.user, cint(start)), as_dict=True)
+	for t in tickets:
+		t.creation = formatdate(t.creation)
+	
+	return tickets
+	
+def ticket_list_args():
+	return {
+		"title": "My Tickets",
+		"method": "website.helpers.transaction.get_tickets",
+		"icon": "icon-ticket",
+		"empty_list_message": "No Tickets Raised",
+		"page": "ticket"
+	}
+
+@webnotes.whitelist()
+def get_messages(start=0):
+	search_term = "%%%s%%" % webnotes.session.user
+	messages = webnotes.conn.sql("""select name, subject, creation,
+		sender, recipients, content
+		from `tabCommunication` where sender like %s or recipients like %s
+		order by creation desc
+		limit %s, 20""", (search_term, search_term, cint(start)), as_dict=True)
+	for m in messages:
+		m.creation = formatdate(m.creation)
+		
+	return messages
+
+def message_list_args():
+	return {
+		"title": "Messages",
+		"method": "website.helpers.transaction.get_messages",
+		"icon": "icon-comments",
+		"empty_list_message": "No Messages Found",
+	}
diff --git a/website/templates/html/transactions.html b/website/templates/html/transactions.html
new file mode 100644
index 0000000..1e61124
--- /dev/null
+++ b/website/templates/html/transactions.html
@@ -0,0 +1,59 @@
+{% extends "app/website/templates/html/page.html" %}
+
+{% block content -%}
+<div class="col-md-12">
+    <ul class="breadcrumb">
+    	<li><a href="index">Home</a></li>
+    	<li><a href="account">My Account</a></li>
+    	<li class="active"><i class="{{ icon }} icon-fixed-width"></i> {{ title }}</li>
+    </ul>
+	<div class="list-group transaction-list">
+		<div class="progress progress-striped active">
+			<div class="progress-bar progress-bar-info" style="width: 100%;"></div>
+		</div>
+	</div>
+	<div class="text-center">
+		<button class="btn btn-default btn-show-more hide">More</button>
+	</div>
+</div>
+{%- endblock %}
+
+{% block javascript -%}
+$(document).ready(function() {
+	window.start = 0;
+	window.$list = $(".transaction-list");
+	window.$show_more = $(".btn-show-more").on("click", function() { get_transactions(this); })
+	
+	get_transactions();
+});
+
+var get_transactions = function(btn) {
+	wn.call({
+		method: "{{ method }}",
+		args: { start: start },
+		btn: btn,
+		callback: function(r) {
+			$list.find(".progress").remove();
+			$show_more.toggleClass("hide", !(r.message && r.message.length===20));
+		
+			if(!(r.message && r.message.length)) {
+				console.log("empty");
+				if(!$list.html().trim()) {
+					$list.html("<div class='alert alert-warning'>\
+						{{ empty_list_message }}</div>");
+				}
+				return;
+			}
+		
+			start += r.message.length;
+		
+			$.each(r.message, function(i, doc) {
+				render(doc);
+			});
+		}
+	})
+};
+
+// var render = function(doc) { };
+
+{% endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/account.html b/website/templates/pages/account.html
index 6dcc497..9d29589 100644
--- a/website/templates/pages/account.html
+++ b/website/templates/pages/account.html
@@ -17,11 +17,9 @@
 		<li><a href="orders"><i class="icon-list icon-fixed-width"></i> My Orders</a></li>
 		<li><a href="tickets"><i class="icon-tags icon-fixed-width"></i> My Tickets</a></li>
 		<li style="border-top: 1px solid #ddd"></li>
-		<li><a href="messages"><i class="icon-comments icon-fixed-width"></i> Messages</a></li>
-		<li><a href="quotations"><i class="icon-shopping-cart icon-fixed-width"></i> 
-			Quotations</a></li>
 		<li><a href="invoices"><i class="icon-file-text icon-fixed-width"></i> Invoices</a></li>
-		<li><a href="delivery_notes"><i class="icon-truck icon-fixed-width"></i> Shipments</a></li>
+		<li><a href="shipments"><i class="icon-truck icon-fixed-width"></i> Shipments</a></li>
+		<li><a href="messages"><i class="icon-comments icon-fixed-width"></i> Messages</a></li>
 		<li style="border-top: 1px solid #ddd"></li>
 		<li><a href="server.py?cmd=web_logout"><i class="icon-signout icon-fixed-width"></i>
 			Logout</a></li>
diff --git a/website/templates/pages/messages.html b/website/templates/pages/messages.html
new file mode 100644
index 0000000..e1ea8d0
--- /dev/null
+++ b/website/templates/pages/messages.html
@@ -0,0 +1,31 @@
+{% extends "app/website/templates/html/transactions.html" %}
+
+{% block javascript -%}
+{{ super() }}
+
+var render = function(doc) {
+	doc.sender = doc.sender ? doc.sender : "To ";
+	doc.recipients = doc.recipients ? (" to " + doc.recipients) : "";
+	doc.content = remove_script_and_style(doc.content);
+	
+	if(!is_html(doc.content)) {
+		doc.content = doc.content.replace("\n", "<br>");
+	}
+		
+	$(repl('<a class="list-group-item">\
+			<div class="row col-md-12">%(subject)s</div>\
+			<div class="row text-muted">\
+				<div class="col-md-6">%(sender)s%(recipients)s</div>\
+				<div class="col-md-6 text-right">%(creation)s</div>\
+			</div>\
+			<div class="row col-md-12 msg-content" style="display: none;"><hr>%(content)s</div>\
+		</a>', doc))
+		.appendTo($list)
+		.on("click", function() {
+			$(this).find(".msg-content").toggle();
+		});
+	
+	
+}
+
+{%- endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/sales_transactions.html b/website/templates/pages/sales_transactions.html
new file mode 100644
index 0000000..7215339
--- /dev/null
+++ b/website/templates/pages/sales_transactions.html
@@ -0,0 +1,25 @@
+{% extends "app/website/templates/html/transactions.html" %}
+
+{% block javascript -%}
+global_number_format = "{{ global_number_format }}";
+currency = "{{ currency }}";
+wn.currency_symbols = {{ currency_symbols }};
+
+{{ super() }}
+
+var render = function(doc) {
+	doc.grand_total_export = format_currency(doc.grand_total_export, doc.currency);
+	
+	$(repl('<a href="{{ page }}?name=%(name)s" class="list-group-item">\
+			<div class="row">\
+				<div class="col-md-6">\
+					<div class="row col-md-12">%(name)s</div>\
+					<div class="row col-md-12 text-muted">%(items)s...</div>\
+				</div>\
+				<div class="col-md-3 text-right">%(grand_total_export)s</div>\
+				<div class="col-md-3 text-right text-muted">%(creation)s</div>\
+			</div>\
+		</a>', doc)).appendTo($list);
+};
+
+{%- endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/tickets.html b/website/templates/pages/tickets.html
index 9c476ff..248384d 100644
--- a/website/templates/pages/tickets.html
+++ b/website/templates/pages/tickets.html
@@ -1,51 +1,35 @@
-{% extends "app/website/templates/html/page.html" %}
+{% extends "app/website/templates/html/transactions.html" %}
 
-{% set title="My Tickets" %}
+{% block javascript -%}
+{{ super() }}
 
-{% block content %}
-<div class="col-md-12">
-    <ul class="breadcrumb">
-    	<li><a href="index">Home</a></li>
-    	<li><a href="account">My Account</a></li>
-    	<li class="active"><i class="icon-ticket icon-fixed-width"></i> My Tickets</li>
-    </ul>
-	<div id="ticket-list" style="font-size: 13px;">
-		<div class="progress progress-striped active">
-			<div class="progress-bar progress-bar-info" style="width: 100%;"></div>
-		</div>
-	</div>
-</div>
-<script>
-$(document).ready(function() {
-	var order_start = 0;
-		
-	wn.call({
-		method: "support.doctype.support_ticket.support_ticket.get_tickets",
-		args: {
-			start: order_start
-		},
-		callback: function(r) {
-			$("#ticket-list .progress").remove();
-			var $list = $("#ticket-list");
-			
-			if(!(r.message && r.message.length)) {
-				$list.html("<div class='alert'>No Tickets Yet</div>");
-				return;
-			}
-			
-			$.each(r.message, function(i, ticket) {
-				
-				// parent
-				var $ticket = $(repl('<div class="row">\
-					<div class="col-md-2"><span class="label">%(status)s</span></div>\
-					<div class="col-md-3"><a href="ticket?name=%(name)s">%(name)s</a></div>\
-					<div class="col-md-7">%(subject)s</div>\
-				</div>', ticket)).appendTo($list);
-				
-				$("<hr>").appendTo($list);
-			});
-		}
-	})
-})
-</script>
-{% endblock %}
\ No newline at end of file
+var status_label = {
+	"Open": "label-success",
+	"Waiting for Customer": "label-danger",
+	"Closed": "label-default"
+}
+
+var render = function(doc) {
+	doc.status = doc.status.trim();
+	doc.label_class = status_label[doc.status] || "label-default";
+	if(doc.status==="Waiting for Customer") doc.status = "To Reply";
+	
+	$(repl('<a href="{{ page }}?name=%(name)s" class="list-group-item">\
+			<div class="row">\
+				<div class="col-md-8">\
+					<div class="row col-md-12">%(name)s</div>\
+					<div class="row col-md-12 text-muted">%(subject)s</div>\
+				</div>\
+				<div class="col-md-4">\
+					<div class="pull-left">\
+						<span class="label %(label_class)s" \
+							style="padding-top: 0.3em; margin-right: 5px;">%(status)s</span>\
+					</div>\
+					<div class="pull-right">\
+						<span class="text-muted">%(creation)s</span>\
+					</div>\
+				</div>\
+			</div>\
+		</a>', doc)).appendTo($list);
+};
+{%- endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/transaction_list.html b/website/templates/pages/transaction_list.html
deleted file mode 100644
index e92764a..0000000
--- a/website/templates/pages/transaction_list.html
+++ /dev/null
@@ -1,69 +0,0 @@
-{% extends "app/website/templates/html/page.html" %}
-
-{% block content %}
-<div class="col-md-12">
-    <ul class="breadcrumb">
-    	<li><a href="index">Home</a></li>
-    	<li><a href="account">My Account</a></li>
-    	<li class="active"><i class="{{ icon }} icon-fixed-width"></i> {{ title }}</li>
-    </ul>
-	<div class="list-group transaction-list">
-		<div class="progress progress-striped active">
-			<div class="progress-bar progress-bar-info" style="width: 100%;"></div>
-		</div>
-	</div>
-</div>
-
-<script>
-global_number_format = "{{ global_number_format }}";
-currency = "{{ currency }}";
-wn.currency_symbols = {{ currency_symbols }};
-
-$(document).ready(function() {
-	var start = 0;
-	var $list = $(".transaction-list");
-	
-	var get_transactions = function() {
-		wn.call({
-			method: "{{ method }}",
-			args: { start: start },
-			callback: function(r) {
-				$list.find(".progress").remove();
-			
-				if(!(r.message && r.message.length)) {
-					console.log("empty");
-					if(!$list.html().trim()) {
-						$list.html("<div class='alert alert-warning'>\
-							{{ empty_list_message }}</div>");
-					}
-					return;
-				}
-			
-				start += r.message.length;
-			
-				$.each(r.message, function(i, doc) {
-					render(doc);
-				});
-			}
-		})
-	};
-	
-	var render = function(doc) {
-		doc.grand_total_export = format_currency(doc.grand_total_export, doc.currency);
-		
-		var $row = $(repl('<a href="{{ page }}?name=%(name)s" class="list-group-item">\
-				<div class="row">\
-					<div class="col-md-6">\
-						<div class="row col-md-12">%(name)s</div>\
-						<div class="row col-md-12 text-muted">%(items)s...</div>\
-					</div>\
-					<div class="col-md-3 text-right">%(grand_total_export)s</div>\
-					<div class="col-md-3 text-right text-muted">%(creation)s</div>\
-				</div>\
-			</a>', doc)).appendTo($list);
-	};
-	
-	get_transactions();
-});
-</script>
-{% endblock %}
\ No newline at end of file