import datetime from apiflask import APIBlueprint from flask import abort from ..schemas import MessageSchema, TemporaryStudentSchema from ...dependencies import db from ...examination_schedule.models import Enrollment from ..models import Student, Group from ...project_supervisor.models import ProjectSupervisor from ...project_supervisor.query import get_enrollment_by_enrollment_and_examination_schedule_ids, \ check_the_project_supervisor_is_in_committee from ..query import check_the_enrollments_has_just_started bp = APIBlueprint("enrollments", __name__, url_prefix="/") @bp.post('//enrollments//') @bp.input(TemporaryStudentSchema) @bp.output(MessageSchema) def assign_group_for_this_exam_date(examination_schedule_id: int, enrollment_id: int, data: dict) -> dict: # this code will be removed student = Student.query.filter(Student.index == data['student_index']).first() if student is None: abort(404, "Student doesn't exist!") ################ st = Student.query.join(Group).join(ProjectSupervisor).filter(Student.index == student.index).first() enrollment = db.session.query(Enrollment.id).filter(Enrollment.group_id == st.group.id).first() if enrollment is not None: abort(400, "Your group has already assigned to any exam date!") enrollment = get_enrollment_by_enrollment_and_examination_schedule_ids(examination_schedule_id, enrollment_id) check_the_enrollments_has_just_started(enrollment.examination_schedule) if st is None or st.group.project_supervisor is None: abort(400, "You don't have a group or your group doesn't have an assigned project supervisor!") if not check_the_project_supervisor_is_in_committee(enrollment_id, st.group.project_supervisor.id): abort(400, "Your project supervisor is not in committee!") enrollment.group_id = st.group.id db.session.add(enrollment) db.session.commit() return {"message": "You have just assigned the group for this exam date!"} @bp.delete('//enrollments//') @bp.input(TemporaryStudentSchema) @bp.output(MessageSchema) def delete_group_for_this_exam_date(examination_schedule_id: int, enrollment_id: int, data: dict) -> dict: # this code will be removed student = Student.query.filter(Student.index == data['student_index']).first() if student is None: abort(404, "Student doesn't exist!") ################ enrollment = get_enrollment_by_enrollment_and_examination_schedule_ids(examination_schedule_id, enrollment_id) if student.group.id != enrollment.group_id: abort(400, "You are not assigned to this committee!") check_the_enrollments_has_just_started(enrollment.examination_schedule) enrollment.group = None db.session.add(enrollment) db.session.commit() return {"message": "You have just removed the group for this exam date!"}