def mark_holidays(att_map, from_date, to_date, students_list): holiday_list = get_holiday_list() holidays = get_holidays(holiday_list) for dt in daterange(getdate(from_date), getdate(to_date)): if dt in holidays: for student in students_list: att_map.setdefault(student, frappe._dict()).setdefault(dt, "Holiday") return att_map
def execute(filters=None): if not filters: filters = {} if not filters.get("date"): msgprint(_("Please select date"), raise_exception=1) columns = get_columns(filters) date = filters.get("date") holiday_list = get_holiday_list() if is_holiday(holiday_list, filters.get("date")): msgprint( _("No attendance has been marked for {0} as it is a Holiday"). format(frappe.bold(formatdate(filters.get("date"))))) absent_students = get_absent_students(date) leave_applicants = get_leave_applications(date) if absent_students: student_list = [d["student"] for d in absent_students] transportation_details = get_transportation_details(date, student_list) data = [] for student in absent_students: if not student.student in leave_applicants: row = [ student.student, student.student_name, student.student_group ] stud_details = frappe.db.get_value( "Student", student.student, ['student_email_id', 'student_mobile_number'], as_dict=True) if stud_details.student_email_id: row += [stud_details.student_email_id] else: row += [""] if stud_details.student_mobile_number: row += [stud_details.student_mobile_number] else: row += [""] if transportation_details.get(student.student): row += transportation_details.get(student.student) data.append(row) return columns, data
def execute(filters=None): if not filters: filters = {} if not filters.get("date"): msgprint(_("Please select date"), raise_exception=1) holiday_list = get_holiday_list() if is_holiday(holiday_list, filters.get("date")): msgprint( _("No attendance has been marked for {0} as it is a Holiday"). format(frappe.bold(formatdate(filters.get("date"))))) columns = get_columns(filters) active_student_group = get_active_student_group() data = [] for student_group in active_student_group: row = [student_group.name] present_students = 0 absent_students = 0 student_group_strength = get_student_group_strength(student_group.name) student_attendance = get_student_attendance(student_group.name, filters.get("date")) if student_attendance: for attendance in student_attendance: if attendance.status == "Present": present_students = attendance.count elif attendance.status == "Absent": absent_students = attendance.count unmarked_students = student_group_strength - \ (present_students + absent_students) row += [ student_group_strength, present_students, absent_students, unmarked_students ] data.append(row) return columns, data
def update_attendance(self): holiday_list = get_holiday_list() for dt in daterange(getdate(self.from_date), getdate(self.to_date)): date = dt.strftime("%Y-%m-%d") if is_holiday(holiday_list, date): continue attendance = frappe.db.exists("Student Attendance", { "student": self.student, "date": date, "docstatus": ("!=", 2) }) status = "Present" if self.mark_as_present else "Absent" if attendance: # update existing attendance record values = dict() values["status"] = status values["leave_application"] = self.name frappe.db.set_value("Student Attendance", attendance, values) else: # make a new attendance record doc = frappe.new_doc("Student Attendance") doc.student = self.student doc.student_name = self.student_name doc.date = date doc.leave_application = self.name doc.status = status if self.attendance_based_on == "Student Group": doc.student_group = self.student_group else: doc.course_schedule = self.course_schedule doc.insert(ignore_permissions=True, ignore_mandatory=True) doc.submit()
def update_attendance(self): holiday_list = get_holiday_list() for dt in daterange(getdate(self.from_date), getdate(self.to_date)): date = dt.strftime('%Y-%m-%d') if is_holiday(holiday_list, date): continue attendance = frappe.db.exists('Student Attendance', { 'student': self.student, 'date': date, 'docstatus': ('!=', 2) }) status = 'Present' if self.mark_as_present else 'Absent' if attendance: # update existing attendance record values = dict() values['status'] = status values['leave_application'] = self.name frappe.db.set_value('Student Attendance', attendance, values) else: # make a new attendance record doc = frappe.new_doc('Student Attendance') doc.student = self.student doc.student_name = self.student_name doc.date = date doc.leave_application = self.name doc.status = status if self.attendance_based_on == 'Student Group': doc.student_group = self.student_group else: doc.course_schedule = self.course_schedule doc.insert(ignore_permissions=True, ignore_mandatory=True) doc.submit()
def validate_holiday_list(self): holiday_list = get_holiday_list() self.total_leave_days = get_number_of_leave_days( self.from_date, self.to_date, holiday_list)
def update_if_holiday(self, date): holiday_list = self.holiday_list or get_holiday_list(self.company) while is_holiday(holiday_list, date): date = add_days(date, 1) return date
def update_if_holiday(holiday_list, date): holiday_list = holiday_list or get_holiday_list() while is_holiday(holiday_list, date): date = add_days(date, 1) return date