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}.")