1
0
Fork 0
mirror of https://codeberg.org/Mo8it/AdvLabDB.git synced 2024-09-19 18:31:16 +00:00
AdvLabDB/advlabdb/assistantModelViews.py

96 lines
2.8 KiB
Python

from flask import flash
from flask_security import current_user
from wtforms import BooleanField, Form, RadioField, SelectField, TextField
from wtforms.fields.html5 import DateField
from flask_admin.contrib.sqla.fields import QuerySelectField, QuerySelectMultipleField
from sqlalchemy import and_
from wtforms.validators import NumberRange
from advlabdb import assistantSpace, db
from advlabdb.customClasses import SecureAssistantModelView
from advlabdb.exceptions import DataBaseException, ModelViewException
from advlabdb.models import (
Appointment,
Assistant,
Experiment,
ExperimentMark,
Group,
GroupExperiment,
Part,
PartStudent,
Program,
Role,
Semester,
SemesterExperiment,
Student,
User,
)
from advlabdb.utils import userActiveSemester
class AssistantAppointmentView(SecureAssistantModelView):
can_export = False
can_set_page_size = False
can_create = False
can_delete = False
can_edit = False
column_display_actions = False
column_list = ["date", "special", "group_experiment"]
column_editable_list = ["date", "special"]
def queryFilter(self):
return and_(
Appointment.group_experiment.has(
GroupExperiment.semester_experiment.has(SemesterExperiment.semester == userActiveSemester())
),
Appointment.assistant == current_user.assistant,
)
class AssistantExperimentMarkView(SecureAssistantModelView):
can_export = False
can_set_page_size = False
can_create = False
can_delete = False
can_edit = False
column_display_actions = False
column_editable_list = ["oral_mark", "protocol_mark"]
form_args = {
"oral_mark": {"validators": [NumberRange(0, 15)]},
"protocol_mark": {"validators": [NumberRange(0, 15)]},
}
column_default_sort = [("oral_mark", False), ("protocol_mark", False)]
def queryFilter(self):
return ExperimentMark.group_experiment.has(
GroupExperiment.semester_experiment.has(
and_(
SemesterExperiment.semester == userActiveSemester(),
SemesterExperiment.assistants.any(Assistant.user == current_user),
)
)
)
def after_model_change(self, form, model, is_created):
if model.oral_mark or model.protocol_mark:
try:
model.assistant = current_user.assistant
self.session.commit()
except Exception as ex:
flash(str(ex), "error")
self.session.rollback()
assistantSpace.add_view(
AssistantAppointmentView(Appointment, db.session, endpoint="assistant_appointment", url="appointment")
)
assistantSpace.add_view(
AssistantExperimentMarkView(ExperimentMark, db.session, endpoint="assistant_experimentmark", url="experimentmark")
)