blob: 6388f9ac7edf1f76a69295c062a344cb1e5858cd [file] [log] [blame]
Neil Trini Lasrado06724592016-08-22 12:57:09 +05301# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
2# License: GNU General Public License v3. See license.txt
3
4from __future__ import unicode_literals
5
6import frappe
7import random
8from frappe.utils import cstr
9from frappe.utils.make_random import get_random
10from datetime import timedelta
11from erpnext.schools.api import get_student_group_students, make_attendance_records, enroll_student, get_fee_schedule, collect_fees
12
13def work():
14 frappe.set_user(frappe.db.get_global('demo_schools_user'))
15 for d in xrange(20):
16 approve_random_student_applicant()
17 enroll_random_student(frappe.flags.current_date)
18 if frappe.flags.current_date.weekday()== 0:
19 make_course_schedule(frappe.flags.current_date, frappe.utils.add_days(frappe.flags.current_date, 5))
20 mark_student_attendance(frappe.flags.current_date)
21 make_fees()
22
23def mark_student_attendance(current_date):
24 status = ["Present", "Absent"]
25 for d in frappe.db.get_list("Course Schedule", filters={"schedule_date": current_date}, fields=("name", "student_group")):
26 students = get_student_group_students(d.student_group)
27 for stud in students:
28 make_attendance_records(stud.student, stud.student_name, d.name, status[weighted_choice([9,4])])
29
30def make_fees():
31 for d in range(1,10):
32 random_fee = get_random("Fees", {"paid_amount": 0})
33 collect_fees(random_fee, frappe.db.get_value("Fees", random_fee, "outstanding_amount"))
34
35def approve_random_student_applicant():
36 random_student = get_random("Student Applicant", {"application_status": "Applied"})
37 if random_student:
38 status = ["Approved", "Rejected"]
39 frappe.db.set_value("Student Applicant", random_student, "application_status", status[weighted_choice([9,3])])
40
41def enroll_random_student(current_date):
42 random_student = get_random("Student Applicant", {"application_status": "Approved"})
43 if random_student:
44 enrollment = enroll_student(random_student)
45 enrollment.academic_year = get_random("Academic Year")
46 enrollment.enrollment_date = current_date
47 fee_schedule = get_fee_schedule(enrollment.program)
48 for fee in fee_schedule:
49 enrollment.append("fees", fee)
50 enrollment.submit()
51 frappe.db.commit()
52 assign_student_group(enrollment.student, enrollment.program)
53
54def assign_student_group(student, program):
55 courses = []
56 for d in frappe.get_list("Program Course", fields=("course"), filters={"parent": program }):
57 courses.append(d.course)
58
59 for d in xrange(3):
60 course = random.choice(courses)
61 random_sg = get_random("Student Group", {"course": course})
62 if random_sg:
63 student_group = frappe.get_doc("Student Group", random_sg)
64 student_group.append("students", {"student": student})
65 student_group.save()
66 courses.remove(course)
67
68def make_course_schedule(start_date, end_date):
69 for d in frappe.db.get_list("Student Group"):
70 cs = frappe.new_doc("Scheduling Tool")
71 cs.student_group = d.name
72 cs.room = get_random("Room")
73 cs.instructor = get_random("Instructor")
74 cs.course_start_date = cstr(start_date)
75 cs.course_end_date = cstr(end_date)
76 day = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
77 for x in xrange(3):
78 random_day = random.choice(day)
79 cs.day = random_day
80 cs.from_time = timedelta(hours=(random.randrange(7, 17,1)))
81 cs.to_time = cs.from_time + timedelta(hours=1)
82 cs.schedule_course()
83 day.remove(random_day)
84
85
86def weighted_choice(weights):
87 totals = []
88 running_total = 0
89
90 for w in weights:
91 running_total += w
92 totals.append(running_total)
93
94 rnd = random.random() * running_total
95 for i, total in enumerate(totals):
96 if rnd < total:
97 return i