blob: 4a18a99f41f514b69811c936ba9c0586d78482f1 [file] [log] [blame]
Chillar Anand915b3432021-09-02 16:44:59 +05301import sys
2
3import frappe
Rushabh Mehtadc8067e2016-06-29 18:38:32 +05304import frappe.utils
Chillar Anand915b3432021-09-02 16:44:59 +05305
6import erpnext
ChillarAnandc8565c72021-09-02 19:57:43 +05307from erpnext.demo.setup import education, manufacture, retail, setup_data
Chillar Anand915b3432021-09-02 16:44:59 +05308from erpnext.demo.user import accounts
Zlash65e8958452018-10-01 10:47:29 +05309from erpnext.demo.user import education as edu
Chillar Anand915b3432021-09-02 16:44:59 +053010from erpnext.demo.user import fixed_asset, hr, manufacturing, projects, purchase, sales, stock
11
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053012"""
13Make a demo
14
151. Start with a fresh account
16
17bench --site demo.erpnext.dev reinstall
18
192. Install Demo
20
21bench --site demo.erpnext.dev execute erpnext.demo.demo.make
22
233. If Demo breaks, to continue
24
25bench --site demo.erpnext.dev execute erpnext.demo.demo.simulate
26
27"""
28
Rushabh Mehta4f8f9c12017-06-12 09:18:06 +053029def make(domain='Manufacturing', days=100):
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053030 frappe.flags.domain = domain
Rushabh Mehtab814a542016-07-13 18:17:19 +053031 frappe.flags.mute_emails = True
Neil Trini Lasrado06724592016-08-22 12:57:09 +053032 setup_data.setup(domain)
33 if domain== 'Manufacturing':
34 manufacture.setup_data()
Zlash65fd9c4512018-10-10 14:27:07 +053035 elif domain == "Retail":
36 retail.setup_data()
Neil Trini Lasrado06724592016-08-22 12:57:09 +053037 elif domain== 'Education':
38 education.setup_data()
Rushabh Mehta99c814b2016-12-19 11:51:02 +053039
Rushabh Mehtaffa70e32016-07-13 17:41:03 +053040 site = frappe.local.site
41 frappe.destroy()
42 frappe.init(site)
43 frappe.connect()
Manas Solankif60bd602017-06-01 18:30:35 +053044
Rushabh Mehta4f8f9c12017-06-12 09:18:06 +053045 simulate(domain, days)
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053046
Rushabh Mehta4f8f9c12017-06-12 09:18:06 +053047def simulate(domain='Manufacturing', days=100):
48 runs_for = frappe.flags.runs_for or days
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053049 frappe.flags.company = erpnext.get_default_company()
Rushabh Mehtab814a542016-07-13 18:17:19 +053050 frappe.flags.mute_emails = True
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053051
52 if not frappe.flags.start_date:
53 # start date = 100 days back
Rushabh Mehta4f8f9c12017-06-12 09:18:06 +053054 frappe.flags.start_date = frappe.utils.add_days(frappe.utils.nowdate(),
55 -1 * runs_for)
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053056
57 current_date = frappe.utils.getdate(frappe.flags.start_date)
58
59 # continue?
60 demo_last_date = frappe.db.get_global('demo_last_date')
61 if demo_last_date:
Neil Trini Lasrado06724592016-08-22 12:57:09 +053062 current_date = frappe.utils.add_days(frappe.utils.getdate(demo_last_date), 1)
Rushabh Mehta99c814b2016-12-19 11:51:02 +053063
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053064 # run till today
65 if not runs_for:
66 runs_for = frappe.utils.date_diff(frappe.utils.nowdate(), current_date)
67 # runs_for = 100
Rushabh Mehta06c92a72016-08-03 16:27:11 +053068
Nabin Hait3edefb12016-07-20 16:13:18 +053069 fixed_asset.work()
Achilles Rasquinha96698c92018-02-28 16:12:51 +053070 for i in range(runs_for):
Rushabh Mehta99c814b2016-12-19 11:51:02 +053071 sys.stdout.write("\rSimulating {0}: Day {1}".format(
72 current_date.strftime("%Y-%m-%d"), i))
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053073 sys.stdout.flush()
74 frappe.flags.current_date = current_date
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053075 if current_date.weekday() in (5, 6):
76 current_date = frappe.utils.add_days(current_date, 1)
77 continue
Neil Trini Lasrado06724592016-08-22 12:57:09 +053078 try:
79 hr.work()
80 purchase.work()
81 stock.work()
82 accounts.work()
83 projects.run_projects(current_date)
Zlash65fd9c4512018-10-10 14:27:07 +053084 sales.work(domain)
Manas Solankif60bd602017-06-01 18:30:35 +053085 # run_messages()
Rushabh Mehta99c814b2016-12-19 11:51:02 +053086
Neil Trini Lasrado06724592016-08-22 12:57:09 +053087 if domain=='Manufacturing':
Neil Trini Lasrado06724592016-08-22 12:57:09 +053088 manufacturing.work()
89 elif domain=='Education':
Zlash65e8958452018-10-01 10:47:29 +053090 edu.work()
Rushabh Mehta99c814b2016-12-19 11:51:02 +053091
Ankush Menat694ae812021-09-01 14:40:56 +053092 except Exception:
Neil Trini Lasrado06724592016-08-22 12:57:09 +053093 frappe.db.set_global('demo_last_date', current_date)
Rushabh Mehta99c814b2016-12-19 11:51:02 +053094 raise
Neil Trini Lasrado06724592016-08-22 12:57:09 +053095 finally:
96 current_date = frappe.utils.add_days(current_date, 1)
97 frappe.db.commit()