Use custom validator for CLIN funding

This commit is contained in:
graham-dds 2019-09-12 15:50:36 -04:00
parent e9bd1b596d
commit 96ad2334f7

View File

@ -7,7 +7,7 @@ from wtforms.fields import (
HiddenField, HiddenField,
) )
from wtforms.fields.html5 import DateField from wtforms.fields.html5 import DateField
from wtforms.validators import Required, Optional, Length, NumberRange from wtforms.validators import Required, Optional, Length, NumberRange, ValidationError
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from datetime import datetime from datetime import datetime
from numbers import Number from numbers import Number
@ -28,6 +28,17 @@ def coerce_enum(enum_inst):
return enum_inst return enum_inst
def validate_funding(form, field):
if (
isinstance(form.total_amount.data, Number)
and isinstance(field.data, Number)
and form.total_amount.data < field.data
):
raise ValidationError(
translate("forms.task_order.clin_funding_errors.obligated_amount_error")
)
class CLINForm(FlaskForm): class CLINForm(FlaskForm):
jedi_clin_type = SelectField( jedi_clin_type = SelectField(
translate("task_orders.form.clin_type_label"), translate("task_orders.form.clin_type_label"),
@ -63,11 +74,12 @@ class CLINForm(FlaskForm):
obligated_amount = DecimalField( obligated_amount = DecimalField(
label=translate("task_orders.form.obligated_funds_label"), label=translate("task_orders.form.obligated_funds_label"),
validators=[ validators=[
validate_funding,
NumberRange( NumberRange(
0, 0,
MAX_CLIN_AMOUNT, MAX_CLIN_AMOUNT,
translate("forms.task_order.clin_funding_errors.funding_range_error"), translate("forms.task_order.clin_funding_errors.funding_range_error"),
) ),
], ],
) )
@ -108,16 +120,6 @@ class CLINForm(FlaskForm):
) )
valid = False valid = False
if (
isinstance(self.total_amount.data, Number)
and isinstance(self.obligated_amount.data, Number)
and self.total_amount.data < self.obligated_amount.data
):
self.obligated_amount.errors.append(
translate("forms.task_order.clin_funding_errors.obligated_amount_error")
)
valid = False
return valid return valid