mirror of
https://codeberg.org/Mo8it/AdvLabDB.git
synced 2024-12-20 23:41:20 +00:00
Added CheckConstraints
This commit is contained in:
parent
c9143410d4
commit
72b05beefc
3 changed files with 28 additions and 17 deletions
File diff suppressed because one or more lines are too long
|
@ -4,7 +4,7 @@ from flask_admin.menu import MenuLink
|
||||||
from flask_admin.model.template import EndpointLinkRowAction
|
from flask_admin.model.template import EndpointLinkRowAction
|
||||||
from flask_security import current_user, hash_password
|
from flask_security import current_user, hash_password
|
||||||
from sqlalchemy import func
|
from sqlalchemy import func
|
||||||
from wtforms import Form, BooleanField, SelectField, TextField, RadioField, FloatField
|
from wtforms import Form, BooleanField, SelectField, TextField, RadioField, IntegerField
|
||||||
from wtforms.validators import DataRequired, Email, Optional
|
from wtforms.validators import DataRequired, Email, Optional
|
||||||
from flask_admin.contrib.sqla.fields import QuerySelectMultipleField, QuerySelectField
|
from flask_admin.contrib.sqla.fields import QuerySelectMultipleField, QuerySelectField
|
||||||
from flask_admin.helpers import get_form_data
|
from flask_admin.helpers import get_form_data
|
||||||
|
@ -37,7 +37,7 @@ from advlabdb.utils import (
|
||||||
|
|
||||||
|
|
||||||
class UserView(SecureModelView):
|
class UserView(SecureModelView):
|
||||||
column_list = ["email", "active", "roles", "assistant"]
|
column_list = ["email", "active", "roles", "assistant", "active_semester"]
|
||||||
column_searchable_list = ["email"]
|
column_searchable_list = ["email"]
|
||||||
column_filters = ["active"]
|
column_filters = ["active"]
|
||||||
form_columns = ["email", "active", "roles"]
|
form_columns = ["email", "active", "roles"]
|
||||||
|
@ -68,7 +68,7 @@ class UserView(SecureModelView):
|
||||||
self.on_model_change(form, model, True)
|
self.on_model_change(form, model, True)
|
||||||
self.session.commit()
|
self.session.commit()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
flash(ex, "error")
|
flash(str(ex), "error")
|
||||||
|
|
||||||
self.session.rollback()
|
self.session.rollback()
|
||||||
else:
|
else:
|
||||||
|
@ -106,9 +106,10 @@ class RoleView(SecureModelView):
|
||||||
class SemesterView(SecureModelView):
|
class SemesterView(SecureModelView):
|
||||||
can_edit = False
|
can_edit = False
|
||||||
can_delete = False
|
can_delete = False
|
||||||
column_display_actions = False
|
can_view_details = True
|
||||||
|
|
||||||
column_list = ["label", "parts"]
|
column_list = ["label", "parts"]
|
||||||
|
column_details_list = column_list + ["active_users"]
|
||||||
form_columns = ["semester_label", "year", "transfer_parts", "transfer_assistants"]
|
form_columns = ["semester_label", "year", "transfer_parts", "transfer_assistants"]
|
||||||
|
|
||||||
semesterLabels = ["WS", "SS"]
|
semesterLabels = ["WS", "SS"]
|
||||||
|
@ -137,7 +138,7 @@ class SemesterView(SecureModelView):
|
||||||
self.on_model_change(form, model, True)
|
self.on_model_change(form, model, True)
|
||||||
self.session.commit()
|
self.session.commit()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
flash(ex, "error")
|
flash(str(ex), "error")
|
||||||
|
|
||||||
self.session.rollback()
|
self.session.rollback()
|
||||||
else:
|
else:
|
||||||
|
@ -177,7 +178,7 @@ class SemesterView(SecureModelView):
|
||||||
|
|
||||||
self.session.commit()
|
self.session.commit()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
flash(ex, "error")
|
flash(str(ex), "error")
|
||||||
|
|
||||||
self.session.rollback()
|
self.session.rollback()
|
||||||
|
|
||||||
|
@ -248,7 +249,7 @@ class PartStudentView(SecureModelView):
|
||||||
class EditForm(CreateForm):
|
class EditForm(CreateForm):
|
||||||
student = None
|
student = None
|
||||||
part = None
|
part = None
|
||||||
final_part_mark = FloatField("Final Part Mark", validators=[Optional()])
|
final_part_mark = IntegerField("Final Part Mark", validators=[Optional()])
|
||||||
|
|
||||||
form = EditForm
|
form = EditForm
|
||||||
|
|
||||||
|
@ -316,7 +317,7 @@ class GroupView(SecureModelView):
|
||||||
self.on_model_change(form, model, True)
|
self.on_model_change(form, model, True)
|
||||||
self.session.commit()
|
self.session.commit()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
flash(ex, "error")
|
flash(str(ex), "error")
|
||||||
|
|
||||||
self.session.rollback()
|
self.session.rollback()
|
||||||
else:
|
else:
|
||||||
|
@ -481,7 +482,7 @@ class GroupExperimentView(SecureModelView):
|
||||||
self.on_model_change(form, model, True)
|
self.on_model_change(form, model, True)
|
||||||
self.session.commit()
|
self.session.commit()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
flash(ex, "error")
|
flash(str(ex), "error")
|
||||||
|
|
||||||
self.session.rollback()
|
self.session.rollback()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -17,7 +17,7 @@ from advlabdb.configUtils import getConfig
|
||||||
|
|
||||||
class Student(db.Model):
|
class Student(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
student_number = db.Column(db.Integer, nullable=False, unique=True)
|
student_number = db.Column(db.Integer, db.CheckConstraint("student_number > -1"), nullable=False, unique=True)
|
||||||
first_name = db.Column(db.String(100), nullable=False)
|
first_name = db.Column(db.String(100), nullable=False)
|
||||||
last_name = db.Column(db.String(100), nullable=False)
|
last_name = db.Column(db.String(100), nullable=False)
|
||||||
uni_email = db.Column(db.String(200), nullable=False, unique=True)
|
uni_email = db.Column(db.String(200), nullable=False, unique=True)
|
||||||
|
@ -37,7 +37,12 @@ class Student(db.Model):
|
||||||
class PartStudent(db.Model):
|
class PartStudent(db.Model):
|
||||||
# A student doing a specific part
|
# A student doing a specific part
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
final_part_mark = db.Column(db.Integer, nullable=True)
|
final_part_mark = db.Column(
|
||||||
|
db.Integer,
|
||||||
|
db.CheckConstraint("final_part_mark > -1"),
|
||||||
|
db.CheckConstraint("final_part_mark < 16"),
|
||||||
|
nullable=True,
|
||||||
|
)
|
||||||
student_id = db.Column(db.Integer, db.ForeignKey("student.id"), nullable=False)
|
student_id = db.Column(db.Integer, db.ForeignKey("student.id"), nullable=False)
|
||||||
part_id = db.Column(db.Integer, db.ForeignKey("part.id"), nullable=False)
|
part_id = db.Column(db.Integer, db.ForeignKey("part.id"), nullable=False)
|
||||||
group_id = db.Column(db.Integer, db.ForeignKey("group.id"), nullable=True)
|
group_id = db.Column(db.Integer, db.ForeignKey("group.id"), nullable=True)
|
||||||
|
@ -57,7 +62,7 @@ class PartStudent(db.Model):
|
||||||
|
|
||||||
class Group(db.Model):
|
class Group(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
number = db.Column(db.Integer, nullable=False)
|
number = db.Column(db.Integer, db.CheckConstraint("number > 0"), nullable=False)
|
||||||
part_id = db.Column(db.Integer, db.ForeignKey("part.id"), nullable=False)
|
part_id = db.Column(db.Integer, db.ForeignKey("part.id"), nullable=False)
|
||||||
part_students = db.relationship("PartStudent", backref="group", lazy=True)
|
part_students = db.relationship("PartStudent", backref="group", lazy=True)
|
||||||
group_experiments = db.relationship("GroupExperiment", backref="group", lazy=True)
|
group_experiments = db.relationship("GroupExperiment", backref="group", lazy=True)
|
||||||
|
@ -109,7 +114,7 @@ class Experiment(db.Model):
|
||||||
room = db.Column(db.String(100), nullable=False)
|
room = db.Column(db.String(100), nullable=False)
|
||||||
building = db.Column(db.String(100), nullable=False)
|
building = db.Column(db.String(100), nullable=False)
|
||||||
responsibility = db.Column(db.String(200), nullable=True)
|
responsibility = db.Column(db.String(200), nullable=True)
|
||||||
duration_in_days = db.Column(db.Integer, nullable=False)
|
duration_in_days = db.Column(db.Integer, db.CheckConstraint("duration_in_days > -1"), nullable=False)
|
||||||
active = db.Column(db.Boolean, nullable=False, default=True)
|
active = db.Column(db.Boolean, nullable=False, default=True)
|
||||||
oral_weighting = db.Column(db.Float, nullable=False)
|
oral_weighting = db.Column(db.Float, nullable=False)
|
||||||
protocol_weighting = db.Column(db.Float, nullable=False)
|
protocol_weighting = db.Column(db.Float, nullable=False)
|
||||||
|
@ -204,6 +209,7 @@ class Semester(db.Model):
|
||||||
label = db.Column(db.String(100), nullable=False, unique=True) # WS2122 for example
|
label = db.Column(db.String(100), nullable=False, unique=True) # WS2122 for example
|
||||||
parts = db.relationship("Part", backref="semester", lazy=True)
|
parts = db.relationship("Part", backref="semester", lazy=True)
|
||||||
semester_experiments = db.relationship("SemesterExperiment", backref="semester", lazy=True)
|
semester_experiments = db.relationship("SemesterExperiment", backref="semester", lazy=True)
|
||||||
|
active_users = db.relationship("User", backref="active_semester", lazy=True)
|
||||||
|
|
||||||
def repr(self):
|
def repr(self):
|
||||||
return f"{self.label}"
|
return f"{self.label}"
|
||||||
|
@ -224,8 +230,12 @@ class Semester(db.Model):
|
||||||
class ExperimentMark(db.Model):
|
class ExperimentMark(db.Model):
|
||||||
# A mark for a student after a specific experiment
|
# A mark for a student after a specific experiment
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
oral_mark = db.Column(db.Integer, nullable=True)
|
oral_mark = db.Column(
|
||||||
protocol_mark = db.Column(db.Integer, nullable=True)
|
db.Integer, db.CheckConstraint("oral_mark > -1"), db.CheckConstraint("oral_mark < 16"), nullable=True
|
||||||
|
)
|
||||||
|
protocol_mark = db.Column(
|
||||||
|
db.Integer, db.CheckConstraint("protocol_mark > -1"), db.CheckConstraint("protocol_mark < 16"), nullable=True
|
||||||
|
)
|
||||||
part_student_id = db.Column(db.Integer, db.ForeignKey("part_student.id"), nullable=False)
|
part_student_id = db.Column(db.Integer, db.ForeignKey("part_student.id"), nullable=False)
|
||||||
group_experiment_id = db.Column(db.Integer, db.ForeignKey("group_experiment.id"), nullable=False)
|
group_experiment_id = db.Column(db.Integer, db.ForeignKey("group_experiment.id"), nullable=False)
|
||||||
assistant_id = db.Column(
|
assistant_id = db.Column(
|
||||||
|
@ -243,7 +253,7 @@ class ExperimentMark(db.Model):
|
||||||
|
|
||||||
class User(db.Model, FsUserMixin):
|
class User(db.Model, FsUserMixin):
|
||||||
assistant = db.relationship("Assistant", backref="user", lazy=True, uselist=False)
|
assistant = db.relationship("Assistant", backref="user", lazy=True, uselist=False)
|
||||||
active_semester_id = db.Column(db.Integer, nullable=True)
|
active_semester_id = db.Column(db.Integer, db.ForeignKey("semester.id"), nullable=True)
|
||||||
|
|
||||||
def repr(self):
|
def repr(self):
|
||||||
return f"{self.email}"
|
return f"{self.email}"
|
||||||
|
|
Loading…
Reference in a new issue