diff --git a/advlabdb/modelViews.py b/advlabdb/modelViews.py index f999ac1..243ce6b 100644 --- a/advlabdb/modelViews.py +++ b/advlabdb/modelViews.py @@ -312,12 +312,53 @@ class ExperimentView(SecureModelView): form_args = {"wiki_link": {"validators": [URL()]}} +def assistantQueryFactory(): + return Assistant.query.filter(Assistant.user_id.in_([user.id for user in User.query.filter(User.active == True)])) + + class SemesterExperimentView(SecureModelView): - column_list = ["experiment", "semester", "assistants"] + class CreateForm(Form): + def experimentQueryFactory(): + return Experiment.query.filter(Experiment.active == True) + + experiment = QuerySelectField( + "Experiment", + query_factory=experimentQueryFactory, + validators=[DataRequired()], + allow_blank=True, + blank_text="-", + ) + + assistants = QuerySelectMultipleField("Assistants", query_factory=assistantQueryFactory) + + form = CreateForm + + can_view_details = True + + column_list = ["experiment", "assistants", "semester"] + column_details_list = column_list + ["group_experiments"] def queryFilter(self): return SemesterExperiment.semester == userActiveSemester() + def create_model(self, form): + try: + model = SemesterExperiment( + semester=userActiveSemester(), experiment=form.experiment.data, assistants=form.assistants.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 + class AssistantView(SecureModelView): can_view_details = True @@ -334,10 +375,6 @@ 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" @@ -382,6 +419,7 @@ class GroupExperimentView(SecureModelView): form = CreateForm can_edit = False + column_list = ["group", "semester_experiment", "appointments", "experiment_marks"] column_filters = ["group", "semester_experiment.experiment", "appointments"]