feat: Demo data creation
diff --git a/erpnext/setup/demo.py b/erpnext/setup/demo.py
new file mode 100644
index 0000000..95e8a4d
--- /dev/null
+++ b/erpnext/setup/demo.py
@@ -0,0 +1,49 @@
+# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+import json
+import os
+
+import frappe
+
+
+@frappe.whitelist()
+def setup_demo_data():
+	create_demo_company()
+	process_demo_data()
+	make_transactions()
+
+
+def create_demo_company():
+	company = frappe.db.get_value("Company", {"docstatus": 0})
+	company_doc = frappe.get_doc("Company", company)
+
+	# Make a dummy company
+	new_company = frappe.new_doc("Company")
+	new_company.company_name = company_doc.company_name + " (Demo)"
+	new_company.abbr = company_doc.abbr + "D"
+	new_company.enable_perpetual_inventory = 1
+	new_company.default_currency = company_doc.default_currency
+	new_company.country = company_doc.country
+	new_company.chart_of_accounts_based_on = "Standard Template"
+	new_company.chart_of_accounts = company_doc.chart_of_accounts
+	new_company.insert()
+
+
+def process_demo_data():
+	demo_doctypes = frappe.get_hooks("demo_doctypes") or []
+	path = os.path.join(os.path.dirname(__file__), "demo_data")
+	for doctype in demo_doctypes:
+		with open(os.path.join(path, doctype + ".json"), "r") as f:
+			data = f.read()
+			if data:
+				for item in json.loads(data):
+					create_demo_record(item)
+
+
+def create_demo_record(doctype):
+	frappe.get_doc(doctype).insert(ignore_permissions=True)
+
+
+def make_transactions():
+	pass