style: bulk format code with black

v13 port because otherwise backports will result in conflicts always
This commit is contained in:
Ankush Menat
2022-03-29 17:29:34 +05:30
parent 7cc84dcbb4
commit c07713b860
1555 changed files with 96709 additions and 66138 deletions

View File

@@ -1,4 +1,3 @@
import sys
import frappe
@@ -27,17 +26,18 @@ bench --site demo.erpnext.dev execute erpnext.demo.demo.simulate
"""
def make(domain='Manufacturing', days=100):
def make(domain="Manufacturing", days=100):
frappe.flags.domain = domain
frappe.flags.mute_emails = True
setup_data.setup(domain)
if domain== 'Manufacturing':
if domain == "Manufacturing":
manufacture.setup_data()
elif domain == "Retail":
retail.setup_data()
elif domain== 'Education':
elif domain == "Education":
education.setup_data()
elif domain== 'Healthcare':
elif domain == "Healthcare":
healthcare.setup_data()
site = frappe.local.site
@@ -47,20 +47,20 @@ def make(domain='Manufacturing', days=100):
simulate(domain, days)
def simulate(domain='Manufacturing', days=100):
def simulate(domain="Manufacturing", days=100):
runs_for = frappe.flags.runs_for or days
frappe.flags.company = erpnext.get_default_company()
frappe.flags.mute_emails = True
if not frappe.flags.start_date:
# start date = 100 days back
frappe.flags.start_date = frappe.utils.add_days(frappe.utils.nowdate(),
-1 * runs_for)
frappe.flags.start_date = frappe.utils.add_days(frappe.utils.nowdate(), -1 * runs_for)
current_date = frappe.utils.getdate(frappe.flags.start_date)
# continue?
demo_last_date = frappe.db.get_global('demo_last_date')
demo_last_date = frappe.db.get_global("demo_last_date")
if demo_last_date:
current_date = frappe.utils.add_days(frappe.utils.getdate(demo_last_date), 1)
@@ -71,8 +71,7 @@ def simulate(domain='Manufacturing', days=100):
fixed_asset.work()
for i in range(runs_for):
sys.stdout.write("\rSimulating {0}: Day {1}".format(
current_date.strftime("%Y-%m-%d"), i))
sys.stdout.write("\rSimulating {0}: Day {1}".format(current_date.strftime("%Y-%m-%d"), i))
sys.stdout.flush()
frappe.flags.current_date = current_date
if current_date.weekday() in (5, 6):
@@ -87,13 +86,13 @@ def simulate(domain='Manufacturing', days=100):
sales.work(domain)
# run_messages()
if domain=='Manufacturing':
if domain == "Manufacturing":
manufacturing.work()
elif domain=='Education':
elif domain == "Education":
edu.work()
except Exception:
frappe.db.set_global('demo_last_date', current_date)
frappe.db.set_global("demo_last_date", current_date)
raise
finally:
current_date = frappe.utils.add_days(current_date, 1)

View File

@@ -1,27 +1,14 @@
data = {
'Manufacturing': {
'company_name': 'Wind Power LLC'
"Manufacturing": {"company_name": "Wind Power LLC"},
"Retail": {
"company_name": "Mobile Next",
},
'Retail': {
'company_name': 'Mobile Next',
"Distribution": {
"company_name": "Soltice Hardware",
},
'Distribution': {
'company_name': 'Soltice Hardware',
},
'Services': {
'company_name': 'Acme Consulting'
},
'Education': {
'company_name': 'Whitmore College'
},
'Healthcare': {
'company_name': 'ABC Hospital Ltd.'
},
'Agriculture': {
'company_name': 'Schrute Farms'
},
'Non Profit': {
'company_name': 'Erpnext Foundation'
}
"Services": {"company_name": "Acme Consulting"},
"Education": {"company_name": "Whitmore College"},
"Healthcare": {"company_name": "ABC Hospital Ltd."},
"Agriculture": {"company_name": "Schrute Farms"},
"Non Profit": {"company_name": "Erpnext Foundation"},
}

View File

@@ -23,6 +23,7 @@ def setup_data():
frappe.db.commit()
frappe.clear_cache()
def make_masters():
import_json("Room")
import_json("Department")
@@ -34,16 +35,21 @@ def make_masters():
import_json("Grading Scale")
frappe.db.commit()
def setup_item():
items = json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data', 'item_education.json')).read())
items = json.loads(
open(frappe.get_app_path("erpnext", "demo", "data", "item_education.json")).read()
)
for i in items:
item = frappe.new_doc('Item')
item = frappe.new_doc("Item")
item.update(i)
item.min_order_qty = random.randint(10, 30)
item.item_defaults[0].default_warehouse = frappe.get_all('Warehouse',
filters={'warehouse_name': item.item_defaults[0].default_warehouse}, limit=1)[0].name
item.item_defaults[0].default_warehouse = frappe.get_all(
"Warehouse", filters={"warehouse_name": item.item_defaults[0].default_warehouse}, limit=1
)[0].name
item.insert()
def make_student_applicants():
blood_group = ["A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-"]
male_names = []
@@ -55,39 +61,46 @@ def make_student_applicants():
count = 1
for d in random_student_data:
if d.get('gender') == "Male":
male_names.append(d.get('first_name').title())
if d.get("gender") == "Male":
male_names.append(d.get("first_name").title())
if d.get('gender') == "Female":
female_names.append(d.get('first_name').title())
if d.get("gender") == "Female":
female_names.append(d.get("first_name").title())
for idx, d in enumerate(random_student_data):
student_applicant = frappe.new_doc("Student Applicant")
student_applicant.first_name = d.get('first_name').title()
student_applicant.last_name = d.get('last_name').title()
student_applicant.image = d.get('image')
student_applicant.gender = d.get('gender')
student_applicant.first_name = d.get("first_name").title()
student_applicant.last_name = d.get("last_name").title()
student_applicant.image = d.get("image")
student_applicant.gender = d.get("gender")
student_applicant.program = get_random("Program")
student_applicant.blood_group = random.choice(blood_group)
year = random.randint(1990, 1998)
month = random.randint(1, 12)
day = random.randint(1, 28)
student_applicant.date_of_birth = datetime(year, month, day)
student_applicant.mother_name = random.choice(female_names) + " " + d.get('last_name').title()
student_applicant.father_name = random.choice(male_names) + " " + d.get('last_name').title()
student_applicant.mother_name = random.choice(female_names) + " " + d.get("last_name").title()
student_applicant.father_name = random.choice(male_names) + " " + d.get("last_name").title()
if student_applicant.gender == "Male":
student_applicant.middle_name = random.choice(male_names)
else:
student_applicant.middle_name = random.choice(female_names)
student_applicant.student_email_id = d.get('first_name') + "_" + \
student_applicant.middle_name + "_" + d.get('last_name') + "@example.com"
if count <5:
student_applicant.student_email_id = (
d.get("first_name")
+ "_"
+ student_applicant.middle_name
+ "_"
+ d.get("last_name")
+ "@example.com"
)
if count < 5:
student_applicant.insert()
frappe.db.commit()
else:
student_applicant.submit()
frappe.db.commit()
count+=1
count += 1
def make_student_group():
for term in frappe.db.get_list("Academic Term"):
@@ -109,17 +122,25 @@ def make_student_group():
student_group.save()
frappe.db.commit()
def make_fees_category():
fee_type = ["Tuition Fee", "Hostel Fee", "Logistics Fee",
"Medical Fee", "Mess Fee", "Security Deposit"]
fee_desc = {"Tuition Fee" : "Curricular activities which includes books, notebooks and faculty charges" ,
"Hostel Fee" : "Stay of students in institute premises",
"Logistics Fee" : "Lodging boarding of the students" ,
"Medical Fee" : "Medical welfare of the students",
"Mess Fee" : "Food and beverages for your ward",
"Security Deposit" : "In case your child is found to have damaged institutes property"
}
def make_fees_category():
fee_type = [
"Tuition Fee",
"Hostel Fee",
"Logistics Fee",
"Medical Fee",
"Mess Fee",
"Security Deposit",
]
fee_desc = {
"Tuition Fee": "Curricular activities which includes books, notebooks and faculty charges",
"Hostel Fee": "Stay of students in institute premises",
"Logistics Fee": "Lodging boarding of the students",
"Medical Fee": "Medical welfare of the students",
"Mess Fee": "Food and beverages for your ward",
"Security Deposit": "In case your child is found to have damaged institutes property",
}
for i in fee_type:
fee_category = frappe.new_doc("Fee Category")
@@ -128,6 +149,7 @@ def make_fees_category():
fee_category.insert()
frappe.db.commit()
def make_fees_structure():
for d in frappe.db.get_list("Program"):
program = frappe.get_doc("Program", d.name)
@@ -135,29 +157,40 @@ def make_fees_structure():
fee_structure = frappe.new_doc("Fee Structure")
fee_structure.program = d.name
fee_structure.academic_term = random.choice(frappe.db.get_list("Academic Term")).name
for j in range(1,4):
temp = {"fees_category": random.choice(frappe.db.get_list("Fee Category")).name , "amount" : random.randint(500,1000)}
for j in range(1, 4):
temp = {
"fees_category": random.choice(frappe.db.get_list("Fee Category")).name,
"amount": random.randint(500, 1000),
}
fee_structure.append("components", temp)
fee_structure.insert()
program.append("fees", {"academic_term": academic_term, "fee_structure": fee_structure.name, "amount": fee_structure.total_amount})
program.append(
"fees",
{
"academic_term": academic_term,
"fee_structure": fee_structure.name,
"amount": fee_structure.total_amount,
},
)
program.save()
frappe.db.commit()
def make_assessment_groups():
for year in frappe.db.get_list("Academic Year"):
ag = frappe.new_doc('Assessment Group')
ag = frappe.new_doc("Assessment Group")
ag.assessment_group_name = year.name
ag.parent_assessment_group = "All Assessment Groups"
ag.is_group = 1
ag.insert()
for term in frappe.db.get_list("Academic Term", filters = {"academic_year": year.name}):
ag1 = frappe.new_doc('Assessment Group')
for term in frappe.db.get_list("Academic Term", filters={"academic_year": year.name}):
ag1 = frappe.new_doc("Assessment Group")
ag1.assessment_group_name = term.name
ag1.parent_assessment_group = ag.name
ag1.is_group = 1
ag1.insert()
for assessment_group in ['Term I', 'Term II']:
ag2 = frappe.new_doc('Assessment Group')
for assessment_group in ["Term I", "Term II"]:
ag2 = frappe.new_doc("Assessment Group")
ag2.assessment_group_name = ag1.name + " " + assessment_group
ag2.parent_assessment_group = ag1.name
ag2.insert()
@@ -165,7 +198,8 @@ def make_assessment_groups():
def get_json_path(doctype):
return frappe.get_app_path('erpnext', 'demo', 'data', frappe.scrub(doctype) + '.json')
return frappe.get_app_path("erpnext", "demo", "data", frappe.scrub(doctype) + ".json")
def weighted_choice(weights):
totals = []

View File

@@ -24,11 +24,13 @@ def setup_data():
frappe.db.commit()
frappe.clear_cache()
def make_masters():
import_json("Healthcare Practitioner")
import_drug()
frappe.db.commit()
def make_patient():
file_path = get_json_path("Patient")
with open(file_path, "r") as open_file:
@@ -37,15 +39,18 @@ def make_patient():
for d in enumerate(patient_data):
patient = frappe.new_doc("Patient")
patient.patient_name = d[1]['patient_name'].title()
patient.sex = d[1]['gender']
patient.patient_name = d[1]["patient_name"].title()
patient.sex = d[1]["gender"]
patient.blood_group = "A Positive"
patient.date_of_birth = datetime.datetime(1990, 3, 25)
patient.email_id = d[1]['patient_name'] + "_" + patient.date_of_birth.strftime('%m/%d/%Y') + "@example.com"
if count <5:
patient.email_id = (
d[1]["patient_name"] + "_" + patient.date_of_birth.strftime("%m/%d/%Y") + "@example.com"
)
if count < 5:
patient.insert()
frappe.db.commit()
count+=1
count += 1
def make_appointment():
i = 1
@@ -56,7 +61,7 @@ def make_appointment():
patient_sex = frappe.get_value("Patient", patient, "sex")
appointment = frappe.new_doc("Patient Appointment")
startDate = datetime.datetime.now()
for x in random_date(startDate,0):
for x in random_date(startDate, 0):
appointment_datetime = x
appointment.appointment_datetime = appointment_datetime
appointment.appointment_time = appointment_datetime
@@ -65,9 +70,10 @@ def make_appointment():
appointment.patient_sex = patient_sex
appointment.practitioner = practitioner
appointment.department = department
appointment.save(ignore_permissions = True)
appointment.save(ignore_permissions=True)
i += 1
def make_consulation():
for i in range(3):
practitioner = get_random("Healthcare Practitioner")
@@ -77,14 +83,23 @@ def make_consulation():
encounter = set_encounter(patient, patient_sex, practitioner, department, getdate(), i)
encounter.save(ignore_permissions=True)
def consulation_on_appointment():
for i in range(3):
appointment = get_random("Patient Appointment")
appointment = frappe.get_doc("Patient Appointment",appointment)
encounter = set_encounter(appointment.patient, appointment.patient_sex, appointment.practitioner, appointment.department, appointment.appointment_date, i)
appointment = frappe.get_doc("Patient Appointment", appointment)
encounter = set_encounter(
appointment.patient,
appointment.patient_sex,
appointment.practitioner,
appointment.department,
appointment.appointment_date,
i,
)
encounter.appointment = appointment.name
encounter.save(ignore_permissions=True)
def set_encounter(patient, patient_sex, practitioner, department, encounter_date, i):
encounter = frappe.new_doc("Patient Encounter")
encounter.patient = patient
@@ -92,7 +107,7 @@ def set_encounter(patient, patient_sex, practitioner, department, encounter_date
encounter.practitioner = practitioner
encounter.visit_department = department
encounter.encounter_date = encounter_date
if i > 2 and patient_sex=='Female':
if i > 2 and patient_sex == "Female":
encounter.symptoms = "Having chest pains for the last week."
encounter.diagnosis = """This patient's description of dull, aching,
exertion related substernal chest pain is suggestive of ischemic
@@ -104,6 +119,7 @@ def set_encounter(patient, patient_sex, practitioner, department, encounter_date
encounter = append_test_rx(encounter)
return encounter
def make_lab_test():
practitioner = get_random("Healthcare Practitioner")
patient = get_random("Patient")
@@ -111,15 +127,23 @@ def make_lab_test():
template = get_random("Lab Test Template")
set_lab_test(patient, patient_sex, practitioner, template)
def lab_test_on_encounter():
i = 1
while i <= 2:
test_rx = get_random("Lab Prescription", filters={'test_created': 0})
test_rx = get_random("Lab Prescription", filters={"test_created": 0})
test_rx = frappe.get_doc("Lab Prescription", test_rx)
encounter = frappe.get_doc("Patient Encounter", test_rx.parent)
set_lab_test(encounter.patient, encounter.patient_sex, encounter.practitioner, test_rx.test_code, test_rx.name)
set_lab_test(
encounter.patient,
encounter.patient_sex,
encounter.practitioner,
test_rx.test_code,
test_rx.name,
)
i += 1
def set_lab_test(patient, patient_sex, practitioner, template, rx=None):
lab_test = frappe.new_doc("Lab Test")
lab_test.practitioner = practitioner
@@ -129,6 +153,7 @@ def set_lab_test(patient, patient_sex, practitioner, template, rx=None):
lab_test.prescription = rx
create_test_from_template(lab_test)
def append_test_rx(encounter):
i = 1
while i <= 2:
@@ -137,10 +162,11 @@ def append_test_rx(encounter):
i += 1
return encounter
def append_drug_rx(encounter):
i = 1
while i <= 3:
drug = get_random("Item", filters={"item_group":"Drug"})
drug = get_random("Item", filters={"item_group": "Drug"})
drug = frappe.get_doc("Item", drug)
drug_rx = encounter.append("drug_prescription")
drug_rx.drug_code = drug.item_code
@@ -150,21 +176,24 @@ def append_drug_rx(encounter):
i += 1
return encounter
def random_date(start,l):
current = start
while l >= 0:
curr = current + datetime.timedelta(minutes=60)
yield curr
l-=1
def random_date(start, l):
current = start
while l >= 0:
curr = current + datetime.timedelta(minutes=60)
yield curr
l -= 1
def import_drug():
frappe.flags.in_import = True
data = json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data', 'drug_list.json')).read())
data = json.loads(open(frappe.get_app_path("erpnext", "demo", "data", "drug_list.json")).read())
for d in data:
doc = frappe.new_doc("Item")
doc.update(d)
doc.insert()
frappe.flags.in_import = False
def get_json_path(doctype):
return frappe.get_app_path('erpnext', 'demo', 'data', frappe.scrub(doctype) + '.json')
return frappe.get_app_path("erpnext", "demo", "data", frappe.scrub(doctype) + ".json")

View File

@@ -1,4 +1,3 @@
import json
import random
@@ -16,44 +15,49 @@ def setup_data():
setup_item()
setup_workstation()
setup_asset()
import_json('Operation')
import_json("Operation")
setup_item_price()
show_item_groups_in_website()
import_json('BOM', submit=True)
import_json("BOM", submit=True)
frappe.db.commit()
frappe.clear_cache()
def setup_workstation():
workstations = [u'Drilling Machine 1', u'Lathe 1', u'Assembly Station 1', u'Assembly Station 2', u'Packing and Testing Station']
workstations = [
"Drilling Machine 1",
"Lathe 1",
"Assembly Station 1",
"Assembly Station 2",
"Packing and Testing Station",
]
for w in workstations:
frappe.get_doc({
"doctype": "Workstation",
"workstation_name": w,
"holiday_list": frappe.get_all("Holiday List")[0].name,
"hour_rate_consumable": int(random.random() * 20),
"hour_rate_electricity": int(random.random() * 10),
"hour_rate_labour": int(random.random() * 40),
"hour_rate_rent": int(random.random() * 10),
"working_hours": [
{
"enabled": 1,
"start_time": "8:00:00",
"end_time": "15:00:00"
}
]
}).insert()
frappe.get_doc(
{
"doctype": "Workstation",
"workstation_name": w,
"holiday_list": frappe.get_all("Holiday List")[0].name,
"hour_rate_consumable": int(random.random() * 20),
"hour_rate_electricity": int(random.random() * 10),
"hour_rate_labour": int(random.random() * 40),
"hour_rate_rent": int(random.random() * 10),
"working_hours": [{"enabled": 1, "start_time": "8:00:00", "end_time": "15:00:00"}],
}
).insert()
def show_item_groups_in_website():
"""set show_in_website=1 for Item Groups"""
products = frappe.get_doc("Item Group", "Products")
products.show_in_website = 1
products.route = 'products'
products.route = "products"
products.save()
def setup_asset():
assets = json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data', 'asset.json')).read())
assets = json.loads(open(frappe.get_app_path("erpnext", "demo", "data", "asset.json")).read())
for d in assets:
asset = frappe.new_doc('Asset')
asset = frappe.new_doc("Asset")
asset.update(d)
asset.purchase_date = add_days(nowdate(), -random.randint(20, 1500))
asset.next_depreciation_date = add_days(asset.purchase_date, 30)
@@ -65,28 +69,35 @@ def setup_asset():
asset.save()
asset.submit()
def setup_item():
items = json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data', 'item.json')).read())
items = json.loads(open(frappe.get_app_path("erpnext", "demo", "data", "item.json")).read())
for i in items:
item = frappe.new_doc('Item')
item = frappe.new_doc("Item")
item.update(i)
if hasattr(item, 'item_defaults') and item.item_defaults[0].default_warehouse:
item.item_defaults[0].company = data.get("Manufacturing").get('company_name')
warehouse = frappe.get_all('Warehouse', filters={'warehouse_name': item.item_defaults[0].default_warehouse}, limit=1)
if hasattr(item, "item_defaults") and item.item_defaults[0].default_warehouse:
item.item_defaults[0].company = data.get("Manufacturing").get("company_name")
warehouse = frappe.get_all(
"Warehouse", filters={"warehouse_name": item.item_defaults[0].default_warehouse}, limit=1
)
if warehouse:
item.item_defaults[0].default_warehouse = warehouse[0].name
item.insert()
def setup_product_bundle():
frappe.get_doc({
'doctype': 'Product Bundle',
'new_item_code': 'Wind Mill A Series with Spare Bearing',
'items': [
{'item_code': 'Wind Mill A Series', 'qty': 1},
{'item_code': 'Bearing Collar', 'qty': 1},
{'item_code': 'Bearing Assembly', 'qty': 1},
]
}).insert()
frappe.get_doc(
{
"doctype": "Product Bundle",
"new_item_code": "Wind Mill A Series with Spare Bearing",
"items": [
{"item_code": "Wind Mill A Series", "qty": 1},
{"item_code": "Bearing Collar", "qty": 1},
{"item_code": "Bearing Assembly", "qty": 1},
],
}
).insert()
def setup_item_price():
frappe.db.sql("delete from `tabItem Price`")
@@ -109,7 +120,7 @@ def setup_item_price():
"Wind Mill A Series with Spare Bearing": 750,
"Wind MIll C Series": 400,
"Wind Turbine": 400,
"Wing Sheet": 30.8
"Wing Sheet": 30.8,
}
standard_buying = {
@@ -126,17 +137,19 @@ def setup_item_price():
"Shaft": 250,
"Stand": 300,
"Upper Bearing Plate": 200,
"Wing Sheet": 25
"Wing Sheet": 25,
}
for price_list in ("standard_buying", "standard_selling"):
for item, rate in iteritems(locals().get(price_list)):
frappe.get_doc({
"doctype": "Item Price",
"price_list": price_list.replace("_", " ").title(),
"item_code": item,
"selling": 1 if price_list=="standard_selling" else 0,
"buying": 1 if price_list=="standard_buying" else 0,
"price_list_rate": rate,
"currency": "USD"
}).insert()
frappe.get_doc(
{
"doctype": "Item Price",
"price_list": price_list.replace("_", " ").title(),
"item_code": item,
"selling": 1 if price_list == "standard_selling" else 0,
"buying": 1 if price_list == "standard_buying" else 0,
"price_list_rate": rate,
"currency": "USD",
}
).insert()

View File

@@ -1,4 +1,3 @@
import json
import frappe
@@ -13,19 +12,24 @@ def setup_data():
frappe.db.commit()
frappe.clear_cache()
def setup_item():
items = json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data', 'item.json')).read())
items = json.loads(open(frappe.get_app_path("erpnext", "demo", "data", "item.json")).read())
for i in items:
if not i.get("domain") == "Retail": continue
item = frappe.new_doc('Item')
if not i.get("domain") == "Retail":
continue
item = frappe.new_doc("Item")
item.update(i)
if hasattr(item, 'item_defaults') and item.item_defaults[0].default_warehouse:
item.item_defaults[0].company = data.get("Retail").get('company_name')
warehouse = frappe.get_all('Warehouse', filters={'warehouse_name': item.item_defaults[0].default_warehouse}, limit=1)
if hasattr(item, "item_defaults") and item.item_defaults[0].default_warehouse:
item.item_defaults[0].company = data.get("Retail").get("company_name")
warehouse = frappe.get_all(
"Warehouse", filters={"warehouse_name": item.item_defaults[0].default_warehouse}, limit=1
)
if warehouse:
item.item_defaults[0].default_warehouse = warehouse[0].name
item.insert()
def setup_item_price():
frappe.db.sql("delete from `tabItem Price`")
@@ -48,17 +52,19 @@ def setup_item_price():
"Xiaomi Poco F1": 200,
"Iphone XS": 600,
"Samsung Galaxy S9": 500,
"Sony Bluetooth Headphone": 69
"Sony Bluetooth Headphone": 69,
}
for price_list in ("standard_buying", "standard_selling"):
for item, rate in iteritems(locals().get(price_list)):
frappe.get_doc({
"doctype": "Item Price",
"price_list": price_list.replace("_", " ").title(),
"item_code": item,
"selling": 1 if price_list=="standard_selling" else 0,
"buying": 1 if price_list=="standard_buying" else 0,
"price_list_rate": rate,
"currency": "USD"
}).insert()
frappe.get_doc(
{
"doctype": "Item Price",
"price_list": price_list.replace("_", " ").title(),
"item_code": item,
"selling": 1 if price_list == "standard_selling" else 0,
"buying": 1 if price_list == "standard_buying" else 0,
"price_list_rate": rate,
"currency": "USD",
}
).insert()

View File

@@ -1,4 +1,3 @@
import json
import random
@@ -25,7 +24,7 @@ def setup(domain):
setup_role_permissions()
setup_custom_field_for_domain()
employees = frappe.get_all('Employee', fields=['name', 'date_of_joining'])
employees = frappe.get_all("Employee", fields=["name", "date_of_joining"])
# monthly salary
setup_salary_structure(employees[:5], 0)
@@ -37,11 +36,11 @@ def setup(domain):
setup_customer()
setup_supplier()
setup_warehouse()
import_json('Address')
import_json('Contact')
import_json('Lead')
import_json("Address")
import_json("Contact")
import_json("Lead")
setup_currency_exchange()
#setup_mode_of_payment()
# setup_mode_of_payment()
setup_account_to_expense_type()
setup_budget()
setup_pos_profile()
@@ -49,35 +48,41 @@ def setup(domain):
frappe.db.commit()
frappe.clear_cache()
def complete_setup(domain='Manufacturing'):
def complete_setup(domain="Manufacturing"):
print("Complete Setup...")
from frappe.desk.page.setup_wizard.setup_wizard import setup_complete
if not frappe.get_all('Company', limit=1):
setup_complete({
"full_name": "Test User",
"email": "test_demo@erpnext.com",
"company_tagline": 'Awesome Products and Services',
"password": "demo",
"fy_start_date": "2015-01-01",
"fy_end_date": "2015-12-31",
"bank_account": "National Bank",
"domains": [domain],
"company_name": data.get(domain).get('company_name'),
"chart_of_accounts": "Standard",
"company_abbr": ''.join([d[0] for d in data.get(domain).get('company_name').split()]).upper(),
"currency": 'USD',
"timezone": 'America/New_York',
"country": 'United States',
"language": "english"
})
if not frappe.get_all("Company", limit=1):
setup_complete(
{
"full_name": "Test User",
"email": "test_demo@erpnext.com",
"company_tagline": "Awesome Products and Services",
"password": "demo",
"fy_start_date": "2015-01-01",
"fy_end_date": "2015-12-31",
"bank_account": "National Bank",
"domains": [domain],
"company_name": data.get(domain).get("company_name"),
"chart_of_accounts": "Standard",
"company_abbr": "".join([d[0] for d in data.get(domain).get("company_name").split()]).upper(),
"currency": "USD",
"timezone": "America/New_York",
"country": "United States",
"language": "english",
}
)
company = erpnext.get_default_company()
if company:
company_doc = frappe.get_doc("Company", company)
company_doc.db_set('default_payroll_payable_account',
frappe.db.get_value('Account', dict(account_name='Payroll Payable')))
company_doc.db_set(
"default_payroll_payable_account",
frappe.db.get_value("Account", dict(account_name="Payroll Payable")),
)
def setup_demo_page():
# home page should always be "start"
@@ -85,16 +90,19 @@ def setup_demo_page():
website_settings.home_page = "demo"
website_settings.save()
def setup_fiscal_year():
fiscal_year = None
for year in range(2010, now_datetime().year + 1, 1):
try:
fiscal_year = frappe.get_doc({
"doctype": "Fiscal Year",
"year": cstr(year),
"year_start_date": "{0}-01-01".format(year),
"year_end_date": "{0}-12-31".format(year)
}).insert()
fiscal_year = frappe.get_doc(
{
"doctype": "Fiscal Year",
"year": cstr(year),
"year_start_date": "{0}-01-01".format(year),
"year_end_date": "{0}-12-31".format(year),
}
).insert()
except frappe.DuplicateEntryError:
pass
@@ -102,15 +110,18 @@ def setup_fiscal_year():
if fiscal_year:
fiscal_year.set_as_default()
def setup_holiday_list():
"""Setup Holiday List for the current year"""
year = now_datetime().year
holiday_list = frappe.get_doc({
"doctype": "Holiday List",
"holiday_list_name": str(year),
"from_date": "{0}-01-01".format(year),
"to_date": "{0}-12-31".format(year),
})
holiday_list = frappe.get_doc(
{
"doctype": "Holiday List",
"holiday_list_name": str(year),
"from_date": "{0}-01-01".format(year),
"to_date": "{0}-12-31".format(year),
}
)
holiday_list.insert()
holiday_list.weekly_off = "Saturday"
holiday_list.get_weekly_off_dates()
@@ -118,67 +129,85 @@ def setup_holiday_list():
holiday_list.get_weekly_off_dates()
holiday_list.save()
frappe.set_value("Company", erpnext.get_default_company(), "default_holiday_list", holiday_list.name)
frappe.set_value(
"Company", erpnext.get_default_company(), "default_holiday_list", holiday_list.name
)
def setup_user():
frappe.db.sql('delete from tabUser where name not in ("Guest", "Administrator")')
for u in json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data', 'user.json')).read()):
for u in json.loads(open(frappe.get_app_path("erpnext", "demo", "data", "user.json")).read()):
user = frappe.new_doc("User")
user.update(u)
user.flags.no_welcome_mail = True
user.new_password = 'Demo1234567!!!'
user.new_password = "Demo1234567!!!"
user.insert()
def setup_employee():
frappe.db.set_value("HR Settings", None, "emp_created_by", "Naming Series")
frappe.db.commit()
for d in frappe.get_all('Salary Component'):
salary_component = frappe.get_doc('Salary Component', d.name)
salary_component.append('accounts', dict(
company=erpnext.get_default_company(),
account=frappe.get_value('Account', dict(account_name=('like', 'Salary%')))
))
for d in frappe.get_all("Salary Component"):
salary_component = frappe.get_doc("Salary Component", d.name)
salary_component.append(
"accounts",
dict(
company=erpnext.get_default_company(),
account=frappe.get_value("Account", dict(account_name=("like", "Salary%"))),
),
)
salary_component.save()
import_json('Employee')
holiday_list = frappe.db.get_value("Holiday List", {"holiday_list_name": str(now_datetime().year)}, 'name')
frappe.db.sql('''update tabEmployee set holiday_list={0}'''.format(holiday_list))
import_json("Employee")
holiday_list = frappe.db.get_value(
"Holiday List", {"holiday_list_name": str(now_datetime().year)}, "name"
)
frappe.db.sql("""update tabEmployee set holiday_list={0}""".format(holiday_list))
def setup_salary_structure(employees, salary_slip_based_on_timesheet=0):
ss = frappe.new_doc('Salary Structure')
ss = frappe.new_doc("Salary Structure")
ss.name = "Sample Salary Structure - " + random_string(5)
ss.salary_slip_based_on_timesheet = salary_slip_based_on_timesheet
if salary_slip_based_on_timesheet:
ss.salary_component = 'Basic'
ss.salary_component = "Basic"
ss.hour_rate = flt(random.random() * 10, 2)
else:
ss.payroll_frequency = 'Monthly'
ss.payroll_frequency = "Monthly"
ss.payment_account = frappe.get_value('Account',
{'account_type': 'Cash', 'company': erpnext.get_default_company(),'is_group':0}, "name")
ss.payment_account = frappe.get_value(
"Account",
{"account_type": "Cash", "company": erpnext.get_default_company(), "is_group": 0},
"name",
)
ss.append('earnings', {
'salary_component': 'Basic',
"abbr":'B',
'formula': 'base*.2',
'amount_based_on_formula': 1,
"idx": 1
})
ss.append('deductions', {
'salary_component': 'Income Tax',
"abbr":'IT',
'condition': 'base > 10000',
'formula': 'base*.1',
"idx": 1
})
ss.append(
"earnings",
{
"salary_component": "Basic",
"abbr": "B",
"formula": "base*.2",
"amount_based_on_formula": 1,
"idx": 1,
},
)
ss.append(
"deductions",
{
"salary_component": "Income Tax",
"abbr": "IT",
"condition": "base > 10000",
"formula": "base*.1",
"idx": 1,
},
)
ss.insert()
ss.submit()
for e in employees:
sa = frappe.new_doc("Salary Structure Assignment")
sa = frappe.new_doc("Salary Structure Assignment")
sa.employee = e.name
sa.salary_structure = ss.name
sa.from_date = "2015-01-01"
@@ -188,181 +217,253 @@ def setup_salary_structure(employees, salary_slip_based_on_timesheet=0):
return ss
def setup_user_roles(domain):
user = frappe.get_doc('User', 'demo@erpnext.com')
user.add_roles('HR User', 'HR Manager', 'Accounts User', 'Accounts Manager',
'Stock User', 'Stock Manager', 'Sales User', 'Sales Manager', 'Purchase User',
'Purchase Manager', 'Projects User', 'Manufacturing User', 'Manufacturing Manager',
'Support Team')
user = frappe.get_doc("User", "demo@erpnext.com")
user.add_roles(
"HR User",
"HR Manager",
"Accounts User",
"Accounts Manager",
"Stock User",
"Stock Manager",
"Sales User",
"Sales Manager",
"Purchase User",
"Purchase Manager",
"Projects User",
"Manufacturing User",
"Manufacturing Manager",
"Support Team",
)
if domain == "Healthcare":
user.add_roles('Physician', 'Healthcare Administrator', 'Laboratory User',
'Nursing User', 'Patient')
user.add_roles(
"Physician", "Healthcare Administrator", "Laboratory User", "Nursing User", "Patient"
)
if domain == "Education":
user.add_roles('Academics User')
user.add_roles("Academics User")
if not frappe.db.get_global('demo_hr_user'):
user = frappe.get_doc('User', 'CaitlinSnow@example.com')
user.add_roles('HR User', 'HR Manager', 'Accounts User')
frappe.db.set_global('demo_hr_user', user.name)
update_employee_department(user.name, 'Human Resources')
for d in frappe.get_all('User Permission', filters={"user": "CaitlinSnow@example.com"}):
frappe.delete_doc('User Permission', d.name)
if not frappe.db.get_global("demo_hr_user"):
user = frappe.get_doc("User", "CaitlinSnow@example.com")
user.add_roles("HR User", "HR Manager", "Accounts User")
frappe.db.set_global("demo_hr_user", user.name)
update_employee_department(user.name, "Human Resources")
for d in frappe.get_all("User Permission", filters={"user": "CaitlinSnow@example.com"}):
frappe.delete_doc("User Permission", d.name)
if not frappe.db.get_global('demo_sales_user_1'):
user = frappe.get_doc('User', 'VandalSavage@example.com')
user.add_roles('Sales User')
update_employee_department(user.name, 'Sales')
frappe.db.set_global('demo_sales_user_1', user.name)
if not frappe.db.get_global("demo_sales_user_1"):
user = frappe.get_doc("User", "VandalSavage@example.com")
user.add_roles("Sales User")
update_employee_department(user.name, "Sales")
frappe.db.set_global("demo_sales_user_1", user.name)
if not frappe.db.get_global('demo_sales_user_2'):
user = frappe.get_doc('User', 'GraceChoi@example.com')
user.add_roles('Sales User', 'Sales Manager', 'Accounts User')
update_employee_department(user.name, 'Sales')
frappe.db.set_global('demo_sales_user_2', user.name)
if not frappe.db.get_global("demo_sales_user_2"):
user = frappe.get_doc("User", "GraceChoi@example.com")
user.add_roles("Sales User", "Sales Manager", "Accounts User")
update_employee_department(user.name, "Sales")
frappe.db.set_global("demo_sales_user_2", user.name)
if not frappe.db.get_global('demo_purchase_user'):
user = frappe.get_doc('User', 'MaxwellLord@example.com')
user.add_roles('Purchase User', 'Purchase Manager', 'Accounts User', 'Stock User')
update_employee_department(user.name, 'Purchase')
frappe.db.set_global('demo_purchase_user', user.name)
if not frappe.db.get_global("demo_purchase_user"):
user = frappe.get_doc("User", "MaxwellLord@example.com")
user.add_roles("Purchase User", "Purchase Manager", "Accounts User", "Stock User")
update_employee_department(user.name, "Purchase")
frappe.db.set_global("demo_purchase_user", user.name)
if not frappe.db.get_global('demo_manufacturing_user'):
user = frappe.get_doc('User', 'NeptuniaAquaria@example.com')
user.add_roles('Manufacturing User', 'Stock Manager', 'Stock User', 'Purchase User', 'Accounts User')
update_employee_department(user.name, 'Production')
frappe.db.set_global('demo_manufacturing_user', user.name)
if not frappe.db.get_global("demo_manufacturing_user"):
user = frappe.get_doc("User", "NeptuniaAquaria@example.com")
user.add_roles(
"Manufacturing User", "Stock Manager", "Stock User", "Purchase User", "Accounts User"
)
update_employee_department(user.name, "Production")
frappe.db.set_global("demo_manufacturing_user", user.name)
if not frappe.db.get_global('demo_stock_user'):
user = frappe.get_doc('User', 'HollyGranger@example.com')
user.add_roles('Manufacturing User', 'Stock User', 'Purchase User', 'Accounts User')
update_employee_department(user.name, 'Production')
frappe.db.set_global('demo_stock_user', user.name)
if not frappe.db.get_global("demo_stock_user"):
user = frappe.get_doc("User", "HollyGranger@example.com")
user.add_roles("Manufacturing User", "Stock User", "Purchase User", "Accounts User")
update_employee_department(user.name, "Production")
frappe.db.set_global("demo_stock_user", user.name)
if not frappe.db.get_global('demo_accounts_user'):
user = frappe.get_doc('User', 'BarryAllen@example.com')
user.add_roles('Accounts User', 'Accounts Manager', 'Sales User', 'Purchase User')
update_employee_department(user.name, 'Accounts')
frappe.db.set_global('demo_accounts_user', user.name)
if not frappe.db.get_global("demo_accounts_user"):
user = frappe.get_doc("User", "BarryAllen@example.com")
user.add_roles("Accounts User", "Accounts Manager", "Sales User", "Purchase User")
update_employee_department(user.name, "Accounts")
frappe.db.set_global("demo_accounts_user", user.name)
if not frappe.db.get_global('demo_projects_user'):
user = frappe.get_doc('User', 'PeterParker@example.com')
user.add_roles('HR User', 'Projects User')
update_employee_department(user.name, 'Management')
frappe.db.set_global('demo_projects_user', user.name)
if not frappe.db.get_global("demo_projects_user"):
user = frappe.get_doc("User", "PeterParker@example.com")
user.add_roles("HR User", "Projects User")
update_employee_department(user.name, "Management")
frappe.db.set_global("demo_projects_user", user.name)
if domain == "Education":
if not frappe.db.get_global('demo_education_user'):
user = frappe.get_doc('User', 'ArthurCurry@example.com')
user.add_roles('Academics User')
update_employee_department(user.name, 'Management')
frappe.db.set_global('demo_education_user', user.name)
if not frappe.db.get_global("demo_education_user"):
user = frappe.get_doc("User", "ArthurCurry@example.com")
user.add_roles("Academics User")
update_employee_department(user.name, "Management")
frappe.db.set_global("demo_education_user", user.name)
# Add Expense Approver
user = frappe.get_doc("User", "ClarkKent@example.com")
user.add_roles("Expense Approver")
#Add Expense Approver
user = frappe.get_doc('User', 'ClarkKent@example.com')
user.add_roles('Expense Approver')
def setup_leave_allocation():
year = now_datetime().year
for employee in frappe.get_all('Employee', fields=['name']):
leave_types = frappe.get_all("Leave Type", fields=['name', 'max_continuous_days_allowed'])
for employee in frappe.get_all("Employee", fields=["name"]):
leave_types = frappe.get_all("Leave Type", fields=["name", "max_continuous_days_allowed"])
for leave_type in leave_types:
if not leave_type.max_continuous_days_allowed:
leave_type.max_continuous_days_allowed = 10
leave_allocation = frappe.get_doc({
"doctype": "Leave Allocation",
"employee": employee.name,
"from_date": "{0}-01-01".format(year),
"to_date": "{0}-12-31".format(year),
"leave_type": leave_type.name,
"new_leaves_allocated": random.randint(1, int(leave_type.max_continuous_days_allowed))
})
leave_allocation = frappe.get_doc(
{
"doctype": "Leave Allocation",
"employee": employee.name,
"from_date": "{0}-01-01".format(year),
"to_date": "{0}-12-31".format(year),
"leave_type": leave_type.name,
"new_leaves_allocated": random.randint(1, int(leave_type.max_continuous_days_allowed)),
}
)
leave_allocation.insert()
leave_allocation.submit()
frappe.db.commit()
def setup_customer():
customers = [u'Asian Junction', u'Life Plan Counselling', u'Two Pesos', u'Mr Fables', u'Intelacard', u'Big D Supermarkets', u'Adaptas', u'Nelson Brothers', u'Landskip Yard Care', u'Buttrey Food & Drug', u'Fayva', u'Asian Fusion', u'Crafts Canada', u'Consumers and Consumers Express', u'Netobill', u'Choices', u'Chi-Chis', u'Red Food', u'Endicott Shoes', u'Hind Enterprises']
customers = [
"Asian Junction",
"Life Plan Counselling",
"Two Pesos",
"Mr Fables",
"Intelacard",
"Big D Supermarkets",
"Adaptas",
"Nelson Brothers",
"Landskip Yard Care",
"Buttrey Food & Drug",
"Fayva",
"Asian Fusion",
"Crafts Canada",
"Consumers and Consumers Express",
"Netobill",
"Choices",
"Chi-Chis",
"Red Food",
"Endicott Shoes",
"Hind Enterprises",
]
for c in customers:
frappe.get_doc({
"doctype": "Customer",
"customer_name": c,
"customer_group": "Commercial",
"customer_type": random.choice(["Company", "Individual"]),
"territory": "Rest Of The World"
}).insert()
frappe.get_doc(
{
"doctype": "Customer",
"customer_name": c,
"customer_group": "Commercial",
"customer_type": random.choice(["Company", "Individual"]),
"territory": "Rest Of The World",
}
).insert()
def setup_supplier():
suppliers = [u'Helios Air', u'Ks Merchandise', u'HomeBase', u'Scott Ties', u'Reliable Investments', u'Nan Duskin', u'Rainbow Records', u'New World Realty', u'Asiatic Solutions', u'Eagle Hardware', u'Modern Electricals']
suppliers = [
"Helios Air",
"Ks Merchandise",
"HomeBase",
"Scott Ties",
"Reliable Investments",
"Nan Duskin",
"Rainbow Records",
"New World Realty",
"Asiatic Solutions",
"Eagle Hardware",
"Modern Electricals",
]
for s in suppliers:
frappe.get_doc({
"doctype": "Supplier",
"supplier_name": s,
"supplier_group": random.choice(["Services", "Raw Material"]),
}).insert()
frappe.get_doc(
{
"doctype": "Supplier",
"supplier_name": s,
"supplier_group": random.choice(["Services", "Raw Material"]),
}
).insert()
def setup_warehouse():
w = frappe.new_doc('Warehouse')
w.warehouse_name = 'Supplier'
w = frappe.new_doc("Warehouse")
w.warehouse_name = "Supplier"
w.insert()
def setup_currency_exchange():
frappe.get_doc({
'doctype': 'Currency Exchange',
'from_currency': 'EUR',
'to_currency': 'USD',
'exchange_rate': 1.13
}).insert()
frappe.get_doc({
'doctype': 'Currency Exchange',
'from_currency': 'CNY',
'to_currency': 'USD',
'exchange_rate': 0.16
}).insert()
def setup_currency_exchange():
frappe.get_doc(
{
"doctype": "Currency Exchange",
"from_currency": "EUR",
"to_currency": "USD",
"exchange_rate": 1.13,
}
).insert()
frappe.get_doc(
{
"doctype": "Currency Exchange",
"from_currency": "CNY",
"to_currency": "USD",
"exchange_rate": 0.16,
}
).insert()
def setup_mode_of_payment():
company_abbr = frappe.get_cached_value('Company', erpnext.get_default_company(), "abbr")
account_dict = {'Cash': 'Cash - '+ company_abbr , 'Bank': 'National Bank - '+ company_abbr}
for payment_mode in frappe.get_all('Mode of Payment', fields = ["name", "type"]):
company_abbr = frappe.get_cached_value("Company", erpnext.get_default_company(), "abbr")
account_dict = {"Cash": "Cash - " + company_abbr, "Bank": "National Bank - " + company_abbr}
for payment_mode in frappe.get_all("Mode of Payment", fields=["name", "type"]):
if payment_mode.type:
mop = frappe.get_doc('Mode of Payment', payment_mode.name)
mop.append('accounts', {
'company': erpnext.get_default_company(),
'default_account': account_dict.get(payment_mode.type)
})
mop = frappe.get_doc("Mode of Payment", payment_mode.name)
mop.append(
"accounts",
{
"company": erpnext.get_default_company(),
"default_account": account_dict.get(payment_mode.type),
},
)
mop.save(ignore_permissions=True)
def setup_account():
frappe.flags.in_import = True
data = json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data',
'account.json')).read())
data = json.loads(open(frappe.get_app_path("erpnext", "demo", "data", "account.json")).read())
for d in data:
doc = frappe.new_doc('Account')
doc = frappe.new_doc("Account")
doc.update(d)
doc.parent_account = frappe.db.get_value('Account', {'account_name': doc.parent_account})
doc.parent_account = frappe.db.get_value("Account", {"account_name": doc.parent_account})
doc.insert()
frappe.flags.in_import = False
def setup_account_to_expense_type():
company_abbr = frappe.get_cached_value('Company', erpnext.get_default_company(), "abbr")
expense_types = [{'name': _('Calls'), "account": "Sales Expenses - "+ company_abbr},
{'name': _('Food'), "account": "Entertainment Expenses - "+ company_abbr},
{'name': _('Medical'), "account": "Utility Expenses - "+ company_abbr},
{'name': _('Others'), "account": "Miscellaneous Expenses - "+ company_abbr},
{'name': _('Travel'), "account": "Travel Expenses - "+ company_abbr}]
company_abbr = frappe.get_cached_value("Company", erpnext.get_default_company(), "abbr")
expense_types = [
{"name": _("Calls"), "account": "Sales Expenses - " + company_abbr},
{"name": _("Food"), "account": "Entertainment Expenses - " + company_abbr},
{"name": _("Medical"), "account": "Utility Expenses - " + company_abbr},
{"name": _("Others"), "account": "Miscellaneous Expenses - " + company_abbr},
{"name": _("Travel"), "account": "Travel Expenses - " + company_abbr},
]
for expense_type in expense_types:
doc = frappe.get_doc("Expense Claim Type", expense_type["name"])
doc.append("accounts", {
"company" : erpnext.get_default_company(),
"default_account" : expense_type["account"]
})
doc.append(
"accounts",
{"company": erpnext.get_default_company(), "default_account": expense_type["account"]},
)
doc.save(ignore_permissions=True)
def setup_budget():
fiscal_years = frappe.get_all("Fiscal Year", order_by="year_start_date")[-2:]
@@ -373,10 +474,13 @@ def setup_budget():
budget.action_if_annual_budget_exceeded = "Warn"
expense_ledger_count = frappe.db.count("Account", {"is_group": "0", "root_type": "Expense"})
add_random_children(budget, "accounts", rows=random.randint(10, expense_ledger_count),
randomize = {
"account": ("Account", {"is_group": "0", "root_type": "Expense"})
}, unique="account")
add_random_children(
budget,
"accounts",
rows=random.randint(10, expense_ledger_count),
randomize={"account": ("Account", {"is_group": "0", "root_type": "Expense"})},
unique="account",
)
for d in budget.accounts:
d.budget_amount = random.randint(5, 100) * 10000
@@ -384,46 +488,54 @@ def setup_budget():
budget.save()
budget.submit()
def setup_pos_profile():
company_abbr = frappe.get_cached_value('Company', erpnext.get_default_company(), "abbr")
pos = frappe.new_doc('POS Profile')
pos.user = frappe.db.get_global('demo_accounts_user')
pos.name = "Demo POS Profile"
pos.naming_series = 'SINV-'
pos.update_stock = 0
pos.write_off_account = 'Cost of Goods Sold - '+ company_abbr
pos.write_off_cost_center = 'Main - '+ company_abbr
pos.customer_group = get_root_of('Customer Group')
pos.territory = get_root_of('Territory')
pos.append('payments', {
'mode_of_payment': frappe.db.get_value('Mode of Payment', {'type': 'Cash'}, 'name'),
'amount': 0.0,
'default': 1
})
def setup_pos_profile():
company_abbr = frappe.get_cached_value("Company", erpnext.get_default_company(), "abbr")
pos = frappe.new_doc("POS Profile")
pos.user = frappe.db.get_global("demo_accounts_user")
pos.name = "Demo POS Profile"
pos.naming_series = "SINV-"
pos.update_stock = 0
pos.write_off_account = "Cost of Goods Sold - " + company_abbr
pos.write_off_cost_center = "Main - " + company_abbr
pos.customer_group = get_root_of("Customer Group")
pos.territory = get_root_of("Territory")
pos.append(
"payments",
{
"mode_of_payment": frappe.db.get_value("Mode of Payment", {"type": "Cash"}, "name"),
"amount": 0.0,
"default": 1,
},
)
pos.insert()
def setup_role_permissions():
role_permissions = {'Batch': ['Accounts User', 'Item Manager']}
role_permissions = {"Batch": ["Accounts User", "Item Manager"]}
for doctype, roles in role_permissions.items():
for role in roles:
if not frappe.db.get_value('Custom DocPerm',
{'parent': doctype, 'role': role}):
frappe.get_doc({
'doctype': 'Custom DocPerm',
'role': role,
'read': 1,
'write': 1,
'create': 1,
'delete': 1,
'parent': doctype
}).insert(ignore_permissions=True)
if not frappe.db.get_value("Custom DocPerm", {"parent": doctype, "role": role}):
frappe.get_doc(
{
"doctype": "Custom DocPerm",
"role": role,
"read": 1,
"write": 1,
"create": 1,
"delete": 1,
"parent": doctype,
}
).insert(ignore_permissions=True)
def import_json(doctype, submit=False, values=None):
frappe.flags.in_import = True
data = json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data',
frappe.scrub(doctype) + '.json')).read())
data = json.loads(
open(frappe.get_app_path("erpnext", "demo", "data", frappe.scrub(doctype) + ".json")).read()
)
for d in data:
doc = frappe.new_doc(doctype)
doc.update(d)
@@ -435,17 +547,23 @@ def import_json(doctype, submit=False, values=None):
frappe.flags.in_import = False
def update_employee_department(user_id, department):
employee = frappe.db.get_value('Employee', {"user_id": user_id}, 'name')
department = frappe.db.get_value('Department', {'department_name': department}, 'name')
frappe.db.set_value('Employee', employee, 'department', department)
employee = frappe.db.get_value("Employee", {"user_id": user_id}, "name")
department = frappe.db.get_value("Department", {"department_name": department}, "name")
frappe.db.set_value("Employee", employee, "department", department)
def setup_custom_field_for_domain():
field = {
"Item": [
dict(fieldname='domain', label='Domain',
fieldtype='Select', hidden=1, default="Manufacturing",
options="Manufacturing\nService\nDistribution\nRetail"
dict(
fieldname="domain",
label="Domain",
fieldtype="Select",
hidden=1,
default="Manufacturing",
options="Manufacturing\nService\nDistribution\nRetail",
)
]
}

View File

@@ -1,4 +1,3 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
@@ -23,18 +22,21 @@ from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchas
def work():
frappe.set_user(frappe.db.get_global('demo_accounts_user'))
frappe.set_user(frappe.db.get_global("demo_accounts_user"))
if random.random() <= 0.6:
report = "Ordered Items to be Billed"
for so in list(set([r[0] for r in query_report.run(report)["result"]
if r[0]!="Total"]))[:random.randint(1, 5)]:
for so in list(set([r[0] for r in query_report.run(report)["result"] if r[0] != "Total"]))[
: random.randint(1, 5)
]:
try:
si = frappe.get_doc(make_sales_invoice(so))
si.posting_date = frappe.flags.current_date
for d in si.get("items"):
if not d.income_account:
d.income_account = "Sales - {}".format(frappe.get_cached_value('Company', si.company, 'abbr'))
d.income_account = "Sales - {}".format(
frappe.get_cached_value("Company", si.company, "abbr")
)
si.insert()
si.submit()
frappe.db.commit()
@@ -43,8 +45,9 @@ def work():
if random.random() <= 0.6:
report = "Received Items to be Billed"
for pr in list(set([r[0] for r in query_report.run(report)["result"]
if r[0]!="Total"]))[:random.randint(1, 5)]:
for pr in list(set([r[0] for r in query_report.run(report)["result"] if r[0] != "Total"]))[
: random.randint(1, 5)
]:
try:
pi = frappe.get_doc(make_purchase_invoice(pr))
pi.posting_date = frappe.flags.current_date
@@ -55,7 +58,6 @@ def work():
except frappe.ValidationError:
pass
if random.random() < 0.5:
make_payment_entries("Sales Invoice", "Accounts Receivable")
@@ -63,13 +65,19 @@ def work():
make_payment_entries("Purchase Invoice", "Accounts Payable")
if random.random() < 0.4:
#make payment request against sales invoice
# make payment request against sales invoice
sales_invoice_name = get_random("Sales Invoice", filters={"docstatus": 1})
if sales_invoice_name:
si = frappe.get_doc("Sales Invoice", sales_invoice_name)
if si.outstanding_amount > 0:
payment_request = make_payment_request(dt="Sales Invoice", dn=si.name, recipient_id=si.contact_email,
submit_doc=True, mute_email=True, use_dummy_message=True)
payment_request = make_payment_request(
dt="Sales Invoice",
dn=si.name,
recipient_id=si.contact_email,
submit_doc=True,
mute_email=True,
use_dummy_message=True,
)
payment_entry = frappe.get_doc(make_payment_entry(payment_request.name))
payment_entry.posting_date = frappe.flags.current_date
@@ -77,16 +85,17 @@ def work():
make_pos_invoice()
def make_payment_entries(ref_doctype, report):
outstanding_invoices = frappe.get_all(ref_doctype, fields=["name"],
filters={
"company": erpnext.get_default_company(),
"outstanding_amount": (">", 0.0)
})
outstanding_invoices = frappe.get_all(
ref_doctype,
fields=["name"],
filters={"company": erpnext.get_default_company(), "outstanding_amount": (">", 0.0)},
)
# make Payment Entry
for inv in outstanding_invoices[:random.randint(1, 2)]:
for inv in outstanding_invoices[: random.randint(1, 2)]:
pe = get_payment_entry(ref_doctype, inv.name)
pe.posting_date = frappe.flags.current_date
pe.reference_no = random_string(6)
@@ -106,22 +115,23 @@ def make_payment_entries(ref_doctype, report):
jv.submit()
frappe.db.commit()
def make_pos_invoice():
make_sales_order()
for data in frappe.get_all('Sales Order', fields=["name"],
filters = [["per_billed", "<", "100"]]):
for data in frappe.get_all("Sales Order", fields=["name"], filters=[["per_billed", "<", "100"]]):
si = frappe.get_doc(make_sales_invoice(data.name))
si.is_pos =1
si.is_pos = 1
si.posting_date = frappe.flags.current_date
for d in si.get("items"):
if not d.income_account:
d.income_account = "Sales - {}".format(frappe.get_cached_value('Company', si.company, 'abbr'))
d.income_account = "Sales - {}".format(frappe.get_cached_value("Company", si.company, "abbr"))
si.set_missing_values()
make_payment_entries_for_pos_invoice(si)
si.insert()
si.submit()
def make_payment_entries_for_pos_invoice(si):
for data in si.payments:
data.amount = si.outstanding_amount

View File

@@ -1,4 +1,3 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
@@ -21,7 +20,7 @@ from erpnext.education.api import (
def work():
frappe.set_user(frappe.db.get_global('demo_education_user'))
frappe.set_user(frappe.db.get_global("demo_education_user"))
for d in range(20):
approve_random_student_applicant()
enroll_random_student(frappe.flags.current_date)
@@ -31,11 +30,15 @@ def work():
# make_assessment_plan()
make_fees()
def approve_random_student_applicant():
random_student = get_random("Student Applicant", {"application_status": "Applied"})
if random_student:
status = ["Approved", "Rejected"]
frappe.db.set_value("Student Applicant", random_student, "application_status", status[weighted_choice([9,3])])
frappe.db.set_value(
"Student Applicant", random_student, "application_status", status[weighted_choice([9, 3])]
)
def enroll_random_student(current_date):
batch = ["Section-A", "Section-B"]
@@ -44,7 +47,7 @@ def enroll_random_student(current_date):
enrollment = enroll_student(random_student)
enrollment.academic_year = get_random("Academic Year")
enrollment.enrollment_date = current_date
enrollment.student_batch_name = batch[weighted_choice([9,3])]
enrollment.student_batch_name = batch[weighted_choice([9, 3])]
fee_schedule = get_fee_schedule(enrollment.program)
for fee in fee_schedule:
enrollment.append("fees", fee)
@@ -53,45 +56,81 @@ def enroll_random_student(current_date):
enrollment.append("courses", course)
enrollment.submit()
frappe.db.commit()
assign_student_group(enrollment.student, enrollment.student_name, enrollment.program,
enrolled_courses, enrollment.student_batch_name)
assign_student_group(
enrollment.student,
enrollment.student_name,
enrollment.program,
enrolled_courses,
enrollment.student_batch_name,
)
def assign_student_group(student, student_name, program, courses, batch):
course_list = [d["course"] for d in courses]
for d in frappe.get_list("Student Group", fields=("name"), filters={"program": program, "course":("in", course_list), "disabled": 0}):
for d in frappe.get_list(
"Student Group",
fields=("name"),
filters={"program": program, "course": ("in", course_list), "disabled": 0},
):
student_group = frappe.get_doc("Student Group", d.name)
student_group.append("students", {"student": student, "student_name": student_name,
"group_roll_number":len(student_group.students)+1, "active":1})
student_group.append(
"students",
{
"student": student,
"student_name": student_name,
"group_roll_number": len(student_group.students) + 1,
"active": 1,
},
)
student_group.save()
student_batch = frappe.get_list("Student Group", fields=("name"), filters={"program": program, "group_based_on":"Batch", "batch":batch, "disabled": 0})[0]
student_batch = frappe.get_list(
"Student Group",
fields=("name"),
filters={"program": program, "group_based_on": "Batch", "batch": batch, "disabled": 0},
)[0]
student_batch_doc = frappe.get_doc("Student Group", student_batch.name)
student_batch_doc.append("students", {"student": student, "student_name": student_name,
"group_roll_number":len(student_batch_doc.students)+1, "active":1})
student_batch_doc.append(
"students",
{
"student": student,
"student_name": student_name,
"group_roll_number": len(student_batch_doc.students) + 1,
"active": 1,
},
)
student_batch_doc.save()
frappe.db.commit()
def mark_student_attendance(current_date):
status = ["Present", "Absent"]
for d in frappe.db.get_list("Student Group", filters={"group_based_on": "Batch", "disabled": 0}):
students = get_student_group_students(d.name)
for stud in students:
make_attendance_records(stud.student, stud.student_name, status[weighted_choice([9,4])], None, d.name, current_date)
make_attendance_records(
stud.student, stud.student_name, status[weighted_choice([9, 4])], None, d.name, current_date
)
def make_fees():
for d in range(1,10):
for d in range(1, 10):
random_fee = get_random("Fees", {"paid_amount": 0})
collect_fees(random_fee, frappe.db.get_value("Fees", random_fee, "outstanding_amount"))
def make_assessment_plan(date):
for d in range(1,4):
for d in range(1, 4):
random_group = get_random("Student Group", {"group_based_on": "Course", "disabled": 0}, True)
doc = frappe.new_doc("Assessment Plan")
doc.student_group = random_group.name
doc.course = random_group.course
doc.assessment_group = get_random("Assessment Group", {"is_group": 0, "parent": "2017-18 (Semester 2)"})
doc.assessment_group = get_random(
"Assessment Group", {"is_group": 0, "parent": "2017-18 (Semester 2)"}
)
doc.grading_scale = get_random("Grading Scale")
doc.maximum_assessment_score = 100
def make_course_schedule(start_date, end_date):
for d in frappe.db.get_list("Student Group"):
cs = frappe.new_doc("Scheduling Tool")
@@ -104,7 +143,7 @@ def make_course_schedule(start_date, end_date):
for x in range(3):
random_day = random.choice(day)
cs.day = random_day
cs.from_time = timedelta(hours=(random.randrange(7, 17,1)))
cs.from_time = timedelta(hours=(random.randrange(7, 17, 1)))
cs.to_time = cs.from_time + timedelta(hours=1)
cs.schedule_course()
day.remove(random_day)

View File

@@ -1,4 +1,3 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
@@ -11,7 +10,7 @@ from erpnext.assets.doctype.asset.depreciation import post_depreciation_entries,
def work():
frappe.set_user(frappe.db.get_global('demo_accounts_user'))
frappe.set_user(frappe.db.get_global("demo_accounts_user"))
# Enable booking asset depreciation entry automatically
frappe.db.set_value("Accounts Settings", None, "book_asset_depreciation_entry_automatically", 1)
@@ -20,7 +19,9 @@ def work():
post_depreciation_entries()
# scrap a random asset
frappe.db.set_value("Company", "Wind Power LLC", "disposal_account", "Gain/Loss on Asset Disposal - WPL")
frappe.db.set_value(
"Company", "Wind Power LLC", "disposal_account", "Gain/Loss on Asset Disposal - WPL"
)
asset = get_random_asset()
scrap_asset(asset.name)
@@ -33,13 +34,19 @@ def sell_an_asset():
asset = get_random_asset()
si = make_sales_invoice(asset.name, asset.item_code, "Wind Power LLC")
si.customer = get_random("Customer")
si.get("items")[0].rate = asset.value_after_depreciation * 0.8 \
if asset.value_after_depreciation else asset.gross_purchase_amount * 0.9
si.get("items")[0].rate = (
asset.value_after_depreciation * 0.8
if asset.value_after_depreciation
else asset.gross_purchase_amount * 0.9
)
si.save()
si.submit()
def get_random_asset():
return frappe.db.sql(""" select name, item_code, value_after_depreciation, gross_purchase_amount
return frappe.db.sql(
""" select name, item_code, value_after_depreciation, gross_purchase_amount
from `tabAsset`
where docstatus=1 and status not in ("Scrapped", "Sold") order by rand() limit 1""", as_dict=1)[0]
where docstatus=1 and status not in ("Scrapped", "Sold") order by rand() limit 1""",
as_dict=1,
)[0]

View File

@@ -1,4 +1,3 @@
import datetime
import random
@@ -19,14 +18,16 @@ from erpnext.projects.doctype.timesheet.timesheet import make_salary_slip, make_
def work():
frappe.set_user(frappe.db.get_global('demo_hr_user'))
frappe.set_user(frappe.db.get_global("demo_hr_user"))
year, month = frappe.flags.current_date.strftime("%Y-%m").split("-")
setup_department_approvers()
mark_attendance()
make_leave_application()
# payroll entry
if not frappe.db.sql('select name from `tabSalary Slip` where month(adddate(start_date, interval 1 month))=month(curdate())'):
if not frappe.db.sql(
"select name from `tabSalary Slip` where month(adddate(start_date, interval 1 month))=month(curdate())"
):
# based on frequency
payroll_entry = get_payroll_entry()
payroll_entry.salary_slip_based_on_timesheet = 0
@@ -49,28 +50,28 @@ def work():
# payroll_entry.make_journal_entry(reference_date=frappe.flags.current_date,
# reference_number=random_string(10))
if frappe.db.get_global('demo_hr_user'):
if frappe.db.get_global("demo_hr_user"):
make_timesheet_records()
#expense claim
# expense claim
expense_claim = frappe.new_doc("Expense Claim")
expense_claim.extend('expenses', get_expenses())
expense_claim.extend("expenses", get_expenses())
expense_claim.employee = get_random("Employee")
expense_claim.company = frappe.flags.company
expense_claim.payable_account = get_payable_account(expense_claim.company)
expense_claim.posting_date = frappe.flags.current_date
expense_claim.expense_approver = frappe.db.get_global('demo_hr_user')
expense_claim.expense_approver = frappe.db.get_global("demo_hr_user")
expense_claim.save()
rand = random.random()
if rand < 0.4:
update_sanctioned_amount(expense_claim)
expense_claim.approval_status = 'Approved'
expense_claim.approval_status = "Approved"
expense_claim.submit()
if random.randint(0, 1):
#make journal entry against expense claim
# make journal entry against expense claim
je = frappe.get_doc(make_bank_entry("Expense Claim", expense_claim.name))
je.posting_date = frappe.flags.current_date
je.cheque_no = random_string(10)
@@ -78,62 +79,91 @@ def work():
je.flags.ignore_permissions = 1
je.submit()
def get_payroll_entry():
# process payroll for previous month
payroll_entry = frappe.new_doc("Payroll Entry")
payroll_entry.company = frappe.flags.company
payroll_entry.payroll_frequency = 'Monthly'
payroll_entry.payroll_frequency = "Monthly"
# select a posting date from the previous month
payroll_entry.posting_date = get_last_day(getdate(frappe.flags.current_date) - datetime.timedelta(days=10))
payroll_entry.payment_account = frappe.get_value('Account', {'account_type': 'Cash', 'company': erpnext.get_default_company(),'is_group':0}, "name")
payroll_entry.posting_date = get_last_day(
getdate(frappe.flags.current_date) - datetime.timedelta(days=10)
)
payroll_entry.payment_account = frappe.get_value(
"Account",
{"account_type": "Cash", "company": erpnext.get_default_company(), "is_group": 0},
"name",
)
payroll_entry.set_start_end_dates()
return payroll_entry
def get_expenses():
expenses = []
expese_types = frappe.db.sql("""select ect.name, eca.default_account from `tabExpense Claim Type` ect,
expese_types = frappe.db.sql(
"""select ect.name, eca.default_account from `tabExpense Claim Type` ect,
`tabExpense Claim Account` eca where eca.parent=ect.name
and eca.company=%s """, frappe.flags.company,as_dict=1)
and eca.company=%s """,
frappe.flags.company,
as_dict=1,
)
for expense_type in expese_types[:random.randint(1,4)]:
claim_amount = random.randint(1,20)*10
for expense_type in expese_types[: random.randint(1, 4)]:
claim_amount = random.randint(1, 20) * 10
expenses.append({
"expense_date": frappe.flags.current_date,
"expense_type": expense_type.name,
"default_account": expense_type.default_account or "Miscellaneous Expenses - WPL",
"amount": claim_amount,
"sanctioned_amount": claim_amount
})
expenses.append(
{
"expense_date": frappe.flags.current_date,
"expense_type": expense_type.name,
"default_account": expense_type.default_account or "Miscellaneous Expenses - WPL",
"amount": claim_amount,
"sanctioned_amount": claim_amount,
}
)
return expenses
def update_sanctioned_amount(expense_claim):
for expense in expense_claim.expenses:
sanctioned_amount = random.randint(1,20)*10
sanctioned_amount = random.randint(1, 20) * 10
if sanctioned_amount < expense.amount:
expense.sanctioned_amount = sanctioned_amount
def get_timesheet_based_salary_slip_employee():
sal_struct = frappe.db.sql("""
sal_struct = frappe.db.sql(
"""
select name from `tabSalary Structure`
where salary_slip_based_on_timesheet = 1
and docstatus != 2""")
and docstatus != 2"""
)
if sal_struct:
employees = frappe.db.sql("""
employees = frappe.db.sql(
"""
select employee from `tabSalary Structure Assignment`
where salary_structure IN %(sal_struct)s""", {"sal_struct": sal_struct}, as_dict=True)
where salary_structure IN %(sal_struct)s""",
{"sal_struct": sal_struct},
as_dict=True,
)
return employees
else:
return []
def make_timesheet_records():
employees = get_timesheet_based_salary_slip_employee()
for e in employees:
ts = make_timesheet(e.employee, simulate = True, billable = 1, activity_type=get_random("Activity Type"), company=frappe.flags.company)
ts = make_timesheet(
e.employee,
simulate=True,
billable=1,
activity_type=get_random("Activity Type"),
company=frappe.flags.company,
)
frappe.db.commit()
rand = random.random()
@@ -144,21 +174,25 @@ def make_timesheet_records():
if rand >= 0.2:
make_sales_invoice_for_timesheet(ts.name)
def make_salary_slip_for_timesheet(name):
salary_slip = make_salary_slip(name)
salary_slip.insert()
salary_slip.submit()
frappe.db.commit()
def make_sales_invoice_for_timesheet(name):
sales_invoice = make_sales_invoice(name)
sales_invoice.customer = get_random("Customer")
sales_invoice.append('items', {
'item_code': get_random("Item", {"has_variants": 0, "is_stock_item": 0,
"is_fixed_asset": 0}),
'qty': 1,
'rate': 1000
})
sales_invoice.append(
"items",
{
"item_code": get_random("Item", {"has_variants": 0, "is_stock_item": 0, "is_fixed_asset": 0}),
"qty": 1,
"rate": 1000,
},
)
sales_invoice.flags.ignore_permissions = 1
sales_invoice.set_missing_values()
sales_invoice.calculate_taxes_and_totals()
@@ -166,25 +200,32 @@ def make_sales_invoice_for_timesheet(name):
sales_invoice.submit()
frappe.db.commit()
def make_leave_application():
allocated_leaves = frappe.get_all("Leave Allocation", fields=['employee', 'leave_type'])
allocated_leaves = frappe.get_all("Leave Allocation", fields=["employee", "leave_type"])
for allocated_leave in allocated_leaves:
leave_balance = get_leave_balance_on(allocated_leave.employee, allocated_leave.leave_type, frappe.flags.current_date,
consider_all_leaves_in_the_allocation_period=True)
leave_balance = get_leave_balance_on(
allocated_leave.employee,
allocated_leave.leave_type,
frappe.flags.current_date,
consider_all_leaves_in_the_allocation_period=True,
)
if leave_balance != 0:
if leave_balance == 1:
to_date = frappe.flags.current_date
else:
to_date = add_days(frappe.flags.current_date, random.randint(0, leave_balance-1))
to_date = add_days(frappe.flags.current_date, random.randint(0, leave_balance - 1))
leave_application = frappe.get_doc({
"doctype": "Leave Application",
"employee": allocated_leave.employee,
"from_date": frappe.flags.current_date,
"to_date": to_date,
"leave_type": allocated_leave.leave_type,
})
leave_application = frappe.get_doc(
{
"doctype": "Leave Application",
"employee": allocated_leave.employee,
"from_date": frappe.flags.current_date,
"to_date": to_date,
"leave_type": allocated_leave.leave_type,
}
)
try:
leave_application.insert()
leave_application.submit()
@@ -192,20 +233,24 @@ def make_leave_application():
except (OverlapError, AttendanceAlreadyMarkedError):
frappe.db.rollback()
def mark_attendance():
attendance_date = frappe.flags.current_date
for employee in frappe.get_all('Employee', fields=['name'], filters = {'status': 'Active'}):
for employee in frappe.get_all("Employee", fields=["name"], filters={"status": "Active"}):
if not frappe.db.get_value("Attendance", {"employee": employee.name, "attendance_date": attendance_date}):
attendance = frappe.get_doc({
"doctype": "Attendance",
"employee": employee.name,
"attendance_date": attendance_date
})
if not frappe.db.get_value(
"Attendance", {"employee": employee.name, "attendance_date": attendance_date}
):
attendance = frappe.get_doc(
{"doctype": "Attendance", "employee": employee.name, "attendance_date": attendance_date}
)
leave = frappe.db.sql("""select name from `tabLeave Application`
leave = frappe.db.sql(
"""select name from `tabLeave Application`
where employee = %s and %s between from_date and to_date
and docstatus = 1""", (employee.name, attendance_date))
and docstatus = 1""",
(employee.name, attendance_date),
)
if leave:
attendance.status = "Absent"
@@ -215,10 +260,11 @@ def mark_attendance():
attendance.submit()
frappe.db.commit()
def setup_department_approvers():
for d in frappe.get_all('Department', filters={'department_name': ['!=', 'All Departments']}):
doc = frappe.get_doc('Department', d.name)
doc.append("leave_approvers", {'approver': frappe.session.user})
doc.append("expense_approvers", {'approver': frappe.session.user})
for d in frappe.get_all("Department", filters={"department_name": ["!=", "All Departments"]}):
doc = frappe.get_doc("Department", d.name)
doc.append("leave_approvers", {"approver": frappe.session.user})
doc.append("expense_approvers", {"approver": frappe.session.user})
doc.flags.ignore_mandatory = True
doc.save()

View File

@@ -14,10 +14,12 @@ from erpnext.manufacturing.doctype.work_order.test_work_order import make_wo_ord
def work():
if random.random() < 0.3: return
if random.random() < 0.3:
return
frappe.set_user(frappe.db.get_global('demo_manufacturing_user'))
if not frappe.get_all('Sales Order'): return
frappe.set_user(frappe.db.get_global("demo_manufacturing_user"))
if not frappe.get_all("Sales Order"):
return
ppt = frappe.new_doc("Production Plan")
ppt.company = erpnext.get_default_company()
@@ -25,7 +27,8 @@ def work():
ppt.get_items_from = "Sales Order"
# ppt.purchase_request_for_warehouse = "Stores - WPL" # refactored
ppt.run_method("get_open_sales_orders")
if not ppt.get("sales_orders"): return
if not ppt.get("sales_orders"):
return
ppt.run_method("get_items")
ppt.run_method("raise_material_requests")
ppt.save()
@@ -48,25 +51,33 @@ def work():
# stores -> wip
if random.random() < 0.4:
for pro in query_report.run("Open Work Orders")["result"][:how_many("Stock Entry for WIP")]:
for pro in query_report.run("Open Work Orders")["result"][: how_many("Stock Entry for WIP")]:
make_stock_entry_from_pro(pro[0], "Material Transfer for Manufacture")
# wip -> fg
if random.random() < 0.4:
for pro in query_report.run("Work Orders in Progress")["result"][:how_many("Stock Entry for FG")]:
for pro in query_report.run("Work Orders in Progress")["result"][
: how_many("Stock Entry for FG")
]:
make_stock_entry_from_pro(pro[0], "Manufacture")
for bom in frappe.get_all('BOM', fields=['item'], filters = {'with_operations': 1}):
pro_order = make_wo_order_test_record(item=bom.item, qty=2,
source_warehouse="Stores - WPL", wip_warehouse = "Work in Progress - WPL",
fg_warehouse = "Stores - WPL", company = erpnext.get_default_company(),
stock_uom = frappe.db.get_value('Item', bom.item, 'stock_uom'),
planned_start_date = frappe.flags.current_date)
for bom in frappe.get_all("BOM", fields=["item"], filters={"with_operations": 1}):
pro_order = make_wo_order_test_record(
item=bom.item,
qty=2,
source_warehouse="Stores - WPL",
wip_warehouse="Work in Progress - WPL",
fg_warehouse="Stores - WPL",
company=erpnext.get_default_company(),
stock_uom=frappe.db.get_value("Item", bom.item, "stock_uom"),
planned_start_date=frappe.flags.current_date,
)
# submit job card
if random.random() < 0.4:
submit_job_cards()
def make_stock_entry_from_pro(pro_id, purpose):
from erpnext.manufacturing.doctype.work_order.work_order import make_stock_entry
from erpnext.stock.doctype.stock_entry.stock_entry import (
@@ -81,25 +92,34 @@ def make_stock_entry_from_pro(pro_id, purpose):
st.posting_date = frappe.flags.current_date
st.fiscal_year = str(frappe.flags.current_date.year)
for d in st.get("items"):
d.cost_center = "Main - " + frappe.get_cached_value('Company', st.company, 'abbr')
d.cost_center = "Main - " + frappe.get_cached_value("Company", st.company, "abbr")
st.insert()
frappe.db.commit()
st.submit()
frappe.db.commit()
except (NegativeStockError, IncorrectValuationRateError, DuplicateEntryForWorkOrderError,
OperationsNotCompleteError):
except (
NegativeStockError,
IncorrectValuationRateError,
DuplicateEntryForWorkOrderError,
OperationsNotCompleteError,
):
frappe.db.rollback()
def submit_job_cards():
work_orders = frappe.get_all("Work Order", ["name", "creation"], {"docstatus": 1, "status": "Not Started"})
work_orders = frappe.get_all(
"Work Order", ["name", "creation"], {"docstatus": 1, "status": "Not Started"}
)
work_order = random.choice(work_orders)
# for work_order in work_orders:
start_date = work_order.creation
work_order = frappe.get_doc("Work Order", work_order.name)
job = frappe.get_all("Job Card", ["name", "operation", "work_order"],
{"docstatus": 0, "work_order": work_order.name})
job = frappe.get_all(
"Job Card", ["name", "operation", "work_order"], {"docstatus": 0, "work_order": work_order.name}
)
if not job: return
if not job:
return
job_map = {}
for d in job:
job_map[d.operation] = frappe.get_doc("Job Card", d.name)
@@ -109,12 +129,11 @@ def submit_job_cards():
job_time_log = frappe.new_doc("Job Card Time Log")
job_time_log.from_time = start_date
minutes = operation.get("time_in_mins")
job_time_log.time_in_mins = random.randint(int(minutes/2), minutes)
job_time_log.to_time = job_time_log.from_time + \
timedelta(minutes=job_time_log.time_in_mins)
job_time_log.time_in_mins = random.randint(int(minutes / 2), minutes)
job_time_log.to_time = job_time_log.from_time + timedelta(minutes=job_time_log.time_in_mins)
job_time_log.parent = job.name
job_time_log.parenttype = 'Job Card'
job_time_log.parentfield = 'time_logs'
job_time_log.parenttype = "Job Card"
job_time_log.parentfield = "time_logs"
job_time_log.completed_qty = work_order.qty
job_time_log.save(ignore_permissions=True)
job.time_logs.append(job_time_log)

View File

@@ -12,33 +12,50 @@ from erpnext.projects.doctype.timesheet.test_timesheet import make_timesheet
def run_projects(current_date):
frappe.set_user(frappe.db.get_global('demo_projects_user'))
if frappe.db.get_global('demo_projects_user'):
frappe.set_user(frappe.db.get_global("demo_projects_user"))
if frappe.db.get_global("demo_projects_user"):
make_project(current_date)
make_timesheet_for_projects(current_date)
close_tasks(current_date)
def make_timesheet_for_projects(current_date ):
for data in frappe.get_all("Task", ["name", "project"], {"status": "Open", "exp_end_date": ("<", current_date)}):
def make_timesheet_for_projects(current_date):
for data in frappe.get_all(
"Task", ["name", "project"], {"status": "Open", "exp_end_date": ("<", current_date)}
):
employee = get_random("Employee")
ts = make_timesheet(employee, simulate = True, billable = 1, company = erpnext.get_default_company(),
activity_type=get_random("Activity Type"), project=data.project, task =data.name)
ts = make_timesheet(
employee,
simulate=True,
billable=1,
company=erpnext.get_default_company(),
activity_type=get_random("Activity Type"),
project=data.project,
task=data.name,
)
if flt(ts.total_billable_amount) > 0.0:
make_sales_invoice_for_timesheet(ts.name)
frappe.db.commit()
def close_tasks(current_date):
for task in frappe.get_all("Task", ["name"], {"status": "Open", "exp_end_date": ("<", current_date)}):
for task in frappe.get_all(
"Task", ["name"], {"status": "Open", "exp_end_date": ("<", current_date)}
):
task = frappe.get_doc("Task", task.name)
task.status = "Completed"
task.save()
def make_project(current_date):
if not frappe.db.exists('Project',
"New Product Development " + current_date.strftime("%Y-%m-%d")):
project = frappe.get_doc({
"doctype": "Project",
"project_name": "New Product Development " + current_date.strftime("%Y-%m-%d"),
})
if not frappe.db.exists(
"Project", "New Product Development " + current_date.strftime("%Y-%m-%d")
):
project = frappe.get_doc(
{
"doctype": "Project",
"project_name": "New Product Development " + current_date.strftime("%Y-%m-%d"),
}
)
project.insert()

View File

@@ -20,21 +20,22 @@ from erpnext.stock.doctype.material_request.material_request import make_request
def work():
frappe.set_user(frappe.db.get_global('demo_purchase_user'))
frappe.set_user(frappe.db.get_global("demo_purchase_user"))
if random.random() < 0.6:
report = "Items To Be Requested"
for row in query_report.run(report)["result"][:random.randint(1, 5)]:
for row in query_report.run(report)["result"][: random.randint(1, 5)]:
item_code, qty = row[0], abs(row[-1])
mr = make_material_request(item_code, qty)
if random.random() < 0.6:
for mr in frappe.get_all('Material Request',
filters={'material_request_type': 'Purchase', 'status': 'Open'},
limit=random.randint(1,6)):
if not frappe.get_all('Request for Quotation',
filters={'material_request': mr.name}, limit=1):
for mr in frappe.get_all(
"Material Request",
filters={"material_request_type": "Purchase", "status": "Open"},
limit=random.randint(1, 6),
):
if not frappe.get_all("Request for Quotation", filters={"material_request": mr.name}, limit=1):
rfq = make_request_for_quotation(mr.name)
rfq.transaction_date = frappe.flags.current_date
add_suppliers(rfq)
@@ -43,22 +44,30 @@ def work():
# Make suppier quotation from RFQ against each supplier.
if random.random() < 0.6:
for rfq in frappe.get_all('Request for Quotation',
filters={'status': 'Open'}, limit=random.randint(1, 6)):
if not frappe.get_all('Supplier Quotation',
filters={'request_for_quotation': rfq.name}, limit=1):
rfq = frappe.get_doc('Request for Quotation', rfq.name)
for rfq in frappe.get_all(
"Request for Quotation", filters={"status": "Open"}, limit=random.randint(1, 6)
):
if not frappe.get_all(
"Supplier Quotation", filters={"request_for_quotation": rfq.name}, limit=1
):
rfq = frappe.get_doc("Request for Quotation", rfq.name)
for supplier in rfq.suppliers:
supplier_quotation = make_supplier_quotation_from_rfq(rfq.name, for_supplier=supplier.supplier)
supplier_quotation = make_supplier_quotation_from_rfq(
rfq.name, for_supplier=supplier.supplier
)
supplier_quotation.save()
supplier_quotation.submit()
# get supplier details
supplier = get_random("Supplier")
company_currency = frappe.get_cached_value('Company', erpnext.get_default_company(), "default_currency")
party_account_currency = get_party_account_currency("Supplier", supplier, erpnext.get_default_company())
company_currency = frappe.get_cached_value(
"Company", erpnext.get_default_company(), "default_currency"
)
party_account_currency = get_party_account_currency(
"Supplier", supplier, erpnext.get_default_company()
)
if company_currency == party_account_currency:
exchange_rate = 1
else:
@@ -69,7 +78,7 @@ def work():
from erpnext.stock.doctype.material_request.material_request import make_supplier_quotation
report = "Material Requests for which Supplier Quotations are not created"
for row in query_report.run(report)["result"][:random.randint(1, 3)]:
for row in query_report.run(report)["result"][: random.randint(1, 3)]:
if row[0] != "Total":
sq = frappe.get_doc(make_supplier_quotation(row[0]))
sq.transaction_date = frappe.flags.current_date
@@ -83,8 +92,9 @@ def work():
# make purchase orders
if random.random() < 0.5:
from erpnext.stock.doctype.material_request.material_request import make_purchase_order
report = "Requested Items To Be Ordered"
for row in query_report.run(report)["result"][:how_many("Purchase Order")]:
for row in query_report.run(report)["result"][: how_many("Purchase Order")]:
if row[0] != "Total":
try:
po = frappe.get_doc(make_purchase_order(row[0]))
@@ -102,53 +112,63 @@ def work():
if random.random() < 0.5:
make_subcontract()
def make_material_request(item_code, qty):
mr = frappe.new_doc("Material Request")
variant_of = frappe.db.get_value('Item', item_code, 'variant_of') or item_code
variant_of = frappe.db.get_value("Item", item_code, "variant_of") or item_code
if frappe.db.get_value('BOM', {'item': variant_of, 'is_default': 1, 'is_active': 1}):
mr.material_request_type = 'Manufacture'
if frappe.db.get_value("BOM", {"item": variant_of, "is_default": 1, "is_active": 1}):
mr.material_request_type = "Manufacture"
else:
mr.material_request_type = "Purchase"
mr.transaction_date = frappe.flags.current_date
mr.schedule_date = frappe.utils.add_days(mr.transaction_date, 7)
mr.append("items", {
"doctype": "Material Request Item",
"schedule_date": frappe.utils.add_days(mr.transaction_date, 7),
"item_code": item_code,
"qty": qty
})
mr.append(
"items",
{
"doctype": "Material Request Item",
"schedule_date": frappe.utils.add_days(mr.transaction_date, 7),
"item_code": item_code,
"qty": qty,
},
)
mr.insert()
mr.submit()
return mr
def add_suppliers(rfq):
for i in range(2):
supplier = get_random("Supplier")
if supplier not in [d.supplier for d in rfq.get('suppliers')]:
rfq.append("suppliers", { "supplier": supplier })
if supplier not in [d.supplier for d in rfq.get("suppliers")]:
rfq.append("suppliers", {"supplier": supplier})
def make_subcontract():
from erpnext.buying.doctype.purchase_order.purchase_order import make_rm_stock_entry
item_code = get_random("Item", {"is_sub_contracted_item": 1})
if item_code:
# make sub-contract PO
po = frappe.new_doc("Purchase Order")
po.is_subcontracted = "Yes"
po.supplier = get_random("Supplier")
po.transaction_date = frappe.flags.current_date # added
po.transaction_date = frappe.flags.current_date # added
po.schedule_date = frappe.utils.add_days(frappe.flags.current_date, 7)
item_code = get_random("Item", {"is_sub_contracted_item": 1})
po.append("items", {
"item_code": item_code,
"schedule_date": frappe.utils.add_days(frappe.flags.current_date, 7),
"qty": random.randint(10, 30)
})
po.append(
"items",
{
"item_code": item_code,
"schedule_date": frappe.utils.add_days(frappe.flags.current_date, 7),
"qty": random.randint(10, 30),
},
)
po.set_missing_values()
try:
po.insert()
@@ -167,14 +187,15 @@ def make_subcontract():
stock_entry.to_warehouse = "Supplier - WPL"
stock_entry.insert()
def get_rm_item(items, supplied_items):
return {
"item_code": items.get("item_code"),
"rm_item_code": supplied_items.get("rm_item_code"),
"item_name": supplied_items.get("rm_item_code"),
"qty": supplied_items.get("required_qty") + random.randint(3,10),
"qty": supplied_items.get("required_qty") + random.randint(3, 10),
"amount": supplied_items.get("amount"),
"warehouse": supplied_items.get("reserve_warehouse"),
"rate": supplied_items.get("rate"),
"stock_uom": supplied_items.get("stock_uom")
"stock_uom": supplied_items.get("stock_uom"),
}

View File

@@ -18,50 +18,55 @@ from erpnext.setup.utils import get_exchange_rate
def work(domain="Manufacturing"):
frappe.set_user(frappe.db.get_global('demo_sales_user_2'))
frappe.set_user(frappe.db.get_global("demo_sales_user_2"))
for i in range(random.randint(1,7)):
for i in range(random.randint(1, 7)):
if random.random() < 0.5:
make_opportunity(domain)
for i in range(random.randint(1,3)):
for i in range(random.randint(1, 3)):
if random.random() < 0.5:
make_quotation(domain)
try:
lost_reason = frappe.get_doc({
"doctype": "Opportunity Lost Reason",
"lost_reason": "Did not ask"
})
lost_reason = frappe.get_doc(
{"doctype": "Opportunity Lost Reason", "lost_reason": "Did not ask"}
)
lost_reason.save(ignore_permissions=True)
except frappe.exceptions.DuplicateEntryError:
pass
# lost quotations / inquiries
if random.random() < 0.3:
for i in range(random.randint(1,3)):
quotation = get_random('Quotation', doc=True)
if quotation and quotation.status == 'Submitted':
quotation.declare_order_lost([{'lost_reason': 'Did not ask'}])
for i in range(random.randint(1, 3)):
quotation = get_random("Quotation", doc=True)
if quotation and quotation.status == "Submitted":
quotation.declare_order_lost([{"lost_reason": "Did not ask"}])
for i in range(random.randint(1,3)):
opportunity = get_random('Opportunity', doc=True)
if opportunity and opportunity.status in ('Open', 'Replied'):
opportunity.declare_enquiry_lost([{'lost_reason': 'Did not ask'}])
for i in range(random.randint(1, 3)):
opportunity = get_random("Opportunity", doc=True)
if opportunity and opportunity.status in ("Open", "Replied"):
opportunity.declare_enquiry_lost([{"lost_reason": "Did not ask"}])
for i in range(random.randint(1,3)):
for i in range(random.randint(1, 3)):
if random.random() < 0.6:
make_sales_order()
if random.random() < 0.5:
#make payment request against Sales Order
# make payment request against Sales Order
sales_order_name = get_random("Sales Order", filters={"docstatus": 1})
try:
if sales_order_name:
so = frappe.get_doc("Sales Order", sales_order_name)
if flt(so.per_billed) != 100:
payment_request = make_payment_request(dt="Sales Order", dn=so.name, recipient_id=so.contact_email,
submit_doc=True, mute_email=True, use_dummy_message=True)
payment_request = make_payment_request(
dt="Sales Order",
dn=so.name,
recipient_id=so.contact_email,
submit_doc=True,
mute_email=True,
use_dummy_message=True,
)
payment_entry = frappe.get_doc(make_payment_entry(payment_request.name))
payment_entry.posting_date = frappe.flags.current_date
@@ -69,30 +74,41 @@ def work(domain="Manufacturing"):
except Exception:
pass
def make_opportunity(domain):
b = frappe.get_doc({
"doctype": "Opportunity",
"opportunity_from": "Customer",
"party_name": frappe.get_value("Customer", get_random("Customer"), 'name'),
"opportunity_type": "Sales",
"with_items": 1,
"transaction_date": frappe.flags.current_date,
})
add_random_children(b, "items", rows=4, randomize = {
"qty": (1, 5),
"item_code": ("Item", {"has_variants": 0, "is_fixed_asset": 0, "domain": domain})
}, unique="item_code")
def make_opportunity(domain):
b = frappe.get_doc(
{
"doctype": "Opportunity",
"opportunity_from": "Customer",
"party_name": frappe.get_value("Customer", get_random("Customer"), "name"),
"opportunity_type": "Sales",
"with_items": 1,
"transaction_date": frappe.flags.current_date,
}
)
add_random_children(
b,
"items",
rows=4,
randomize={
"qty": (1, 5),
"item_code": ("Item", {"has_variants": 0, "is_fixed_asset": 0, "domain": domain}),
},
unique="item_code",
)
b.insert()
frappe.db.commit()
def make_quotation(domain):
# get open opportunites
opportunity = get_random("Opportunity", {"status": "Open", "with_items": 1})
if opportunity:
from erpnext.crm.doctype.opportunity.opportunity import make_quotation
qtn = frappe.get_doc(make_quotation(opportunity))
qtn.insert()
frappe.db.commit()
@@ -104,38 +120,52 @@ def make_quotation(domain):
# get customer, currency and exchange_rate
customer = get_random("Customer")
company_currency = frappe.get_cached_value('Company', erpnext.get_default_company(), "default_currency")
party_account_currency = get_party_account_currency("Customer", customer, erpnext.get_default_company())
company_currency = frappe.get_cached_value(
"Company", erpnext.get_default_company(), "default_currency"
)
party_account_currency = get_party_account_currency(
"Customer", customer, erpnext.get_default_company()
)
if company_currency == party_account_currency:
exchange_rate = 1
else:
exchange_rate = get_exchange_rate(party_account_currency, company_currency, args="for_selling")
qtn = frappe.get_doc({
"creation": frappe.flags.current_date,
"doctype": "Quotation",
"quotation_to": "Customer",
"party_name": customer,
"currency": party_account_currency or company_currency,
"conversion_rate": exchange_rate,
"order_type": "Sales",
"transaction_date": frappe.flags.current_date,
})
qtn = frappe.get_doc(
{
"creation": frappe.flags.current_date,
"doctype": "Quotation",
"quotation_to": "Customer",
"party_name": customer,
"currency": party_account_currency or company_currency,
"conversion_rate": exchange_rate,
"order_type": "Sales",
"transaction_date": frappe.flags.current_date,
}
)
add_random_children(qtn, "items", rows=3, randomize = {
"qty": (1, 5),
"item_code": ("Item", {"has_variants": "0", "is_fixed_asset": 0, "domain": domain})
}, unique="item_code")
add_random_children(
qtn,
"items",
rows=3,
randomize={
"qty": (1, 5),
"item_code": ("Item", {"has_variants": "0", "is_fixed_asset": 0, "domain": domain}),
},
unique="item_code",
)
qtn.insert()
frappe.db.commit()
qtn.submit()
frappe.db.commit()
def make_sales_order():
q = get_random("Quotation", {"status": "Submitted"})
if q:
from erpnext.selling.doctype.quotation.quotation import make_sales_order as mso
so = frappe.get_doc(mso(q))
so.transaction_date = frappe.flags.current_date
so.delivery_date = frappe.utils.add_days(frappe.flags.current_date, 10)

View File

@@ -16,7 +16,7 @@ from erpnext.stock.stock_ledger import NegativeStockError
def work():
frappe.set_user(frappe.db.get_global('demo_manufacturing_user'))
frappe.set_user(frappe.db.get_global("demo_manufacturing_user"))
make_purchase_receipt()
make_delivery_note()
@@ -25,15 +25,19 @@ def work():
make_sales_return_records()
make_purchase_return_records()
def make_purchase_receipt():
if random.random() < 0.6:
from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_receipt
report = "Purchase Order Items To Be Received"
po_list =list(set([r[0] for r in query_report.run(report)["result"] if r[0]!="Total"]))[:random.randint(1, 10)]
po_list = list(set([r[0] for r in query_report.run(report)["result"] if r[0] != "Total"]))[
: random.randint(1, 10)
]
for po in po_list:
pr = frappe.get_doc(make_purchase_receipt(po))
if pr.is_subcontracted=="Yes":
if pr.is_subcontracted == "Yes":
pr.supplier_warehouse = "Supplier - WPL"
pr.posting_date = frappe.flags.current_date
@@ -41,25 +45,29 @@ def make_purchase_receipt():
try:
pr.submit()
except NegativeStockError:
print('Negative stock for {0}'.format(po))
print("Negative stock for {0}".format(po))
pass
frappe.db.commit()
def make_delivery_note():
# make purchase requests
# make delivery notes (if possible)
if random.random() < 0.6:
from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note
report = "Ordered Items To Be Delivered"
for so in list(set([r[0] for r in query_report.run(report)["result"]
if r[0]!="Total"]))[:random.randint(1, 3)]:
for so in list(set([r[0] for r in query_report.run(report)["result"] if r[0] != "Total"]))[
: random.randint(1, 3)
]:
dn = frappe.get_doc(make_delivery_note(so))
dn.posting_date = frappe.flags.current_date
for d in dn.get("items"):
if not d.expense_account:
d.expense_account = ("Cost of Goods Sold - {0}".format(
frappe.get_cached_value('Company', dn.company, 'abbr')))
d.expense_account = "Cost of Goods Sold - {0}".format(
frappe.get_cached_value("Company", dn.company, "abbr")
)
try:
dn.insert()
@@ -68,6 +76,7 @@ def make_delivery_note():
except (NegativeStockError, SerialNoRequiredError, SerialNoQtyError, UnableToSelectBatchError):
frappe.db.rollback()
def make_stock_reconciliation():
# random set some items as damaged
from erpnext.stock.doctype.stock_reconciliation.stock_reconciliation import (
@@ -93,6 +102,7 @@ def make_stock_reconciliation():
except EmptyStockReconciliationItemsError:
frappe.db.rollback()
def submit_draft_stock_entries():
from erpnext.stock.doctype.stock_entry.stock_entry import (
DuplicateEntryForWorkOrderError,
@@ -102,20 +112,25 @@ def submit_draft_stock_entries():
# try posting older drafts (if exists)
frappe.db.commit()
for st in frappe.db.get_values("Stock Entry", {"docstatus":0}, "name"):
for st in frappe.db.get_values("Stock Entry", {"docstatus": 0}, "name"):
try:
ste = frappe.get_doc("Stock Entry", st[0])
ste.posting_date = frappe.flags.current_date
ste.save()
ste.submit()
frappe.db.commit()
except (NegativeStockError, IncorrectValuationRateError, DuplicateEntryForWorkOrderError,
OperationsNotCompleteError):
except (
NegativeStockError,
IncorrectValuationRateError,
DuplicateEntryForWorkOrderError,
OperationsNotCompleteError,
):
frappe.db.rollback()
def make_sales_return_records():
if random.random() < 0.1:
for data in frappe.get_all('Delivery Note', fields=["name"], filters={"docstatus": 1}):
for data in frappe.get_all("Delivery Note", fields=["name"], filters={"docstatus": 1}):
if random.random() < 0.1:
try:
dn = make_sales_return(data.name)
@@ -125,9 +140,10 @@ def make_sales_return_records():
except Exception:
frappe.db.rollback()
def make_purchase_return_records():
if random.random() < 0.1:
for data in frappe.get_all('Purchase Receipt', fields=["name"], filters={"docstatus": 1}):
for data in frappe.get_all("Purchase Receipt", fields=["name"], filters={"docstatus": 1}):
if random.random() < 0.1:
try:
pr = make_purchase_return(data.name)