1. View, filter, and save Product Permutation. \n 2. Synchronised with Product Category page and all common functionality moved into base and base table css, js, and python files.

This commit is contained in:
2024-09-24 23:25:52 +01:00
parent 2954b2050c
commit 45ac0405b4
243 changed files with 6596 additions and 4460 deletions

View File

@@ -55,20 +55,42 @@ class Product_Variation_Tree():
is_equal = (sz_me == sz_other)
if is_equal:
for index_type in range(sz_me):
if sz_me[index_type] != sz_other[index_type]:
if my_type_list[index_type] != other_type_list[index_type]:
is_equal = False
break
return is_equal
def from_product_permutation(product_permutation):
@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)
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)
return Product_Variation_Tree.from_node_root(node_root)
def from_product_variation(product_variation):
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)
return Product_Variation_Tree.from_node_root(node_root)
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)
tree = cls.from_node_root(node_root)
if len(product_variations) > 1:
for variation in product_variations[1:]:
tree.add_product_variation(variation)
return tree
@classmethod
def from_json_str(cls, json_str):
variations = []
for json_variation in json_str.split(','):
parts = json_variation.split(':')
if len(parts) != 2: continue
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
@@ -78,6 +100,7 @@ class Product_Variation_Tree():
name += f', {node.variation.name_variation_type}'
at_leaf_node = node.is_leaf()
return name
"""
def get_node_leaf(self):
node = self.node_root
at_leaf_node = node.is_leaf()
@@ -102,8 +125,64 @@ class Product_Variation_Tree():
variations = []
node = self.node_root
at_leaf_node = node.is_leaf()
variations.append(node.variation)
while not at_leaf_node:
variations.append(node.variation)
node = node.nodes_child[0]
at_leaf_node = node.is_leaf()
return variations
variations.append(node.variation)
return variations
def to_preview_str(self):
print(f'Product_Variation_Tree.to_preview_str')
variations = self.get_product_variations()
print(f'variations: {variations}')
preview_str = ''
for variation in variations:
is_first = (preview_str == '')
preview_str += f'{variation.variation_type.name_singular}: {variation.name}'
if is_first:
preview_str += '\n'
print(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
def to_variation_id_pairs_str(self):
variations = self.get_product_variations()
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())
print(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
"""