mirror of
https://codeberg.org/Mo8it/AdvLabDB.git
synced 2024-12-20 23:41:20 +00:00
Add step to weighting fields
This commit is contained in:
parent
c43382ac7a
commit
34ee938636
2 changed files with 17 additions and 8 deletions
|
@ -16,7 +16,6 @@ from wtforms import Form
|
|||
from wtforms.fields import (
|
||||
BooleanField,
|
||||
DateField,
|
||||
DecimalField,
|
||||
IntegerField,
|
||||
RadioField,
|
||||
SelectField,
|
||||
|
@ -27,6 +26,7 @@ from wtforms.validators import URL, DataRequired, Email, NumberRange, Optional
|
|||
from advlabdb import adminSpace, app, assistantSpace, db, user_datastore
|
||||
from advlabdb.configUtils import getConfig
|
||||
from advlabdb.customClasses import (
|
||||
CustomDecimalFieldFactory,
|
||||
CustomIdEndpointLinkRowAction,
|
||||
SecureAdminBaseView,
|
||||
SecureAdminModelView,
|
||||
|
@ -696,21 +696,21 @@ class SemesterExperimentView(SecureAdminModelView):
|
|||
blank_text="-",
|
||||
)
|
||||
|
||||
oral_weighting = DecimalField(
|
||||
oral_weighting = CustomDecimalFieldFactory(0.01)(
|
||||
"Oral weighting",
|
||||
validators=[DataRequired(), NumberRange(min=0, max=1)],
|
||||
default=0.5,
|
||||
description="Between 0 and 1",
|
||||
places=2,
|
||||
)
|
||||
protocol_weighting = DecimalField(
|
||||
protocol_weighting = CustomDecimalFieldFactory(0.01)(
|
||||
"Protocol weighting",
|
||||
validators=[DataRequired(), NumberRange(min=0, max=1)],
|
||||
default=0.5,
|
||||
description="Between 0 and 1. Oral and protocol weightings have to add to 1! Both are rounded to 2 decimal digits.",
|
||||
places=2,
|
||||
)
|
||||
final_weighting = DecimalField(
|
||||
final_weighting = CustomDecimalFieldFactory(0.01)(
|
||||
"Final weighting",
|
||||
validators=[DataRequired(), NumberRange(min=0, max=1)],
|
||||
default=1.0,
|
||||
|
@ -772,10 +772,10 @@ class SemesterExperimentView(SecureAdminModelView):
|
|||
model.checkAndRoundWeightings()
|
||||
|
||||
def update_model(self, form, model):
|
||||
weightingsChanged = not (
|
||||
form.oral_weighting.data == model.oral_weighting
|
||||
and form.protocol_weighting.data == model.protocol_weighting
|
||||
and form.final_weighting.data == model.final_weighting
|
||||
weightingsChanged = (
|
||||
form.oral_weighting.data != model.oral_weighting
|
||||
or form.protocol_weighting.data != model.protocol_weighting
|
||||
or form.final_weighting.data != model.final_weighting
|
||||
)
|
||||
|
||||
updateSuccessful = super().update_model(form, model)
|
||||
|
|
|
@ -5,6 +5,8 @@ from flask_admin.model.helpers import get_mdict_item_or_list
|
|||
from flask_admin.model.template import EndpointLinkRowAction
|
||||
from flask_security import current_user
|
||||
from sqlalchemy import and_
|
||||
from wtforms.fields import DecimalField
|
||||
from wtforms.widgets import NumberInput
|
||||
|
||||
from advlabdb.exceptions import DataBaseException, ModelViewException
|
||||
from advlabdb.models import (
|
||||
|
@ -269,3 +271,10 @@ class CustomIdEndpointLinkRowAction(EndpointLinkRowAction):
|
|||
|
||||
def render(self, context, row_id, row):
|
||||
return super().render(context, self.customId(row), row)
|
||||
|
||||
|
||||
def CustomDecimalFieldFactory(step):
|
||||
class CustomDecimalField(DecimalField):
|
||||
widget = NumberInput(step=step)
|
||||
|
||||
return CustomDecimalField
|
||||
|
|
Loading…
Reference in a new issue