blob: 41faff2c81b8ce5716937e45c362109d284bfdae [file] [log] [blame]
Deepesh Garg8ef257a2023-06-14 12:54:10 +05301# Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and Contributors
2# License: GNU General Public License v3. See license.txt
3
4import json
5import os
6
7import frappe
8
Deepesh Garg77a29572023-06-16 13:43:55 +05309import erpnext
10
Deepesh Garg8ef257a2023-06-14 12:54:10 +053011
12@frappe.whitelist()
13def setup_demo_data():
Deepesh Garg77a29572023-06-16 13:43:55 +053014 company = create_demo_company()
15 process_masters()
16 make_transactions(company)
17
18
19@frappe.whitelist()
20def clear_demo_data():
Deepesh Garg5b6a9fc2023-06-17 13:08:18 +053021 company = erpnext.get_default_company()
Deepesh Garg77a29572023-06-16 13:43:55 +053022 create_transaction_deletion_record(company)
Deepesh Garg5b6a9fc2023-06-17 13:08:18 +053023 clear_masters()
24 delete_company(company)
Deepesh Garg8ef257a2023-06-14 12:54:10 +053025
26
27def create_demo_company():
Deepesh Garg5b6a9fc2023-06-17 13:08:18 +053028 company = erpnext.get_default_company()
Deepesh Garg8ef257a2023-06-14 12:54:10 +053029 company_doc = frappe.get_doc("Company", company)
30
31 # Make a dummy company
32 new_company = frappe.new_doc("Company")
33 new_company.company_name = company_doc.company_name + " (Demo)"
34 new_company.abbr = company_doc.abbr + "D"
35 new_company.enable_perpetual_inventory = 1
36 new_company.default_currency = company_doc.default_currency
37 new_company.country = company_doc.country
38 new_company.chart_of_accounts_based_on = "Standard Template"
39 new_company.chart_of_accounts = company_doc.chart_of_accounts
40 new_company.insert()
41
Deepesh Garg5b6a9fc2023-06-17 13:08:18 +053042 frappe.db.set_single_value("Global Defaults", "original_default_company", company)
43
44 # Set Demo Company as default to
45 frappe.db.set_single_value("Global Defaults", "default_company", new_company.name)
Deepesh Garg77a29572023-06-16 13:43:55 +053046 return new_company.name
Deepesh Garg8ef257a2023-06-14 12:54:10 +053047
Deepesh Garg77a29572023-06-16 13:43:55 +053048
49def process_masters():
Deepesh Garg5b6a9fc2023-06-17 13:08:18 +053050 for doctype in frappe.get_hooks("demo_master_doctypes"):
51 data = read_data_file_using_hooks(doctype)
52 if data:
53 for item in json.loads(data):
54 create_demo_record(item)
Deepesh Garg8ef257a2023-06-14 12:54:10 +053055
56
57def create_demo_record(doctype):
58 frappe.get_doc(doctype).insert(ignore_permissions=True)
59
60
Deepesh Garg77a29572023-06-16 13:43:55 +053061def make_transactions(company):
Deepesh Garg5b6a9fc2023-06-17 13:08:18 +053062 for doctype in frappe.get_hooks("demo_transaction_doctypes"):
63 data = read_data_file_using_hooks(doctype)
64 if data:
65 for item in json.loads(data):
66 create_transaction(item, company)
Deepesh Garg77a29572023-06-16 13:43:55 +053067
68
69def create_transaction(doctype, company):
70 doctype.update({"company": company})
71
72 income_account, expense_account = frappe.db.get_value(
73 "Company", company, ["default_income_account", "default_expense_account"]
74 )
75
76 for item in doctype.get("items"):
77 item.update(
78 {
79 "cost_center": erpnext.get_default_cost_center(company),
80 "income_account": income_account,
81 "expense_account": expense_account,
82 }
83 )
84
85 doc = frappe.get_doc(doctype)
86 doc.save(ignore_permissions=True)
87 doc.submit()
88
89
90def create_transaction_deletion_record(company):
91 transaction_deletion_record = frappe.new_doc("Transaction Deletion Record")
92 transaction_deletion_record.company = company
93 transaction_deletion_record.save(ignore_permissions=True)
94 transaction_deletion_record.submit()
Deepesh Garg5b6a9fc2023-06-17 13:08:18 +053095
96
97def clear_masters():
98 for doctype in frappe.get_hooks("demo_master_doctypes")[::-1]:
99 data = read_data_file_using_hooks(doctype)
100 if data:
101 for item in json.loads(data):
102 clear_demo_record(item)
103
104
105def clear_demo_record(doctype):
106 doc_type = doctype.get("doctype")
107 del doctype["doctype"]
108 doc = frappe.get_doc(doc_type, doctype)
109 frappe.delete_doc(doc.doctype, doc.name, ignore_permissions=True)
110
111
112def delete_company(company):
113 original_company = frappe.db.get_single_value("Global Defaults", "original_default_company")
114 frappe.db.set_single_value("Global Defaults", "default_company", original_company)
115 frappe.delete_doc("Company", company, ignore_permissions=True)
116
117
118def read_data_file_using_hooks(doctype):
119 path = os.path.join(os.path.dirname(__file__), "demo_data")
120 with open(os.path.join(path, doctype + ".json"), "r") as f:
121 data = f.read()
122
123 return data