From 978dfd340fbd2afb384b08bf1b6fd20449bf10f3 Mon Sep 17 00:00:00 2001 From: Mo8it Date: Tue, 1 Mar 2022 22:23:30 +0100 Subject: [PATCH] Add custom filters --- DB.drawio | 2 +- advlabdb/adminModelViews.py | 52 ++++++++++++++++++++++++++++++++++--- advlabdb/models.py | 2 +- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/DB.drawio b/DB.drawio index 5e91ecb..d3b87ca 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/adminModelViews.py b/advlabdb/adminModelViews.py index eae51b1..e8c23c9 100644 --- a/advlabdb/adminModelViews.py +++ b/advlabdb/adminModelViews.py @@ -44,6 +44,7 @@ from advlabdb.models import ( SemesterExperiment, Student, User, + Admin, ) from advlabdb.utils import ( flashRandomPassword, @@ -494,7 +495,6 @@ class GroupView(SecureAdminModelView): ] column_filters = [ "number", - "semester", "program", ] @@ -682,10 +682,44 @@ class AssistantView(SecureAdminModelView): } +# TODO: Add AdminView + + assistantBlankText = "Auto assign if experiment has only one assistant" class GroupExperimentView(SecureAdminModelView): + @expose("/") + def index_view(self): + # To update filter options + self._refresh_filters_cache() + return super().index_view() + + class ExperimentFilter(FilterEqual): + def get_options(self, view): + activeExperiments = Experiment.query.filter(Experiment.active == True).all() + return ( + ( + f"{activeExperiment.number},{activeExperiment.program.id}", + f"{activeExperiment.number} {activeExperiment.program.repr()}", + ) + for activeExperiment in activeExperiments + ) + + def apply(self, query, value, alias=None): + values = value.split(",") + experimentNumber = int(values[0]) + programId = int(values[1]) + + return query.filter( + self.column.semester_experiment.has( + SemesterExperiment.experiment.has(Experiment.program_id == programId) + ), + self.column.semester_experiment.has( + SemesterExperiment.experiment.has(Experiment.number == experimentNumber) + ), + ) + class CreateForm(Form): group = QuerySelectField( "Group", @@ -738,7 +772,7 @@ class GroupExperimentView(SecureAdminModelView): ] column_filters = [ "group", - "semester_experiment.experiment", + ExperimentFilter(GroupExperiment, "Experiment"), "appointments", ] @@ -857,6 +891,17 @@ class ExperimentMarkView(SecureAdminModelView): assistants = Assistant.query.filter(Assistant.user.has(User.active == True)).all() return ((assistant.id, assistant.repr()) for assistant in assistants) + def apply(self, query, value, alias=None): + return query.filter(self.column == int(value)) + + class AdminFilter(FilterEqual): + def get_options(self, view): + admins = Admin.query.filter(Admin.user.has(User.active == True)).all() + return ((admin.id, admin.repr()) for admin in admins) + + def apply(self, query, value, alias=None): + return query.filter(self.column == int(value)) + class CreateForm(Form): part_student = QuerySelectField( "Part Student", @@ -897,13 +942,14 @@ class ExperimentMarkView(SecureAdminModelView): column_filters = [ StudentFilter(PartStudent.id, "Student / ID"), + AssistantFilter(ExperimentMark.assistant_id, "Assistant"), + AdminFilter(ExperimentMark.admin_id, "Admin"), "part_student.part.program", "part_student.part", "part_student.student", "group_experiment.group", "group_experiment.semester_experiment.semester", "group_experiment.semester_experiment.experiment", - AssistantFilter(Assistant.id, "Assistant"), "oral_mark", "protocol_mark", "final_experiment_mark", diff --git a/advlabdb/models.py b/advlabdb/models.py index bfa7cae..2984895 100644 --- a/advlabdb/models.py +++ b/advlabdb/models.py @@ -562,7 +562,7 @@ class Role(db.Model, FsRoleMixin): class Program(db.Model): id = db.Column(db.Integer, primary_key=True) - label = db.Column(db.String(25), nullable=False) + label = db.Column(db.String(25), nullable=False, unique=True) parts = db.relationship("Part", backref="program", lazy=True) experiments = db.relationship("Experiment", backref="program", lazy=True)