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):