import datetime from apiflask import APIBlueprint from flask import abort, current_app from ..schemas import MessageSchema, EnrollmentCreateSchema from ...examination_schedule.models import Enrollment, Committee, ExaminationSchedule from ...dependencies import db bp = APIBlueprint("enrollments", __name__, url_prefix="/enrollments") @bp.post('//') @bp.input(EnrollmentCreateSchema, location='json') @bp.output(MessageSchema) def create_enrollments(examination_schedule_id: int, data: dict) -> dict: prt = current_app.config["PROJECT_PRESENTATION_TIME"] examination_schedule = db.session.query(ExaminationSchedule).filter( ExaminationSchedule.id == examination_schedule_id).first() if examination_schedule is None: abort(404, "Examination schedule doesn't exist!") start_date = data['start_date'] end_date = data['end_date'] if start_date > end_date: abort(400, "Invalid dates! End date must be greater than start date!") if start_date.date() != end_date.date(): abort(400, "Invalid dates! Only hours can be different!") delta = end_date - start_date delta_in_minutes = delta.total_seconds() / 60 if delta_in_minutes % prt != 0: abort(400, "Invalid format dates!") amount = int(delta_in_minutes // prt) enrollments = [] for i in range(amount): sd = start_date + datetime.timedelta(minutes=i * prt) ed = start_date + datetime.timedelta(minutes=(i + 1) * prt) enrollment = Enrollment(start_date=sd, end_date=ed, examination_schedule_id=examination_schedule_id) enrollments.append(enrollment) db.session.add_all(enrollments) db.session.commit() committees = [Committee(enrollment_id=e.id) for e in enrollments] db.session.add_all(committees) db.session.commit() return {"message": "Enrollments was created!"} @bp.delete('//') @bp.output(MessageSchema) def delete_enrollment(enrollment_id: int) -> dict: enrollment = db.session.query(Enrollment).filter(Enrollment.id == enrollment_id).first() if enrollment is None: abort(404, "Enrollment doesn't exist!") db.session.delete(enrollment) db.session.commit() return {"message": "Enrollment was deleted!"}