76 lines
3.4 KiB
Python
76 lines
3.4 KiB
Python
"""
|
|
Project: PARTS Website
|
|
Author: Edward Middleton-Smith
|
|
Precision And Research Technology Systems Limited
|
|
|
|
Technology: Backend
|
|
Feature: Forms - Product Category Filters data input
|
|
|
|
Description:
|
|
Defines Flask-WTF forms for handling product category filter input.
|
|
"""
|
|
|
|
# internal
|
|
from business_objects.store.store_base import Store_Base
|
|
# from business_objects.store.product_category import Filters_Product_Category
|
|
# from models.model_view_store import Model_View_Store # circular
|
|
# from helpers.DEPRECATED.helper_abc import Interface_ABC
|
|
from forms.base import Form_Base
|
|
import lib.argument_validation as av
|
|
# external
|
|
from flask_wtf import FlaskForm
|
|
from wtforms import StringField, TextAreaField, SubmitField, BooleanField, IntegerField, SelectField, FloatField
|
|
from wtforms.validators import InputRequired, NumberRange, Regexp, DataRequired, Optional
|
|
from flask_wtf.recaptcha import RecaptchaField
|
|
from abc import ABCMeta, abstractmethod
|
|
|
|
class Filters_Stock_Item(Form_Base):
|
|
id_category = SelectField('Category', choices=[Form_Base.get_choice_all()], default='')
|
|
id_product = SelectField('Product', choices=[Form_Base.get_choice_all()], default='')
|
|
is_out_of_stock = BooleanField('Out of stock only?')
|
|
quantity_min = FloatField('Min stock')
|
|
quantity_max = FloatField('Max stock')
|
|
# submit = SubmitField('Submit')
|
|
"""
|
|
def __repr__(self):
|
|
return f'''
|
|
{self.__class__.__name__}(
|
|
id_category={self.id_category.data},
|
|
id_product={self.id_product.data},
|
|
is_out_of_stock={self.is_out_of_stock.data},
|
|
quantity_min={self.quantity_min.data},
|
|
quantity_max={self.quantity_max.data})
|
|
'''
|
|
"""
|
|
@classmethod
|
|
def from_json(cls, json):
|
|
form = cls()
|
|
# form.id_category.choices = [(json[Store_Base.ATTR_ID_PRODUCT_CATEGORY], json[Store_Base.ATTR_ID_PRODUCT_CATEGORY])]
|
|
form.id_category.data = json[Store_Base.ATTR_ID_PRODUCT_CATEGORY]
|
|
# form.id_product.choices = [(json[Store_Base.ATTR_ID_PRODUCT], json[Store_Base.ATTR_ID_PRODUCT])]
|
|
form.id_product.data = json[Store_Base.ATTR_ID_PRODUCT]
|
|
form.is_out_of_stock.data = av.input_bool(json[Store_Base.FLAG_IS_OUT_OF_STOCK], Store_Base.FLAG_IS_OUT_OF_STOCK, f'{cls.__name__}.from_json')
|
|
form.quantity_min.data = json[Store_Base.FLAG_QUANTITY_MIN]
|
|
form.quantity_max.data = json[Store_Base.FLAG_QUANTITY_MAX]
|
|
return form
|
|
def to_json(self):
|
|
return {
|
|
Store_Base.ATTR_ID_PRODUCT_CATEGORY: self.id_category.data,
|
|
Store_Base.ATTR_ID_PRODUCT: self.id_product.data,
|
|
Store_Base.FLAG_IS_OUT_OF_STOCK: self.is_out_of_stock.data,
|
|
Store_Base.FLAG_QUANTITY_MIN: self.quantity_min.data,
|
|
Store_Base.FLAG_QUANTITY_MAX: self.quantity_max.data
|
|
}
|
|
@classmethod
|
|
def get_default(cls):
|
|
filters = cls()
|
|
filters.id_category.choices = cls.get_choices_blank()
|
|
filters.id_product.choices = cls.get_choices_blank()
|
|
"""
|
|
def import_values(self, form_filters):
|
|
self.id_category.data = form_filters.id_category.data
|
|
self.id_product.data = form_filters.id_product.data
|
|
self.is_out_of_stock.data = form_filters.is_out_of_stock.data
|
|
self.quantity_min.data = form_filters.quantity_min.data
|
|
self.quantity_max.data = form_filters.quantity_max.data
|
|
""" |