mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-02 11:49:10 +00:00
style: bulk format code with black
v13 port because otherwise backports will result in conflicts always
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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"},
|
||||
}
|
||||
|
||||
@@ -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 = []
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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",
|
||||
)
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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"),
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user