Source code for ResearchNotes.form.inventory

"""All forms for inventory go here"""

from flask_wtf import FlaskForm

from wtforms import (
    StringField,
    SubmitField,
    SelectField,
    TextAreaField,
    BooleanField,
    FloatField,
    IntegerField,
    validators,
)

from ResearchNotes.database import db, Items


[docs]class ItemCreateForm(FlaskForm): """Form for E/S/S creation and updating.""" identifier = StringField( "Identifier", [validators.DataRequired(), validators.Length(min=4, max=79)], ) #: :meta hide-value: name = StringField( "Name", [validators.DataRequired(), validators.Length(min=1, max=149)], ) #: :meta hide-value: vendor = StringField( "Vendor/Origin", [validators.Length(min=0, max=149)], ) #: :meta hide-value: catalog = StringField( "Catalog Number", [validators.Length(min=0, max=149)], ) #: :meta hide-value: amount = FloatField( "Amount", [], ) #: :meta hide-value: unite = StringField( "Unite", ) #: :meta hide-value: is_permanent = BooleanField( "Item is single permanent item.", ) amount_is_int = BooleanField( "Amount is Integer", ) location_id = SelectField("Location", coerce=int) sublocation_id = SelectField("Sub-Location", coerce=int) itype_id = SelectField("Item Type", coerce=int) description = TextAreaField( "Long Description", ) #: :meta hide-value: submit = SubmitField("Submit Item") #: :meta hide-value: def __init__(self, original_identifier, current_amount, available, *args, **kwargs): super().__init__(*args, **kwargs) self.original_identifier = original_identifier self.current_amount = current_amount self.available = available
[docs] def validate_identifier(self, identifier): if identifier.data != self.original_identifier: item = db.session.execute(db.select(Items).filter_by(identifier=identifier.data)).scalar() if item is not None: raise validators.ValidationError("Already used. Please use a different identifier.")
[docs] def validate_amount(self, amount): print(f"Amount: {amount.data} and is_permant {self.is_permanent.data}") if self.is_permanent.data: amount.data = 1.0 else: if amount.data is None: raise validators.ValidationError(f"Amount cannot be None or Zero (0)") if (amount.data - self.current_amount + self.available) < 0: raise validators.ValidationError( f"The amount cannot be reduced below {(self.current_amount - self.available)}" )
[docs] def validate_unite(self, unite): print(f"Units: {unite.data} and is_permant {self.is_permanent.data}") if unite.data is None and self.is_permanent.data: unite.data = "Item" else: if unite.data is None: raise validators.ValidationError(f"You must provide a nunite") if len(unite.data) > 10: raise validators.ValidationError(f"Unite cannot have more than 10 charackters")
[docs]class ItemCheckout(FlaskForm): amount = FloatField( "Amount ", [ validators.InputRequired(), ], ) submit = SubmitField("Submit Amount") #: :meta hide-value: def __init__(self, available, *args, **kwargs): super().__init__(*args, **kwargs) self.available = available
[docs] def validate_amount(self, amount): if (amount.data > self.available) or (amount.data < 0): raise validators.ValidationError(f"Number must be between 0 and {self.available}.")
[docs]class ItemCheckoutInt(FlaskForm): amount = IntegerField( "Amount ", [ validators.InputRequired(), ], ) submit = SubmitField("Submit Amount") #: :meta hide-value: def __init__(self, available, *args, **kwargs): super().__init__(*args, **kwargs) self.available = available
[docs] def validate_amount(self, amount): if (amount.data > self.available) or (amount.data < 0): raise validators.ValidationError(f"Number must be between 0 and {self.available}.")