mirror of
https://codeberg.org/Mo8it/AdvLabDB.git
synced 2024-12-20 23:41:20 +00:00
Done Semester and Part views
This commit is contained in:
parent
f4de3df51d
commit
ff0f5cc48c
3 changed files with 38 additions and 33 deletions
|
@ -1,24 +0,0 @@
|
||||||
from flask_wtf import FlaskForm
|
|
||||||
from wtforms import StringField, PasswordField, SubmitField, BooleanField
|
|
||||||
from wtforms.validators import DataRequired, Email, ValidationError
|
|
||||||
from advlabdb.models import User
|
|
||||||
|
|
||||||
|
|
||||||
class RegistrationForm(FlaskForm):
|
|
||||||
email = StringField("Email",
|
|
||||||
validators=[DataRequired(), Email()])
|
|
||||||
assistant = BooleanField("Assistant", default=True)
|
|
||||||
admin = BooleanField("Admin", default=False)
|
|
||||||
submit = SubmitField("Register")
|
|
||||||
|
|
||||||
def validate_email(form, field):
|
|
||||||
user = User.query.filter_by(email=field.data.lower()).first()
|
|
||||||
if user:
|
|
||||||
raise ValidationError("A user with this email address is already registered!")
|
|
||||||
|
|
||||||
|
|
||||||
class LoginForm(FlaskForm):
|
|
||||||
email = StringField("Email",
|
|
||||||
validators=[DataRequired(), Email()])
|
|
||||||
password = PasswordField("Password", validators=[DataRequired()])
|
|
||||||
submit = SubmitField("Login")
|
|
|
@ -4,7 +4,7 @@ from flask_admin.menu import MenuLink
|
||||||
from flask_security import hash_password
|
from flask_security import hash_password
|
||||||
from wtforms import BooleanField
|
from wtforms import BooleanField
|
||||||
|
|
||||||
from advlabdb import admin, app, user_datastore
|
from advlabdb import admin, app, user_datastore, db
|
||||||
from advlabdb.models import *
|
from advlabdb.models import *
|
||||||
from advlabdb.utils import randomPassword
|
from advlabdb.utils import randomPassword
|
||||||
|
|
||||||
|
@ -25,16 +25,39 @@ class UserModelView(SecureModelView):
|
||||||
if "admin" in roles:
|
if "admin" in roles:
|
||||||
flash("You have registered a new admin!", "danger")
|
flash("You have registered a new admin!", "danger")
|
||||||
|
|
||||||
newUser = user_datastore.create_user(email=email, password=passwordHash, roles=roles)
|
model = user_datastore.create_user(email=email, password=passwordHash, roles=roles)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
flash(f"{email} registered with roles: {', '.join([role.name for role in form.roles.data])}.", category="success")
|
flash(f"{email} registered with roles: {', '.join([role.name for role in form.roles.data])}.", category="success")
|
||||||
flash(f"Random password: {password}", category="warning")
|
flash(f"Random password: {password}", category="warning")
|
||||||
return newUser
|
return model
|
||||||
|
|
||||||
|
|
||||||
class RoleModelView(SecureModelView):
|
class RoleModelView(SecureModelView):
|
||||||
column_exclude_list = ["update_datetime"]
|
column_exclude_list = ["update_datetime"]
|
||||||
|
|
||||||
|
|
||||||
|
class SemesterModelView(SecureModelView):
|
||||||
|
column_list = ["label", "parts"]
|
||||||
|
form_columns = ["label", "create_parts"]
|
||||||
|
|
||||||
|
parts = ["A/1", "A/2", "B/1", "B/2"]
|
||||||
|
|
||||||
|
form_extra_fields = {
|
||||||
|
"create_parts": BooleanField("Create parts:" + ", ".join(parts) + ".", default=True)
|
||||||
|
}
|
||||||
|
|
||||||
|
def after_model_change(self, form, model, is_created):
|
||||||
|
if is_created and form.create_parts.data:
|
||||||
|
for part in self.parts:
|
||||||
|
db.session.add(Part(label=part, semester=model))
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
|
||||||
|
class PartModelView(SecureModelView):
|
||||||
|
can_view_details = True
|
||||||
|
column_details_list = ["label", "semester", "part_experiments", "part_students", "groups"]
|
||||||
|
form_columns = ["label", "semester"]
|
||||||
|
|
||||||
admin.add_view(SecureModelView(Student, db.session))
|
admin.add_view(SecureModelView(Student, db.session))
|
||||||
admin.add_view(SecureModelView(PartStudent, db.session))
|
admin.add_view(SecureModelView(PartStudent, db.session))
|
||||||
admin.add_view(SecureModelView(Group, db.session))
|
admin.add_view(SecureModelView(Group, db.session))
|
||||||
|
@ -43,8 +66,8 @@ admin.add_view(SecureModelView(Experiment, db.session))
|
||||||
admin.add_view(SecureModelView(PartExperiment, db.session))
|
admin.add_view(SecureModelView(PartExperiment, db.session))
|
||||||
admin.add_view(SecureModelView(Assistant, db.session))
|
admin.add_view(SecureModelView(Assistant, db.session))
|
||||||
admin.add_view(SecureModelView(Appointment, db.session))
|
admin.add_view(SecureModelView(Appointment, db.session))
|
||||||
admin.add_view(SecureModelView(Part, db.session))
|
admin.add_view(PartModelView(Part, db.session))
|
||||||
admin.add_view(SecureModelView(Semester, db.session))
|
admin.add_view(SemesterModelView(Semester, db.session))
|
||||||
admin.add_view(SecureModelView(ExperimentMark, db.session))
|
admin.add_view(SecureModelView(ExperimentMark, db.session))
|
||||||
admin.add_view(UserModelView(User, db.session))
|
admin.add_view(UserModelView(User, db.session))
|
||||||
admin.add_view(RoleModelView(Role, db.session))
|
admin.add_view(RoleModelView(Role, db.session))
|
||||||
|
|
|
@ -25,7 +25,7 @@ class Student(db.Model):
|
||||||
part_students = db.relationship("PartStudent", backref="student", lazy=True)
|
part_students = db.relationship("PartStudent", backref="student", lazy=True)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"<{self.first_name} {self.last_name}>"
|
return f"<Student: {self.first_name} {self.last_name}>"
|
||||||
|
|
||||||
|
|
||||||
class PartStudent(db.Model):
|
class PartStudent(db.Model):
|
||||||
|
@ -45,6 +45,9 @@ class Group(db.Model):
|
||||||
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)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f"<Group {self.number} {Part.query.get(self.part_id)}>"
|
||||||
|
|
||||||
|
|
||||||
class GroupExperiment(db.Model):
|
class GroupExperiment(db.Model):
|
||||||
# An experiment specified to a group
|
# An experiment specified to a group
|
||||||
|
@ -71,7 +74,7 @@ class Experiment(db.Model):
|
||||||
part_experiments = db.relationship("PartExperiment", backref="experiment", lazy=True)
|
part_experiments = db.relationship("PartExperiment", backref="experiment", lazy=True)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"<{self.number}>"
|
return f"<Exp {self.number}>"
|
||||||
|
|
||||||
|
|
||||||
# Helper table for the many to many relationship between Assistant and PartExperiment
|
# Helper table for the many to many relationship between Assistant and PartExperiment
|
||||||
|
@ -106,7 +109,7 @@ class Assistant(db.Model):
|
||||||
experiment_marks = db.relationship("ExperimentMark", backref="assistant", lazy=True)
|
experiment_marks = db.relationship("ExperimentMark", backref="assistant", lazy=True)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"<{self.first_name} {self.last_name}>"
|
return f"<Assistant: {self.first_name} {self.last_name}>"
|
||||||
|
|
||||||
|
|
||||||
class Appointment(db.Model):
|
class Appointment(db.Model):
|
||||||
|
@ -125,6 +128,9 @@ class Part(db.Model):
|
||||||
part_students = db.relationship("PartStudent", backref="part", lazy=True)
|
part_students = db.relationship("PartStudent", backref="part", lazy=True)
|
||||||
groups = db.relationship("Group", backref="part", lazy=True)
|
groups = db.relationship("Group", backref="part", lazy=True)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return f"<Part {self.label} {Semester.query.get(self.semester_id).label}>"
|
||||||
|
|
||||||
|
|
||||||
class Semester(db.Model):
|
class Semester(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
|
@ -150,7 +156,7 @@ 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)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"<{self.email}>"
|
return f"<User {self.email}>"
|
||||||
|
|
||||||
|
|
||||||
class Role(db.Model, FsRoleMixin):
|
class Role(db.Model, FsRoleMixin):
|
||||||
|
|
Loading…
Reference in a new issue