[enhance] added roles for portal users frappe/frappe#2091 (#6452)

diff --git a/erpnext/accounts/report/profitability_analysis/profitability_analysis.js b/erpnext/accounts/report/profitability_analysis/profitability_analysis.js
index 4b9a1af..a25fa56 100644
--- a/erpnext/accounts/report/profitability_analysis/profitability_analysis.js
+++ b/erpnext/accounts/report/profitability_analysis/profitability_analysis.js
@@ -14,7 +14,7 @@
 			},
 			{
 				"fieldname": "based_on",
-				"label": __("Baed On"),
+				"label": __("Based On"),
 				"fieldtype": "Select",
 				"options": "Cost Center\nProject",
 				"default": "Cost Center",
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 43ae234..8b8d3c9 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -101,17 +101,25 @@
 
 portal_menu_items = [
 	{"title": _("Projects"), "route": "/project", "reference_doctype": "Project"},
-	{"title": _("Request for Quotations"), "route": "/rfq", "reference_doctype": "Request for Quotation"},
-	{"title": _("Supplier Quotation"), "route": "/quotations", "reference_doctype": "Supplier Quotation"},
-	{"title": _("Orders"), "route": "/orders", "reference_doctype": "Sales Order"},
-	{"title": _("Invoices"), "route": "/invoices", "reference_doctype": "Sales Invoice"},
-	{"title": _("Shipments"), "route": "/shipments", "reference_doctype": "Delivery Note"},
-	{"title": _("Issues"), "route": "/issues", "reference_doctype": "Issue", "show_always": True},
+	{"title": _("Request for Quotations"), "route": "/rfq", "reference_doctype": "Request for Quotation", "role": "Supplier"},
+	{"title": _("Supplier Quotation"), "route": "/quotations", "reference_doctype": "Supplier Quotation", "role": "Supplier"},
+	{"title": _("Orders"), "route": "/orders", "reference_doctype": "Sales Order", "role":"Customer"},
+	{"title": _("Invoices"), "route": "/invoices", "reference_doctype": "Sales Invoice", "role":"Customer"},
+	{"title": _("Shipments"), "route": "/shipments", "reference_doctype": "Delivery Note", "role":"Customer"},
+	{"title": _("Issues"), "route": "/issues", "reference_doctype": "Issue", "role":"Customer"},
 	{"title": _("Addresses"), "route": "/addresses", "reference_doctype": "Address"},
 	{"title": _("Announcements"), "route": "/announcement", "reference_doctype": "Announcement"},
-	{"title": _("Courses"), "route": "/course", "reference_doctype": "Course"},
-	{"title": _("Assessment Schedule"), "route": "/assessment", "reference_doctype": "Assessment"},
-	{"title": _("Fees"), "route": "/fees", "reference_doctype": "Fees"}
+	{"title": _("Courses"), "route": "/course", "reference_doctype": "Course", "role":"Student"},
+	{"title": _("Assessment Schedule"), "route": "/assessment", "reference_doctype": "Assessment", "role":"Student"},
+	{"title": _("Fees"), "route": "/fees", "reference_doctype": "Fees", "role":"Student"}
+]
+
+default_roles = [
+	{'role': 'Customer', 'doctype':'Contact', 'email_field': 'email_id',
+		'filters': {'ifnull(customer, "")': ('!=', '')}},
+	{'role': 'Supplier', 'doctype':'Contact', 'email_field': 'email_id',
+		'filters': {'ifnull(supplier, "")': ('!=', '')}},
+	{'role': 'Student', 'doctype':'Student', 'email_field': 'student_email_id'}
 ]
 
 has_website_permission = {
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 86580a2..7968751 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -328,3 +328,4 @@
 erpnext.patches.v7_0.update_mode_of_payment_type
 execute:frappe.reload_doctype("Salary Slip")
 execute:frappe.db.sql("update `tabSalary Slip` set posting_date=creation")
+erpnext.patches.v7_1.update_portal_roles
diff --git a/erpnext/patches/v7_1/update_portal_roles.py b/erpnext/patches/v7_1/update_portal_roles.py
new file mode 100644
index 0000000..b36ae93
--- /dev/null
+++ b/erpnext/patches/v7_1/update_portal_roles.py
@@ -0,0 +1,18 @@
+import frappe
+
+def execute():
+	frappe.reload_doctype('Role')
+	for role_name in ('Customer', 'Supplier', 'Student'):
+		if frappe.db.exists('Role', role_name):
+			frappe.db.set_value('Role', role_name, 'desk_access', 0)
+		else:
+			frappe.get_doc(dict(doctype='Role', role_name=role_name, desk_access=0)).insert()
+
+
+	# set customer, supplier roles
+	for c in frappe.get_all('Contact', fields=['user'], filters={'ifnull(user, "")': ('!=', '')}):
+		user = frappe.get_doc('User', c.user)
+		user.set_default_roles()
+		user.save()
+
+
diff --git a/erpnext/setup/setup_wizard/domainify.py b/erpnext/setup/setup_wizard/domainify.py
index 05af9a6..2b87cc0 100644
--- a/erpnext/setup/setup_wizard/domainify.py
+++ b/erpnext/setup/setup_wizard/domainify.py
@@ -18,7 +18,7 @@
 			'set_value': [
 				['Stock Settings', None, 'show_barcode_field', 1]
 			],
-			'remove_sidebar_items': ['/announcement', '/course', '/assessment', '/fees']
+			'default_portal_role': 'Customer'
 		},
 
 		'Retail': {
@@ -32,7 +32,7 @@
 			'set_value': [
 				['Stock Settings', None, 'show_barcode_field', 1]
 			],
-			'remove_sidebar_items': ['/announcement', '/course', '/assessment', '/fees']
+			'default_portal_role': 'Customer'
 		},
 
 		'Distribution': {
@@ -45,7 +45,7 @@
 			'set_value': [
 				['Stock Settings', None, 'show_barcode_field', 1]
 			],
-			'remove_sidebar_items': ['/announcement', '/course', '/assessment', '/fees']
+			'default_portal_role': 'Customer'
 		},
 
 		'Services': {
@@ -58,14 +58,15 @@
 			'set_value': [
 				['Stock Settings', None, 'show_barcode_field', 0]
 			],
-			'remove_sidebar_items': ['/announcement', '/course', '/assessment', '/fees']
+			'default_portal_role': 'Customer'
 		},
 		'Education': {
 			'desktop_icons': ['Student', 'Program', 'Course', 'Student Group', 'Instructor',
 				'Fees',  'ToDo', 'Schools'],
 			'allow_roles': ['Academics User', 'Accounts User', 'Accounts Manager', 'Item Manager',
-				'Website Manager', 'HR User', 'HR Manager', 'Purchase User', 'Purchase Manager'],
-			'allow_sidebar_items': ['/announcement', '/course', '/assessment', '/fees']
+				'Website Manager', 'HR User', 'HR Manager', 'Purchase User', 'Purchase Manager',
+				'Student'],
+			'default_portal_role': 'Student'
 		},
 	}
 	if not domain in data:
@@ -80,6 +81,8 @@
 	setup_properties(data)
 	set_values(data)
 	setup_sidebar_items(data)
+	if data.get('default_portal_role'):
+		frappe.db.set_value('Portal Settings', None, 'default_role', data.get('default_portal_role'))
 	frappe.clear_cache()
 
 def setup_desktop_icons(data):
diff --git a/erpnext/setup/setup_wizard/install_fixtures.py b/erpnext/setup/setup_wizard/install_fixtures.py
index 1f14ddf..0cc3575 100644
--- a/erpnext/setup/setup_wizard/install_fixtures.py
+++ b/erpnext/setup/setup_wizard/install_fixtures.py
@@ -13,6 +13,9 @@
 
 def install(country=None):
 	records = [
+		dict(doctype='Role', role_name='Supplier', desk_access=0),
+		dict(doctype='Role', role_name='Customer', desk_access=0),
+		dict(doctype='Role', role_name='Student', desk_access=0),
 
 		# address template
 		{'doctype':"Address Template", "country": country},