diff --git a/erpnext/buying/doctype/supplier/supplier.py b/erpnext/buying/doctype/supplier/supplier.py
index b6d588ed96..62a04f37b1 100644
--- a/erpnext/buying/doctype/supplier/supplier.py
+++ b/erpnext/buying/doctype/supplier/supplier.py
@@ -56,3 +56,23 @@ class Supplier(TransactionBase):
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 0000000000..006d139eb0
--- /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 1fb4c2b596..ed5bf9b5d8 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -40,8 +40,6 @@ after_install = "erpnext.setup.install.after_install"
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 fe123111bc..77501073cf 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 @@ from frappe import _
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 0000000000..12c67e394c
Binary files /dev/null and b/erpnext/public/images/illustrations/collaboration.png differ
diff --git a/erpnext/public/images/illustrations/customer.png b/erpnext/public/images/illustrations/customer.png
new file mode 100644
index 0000000000..b2ddbf3bb4
Binary files /dev/null and b/erpnext/public/images/illustrations/customer.png differ
diff --git a/erpnext/public/images/illustrations/letterhead.png b/erpnext/public/images/illustrations/letterhead.png
new file mode 100644
index 0000000000..37df6d7f6f
Binary files /dev/null and b/erpnext/public/images/illustrations/letterhead.png differ
diff --git a/erpnext/public/images/illustrations/onboard.png b/erpnext/public/images/illustrations/onboard.png
new file mode 100644
index 0000000000..094aa3f8dd
Binary files /dev/null and b/erpnext/public/images/illustrations/onboard.png differ
diff --git a/erpnext/public/images/illustrations/product.png b/erpnext/public/images/illustrations/product.png
new file mode 100644
index 0000000000..f864b7af60
Binary files /dev/null and b/erpnext/public/images/illustrations/product.png differ
diff --git a/erpnext/public/images/illustrations/supplier.png b/erpnext/public/images/illustrations/supplier.png
new file mode 100644
index 0000000000..87f7789600
Binary files /dev/null and b/erpnext/public/images/illustrations/supplier.png differ
diff --git a/erpnext/public/images/illustrations/user.png b/erpnext/public/images/illustrations/user.png
new file mode 100644
index 0000000000..7dd7db210d
Binary files /dev/null and b/erpnext/public/images/illustrations/user.png differ
diff --git a/erpnext/public/less/erpnext.less b/erpnext/public/less/erpnext.less
index 8ed5f1adb0..abe48685f0 100644
--- a/erpnext/public/less/erpnext.less
+++ b/erpnext/public/less/erpnext.less
@@ -426,7 +426,7 @@ body[data-route="pos"] {
.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 67e20b1e89..57308cea41 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -204,6 +204,40 @@ class Customer(TransactionBase):
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 0000000000..a0bb6fe26d
--- /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 e69de29bb2..0000000000
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 5c78bd5075..0000000000
--- 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 09072d4665..0000000000
--- 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 e1402f5844..0000000000
--- 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 9e84e0cb15..0000000000
--- 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 8926219143..0000000000
--- 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 e69de29bb2..0000000000
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 e9abcbcd1a..0000000000
--- 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 24af94347e..0000000000
--- 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!/welcome_to_erpnext!.json b/erpnext/setup/setup_wizard_slide/welcome_to_erpnext!/welcome_to_erpnext!.json
new file mode 100644
index 0000000000..1da9dd44e2
--- /dev/null
+++ b/erpnext/setup/setup_wizard_slide/welcome_to_erpnext!/welcome_to_erpnext!.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!
\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 7495dffec2..189261cb2d 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -884,6 +884,54 @@ class Item(WebsiteGenerator):
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 0000000000..c536f7b2ca
--- /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 5cec3ca384..0000000000
--- 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 b7c24a71ba..0000000000
--- 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":"""