mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-04 20:59:11 +00:00
refactor: setup wizard stages and demo data creation (#53866)
This commit is contained in:
@@ -62,7 +62,6 @@ welcome_email = "erpnext.setup.utils.welcome_email"
|
|||||||
# setup wizard
|
# setup wizard
|
||||||
setup_wizard_requires = "assets/erpnext/js/setup_wizard.js"
|
setup_wizard_requires = "assets/erpnext/js/setup_wizard.js"
|
||||||
setup_wizard_stages = "erpnext.setup.setup_wizard.setup_wizard.get_setup_stages"
|
setup_wizard_stages = "erpnext.setup.setup_wizard.setup_wizard.get_setup_stages"
|
||||||
setup_wizard_complete = "erpnext.setup.setup_wizard.setup_wizard.setup_demo"
|
|
||||||
|
|
||||||
after_install = "erpnext.setup.install.after_install"
|
after_install = "erpnext.setup.install.after_install"
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from random import randint
|
|||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.utils import add_days, getdate
|
from frappe.utils import add_days, get_url_to_form, getdate
|
||||||
|
|
||||||
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
|
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
|
||||||
from erpnext.accounts.utils import get_fiscal_year
|
from erpnext.accounts.utils import get_fiscal_year
|
||||||
@@ -16,21 +16,44 @@ from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
|
|||||||
from erpnext.setup.setup_wizard.operations.install_fixtures import create_bank_account
|
from erpnext.setup.setup_wizard.operations.install_fixtures import create_bank_account
|
||||||
|
|
||||||
|
|
||||||
def setup_demo_data():
|
def setup_demo_data(company_name):
|
||||||
from frappe.utils.telemetry import capture
|
from frappe.utils.telemetry import capture
|
||||||
|
|
||||||
capture("demo_data_creation_started", "erpnext")
|
capture("demo_data_creation_started", "erpnext")
|
||||||
try:
|
try:
|
||||||
company = create_demo_company()
|
frappe.db.savepoint("demo_data")
|
||||||
|
company = create_demo_company(company_name)
|
||||||
process_masters()
|
process_masters()
|
||||||
make_transactions(company)
|
make_transactions(company)
|
||||||
frappe.cache.delete_keys("bootinfo")
|
capture("demo_data_creation_completed", "erpnext")
|
||||||
frappe.publish_realtime("demo_data_complete")
|
frappe.clear_messages()
|
||||||
except Exception:
|
except Exception:
|
||||||
frappe.log_error("Failed to create demo data")
|
frappe.db.rollback(save_point="demo_data")
|
||||||
|
error_log = frappe.log_error("Failed to create demo data")
|
||||||
|
log_demo_data_failed_notification(error_log)
|
||||||
capture("demo_data_creation_failed", "erpnext", properties={"exception": frappe.get_traceback()})
|
capture("demo_data_creation_failed", "erpnext", properties={"exception": frappe.get_traceback()})
|
||||||
raise
|
|
||||||
capture("demo_data_creation_completed", "erpnext")
|
|
||||||
|
def log_demo_data_failed_notification(error_log):
|
||||||
|
from frappe.core.doctype.role.role import get_users
|
||||||
|
from frappe.desk.doctype.notification_log.notification_log import make_notification_logs
|
||||||
|
|
||||||
|
frappe.msgprint(
|
||||||
|
_("Demo data creation failed. Check notifications for more info."),
|
||||||
|
alert=True,
|
||||||
|
indicator="red",
|
||||||
|
realtime=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
users = get_users("System Manager")
|
||||||
|
|
||||||
|
notif_log_doc = {
|
||||||
|
"subject": _("Demo Data creation failed."),
|
||||||
|
"type": "Alert",
|
||||||
|
"link": get_url_to_form("Error Log", error_log.name),
|
||||||
|
}
|
||||||
|
|
||||||
|
make_notification_logs(notif_log_doc, users)
|
||||||
|
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
@@ -56,21 +79,8 @@ def clear_demo_data():
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def create_demo_company():
|
def create_demo_company(company):
|
||||||
if frappe.flags.in_test:
|
company_doc = frappe.get_doc("Company", company).as_dict()
|
||||||
hash = frappe.generate_hash(length=3)
|
|
||||||
company_doc = frappe._dict(
|
|
||||||
{
|
|
||||||
"company_name": "Test Company" + " " + hash,
|
|
||||||
"abbr": "TC" + hash,
|
|
||||||
"default_currency": "INR",
|
|
||||||
"country": "India",
|
|
||||||
"chart_of_accounts": "Standard",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
company = frappe.db.get_all("Company")[0].name
|
|
||||||
company_doc = frappe.get_doc("Company", company).as_dict()
|
|
||||||
|
|
||||||
# Make a dummy company
|
# Make a dummy company
|
||||||
new_company = frappe.new_doc("Company")
|
new_company = frappe.new_doc("Company")
|
||||||
|
|||||||
@@ -199,7 +199,9 @@ class TestCompany(ERPNextTestSuite):
|
|||||||
def test_demo_data(self):
|
def test_demo_data(self):
|
||||||
from erpnext.setup.demo import clear_demo_data, setup_demo_data
|
from erpnext.setup.demo import clear_demo_data, setup_demo_data
|
||||||
|
|
||||||
setup_demo_data()
|
self.load_test_records("Company")
|
||||||
|
|
||||||
|
setup_demo_data(self.globalTestRecords["Company"][0]["company_name"])
|
||||||
company_name = frappe.db.get_value("Company", {"name": ("like", "%(Demo)")})
|
company_name = frappe.db.get_value("Company", {"name": ("like", "%(Demo)")})
|
||||||
self.assertTrue(company_name)
|
self.assertTrue(company_name)
|
||||||
|
|
||||||
|
|||||||
@@ -10,39 +10,34 @@ from erpnext.setup.setup_wizard.operations import install_fixtures as fixtures
|
|||||||
|
|
||||||
|
|
||||||
def get_setup_stages(args=None):
|
def get_setup_stages(args=None):
|
||||||
if frappe.db.sql("select name from tabCompany"):
|
stages = [
|
||||||
stages = [
|
{
|
||||||
|
"status": _("Installing presets"),
|
||||||
|
"fail_msg": _("Failed to install presets"),
|
||||||
|
"tasks": [{"fn": stage_fixtures, "args": args, "fail_msg": _("Failed to install presets")}],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"status": _("Setting up company"),
|
||||||
|
"fail_msg": _("Failed to setup company"),
|
||||||
|
"tasks": [{"fn": setup_company, "args": args, "fail_msg": _("Failed to setup company")}],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"status": _("Setting defaults"),
|
||||||
|
"fail_msg": _("Failed to set defaults"),
|
||||||
|
"tasks": [
|
||||||
|
{"fn": setup_defaults, "args": args, "fail_msg": _("Failed to setup defaults")},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
if args.get("setup_demo"):
|
||||||
|
stages.append(
|
||||||
{
|
{
|
||||||
"status": _("Wrapping up"),
|
"status": _("Creating demo data"),
|
||||||
"fail_msg": _("Failed to login"),
|
"fail_msg": _("Failed to create demo data"),
|
||||||
"tasks": [{"fn": fin, "args": args, "fail_msg": _("Failed to login")}],
|
"tasks": [{"fn": setup_demo, "args": args, "fail_msg": _("Failed to create demo data")}],
|
||||||
}
|
}
|
||||||
]
|
)
|
||||||
else:
|
|
||||||
stages = [
|
|
||||||
{
|
|
||||||
"status": _("Installing presets"),
|
|
||||||
"fail_msg": _("Failed to install presets"),
|
|
||||||
"tasks": [{"fn": stage_fixtures, "args": args, "fail_msg": _("Failed to install presets")}],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"status": _("Setting up company"),
|
|
||||||
"fail_msg": _("Failed to setup company"),
|
|
||||||
"tasks": [{"fn": setup_company, "args": args, "fail_msg": _("Failed to setup company")}],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"status": _("Setting defaults"),
|
|
||||||
"fail_msg": "Failed to set defaults",
|
|
||||||
"tasks": [
|
|
||||||
{"fn": setup_defaults, "args": args, "fail_msg": _("Failed to setup defaults")},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"status": _("Wrapping up"),
|
|
||||||
"fail_msg": _("Failed to login"),
|
|
||||||
"tasks": [{"fn": fin, "args": args, "fail_msg": _("Failed to login")}],
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
return stages
|
return stages
|
||||||
|
|
||||||
@@ -59,19 +54,8 @@ def setup_defaults(args):
|
|||||||
fixtures.install_defaults(frappe._dict(args))
|
fixtures.install_defaults(frappe._dict(args))
|
||||||
|
|
||||||
|
|
||||||
def fin(args):
|
def setup_demo(args): # nosemgrep
|
||||||
frappe.local.message_log = []
|
setup_demo_data(args.get("company_name"))
|
||||||
login_as_first_user(args)
|
|
||||||
|
|
||||||
|
|
||||||
def setup_demo(args):
|
|
||||||
if args.get("setup_demo"):
|
|
||||||
frappe.enqueue(setup_demo_data, enqueue_after_commit=True, at_front=True)
|
|
||||||
|
|
||||||
|
|
||||||
def login_as_first_user(args):
|
|
||||||
if args.get("email") and hasattr(frappe.local, "login_manager"):
|
|
||||||
frappe.local.login_manager.login_as(args.get("email"))
|
|
||||||
|
|
||||||
|
|
||||||
# Only for programmatical use
|
# Only for programmatical use
|
||||||
@@ -79,4 +63,3 @@ def setup_complete(args=None):
|
|||||||
stage_fixtures(args)
|
stage_fixtures(args)
|
||||||
setup_company(args)
|
setup_company(args)
|
||||||
setup_defaults(args)
|
setup_defaults(args)
|
||||||
fin(args)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user