Merge branch 'develop' into setup_wizard
diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py
index b6d588e..62a04f3 100644
--- a/erpnext/buying/doctype/supplier/supplier.py
+++ b/erpnext/buying/doctype/supplier/supplier.py
@@ -56,3 +56,23 @@
 	def after_rename(self, olddn, newdn, merge=False):
 		if frappe.defaults.get_global_default('supp_master_name') == 'Supplier Name':
 			frappe.db.set(self, "supplier_name", newdn)
+
+	def create_onboarding_docs(self, args):
+		defaults = frappe.defaults.get_defaults()
+		for i in range(1, args.get('max_count')):
+			supplier = args.get('supplier_name_' + str(i))
+			if supplier:
+				try:
+					doc = frappe.get_doc({
+						'doctype': self.doctype,
+						'supplier_name': supplier,
+						'supplier_group': _('Local'),
+						'company': defaults.get('company')
+					}).insert()
+
+					if args.get('supplier_email_' + str(i)):
+						from erpnext.selling.doctype.customer.customer import create_contact
+						create_contact(supplier, 'Supplier',
+							doc.name, args.get('supplier_email_' + str(i)))
+				except frappe.NameError:
+					pass
\ No newline at end of file
diff --git a/erpnext/buying/setup_wizard_slide/add_a_few_suppliers/add_a_few_suppliers.json b/erpnext/buying/setup_wizard_slide/add_a_few_suppliers/add_a_few_suppliers.json
new file mode 100644
index 0000000..006d139
--- /dev/null
+++ b/erpnext/buying/setup_wizard_slide/add_a_few_suppliers/add_a_few_suppliers.json
@@ -0,0 +1,49 @@
+{
+ "add_more_button": 1,
+ "app": "ERPNext",
+ "creation": "2019-11-15 14:45:32.626641",
+ "docstatus": 0,
+ "doctype": "Setup Wizard Slide",
+ "domains": [],
+ "help_links": [
+  {
+   "label": "Supplier",
+   "video_id": "zsrrVDk6VBs"
+  }
+ ],
+ "idx": 0,
+ "image_src": "/assets/erpnext/images/illustrations/supplier.png",
+ "max_count": 3,
+ "modified": "2019-11-26 18:26:25.498325",
+ "modified_by": "Administrator",
+ "name": "Add A Few Suppliers",
+ "owner": "Administrator",
+ "ref_doctype": "Supplier",
+ "slide_desc": "",
+ "slide_fields": [
+  {
+   "align": "",
+   "fieldname": "supplier_name",
+   "fieldtype": "Data",
+   "label": "Supplier Name",
+   "placeholder": "",
+   "reqd": 1
+  },
+  {
+   "align": "",
+   "fieldtype": "Column Break",
+   "reqd": 0
+  },
+  {
+   "align": "",
+   "fieldname": "supplier_email",
+   "fieldtype": "Data",
+   "label": "Supplier Email",
+   "reqd": 1
+  }
+ ],
+ "slide_order": 50,
+ "slide_title": "Add A Few Suppliers",
+ "slide_type": "Create",
+ "submit_method": ""
+}
\ No newline at end of file
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index e4b5e30..0749689 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -40,8 +40,6 @@
 boot_session = "erpnext.startup.boot.boot_session"
 notification_config = "erpnext.startup.notifications.get_notification_config"
 get_help_messages = "erpnext.utilities.activation.get_help_messages"
-get_user_progress_slides = "erpnext.utilities.user_progress.get_user_progress_slides"
-update_and_get_user_progress = "erpnext.utilities.user_progress_utils.update_default_domain_actions_and_get_state"
 leaderboards = "erpnext.startup.leaderboard.get_leaderboards"
 
 
diff --git a/erpnext/patches/v8_9/add_setup_progress_actions.py b/erpnext/patches/v8_9/add_setup_progress_actions.py
index fe12311..7750107 100644
--- a/erpnext/patches/v8_9/add_setup_progress_actions.py
+++ b/erpnext/patches/v8_9/add_setup_progress_actions.py
@@ -5,6 +5,9 @@
 
 def execute():
 	"""Add setup progress actions"""
+	if not frappe.db.exists('DocType', 'Setup Progress') or not frappe.db.exists('DocType', 'Setup Progress Action'):
+		return
+
 	frappe.reload_doc("setup", "doctype", "setup_progress")
 	frappe.reload_doc("setup", "doctype", "setup_progress_action")
 
diff --git a/erpnext/public/images/illustrations/collaboration.png b/erpnext/public/images/illustrations/collaboration.png
new file mode 100644
index 0000000..12c67e3
--- /dev/null
+++ b/erpnext/public/images/illustrations/collaboration.png
Binary files differ
diff --git a/erpnext/public/images/illustrations/customer.png b/erpnext/public/images/illustrations/customer.png
new file mode 100644
index 0000000..b2ddbf3
--- /dev/null
+++ b/erpnext/public/images/illustrations/customer.png
Binary files differ
diff --git a/erpnext/public/images/illustrations/letterhead.png b/erpnext/public/images/illustrations/letterhead.png
new file mode 100644
index 0000000..37df6d7
--- /dev/null
+++ b/erpnext/public/images/illustrations/letterhead.png
Binary files differ
diff --git a/erpnext/public/images/illustrations/onboard.png b/erpnext/public/images/illustrations/onboard.png
new file mode 100644
index 0000000..094aa3f
--- /dev/null
+++ b/erpnext/public/images/illustrations/onboard.png
Binary files differ
diff --git a/erpnext/public/images/illustrations/product.png b/erpnext/public/images/illustrations/product.png
new file mode 100644
index 0000000..f864b7a
--- /dev/null
+++ b/erpnext/public/images/illustrations/product.png
Binary files differ
diff --git a/erpnext/public/images/illustrations/supplier.png b/erpnext/public/images/illustrations/supplier.png
new file mode 100644
index 0000000..87f7789
--- /dev/null
+++ b/erpnext/public/images/illustrations/supplier.png
Binary files differ
diff --git a/erpnext/public/images/illustrations/user.png b/erpnext/public/images/illustrations/user.png
new file mode 100644
index 0000000..7dd7db2
--- /dev/null
+++ b/erpnext/public/images/illustrations/user.png
Binary files differ
diff --git a/erpnext/public/less/erpnext.less b/erpnext/public/less/erpnext.less
index 8ed5f1a..abe4868 100644
--- a/erpnext/public/less/erpnext.less
+++ b/erpnext/public/less/erpnext.less
@@ -426,7 +426,7 @@
 	.collapse-btn {
 		cursor: pointer;
 	}
-	
+
 	@media (max-width: @screen-xs) {
 		.page-actions {
 			max-width: 110px;
diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py
index 67e20b1..57308ce 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -204,6 +204,40 @@
 		else:
 			frappe.msgprint(_("Multiple Loyalty Program found for the Customer. Please select manually."))
 
+	def create_onboarding_docs(self, args):
+		defaults = frappe.defaults.get_defaults()
+		for i in range(1, args.get('max_count')):
+			customer = args.get('customer_name_' + str(i))
+			if customer:
+				try:
+					doc = frappe.get_doc({
+						'doctype': self.doctype,
+						'customer_name': customer,
+						'customer_type': 'Company',
+						'customer_group': _('Commercial'),
+						'territory': defaults.get('country'),
+						'company': defaults.get('company')
+					}).insert()
+
+					if args.get('customer_email_' + str(i)):
+						create_contact(customer, self.doctype,
+							doc.name, args.get("customer_email_" + str(i)))
+				except frappe.NameError:
+					pass
+
+def create_contact(contact, party_type, party, email):
+	"""Create contact based on given contact name"""
+	contact = contact.split(' ')
+
+	contact = frappe.get_doc({
+		'doctype': 'Contact',
+		'first_name': contact[0],
+		'last_name': len(contact) > 1 and contact[1] or ""
+	})
+	contact.append('email_ids', dict(email_id=email, is_primary=1))
+	contact.append('links', dict(link_doctype=party_type, link_name=party))
+	contact.insert()
+
 @frappe.whitelist()
 def get_loyalty_programs(doc):
 	''' returns applicable loyalty programs for a customer '''
diff --git a/erpnext/selling/setup_wizard_slide/add_a_few_customers/add_a_few_customers.json b/erpnext/selling/setup_wizard_slide/add_a_few_customers/add_a_few_customers.json
new file mode 100644
index 0000000..a0bb6fe
--- /dev/null
+++ b/erpnext/selling/setup_wizard_slide/add_a_few_customers/add_a_few_customers.json
@@ -0,0 +1,49 @@
+{
+ "add_more_button": 1,
+ "app": "ERPNext",
+ "creation": "2019-11-15 14:44:10.065014",
+ "docstatus": 0,
+ "doctype": "Setup Wizard Slide",
+ "domains": [],
+ "help_links": [
+  {
+   "label": "Customers",
+   "video_id": "zsrrVDk6VBs"
+  }
+ ],
+ "idx": 0,
+ "image_src": "/assets/erpnext/images/illustrations/customer.png",
+ "max_count": 3,
+ "modified": "2019-11-26 18:26:15.888794",
+ "modified_by": "Administrator",
+ "name": "Add A Few Customers",
+ "owner": "Administrator",
+ "ref_doctype": "Customer",
+ "slide_desc": "",
+ "slide_fields": [
+  {
+   "align": "",
+   "fieldname": "customer_name",
+   "fieldtype": "Data",
+   "label": "Customer Name",
+   "placeholder": "",
+   "reqd": 1
+  },
+  {
+   "align": "",
+   "fieldtype": "Column Break",
+   "reqd": 0
+  },
+  {
+   "align": "",
+   "fieldname": "customer_email",
+   "fieldtype": "Data",
+   "label": "Email ID",
+   "reqd": 1
+  }
+ ],
+ "slide_order": 40,
+ "slide_title": "Add A Few Customers",
+ "slide_type": "Create",
+ "submit_method": ""
+}
\ No newline at end of file
diff --git a/erpnext/setup/doctype/setup_progress/__init__.py b/erpnext/setup/doctype/setup_progress/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/setup/doctype/setup_progress/__init__.py
+++ /dev/null
diff --git a/erpnext/setup/doctype/setup_progress/setup_progress.js b/erpnext/setup/doctype/setup_progress/setup_progress.js
deleted file mode 100644
index 5c78bd5..0000000
--- a/erpnext/setup/doctype/setup_progress/setup_progress.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Setup Progress', {
-	refresh: function() {
-
-	}
-});
diff --git a/erpnext/setup/doctype/setup_progress/setup_progress.json b/erpnext/setup/doctype/setup_progress/setup_progress.json
deleted file mode 100644
index 09072d4..0000000
--- a/erpnext/setup/doctype/setup_progress/setup_progress.json
+++ /dev/null
@@ -1,123 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2017-08-27 21:01:42.032109", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "actions_sb", 
-   "fieldtype": "Section Break", 
-   "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": "Actions", 
-   "length": 0, 
-   "no_copy": 0, 
-   "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": "actions", 
-   "fieldtype": "Table", 
-   "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": "Actions", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Setup Progress Action", 
-   "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
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 1, 
- "is_submittable": 0, 
- "issingle": 1, 
- "istable": 0, 
- "max_attachments": 0, 
- "modified": "2017-09-21 11:52:56.106659", 
- "modified_by": "Administrator", 
- "module": "Setup", 
- "name": "Setup Progress", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 0, 
-   "delete": 0, 
-   "email": 1, 
-   "export": 0, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 0, 
-   "role": "All", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }
- ], 
- "quick_entry": 1, 
- "read_only": 1, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/setup/doctype/setup_progress/setup_progress.py b/erpnext/setup/doctype/setup_progress/setup_progress.py
deleted file mode 100644
index e1402f5..0000000
--- a/erpnext/setup/doctype/setup_progress/setup_progress.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-import frappe, json
-from frappe.model.document import Document
-
-class SetupProgress(Document):
-	pass
-
-def get_setup_progress():
-	if not getattr(frappe.local, "setup_progress", None):
-		frappe.local.setup_progress = frappe.get_doc("Setup Progress", "Setup Progress")
-
-	return frappe.local.setup_progress
-
-def get_action_completed_state(action_name):
-	for d in get_setup_progress().actions:
-		if d.action_name == action_name:
-			return d.is_completed
-
-def update_action_completed_state(action_name):
-	action_table_doc = [d for d in get_setup_progress().actions
-		if d.action_name == action_name][0]
-	update_action(action_table_doc)
-
-def update_action(doc):
-	doctype = doc.action_doctype
-	docname = doc.action_document
-	field = doc.action_field
-
-	if not doc.is_completed:
-		if doc.min_doc_count:
-			if frappe.db.count(doctype) >= doc.min_doc_count:
-				doc.is_completed = 1
-				doc.save()
-		if docname and field:
-			d = frappe.get_doc(doctype, docname)
-			if d.get(field):
-				doc.is_completed = 1
-				doc.save()
-
-def update_domain_actions(domain):
-	for d in get_setup_progress().actions:
-		domains = json.loads(d.domains)
-		if domains == [] or domain in domains:
-			update_action(d)
-
-def get_domain_actions_state(domain):
-	state = {}
-	for d in get_setup_progress().actions:
-		domains = json.loads(d.domains)
-		if domains == [] or domain in domains:
-			state[d.action_name] = d.is_completed
-	return state
-
-@frappe.whitelist()
-def set_action_completed_state(action_name):
-	action_table_doc = [d for d in get_setup_progress().actions
-		if d.action_name == action_name][0]
-	action_table_doc.is_completed = 1
-	action_table_doc.save()
diff --git a/erpnext/setup/doctype/setup_progress/test_setup_progress.js b/erpnext/setup/doctype/setup_progress/test_setup_progress.js
deleted file mode 100644
index 9e84e0c..0000000
--- a/erpnext/setup/doctype/setup_progress/test_setup_progress.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/* eslint-disable */
-// rename this file from _test_[name] to test_[name] to activate
-// and remove above this line
-
-QUnit.test("test: Setup Progress", function (assert) {
-	let done = assert.async();
-
-	// number of asserts
-	assert.expect(1);
-
-	frappe.run_serially([
-		// insert a new Setup Progress
-		() => frappe.tests.make('Setup Progress', [
-			// values to be set
-			{key: 'value'}
-		]),
-		() => {
-			assert.equal(cur_frm.doc.key, 'value');
-		},
-		() => done()
-	]);
-
-});
diff --git a/erpnext/setup/doctype/setup_progress/test_setup_progress.py b/erpnext/setup/doctype/setup_progress/test_setup_progress.py
deleted file mode 100644
index 8926219..0000000
--- a/erpnext/setup/doctype/setup_progress/test_setup_progress.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-from __future__ import unicode_literals
-
-import unittest
-
-class TestSetupProgress(unittest.TestCase):
-	pass
diff --git a/erpnext/setup/doctype/setup_progress_action/__init__.py b/erpnext/setup/doctype/setup_progress_action/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/setup/doctype/setup_progress_action/__init__.py
+++ /dev/null
diff --git a/erpnext/setup/doctype/setup_progress_action/setup_progress_action.json b/erpnext/setup/doctype/setup_progress_action/setup_progress_action.json
deleted file mode 100644
index e9abcbc..0000000
--- a/erpnext/setup/doctype/setup_progress_action/setup_progress_action.json
+++ /dev/null
@@ -1,253 +0,0 @@
-{
- "allow_copy": 0, 
- "allow_guest_to_view": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2017-08-27 21:00:40.715360", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
- "engine": "InnoDB", 
- "fields": [
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "action_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Action Name", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_bulk_edit": 0, 
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "action_doctype", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Action Doctype", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "DocType", 
-   "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": "action_document", 
-   "fieldtype": "Dynamic 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": "Action Document", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "action_doctype", 
-   "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": "action_field", 
-   "fieldtype": "Data", 
-   "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": "Action Field", 
-   "length": 0, 
-   "no_copy": 0, 
-   "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": "min_doc_count", 
-   "fieldtype": "Int", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Min Doc Count", 
-   "length": 0, 
-   "no_copy": 0, 
-   "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": "domains", 
-   "fieldtype": "Code", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Domains", 
-   "length": 0, 
-   "no_copy": 0, 
-   "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": "is_completed", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Is Completed", 
-   "length": 0, 
-   "no_copy": 0, 
-   "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
-  }
- ], 
- "has_web_view": 0, 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 1, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2017-09-01 14:34:59.685730", 
- "modified_by": "Administrator", 
- "module": "Setup", 
- "name": "Setup Progress Action", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 1, 
- "read_only": 1, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 1, 
- "track_seen": 0
-}
\ No newline at end of file
diff --git a/erpnext/setup/doctype/setup_progress_action/setup_progress_action.py b/erpnext/setup/doctype/setup_progress_action/setup_progress_action.py
deleted file mode 100644
index 24af943..0000000
--- a/erpnext/setup/doctype/setup_progress_action/setup_progress_action.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-from __future__ import unicode_literals
-from frappe.model.document import Document
-
-class SetupProgressAction(Document):
-	pass
diff --git "a/erpnext/setup/setup_wizard_slide/welcome_to_erpnext\041/welcome_to_erpnext\041.json" "b/erpnext/setup/setup_wizard_slide/welcome_to_erpnext\041/welcome_to_erpnext\041.json"
new file mode 100644
index 0000000..1da9dd4
--- /dev/null
+++ "b/erpnext/setup/setup_wizard_slide/welcome_to_erpnext\041/welcome_to_erpnext\041.json"
@@ -0,0 +1,22 @@
+{
+ "add_more_button": 0,
+ "app": "ERPNext",
+ "creation": "2019-11-26 17:01:26.671859",
+ "docstatus": 0,
+ "doctype": "Setup Wizard Slide",
+ "domains": [],
+ "help_links": [],
+ "idx": 0,
+ "image_src": "/assets/erpnext/images/illustrations/onboard.png",
+ "max_count": 0,
+ "modified": "2019-11-26 17:17:29.813299",
+ "modified_by": "Administrator",
+ "name": "Welcome to ERPNext!",
+ "owner": "Administrator",
+ "slide_desc": "Setting up an ERP can be overwhelming. But don't worry, we have got your back!<br>\nLet's setup your company.\nThis wizard will help you onboard to ERPNext in a short time!",
+ "slide_fields": [],
+ "slide_module": "Setup",
+ "slide_order": 10,
+ "slide_title": "Welcome to ERPNext!",
+ "slide_type": "Information"
+}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 7495dff..189261c 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -884,6 +884,54 @@
 			if not enabled:
 				frappe.msgprint(msg=_("You have to enable auto re-order in Stock Settings to maintain re-order levels."), title=_("Enable Auto Re-Order"), indicator="orange")
 
+	def create_onboarding_docs(self, args):
+		defaults = frappe.defaults.get_defaults()
+		for i in range(1, args.get('max_count')):
+			item = args.get('item_' + str(i))
+			if item:
+				default_warehouse = ''
+				default_warehouse = frappe.db.get_value('Warehouse', filters={
+					'warehouse_name': _('Finished Goods'),
+					'company': defaults.get('company_name')
+				})
+
+				try:
+					frappe.get_doc({
+						'doctype': self.doctype,
+						'item_code': item,
+						'item_name': item,
+						'description': item,
+						'show_in_website': 1,
+						'is_sales_item': 1,
+						'is_purchase_item': 1,
+						'is_stock_item': 1,
+						'item_group': _('Products'),
+						'stock_uom': _(args.get('item_uom_' + str(i))),
+						'item_defaults': [{
+							'default_warehouse': default_warehouse,
+							'company': defaults.get('company_name')
+						}]
+					}).insert()
+
+				except frappe.NameError:
+					pass
+				else:
+					if args.get('item_price_' + str(i)):
+						item_price = flt(args.get('tem_price_' + str(i)))
+
+						price_list_name = frappe.db.get_value('Price List', {'selling': 1})
+						make_item_price(item, price_list_name, item_price)
+						price_list_name = frappe.db.get_value('Price List', {'buying': 1})
+						make_item_price(item, price_list_name, item_price)
+
+def make_item_price(item, price_list_name, item_price):
+	frappe.get_doc({
+		'doctype': 'Item Price',
+		'price_list': price_list_name,
+		'item_code': item,
+		'price_list_rate': item_price
+	}).insert()
+
 def get_timeline_data(doctype, name):
 	'''returns timeline data based on stock ledger entry'''
 	out = {}
diff --git a/erpnext/stock/setup_wizard_slide/add_a_few_products_you_buy_or_sell/add_a_few_products_you_buy_or_sell.json b/erpnext/stock/setup_wizard_slide/add_a_few_products_you_buy_or_sell/add_a_few_products_you_buy_or_sell.json
new file mode 100644
index 0000000..c536f7b
--- /dev/null
+++ b/erpnext/stock/setup_wizard_slide/add_a_few_products_you_buy_or_sell/add_a_few_products_you_buy_or_sell.json
@@ -0,0 +1,57 @@
+{
+ "add_more_button": 1,
+ "app": "ERPNext",
+ "creation": "2019-11-15 14:41:12.007359",
+ "docstatus": 0,
+ "doctype": "Setup Wizard Slide",
+ "domains": [],
+ "help_links": [],
+ "idx": 0,
+ "image_src": "/assets/erpnext/images/illustrations/product.png",
+ "max_count": 3,
+ "modified": "2019-11-26 18:26:35.305755",
+ "modified_by": "Administrator",
+ "name": "Add A Few Products You Buy Or Sell",
+ "owner": "Administrator",
+ "ref_doctype": "Item",
+ "slide_desc": "",
+ "slide_fields": [
+  {
+   "align": "",
+   "fieldname": "item",
+   "fieldtype": "Data",
+   "label": "Item",
+   "placeholder": "Product Name",
+   "reqd": 1
+  },
+  {
+   "align": "",
+   "fieldtype": "Column Break",
+   "reqd": 1
+  },
+  {
+   "align": "",
+   "fieldname": "uom",
+   "fieldtype": "Link",
+   "label": "UOM",
+   "options": "UOM",
+   "reqd": 1
+  },
+  {
+   "align": "",
+   "fieldtype": "Column Break",
+   "reqd": 0
+  },
+  {
+   "align": "",
+   "fieldname": "item_price",
+   "fieldtype": "Currency",
+   "label": "Item Price",
+   "reqd": 1
+  }
+ ],
+ "slide_order": 30,
+ "slide_title": "Add A Few Products You Buy Or Sell",
+ "slide_type": "Create",
+ "submit_method": ""
+}
\ No newline at end of file
diff --git a/erpnext/utilities/user_progress.py b/erpnext/utilities/user_progress.py
deleted file mode 100644
index 5cec3ca..0000000
--- a/erpnext/utilities/user_progress.py
+++ /dev/null
@@ -1,287 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe, erpnext
-from frappe import _
-from erpnext.setup.doctype.setup_progress.setup_progress import get_action_completed_state
-
-def get_slide_settings():
-	defaults = frappe.defaults.get_defaults()
-	domain = frappe.get_cached_value('Company',  erpnext.get_default_company(),  'domain')
-	company = defaults.get("company") or ''
-	currency = defaults.get("currency") or ''
-
-	doc = frappe.get_doc("Setup Progress")
-	item = [d for d in doc.get("actions") if d.action_name == "Set Sales Target"]
-
-	if len(item):
-		item = item[0]
-		if not item.action_document:
-			item.action_document = company
-			doc.save()
-
-	# Initial state of slides
-	return [
-		frappe._dict(
-			action_name='Add Company',
-			title=_("Setup Company") if domain != 'Education' else _("Setup Institution"),
-			help=_('Setup your ' + ('company' if domain != 'Education' else 'institution') + ' and brand.'),
-			# image_src="/assets/erpnext/images/illustrations/shop.jpg",
-			fields=[],
-			done_state_title=_("You added " +  company),
-			done_state_title_route=["Form", "Company", company],
-			help_links=[
-				{
-					"label": _("Chart of Accounts"),
-					"url": ["https://erpnext.com/docs/user/manual/en/accounts/chart-of-accounts"]
-				},
-				{
-					"label": _("Opening Balances"),
-					"video_id": "U5wPIvEn-0c"
-				}
-			]
-		),
-		frappe._dict(
-			action_name='Set Sales Target',
-			domains=('Manufacturing', 'Services', 'Retail', 'Distribution'),
-			title=_("Set a Target"),
-			help=_("Set a sales goal you'd like to achieve for your company."),
-			fields=[
-				{"fieldtype":"Currency", "fieldname":"monthly_sales_target",
-					"label":_("Monthly Sales Target (" + currency + ")"), "reqd":1},
-			],
-			submit_method="erpnext.utilities.user_progress_utils.set_sales_target",
-			done_state_title=_("Go to " + company),
-			done_state_title_route=["Form", "Company", company],
-			help_links=[
-				{
-					"label": _('Learn More'),
-					"url": ["https://erpnext.com/docs/user/manual/en/setting-up/setting-company-sales-goal"]
-				}
-			]
-		),
-		frappe._dict(
-			action_name='Add Customers',
-			domains=('Manufacturing', 'Services', 'Retail', 'Distribution'),
-			title=_("Add Customers"),
-			help=_("List a few of your customers. They could be organizations or individuals."),
-			fields=[
-				{"fieldtype":"Section Break"},
-				{"fieldtype":"Data", "fieldname":"customer", "label":_("Customer"),
-					"placeholder":_("Customer Name")},
-				{"fieldtype":"Column Break"},
-				{"fieldtype":"Data", "fieldname":"customer_contact",
-					"label":_("Contact Name"), "placeholder":_("Contact Name")}
-			],
-			add_more=1, max_count=3, mandatory_entry=1,
-			submit_method="erpnext.utilities.user_progress_utils.create_customers",
-			done_state_title=_("Go to Customers"),
-			done_state_title_route=["List", "Customer"],
-			help_links=[
-				{
-					"label": _('Learn More'),
-					"url": ["https://erpnext.com/docs/user/manual/en/CRM/customer.html"]
-				}
-			]
-		),
-
-		frappe._dict(
-			action_name='Add Letterhead',
-			domains=('Manufacturing', 'Services', 'Retail', 'Distribution', 'Education'),
-			title=_("Add Letterhead"),
-			help=_("Upload your letter head (Keep it web friendly as 900px by 100px)"),
-			fields=[
-				{"fieldtype":"Attach Image", "fieldname":"letterhead",
-					"is_private": 0,
-					"align": "center"
-				},
-			],
-			mandatory_entry=1,
-			submit_method="erpnext.utilities.user_progress_utils.create_letterhead",
-			done_state_title=_("Go to Letterheads"),
-			done_state_title_route=["List", "Letter Head"]
-		),
-
-		frappe._dict(
-			action_name='Add Suppliers',
-			domains=('Manufacturing', 'Services', 'Retail', 'Distribution'),
-			icon="fa fa-group",
-			title=_("Your Suppliers"),
-			help=_("List a few of your suppliers. They could be organizations or individuals."),
-			fields=[
-				{"fieldtype":"Section Break"},
-				{"fieldtype":"Data", "fieldname":"supplier", "label":_("Supplier"),
-					"placeholder":_("Supplier Name")},
-				{"fieldtype":"Column Break"},
-				{"fieldtype":"Data", "fieldname":"supplier_contact",
-					"label":_("Contact Name"), "placeholder":_("Contact Name")},
-			],
-			add_more=1, max_count=3, mandatory_entry=1,
-			submit_method="erpnext.utilities.user_progress_utils.create_suppliers",
-			done_state_title=_("Go to Suppliers"),
-			done_state_title_route=["List", "Supplier"],
-			help_links=[
-				{
-					"label": _('Learn More'),
-					"url": ["https://erpnext.com/docs/user/manual/en/buying/supplier"]
-				},
-				{
-					"label": _('Customers and Suppliers'),
-					"video_id": "zsrrVDk6VBs"
-				},
-			]
-		),
-		frappe._dict(
-			action_name='Add Products',
-			domains=['Manufacturing', 'Services', 'Retail', 'Distribution'],
-			icon="fa fa-barcode",
-			title=_("Your Products or Services"),
-			help=_("List your products or services that you buy or sell."),
-			fields=[
-				{"fieldtype":"Section Break", "show_section_border": 1},
-				{"fieldtype":"Data", "fieldname":"item", "label":_("Item"),
-					"placeholder":_("A Product")},
-				{"fieldtype":"Column Break"},
-				{"fieldtype":"Select", "fieldname":"item_uom", "label":_("UOM"),
-					"options":[_("Unit"), _("Nos"), _("Box"), _("Pair"), _("Kg"), _("Set"),
-						_("Hour"), _("Minute"), _("Litre"), _("Meter"), _("Gram")],
-					"default": _("Unit"), "static": 1},
-				{"fieldtype":"Column Break"},
-				{"fieldtype":"Currency", "fieldname":"item_price", "label":_("Rate"), "static": 1}
-			],
-			add_more=1, max_count=3, mandatory_entry=1,
-			submit_method="erpnext.utilities.user_progress_utils.create_items",
-			done_state_title=_("Go to Items"),
-			done_state_title_route=["List", "Item"],
-			help_links=[
-				{
-					"label": _("Explore Sales Cycle"),
-					"video_id": "1eP90MWoDQM"
-				},
-			]
-		),
-
-		# Education slides begin
-		frappe._dict(
-			action_name='Add Programs',
-			domains=("Education"),
-			title=_("Program"),
-			help=_("Example: Masters in Computer Science"),
-			fields=[
-				{"fieldtype":"Section Break", "show_section_border": 1},
-				{"fieldtype":"Data", "fieldname":"program", "label":_("Program"), "placeholder": _("Program Name")},
-			],
-			add_more=1, max_count=3, mandatory_entry=1,
-			submit_method="erpnext.utilities.user_progress_utils.create_program",
-			done_state_title=_("Go to Programs"),
-			done_state_title_route=["List", "Program"],
-			help_links=[
-				{
-					"label": _("Student Application"),
-					"video_id": "l8PUACusN3E"
-				},
-			]
-
-		),
-		frappe._dict(
-			action_name='Add Courses',
-			domains=["Education"],
-			title=_("Course"),
-			help=_("Example: Basic Mathematics"),
-			fields=[
-				{"fieldtype":"Section Break", "show_section_border": 1},
-				{"fieldtype":"Data", "fieldname":"course", "label":_("Course"),  "placeholder": _("Course Name")},
-			],
-			add_more=1, max_count=3, mandatory_entry=1,
-			submit_method="erpnext.utilities.user_progress_utils.create_course",
-			done_state_title=_("Go to Courses"),
-			done_state_title_route=["List", "Course"],
-			help_links=[
-				{
-					"label": _('Add Students'),
-					"route": ["List", "Student"]
-				}
-			]
-		),
-		frappe._dict(
-			action_name='Add Instructors',
-			domains=["Education"],
-			title=_("Instructor"),
-			help=_("People who teach at your organisation"),
-			fields=[
-				{"fieldtype":"Section Break", "show_section_border": 1},
-				{"fieldtype":"Data", "fieldname":"instructor", "label":_("Instructor"),  "placeholder": _("Instructor Name")},
-			],
-			add_more=1, max_count=3, mandatory_entry=1,
-			submit_method="erpnext.utilities.user_progress_utils.create_instructor",
-			done_state_title=_("Go to Instructors"),
-			done_state_title_route=["List", "Instructor"],
-			help_links=[
-				{
-					"label": _('Student Batches'),
-					"route": ["List", "Student Batch"]
-				}
-			]
-		),
-		frappe._dict(
-			action_name='Add Rooms',
-			domains=["Education"],
-			title=_("Room"),
-			help=_("Classrooms/ Laboratories etc where lectures can be scheduled."),
-			fields=[
-				{"fieldtype":"Section Break", "show_section_border": 1},
-				{"fieldtype":"Data", "fieldname":"room", "label":_("Room")},
-				{"fieldtype":"Column Break"},
-				{"fieldtype":"Int", "fieldname":"room_capacity", "label":_("Room Capacity"), "static": 1},
-			],
-			add_more=1, max_count=3, mandatory_entry=1,
-			submit_method="erpnext.utilities.user_progress_utils.create_room",
-			done_state_title=_("Go to Rooms"),
-			done_state_title_route=["List", "Room"],
-			help_links=[]
-		),
-		# Education slides end
-
-		frappe._dict(
-			action_name='Add Users',
-			title=_("Add Users"),
-			help=_("Add users to your organization, other than yourself."),
-			fields=[
-				{"fieldtype":"Section Break"},
-				{"fieldtype":"Data", "fieldname":"user_email", "label":_("Email ID"),
-					"placeholder":_("user@example.com"), "options": "Email", "static": 1},
-				{"fieldtype":"Column Break"},
-				{"fieldtype":"Data", "fieldname":"user_fullname",
-					"label":_("Full Name"), "static": 1},
-			],
-			add_more=1, max_count=3, mandatory_entry=1,
-			submit_method="erpnext.utilities.user_progress_utils.create_users",
-			done_state_title=_("Go to Users"),
-			done_state_title_route=["List", "User"],
-			help_links=[
-				{
-					"label": _('Learn More'),
-					"url": ["https://erpnext.com/docs/user/manual/en/setting-up/users-and-permissions"]
-				},
-				{
-					"label": _('Users and Permissions'),
-					"video_id": "8Slw1hsTmUI"
-				},
-			]
-		)
-	]
-
-def get_user_progress_slides():
-	slides = []
-	slide_settings = get_slide_settings()
-
-	domains = frappe.get_active_domains()
-	for s in slide_settings:
-		if not s.domains or any(d in domains for d in s.domains):
-			s.mark_as_done_method = "erpnext.setup.doctype.setup_progress.setup_progress.set_action_completed_state"
-			s.done = get_action_completed_state(s.action_name) or 0
-			slides.append(s)
-
-	return slides
-
diff --git a/erpnext/utilities/user_progress_utils.py b/erpnext/utilities/user_progress_utils.py
deleted file mode 100644
index b7c24a7..0000000
--- a/erpnext/utilities/user_progress_utils.py
+++ /dev/null
@@ -1,240 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe, erpnext
-
-import json
-from frappe import _
-from frappe.utils import flt
-from erpnext.setup.doctype.setup_progress.setup_progress import update_domain_actions, get_domain_actions_state
-
-@frappe.whitelist()
-def set_sales_target(args_data):
-	args = json.loads(args_data)
-	defaults = frappe.defaults.get_defaults()
-	frappe.db.set_value("Company", defaults.get("company"), "monthly_sales_target", args.get('monthly_sales_target'))
-
-@frappe.whitelist()
-def create_customers(args_data):
-	args = json.loads(args_data)
-	defaults = frappe.defaults.get_defaults()
-	for i in range(1,4):
-		customer = args.get("customer_" + str(i))
-		if customer:
-			try:
-				doc = frappe.get_doc({
-					"doctype":"Customer",
-					"customer_name": customer,
-					"customer_type": "Company",
-					"customer_group": _("Commercial"),
-					"territory": defaults.get("country"),
-					"company": defaults.get("company")
-				}).insert()
-
-				if args.get("customer_contact_" + str(i)):
-					create_contact(args.get("customer_contact_" + str(i)),
-						"Customer", doc.name)
-			except frappe.NameError:
-				pass
-
-@frappe.whitelist()
-def create_letterhead(args_data):
-	args = json.loads(args_data)
-	letterhead = args.get("letterhead")
-	if letterhead:
-		try:
-			frappe.get_doc({
-					"doctype":"Letter Head",
-					"content":"""<div><img src="{0}" style='max-width: 100%%;'><br></div>""".format(letterhead.encode('utf-8')),
-					"letter_head_name": _("Standard"),
-					"is_default": 1
-			}).insert()
-		except frappe.NameError:
-			pass
-
-@frappe.whitelist()
-def create_suppliers(args_data):
-	args = json.loads(args_data)
-	defaults = frappe.defaults.get_defaults()
-	for i in range(1,4):
-		supplier = args.get("supplier_" + str(i))
-		if supplier:
-			try:
-				doc = frappe.get_doc({
-					"doctype":"Supplier",
-					"supplier_name": supplier,
-					"supplier_group": _("Local"),
-					"company": defaults.get("company")
-				}).insert()
-
-				if args.get("supplier_contact_" + str(i)):
-					create_contact(args.get("supplier_contact_" + str(i)),
-						"Supplier", doc.name)
-			except frappe.NameError:
-				pass
-
-def create_contact(contact, party_type, party):
-	"""Create contact based on given contact name"""
-	contact = contact	.split(" ")
-
-	contact = frappe.get_doc({
-		"doctype":"Contact",
-		"first_name":contact[0],
-		"last_name": len(contact) > 1 and contact[1] or ""
-	})
-	contact.append('links', dict(link_doctype=party_type, link_name=party))
-	contact.insert()
-
-@frappe.whitelist()
-def create_items(args_data):
-	args = json.loads(args_data)
-	defaults = frappe.defaults.get_defaults()
-	for i in range(1,4):
-		item = args.get("item_" + str(i))
-		if item:
-			default_warehouse = ""
-			default_warehouse = frappe.db.get_value("Warehouse", filters={
-				"warehouse_name": _("Finished Goods"),
-				"company": defaults.get("company_name")
-			})
-
-			try:
-				frappe.get_doc({
-					"doctype":"Item",
-					"item_code": item,
-					"item_name": item,
-					"description": item,
-					"show_in_website": 1,
-					"is_sales_item": 1,
-					"is_purchase_item": 1,
-					"is_stock_item": 1,
-					"item_group": _("Products"),
-					"stock_uom": _(args.get("item_uom_" + str(i))),
-					"item_defaults": [{
-						"default_warehouse": default_warehouse,
-						"company": defaults.get("company_name")
-					}]
-				}).insert()
-
-			except frappe.NameError:
-				pass
-			else:
-				if args.get("item_price_" + str(i)):
-					item_price = flt(args.get("item_price_" + str(i)))
-
-					price_list_name = frappe.db.get_value("Price List", {"selling": 1})
-					make_item_price(item, price_list_name, item_price)
-					price_list_name = frappe.db.get_value("Price List", {"buying": 1})
-					make_item_price(item, price_list_name, item_price)
-
-
-def make_item_price(item, price_list_name, item_price):
-	frappe.get_doc({
-		"doctype": "Item Price",
-		"price_list": price_list_name,
-		"item_code": item,
-		"price_list_rate": item_price
-	}).insert()
-
-# Education
-@frappe.whitelist()
-def create_program(args_data):
-	args = json.loads(args_data)
-	for i in range(1,4):
-		if args.get("program_" + str(i)):
-			program = frappe.new_doc("Program")
-			program.program_code = args.get("program_" + str(i))
-			program.program_name = args.get("program_" + str(i))
-			try:
-				program.save()
-			except frappe.DuplicateEntryError:
-				pass
-
-@frappe.whitelist()
-def create_course(args_data):
-	args = json.loads(args_data)
-	for i in range(1,4):
-		if args.get("course_" + str(i)):
-			course = frappe.new_doc("Course")
-			course.course_code = args.get("course_" + str(i))
-			course.course_name = args.get("course_" + str(i))
-			try:
-				course.save()
-			except frappe.DuplicateEntryError:
-				pass
-
-@frappe.whitelist()
-def create_instructor(args_data):
-	args = json.loads(args_data)
-	for i in range(1,4):
-		if args.get("instructor_" + str(i)):
-			instructor = frappe.new_doc("Instructor")
-			instructor.instructor_name = args.get("instructor_" + str(i))
-			try:
-				instructor.save()
-			except frappe.DuplicateEntryError:
-				pass
-
-@frappe.whitelist()
-def create_room(args_data):
-	args = json.loads(args_data)
-	for i in range(1,4):
-		if args.get("room_" + str(i)):
-			room = frappe.new_doc("Room")
-			room.room_name = args.get("room_" + str(i))
-			room.seating_capacity = args.get("room_capacity_" + str(i))
-			try:
-				room.save()
-			except frappe.DuplicateEntryError:
-				pass
-
-@frappe.whitelist()
-def create_users(args_data):
-	if frappe.session.user == 'Administrator':
-		return
-	args = json.loads(args_data)
-	defaults = frappe.defaults.get_defaults()
-	for i in range(1,4):
-		email = args.get("user_email_" + str(i))
-		fullname = args.get("user_fullname_" + str(i))
-		if email:
-			if not fullname:
-				fullname = email.split("@")[0]
-
-			parts = fullname.split(" ", 1)
-
-			user = frappe.get_doc({
-				"doctype": "User",
-				"email": email,
-				"first_name": parts[0],
-				"last_name": parts[1] if len(parts) > 1 else "",
-				"enabled": 1,
-				"user_type": "System User"
-			})
-
-			# default roles
-			user.append_roles("Projects User", "Stock User", "Support Team")
-			user.flags.delay_emails = True
-
-			if not frappe.db.get_value("User", email):
-				user.insert(ignore_permissions=True)
-
-				# create employee
-				emp = frappe.get_doc({
-					"doctype": "Employee",
-					"employee_name": fullname,
-					"user_id": email,
-					"status": "Active",
-					"company": defaults.get("company")
-				})
-				emp.flags.ignore_mandatory = True
-				emp.insert(ignore_permissions = True)
-
-# Ennumerate the setup hooks you're going to need, apart from the slides
-
-@frappe.whitelist()
-def update_default_domain_actions_and_get_state():
-	domain = frappe.get_cached_value('Company',  erpnext.get_default_company(),  'domain')
-	update_domain_actions(domain)
-	return get_domain_actions_state(domain)