fix: added slide order in Slide doctype, removed Settings doctype

This commit is contained in:
Rucha Mahabal 2019-11-26 18:42:22 +05:30
parent 45c7ae96b9
commit 06953a3dc0
26 changed files with 114 additions and 470 deletions

View file

@ -0,0 +1,20 @@
{
"add_more_button": 0,
"app": "Frappe",
"creation": "2019-11-26 16:59:48.315297",
"docstatus": 0,
"doctype": "Setup Wizard Slide",
"domains": [],
"help_links": [],
"idx": 0,
"max_count": 3,
"modified": "2019-11-26 17:00:49.350931",
"modified_by": "Administrator",
"name": "Welcome to ERPNext!",
"owner": "Administrator",
"slide_fields": [],
"slide_module": "Core",
"slide_order": 0,
"slide_title": "Welcome to ERPNext!",
"slide_type": "Information"
}

View file

@ -1,8 +0,0 @@
// Copyright (c) 2019, Frappe Technologies and contributors
// For license information, please see license.txt
frappe.ui.form.on('Setup Wizard Settings', {
// refresh: function(frm) {
// }
});

View file

@ -1,46 +0,0 @@
{
"creation": "2019-11-13 15:55:07.016295",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"slide_order_section",
"slide_order"
],
"fields": [
{
"fieldname": "slide_order_section",
"fieldtype": "Section Break",
"label": "Slide Order"
},
{
"fieldname": "slide_order",
"fieldtype": "Table",
"label": "Slide Order",
"options": "Setup Wizard Slide Order",
"reqd": 1
}
],
"issingle": 1,
"modified": "2019-11-19 11:56:32.757433",
"modified_by": "Administrator",
"module": "Desk",
"name": "Setup Wizard Settings",
"owner": "Administrator",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"print": 1,
"read": 1,
"role": "System Manager",
"share": 1,
"write": 1
}
],
"quick_entry": 1,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1
}

View file

@ -1,79 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2019, Frappe Technologies and contributors
# For license information, please see license.txt
from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
from frappe.modules import get_module_path, scrub_dt_dn
from frappe.modules.export_file import export_to_files, create_init_py
class SetupWizardSettings(Document):
def on_update(self):
if frappe.flags.in_import or frappe.flags.in_test:
return
if frappe.local.conf.get('developer_mode'):
record_list = [['Setup Wizard Settings', self.name]]
for s in self.slide_order:
record_list.append(['Setup Wizard Slide', s.slide])
export_to_files(record_list=record_list, record_module='Desk')
for s in self.slide_order:
dt, dn = scrub_dt_dn('Setup Wizard Slide', s.slide)
create_init_py(get_module_path('Desk'), dt, dn)
def get_onboarding_slides_as_list():
slides = []
slide_settings = frappe.get_single('Setup Wizard Settings')
for entry in slide_settings.slide_order:
slide_doc = frappe.get_doc('Setup Wizard Slide', entry.slide)
if frappe.scrub(slide_doc.app) in frappe.get_installed_apps():
slides.append(frappe._dict(
slide_type=slide_doc.slide_type,
title=slide_doc.slide_title,
help=slide_doc.slide_desc,
domains=get_domains(slide_doc),
fields=slide_doc.slide_fields,
help_links=get_help_links(slide_doc),
add_more=slide_doc.add_more_button,
max_count=slide_doc.max_count,
submit_method=slide_doc.submit_method,
image_src=get_slide_image(slide_doc),
ref_doctype=slide_doc.ref_doctype,
app=slide_doc.app
))
return slides
@frappe.whitelist()
def get_onboarding_slides():
slides = []
slide_list = get_onboarding_slides_as_list()
active_domains = frappe.get_active_domains()
for slide in slide_list:
if not slide.domains or any(domain in active_domains for domain in slide.domains):
slides.append(slide)
return slides
def get_domains(slide_doc):
domains_list = []
for entry in slide_doc.domains:
domains_list.append(entry.domain)
return domains_list
def get_help_links(slide_doc):
links=[]
for link in slide_doc.help_links:
links.append({
'label': link.label,
'video_id': link.video_id
})
return links
def get_slide_image(slide_doc):
if slide_doc.image_src:
return slide_doc.image_src
return None

View file

@ -1,10 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2019, Frappe Technologies and Contributors
# See license.txt
from __future__ import unicode_literals
# import frappe
import unittest
class TestSetupWizardSettings(unittest.TestCase):
pass

View file

@ -2,6 +2,11 @@
// For license information, please see license.txt
frappe.ui.form.on('Setup Wizard Slide', {
refresh: function(frm) {
frm.toggle_reqd('ref_doctype', frm.doc.slide_type!='Information');
frm.toggle_reqd('slide_module', frm.doc.slide_type=='Information');
},
ref_doctype: function(frm) {
frm.set_query('ref_doctype', function() {
if (frm.doc.slide_type === 'Create') {

View file

@ -7,8 +7,10 @@
"field_order": [
"slide_title",
"app",
"slide_order",
"column_break_4",
"image_src",
"slide_module",
"description_section_break",
"slide_desc",
"action_section_break",
@ -17,7 +19,7 @@
"column_break_6",
"max_count",
"add_more_button",
"section_break_5",
"section_break_18",
"ref_doctype",
"slide_fields",
"section_break_10",
@ -35,7 +37,7 @@
"unique": 1
},
{
"depends_on": "eval:doc.slide_type !== 'Information';",
"depends_on": "eval:doc.slide_type!='Information'",
"description": "By default the code inside `create_onboarding_docs` method of the `Reference Document Type` is executed. If your method is not on the doctype level, place this method in {app_name}.utilities.onboarding_utils.{method_name} and specify the method name here",
"fieldname": "submit_method",
"fieldtype": "Data",
@ -56,19 +58,13 @@
},
{
"default": "0",
"depends_on": "eval: doc.slide_type !== 'Information';",
"depends_on": "eval:doc.slide_type!='Information'",
"fieldname": "add_more_button",
"fieldtype": "Check",
"label": "Add More Button"
},
{
"depends_on": "eval: doc.slide_type !== 'Information'",
"fieldname": "section_break_5",
"fieldtype": "Section Break",
"label": "Fields"
},
{
"depends_on": "eval:doc.slide_type !== 'Information';",
"depends_on": "eval:doc.slide_type!='Information'",
"fieldname": "slide_fields",
"fieldtype": "Table",
"label": "Slide Fields",
@ -135,14 +131,33 @@
"label": "Description"
},
{
"depends_on": "eval:doc.slide_type !== 'Information';",
"depends_on": "eval:doc.slide_type!='Information'",
"fieldname": "ref_doctype",
"fieldtype": "Link",
"label": "Reference Document Type",
"options": "DocType"
},
{
"default": "0",
"description": "Determines the order of the slide in the wizard. If the slide is not to be displayed, priority should be set to 0.",
"fieldname": "slide_order",
"fieldtype": "Int",
"label": "Slide Order"
},
{
"depends_on": "eval:doc.slide_type=='Information'",
"fieldname": "slide_module",
"fieldtype": "Link",
"label": "Module",
"options": "Module Def"
},
{
"fieldname": "section_break_18",
"fieldtype": "Section Break",
"label": "Fields"
}
],
"modified": "2019-11-26 13:52:32.351576",
"modified": "2019-11-26 17:33:34.553367",
"modified_by": "Administrator",
"module": "Desk",
"name": "Setup Wizard Slide",

View file

@ -6,9 +6,64 @@ from __future__ import unicode_literals
import frappe
import json
from frappe.model.document import Document
from frappe.modules.export_file import export_to_files
class SetupWizardSlide(Document):
pass
def on_update(self):
if self.ref_doctype:
module = frappe.db.get_value('DocType', self.ref_doctype, 'module')
else:
module = self.slide_module
export_to_files(record_list=[['Setup Wizard Slide', self.name]], record_module=module)
def get_onboarding_slides_as_list():
slides = []
slide_docs = frappe.get_all('Setup Wizard Slide',
filters={'slide_order': ('!=', 0)},
order_by='slide_order')
for entry in slide_docs:
# using get_doc because child table fields are not fetched in get_all
slide_doc = frappe.get_doc('Setup Wizard Slide', entry.name)
if frappe.scrub(slide_doc.app) in frappe.get_installed_apps():
slides.append(frappe._dict(
slide_type=slide_doc.slide_type,
title=slide_doc.slide_title,
help=slide_doc.slide_desc,
fields=slide_doc.slide_fields,
help_links=get_help_links(slide_doc),
add_more=slide_doc.add_more_button,
max_count=slide_doc.max_count,
submit_method=slide_doc.submit_method,
image_src=get_slide_image(slide_doc),
ref_doctype=slide_doc.ref_doctype,
app=slide_doc.app
))
return slides
@frappe.whitelist()
def get_onboarding_slides():
slides = []
slide_list = get_onboarding_slides_as_list()
active_domains = frappe.get_active_domains()
for slide in slide_list:
if not slide.domains or any(domain in active_domains for domain in slide.domains):
slides.append(slide)
return slides
def get_help_links(slide_doc):
links=[]
for link in slide_doc.help_links:
links.append({
'label': link.label,
'video_id': link.video_id
})
return links
def get_slide_image(slide_doc):
if slide_doc.image_src:
return slide_doc.image_src
return None
@frappe.whitelist()
def create_onboarding_docs(values, doctype=None, submit_method=None, app=None, slide_type=None):

View file

@ -1,30 +0,0 @@
{
"creation": "2019-11-13 15:54:09.558748",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"slide"
],
"fields": [
{
"fieldname": "slide",
"fieldtype": "Link",
"in_list_view": 1,
"label": "Slide",
"options": "Setup Wizard Slide",
"reqd": 1
}
],
"istable": 1,
"modified": "2019-11-19 11:55:58.818555",
"modified_by": "Administrator",
"module": "Desk",
"name": "Setup Wizard Slide Order",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1
}

View file

@ -1,10 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2019, Frappe Technologies and contributors
# For license information, please see license.txt
from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
class SetupWizardSlideOrder(Document):
pass

View file

@ -1,27 +0,0 @@
{
"creation": "2019-11-13 16:07:24.786989",
"docstatus": 0,
"doctype": "Setup Wizard Settings",
"idx": "0",
"modified": "2019-11-26 14:47:30.065799",
"modified_by": "Administrator",
"name": "Setup Wizard Settings",
"owner": "Administrator",
"slide_order": [
{
"slide": "Welcome to ERPNext!"
},
{
"slide": "Company Letter Head"
},
{
"slide": "Add A Few Products You Buy Or Sell"
},
{
"slide": "Add A Few Customers"
},
{
"slide": "Add A Few Suppliers"
}
]
}

View file

@ -1,61 +0,0 @@
{
"add_more_button": 1,
"app": "ERPNext",
"creation": "2019-11-15 14:44:10.065014",
"docstatus": 0,
"doctype": "Setup Wizard Slide",
"domains": [
{
"domain": "Manufacturing"
},
{
"domain": "Services"
},
{
"domain": "Retail"
},
{
"domain": "Distribution"
}
],
"help_links": [
{
"label": "Customers",
"video_id": "zsrrVDk6VBs"
}
],
"idx": 0,
"image_src": "/assets/erpnext/images/illustrations/customer.png",
"max_count": 3,
"modified": "2019-11-26 10:24:00.553997",
"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_title": "Add A Few Customers",
"slide_type": "Create",
"submit_method": ""
}

View file

@ -1,69 +0,0 @@
{
"add_more_button": 1,
"app": "ERPNext",
"creation": "2019-11-15 14:41:12.007359",
"docstatus": 0,
"doctype": "Setup Wizard Slide",
"domains": [
{
"domain": "Manufacturing"
},
{
"domain": "Retail"
},
{
"domain": "Services"
},
{
"domain": "Distribution"
}
],
"help_links": [],
"idx": 0,
"image_src": "/assets/erpnext/images/illustrations/product.png",
"max_count": 3,
"modified": "2019-11-26 10:24:06.473548",
"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_title": "Add A Few Products You Buy Or Sell",
"slide_type": "Create",
"submit_method": ""
}

View file

@ -1,61 +0,0 @@
{
"add_more_button": 1,
"app": "ERPNext",
"creation": "2019-11-15 14:45:32.626641",
"docstatus": 0,
"doctype": "Setup Wizard Slide",
"domains": [
{
"domain": "Manufacturing"
},
{
"domain": "Services"
},
{
"domain": "Retail"
},
{
"domain": "Distribution"
}
],
"help_links": [
{
"label": "Supplier",
"video_id": "zsrrVDk6VBs"
}
],
"idx": 0,
"image_src": "/assets/erpnext/images/illustrations/supplier.png",
"max_count": 3,
"modified": "2019-11-26 10:23:54.632950",
"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_title": "Add A Few Suppliers",
"slide_type": "Create",
"submit_method": ""
}

View file

@ -1,36 +0,0 @@
{
"add_more_button": 0,
"app": "ERPNext",
"creation": "2019-11-13 16:00:04.735347",
"docstatus": 0,
"doctype": "Setup Wizard Slide",
"domains": [
{
"domain": "Manufacturing"
},
{
"domain": "Retail"
},
{
"domain": "Services"
},
{
"domain": "Distribution"
},
{
"domain": "Education"
}
],
"help_links": [],
"idx": 0,
"image_src": "/assets/erpnext/images/illustrations/onboard.png",
"max_count": 0,
"modified": "2019-11-25 15:27:46.314226",
"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_title": "Welcome to ERPNext!",
"slide_type": "Information"
}

View file

@ -44,9 +44,7 @@ def sync_for(app_name, force=0, sync_everything = False, verbose=False, reset_pe
("data_migration", "data_migration_plan"),
("desk", "setup_wizard_slide_field"),
("desk", "setup_wizard_help_link"),
("desk", "setup_wizard_slide"),
("desk", "setup_wizard_slide_order"),
("desk", "setup_wizard_settings")):
("desk", "setup_wizard_slide")):
files.append(os.path.join(frappe.get_app_path("frappe"), d[0],
"doctype", d[1], d[1] + ".json"))
@ -75,7 +73,7 @@ def get_doc_files(files, start_path, force=0, sync_everything = False, verbose=F
# load in sequence - warning for devs
document_types = ['doctype', 'page', 'report', 'dashboard_chart_source', 'print_format',
'website_theme', 'web_form', 'notification', 'print_style',
'data_migration_mapping', 'data_migration_plan', 'setup_wizard_slide', 'setup_wizard_settings']
'data_migration_mapping', 'data_migration_plan', 'setup_wizard_slide']
for doctype in document_types:
doctype_path = os.path.join(start_path, doctype)
if os.path.exists(doctype_path):

View file

@ -4,20 +4,7 @@
"creation": "2019-11-22 13:25:42.892593",
"docstatus": 0,
"doctype": "Setup Wizard Slide",
"domains": [
{
"domain": "Services"
},
{
"domain": "Manufacturing"
},
{
"domain": "Retail"
},
{
"domain": "Distribution"
}
],
"domains": [],
"help_links": [
{
"label": "Know more about printing and branding through letterhead",
@ -27,7 +14,7 @@
"idx": 0,
"image_src": "/assets/erpnext/images/illustrations/letterhead.png",
"max_count": 0,
"modified": "2019-11-26 14:47:22.595626",
"modified": "2019-11-26 18:21:01.509703",
"modified_by": "Administrator",
"name": "Company Letter Head",
"owner": "Administrator",
@ -43,6 +30,7 @@
"reqd": 0
}
],
"slide_order": 20,
"slide_title": "Company Letter Head",
"slide_type": "Create",
"submit_method": ""

View file

@ -491,7 +491,7 @@ frappe.Application = Class.extend({
setup_onboarding_wizard: () => {
var me = this;
frappe.call('frappe.desk.doctype.setup_wizard_settings.setup_wizard_settings.get_onboarding_slides').then(res => {
frappe.call('frappe.desk.doctype.setup_wizard_slide.setup_wizard_slide.get_onboarding_slides').then(res => {
if (res.message) {
let slides = res.message;
if (slides.length) {