diff --git a/DB.drawio b/DB.drawio index 472e018..4d2880e 100644 --- a/DB.drawio +++ b/DB.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/advlabdb/modelViews.py b/advlabdb/modelViews.py index cd29a04..af83515 100644 --- a/advlabdb/modelViews.py +++ b/advlabdb/modelViews.py @@ -105,12 +105,13 @@ class RoleView(SecureModelView): class SemesterView(SecureModelView): can_edit = False + can_delete = False + column_display_actions = False column_list = ["label", "parts"] - form_columns = ["semester_label", "year", "transfer_parts", "transfer_semester_experiments", "transfer_assistants"] + form_columns = ["semester_label", "year", "transfer_parts", "transfer_assistants"] semesterLabels = ["WS", "SS"] - transferDesciption = "Will be trasfered from your current semester." form_extra_fields = { "semester_label": RadioField( "Semester", choices=list(zip(semesterLabels, semesterLabels)), validators=[DataRequired()] @@ -118,15 +119,12 @@ class SemesterView(SecureModelView): "year": TextField("Year", validators=[DataRequired()]), "transfer_parts": BooleanField( "Transfer parts", - description=transferDesciption, + description="This option transfers the parts you have in your current active semester. Make sure that your semester is the last semester before creating a new one (recommended)!", default=True, ), - "transfer_semester_experiments": BooleanField( - "Transfer Semester Experiemnts", description=transferDesciption, default=True - ), "transfer_assistants": BooleanField( "Transfer Assistants", - description=transferDesciption + " This option has no effect if Semester Experiments are not transfered.", + description="This option transfers assistants of your active semester to active experiments in the new semester. Make sure that your semester is the last semester before creating a new one (recommended)! Active experiments are transfered anyway. If you don't want an experiment to be transfered, set it to inactive before creating the new semester. Experiments which are switched to active before creating the new semester will be created in the new semester without assistants. It is important to check the assistants of all experiments after creating a new semester.", default=True, ), } @@ -163,14 +161,19 @@ class SemesterView(SecureModelView): if form.transfer_parts.data: model.transferPartsFrom(oldSemester) - if form.transfer_semester_experiments.data: - for semesterExperiment in oldSemester.semester_experiments: - newSemesterExperiment = SemesterExperiment( - experiment=semesterExperiment.experiment, semester=userActiveSemester() - ) - if form.transfer_assistants.data: - newSemesterExperiment.assistants = semesterExperiment.assistants - self.session.add(newSemesterExperiment) + oldSemesterExperiments = [ + semesterExperiment.experiment for semesterExperiment in oldSemester.semester_experiments + ] + + for experiment in Experiment.query.filter(Experiment.active == True): + newSemesterExperiment = SemesterExperiment(experiment=experiment, semester=model) + + if form.transfer_assistants.data: + for oldSemesterExperiment in oldSemester.semester_experiments: + if oldSemesterExperiment.experiment == experiment: + newSemesterExperiment.assistants = oldSemesterExperiment.assistants + + self.session.add(newSemesterExperiment) self.session.commit() except Exception as ex: @@ -348,8 +351,9 @@ class GroupView(SecureModelView): class ExperimentView(SecureModelView): can_view_details = True - column_filters = ["deprecated"] - column_list = ["number", "name", "deprecated"] + column_filters = ["active"] + column_list = ["number", "name", "active"] + column_editable_list = ["active"] class SemesterExperimentView(SecureModelView): diff --git a/advlabdb/models.py b/advlabdb/models.py index 6aeca8c..6b456ab 100644 --- a/advlabdb/models.py +++ b/advlabdb/models.py @@ -107,7 +107,7 @@ class Experiment(db.Model): building = db.Column(db.String(100), nullable=False) responsibility = db.Column(db.String(200), nullable=True) duration_in_days = db.Column(db.Integer, nullable=False) - deprecated = db.Column(db.Boolean, nullable=False, default=False) # To not be deleted! + active = db.Column(db.Boolean, nullable=False, default=True) oral_weighting = db.Column(db.Float, nullable=False) protocol_weighting = db.Column(db.Float, nullable=False) final_weighting = db.Column(db.Float, nullable=False)