offline email for POS
diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index 070dbeb..476ce45 100644
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -5,6 +5,7 @@
 import frappe, json
 from frappe.utils import nowdate
 from erpnext.setup.utils import get_exchange_rate
+from frappe.core.doctype.communication.email import make
 from erpnext.stock.get_item_details import get_pos_profile
 from erpnext.accounts.party import get_party_account_currency
 from erpnext.controllers.accounts_controller import get_taxes_and_charges
@@ -257,12 +258,14 @@
 	return pricing_rules
 
 @frappe.whitelist()
-def make_invoice(doc_list):
+def make_invoice(doc_list, email_queue_list):
 	if isinstance(doc_list, basestring):
 		doc_list = json.loads(doc_list)
 
-	name_list = []
+	if isinstance(email_queue_list, basestring):
+		email_queue = json.loads(email_queue_list)
 
+	name_list = []
 	for docs in doc_list:
 		for name, doc in docs.items():
 			if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name}):
@@ -270,17 +273,37 @@
 				si_doc = frappe.new_doc('Sales Invoice')
 				si_doc.offline_pos_name = name
 				si_doc.update(doc)
-				submit_invoice(si_doc, name)
+				submit_invoice(si_doc, name, doc)
 				name_list.append(name)
 			else:
 				name_list.append(name)
 
-	return name_list
+	email_queue = make_email_queue(email_queue)
+	return {
+		'invoice': name_list,
+		'email_queue': email_queue
+	}
 
 def validate_records(doc):
 	validate_customer(doc)
 	validate_item(doc)
 
+def make_email_queue(email_queue):
+	name_list = []
+	for key, data in email_queue.items():
+		name = frappe.db.get_value('Sales Invoice', {'offline_pos_name': key}, 'name')
+		data = json.loads(data)
+		sender = frappe.session.user
+		print_format = "POS Invoice"
+		attachments = [frappe.attach_print('Sales Invoice', name, print_format= print_format)]
+
+		make(subject = data.get('subject'), content = data.get('content'), recipients = data.get('recipients'),
+			sender=sender,attachments = attachments, send_email=True,
+			doctype='Sales Invoice', name=name)
+		name_list.append(key)
+
+	return name_list
+
 def validate_customer(doc):
 	if not frappe.db.exists('Customer', doc.get('customer')):
 		customer_doc = frappe.new_doc('Customer')
@@ -328,7 +351,8 @@
 			item_doc.save(ignore_permissions=True)
 			frappe.db.commit()
 
-def submit_invoice(si_doc, name):
+
+def submit_invoice(si_doc, name, doc):
 	try:
 		si_doc.insert()
 		si_doc.submit()
diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js
index e405ae0..064c5f7 100644
--- a/erpnext/accounts/page/pos/pos.js
+++ b/erpnext/accounts/page/pos/pos.js
@@ -95,11 +95,65 @@
 			me.sync_sales_invoice()
 		});
 
+		this.page.add_menu_item(__("Email"), function () {
+			if(me.frm.doc.docstatus == 1) {
+				me.email_prompt()
+			}
+		});
+
 		this.page.add_menu_item(__("POS Profile"), function () {
 			frappe.set_route('List', 'POS Profile');
 		});
 	},
 
+	email_prompt: function() {
+		var me = this;
+		fields = [{label:__("To"), fieldtype:"Data", reqd: 0, fieldname:"recipients",length:524288},
+			{fieldtype: "Section Break", collapsible: 1, label: "CC & Standard Reply"},
+			{fieldtype: "Section Break"},
+			{label:__("Subject"), fieldtype:"Data", reqd: 1,
+				fieldname:"subject",length:524288},
+			{fieldtype: "Section Break"},
+			{label:__("Message"), fieldtype:"Text Editor", reqd: 1,
+				fieldname:"content"},
+			{fieldtype: "Section Break"},
+			{fieldtype: "Column Break"}];
+
+		this.email_dialog = new frappe.ui.Dialog({
+			title: "Email",
+			fields: fields,
+			primary_action_label: __("Send"),
+			primary_action: function() {
+				me.send_action();
+			}
+		});
+
+		this.email_dialog.show()
+	},
+
+	send_action: function() {
+		this.email_queue = this.get_email_queue()
+		this.email_queue[this.frm.doc.offline_pos_name] = JSON.stringify(this.email_dialog.get_values())
+		this.update_email_queue()
+		this.email_dialog.hide()
+	},
+
+	update_email_queue: function () {
+		try {
+			localStorage.setItem('email_queue', JSON.stringify(this.email_queue));
+		} catch (e) {
+			frappe.throw(__("LocalStorage is full , did not save"))
+		}
+	},
+
+	get_email_queue: function () {
+		try {
+			return JSON.parse(localStorage.getItem('email_queue')) || {};
+		} catch (e) {
+			return {}
+		}
+	},
+
 	dialog_actions: function () {
 		var me = this;
 
@@ -1282,18 +1336,22 @@
 
 	sync_sales_invoice: function () {
 		var me = this;
-		this.si_docs = this.get_submitted_invoice();
+		this.si_docs = this.get_submitted_invoice() || [];
+		this.email_queue_list = this.get_email_queue() || {};
 
-		if (this.si_docs.length) {
+		if (this.si_docs.length || this.email_queue_list) {
 			frappe.call({
 				method: "erpnext.accounts.doctype.sales_invoice.pos.make_invoice",
 				args: {
-					doc_list: me.si_docs
+					doc_list: me.si_docs,
+					email_queue_list: me.email_queue_list
 				},
 				callback: function (r) {
 					if (r.message) {
-						me.removed_items = r.message;
+						me.removed_items = r.message.invoice;
+						me.removed_email = r.message.email_queue
 						me.remove_doc_from_localstorage();
+						me.remove_email_queue_from_localstorage();
 					}
 				}
 			})
@@ -1323,10 +1381,10 @@
 		var me = this;
 		this.si_docs = this.get_doc_from_localstorage();
 		this.new_si_docs = [];
-		if (this.removed_items) {
+		if (this.removed_email) {
 			$.each(this.si_docs, function (index, data) {
 				for (key in data) {
-					if (!in_list(me.removed_items, key)) {
+					if (!in_list(me.removed_email, key)) {
 						me.new_si_docs.push(data);
 					}
 				}
@@ -1336,6 +1394,19 @@
 		}
 	},
 
+	remove_email_queue_from_localstorage: function() {
+		var me = this;
+		this.email_queue = this.get_email_queue()
+		if (this.removed_email) {
+			$.each(this.email_queue_list, function (index, data) {
+				if (in_list(me.removed_email, index)) {
+					delete me.email_queue[index]
+				}
+			})
+			this.update_email_queue();
+		}
+	},
+
 	validate: function () {
 		var me = this;
 		this.customer_validate();
diff --git a/erpnext/public/js/pos/pos.html b/erpnext/public/js/pos/pos.html
index 1019647..8a08a8b 100644
--- a/erpnext/public/js/pos/pos.html
+++ b/erpnext/public/js/pos/pos.html
@@ -65,10 +65,10 @@
 
 			</div>
 			<div class="row">
-				<div class="col-xs-5 selected-item">
+				<div class="col-xs-6 selected-item">
 					
 		        </div>
-				<div class="col-xs-7 numeric_keypad" style="display:none">
+				<div class="col-xs-6 numeric_keypad" style="display:none">
 					{% var chartData = ["Qty", "Disc", "Price"] %}
 					{% for(var i=0; i<3; i++) { %}
 						<div class="row text-right">
@@ -100,10 +100,10 @@
 				<div class="app-listing item-list"></ul>
     		</div>
     	</div>
-		<!-- <div class="row">
+		<div class="row">
 			<div class="text-right list-paging-area">
 				<button class="btn btn-default btn-more btn-sm" style="margin:5px 20px">{{ __("More") }}</button>
 			</div>
-		</div> -->
+		</div>
     </div>
 </div>
diff --git a/erpnext/public/js/pos/pos_selected_item.html b/erpnext/public/js/pos/pos_selected_item.html
index 833cdd9..4260cf7 100644
--- a/erpnext/public/js/pos/pos_selected_item.html
+++ b/erpnext/public/js/pos/pos_selected_item.html
@@ -1,4 +1,3 @@
-<h5 style="margin-top:5px">Item <span class="text-primary no-margin font-montserrat">{%= item_name %}</h5>
 <div class="pos-bill-item" data-item-code="{%= item_code %}">
 	<div class="form-group edit-pos-item">
 		<label class=" text-left col-xs-4">Price:</label>