[fixes] portal, issues, addresses etc
diff --git a/erpnext/templates/includes/address_row.html b/erpnext/templates/includes/address_row.html
new file mode 100644
index 0000000..f7eaa76
--- /dev/null
+++ b/erpnext/templates/includes/address_row.html
@@ -0,0 +1,20 @@
+<div class="web-list-item">
+    <a href="/addresses?name={{ doc.name }}" no-pjax>
+    <div class="row">
+        <div class="col-sm-4">
+            <span class="strong">{{ doc.address_title }}</span>
+        </div>
+        <div class="col-sm-2">
+            {{ doc.address_type }}
+        </div>
+        <div class="col-sm-4">
+            {{ doc.address_line1 }}<br>
+            {% if doc.address_line2 %}{{ doc.address_line2 }}<br>{% endif %}
+            {{ doc.city }}<br>
+        </div>
+        <div class="col-sm-2">
+            {% if doc.state %}{{ doc.state }}, {% endif %}{{ doc.country }}
+        </div>
+    </div>
+    </a>
+</div>
diff --git a/erpnext/templates/includes/issue_row.html b/erpnext/templates/includes/issue_row.html
new file mode 100644
index 0000000..30b2ab0
--- /dev/null
+++ b/erpnext/templates/includes/issue_row.html
@@ -0,0 +1,16 @@
+<div class="web-list-item">
+    <div class="row">
+        <div class="col-sm-8">
+            <a class="no-decoration" href="/issues?name={{ doc.name }}" no-pjax>
+                {{ doc.subject }}
+            </a>
+        </div>
+        <div class="col-sm-2">
+            <span class="indicator {{ "red" if doc.status=="Open" else "blue" }}">
+                {{ doc.status }}</span>
+        </div>
+        <div class="col-sm-2 text-muted text-right small">
+            {{ frappe.format_date(doc.creation) }}
+        </div>
+    </div>
+</div>
diff --git a/erpnext/templates/includes/transaction_row.html b/erpnext/templates/includes/transaction_row.html
index ca03bd3..a677fa5 100644
--- a/erpnext/templates/includes/transaction_row.html
+++ b/erpnext/templates/includes/transaction_row.html
@@ -1,5 +1,6 @@
 {% set doc = frappe.get_doc(doc) %}
-<a class="website-list-row" href="/{{ pathname }}/{{ doc.name }}" no-pjax>
+<div class="web-list-item">
+<a href="/{{ pathname }}/{{ doc.name }}" no-pjax>
 <div class="row">
 	<div class="col-sm-6 col-xs-7">
 		<div class="row">
@@ -12,7 +13,7 @@
 					<span class="indicator orange">{{ doc.status_display }}</span>
 					{%- endif -%}
 				{%- elif doc.status -%}
-					<span class="indicator">{{ doc.status }}</span>
+					<span class="indicator blue">{{ doc.status }}</span>
 				{%- endif -%}
 			</div>
 		</div>
@@ -27,4 +28,4 @@
 		{{ frappe.utils.pretty_date(doc.creation) }}</div>
 </div>
 </a>
-
+</div>
diff --git a/erpnext/templates/pages/address.html b/erpnext/templates/pages/address.html
deleted file mode 100644
index 8544604..0000000
--- a/erpnext/templates/pages/address.html
+++ /dev/null
@@ -1,112 +0,0 @@
-{% block title %} {{ title }} {% endblock %}
-
-{% block header %}<h2>{{ title }}</h2>{% endblock %}
-
-{% block content %}
-{% macro render_fields(docfields) -%}
-{% for df in docfields -%}
-	{% if df.fieldtype == "Data" -%}
-	<fieldset>
-		<label>{{ df.label }}</label>
-		<input class="form-control" type="text" placeholder="Type {{ df.label }}"
-			data-fieldname="{{ df.fieldname }}" data-fieldtype="{{ df.fieldtype }}"
-			{% if doc and doc.get(df.fieldname) -%} value="{{ doc[df.fieldname] }}" {%- endif %}>
-	</fieldset>
-	{% elif df.fieldtype == "Check" -%}
-	<fieldset class="checkbox">
-		<label><input type="checkbox" data-fieldname="{{ df.fieldname }}"
-			data-fieldtype="{{ df.fieldtype }}"
-			{% if doc and frappe.utils.cint(doc.get(df.fieldname)) -%} checked="checked" {%- endif %}>
-			{{ df.label }}</label>
-	</fieldset>
-	{% elif df.fieldtype in ("Select", "Link") -%}
-	<fieldset>
-		{% set select_options = frappe.get_list(df.options)|map(attribute="name")
-			if df.fieldtype == "Link" else df.options.split("\n") %}
-		<label>{{ df.label }}</label>
-		<select class="form-control" data-fieldname="{{ df.fieldname }}" data-fieldtype="{{ df.fieldtype }}">
-			{% for value in select_options -%}
-			{% if doc and doc.get(df.fieldname) == value -%}
-			<option selected="selected">{{ value }}</option>
-			{% else -%}
-			<option>{{ value }}</option>
-			{%- endif %}
-			{%- endfor %}
-		</select>
-	</fieldset>
-	{%- endif %}
-{%- endfor %}
-{%- endmacro %}
-
-<div class="container content">
-    <ul class="breadcrumb">
-    	<li><a href="/index">Home</a></li>
-    	<li><a href="/addresses">My Addresses</a></li>
-    	<li class="active"><i class="icon-map-marker icon-fixed-width"></i> {{ title }}</li>
-    </ul>
-	<h3><i class="icon-map-marker icon-fixed-width"></i> {{ title }}</h3>
-	<button type="button" class="btn btn-primary pull-right" id="address-save"><i class="icon-ok"></i>
-		{{ doc and "Save" or "Insert" }}</button>
-	<div class="clearfix"></div>
-	<hr>
-	<div id="address-error" class="alert alert-danger" style="display:none"></div>
-	<form autocomplete="on">
-		<div class="row">
-			<section class="col-md-6">
-				{{ render_fields(meta.left_fields) }}
-			</section>
-			<section class="col-md-6">
-				{{ render_fields(meta.right_fields) }}
-			</section>
-		</section>
-	</form>
-</div>
-
-<script>
-;(function() {
-	console.log("yoyo");
-	frappe.ready(function() {
-		bind_save();
-	});
-
-	var bind_save = function() {
-		$("#address-save").on("click", function() {
-			console.log("clicked!");
-
-			var fields = {
-				name: "{{ docname or '' }}"
-			};
-
-			$("form").find("[data-fieldname]").each(function(i, input) {
-				var $input = $(input);
-				var fieldname = $(input).attr("data-fieldname");
-				var fieldtype = $(input).attr("data-fieldtype");
-
-				if(fieldtype == "Check") {
-					fields[fieldname] = $input.is(":checked") ? 1 : 0;
-				} else {
-					fields[fieldname] = $input.val();
-				}
-			});
-
-			frappe.call({
-				btn: $(this),
-				type: "POST",
-				method: "erpnext.templates.pages.address.save_address",
-				args: { fields: fields, address_fieldname: get_url_arg("address_fieldname") },
-				error_msg: "#address-error",
-				callback: function(r) {
-					if(get_url_arg("address_fieldname")) {
-						window.location.href = "cart";
-					} else {
-						window.location.href = "address?name=" + encodeURIComponent(r.message);
-					}
-				}
-			});
-		});
-	};
-})();
-</script>
-
-<!-- no-sidebar -->
-{% endblock %}
diff --git a/erpnext/templates/pages/address.py b/erpnext/templates/pages/address.py
deleted file mode 100644
index 20f2798..0000000
--- a/erpnext/templates/pages/address.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import json
-
-import frappe
-from erpnext.shopping_cart.cart import get_lead_or_customer, update_cart_address
-from frappe.desk.form.meta import get_meta
-
-no_cache = 1
-no_sitemap = 1
-
-def get_context(context):
-	def _get_fields(fieldnames):
-		return [frappe._dict(zip(["label", "fieldname", "fieldtype", "options"],
-				[df.label, df.fieldname, df.fieldtype, df.options]))
-			for df in get_meta("Address").get("fields", {"fieldname": ["in", fieldnames]})]
-
-	docname = doc = None
-	title = "New Address"
-	if frappe.form_dict.name:
-		doc = frappe.get_doc("Address", frappe.form_dict.name)
-		docname = doc.name
-		title = doc.name
-
-	return {
-		"doc": doc,
-		"meta": frappe._dict({
-			"left_fields": _get_fields(["address_title", "address_type", "address_line1", "address_line2",
-				"city", "state", "pincode", "country"]),
-			"right_fields": _get_fields(["email_id", "phone", "fax", "is_primary_address",
-				"is_shipping_address"])
-		}),
-		"docname": docname,
-		"title": title
-	}
-
-@frappe.whitelist()
-def save_address(fields, address_fieldname=None):
-	party = get_lead_or_customer()
-	fields = json.loads(fields)
-
-	if fields.get("name"):
-		doc = frappe.get_doc("Address", fields.get("name"))
-	else:
-		doc = frappe.get_doc({"doctype": "Address", "__islocal": 1})
-
-	doc.update(fields)
-
-	party_fieldname = party.doctype.lower()
-	doc.update({
-		party_fieldname: party.name,
-		(party_fieldname + "_name"): party.get(party_fieldname + "_name")
-	})
-	doc.flags.ignore_permissions = True
-	doc.save()
-
-	if address_fieldname:
-		update_cart_address(address_fieldname, doc.name)
-
-	return doc.name
diff --git a/erpnext/templates/pages/addresses.html b/erpnext/templates/pages/addresses.html
deleted file mode 100644
index a0562c6..0000000
--- a/erpnext/templates/pages/addresses.html
+++ /dev/null
@@ -1,50 +0,0 @@
-{% block title %} {{ "My Addresses" }} {% endblock %}
-
-{% block header %}<h2>My Addresses</h2>{% endblock %}
-
-{% block breadcrumbs %}{% include "templates/includes/breadcrumbs.html" %}{% endblock %}
-
-{% block content %}
-<div class="addresses-content">
-	<p><a class="btn btn-default" href="/address"><i class="icon-plus"> New Address</i></a></p>
-	<hr>
-	<div id="address-list">
-		<div class="text-muted progress">{{ _("Loading") }}...</div>
-	</div>
-</div>
-
-<script>
-;(function() {
-	var fetch_addresses = function() {
-		frappe.call({
-			method: "erpnext.templates.pages.addresses.get_addresses",
-			callback: function(r) {
-				$("#address-list .progress").remove();
-				var $list = $("#address-list");
-
-				if(!(r.message && r.message.length)) {
-					$list.html("<div class='alert'>No Addresses Found</div>");
-					return;
-				}
-
-				$.each(r.message, function(i, address) {
-					address.url_name = encodeURIComponent(address.name);
-					$(repl('<div> \
-						<p><a href="/address?name=%(url_name)s">%(name)s</a></p> \
-						<p>%(display)s</p> \
-						<hr> \
-					</div>', address)).appendTo($list);
-				});
-			}
-		});
-	};
-
-	$(document).ready(function() {
-		fetch_addresses();
-	});
-})();
-</script>
-
-<!-- no-sidebar -->
-{% endblock %}
-
diff --git a/erpnext/templates/pages/addresses.py b/erpnext/templates/pages/addresses.py
deleted file mode 100644
index d96ae9b..0000000
--- a/erpnext/templates/pages/addresses.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.shopping_cart.cart import get_address_docs
-
-no_cache = 1
-no_sitemap = 1
-
-@frappe.whitelist()
-def get_addresses():
-	return get_address_docs()
diff --git a/erpnext/templates/pages/ticket.html b/erpnext/templates/pages/ticket.html
deleted file mode 100644
index 67d4800..0000000
--- a/erpnext/templates/pages/ticket.html
+++ /dev/null
@@ -1,116 +0,0 @@
-{% 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: "erpnext.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 %}
diff --git a/erpnext/templates/pages/ticket.py b/erpnext/templates/pages/ticket.py
deleted file mode 100644
index 811f4fb..0000000
--- a/erpnext/templates/pages/ticket.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-from frappe.utils import today
-
-no_cache = 1
-no_sitemap = 1
-
-def get_context(context):
-	doc = frappe.get_doc("Issue", frappe.form_dict.name)
-	if doc.raised_by == frappe.session.user:
-		ticket_context = {
-			"title": doc.name,
-			"doc": doc
-		}
-	else:
-		ticket_context = {"title": "Not Allowed", "doc": {}}
-
-	return ticket_context
-
-@frappe.whitelist()
-def add_reply(ticket, message):
-	if not message:
-		raise frappe.throw(_("Please write something"))
-
-	doc = frappe.get_doc("Issue", ticket)
-	if doc.raised_by != frappe.session.user:
-		raise frappe.throw(_("You are not allowed to reply to this ticket."), frappe.PermissionError)
-
-	comm = frappe.get_doc({
-		"doctype":"Communication",
-		"subject": doc.subject,
-		"content": message,
-		"sender": doc.raised_by,
-		"sent_or_received": "Received"
-	})
-	comm.insert(ignore_permissions=True)
-
diff --git a/erpnext/templates/pages/tickets.html b/erpnext/templates/pages/tickets.html
deleted file mode 100644
index 40cd80e..0000000
--- a/erpnext/templates/pages/tickets.html
+++ /dev/null
@@ -1,92 +0,0 @@
-{% block title %} {{ title }} {% endblock %}
-
-{% block header %}<h2>{{ title }}</h2>{% endblock %}
-
-{% block content %}
-{% include "templates/includes/transactions.html" %}
-
-<script>
-	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-2" style="margin-bottom: 7px;"><span class="label %(label_class)s">\
-						%(status)s</span></div>\
-					<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-2 pull-right">\
-						<span class="text-muted">%(creation)s</span>\
-					</div>\
-				</div>\
-			</a>', doc)).appendTo($list);
-	};
-
-	frappe.ready(function() {
-		if(!window.$new_ticket) {
-			window.$new_ticket = $('<div>\
-					<button class="btn btn-primary" style="margin-bottom: 15px;" id="new-ticket">\
-						<i class="icon-tag icon-fixed-width"></i> New Ticket\
-					</button>\
-					<button class="btn btn-success hide" style="margin-bottom: 15px;" id="new-ticket-send">\
-						<i class="icon-arrow-right icon-fixed-width"></i> Send\
-					</button>\
-				</div>').insertBefore(".transaction-list");
-		}
-
-		window.$new_ticket.find("#new-ticket").on("click", function() {
-			$(this).addClass("hide");
-			$(window.$new_ticket).find("#new-ticket-send").removeClass("hide");
-			$('<div class="well" id="ticket-editor">\
-					<div class="form-group"><input class="form-control" type="data"\
-						 placeholder="Subject" data-fieldname="subject"></div>\
-					<div class="form-group"><textarea rows=10 class="form-control" \
-						 style="resize: vertical;" placeholder="Message" \
-						 data-fieldname="message"></textarea></div>\
-				</div>')
-				.insertAfter(window.$new_ticket);
-		});
-
-		window.$new_ticket.find("#new-ticket-send").on("click", function() {
-			var subject = $("#ticket-editor").find('[data-fieldname="subject"]').val().trim();
-			var message = $("#ticket-editor").find('[data-fieldname="message"]').val().trim();
-			if(!(subject && message)) {
-				msgprint("Please write something in subject and message!");
-			} else {
-				frappe.call({
-					type: "POST",
-					method: "erpnext.templates.pages.tickets.make_new_ticket",
-					btn: this,
-					args: { subject: subject, message: message },
-					callback: function(r) {
-						if(r.exc) {
-							msgprint(r._server_messages
-								? JSON.parse(r._server_messages).join("<br>")
-								: "Something went wrong!");
-						} else {
-							window.location.href = "ticket?name=" + encodeURIComponent(r.message);
-						}
-					}
-				})
-			}
-		});
-	});
-
-	var msgprint = function(txt) {
-		if(txt) $("#msgprint-alert").html(txt).toggle(true);
-	}
-</script>
-
-<!-- no-sidebar -->
-{% endblock %}
-
diff --git a/erpnext/templates/pages/tickets.py b/erpnext/templates/pages/tickets.py
deleted file mode 100644
index 393c020..0000000
--- a/erpnext/templates/pages/tickets.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint, formatdate
-
-no_cache = 1
-no_sitemap = 1
-
-def get_context(context):
-	return {
-		"title": "My Tickets",
-		"method": "erpnext.templates.pages.tickets.get_tickets",
-		"icon": "icon-ticket",
-		"empty_list_message": "No Tickets Raised",
-		"page": "ticket"
-	}
-
-@frappe.whitelist()
-def get_tickets(start=0):
-	tickets = frappe.db.sql("""select name, subject, status, creation
-		from `tabIssue` where raised_by=%s
-		order by modified desc
-		limit %s, 20""", (frappe.session.user, cint(start)), as_dict=True)
-	for t in tickets:
-		t.creation = formatdate(t.creation)
-
-	return tickets
-
-@frappe.whitelist()
-def make_new_ticket(subject, message):
-	if not (subject and message):
-		raise frappe.throw(_("Please write something in subject and message!"))
-
-	ticket = frappe.get_doc({
-		"doctype":"Issue",
-		"subject": subject,
-		"raised_by": frappe.session.user,
-	})
-	ticket.insert(ignore_permissions=True)
-
-	comm = frappe.get_doc({
-		"doctype":"Communication",
-		"subject": subject,
-		"content": message,
-		"sender": frappe.session.user,
-		"sent_or_received": "Received",
-		"reference_doctype": "Issue",
-		"reference_name": ticket.name
-	})
-	comm.insert(ignore_permissions=True)
-
-	return ticket.name