blob: e1bf8d0fdd9a975f62ec8aa55f336b78f3016945 [file] [log] [blame]
Rushabh Mehtadc8067e2016-06-29 18:38:32 +05301
Chillar Anand915b3432021-09-02 16:44:59 +05302import sys
3
4import frappe
Rushabh Mehtadc8067e2016-06-29 18:38:32 +05305import frappe.utils
Chillar Anand915b3432021-09-02 16:44:59 +05306
7import erpnext
ChillarAnandc8565c72021-09-02 19:57:43 +05308from erpnext.demo.setup import education, manufacture, retail, setup_data
Chillar Anand915b3432021-09-02 16:44:59 +05309from erpnext.demo.user import accounts
Zlash65e8958452018-10-01 10:47:29 +053010from erpnext.demo.user import education as edu
Chillar Anand915b3432021-09-02 16:44:59 +053011from erpnext.demo.user import fixed_asset, hr, manufacturing, projects, purchase, sales, stock
12
Rushabh Mehta8cfe18e2016-07-13 11:29:59 +053013"""
14Make a demo
15
161. Start with a fresh account
17
18bench --site demo.erpnext.dev reinstall
19
202. Install Demo
21
22bench --site demo.erpnext.dev execute erpnext.demo.demo.make
23
243. If Demo breaks, to continue
25
26bench --site demo.erpnext.dev execute erpnext.demo.demo.simulate
27
28"""
29
Rushabh Mehta4f8f9c12017-06-12 09:18:06 +053030def make(domain='Manufacturing', days=100):
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053031 frappe.flags.domain = domain
Rushabh Mehtab814a542016-07-13 18:17:19 +053032 frappe.flags.mute_emails = True
Neil Trini Lasrado06724592016-08-22 12:57:09 +053033 setup_data.setup(domain)
34 if domain== 'Manufacturing':
35 manufacture.setup_data()
Zlash65fd9c4512018-10-10 14:27:07 +053036 elif domain == "Retail":
37 retail.setup_data()
Neil Trini Lasrado06724592016-08-22 12:57:09 +053038 elif domain== 'Education':
39 education.setup_data()
Rushabh Mehta99c814b2016-12-19 11:51:02 +053040
Rushabh Mehtaffa70e32016-07-13 17:41:03 +053041 site = frappe.local.site
42 frappe.destroy()
43 frappe.init(site)
44 frappe.connect()
Manas Solankif60bd602017-06-01 18:30:35 +053045
Rushabh Mehta4f8f9c12017-06-12 09:18:06 +053046 simulate(domain, days)
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053047
Rushabh Mehta4f8f9c12017-06-12 09:18:06 +053048def simulate(domain='Manufacturing', days=100):
49 runs_for = frappe.flags.runs_for or days
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053050 frappe.flags.company = erpnext.get_default_company()
Rushabh Mehtab814a542016-07-13 18:17:19 +053051 frappe.flags.mute_emails = True
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053052
53 if not frappe.flags.start_date:
54 # start date = 100 days back
Rushabh Mehta4f8f9c12017-06-12 09:18:06 +053055 frappe.flags.start_date = frappe.utils.add_days(frappe.utils.nowdate(),
56 -1 * runs_for)
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053057
58 current_date = frappe.utils.getdate(frappe.flags.start_date)
59
60 # continue?
61 demo_last_date = frappe.db.get_global('demo_last_date')
62 if demo_last_date:
Neil Trini Lasrado06724592016-08-22 12:57:09 +053063 current_date = frappe.utils.add_days(frappe.utils.getdate(demo_last_date), 1)
Rushabh Mehta99c814b2016-12-19 11:51:02 +053064
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053065 # run till today
66 if not runs_for:
67 runs_for = frappe.utils.date_diff(frappe.utils.nowdate(), current_date)
68 # runs_for = 100
Rushabh Mehta06c92a72016-08-03 16:27:11 +053069
Nabin Hait3edefb12016-07-20 16:13:18 +053070 fixed_asset.work()
Achilles Rasquinha96698c92018-02-28 16:12:51 +053071 for i in range(runs_for):
Rushabh Mehta99c814b2016-12-19 11:51:02 +053072 sys.stdout.write("\rSimulating {0}: Day {1}".format(
73 current_date.strftime("%Y-%m-%d"), i))
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053074 sys.stdout.flush()
75 frappe.flags.current_date = current_date
Rushabh Mehtadc8067e2016-06-29 18:38:32 +053076 if current_date.weekday() in (5, 6):
77 current_date = frappe.utils.add_days(current_date, 1)
78 continue
Neil Trini Lasrado06724592016-08-22 12:57:09 +053079 try:
80 hr.work()
81 purchase.work()
82 stock.work()
83 accounts.work()
84 projects.run_projects(current_date)
Zlash65fd9c4512018-10-10 14:27:07 +053085 sales.work(domain)
Manas Solankif60bd602017-06-01 18:30:35 +053086 # run_messages()
Rushabh Mehta99c814b2016-12-19 11:51:02 +053087
Neil Trini Lasrado06724592016-08-22 12:57:09 +053088 if domain=='Manufacturing':
Neil Trini Lasrado06724592016-08-22 12:57:09 +053089 manufacturing.work()
90 elif domain=='Education':
Zlash65e8958452018-10-01 10:47:29 +053091 edu.work()
Rushabh Mehta99c814b2016-12-19 11:51:02 +053092
Ankush Menat694ae812021-09-01 14:40:56 +053093 except Exception:
Neil Trini Lasrado06724592016-08-22 12:57:09 +053094 frappe.db.set_global('demo_last_date', current_date)
Rushabh Mehta99c814b2016-12-19 11:51:02 +053095 raise
Neil Trini Lasrado06724592016-08-22 12:57:09 +053096 finally:
97 current_date = frappe.utils.add_days(current_date, 1)
98 frappe.db.commit()