Merge pull request #18705 from surajshetty3416/fix-payment-entry-account-permission

fix: Check if account passed is accessible under Payment Entry
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index a34c3f6..e0d3e7a 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -648,13 +648,18 @@
 
 	orders = []
 	if voucher_type:
-		ref_field = "base_grand_total" if party_account_currency == company_currency else "grand_total"
+		if party_account_currency == company_currency:
+			grand_total_field = "base_grand_total"
+			rounded_total_field = "base_rounded_total"
+		else:
+			grand_total_field = "grand_total"
+			rounded_total_field = "rounded_total"
 
 		orders = frappe.db.sql("""
 			select
 				name as voucher_no,
-				{ref_field} as invoice_amount,
-				({ref_field} - advance_paid) as outstanding_amount,
+				if({rounded_total_field}, {rounded_total_field}, {grand_total_field}) as invoice_amount,
+				(if({rounded_total_field}, {rounded_total_field}, {grand_total_field}) - advance_paid) as outstanding_amount,
 				transaction_date as posting_date
 			from
 				`tab{voucher_type}`
@@ -663,13 +668,14 @@
 				and docstatus = 1
 				and company = %s
 				and ifnull(status, "") != "Closed"
-				and {ref_field} > advance_paid
+				and if({rounded_total_field}, {rounded_total_field}, {grand_total_field}) > advance_paid
 				and abs(100 - per_billed) > 0.01
 				{condition}
 			order by
 				transaction_date, name
 		""".format(**{
-			"ref_field": ref_field,
+			"rounded_total_field": rounded_total_field,
+			"grand_total_field": grand_total_field,
 			"voucher_type": voucher_type,
 			"party_type": scrub(party_type),
 			"condition": condition
diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py
index 9292b3a..c9216ee 100644
--- a/erpnext/crm/doctype/lead/lead.py
+++ b/erpnext/crm/doctype/lead/lead.py
@@ -146,15 +146,14 @@
 @frappe.whitelist()
 def make_opportunity(source_name, target_doc=None):
 	def set_missing_values(source, target):
-		address = frappe.db.exists('Dynamic Link', {
-			'link_doctype': target.doctype,
-			'link_name': target.name,
+		address = frappe.get_all('Dynamic Link', {
+			'link_doctype': source.doctype,
+			'link_name': source.name,
 			'parenttype': 'Address',
-			'disabled': 0
-		})
+		}, ['parent'], limit=1)
 
 		if address:
-			target.customer_address = address
+			target.customer_address = address[0].parent
 
 	target_doc = get_mapped_doc("Lead", source_name,
 		{"Lead": {
diff --git a/erpnext/crm/doctype/opportunity/opportunity.js b/erpnext/crm/doctype/opportunity/opportunity.js
index 90a12b7..ec17629 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.js
+++ b/erpnext/crm/doctype/opportunity/opportunity.js
@@ -31,9 +31,9 @@
 
 	party_name: function(frm) {
 		frm.toggle_display("contact_info", frm.doc.party_name);
+		frm.trigger('set_contact_link');
 
 		if (frm.doc.opportunity_from == "Customer") {
-			frm.trigger('set_contact_link');
 			erpnext.utils.get_party_details(frm);
 		} else if (frm.doc.opportunity_from == "Lead") {
 			erpnext.utils.map_current_doc({
@@ -48,13 +48,6 @@
 		frm.get_field("items").grid.set_multiple_add("item_code", "qty");
 	},
 
-	party_name: function(frm) {
-		if (frm.doc.opportunity_from == "Customer") {
-			frm.trigger('set_contact_link');
-			erpnext.utils.get_party_details(frm);
-		}
-	},
-
 	with_items: function(frm) {
 		frm.trigger('toggle_mandatory');
 	},
diff --git a/erpnext/quality_management/doctype/quality_procedure/quality_procedure.json b/erpnext/quality_management/doctype/quality_procedure/quality_procedure.json
index 7b241ef..472b751 100644
--- a/erpnext/quality_management/doctype/quality_procedure/quality_procedure.json
+++ b/erpnext/quality_management/doctype/quality_procedure/quality_procedure.json
@@ -1,11 +1,11 @@
 {
- "autoname": "format:PRC-{procedure}",
+ "autoname": "format:PRC-{quality_procedure_name}",
  "creation": "2018-10-06 00:06:29.756804",
  "doctype": "DocType",
  "editable_grid": 1,
  "engine": "InnoDB",
  "field_order": [
-  "procedure",
+  "quality_procedure_name",
   "parent_quality_procedure",
   "is_group",
   "sb_00",
@@ -62,14 +62,14 @@
    "options": "Quality Procedure Process"
   },
   {
-   "fieldname": "procedure",
+   "fieldname": "quality_procedure_name",
    "fieldtype": "Data",
    "in_list_view": 1,
-   "label": "Procedure",
+   "label": "Quality Procedure",
    "reqd": 1
   }
  ],
- "modified": "2019-05-26 22:11:53.771428",
+ "modified": "2019-08-05 13:09:29.945082",
  "modified_by": "Administrator",
  "module": "Quality Management",
  "name": "Quality Procedure",
diff --git a/erpnext/quality_management/doctype/quality_procedure/quality_procedure.py b/erpnext/quality_management/doctype/quality_procedure/quality_procedure.py
index 52c3320..4d3c522 100644
--- a/erpnext/quality_management/doctype/quality_procedure/quality_procedure.py
+++ b/erpnext/quality_management/doctype/quality_procedure/quality_procedure.py
@@ -36,12 +36,10 @@
 			doc.load_from_db()
 
 			for process in doc.processes:
-				if process.procedure:
-					flag_is_group = 1
+				flag_is_group = 1 if process.procedure else 0
 
-			if flag_is_group == 0:
-				doc.is_group = 0
-				doc.save(ignore_permissions=True)
+			doc.is_group = 0 if flag_is_group == 0 else 1
+			doc.save(ignore_permissions=True)
 
 	def set_parent(self):
 		for process in self.processes:
diff --git a/erpnext/quality_management/doctype/quality_procedure/quality_procedure_tree.js b/erpnext/quality_management/doctype/quality_procedure/quality_procedure_tree.js
index 15b7784..8fd785f 100644
--- a/erpnext/quality_management/doctype/quality_procedure/quality_procedure_tree.js
+++ b/erpnext/quality_management/doctype/quality_procedure/quality_procedure_tree.js
@@ -6,8 +6,8 @@
 	add_tree_node: 'erpnext.quality_management.doctype.quality_procedure.quality_procedure.add_node',
 	filters: [
 		{
-			fieldname: "Quality Procedure",
-			fieldtype:"Link",
+			fieldname: "quality_procedure",
+			fieldtype: "Link",
 			options: "Quality Procedure",
 			label: __("Quality Procedure"),
 			get_query: function() {
@@ -19,7 +19,7 @@
 	],
 	breadcrumb: "Setup",
 	root_label: "All Quality Procedures",
-	get_tree_root: false,
+	get_tree_root: true,
 	menu_items: [
 		{
 			label: __("New Quality Procedure"),
@@ -32,8 +32,4 @@
 	onload: function(treeview) {
 		treeview.make_tree();
 	},
-	onrender: function() {
-		$("button:contains('Add Child')").remove();
-		$("button:contains('New')").remove();
-	}
 };
\ No newline at end of file
diff --git a/erpnext/quality_management/doctype/quality_procedure/test_quality_procedure.py b/erpnext/quality_management/doctype/quality_procedure/test_quality_procedure.py
index 79f8771..3289bb5 100644
--- a/erpnext/quality_management/doctype/quality_procedure/test_quality_procedure.py
+++ b/erpnext/quality_management/doctype/quality_procedure/test_quality_procedure.py
@@ -18,7 +18,7 @@
 def create_procedure():
 	procedure = frappe.get_doc({
 		"doctype": "Quality Procedure",
-		"procedure": "_Test Quality Procedure",
+		"quality_procedure_name": "_Test Quality Procedure",
 		"processes": [
 			{
 				"process_description": "_Test Quality Procedure Table",
@@ -37,7 +37,7 @@
 def create_nested_procedure():
 	nested_procedure = frappe.get_doc({
 		"doctype": "Quality Procedure",
-		"procedure": "_Test Nested Quality Procedure",
+		"quality_procedure_name": "_Test Nested Quality Procedure",
 		"processes": [
 			{
 				"procedure": "PRC-_Test Quality Procedure"