mirror of
https://codeberg.org/Mo8it/AdvLabDB.git
synced 2025-03-13 19:38:10 +00:00
Add customUpdateModel
This commit is contained in:
parent
6c268c3bb5
commit
a3c63e3c0f
3 changed files with 83 additions and 45 deletions
|
@ -196,46 +196,33 @@ class UserView(SecureAdminModelView):
|
|||
"active",
|
||||
]
|
||||
|
||||
def create_model(self, form):
|
||||
try:
|
||||
password = randomPassword()
|
||||
hashedPassword = hash_password(password)
|
||||
_skip_session_addition_on_model_creation = True
|
||||
|
||||
email = form.email.data.lower()
|
||||
def customCreateModel(self, form):
|
||||
password = randomPassword()
|
||||
hashedPassword = hash_password(password)
|
||||
|
||||
roles = [role.name for role in form.roles.data]
|
||||
email = form.email.data.lower()
|
||||
|
||||
model = user_datastore.create_user(
|
||||
email=email,
|
||||
password=hashedPassword,
|
||||
roles=roles,
|
||||
first_name=form.first_name.data,
|
||||
last_name=form.last_name.data,
|
||||
phone_number=form.phone_number.data,
|
||||
mobile_phone_number=form.mobile_phone_number.data,
|
||||
building=form.building.data,
|
||||
room=form.room.data,
|
||||
active=form.active.data,
|
||||
active_semester=form.active_semester.data,
|
||||
)
|
||||
roles = [role.name for role in form.roles.data]
|
||||
|
||||
self.on_model_change(form, model, True)
|
||||
self.session.commit()
|
||||
except Exception as ex:
|
||||
if not self.handle_view_exception(ex):
|
||||
flash(str(ex), "error")
|
||||
model = user_datastore.create_user(
|
||||
email=email,
|
||||
password=hashedPassword,
|
||||
roles=roles,
|
||||
first_name=form.first_name.data,
|
||||
last_name=form.last_name.data,
|
||||
phone_number=form.phone_number.data,
|
||||
mobile_phone_number=form.mobile_phone_number.data,
|
||||
building=form.building.data,
|
||||
room=form.room.data,
|
||||
active=form.active.data,
|
||||
active_semester=form.active_semester.data,
|
||||
)
|
||||
|
||||
self.session.rollback()
|
||||
else:
|
||||
flash(
|
||||
f"{email} registered with roles: {', '.join([role.name for role in model.roles])}.",
|
||||
category="success",
|
||||
)
|
||||
flashRandomPassword(password)
|
||||
|
||||
flashRandomPassword(password)
|
||||
|
||||
self.after_model_change(form, model, True)
|
||||
return model
|
||||
return model
|
||||
|
||||
def on_model_delete(self, model):
|
||||
if model == current_user:
|
||||
|
@ -268,6 +255,13 @@ class UserView(SecureAdminModelView):
|
|||
admin = Admin(user=model)
|
||||
self.session.add(admin)
|
||||
|
||||
def after_model_change(self, form, model, is_created):
|
||||
if is_created:
|
||||
flash(
|
||||
f"{model.email} registered with roles: {', '.join([role.name for role in model.roles])}.",
|
||||
category="success",
|
||||
)
|
||||
|
||||
|
||||
class RoleView(SecureAdminModelView):
|
||||
can_export = False
|
||||
|
@ -1183,10 +1177,21 @@ class AppointmentView(SecureAdminModelView):
|
|||
assistant=form.assistant.data,
|
||||
)
|
||||
|
||||
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)
|
||||
def customUpdateModel(self, form, model):
|
||||
if form.date is None:
|
||||
# For editable
|
||||
model.special = form.special.data
|
||||
elif form.special is None:
|
||||
# For editable
|
||||
model.date = form.date.data
|
||||
else:
|
||||
# Not editable, full form
|
||||
model.custom_update(
|
||||
date=form.date.data,
|
||||
special=form.special.data,
|
||||
group_experiment=form.group_experiment.data,
|
||||
assistant=form.assistant.data,
|
||||
)
|
||||
|
||||
|
||||
class ExperimentMarkView(SecureAdminModelView):
|
||||
|
|
|
@ -96,6 +96,10 @@ class CustomModelView(ModelView):
|
|||
|
||||
refreshFiltersCache = False
|
||||
|
||||
# Used in the UserView because of create_user
|
||||
# Should not be touched in other views
|
||||
_skip_session_addition_on_model_creation = False
|
||||
|
||||
@expose("/")
|
||||
def index_view(self):
|
||||
if self.refreshFiltersCache:
|
||||
|
@ -124,14 +128,18 @@ class CustomModelView(ModelView):
|
|||
|
||||
return super().handle_view_exception(exc)
|
||||
|
||||
def create_model(self, form):
|
||||
if not hasattr(self, "customCreateModel"):
|
||||
return super().create_model(form)
|
||||
def customCreateModel(self, form):
|
||||
model = self.build_new_instance()
|
||||
form.populate_obj(model)
|
||||
return model
|
||||
|
||||
def create_model(self, form):
|
||||
try:
|
||||
model = self.customCreateModel(form)
|
||||
|
||||
self.session.add(model)
|
||||
if not self._skip_session_addition_on_model_creation:
|
||||
self.session.add(model)
|
||||
|
||||
self.on_model_change(form, model, True)
|
||||
self.session.commit()
|
||||
except Exception as ex:
|
||||
|
@ -141,9 +149,27 @@ class CustomModelView(ModelView):
|
|||
self.session.rollback()
|
||||
else:
|
||||
self.after_model_change(form, model, True)
|
||||
|
||||
return model
|
||||
|
||||
def customUpdateModel(self, form, model):
|
||||
form.populate_obj(model)
|
||||
|
||||
def update_model(self, form, model):
|
||||
try:
|
||||
self.customUpdateModel(form, model)
|
||||
|
||||
self.on_model_change(form, model, False)
|
||||
self.session.commit()
|
||||
except Exception as ex:
|
||||
if not self.handle_view_exception(ex):
|
||||
flash(str(ex), "error")
|
||||
|
||||
self.session.rollback()
|
||||
return False
|
||||
else:
|
||||
self.after_model_change(form, model, False)
|
||||
return True
|
||||
|
||||
def create_form(self, obj=None):
|
||||
if hasattr(self, "CreateForm"):
|
||||
formClass = self.CreateForm
|
||||
|
|
|
@ -384,12 +384,12 @@ class Appointment(db.Model):
|
|||
semesterExperiment = groupExperiment.semester_experiment
|
||||
semesterExperimentAssistants = semesterExperiment.assistants
|
||||
|
||||
if not semesterExperimentAssistants:
|
||||
if semesterExperimentAssistants is None:
|
||||
raise DataBaseException(f"{semesterExperiment} does not have assistants yet!")
|
||||
|
||||
if assistant is not None:
|
||||
if assistant not in semesterExperimentAssistants:
|
||||
raise DataBaseException(f"{assistant} not responsible for {semesterExperiment}!")
|
||||
raise DataBaseException(f"{assistant} is not responsible for {semesterExperiment}!")
|
||||
else:
|
||||
if len(semesterExperimentAssistants) == 1:
|
||||
assistant = semesterExperimentAssistants[0]
|
||||
|
@ -410,6 +410,13 @@ class Appointment(db.Model):
|
|||
assistant=assistant,
|
||||
)
|
||||
|
||||
def custom_update(self, date, special, group_experiment, assistant=None):
|
||||
self.assistant = Appointment.checkAndGetAssistant(group_experiment, assistant)
|
||||
|
||||
self.date = date
|
||||
self.special = special
|
||||
self.group_experiment = group_experiment
|
||||
|
||||
def repr(self):
|
||||
return f"{self.date} {self.group_experiment.repr()}"
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue