Fixed serial no trigger not working from dialog box
diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.js b/erpnext/accounts/doctype/pos_profile/pos_profile.js
index 03d84e9..97bbc122 100755
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.js
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.js
@@ -8,10 +8,6 @@
 		return { filters: { selling: 1 } };
 	});
 
-	frm.set_query("print_format", function() {
-		return { filters: { doc_type: "Sales Invoice", print_format_type: "Js"} };
-	});
-
 	erpnext.queries.setup_queries(frm, "Warehouse", function() {
 		return erpnext.queries.warehouse(frm.doc);
 	});
@@ -27,6 +23,27 @@
 });
 
 frappe.ui.form.on('POS Profile', {
+	setup: function(frm) {
+		frm.set_query("online_print_format", function() {
+			return {
+				filters: [
+					['Print Format', 'doc_type', '=', 'Sales Invoice'],
+					['Print Format', 'print_format_type', '!=', 'Js'],
+				]
+			};
+		});
+
+		frm.set_query("print_format", function() {
+			return { filters: { doc_type: "Sales Invoice", print_format_type: "Js"} };
+		});
+
+		frappe.db.get_value('POS Settings', {name: 'POS Settings'}, 'is_online', (r) => {
+			is_online = r && cint(r.is_online)
+			frm.toggle_display('offline_pos_section', !is_online);
+			frm.toggle_display('print_format_for_online', is_online);
+		});
+	},
+
 	refresh: function(frm) {
 		if(frm.doc.company) {
 			frm.trigger("toggle_display_account_head");
diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.json b/erpnext/accounts/doctype/pos_profile/pos_profile.json
index c4e6dab..187454e 100644
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.json
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.json
@@ -631,8 +631,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "default": "Point of Sale", 
-   "fieldname": "print_format", 
+   "fieldname": "print_format_for_online", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -641,7 +640,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "Print Format", 
+   "label": "Print Format for Online", 
    "length": 0, 
    "no_copy": 0, 
    "options": "Print Format", 
@@ -883,7 +882,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
-   "fieldname": "customer_details", 
+   "fieldname": "offline_pos_section", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
@@ -892,7 +891,7 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "New Customer Details", 
+   "label": "Offline POS Section", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -975,6 +974,38 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "default": "Point of Sale", 
+   "fieldname": "print_format", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Print Format", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Print Format", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
    "fieldname": "customer_group", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -1291,7 +1322,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2017-08-27 16:39:00.713225", 
+ "modified": "2017-09-01 15:55:14.890452", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "POS Profile", 
diff --git a/erpnext/accounts/print_format/point_of_sale/point_of_sale.json b/erpnext/accounts/print_format/point_of_sale/point_of_sale.json
index 28c853c..4e69cad 100644
--- a/erpnext/accounts/print_format/point_of_sale/point_of_sale.json
+++ b/erpnext/accounts/print_format/point_of_sale/point_of_sale.json
@@ -10,7 +10,7 @@
  "html": "<style>\n\t.print-format table, .print-format tr, \n\t.print-format td, .print-format div, .print-format p {\n\t\tfont-family: Monospace;\n\t\tline-height: 200%;\n\t\tvertical-align: middle;\n\t}\n\t@media screen {\n\t\t.print-format {\n\t\t\twidth: 4in;\n\t\t\tpadding: 0.25in;\n\t\t\tmin-height: 8in;\n\t\t}\n\t}\n</style>\n\n<p class=\"text-center\">\n\t{{ company }}<br>\n\t{{  __(\"POS No : \") }} {{ offline_pos_name }}<br>\n</p>\n<p>\n\t<b>{{ __(\"Customer\") }}:</b> {{ customer }}<br>\n</p>\n\n<p>\n\t<b>{{ __(\"Date\") }}:</b> {{ dateutil.global_date_format(posting_date) }}<br>\n</p>\n\n<hr>\n<table class=\"table table-condensed cart no-border\">\n\t<thead>\n\t\t<tr>\n\t\t\t<th width=\"50%\">{{ __(\"Item\") }}</b></th>\n\t\t\t<th width=\"25%\" class=\"text-right\">{{ __(\"Qty\") }}</th>\n\t\t\t<th width=\"25%\" class=\"text-right\">{{ __(\"Amount\") }}</th>\n\t\t</tr>\n\t</thead>\n\t<tbody>\n\t\t{% for item in items %}\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t{{ item.item_name }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">{{ format_number(item.qty, null,precision(\"difference\")) }}<br>@ {{ format_currency(item.rate, currency) }}</td>\n\t\t\t<td class=\"text-right\">{{ format_currency(item.amount, currency) }}</td>\n\t\t</tr>\n\t\t{% endfor %}\n\t</tbody>\n</table>\n\n<table class=\"table table-condensed no-border\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ __(\"Net Total\") }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ format_currency(total, currency) }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{% for row in taxes %}\n\t\t{% if not row.included_in_print_rate %}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ row.description }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ format_currency(row.tax_amount, currency) }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{% endif %}\n\t\t{% endfor %}\n\t\t{% if discount_amount %}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 75%\">\n\t\t\t\t{{ __(\"Discount\") }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ format_currency(discount_amount, currency) }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{% endif %}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 75%\">\n\t\t\t\t<b>{{ __(\"Grand Total\") }}</b>\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ format_currency(grand_total, currency) }}\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 75%\">\n\t\t\t\t<b>{{ __(\"Paid Amount\") }}</b>\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ format_currency(paid_amount, currency) }}\n\t\t\t</td>\n\t\t</tr>\n\t</tbody>\n</table>\n\n\n<hr>\n<p>{{ terms }}</p>\n<p class=\"text-center\">{{ __(\"Thank you, please visit again.\") }}</p>", 
  "idx": 0, 
  "line_breaks": 0, 
- "modified": "2017-05-19 14:36:04.740728", 
+ "modified": "2017-09-01 14:27:04.871233", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Point of Sale", 
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 3a8ddb5..f2c3d60 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -4,6 +4,7 @@
 erpnext.TransactionController = erpnext.taxes_and_totals.extend({
 	setup: function() {
 		this._super();
+		frappe.flags.hide_serial_batch_dialog = false;
 		frappe.ui.form.on(this.frm.doctype + " Item", "rate", function(frm, cdt, cdn) {
 			var item = frappe.get_doc(cdt, cdn);
 			var has_margin_field = frappe.meta.has_field(cdt, 'margin_type');
@@ -314,12 +315,15 @@
 						if(!r.exc) {
 							me.frm.script_manager.trigger("price_list_rate", cdt, cdn);
 							me.toggle_conversion_factor(item);
-							if(show_batch_dialog) {
+							if(show_batch_dialog && !frappe.flags.hide_serial_batch_dialog) {
 								var d = locals[cdt][cdn];
 								$.each(r.message, function(k, v) {
 									if(!d[k]) d[k] = v;
 								});
-								erpnext.show_serial_batch_selector(me.frm, d);
+
+								erpnext.show_serial_batch_selector(me.frm, d, (item) => {
+									me.frm.script_manager.trigger('qty', item.doctype, item.name);
+								});
 							}
 						}
 					}
@@ -1102,7 +1106,7 @@
 	},
 });
 
-erpnext.show_serial_batch_selector = function(frm, d) {
+erpnext.show_serial_batch_selector = function(frm, d, callback, show_dialog) {
 	frappe.require("assets/erpnext/js/utils/serial_no_batch_selector.js", function() {
 		new erpnext.SerialNoBatchSelector({
 			frm: frm,
@@ -1111,6 +1115,7 @@
 				type: "Warehouse",
 				name: d.warehouse
 			},
-		});
+			callback: callback
+		}, show_dialog);
 	});
 }
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.js b/erpnext/selling/page/point_of_sale/point_of_sale.js
index 0e6ecdd..354cdea 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -139,6 +139,7 @@
 	update_item_in_cart(item_code, field='qty', value=1) {
 		if(this.cart.exists(item_code)) {
 			const item = this.frm.doc.items.find(i => i.item_code === item_code);
+			frappe.flags.hide_serial_batch_dialog = false;
 
 			if (typeof value === 'string' && !in_list(['serial_no', 'batch_no'], field)) {
 				// value can be of type '+1' or '-1'
@@ -168,29 +169,28 @@
 
 		// add to cur_frm
 		const item = this.frm.add_child('items', args);
+		frappe.flags.hide_serial_batch_dialog = true;
 		this.frm.script_manager
 			.trigger('item_code', item.doctype, item.name)
 			.then(() => {
-				// update cart
-				this.update_cart_data(item);
+				const show_dialog = item.has_serial_no || item.has_batch_no;
+				if (show_dialog && field == 'qty') {
+					// check has serial no/batch no and update cart
+					this.select_batch_and_serial_no(item);
+				} else {
+					// update cart
+					this.update_cart_data(item);
+				}
 			});
 	}
 
 	select_batch_and_serial_no(item) {
-		new erpnext.SerialNoBatchSelector({
-			frm: this.frm,
-			item: item,
-			warehouse_details: {
-				type: "Warehouse",
-				name: item.warehouse
-			},
-			callback: (item) => {
-				this.update_item_in_frm(item)
-					.then(() => {
-						// update cart
-						this.update_cart_data(item);
-					});
-			}
+		erpnext.show_serial_batch_selector(this.frm, item, () => {
+			this.update_item_in_frm(item)
+				.then(() => {
+					// update cart
+					this.update_cart_data(item);
+				});
 		}, true);
 	}
 
@@ -308,7 +308,6 @@
 			frm.doc.items = [];
 			frm.set_value('is_pos', 1);
 			frm.meta.default_print_format = 'POS Invoice';
-
 			return frm;
 		}
 	}
@@ -340,6 +339,9 @@
 		if(this.frm.doc.docstatus !== 1) return;
 
 		this.page.set_secondary_action(__("Print"), () => {
+			if (this.pos_profile && this.pos_profile.print_format_for_online) {
+				this.frm.meta.default_print_format = this.pos_profile.print_format_for_online;
+			}
 			this.frm.print_preview.printit(true);
 		});