Feat: Product Variations page get, filter, and save. \n Fix: Active column changed to Add / Delete / Undelete column - this change has only been applied to Product Variations page
This commit is contained in:
@@ -11,21 +11,21 @@ Business object for product
|
||||
"""
|
||||
|
||||
# internal
|
||||
from business_objects.store.product_variation import Product_Variation
|
||||
from business_objects.store.product_variation_type import Product_Variation_Type
|
||||
from extensions import db
|
||||
from helpers.helper_app import Helper_App
|
||||
# external
|
||||
|
||||
|
||||
class Product_Variation_Tree_Node():
|
||||
variation: Product_Variation
|
||||
variation_type: Product_Variation_Type
|
||||
node_parent: None
|
||||
nodes_child: list
|
||||
def __init__(self):
|
||||
self.nodes_child = []
|
||||
def from_variation_and_node_parent(variation, node_parent):
|
||||
def from_variation_type_and_node_parent(variation_type, node_parent):
|
||||
node = Product_Variation_Tree_Node()
|
||||
node.variation = variation
|
||||
node.variation_type = variation_type
|
||||
node.node_parent = node_parent
|
||||
return node
|
||||
def from_node_parent(node_parent):
|
||||
@@ -45,8 +45,8 @@ class Product_Variation_Tree():
|
||||
tree.node_root = node_root
|
||||
return tree
|
||||
@classmethod
|
||||
def from_variation_root(cls, variation_root):
|
||||
node_root = Product_Variation_Tree_Node.from_variation_and_node_parent(variation_root, None)
|
||||
def from_variation_type_root(cls, variation_type_root):
|
||||
node_root = Product_Variation_Tree_Node.from_variation_type_and_node_parent(variation_type_root, None)
|
||||
return cls.from_node_root(node_root)
|
||||
def is_equal(self, tree):
|
||||
my_type_list = self.get_product_variations()
|
||||
@@ -56,53 +56,51 @@ class Product_Variation_Tree():
|
||||
is_equal = (sz_me == sz_other)
|
||||
if is_equal:
|
||||
for index_type in range(sz_me):
|
||||
if my_type_list[index_type] != other_type_list[index_type]:
|
||||
my_variation_type = my_type_list[index_type]
|
||||
other_variation_type = other_type_list[index_type]
|
||||
if my_variation_type.id_type != other_variation_type.id_type:
|
||||
is_equal = False
|
||||
break
|
||||
my_variation = my_variation_type.variations[0]
|
||||
other_variation = other_variation_type.variations[0]
|
||||
if my_variation.id_variation != other_variation.id_variation:
|
||||
is_equal = False
|
||||
break
|
||||
return is_equal
|
||||
@classmethod
|
||||
def from_product_permutation(cls, product_permutation):
|
||||
depth_max = len(product_permutation.variations)
|
||||
node_root = Product_Variation_Tree_Node.from_variation_and_node_parent(product_permutation.variations[0], None)
|
||||
depth_max = len(product_permutation.variation_types)
|
||||
node_root = Product_Variation_Tree_Node.from_variation_type_and_node_parent(product_permutation.variation_types[0], None)
|
||||
node = node_root
|
||||
for depth in range(depth_max - 1):
|
||||
node = Product_Variation_Tree_Node.from_variation_and_node_parent(product_permutation.variations[depth + 1], node)
|
||||
node = Product_Variation_Tree_Node.from_variation_type_and_node_parent(product_permutation.variation_types[depth + 1], node)
|
||||
return cls.from_node_root(node_root)
|
||||
@classmethod
|
||||
def from_product_variation(cls, product_variation):
|
||||
node_root = Product_Variation_Tree_Node.from_variation_and_node_parent(product_variation, None)
|
||||
def from_product_variation_type(cls, product_variation_type):
|
||||
node_root = Product_Variation_Tree_Node.from_variation_type_and_node_parent(product_variation_type, None)
|
||||
return cls.from_node_root(node_root)
|
||||
@classmethod
|
||||
def from_product_variations(cls, product_variations):
|
||||
node_root = Product_Variation_Tree_Node.from_variation_and_node_parent(product_variations[0], None)
|
||||
def from_product_variation_types(cls, product_variation_types):
|
||||
node_root = Product_Variation_Tree_Node.from_variation_type_and_node_parent(product_variation_types[0], None)
|
||||
tree = cls.from_node_root(node_root)
|
||||
if len(product_variations) > 1:
|
||||
for variation in product_variations[1:]:
|
||||
tree.add_product_variation(variation)
|
||||
if len(product_variation_types) > 1:
|
||||
for variation_type in product_variation_types[1:]:
|
||||
tree.add_product_variation_type(variation_type)
|
||||
return tree
|
||||
@classmethod
|
||||
def from_json_str(cls, json_str):
|
||||
variations = []
|
||||
variation_types = []
|
||||
if json_str is None or json_str == '': return None
|
||||
for json_variation in json_str.split(','):
|
||||
parts = json_variation.split(':')
|
||||
for json_variation_type in json_str.split(','):
|
||||
parts = json_variation_type.split(':')
|
||||
if len(parts) != 2: continue
|
||||
variation_type = Product_Variation_Type()
|
||||
variation_type.id_type = parts[0]
|
||||
variation = Product_Variation()
|
||||
variation.id_type = parts[0]
|
||||
variation.id_variation = parts[1]
|
||||
variations.append(variation)
|
||||
return cls.from_product_variations(variations)
|
||||
"""
|
||||
def get_name_variations(self):
|
||||
node = self.node_root
|
||||
name = node.variation.name_variation_type
|
||||
at_leaf_node = node.is_leaf()
|
||||
while not at_leaf_node:
|
||||
node = node.nodes_child[0]
|
||||
name += f', {node.variation.name_variation_type}'
|
||||
at_leaf_node = node.is_leaf()
|
||||
return name
|
||||
"""
|
||||
variation_type.id_variation = parts[1]
|
||||
variation_type.variations = [variation]
|
||||
variation_types.append(variation_type)
|
||||
return cls.from_product_variation_types(variation_types)
|
||||
def get_node_leaf(self):
|
||||
node = self.node_root
|
||||
at_leaf_node = node.is_leaf()
|
||||
@@ -110,19 +108,20 @@ class Product_Variation_Tree():
|
||||
node = node.nodes_child[0]
|
||||
at_leaf_node = node.is_leaf()
|
||||
return node
|
||||
def add_product_variation(self, variation):
|
||||
def add_product_variation_type(self, variation_type):
|
||||
node_leaf = self.get_node_leaf()
|
||||
node_new = Product_Variation_Tree_Node.from_variation_and_node_parent(variation, node_leaf)
|
||||
node_new = Product_Variation_Tree_Node.from_variation_type_and_node_parent(variation_type, node_leaf)
|
||||
node_leaf.add_child(node_new)
|
||||
def get_product_variation_types(self):
|
||||
types = []
|
||||
node = self.node_root
|
||||
at_leaf_node = node.is_leaf()
|
||||
while not at_leaf_node:
|
||||
types.append(node.variation.name_variation_type)
|
||||
types.append(node.variation_type)
|
||||
node = node.nodes_child[0]
|
||||
at_leaf_node = node.is_leaf()
|
||||
return types
|
||||
"""
|
||||
def get_product_variations(self):
|
||||
variations = []
|
||||
node = self.node_root
|
||||
@@ -133,58 +132,28 @@ class Product_Variation_Tree():
|
||||
at_leaf_node = node.is_leaf()
|
||||
variations.append(node.variation)
|
||||
return variations
|
||||
"""
|
||||
def to_preview_str(self):
|
||||
Helper_App.console_log(f'Product_Variation_Tree.to_preview_str')
|
||||
variations = self.get_product_variations()
|
||||
Helper_App.console_log(f'variations: {variations}')
|
||||
variation_types = self.get_product_variation_types()
|
||||
Helper_App.console_log(f'variation_types: {variation_types}')
|
||||
preview_str = ''
|
||||
for variation in variations:
|
||||
for variation_type in variation_types:
|
||||
is_first = (preview_str == '')
|
||||
preview_str += f'{variation.variation_type.name_singular}: {variation.name}'
|
||||
preview_str += f'{variation_type.name}: {variation_type.variations[0].name}'
|
||||
if is_first:
|
||||
preview_str += '\n'
|
||||
Helper_App.console_log(f'preview_str: {preview_str}')
|
||||
return preview_str
|
||||
def to_json(self):
|
||||
variations = self.get_product_variations()
|
||||
json_variations = []
|
||||
for variation in variations:
|
||||
json_variations.append(variation.to_json())
|
||||
return json_variations
|
||||
variation_types = self.get_product_variation_types()
|
||||
json_variation_types = []
|
||||
for variation_type in variation_types:
|
||||
json_variation_types.append(variation_type.to_json())
|
||||
return json_variation_types
|
||||
def to_variation_id_pairs_str(self):
|
||||
variations = self.get_product_variations()
|
||||
variation_types = self.get_product_variation_types()
|
||||
pairs_str = ''
|
||||
for variation in variations:
|
||||
pairs_str += f'{variation.id_type}:{variation.id_variation},'
|
||||
return pairs_str
|
||||
"""
|
||||
class Product_Variation_Container(BaseModel):
|
||||
variation_types: list = []
|
||||
variations: list = []
|
||||
|
||||
def add_product_variation_type(self, variation_type):
|
||||
av.val_instance(variation_type, 'variation_type', 'Product_Variation_Container.add_product_variation_type', Product_Variation_Type)
|
||||
self.variations.append(variation_type)
|
||||
def add_product_variation(self, variation):
|
||||
av.val_instance(variation, 'variation', 'Product_Variation_Container.add_product_variation', Product_Variation)
|
||||
if variation.variation_type is None:
|
||||
variation_type = next(filterfalse(lambda x: x.id_type != variation.id_type, self.variation_types), None)
|
||||
if variation_type is not None:
|
||||
variation.variation_type = variation_type
|
||||
self.variations.append(variation)
|
||||
|
||||
def __repr__(self):
|
||||
return f'Product_Variation_Container:\nvariations_types: {self.variation_types}\nvariations: {self.variations}'
|
||||
|
||||
def to_list_variation_options(self):
|
||||
list_variations = []
|
||||
for variation in self.variations:
|
||||
list_variations.append(variation.to_json_option())
|
||||
Helper_App.console_log(f'list_variations: {list_variations}')
|
||||
return list_variations
|
||||
def to_list_variation_type_options(self):
|
||||
list_variation_types = []
|
||||
for variation_type in self.variation_types:
|
||||
list_variation_types.append(variation_type.to_json_option())
|
||||
return list_variation_types
|
||||
"""
|
||||
for variation_type in variation_types:
|
||||
pairs_str += f'{variation_type.id_type}:{variation_type.variations[0].id_variation},'
|
||||
return pairs_str
|
||||
Reference in New Issue
Block a user