Merge branch 'account_stock_sync_error' of https://github.com/marination/erpnext into marination-account_stock_sync_error
diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py
index 38f283c..4e9ef0b 100644
--- a/erpnext/accounts/general_ledger.py
+++ b/erpnext/accounts/general_ledger.py
@@ -163,16 +163,29 @@
 						.format(account), StockAccountInvalidTransaction)
 
 			elif account_bal != stock_bal:
-				error_reason = _("Account Balance ({0}) and Stock Value ({1}) is out of sync for account {2} and it's linked warehouses.").format(
-					account_bal, stock_bal, frappe.bold(account))
-				error_resolution = _("Please create adjustment Journal Entry for amount {0} ").format(frappe.bold(stock_bal - account_bal))
-				button_text = _("Make Adjustment Entry")
+				diff = flt(stock_bal - account_bal)
+				error_reason = _("Stock Value ({0}) and Account Balance ({1}) are out of sync for account {2} and it's linked warehouses.").format(
+					stock_bal, account_bal, frappe.bold(account))
+				error_resolution = _("Please create adjustment Journal Entry for amount {0} ").format(frappe.bold(diff))
+				stock_adjustment_account = frappe.db.get_value("Company",gl_map[0].company,"stock_adjustment_account")
 
-				frappe.throw("""{0}<br></br>{1}<br></br>
-					<div style="text-align:right;">
-					<button class="btn btn-primary" onclick="frappe.new_doc('Journal Entry')">{2}</button>
-					</div>""".format(error_reason, error_resolution, button_text),
-					StockValueAndAccountBalanceOutOfSync, title=_('Account Balance Out Of Sync'))
+				db_or_cr_warehouse_account =('credit_in_account_currency' if diff < 0 else 'debit_in_account_currency')
+				db_or_cr_stock_adjustment_account = ('debit_in_account_currency' if diff < 0 else 'credit_in_account_currency')
+
+				journal_entry_args = {
+				'accounts':[
+					{'account': account, db_or_cr_warehouse_account : abs(diff)},
+					{'account': stock_adjustment_account, db_or_cr_stock_adjustment_account : abs(diff) }]
+				}
+
+				frappe.msgprint(msg="""{0}<br></br>{1}<br></br>""".format(error_reason, error_resolution),
+					raise_exception=StockValueAndAccountBalanceOutOfSync,
+					title=_('Values Out Of Sync'),
+					primary_action={
+						'label': 'Make JV',
+						'client_action': 'erpnext.route_to_adjustment_jv',
+						'args': journal_entry_args
+					})
 
 def validate_cwip_accounts(gl_map):
 	cwip_enabled = cint(frappe.get_cached_value("Company",
diff --git a/erpnext/public/js/controllers/accounts.js b/erpnext/public/js/controllers/accounts.js
index 3dfc891..eb99192 100644
--- a/erpnext/public/js/controllers/accounts.js
+++ b/erpnext/public/js/controllers/accounts.js
@@ -64,7 +64,7 @@
 				}
 			})
 		}
-	}	
+	}
 });
 
 frappe.ui.form.on('Sales Invoice Payment', {
@@ -356,3 +356,19 @@
 	}
 	return out;
 }
+
+erpnext.route_to_adjustment_jv = (args) => {
+	frappe.model.with_doctype('Journal Entry', () => {
+		// route to adjustment Journal Entry to handle Account Balance and Stock Value mismatch
+		let journal_entry = frappe.model.get_new_doc('Journal Entry');
+
+		args.accounts.forEach((je_account) => {
+			let child_row = frappe.model.add_child(journal_entry, "accounts");
+			child_row.account = je_account.account;
+			child_row.debit_in_account_currency = je_account.debit_in_account_currency;
+			child_row.credit_in_account_currency = je_account.credit_in_account_currency;
+			child_row.party_type = "" ;
+		});
+		frappe.set_route('Form','Journal Entry', journal_entry.name);
+	});
+}
\ No newline at end of file