mirror of
https://codeberg.org/Mo8it/AdvLabDB.git
synced 2024-11-08 21:21:06 +00:00
Remove Appointment.customInit
This commit is contained in:
parent
2e6151d05f
commit
9ff2405947
4 changed files with 36 additions and 63 deletions
|
@ -224,7 +224,8 @@ class UserView(SecureAdminModelView):
|
|||
self.on_model_change(form, model, True)
|
||||
self.session.commit()
|
||||
except Exception as ex:
|
||||
flash(str(ex), "error")
|
||||
if not self.handle_view_exception(ex):
|
||||
flash(str(ex), "error")
|
||||
|
||||
self.session.rollback()
|
||||
else:
|
||||
|
@ -1059,15 +1060,12 @@ class GroupExperimentView(SecureAdminModelView):
|
|||
|
||||
def on_model_change(self, form, model, is_created):
|
||||
if is_created:
|
||||
for date, special, assistant in zip(
|
||||
(form.appointment1_date.data, form.appointment2_date.data),
|
||||
(form.appointment1_special.data, form.appointment2_special.data),
|
||||
(form.appointment1_assistant.data, form.appointment2_assistant.data),
|
||||
for date, special, assistant in (
|
||||
(form.appointment1_date.data, form.appointment1_special.data, form.appointment1_assistant.data),
|
||||
(form.appointment2_date.data, form.appointment2_special.data, form.appointment2_assistant.data),
|
||||
):
|
||||
if date:
|
||||
appointment = Appointment.customInit(
|
||||
date=date, special=special, group_experiment=model, assistant=assistant
|
||||
)
|
||||
if date is not None:
|
||||
appointment = Appointment(date=date, special=special, group_experiment=model, assistant=assistant)
|
||||
|
||||
self.session.add(appointment)
|
||||
|
||||
|
@ -1180,30 +1178,17 @@ class AppointmentView(SecureAdminModelView):
|
|||
)
|
||||
|
||||
def customCreateModel(self, form):
|
||||
return Appointment.customInit(
|
||||
return Appointment(
|
||||
date=form.date.data,
|
||||
special=form.special.data,
|
||||
group_experiment=form.group_experiment.data,
|
||||
assistant=form.assistant.data,
|
||||
)
|
||||
|
||||
def update_model(self, form, model):
|
||||
if None in (form.date, form.special): # For editables
|
||||
return super().update_model(form, model)
|
||||
|
||||
try:
|
||||
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()
|
||||
except Exception as ex:
|
||||
flash(str(ex), "error")
|
||||
|
||||
self.session.rollback()
|
||||
return False
|
||||
else:
|
||||
self.after_model_change(form, model, False)
|
||||
return True
|
||||
def on_model_change(self, form, model, is_created):
|
||||
if None not in (form.date, form.special): # No need to check or adjust assistant for editables
|
||||
if not is_created:
|
||||
model.assistant = Appointment.checkAndGetAssistant(model.group_experiment, model.assistant)
|
||||
|
||||
|
||||
class ExperimentMarkView(SecureAdminModelView):
|
||||
|
@ -1362,16 +1347,16 @@ class ExperimentMarkView(SecureAdminModelView):
|
|||
return ExperimentMark(part_student=form.part_student.data, group_experiment=form.group_experiment.data)
|
||||
|
||||
def update_model(self, form, model):
|
||||
if (form.oral_mark and form.oral_mark.data != model.oral_mark) or (
|
||||
form.protocol_mark and form.protocol_mark.data != model.protocol_mark
|
||||
if (form.oral_mark is not None and form.oral_mark.data != model.oral_mark) or (
|
||||
form.protocol_mark is not None and form.protocol_mark.data != model.protocol_mark
|
||||
):
|
||||
model.admin = current_user.admin
|
||||
|
||||
ret = super().update_model(form, model)
|
||||
updateSuccessful = super().update_model(form, model)
|
||||
|
||||
model.part_student.checkThenSetFinalPartMark()
|
||||
|
||||
return ret
|
||||
return updateSuccessful
|
||||
|
||||
# Nothing changed
|
||||
return True
|
||||
|
@ -1421,8 +1406,9 @@ class ImportView(SecureAdminBaseView):
|
|||
|
||||
try:
|
||||
importFromFile(filePath)
|
||||
except Exception as exc:
|
||||
flash(str(exc), "error")
|
||||
except Exception as ex:
|
||||
if not self.handle_view_exception(ex):
|
||||
flash(str(ex), "error")
|
||||
|
||||
return redirect(url_for("index"))
|
||||
|
||||
|
|
|
@ -257,12 +257,12 @@ def importFromFile(filePath):
|
|||
assistantEmail = appointments["assistant_email"][i]
|
||||
assistant = Assistant.query.filter(Assistant.user.has(User.email == assistantEmail)).first()
|
||||
|
||||
if not assistant:
|
||||
if assistant is None:
|
||||
raise DataBaseImportException(
|
||||
f"Assistant with email {email} does not exist in the database! Please make sure that you create assistants in the web interface."
|
||||
)
|
||||
|
||||
dbAppointment = Appointment.customInit(
|
||||
dbAppointment = Appointment(
|
||||
date=datetime.strptime(date, "%d.%m.%Y").date(),
|
||||
special=bool(int(appointments["special"][i])),
|
||||
group_experiment=dbGroupExperiments[int(appointments["group_experiment_id"][i])],
|
||||
|
|
|
@ -84,12 +84,6 @@ class PartStudent(db.Model):
|
|||
|
||||
super().__init__(student=student, part=part, group=group)
|
||||
|
||||
def customUpdate(self, group, final_part_mark):
|
||||
Part.check(group, self.part)
|
||||
|
||||
self.group = group
|
||||
self.final_part_mark = final_part_mark
|
||||
|
||||
def checkThenSetFinalPartMark(self):
|
||||
finalWeightingSum = 0
|
||||
finalMark = 0
|
||||
|
@ -189,11 +183,6 @@ class Group(db.Model):
|
|||
semester=semester,
|
||||
)
|
||||
|
||||
def customUpdate(self, part_students):
|
||||
Group.check(part_students, self.program)
|
||||
|
||||
self.part_students = part_students
|
||||
|
||||
def repr(self):
|
||||
return f"{self.number} {self.program.repr()} {self.semester.repr()}"
|
||||
|
||||
|
@ -213,7 +202,7 @@ class GroupExperiment(db.Model):
|
|||
|
||||
__table_args__ = (db.UniqueConstraint(semester_experiment_id, group_id),)
|
||||
|
||||
def __init__(self, semester_experiment, group):
|
||||
def check(semester_experiment, group):
|
||||
for partStudent in group.part_students:
|
||||
student = partStudent.student
|
||||
for partStudent in student.part_students:
|
||||
|
@ -223,6 +212,9 @@ class GroupExperiment(db.Model):
|
|||
f"{student} has already done {semester_experiment.experiment} in {partStudent.part} and had {experimentMark}!"
|
||||
)
|
||||
|
||||
def __init__(self, semester_experiment, group):
|
||||
GroupExperiment.check(semester_experiment, group)
|
||||
|
||||
super().__init__(semester_experiment=semester_experiment, group=group)
|
||||
|
||||
for partStudent in group.part_students:
|
||||
|
@ -369,14 +361,14 @@ class Appointment(db.Model):
|
|||
group_experiment_id = db.Column(db.Integer, db.ForeignKey("group_experiment.id"), nullable=False)
|
||||
assistant_id = db.Column(db.Integer, db.ForeignKey("assistant.id"), nullable=False)
|
||||
|
||||
def checkAndGetAssistant(assistant, groupExperiment):
|
||||
def checkAndGetAssistant(groupExperiment, assistant=None):
|
||||
semesterExperiment = groupExperiment.semester_experiment
|
||||
semesterExperimentAssistants = semesterExperiment.assistants
|
||||
|
||||
if not semesterExperimentAssistants:
|
||||
raise DataBaseException(f"{semesterExperiment} does not have assistants yet!")
|
||||
|
||||
if assistant:
|
||||
if assistant is not None:
|
||||
if assistant not in semesterExperimentAssistants:
|
||||
raise DataBaseException(f"{assistant} not responsible for {semesterExperiment}!")
|
||||
else:
|
||||
|
@ -389,24 +381,16 @@ class Appointment(db.Model):
|
|||
|
||||
return assistant
|
||||
|
||||
def customInit(date, special, group_experiment, assistant):
|
||||
assistant = Appointment.checkAndGetAssistant(assistant, group_experiment)
|
||||
def __init__(self, date, special, group_experiment, assistant=None):
|
||||
assistant = Appointment.checkAndGetAssistant(group_experiment, assistant)
|
||||
|
||||
return Appointment(
|
||||
super().__init__(
|
||||
date=date,
|
||||
special=special,
|
||||
group_experiment=group_experiment,
|
||||
assistant=assistant,
|
||||
)
|
||||
|
||||
def customUpdate(self, date, special, assistant, group_experiment):
|
||||
assistant = Appointment.checkAndGetAssistant(assistant, group_experiment)
|
||||
|
||||
self.date = date
|
||||
self.special = special
|
||||
self.assistant = assistant
|
||||
self.group_experiment = group_experiment
|
||||
|
||||
def repr(self):
|
||||
return f"{self.date} {self.group_experiment.repr()}"
|
||||
|
||||
|
@ -528,13 +512,16 @@ class ExperimentMark(db.Model):
|
|||
|
||||
__table_args__ = (db.UniqueConstraint(part_student_id, group_experiment_id),)
|
||||
|
||||
def __init__(self, part_student, group_experiment):
|
||||
def check(part_student, group_experiment):
|
||||
if not part_student.group:
|
||||
raise DataBaseException("The part student does not have a group yet!")
|
||||
else:
|
||||
if group_experiment not in part_student.group.group_experiments:
|
||||
raise DataBaseException("The group of the part student does not have the given group experiment!")
|
||||
|
||||
def __init__(self, part_student, group_experiment):
|
||||
ExperimentMark(part_student, group_experiment)
|
||||
|
||||
super().__init__(part_student=part_student, group_experiment=group_experiment)
|
||||
|
||||
def updateFinalExperimentMark(self):
|
||||
|
|
|
@ -139,8 +139,8 @@ def main():
|
|||
db.session.add(as1)
|
||||
db.session.add(as2)
|
||||
|
||||
ap1 = Appointment.customInit(date=date(2021, 3, 21), special=True, group_experiment=gx1, assistant=as1)
|
||||
ap2 = Appointment.customInit(date=date(2021, 3, 22), special=True, group_experiment=gx2, assistant=as2)
|
||||
ap1 = Appointment(date=date(2021, 3, 21), special=True, group_experiment=gx1, assistant=as1)
|
||||
ap2 = Appointment(date=date(2021, 3, 22), special=True, group_experiment=gx2, assistant=as2)
|
||||
|
||||
db.session.add(ap1)
|
||||
db.session.add(ap2)
|
||||
|
|
Loading…
Reference in a new issue