Merge branch 'master' into develop
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index 76123b1..ff8701a 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -5,7 +5,7 @@
 from erpnext.hooks import regional_overrides
 from frappe.utils import getdate
 
-__version__ = '10.0.19'
+__version__ = '10.0.20'
 
 def get_default_company(user=None):
 	'''Get default company for user'''
diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04.json
index e109a3a..e29ad82 100644
--- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04.json
+++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04.json
@@ -176,7 +176,7 @@
                         "Eingeforderte Nachsch\u00fcsse (gegenkonto 2929)": {}
                     }, 
                     "Eingeforderte- noch ausstehende Kapitaleinlagen": {
-                        "Ausstehende Einlagen auf das gezeichnete Kapital- eingefordert (Forderungen- nicht eingeforderte ausstehende Einlagen s. Konto 2910)": {}
+                        "Ausstehende Einlagen auf das gezeichnete Kapital- eingefordert": {}
                     }, 
                     "Forderungen aus Lieferungen und Leistungen H-Saldo": {
                         "Einzelwertberechtigungen zu Forderungen mit einer Restlaufzeit bis zu 1 Jahr": {}, 
@@ -685,7 +685,6 @@
                         "Umsatzsteuer aus innergemeinschaftlichem Erwerb 16%": {}, 
                         "Umsatzsteuer aus innergemeinschaftlichem Erwerb 19%": {}, 
                         "Umsatzsteuer aus innergemeinschaftlichem Erwerb ohne Vorsteuerabzug": {}, 
-                        "Umsatzsteuer aus innergemeinschaftlichem Erwerb von Neufahrzeugen von Lieferanten ohne Umsatzsteuer-Identifikationsnummer": {}, 
                         "Umsatzsteuer fr\u00fchere Jahre": {}, 
                         "Umsatzsteuer laufendes Jahr": {}, 
                         "Umsatzsteuer nach \u00a713b UStG": {}, 
@@ -747,7 +746,7 @@
                     "Verbindlichkeiten gegen\u00fcber Kreditinstituten ": {
                         "Gegenkonto 3159-3209 bei Aufteilung der Konten 3210-3248": {}
                     }, 
-                    "Verbindlichkeiten gegen\u00fcber Kreditinstituten oder Kassenbestand- Bundesbankguthaben- Guthaben bei Kreditinstituten und Schecks": {
+                    "Verbindlichkeiten gegen\u00fcber Kreditinstituten - Bundesbankguthaben- Guthaben bei Kreditinstituten und Schecks": {
                         "Verbindlichkeiten gegen\u00fcber Kreditinstituten  1": {
                             "(frei- in Bilanz kein Restlaufzeit vermerkt) 1": {}, 
                             "Verbindlichkeiten gegen\u00fcber Kreditinstituten Restlaufzeit 1 bis 5 Jahre": {}, 
@@ -778,8 +777,8 @@
         }, 
         "Gewinn u. Verlust - Aufwendungen": {
             "Betriebliche Aufwendungen": {
-                "Abschreibungen a. Verm\u00f6gensgeg.  d. Umlaufverm\u00f6gens- soweit diese die in der Kapitalgesellschaft \u00fcblichen Abschreibungen \u00fcberschreiten": {
-                    "Abschreibungen a. Verm\u00f6gensgeg. d. Umlaufverm\u00f6gens- soweit diese die in der Kapitalgesellschaft \u00fcblichen Abschreibungen \u00fcberschreiten": {
+                "Abschreibungen a. Verm\u00f6gensgeg. d.  Umlaufverm\u00f6gens- soweit diese die in der Abschreibungen \u00fcberschreiten": {
+                    "Abschreibungen a. Verm\u00f6gensgeg. d. Umlaufverm\u00f6gens- soweit diese die in der Abschreibungen \u00fcberschreiten": {
                         "Abschreibungen auf Umlaufverm\u00f6gen- steuerrechtlich bedingt (soweit un\u00fcblich hoch)": {}, 
                         "Abschreibungen auf Verm\u00f6gensgegenst\u00e4nde des Umlaufverm\u00f6gens (soweit un\u00fcblich hoch)": {}, 
                         "Forderungsverluste (soweit un\u00fcblich hoch)": {}, 
@@ -852,7 +851,7 @@
                 "Sonstige betriebliche Aufwendungen 3": {
                     "Sonstige betriebliche Aufwendungen 4": {
                         "Abgaben f\u00fcr betrieblich genutzten Grundbesitz": {}, 
-                        "Abgang von Wirtschaftsg\u00fctern des Umlaufverm\u00f6gens 100% / 50% nicht abzugsf\u00e4hig (inlandische Kap. Ges.) nach \u00a7 4 Abs. 3 Satz 4 EStG": {}, 
+                        "Abgang von Wirtschaftsg\u00fctern des Umlaufverm\u00f6gens 100% / 50% nicht abzugsf\u00e4hig (inlandische Kap. Ges.) nach": {}, 
                         "Abgang von Wirtschaftsg\u00fctern des Umlaufverm\u00f6gens nach \u00a7 4 Abs. 3 Satz 4 EStG": {}, 
                         "Abschluss- und Pr\u00fcfungskosten": {}, 
                         "Abschreibung auf Umlaufverm\u00f6gen au\u00dfer Vorr\u00e4te und Wertpapieren des UV (\u00fcbliche H\u00f6he)": {}, 
@@ -867,7 +866,7 @@
                         "Aufwendungen aus Anteilen an Kapitalgesellschaften 100% / 50% nicht abzugsf\u00e4hig (inlandische Kap. Ges.)": {}, 
                         "Aufwendungen aus Bewertung Finanzmittelfonds": {}, 
                         "Aufwendungen aus Kursdifferenzen": {}, 
-                        "Aufwendungen aus der Ver\u00e4u\u00dferung von Anteilen an Kapitalgesellschaften 100% / 50% nicht abzugsf\u00e4hig (inl\u00e4ndische Kap. Ges.)": {}, 
+                        "Aufwendungen aus der Ver\u00e4u\u00dferung von Anteilen an Kapitalgesellschaften 100% / 50% nicht abzugsf\u00e4hig": {}, 
                         "Aufwendungen aus der Zuschreibung von steuertlich niedriger bewerteten R\u00fcckstellungen": {}, 
                         "Aufwendungen aus der Zuschreibung von steuertlich niedriger bewerteten Verbindlichkeiten": {}, 
                         "Aufwendungen f\u00fcr Abraum- und Abfallbeseitigung": {}, 
@@ -987,9 +986,9 @@
                         "Verg\u00fctungen an Mitunternehmer \u00a7 15 EStG": {}, 
                         "Verkaufsprovisionen": {}, 
                         "Verluste aus dem Abgang von Gegenst\u00e4nden des Anlageverm\u00f6gens": {}, 
-                        "Verluste aus dem Abgang von Gegenst\u00e4nden des Umlaufverm\u00f6gens (au\u00dfer Vorr\u00e4te) 100% / 50% nicht anzugsf\u00e4hig (inlandische Kap. Ges.)": {}, 
+                        "Verluste aus dem Abgang von Gegenst\u00e4nden des Umlaufverm\u00f6gens (au\u00dfer Vorr\u00e4te) 100%/50% nicht anzugsf\u00e4hig": {}, 
                         "Verluste aus dem Abgang von Gegenst\u00e4nden des Umlaufverm\u00f6gens au\u00dfer Vorr\u00e4te": {}, 
-                        "Verluste aus der Ver\u00e4u\u00dferung von Anteilen an Kapitalgesellschaften 100% / 50% nicht abzugsf\u00e4hig (inl\u00e4ndische Kap. Ges.)": {}, 
+                        "Verluste aus der Ver\u00e4u\u00dferung von Anteilen an Kapitalgesellschaften 100% / 50% nicht abzugsf\u00e4hig": {}, 
                         "Verpackungsmaterial": {}, 
                         "Versicherungen": {}, 
                         "Versicherungen f\u00fcr Geb\u00e4ude": {}, 
@@ -1020,10 +1019,10 @@
                         }, 
                         "Abschreibungen auf Finanzanlagen 100% / 50% nicht abzugsf\u00e4hig (inl\u00e4ndische Kap. Ges.)": {}, 
                         "Abschreibungen auf Finanzanlagen auf Grund steuerlicher Sondervorschriften": {}, 
-                        "Abschreibungen auf Finanzanlagen auf Grund steuerlicher Sondervorschriften 100% / 50% nicht abzugsf\u00e4hig (inl\u00e4ndische Kap. Ges.)": {}, 
+                        "Abschreibungen auf Finanzanlagen auf Grund steuerlicher Sondervorschriften 100% / 50% nicht abzugsf\u00e4hig": {}, 
                         "Abschreibungen auf Grund von Verlustanteilen an Mitunternehmerschaften \u00a7 8 GewStG": {}, 
                         "Abschreibungen auf Wertpapiere des Umlaufverm\u00f6gens": {}, 
-                        "Abschreibungen auf Wertpapiere des Umlaufverm\u00f6gens 100% / 50% nicht abzugsf\u00e4hig (inl\u00e4ndische Kap. Ges.)": {}, 
+                        "Abschreibungen auf Wertpapiere des Umlaufverm\u00f6gens 100% / 50% nicht abzugsf\u00e4hig": {}, 
                         "Vorwegnahme k\u00fcnftiger Wertschwankungen bei Wertpapieren des Umlaufverm\u00f6gens": {}
                     }, 
                     "account_type": "Depreciation"
@@ -1123,15 +1122,15 @@
                     }
                 }, 
                 "Erh\u00f6hung oder Verminderung des Bestands an fertigen und unfertige Erzeugnissen": {
-                    "Erh\u00f6hung des Bestands an fertigen und unfertigen Erzeugnissen oder Verminderung des Bestands an fertigen und unfertigen Erzeugnissen": {
+                    "Erh\u00f6hung / Verminderung des Bestands an fertigen und unfertigen Erzeugnissen": {
                         "Bestandsver\u00e4nderungen - fertige Erzeugnisse": {}, 
                         "Bestandsver\u00e4nderungen - unfertige Erzeugnisse": {}, 
                         "Bestandsver\u00e4nderungen - unfertige Leistungen": {}
                     }, 
-                    "Erh\u00f6hung des Bestands in Arbeit befindlicher Auftr\u00e4ge oder Verminderung des Bestands in Arbeit befindlicher Auftr\u00e4ge": {
+                    "Erh\u00f6hung / Verminderung des Bestands in Arbeit befindlicher Auftr\u00e4ge": {
                         "Bestandsver\u00e4nderungen in Arbeit befindlicher Auftr\u00e4ge": {}
                     }, 
-                    "Erh\u00f6hung des Bestands in Ausf\u00fchrung befindlicher Bauaftr\u00e4ge oder Verminderung des Bestands in Ausf\u00fchrung befindlicher Bauauftr\u00e4ge": {
+                    "Erh\u00f6hung / Verminderung des Bestands in Ausf\u00fchrung befindlicher Bauaftr\u00e4ge": {
                         "Bestandsver\u00e4nderungen in Ausf\u00fchrung befindliche Bauauftr\u00e4ge": {}
                     }
                 }, 
@@ -1384,8 +1383,8 @@
                     "Sonstige Zinsen und \u00e4hnliche Ertr\u00e4ge 1": {
                         "Diskontertr\u00e4ge": {}, 
                         "Diskontertr\u00e4ge aus verbundenen Unternehmen": {}, 
-                        "Laufende Ertr\u00e4ge aus Anteilen an Kapitalgesellschaften (Umlaufverm\u00f6gen) 100% / 50% steuerfrei (inl\u00e4ndische Kap. Ges.)": {}, 
-                        "Laufende Ertr\u00e4ge aus Anteilen an Kapitalgesellschaften (verbundene Unternehmen) 100% / 50% steuerfrei (inl\u00e4ndische Kap. Ges.)": {}, 
+                        "Laufende Ertr\u00e4ge aus Anteilen an Kapitalgesellschaften 100% / 50% steuerfrei": {}, 
+                        "Laufende Ertr\u00e4ge aus Anteilen an Kapitalgesellschaften 100% / 50% steuerfrei": {}, 
                         "Sonstige Zinsen und \u00e4hnliche Ertr\u00e4ge 2": {}, 
                         "Sonstige Zinsen und \u00e4hnliche Ertr\u00e4ge aus verbundenen Unternehmen": {}, 
                         "Sonstige Zinsertr\u00e4ge": {}, 
diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/hu_chart_of_accounts.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/hu_chart_of_accounts.json
index 3ed6b1d..ea8ebf0 100644
--- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/hu_chart_of_accounts.json
+++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/hu_chart_of_accounts.json
@@ -588,7 +588,6 @@
 						"5592. Munk\u00e1ltat\u00f3 \u00e1ltal \u00f6nk\u00e9ntes p\u00e9nzt\u00e1rba befizetett munk\u00e1ltat\u00f3i tagd\u00edj hozz\u00e1j\u00e1rul\u00e1s": {}, 
 						"5593. Munk\u00e1ltat\u00f3t terhel\u0151 szem\u00e9lyi j\u00f6vedelemad\u00f3": {}, 
 						"5594. Munk\u00e1ltat\u00f3i hozz\u00e1j\u00e1rul\u00e1s a korengedm\u00e9nyes nyugd\u00edj ig\u00e9nybev\u00e9tel\u00e9hez": {}, 
-						"5595. Tal\u00e1lm\u00e1nyi d\u00edj, szabadalom v\u00e9tel\u00e1ra \u00e9s hasznos\u00edt\u00e1si d\u00edja, az \u00faj\u00edt\u00e1si d\u00edj \u00e9s ezekkel kapcsolatos k\u00f6zrem\u0171k\u00f6d\u00e9si d\u00edjak": {}, 
 						"5596. Fizetett szerz\u0151i, \u00edr\u00f3i \u00e9s m\u00e1s jogv\u00e9delmet \u00e9lvez\u0151 munk\u00e1k d\u00edjai \u00e9s ezekkel kapcsolatos k\u00f6zrem\u0171k\u00f6d\u0151i d\u00edjak": {}, 
 						"5597. Fizetett \u00f6szt\u00f6nd\u00edjak": {}, 
 						"5598. Reprezent\u00e1ci\u00f3s k\u00f6lts\u00e9gek, \u00e9tkez\u00e9si hozz\u00e1j\u00e1rul\u00e1s": {}, 
@@ -731,7 +730,7 @@
 					"8684. K\u00f6vetel\u00e9sek \u00e9rt\u00e9kveszt\u00e9se": {}
 				}, 
 				"869. K\u00fcl\u00f6nf\u00e9le egy\u00e9b r\u00e1ford\u00edt\u00e1sok": {
-					"8691. T\u00e1rsas\u00e1gba bevitt, \u00e9rt\u00e9kpap\u00edrnak vagy r\u00e9szesed\u00e9snek nem min\u0151s\u00fcl\u0151 vagyont. k\u00f6nyv szerinti \u00e9s l\u00e9t. okir. meghat. veszt. k\u00fcl\u00f6nb\u00f6zet": {}, 
+					"8691. T\u00e1rsas\u00e1gba bevitt, \u00e9rt\u00e9kpap\u00edrnak vagy r\u00e9szesed\u00e9snek nem min\u0151s\u00fcl\u0151 vagyont.": {}, 
 					"8692. Ellent\u00e9telez\u00e9s n\u00e9lk\u00fcl \u00e1tv\u00e1llalt k\u00f6telezetts\u00e9g szerz\u0151d\u00e9s szerinti \u00f6sszege": {}, 
 					"8693. T\u00e9r\u00edt\u00e9s n\u00e9lk\u00fcl \u00e1tadott, r\u00e9szesed\u00e9snek vagy \u00e9rt\u00e9kpap\u00edrnak nem min\u0151s\u00fcl\u0151 eszk\u00f6z\u00f6k nyilv\u00e1ntart\u00e1s szerinti \u00e9rt\u00e9ke": {}, 
 					"8694. T\u00e9r\u00edt\u00e9s n\u00e9lk\u00fcl ny\u00fajtott szolg\u00e1ltat\u00e1sok beker\u00fcl\u00e9si \u00e9rt\u00e9ke": {}, 
@@ -813,12 +812,7 @@
 					"9684. R\u00e9szesed\u00e9sek \u00e9rt\u00e9kveszt\u00e9s\u00e9nek vissza\u00edr\u00e1sa": {}
 				}, 
 				"969. K\u00fcl\u00f6nf\u00e9le egy\u00e9b bev\u00e9telek": {
-					"9691. Gazdas\u00e1gi t\u00e1rsas\u00e1gba bevitt, \u00e9rt\u00e9kp. vagy r\u00e9szesed\u00e9snek nem min\u0151s\u00fcl\u0151 vagyont. \u00e9rt\u00e9ke \u00e9s l\u00e9tes\u00edt\u0151 okir. \u00e9rt. nyer. jell . k\u00fcl\u00f6nb.": {}, 
-					"9692. El\u00e9v\u00fclt k\u00f6telezetts\u00e9g k\u00f6nyv szerinti \u00e9rt\u00e9ke": {}, 
-					"9693. T\u00e9r\u00edt\u00e9s n\u00e9lk\u00fcl \u00e1tvett, aj\u00e1nd\u00e9kk\u00e9nt, hagyat\u00e9kk\u00e9nt kapott, fellelt eszk\u00f6z\u00f6k piaci vagy jogszab\u00e1ly szerinti \u00e9rt\u00e9ke": {}, 
-					"9694. T\u00e9r\u00edt\u00e9s n\u00e9lk\u00fcl kapott szolg\u00e1ltat\u00e1sok piaci vagy jogszab\u00e1ly szerinti \u00e9rt\u00e9ke": {}, 
-					"9695. Elengedett \u00e9s ellent\u00e9telez\u00e9s n\u00e9lk\u00fcl \u00e1tv\u00e1llalt k\u00f6telezetts\u00e9g \u00e9rt\u00e9ke": {}, 
-					"9696. Egy\u00e9b, vagyonn\u00f6veked\u00e9ssel j\u00e1r\u00f3 bev\u00e9telek": {}
+					"is_group": 1
 				}
 			}, 
 			"97. P\u00c9NZ\u00dcGYI M\u0170VELETEK BEV\u00c9TELEI": {
diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js
index a852b76..3be2dcd 100644
--- a/erpnext/accounts/page/pos/pos.js
+++ b/erpnext/accounts/page/pos/pos.js
@@ -15,6 +15,7 @@
 			cur_pos = wrapper.pos;
 		} else {
 			// online
+			frappe.flags.is_online = true
 			frappe.set_route('point-of-sale');
 		}
 	});
@@ -24,6 +25,10 @@
 	window.onbeforeunload = function () {
 		return wrapper.pos.beforeunload()
 	}
+
+	if (frappe.flags.is_online) {
+		frappe.set_route('point-of-sale');
+	}
 }
 
 erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.html b/erpnext/accounts/report/general_ledger/general_ledger.html
index 90e8059..9e1b884 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.html
+++ b/erpnext/accounts/report/general_ledger/general_ledger.html
@@ -22,7 +22,7 @@
 			<th style="width: 25%">{%= __("Party") %}</th>
 			<th style="width: 15%">{%= __("Debit") %}</th>
 			<th style="width: 15%">{%= __("Credit") %}</th>
-			<th style="width: 18%">{%= __("Balance") %}</th>
+			<th style="width: 18%">{%= __("Balance (Dr - Cr)") %}</th>
 		</tr>
 	</thead>
 	<tbody>
@@ -76,11 +76,11 @@
 				{% } %}
 			{% } %}
 			{% if(filters.print_in_account_currency) { %}
-				<td style="text-align: right">{%= get_currency_symbol(data[i].account_currency)%} 
-					{%= data[i].balance_in_account_currency %}</td>
+				<td style="text-align: right">
+					{%= format_currency(data[i].balance_in_account_currency, data[i].account_currency) %}
+				</td>
 			{% } else { %}
-				<td style="text-align: right">{%= get_currency_symbol()%} 
-					{%= data[i].balance %}</td>
+				<td style="text-align: right">{%= format_currency(data[i].balance) %}</td>
 			{% } %}
 			</tr>
 		{% } %}
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py
index b6b26b1..8e4259c 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.py
+++ b/erpnext/accounts/report/general_ledger/general_ledger.py
@@ -241,13 +241,13 @@
 		if not d.get('posting_date'):
 			balance, balance_in_account_currency = 0, 0
 
-		balance, label = get_balance(d, balance, 'debit', 'credit')
-		d['balance'] = '{0} {1}'.format(fmt_money(abs(balance)), label)
+		balance = get_balance(d, balance, 'debit', 'credit')
+		d['balance'] = balance
 
 		if filters.get("show_in_account_currency"):
-			balance_in_account_currency, label = get_balance(d, balance_in_account_currency,
+			balance_in_account_currency = get_balance(d, balance_in_account_currency,
 				'debit_in_account_currency', 'credit_in_account_currency')
-			d['balance_in_account_currency'] = '{0} {1}'.format(fmt_money(abs(balance_in_account_currency)), label)
+			d['balance_in_account_currency'] = balance_in_account_currency
 		else:
 			d['debit_in_account_currency'] = d.get('debit', 0)
 			d['credit_in_account_currency'] = d.get('credit', 0)
@@ -268,9 +268,8 @@
 
 def get_balance(row, balance, debit_field, credit_field):
 	balance += (row.get(debit_field, 0) -  row.get(credit_field, 0))
-	label = 'DR' if balance > 0 else 'CR'
 
-	return balance, label
+	return balance
 
 def get_columns(filters):
 	columns = [
@@ -300,10 +299,10 @@
 			"width": 100
 		},
 		{
-			"label": _("Balance"),
+			"label": _("Balance (Dr - Cr)"),
 			"fieldname": "balance",
-			"fieldtype": "Data",
-			"width": 100
+			"fieldtype": "Float",
+			"width": 130
 		}
 	]
 
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index 2ec6b83..a64e76f 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -156,7 +156,7 @@
 
 			last_purchase_rate, is_stock_item = frappe.db.get_value("Item", it.item_code, ["last_purchase_rate", "is_stock_item"])
 			last_purchase_rate_in_sales_uom = last_purchase_rate / (it.conversion_factor or 1)
-			if flt(it.base_rate) < flt(last_purchase_rate_in_sales_uom):
+			if flt(it.base_rate) < flt(last_purchase_rate_in_sales_uom) and not self.is_return:
 				throw_message(it.item_name, last_purchase_rate_in_sales_uom, "last purchase rate")
 
 			last_valuation_rate = frappe.db.sql("""
@@ -166,7 +166,7 @@
 				""", (it.item_code, it.warehouse))
 			if last_valuation_rate:
 				last_valuation_rate_in_sales_uom = last_valuation_rate[0][0] / (it.conversion_factor or 1)
-				if is_stock_item and flt(it.base_rate) < flt(last_valuation_rate_in_sales_uom):
+				if is_stock_item and flt(it.base_rate) < flt(last_valuation_rate_in_sales_uom) and not self.is_return:
 					throw_message(it.name, last_valuation_rate_in_sales_uom, "valuation rate")
 
 
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index 4547ac1..0e35cb8 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -491,11 +491,13 @@
 		if self.doc.doctype == "Sales Invoice" \
 			and self.doc.paid_amount > self.doc.grand_total and not self.doc.is_return \
 			and any([d.type == "Cash" for d in self.doc.payments]):
+			grand_total = self.doc.rounded_total or self.doc.grand_total
+			base_grand_total = self.doc.base_rounded_total or self.doc.base_grand_total
 
-			self.doc.change_amount = flt(self.doc.paid_amount - self.doc.grand_total +
+			self.doc.change_amount = flt(self.doc.paid_amount - grand_total +
 				self.doc.write_off_amount, self.doc.precision("change_amount"))
 
-			self.doc.base_change_amount = flt(self.doc.base_paid_amount - self.doc.base_grand_total +
+			self.doc.base_change_amount = flt(self.doc.base_paid_amount - base_grand_total +
 				self.doc.base_write_off_amount, self.doc.precision("base_change_amount"))
 
 	def calculate_write_off_amount(self):
diff --git a/erpnext/hr/doctype/payroll_entry/payroll_entry.py b/erpnext/hr/doctype/payroll_entry/payroll_entry.py
index 0b4e3bf..77cece3 100644
--- a/erpnext/hr/doctype/payroll_entry/payroll_entry.py
+++ b/erpnext/hr/doctype/payroll_entry/payroll_entry.py
@@ -321,7 +321,7 @@
 			journal_entry.user_remark = _('Payment of salary from {0} to {1}')\
 				.format(self.start_date, self.end_date)
 			journal_entry.company = self.company
-			journal_entry.posting_date = nowdate()
+			journal_entry.posting_date = self.posting_date
 
 			payment_amount = flt(total_salary_amount.rounded_total, precision)
 
diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js
index 43f5705..99ee2a2 100644
--- a/erpnext/projects/doctype/timesheet/timesheet.js
+++ b/erpnext/projects/doctype/timesheet/timesheet.js
@@ -39,7 +39,7 @@
 
 	refresh: function(frm) {
 		if(frm.doc.docstatus==1) {
-			if(frm.doc.per_billed < 100){
+			if(frm.doc.per_billed < 100 && frm.doc.total_billable_hours && frm.doc.total_billable_hours > frm.doc.total_billed_hours){
 				frm.add_custom_button(__("Make Sales Invoice"), function() { frm.trigger("make_invoice") },
 					"fa fa-file-alt");
 			}
diff --git a/erpnext/projects/doctype/timesheet/timesheet.py b/erpnext/projects/doctype/timesheet/timesheet.py
index 01552a5..8d339b9 100644
--- a/erpnext/projects/doctype/timesheet/timesheet.py
+++ b/erpnext/projects/doctype/timesheet/timesheet.py
@@ -310,16 +310,16 @@
 
 @frappe.whitelist()
 def get_timesheet_data(name, project):
+	data = None
 	if project and project!='':
 		data = get_projectwise_timesheet_data(project, name)
 	else:
 		data = frappe.get_all('Timesheet',
 			fields = ["(total_billable_amount - total_billed_amount) as billing_amt", "total_billable_hours as billing_hours"], filters = {'name': name})
-
 	return {
-		'billing_hours': data[0].billing_hours,
-		'billing_amount': data[0].billing_amt,
-		'timesheet_detail': data[0].name if project and project!= '' else None
+		'billing_hours': data[0].billing_hours if data else None,
+		'billing_amount': data[0].billing_amt if data else None,
+		'timesheet_detail': data[0].name if data and project and project!= '' else None
 	}
 
 @frappe.whitelist()
@@ -327,6 +327,12 @@
 	target = frappe.new_doc("Sales Invoice")
 	timesheet = frappe.get_doc('Timesheet', source_name)
 
+	if not timesheet.total_billable_hours:
+		frappe.throw(_("Invoice can't be made for zero billing hour"))
+
+	if timesheet.total_billable_hours == timesheet.total_billed_hours:
+		frappe.throw(_("Invoice already created for all billing hours"))
+
 	hours = flt(timesheet.total_billable_hours) - flt(timesheet.total_billed_hours)
 	billing_amount = flt(timesheet.total_billable_amount) - flt(timesheet.total_billed_amount)
 	billing_rate = billing_amount / hours
diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js
index 4847dae..c1b020b 100644
--- a/erpnext/public/js/controllers/taxes_and_totals.js
+++ b/erpnext/public/js/controllers/taxes_and_totals.js
@@ -653,11 +653,14 @@
 
 			var payment_types = $.map(this.frm.doc.payments, function(d) { return d.type; });
 			if (in_list(payment_types, 'Cash')) {
-				this.frm.doc.change_amount = flt(this.frm.doc.paid_amount - this.frm.doc.grand_total +
+				var grand_total = this.frm.doc.rounded_total || this.frm.doc.grand_total;
+				var base_grand_total = this.frm.doc.base_rounded_total || this.frm.doc.base_grand_total;
+
+				this.frm.doc.change_amount = flt(this.frm.doc.paid_amount - grand_total +
 					this.frm.doc.write_off_amount, precision("change_amount"));
 
 				this.frm.doc.base_change_amount = flt(this.frm.doc.base_paid_amount -
-					this.frm.doc.base_grand_total + this.frm.doc.base_write_off_amount,
+					base_grand_total + this.frm.doc.base_write_off_amount,
 					precision("base_change_amount"));
 			}
 		}
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 5c2662c..2d77115 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -15,6 +15,7 @@
 			window.cur_pos = wrapper.pos;
 		} else {
 			// offline
+			frappe.flags.is_offline = true;
 			frappe.set_route('pos');
 		}
 	});
@@ -24,6 +25,10 @@
 	if (wrapper.pos) {
 		cur_frm = wrapper.pos.frm;
 	}
+
+	if (frappe.flags.is_offline) {
+		frappe.set_route('pos');
+	}
 }
 
 erpnext.pos.PointOfSale = class PointOfSale {
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index c3deaf2..254d7b7 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -65,10 +65,13 @@
 	from erpnext.selling.doctype.quotation.quotation import _make_sales_order
 	sales_order = frappe.get_doc(_make_sales_order(quotation.name, ignore_permissions=True))
 	for item in sales_order.get("items"):
-		item.reserved_warehouse = frappe.db.get_value("Item", item.item_code, "website_warehouse") or None
-		item_stock = get_qty_in_stock(item.item_code, "website_warehouse")
-		if item.qty > item_stock.stock_qty[0][0]:
-			throw(_("Only {0} in stock for item {1}").format(item_stock.stock_qty[0][0], item.item_code))
+		item.reserved_warehouse, is_stock_item = frappe.db.get_value("Item",
+			item.item_code, ["website_warehouse", "is_stock_item"]) or None, None
+
+		if is_stock_item:
+			item_stock = get_qty_in_stock(item.item_code, "website_warehouse")
+			if item.qty > item_stock.stock_qty[0][0]:
+				throw(_("Only {0} in stock for item {1}").format(item_stock.stock_qty[0][0], item.item_code))
 
 	sales_order.flags.ignore_permissions = True
 	sales_order.insert()