diff --git a/advlabdb/adminModelViews.py b/advlabdb/adminModelViews.py index 723dd4a..e9d9808 100644 --- a/advlabdb/adminModelViews.py +++ b/advlabdb/adminModelViews.py @@ -8,7 +8,7 @@ from flask_security import admin_change_password, current_user, hash_password from sqlalchemy import func, or_ from wtforms import BooleanField, Form, RadioField, SelectField, TextField from wtforms.fields.html5 import DateField -from wtforms.validators import URL, DataRequired, Email, Optional +from wtforms.validators import URL, DataRequired, Email, Optional, NumberRange from advlabdb import adminSpace, app, db, user_datastore from advlabdb.configUtils import getConfig @@ -559,6 +559,7 @@ class AppointmentView(SecureAdminModelView): "group_experiment.semester_experiment.experiment", "assistant", ] + column_editable_list = ["date", "special"] def queryFilter(self): return Appointment.group_experiment.has( @@ -572,7 +573,12 @@ class AppointmentView(SecureAdminModelView): def update_model(self, form, model): try: - model.customUpdate(form.date.data, form.special.data, form.assistant.data, form.group_experiment.data) + if not form.date: + model.customUpdateSpecial(form.special.data) + elif not form.special: + model.customUpdateDate(form.date.data) + else: + 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() @@ -580,7 +586,6 @@ class AppointmentView(SecureAdminModelView): flash(str(ex), "error") self.session.rollback() - return False else: self.after_model_change(form, model, False) @@ -622,25 +627,33 @@ class ExperimentMarkView(SecureAdminModelView): form = CreateForm + column_editable_list = ["oral_mark", "protocol_mark"] + form_args = { + "oral_mark": {"validators": [NumberRange(0, 15)]}, + "protocol_mark": {"validators": [NumberRange(0, 15)]}, + } + column_filters = [ StudentIdFilter(PartStudent.id, "Student / ID"), "part_student.student", + "group_experiment.group", "group_experiment.semester_experiment.semester", "group_experiment.semester_experiment.experiment", "assistant", "edited_by_admin", ] + column_default_sort = [("oral_mark", False), ("protocol_mark", False)] - def queryFilter(self=None): + def queryFilter(self): return ExperimentMark.group_experiment.has( GroupExperiment.semester_experiment.has(SemesterExperiment.semester == userActiveSemester()) ) def checkForm(form): - if form.oral_mark.data == -1: + if form.oral_mark and form.oral_mark.data == -1: form.oral_mark.data = None - if form.protocol_mark.data == -1: + if form.protocol_mark and form.protocol_mark.data == -1: form.protocol_mark.data = None return form