diff --git a/erpnext/hooks.py b/erpnext/hooks.py index e3bea25d0dd..9e271c9293a 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -78,7 +78,11 @@ demo_master_doctypes = [ "customer", "supplier", ] -demo_transaction_doctypes = ["purchase_invoice", "sales_invoice", "payment_entry", "journal_entry"] +demo_transaction_doctypes = [ + "purchase_invoice", + "sales_invoice", + "payment_entry", +] jinja = { "methods": [ diff --git a/erpnext/public/js/setup_wizard.js b/erpnext/public/js/setup_wizard.js index bcad6ebafd1..ba200ef1681 100644 --- a/erpnext/public/js/setup_wizard.js +++ b/erpnext/public/js/setup_wizard.js @@ -40,7 +40,12 @@ erpnext.setup.slides_settings = [ { fieldname: 'fy_start_date', label: __('Financial Year Begins On'), fieldtype: 'Date', reqd: 1 }, // end date should be hidden (auto calculated) { fieldname: 'fy_end_date', label: __('End Date'), fieldtype: 'Date', reqd: 1, hidden: 1 }, - { fieldname: 'setup_demo', label: __('Generate dummy data for demo'), fieldtype: 'Check'}, + { fieldtype: "Section Break" }, + { + fieldname: 'setup_demo', + label: __('Generate Demo Data for Exploration'), + fieldtype: 'Check', + description: 'If checked, we will create demo data for you to explore the system. This demo data can be erased later.'}, ], onload: function (slide) { diff --git a/erpnext/public/js/utils/demo.js b/erpnext/public/js/utils/demo.js index 22d78d8c67c..e810c37e487 100644 --- a/erpnext/public/js/utils/demo.js +++ b/erpnext/public/js/utils/demo.js @@ -2,15 +2,19 @@ $(document).on("toolbar_setup", function() { if (frappe.boot.sysdefaults.demo_company) { erpnext.setup_clear_button(); } + + // for first load + frappe.realtime.on("demo_data_complete", () => { + erpnext.setup_clear_button(); + }) }); erpnext.setup_clear_button = function() { - let message_string = __('Demo data is setup, use this button to clear before starting actual transactions'); + let message_string = __("Demo data is present on the system, erase data before starting real usage."); let $floatingBar = $(`
- Clear + Clear Demo Data
@@ -54,4 +58,4 @@ erpnext.setup_clear_button = function() { } }) }); -} \ No newline at end of file +} diff --git a/erpnext/setup/demo.py b/erpnext/setup/demo.py index 50bc43d3258..355c373d33d 100644 --- a/erpnext/setup/demo.py +++ b/erpnext/setup/demo.py @@ -13,15 +13,26 @@ from erpnext.accounts.utils import get_fiscal_year from erpnext.setup.setup_wizard.operations.install_fixtures import create_bank_account -@frappe.whitelist() def setup_demo_data(): - company = create_demo_company() - process_masters() - make_transactions(company) + from frappe.utils.telemetry import capture + + capture("demo_data_creation_started", "erpnext") + try: + company = create_demo_company() + process_masters() + make_transactions(company) + frappe.cache.delete_keys("bootinfo") + frappe.publish_realtime("demo_data_complete") + except Exception: + frappe.log_error("Failed to create demo data") + capture("demo_data_creation_failed", "erpnext", properties={"exception": frappe.get_traceback()}) + raise + capture("demo_data_creation_completed", "erpnext") @frappe.whitelist() def clear_demo_data(): + frappe.only_for("System Manager") company = frappe.db.get_single_value("Global Defaults", "demo_company") create_transaction_deletion_record(company) clear_masters() diff --git a/erpnext/setup/setup_wizard/setup_wizard.py b/erpnext/setup/setup_wizard/setup_wizard.py index ad49be647b0..ebd7d1e9ccf 100644 --- a/erpnext/setup/setup_wizard/setup_wizard.py +++ b/erpnext/setup/setup_wizard/setup_wizard.py @@ -5,8 +5,8 @@ import frappe from frappe import _ -from ..demo import setup_demo_data -from .operations import install_fixtures as fixtures +from erpnext.setup.demo import setup_demo_data +from erpnext.setup.setup_wizard.operations import install_fixtures as fixtures def get_setup_stages(args=None): @@ -40,7 +40,7 @@ def get_setup_stages(args=None): { "status": _("Setting up demo data"), "fail_msg": _("Failed to setup demo data"), - "tasks": [{"fn": setup_demo, "args": args, "fail_msg": _("Failed to login")}], + "tasks": [{"fn": setup_demo, "args": args, "fail_msg": _("Failed to setup demo data")}], }, { "status": _("Wrapping up"), @@ -71,7 +71,7 @@ def fin(args): def setup_demo(args): if args.get("setup_demo"): - setup_demo_data() + frappe.enqueue(setup_demo_data, enqueue_after_commit=True) def login_as_first_user(args):