mirror of
https://codeberg.org/Mo8it/AdvLabDB.git
synced 2024-11-08 21:21:06 +00:00
Done AppointmentView
This commit is contained in:
parent
b67ba46768
commit
5b62f9e78e
2 changed files with 116 additions and 28 deletions
|
@ -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):
|
||||
|
|
|
@ -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()}"
|
||||
|
||||
|
|
Loading…
Reference in a new issue