# plugins/submission/forms.py from flask_wtf import FlaskForm from wtforms import ( StringField, FloatField, SelectField, IntegerField, TextAreaField, MultipleFileField, SubmitField ) from wtforms.validators import Optional, NumberRange, Length, DataRequired class SubmissionForm(FlaskForm): submission_type = SelectField( "Submission Type", choices=[ ("market_price", "Market Price"), ("name_correction", "Name Correction"), ("new_plant", "New Plant Suggestion"), ("mutation", "Mutation Discovery"), ("vendor_rating", "Vendor Rating/Review"), ("vendor_alias", "Vendor Alias Submission"), ], validators=[DataRequired()] ) # Make plant_name Optional; route logic enforces when necessary plant_name = StringField("Common Name", validators=[Optional(), Length(max=100)]) scientific_name = StringField("Scientific Name", validators=[Optional(), Length(max=120)]) notes = TextAreaField("Notes", validators=[Optional()]) # Market Price fields price = FloatField("Price", validators=[Optional()]) source = StringField("Source/Vendor (e.g. Etsy, eBay)", validators=[Optional(), Length(max=255)]) # Vendor Rating / Review fields vendor_name = StringField("Vendor Name", validators=[Optional(), Length(max=255)]) rating = IntegerField("Rating (1–5)", validators=[Optional(), NumberRange(min=1, max=5)]) # Vendor Alias Submission fields old_vendor = StringField("Existing Vendor Name", validators=[Optional(), Length(max=255)]) new_vendor = StringField("New Vendor Name (Alias)", validators=[Optional(), Length(max=255)]) alias_reason = TextAreaField("Reason for Alias", validators=[Optional()]) # Images (max 10) images = MultipleFileField("Upload Images (max 10)", validators=[Optional()]) submit = SubmitField("Submit")