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

Done AppointmentView

This commit is contained in:
Mo 2021-07-12 16:42:11 +02:00
parent b67ba46768
commit 5b62f9e78e
2 changed files with 116 additions and 28 deletions

View file

@ -188,7 +188,8 @@ class PartView(SecureModelView):
column_details_list = ["label", "semester", "part_students", "groups"]
form_columns = ["label", "semester"]
queryFilter = lambda self: Part.id.in_([part.id for part in userActiveSemester().parts])
def queryFilter(self):
return Part.id.in_([part.id for part in userActiveSemester().parts])
class StudentView(SecureModelView):
@ -217,14 +218,18 @@ class StudentView(SecureModelView):
]
partQueryFactory = lambda: Part.query.filter(Part.id.in_([part.id for part in userActiveSemester().parts]))
def partQueryFactory():
return Part.query.filter(Part.id.in_([part.id for part in userActiveSemester().parts]))
groupQueryFactory = lambda: Group.query.filter(Group.part_id.in_([part.id for part in userActiveSemester().parts]))
def groupQueryFactory():
return Group.query.filter(Group.part_id.in_([part.id for part in userActiveSemester().parts]))
class PartStudentView(SecureModelView):
class CreateForm(Form):
studentQueryFactory = lambda: Student.query
def studentQueryFactory():
return Student.query
student = QuerySelectField(
"Student", query_factory=studentQueryFactory, validators=[DataRequired()], allow_blank=True, blank_text="-"
@ -243,10 +248,11 @@ class PartStudentView(SecureModelView):
column_filters = ["part", "student", "group"]
queryFilter = lambda self: PartStudent.part_id.in_([part.id for part in userActiveSemester().parts])
partGroupPartMismatchException = "Student's part and group's part do not match!"
def queryFilter(self):
return PartStudent.part_id.in_([part.id for part in userActiveSemester().parts])
def create_form(self, obj=None):
form = self.CreateForm
return form(get_form_data(), obj=obj)
@ -264,9 +270,8 @@ class PartStudentView(SecureModelView):
class GroupView(SecureModelView):
class CreateForm(Form):
partStudentsQueryFactory = lambda: PartStudent.query.filter(
PartStudent.part_id.in_([part.id for part in userActiveSemester().parts])
)
def partStudentsQueryFactory():
return PartStudent.query.filter(PartStudent.part_id.in_([part.id for part in userActiveSemester().parts]))
part = QuerySelectField(
"Part", query_factory=partQueryFactory, validators=[DataRequired()], allow_blank=True, blank_text="-"
@ -281,10 +286,11 @@ class GroupView(SecureModelView):
column_list = ["number", "part", "part_students", "group_experiments"]
column_filters = ["number", "part"]
queryFilter = lambda self: Group.part_id.in_([part.id for part in userActiveSemester().parts])
partStudentPartPartMismatchException = "Group's part and student's part do not match!"
def queryFilter(self):
return Group.part_id.in_([part.id for part in userActiveSemester().parts])
def create_model(self, form):
try:
model = Group.customInit(form.part.data, form.part_students.data)
@ -338,7 +344,8 @@ class ExperimentView(SecureModelView):
class SemesterExperimentView(SecureModelView):
column_list = ["experiment", "semester", "assistants"]
queryFilter = lambda self: SemesterExperiment.semester == userActiveSemester()
def queryFilter(self):
return SemesterExperiment.semester == userActiveSemester()
class AssistantView(SecureModelView):
@ -356,15 +363,17 @@ class AssistantView(SecureModelView):
form_excluded_columns = ["experiment_marks"]
def assistantQueryFactory():
return Assistant.query.filter(Assistant.user_id.in_([user.id for user in User.query.filter(User.active == True)]))
assistantBlankText = "Auto assign if experiment has only one assistant"
class GroupExperimentView(SecureModelView):
class CreateForm(Form):
semesterExperimentQueryFactory = lambda: SemesterExperiment.query.filter(
SemesterExperiment.semester == userActiveSemester()
)
assistantQueryFactory = lambda: Assistant.query.filter(
Assistant.user_id.in_([user.id for user in User.query.filter(User.active == True)])
)
def semesterExperimentQueryFactory():
return SemesterExperiment.query.filter(SemesterExperiment.semester == userActiveSemester())
group = QuerySelectField(
"Group", query_factory=groupQueryFactory, validators=[DataRequired()], allow_blank=True, blank_text="-"
@ -377,10 +386,8 @@ class GroupExperimentView(SecureModelView):
blank_text="-",
)
assistantBlankText = "Auto assign if experiment has only one assistant"
appointment1_date = DateField("Appointment-1 Date", validators=[Optional()])
appointment1_special = BooleanField("Appointment-1 special", default=False)
appointment1_special = BooleanField("Appointment-1 Special", default=False)
appointment1_assistant = QuerySelectField(
"Appointment-1 Assistant",
query_factory=assistantQueryFactory,
@ -389,7 +396,7 @@ class GroupExperimentView(SecureModelView):
)
appointment2_date = DateField("Appointment-2 Date", validators=[Optional()])
appointment2_special = BooleanField("Appointment-2 special", default=False)
appointment2_special = BooleanField("Appointment-2 Special", default=False)
appointment2_assistant = QuerySelectField(
"Appointment-2 Assistant",
query_factory=assistantQueryFactory,
@ -403,9 +410,10 @@ class GroupExperimentView(SecureModelView):
column_list = ["group", "semester_experiment", "appointments", "experiment_marks"]
column_filters = ["group", "semester_experiment.experiment", "appointments"]
queryFilter = lambda self: GroupExperiment.group_id.in_(
[g.id for g in Group.query.filter(Group.part_id.in_([part.id for part in userActiveSemester().parts]))]
)
def queryFilter(self):
return GroupExperiment.group_id.in_(
[g.id for g in Group.query.filter(Group.part_id.in_([part.id for part in userActiveSemester().parts]))]
)
def create_model(self, form):
try:
@ -437,8 +445,75 @@ class GroupExperimentView(SecureModelView):
return model
def groupExperimentQueryFactory():
return GroupExperiment.query.filter(
GroupExperiment.semester_experiment_id.in_(
[
semesterExperiment.id
for semesterExperiment in SemesterExperiment.query.filter(
SemesterExperiment.semester == userActiveSemester()
)
]
)
)
class AppointmentView(SecureModelView):
column_list = ["date", "special", "group_experiment", "assistant"]
class CreateForm(Form):
group_experiment = QuerySelectField(
"Group Experiment", query_factory=groupExperimentQueryFactory, validators=[DataRequired()]
)
date = DateField("Date", validators=[DataRequired()])
special = BooleanField("Special", default=False)
assistant = QuerySelectField(
"Assistant",
query_factory=assistantQueryFactory,
allow_blank=True,
blank_text=assistantBlankText,
)
form = CreateForm
column_filters = ["date", "special", "group_experiment.group", "group_experiment.group.part", "assistant"]
def queryFilter(self):
return Appointment.group_experiment_id.in_(
groupExperiment.id for groupExperiment in groupExperimentQueryFactory()
)
def create_model(self, form):
try:
model = Appointment.customInit(
form.date.data, form.special.data, form.assistant.data, form.group_experiment.data
)
self.session.add(model)
self.on_model_change(form, model, True)
self.session.commit()
except Exception as ex:
flash(str(ex), "error")
self.session.rollback()
else:
self.after_model_change(form, model, True)
return model
def update_model(self, form, model):
try:
model.customUpdate(form.date.data, form.special.data, form.assistant.data, form.group_experiment.data)
self.on_model_change(form, model, False)
self.session.commit()
except Exception as ex:
flash(str(ex), "error")
self.session.rollback()
return False
else:
self.after_model_change(form, model, False)
return True
class ExperimentMarkView(SecureModelView):

View file

@ -191,7 +191,7 @@ class Appointment(db.Model):
group_experiment_id = db.Column(db.Integer, db.ForeignKey("group_experiment.id"), nullable=False)
assistant_id = db.Column(db.Integer, db.ForeignKey("assistant.id"), nullable=False)
def customInit(date, special, assistant, groupExperiment):
def checkAndGetAssistant(assistant, groupExperiment):
semesterExperiment = groupExperiment.semester_experiment
semesterExperimentAssistants = semesterExperiment.assistants
@ -209,6 +209,11 @@ class Appointment(db.Model):
f"Experiment {semesterExperiment} has more than one assistant. You have to assign one of these assistants: {semesterExperimentAssistants}"
)
return assistant
def customInit(date, special, assistant, groupExperiment):
assistant = Appointment.checkAndGetAssistant(assistant, groupExperiment)
return Appointment(
date=date,
special=special,
@ -216,6 +221,14 @@ class Appointment(db.Model):
assistant=assistant,
)
def customUpdate(self, date, special, assistant, groupExperiment):
assistant = Appointment.checkAndGetAssistant(assistant, groupExperiment)
self.date = date
self.special = special
self.assistant = assistant
self.group_experiment = groupExperiment
def repr(self):
return f"{self.date} {self.group_experiment.repr()}"