1.started removal of CDNs.\n 2. Improved modular structure for all parts of project including database.
This commit is contained in:
222
business_objects/store/product_variation.py
Normal file
222
business_objects/store/product_variation.py
Normal file
@@ -0,0 +1,222 @@
|
||||
"""
|
||||
Project: PARTS Website
|
||||
Author: Edward Middleton-Smith
|
||||
Precision And Research Technology Systems Limited
|
||||
|
||||
Technology: Business Objects
|
||||
Feature: Product Product_Variation Business Object
|
||||
|
||||
Description:
|
||||
Business object for product variation
|
||||
"""
|
||||
|
||||
# IMPORTS
|
||||
# VARIABLE INSTANTIATION
|
||||
# CLASSES
|
||||
# METHODS
|
||||
|
||||
# IMPORTS
|
||||
# internal
|
||||
import lib.argument_validation as av
|
||||
from business_objects.store.store_base import Store_Base
|
||||
from extensions import db
|
||||
# external
|
||||
from dataclasses import dataclass
|
||||
from typing import ClassVar
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
# CLASSES
|
||||
class Product_Variation(db.Model, Store_Base):
|
||||
KEY_ACTIVE_VARIATION: ClassVar[str] = 'active_variation'
|
||||
KEY_ACTIVE_VARIATION_TYPE: ClassVar[str] = 'active_variation_type'
|
||||
KEY_CODE_VARIATION: ClassVar[str] = 'code_variation'
|
||||
KEY_CODE_VARIATION_TYPE: ClassVar[str] = 'code_variation_type'
|
||||
KEY_DISPLAY_ORDER_VARIATION: ClassVar[str] = 'display_order_variation'
|
||||
KEY_DISPLAY_ORDER_VARIATION_TYPE: ClassVar[str] = 'display_order_variation_type'
|
||||
KEY_NAME_VARIATION: ClassVar[str] = 'name_variation'
|
||||
KEY_NAME_VARIATION_TYPE: ClassVar[str] = 'name_variation_type'
|
||||
|
||||
id_variation = db.Column(db.Integer, primary_key=True)
|
||||
code_variation = db.Column(db.String(50))
|
||||
name_variation = db.Column(db.String(255))
|
||||
active_variation = db.Column(db.Boolean)
|
||||
display_order_variation = db.Column(db.Integer)
|
||||
id_type = db.Column(db.Integer)
|
||||
code_variation_type = db.Column(db.String(50))
|
||||
name_variation_type = db.Column(db.String(255))
|
||||
name_plural_variation_type = db.Column(db.String(255))
|
||||
active_variation_type = db.Column(db.Boolean)
|
||||
display_order_variation_type = db.Column(db.Integer)
|
||||
id_product = db.Column(db.Integer)
|
||||
id_permutation = db.Column(db.Integer)
|
||||
id_category = db.Column(db.Integer)
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
Store_Base.__init__(self)
|
||||
|
||||
def from_DB_product(query_row):
|
||||
variation = Product_Variation.from_DB_variation(query_row)
|
||||
variation.id_product = query_row[11]
|
||||
variation.id_permutation = query_row[12]
|
||||
variation.id_category = query_row[13]
|
||||
return variation
|
||||
|
||||
def from_DB_variation(query_row):
|
||||
_m = 'Product_Variation.from_DB_variation'
|
||||
variation = Product_Variation()
|
||||
variation.id_variation = query_row[0]
|
||||
variation.code_variation = query_row[1]
|
||||
variation.name_variation = query_row[2]
|
||||
variation.active_variation = av.input_bool(query_row[3], 'active_variation', _m)
|
||||
variation.display_order_variation = query_row[4]
|
||||
variation.id_type = query_row[5]
|
||||
variation.code_variation_type = query_row[6]
|
||||
variation.name_variation_type = query_row[7]
|
||||
variation.name_plural_variation_type = query_row[8]
|
||||
variation.active_variation_type = av.input_bool(query_row[9], 'active_variation', _m)
|
||||
variation.display_order_variation_type = query_row[10]
|
||||
return variation
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json):
|
||||
variation = cls()
|
||||
variation.id_variation = json[cls.ATTR_ID_VARIATION]
|
||||
variation.id_product = json[cls.ATTR_ID_PRODUCT]
|
||||
variation.id_permutation = json[cls.ATTR_ID_PERMUTATION]
|
||||
variation.id_category = json[cls.ATTR_ID_CATEGORY]
|
||||
variation.name_variation_type = json[cls.KEY_NAME_VARIATION_TYPE]
|
||||
variation.name_variation = json[cls.KEY_NAME_VARIATION]
|
||||
return variation
|
||||
|
||||
def __repr__(self):
|
||||
return f'''
|
||||
id: {self.id_variation}
|
||||
id_product: {self.id_product}
|
||||
id_permutation: {self.id_permutation}
|
||||
id_category: {self.id_category}
|
||||
code_variation_type: {self.code_variation_type}
|
||||
name_variation_type: {self.name_variation_type}
|
||||
code_variation: {self.code_variation}
|
||||
name_variation: {self.name_variation}
|
||||
active_variation: {self.active_variation}
|
||||
active_variation_type: {self.active_variation_type}
|
||||
display_order_variation: {self.display_order_variation}
|
||||
display_order_variation_type: {self.display_order_variation_type}
|
||||
'''
|
||||
|
||||
def to_json(self):
|
||||
return {
|
||||
self.ATTR_ID_PRODUCT_VARIATION: self.id_variation,
|
||||
self.ATTR_ID_PRODUCT: self.id_product,
|
||||
self.ATTR_ID_PRODUCT_PERMUTATION: self.id_permutation,
|
||||
self.ATTR_ID_PRODUCT_CATEGORY: self.id_category,
|
||||
self.ATTR_ID_PRODUCT_VARIATION_TYPE: self.id_type,
|
||||
self.KEY_CODE_VARIATION_TYPE: self.code_variation_type,
|
||||
self.KEY_CODE_VARIATION: self.code_variation,
|
||||
self.KEY_DISPLAY_ORDER_VARIATION_TYPE: self.display_order_variation_type,
|
||||
self.KEY_DISPLAY_ORDER_VARIATION: self.display_order_variation,
|
||||
self.KEY_NAME_VARIATION_TYPE: self.name_variation_type,
|
||||
self.KEY_NAME_VARIATION: self.name_variation,
|
||||
self.KEY_ACTIVE_VARIATION_TYPE: self.active_variation_type,
|
||||
self.KEY_ACTIVE_VARIATION: self.active_variation,
|
||||
}
|
||||
|
||||
def to_json_variation_type(self):
|
||||
return {
|
||||
self.ATTR_ID_PRODUCT_VARIATION_TYPE: self.id_type,
|
||||
self.KEY_CODE_VARIATION_TYPE: self.code_variation_type,
|
||||
self.KEY_DISPLAY_ORDER_VARIATION_TYPE: self.display_order_variation_type,
|
||||
self.KEY_NAME_VARIATION_TYPE: self.name_variation_type,
|
||||
self.KEY_ACTIVE_VARIATION_TYPE: self.active_variation_type,
|
||||
}
|
||||
|
||||
@dataclass
|
||||
class Product_Variation_Filters():
|
||||
get_all_variation_type: bool
|
||||
get_inactive_variation_type: bool
|
||||
get_first_variation_type: bool
|
||||
ids_variation_type: str
|
||||
get_all_variation: bool
|
||||
get_inactive_variation: bool
|
||||
get_first_variation: bool
|
||||
ids_variation: str
|
||||
|
||||
def to_json(self):
|
||||
return {
|
||||
'a_get_all_variation_type': self.get_all_variation_type,
|
||||
'a_get_inactive_variation_type': self.get_inactive_variation_type,
|
||||
'a_get_first_variation_type': self.get_first_variation_type,
|
||||
'a_ids_variation_type': self.ids_variation_type,
|
||||
'a_get_all_variation': self.get_all_variation,
|
||||
'a_get_inactive_variation': self.get_inactive_variation,
|
||||
'a_get_first_variation': self.get_first_variation,
|
||||
'a_ids_variation': self.ids_variation,
|
||||
|
||||
}
|
||||
"""
|
||||
@staticmethod
|
||||
def from_form(form):
|
||||
av.val_instance(form, 'form', 'User_Filters.from_form', Form_Filters_Product_Variation)
|
||||
get_inactive = av.input_bool(form.active_only.data, "active_only", "User_Filters.from_form")
|
||||
id_user = form.id_user.data
|
||||
return User_Filters(
|
||||
get_all_user = (id_user is None),
|
||||
get_inactive_user = get_inactive,
|
||||
get_first_user_only = False,
|
||||
ids_user = id_user,
|
||||
ids_user_auth0 = '',
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def from_user(user):
|
||||
av.val_instance(user, 'user', 'User_Filters.from_user', User)
|
||||
return User_Filters(
|
||||
get_all_user = (user.id_user is None and user.id_user_auth0 is None),
|
||||
get_inactive_user = False,
|
||||
get_first_user_only = False,
|
||||
ids_user = user.id_user,
|
||||
ids_user_auth0 = user.id_user_auth0,
|
||||
)
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def get_default():
|
||||
return Product_Variation_Filters(
|
||||
get_all_variation_type = True,
|
||||
get_inactive_variation_type = False,
|
||||
get_first_variation_type = False,
|
||||
ids_variation_type = '',
|
||||
get_all_variation = True,
|
||||
get_inactive_variation = False,
|
||||
get_first_variation = False,
|
||||
ids_variation = ''
|
||||
)
|
||||
|
||||
class Product_Variation_List(BaseModel):
|
||||
variations: list = []
|
||||
|
||||
def add_variation(self, variation):
|
||||
av.val_instance(variation, 'variation', 'Product_Variation_List.add_variation', Product_Variation)
|
||||
self.variations.append(variation)
|
||||
|
||||
def __repr__(self):
|
||||
return f'variations: {self.variations}'
|
||||
|
||||
def to_list_variations(self):
|
||||
list_variations = []
|
||||
for variation in self.variations:
|
||||
list_variations.append(variation.to_json())
|
||||
print(f'list_variations: {list_variations}')
|
||||
return list_variations
|
||||
|
||||
def to_list_variation_types(self):
|
||||
list_variation_types = []
|
||||
list_variation_ids = []
|
||||
for variation in self.variations:
|
||||
if variation.id_type not in list_variation_ids:
|
||||
list_variation_ids.append(variation.id_type)
|
||||
list_variation_types.append(variation.to_json_variation_type())
|
||||
return list_variation_types
|
||||
|
||||
Reference in New Issue
Block a user