Fix the demo for the schools (#8879)
* Fix the demo for the schools * Fix for the demo https://github.com/frappe/erpnext/issues/6347
This commit is contained in:
parent
fa16b849a0
commit
f60bd60012
18
erpnext/demo/data/assessment_criteria.json
Normal file
18
erpnext/demo/data/assessment_criteria.json
Normal file
@ -0,0 +1,18 @@
|
||||
[
|
||||
{
|
||||
"doctype": "Assessment Criteria",
|
||||
"assessment_criteria": "Aptitude"
|
||||
},
|
||||
{
|
||||
"doctype": "Assessment Criteria",
|
||||
"assessment_criteria": "Application"
|
||||
},
|
||||
{
|
||||
"doctype": "Assessment Criteria",
|
||||
"assessment_criteria": "Understanding"
|
||||
},
|
||||
{
|
||||
"doctype": "Assessment Criteria",
|
||||
"assessment_criteria": "Knowledge"
|
||||
}
|
||||
]
|
17
erpnext/demo/data/grading_scale.json
Normal file
17
erpnext/demo/data/grading_scale.json
Normal file
@ -0,0 +1,17 @@
|
||||
[
|
||||
{
|
||||
"doctype": "Grading Scale",
|
||||
"grading_scale_name": "Standard Grading",
|
||||
"description": "Standard Grading Scale",
|
||||
"intervals": [
|
||||
{"threshold": 100.0, "grade_code": "A", "grade_description": "Excellent"},
|
||||
{"threshold": 89.9, "grade_code": "B+", "grade_description": "Close to Excellence"},
|
||||
{"threshold": 80.0, "grade_code": "B", "grade_description": "Good"},
|
||||
{"threshold": 69.9, "grade_code": "C+", "grade_description": "Almost Good"},
|
||||
{"threshold": 60.0, "grade_code": "C", "grade_description": "Average"},
|
||||
{"threshold": 50.0, "grade_code": "D+", "grade_description": "Have to Work"},
|
||||
{"threshold": 40.0, "grade_code": "D", "grade_description": "Not met Baseline Expectations"},
|
||||
{"threshold": 0.0, "grade_code": "F", "grade_description": "Have to work a lot"}
|
||||
]
|
||||
}
|
||||
]
|
@ -57,6 +57,7 @@
|
||||
},
|
||||
{
|
||||
"is_stock_item": 0,
|
||||
"default_warehouse": "Stores",
|
||||
"description": "Computer",
|
||||
"item_code": "Computer",
|
||||
"item_name": "Computer",
|
||||
@ -64,6 +65,7 @@
|
||||
},
|
||||
{
|
||||
"is_stock_item": 0,
|
||||
"default_warehouse": "Stores",
|
||||
"description": "Mobile",
|
||||
"item_code": "Mobile",
|
||||
"item_name": "Mobile",
|
||||
@ -71,6 +73,7 @@
|
||||
},
|
||||
{
|
||||
"is_stock_item": 0,
|
||||
"default_warehouse": "Stores",
|
||||
"description": "ERP",
|
||||
"item_code": "ERP",
|
||||
"item_name": "ERP",
|
||||
@ -78,12 +81,14 @@
|
||||
},
|
||||
{
|
||||
"is_stock_item": 0,
|
||||
"default_warehouse": "Stores",
|
||||
"description": "Autocad",
|
||||
"item_code": "Autocad",
|
||||
"item_name": "Autocad",
|
||||
"item_group": "All Item Groups"
|
||||
},
|
||||
{
|
||||
"default_warehouse": "Stores",
|
||||
"default_warehouse": "Stores",
|
||||
"item_code": "Service",
|
||||
"item_group": "Services",
|
||||
|
@ -1,102 +1,46 @@
|
||||
[
|
||||
{
|
||||
"doctype": "Program",
|
||||
"name": "MCA",
|
||||
"program_name": "Masters of Computer Applications",
|
||||
"program_code": "MCA",
|
||||
"department": "Information Technology",
|
||||
"courses": [
|
||||
{
|
||||
"course": "Microprocessor",
|
||||
"academic_term": "Semester 1"
|
||||
},
|
||||
{
|
||||
"course": "Probability and Statistics",
|
||||
"academic_term": "Semester 1"
|
||||
},
|
||||
{
|
||||
"course": "Programing in Java",
|
||||
"academic_term": "Semester 2"
|
||||
}
|
||||
{ "course": "MCA4010" },
|
||||
{ "course": "MCA4020" },
|
||||
{ "course": "MCA4030" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"doctype": "Program",
|
||||
"name": "BCA",
|
||||
"program_name": "Bachelor of Computer Applications",
|
||||
"program_code": "BCA",
|
||||
"department": "Information Technology",
|
||||
"courses": [
|
||||
{
|
||||
"course": "Communication Skiils",
|
||||
"academic_term": "Semester 3"
|
||||
},
|
||||
{
|
||||
"course": "Object Oriented Programing - C++",
|
||||
"academic_term": "Semester 3"
|
||||
},
|
||||
{
|
||||
"course": "Basic Mathematics",
|
||||
"academic_term": "Semester 2"
|
||||
},
|
||||
{
|
||||
"course": "Data Structures and Algorithm",
|
||||
"academic_term": "Semester 2"
|
||||
},
|
||||
{
|
||||
"course": "Digital Logic",
|
||||
"academic_term": "Semester 2"
|
||||
},
|
||||
{
|
||||
"course": "Fundamentals of IT & Programing",
|
||||
"academic_term": "Semester 1"
|
||||
},
|
||||
{
|
||||
"course": "Operating System",
|
||||
"academic_term": "Semester 1"
|
||||
},
|
||||
{
|
||||
"course": "Programing in C",
|
||||
"academic_term": "Semester 1"
|
||||
}
|
||||
{ "course": "BCA2030" },
|
||||
{ "course": "BCA1030" },
|
||||
{ "course": "BCA2020" },
|
||||
{ "course": "BCA1040" },
|
||||
{ "course": "BCA1010" },
|
||||
{ "course": "BCA2010" },
|
||||
{ "course": "BCA1020" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"doctype": "Program",
|
||||
"name": "BBA",
|
||||
"program_name": "Bachelor of Business Administration",
|
||||
"program_code": "BBA",
|
||||
"department": "Management Studies",
|
||||
"courses": [
|
||||
{
|
||||
"course": "Organizational Behavior",
|
||||
"academic_term": "Semester 1"
|
||||
},
|
||||
{
|
||||
"course": "Management Development and Skills",
|
||||
"academic_term": "Semester 1"
|
||||
},
|
||||
{
|
||||
"course": "Legal and Regulatory Framework",
|
||||
"academic_term": "Semester 1"
|
||||
},
|
||||
{
|
||||
"course": "Human Resource Management",
|
||||
"academic_term": "Semester 2"
|
||||
},
|
||||
{
|
||||
"course": "Entrepreneurship Management",
|
||||
"academic_term": "Semester 2"
|
||||
},
|
||||
{
|
||||
"course": "Communication Skills",
|
||||
"academic_term": "Semester 2"
|
||||
},
|
||||
{
|
||||
"course": "Business Environment",
|
||||
"academic_term": "Semester 3"
|
||||
},
|
||||
{
|
||||
"course": "Advertising and Sales",
|
||||
"academic_term": "Semester 3"
|
||||
}
|
||||
{ "course": "BBA 101" },
|
||||
{ "course": "BBA 102" },
|
||||
{ "course": "BBA 103" },
|
||||
{ "course": "BBA 301" },
|
||||
{ "course": "BBA 302" },
|
||||
{ "course": "BBA 304" },
|
||||
{ "course": "BBA 505" }
|
||||
]
|
||||
}
|
||||
]
|
10
erpnext/demo/data/student_batch_name.json
Normal file
10
erpnext/demo/data/student_batch_name.json
Normal file
@ -0,0 +1,10 @@
|
||||
[
|
||||
{
|
||||
"doctype": "Student Batch Name",
|
||||
"batch_name": "Section-A"
|
||||
},
|
||||
{
|
||||
"doctype": "Student Batch Name",
|
||||
"batch_name": "Section-B"
|
||||
}
|
||||
]
|
@ -35,6 +35,7 @@ def make(domain='Manufacturing'):
|
||||
frappe.destroy()
|
||||
frappe.init(site)
|
||||
frappe.connect()
|
||||
|
||||
simulate(domain)
|
||||
|
||||
def simulate(domain='Manufacturing'):
|
||||
@ -73,7 +74,7 @@ def simulate(domain='Manufacturing'):
|
||||
stock.work()
|
||||
accounts.work()
|
||||
projects.run_projects(current_date)
|
||||
#run_messages()
|
||||
# run_messages()
|
||||
|
||||
if domain=='Manufacturing':
|
||||
sales.work()
|
||||
|
@ -15,6 +15,7 @@ def setup_data():
|
||||
make_student_group()
|
||||
make_fees_category()
|
||||
make_fees_structure()
|
||||
make_assessment_groups()
|
||||
frappe.db.commit()
|
||||
frappe.clear_cache()
|
||||
|
||||
@ -24,6 +25,9 @@ def make_masters():
|
||||
import_json("Instructor")
|
||||
import_json("Course")
|
||||
import_json("Program")
|
||||
import_json("Student Batch Name")
|
||||
import_json("Assessment Criteria")
|
||||
import_json("Grading Scale")
|
||||
frappe.db.commit()
|
||||
|
||||
def setup_item():
|
||||
@ -81,13 +85,24 @@ def make_student_applicants():
|
||||
count+=1
|
||||
|
||||
def make_student_group():
|
||||
for d in frappe.db.get_list("Academic Term"):
|
||||
sg_tool = frappe.new_doc("Student Group Creation Tool")
|
||||
sg_tool.academic_year = "2016-17"
|
||||
sg_tool.academic_term = d.name
|
||||
sg_tool.courses = sg_tool.get_courses()
|
||||
sg_tool.create_student_groups()
|
||||
frappe.db.commit()
|
||||
for term in frappe.db.get_list("Academic Term"):
|
||||
for program in frappe.db.get_list("Program"):
|
||||
sg_tool = frappe.new_doc("Student Group Creation Tool")
|
||||
sg_tool.academic_year = "2017-18"
|
||||
sg_tool.academic_term = term.name
|
||||
sg_tool.program = program.name
|
||||
for d in sg_tool.get_courses():
|
||||
d = frappe._dict(d)
|
||||
student_group = frappe.new_doc("Student Group")
|
||||
student_group.student_group_name = d.student_group_name
|
||||
student_group.group_based_on = d.group_based_on
|
||||
student_group.program = program.name
|
||||
student_group.course = d.course
|
||||
student_group.batch = d.batch
|
||||
student_group.academic_term = term.name
|
||||
student_group.academic_year = "2017-18"
|
||||
student_group.save()
|
||||
frappe.db.commit()
|
||||
|
||||
def make_fees_category():
|
||||
fee_type = ["Tuition Fee", "Hostel Fee", "Logistics Fee",
|
||||
@ -111,7 +126,7 @@ def make_fees_category():
|
||||
def make_fees_structure():
|
||||
for d in frappe.db.get_list("Program"):
|
||||
program = frappe.get_doc("Program", d.name)
|
||||
for academic_term in ["Semester 1", "Semester 2", "Semester 3"]:
|
||||
for academic_term in ["2017-18 (Semester 1)", "2017-18 (Semester 2)", "2017-18 (Semester 3)"]:
|
||||
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
|
||||
@ -123,6 +138,27 @@ def make_fees_structure():
|
||||
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.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')
|
||||
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')
|
||||
ag2.assessment_group_name = ag1.name + " " + assessment_group
|
||||
ag2.parent_assessment_group = ag1.name
|
||||
ag2.insert()
|
||||
frappe.db.commit()
|
||||
|
||||
|
||||
def get_json_path(doctype):
|
||||
return frappe.get_app_path('erpnext', 'demo', 'data', frappe.scrub(doctype) + '.json')
|
||||
|
||||
|
@ -8,30 +8,22 @@ import random
|
||||
from frappe.utils import cstr
|
||||
from frappe.utils.make_random import get_random
|
||||
from datetime import timedelta
|
||||
from erpnext.schools.api import get_student_group_students, make_attendance_records, enroll_student, get_fee_schedule, collect_fees
|
||||
from erpnext.schools.api import get_student_group_students, make_attendance_records, enroll_student, \
|
||||
get_fee_schedule, collect_fees, get_course
|
||||
from erpnext.schools.doctype.program_enrollment.program_enrollment import get_program_courses
|
||||
from erpnext.schools.doctype.student_group.student_group import get_students
|
||||
|
||||
def work():
|
||||
frappe.set_user(frappe.db.get_global('demo_schools_user'))
|
||||
for d in xrange(20):
|
||||
approve_random_student_applicant()
|
||||
enroll_random_student(frappe.flags.current_date)
|
||||
if frappe.flags.current_date.weekday()== 0:
|
||||
make_course_schedule(frappe.flags.current_date, frappe.utils.add_days(frappe.flags.current_date, 5))
|
||||
# if frappe.flags.current_date.weekday()== 0:
|
||||
# make_course_schedule(frappe.flags.current_date, frappe.utils.add_days(frappe.flags.current_date, 5))
|
||||
mark_student_attendance(frappe.flags.current_date)
|
||||
# make_assessment_plan()
|
||||
make_fees()
|
||||
|
||||
def mark_student_attendance(current_date):
|
||||
status = ["Present", "Absent"]
|
||||
for d in frappe.db.get_list("Course Schedule", filters={"schedule_date": current_date}, fields=("name", "student_group")):
|
||||
students = get_student_group_students(d.student_group)
|
||||
for stud in students:
|
||||
make_attendance_records(stud.student, stud.student_name, d.name, status[weighted_choice([9,4])])
|
||||
|
||||
def make_fees():
|
||||
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 approve_random_student_applicant():
|
||||
random_student = get_random("Student Applicant", {"application_status": "Applied"})
|
||||
if random_student:
|
||||
@ -39,31 +31,59 @@ def approve_random_student_applicant():
|
||||
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"]
|
||||
random_student = get_random("Student Applicant", {"application_status": "Approved"})
|
||||
if random_student:
|
||||
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])]
|
||||
fee_schedule = get_fee_schedule(enrollment.program)
|
||||
for fee in fee_schedule:
|
||||
enrollment.append("fees", fee)
|
||||
enrolled_courses = get_course(enrollment.program)
|
||||
for course in enrolled_courses:
|
||||
enrollment.append("courses", course)
|
||||
enrollment.submit()
|
||||
frappe.db.commit()
|
||||
assign_student_group(enrollment.student, enrollment.program)
|
||||
assign_student_group(enrollment.student, enrollment.student_name, enrollment.program,
|
||||
enrolled_courses, enrollment.student_batch_name)
|
||||
|
||||
def assign_student_group(student, program):
|
||||
courses = []
|
||||
for d in frappe.get_list("Program Course", fields=("course"), filters={"parent": program }):
|
||||
courses.append(d.course)
|
||||
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)}):
|
||||
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.save()
|
||||
student_batch = frappe.get_list("Student Group", fields=("name"), filters={"program": program, "group_based_on":"Batch", "batch":batch})[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.save()
|
||||
frappe.db.commit()
|
||||
|
||||
for d in xrange(3):
|
||||
course = random.choice(courses)
|
||||
random_sg = get_random("Student Group", {"course": course})
|
||||
if random_sg:
|
||||
student_group = frappe.get_doc("Student Group", random_sg)
|
||||
student_group.append("students", {"student": student})
|
||||
student_group.save()
|
||||
courses.remove(course)
|
||||
def mark_student_attendance(current_date):
|
||||
status = ["Present", "Absent"]
|
||||
for d in frappe.db.get_list("Student Group", filters={"group_based_on": "Batch"}):
|
||||
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)
|
||||
|
||||
def make_fees():
|
||||
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):
|
||||
random_group = get_random("Student Group", {"group_based_on": "Course"}, 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.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"):
|
||||
|
@ -10,6 +10,14 @@ from frappe.model.mapper import get_mapped_doc
|
||||
from frappe.utils import flt, cstr
|
||||
from frappe.email.doctype.email_group.email_group import add_subscribers
|
||||
|
||||
def get_course(program):
|
||||
'''Return list of courses for a particular program
|
||||
:param program: Program
|
||||
'''
|
||||
courses = frappe.db.sql('''select course, course_name from `tabProgram Course` where parent=%s''',
|
||||
(program), as_dict=1)
|
||||
return courses
|
||||
|
||||
@frappe.whitelist()
|
||||
def enroll_student(source_name):
|
||||
"""Creates a Student Record and returns a Program Enrollment.
|
||||
|
Loading…
x
Reference in New Issue
Block a user