[shopping-cart] i'm back
diff --git a/erpnext/templates/pages/ticket.html b/erpnext/templates/pages/ticket.html
new file mode 100644
index 0000000..39c69df
--- /dev/null
+++ b/erpnext/templates/pages/ticket.html
@@ -0,0 +1,116 @@
+{% block title %} {{ title }} {% endblock %}
+
+{% block header %}<h2><i class="icon-ticket icon-fixed-width"></i> {{ title }}</h2>{% endblock %}
+
+{% block content %}
+{% set status_label = {
+	"Open": "label-success",
+	"To Reply": "label-danger",
+	"Closed": "label-default"
+} %}
+
+<div class="ticket-content">
+    <ul class="breadcrumb">
+    	<li><a href="index">Home</a></li>
+    	<li><a href="tickets">My Tickets</a></li>
+    	<li class="active"><i class="icon-ticket icon-fixed-width"></i> {{ doc.name or "" }}</li>
+    </ul>
+	{% if not doc -%}
+		<script>ask_to_login();</script>
+	{% else %}
+	<hr>
+	{%- if doc.status -%}
+	{% if doc.status == "Waiting for Customer" -%}
+		{% set status = "To Reply" %}
+	{% else %}
+		{% set status = doc.status %}
+	{%- endif -%}
+	<div class="row">
+		<div class="col-md-2" style="margin-bottom: 7px;">
+			<span class="label {{ status_label.get(status) or 'label-default' }}">{{ status }}</span>
+		</div>
+		<div class="col-md-8">
+			<div class="row col-md-12">{{ doc.subject }}</div>
+		</div>
+		<div class="col-md-2">
+			<span class="text-muted pull-right">{{ frappe.utils.formatdate(doc.creation) }}</span>
+		</div>
+	</div>
+	<div class="row">
+		<h4 class="col-xs-6">Messages</h4>
+		<div class="col-xs-6">
+			 <button class="btn btn-sm btn-primary pull-right" id="ticket-reply">
+				  <i class="icon-envelope icon-fixed-width"></i> Reply</button>
+			 <button class="btn btn-sm btn-success pull-right hide" id="ticket-reply-send">
+				  <i class="icon-arrow-right icon-fixed-width"></i> Send</button>
+		</div>
+	</div>
+	<p id="ticket-alert" class="alert alert-danger"
+		style="display: none;">&nbsp;</p>
+	<div>
+		<table class="table table-bordered table-striped" id="ticket-thread">
+			<tbody>
+				{%- for comm in
+					(doc.get({"doctype":"Communication"})|sort(reverse=True, attribute="creation")) %}
+				<tr>
+					<td>
+					<h5 style="text-transform: none">
+						{{ comm.sender }} on {{ frappe.utils.formatdate(comm.creation) }}</h5>
+					<hr>
+					<p>{{ frappe.utils.is_html(comm.content) and comm.content or
+						comm.content.replace("\n", "<br>")}}</p>
+					</td>
+				</tr>
+				{% endfor -%}
+			</tbody>
+		</table>
+	</div>
+	{%- endif -%}
+	{% endif -%}
+</div>
+
+<script>
+$(document).ready(function() {
+	$("#ticket-reply").on("click", function() {
+		if(!$("#ticket-reply-editor").length) {
+			$('<tr id="ticket-reply-editor"><td>\
+				<h5 style="text-transform: none">Reply</h5>\
+				<hr>\
+				<textarea rows=10 class="form-control" style="resize: vertical;"></textarea>\
+			</td></tr>').prependTo($("#ticket-thread").find("tbody"));
+			$("#ticket-reply").addClass("hide");
+			$("#ticket-reply-send").removeClass("hide");
+		}
+	});
+
+	$("#ticket-reply-send").on("click", function() {
+		var reply = $("#ticket-reply-editor").find("textarea").val().trim();
+		if(!reply) {
+			msgprint("Please write something in reply!");
+		} else {
+			frappe.call({
+				type: "POST",
+				method: "shopping_cart.templates.pages.ticket.add_reply",
+				btn: this,
+				args: { ticket: "{{ doc.name }}", message: reply },
+				callback: function(r) {
+					if(r.exc) {
+						msgprint(r._server_messages
+							? JSON.parse(r._server_messages).join("<br>")
+							: "Something went wrong!");
+					} else {
+						window.location.reload();
+					}
+				}
+			})
+		}
+	});
+});
+
+var msgprint = function(txt) {
+	if(txt) $("#ticket-alert").html(txt).toggle(true);
+}
+</script>
+
+<!-- no-sidebar -->
+{% endblock %}