diff --git a/app.py b/app.py
index 410246ac..f38b97c2 100644
--- a/app.py
+++ b/app.py
@@ -19,15 +19,6 @@ Initializes the Flask application, sets the configuration based on the environme
from config import app_config, Config
from controllers.core import routes_core
from controllers.legal import routes_legal
-from controllers.store.store import routes_store
-from controllers.store.manufacturing_purchase_order import routes_store_manufacturing_purchase_order
-from controllers.store.product import routes_store_product
-from controllers.store.product_category import routes_store_product_category
-from controllers.store.product_permutation import routes_store_product_permutation
-from controllers.store.product_variation import routes_store_product_variation
-from controllers.store.stock_item import routes_store_stock_item
-from controllers.store.supplier import routes_store_supplier
-from controllers.store.supplier_purchase_order import routes_store_supplier_purchase_order
from controllers.user import routes_user
from extensions import db, csrf, cors, mail, oauth
from helpers.helper_app import Helper_App
@@ -116,15 +107,6 @@ with app.app_context():
app.register_blueprint(routes_core)
app.register_blueprint(routes_legal)
-app.register_blueprint(routes_store)
-app.register_blueprint(routes_store_manufacturing_purchase_order)
-app.register_blueprint(routes_store_product)
-app.register_blueprint(routes_store_product_category)
-app.register_blueprint(routes_store_product_permutation)
-app.register_blueprint(routes_store_product_variation)
-app.register_blueprint(routes_store_stock_item)
-app.register_blueprint(routes_store_supplier)
-app.register_blueprint(routes_store_supplier_purchase_order)
app.register_blueprint(routes_user)
diff --git a/business_objects/store/access_level.py b/business_objects/access_level.py
similarity index 91%
rename from business_objects/store/access_level.py
rename to business_objects/access_level.py
index 12def267..7d5fdc95 100644
--- a/business_objects/store/access_level.py
+++ b/business_objects/access_level.py
@@ -12,7 +12,7 @@ Business object for product
# internal
import lib.argument_validation as av
-from business_objects.store.store_base import Store_Base
+from business_objects.base import Base
from extensions import db
from helpers.helper_app import Helper_App
# external
@@ -20,9 +20,9 @@ from pydantic import BaseModel
from typing import ClassVar
-class Access_Level(db.Model, Store_Base):
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_ACCESS_LEVEL
- NAME_ATTR_OPTION_TEXT: ClassVar[str] = Store_Base.FLAG_NAME
+class Access_Level(db.Model, Base):
+ NAME_ATTR_OPTION_VALUE: ClassVar[str] = Base.ATTR_ID_ACCESS_LEVEL
+ NAME_ATTR_OPTION_TEXT: ClassVar[str] = Base.FLAG_NAME
__tablename__ = 'Shop_Access_Level_Temp'
id_access_level = db.Column(db.Integer, primary_key=True)
code = db.Column(db.String(50))
@@ -35,7 +35,7 @@ class Access_Level(db.Model, Store_Base):
created_by = db.Column(db.Integer)
def __init__(self):
super().__init__()
- Store_Base.__init__(self)
+ Base.__init__(self)
@classmethod
def from_DB_access_level(cls, query_row):
access_level = cls()
@@ -83,4 +83,4 @@ class Access_Level(db.Model, Store_Base):
access_level.description = json[cls.FLAG_DESCRIPTION],
access_level.display_order = json[cls.FLAG_DISPLAY_ORDER]
access_level.active = json[cls.FLAG_ACTIVE]
- return access_level
+ return access_level
\ No newline at end of file
diff --git a/business_objects/store/__init__.py b/business_objects/store/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/business_objects/store/__pycache__/__init__.cpython-312.pyc b/business_objects/store/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index 1a9c3397..00000000
Binary files a/business_objects/store/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/access_level.cpython-312.pyc b/business_objects/store/__pycache__/access_level.cpython-312.pyc
deleted file mode 100644
index afffc926..00000000
Binary files a/business_objects/store/__pycache__/access_level.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/basket.cpython-312.pyc b/business_objects/store/__pycache__/basket.cpython-312.pyc
deleted file mode 100644
index 30df352b..00000000
Binary files a/business_objects/store/__pycache__/basket.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/currency.cpython-312.pyc b/business_objects/store/__pycache__/currency.cpython-312.pyc
deleted file mode 100644
index 5066849f..00000000
Binary files a/business_objects/store/__pycache__/currency.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/delivery_option.cpython-312.pyc b/business_objects/store/__pycache__/delivery_option.cpython-312.pyc
deleted file mode 100644
index 178a1e92..00000000
Binary files a/business_objects/store/__pycache__/delivery_option.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/delivery_region.cpython-312.pyc b/business_objects/store/__pycache__/delivery_region.cpython-312.pyc
deleted file mode 100644
index 0cc1259e..00000000
Binary files a/business_objects/store/__pycache__/delivery_region.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/discount.cpython-312.pyc b/business_objects/store/__pycache__/discount.cpython-312.pyc
deleted file mode 100644
index 77e3cbe7..00000000
Binary files a/business_objects/store/__pycache__/discount.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/image.cpython-312.pyc b/business_objects/store/__pycache__/image.cpython-312.pyc
deleted file mode 100644
index d934ebbd..00000000
Binary files a/business_objects/store/__pycache__/image.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/order.cpython-312.pyc b/business_objects/store/__pycache__/order.cpython-312.pyc
deleted file mode 100644
index 2f778f4a..00000000
Binary files a/business_objects/store/__pycache__/order.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/product.cpython-312.pyc b/business_objects/store/__pycache__/product.cpython-312.pyc
deleted file mode 100644
index 45216788..00000000
Binary files a/business_objects/store/__pycache__/product.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/product_category.cpython-312.pyc b/business_objects/store/__pycache__/product_category.cpython-312.pyc
deleted file mode 100644
index 1632b355..00000000
Binary files a/business_objects/store/__pycache__/product_category.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/product_permutation.cpython-312.pyc b/business_objects/store/__pycache__/product_permutation.cpython-312.pyc
deleted file mode 100644
index ab59f4ea..00000000
Binary files a/business_objects/store/__pycache__/product_permutation.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/product_price.cpython-312.pyc b/business_objects/store/__pycache__/product_price.cpython-312.pyc
deleted file mode 100644
index e976231d..00000000
Binary files a/business_objects/store/__pycache__/product_price.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/product_variation.cpython-312.pyc b/business_objects/store/__pycache__/product_variation.cpython-312.pyc
deleted file mode 100644
index 5244b8fa..00000000
Binary files a/business_objects/store/__pycache__/product_variation.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/product_variation_tree.cpython-312.pyc b/business_objects/store/__pycache__/product_variation_tree.cpython-312.pyc
deleted file mode 100644
index caf47456..00000000
Binary files a/business_objects/store/__pycache__/product_variation_tree.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/product_variation_type.cpython-312.pyc b/business_objects/store/__pycache__/product_variation_type.cpython-312.pyc
deleted file mode 100644
index e41f32dd..00000000
Binary files a/business_objects/store/__pycache__/product_variation_type.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/stock_item.cpython-312.pyc b/business_objects/store/__pycache__/stock_item.cpython-312.pyc
deleted file mode 100644
index fb27826c..00000000
Binary files a/business_objects/store/__pycache__/stock_item.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/__pycache__/store_base.cpython-312.pyc b/business_objects/store/__pycache__/store_base.cpython-312.pyc
deleted file mode 100644
index c5799058..00000000
Binary files a/business_objects/store/__pycache__/store_base.cpython-312.pyc and /dev/null differ
diff --git a/business_objects/store/basket.py b/business_objects/store/basket.py
deleted file mode 100644
index 574033d4..00000000
--- a/business_objects/store/basket.py
+++ /dev/null
@@ -1,184 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Basket Business Object
-
-Description:
-Business object for basket
-"""
-
-# IMPORTS
-# VARIABLE INSTANTIATION
-# CLASSES
-# METHODS
-
-# IMPORTS
-# internal
-import lib.argument_validation as av
-# from lib import data_types
-from business_objects.store.product import Product #, Parameters_Product
-from business_objects.store.discount import Discount
-from business_objects.store.delivery_option import Delivery_Option
-from business_objects.store.store_base import Store_Base
-# from forms import Form_Product
-# from models.model_view_store import Model_View_Store # circular
-# from datastores.datastore_store import DataStore_Store # circular
-# from forms import Form_Basket_Add, Form_Basket_Edit # possibly circular
-from helpers.helper_app import Helper_App
-# external
-# from enum import Enum
-from flask import jsonify
-import locale
-
-
-# VARIABLE INSTANTIATION
-
-# CLASSES
-class Basket_Item():
- product: Product
- quantity: int
- delivery_option: Delivery_Option
- discounts: list
- # form: Form_Product
- is_included_VAT: bool
-
- """
- def __init__(self):
- self.is_unavailable_in_currency_or_region = False
- self.is_available = True
- """
-
- def from_product_and_quantity_and_VAT_included(product, quantity, is_included_VAT):
- # Initialiser - validation
- _m = 'Basket_Item.from_product_and_quantity'
- v_arg_type = 'class attribute'
- av.val_instance(product, 'product', _m, Product, v_arg_type=v_arg_type)
- av.full_val_float(quantity, 'quantity', _m, product.get_quantity_min(), v_arg_type=v_arg_type)
- basket_item = Basket_Item()
- basket_item.product = product
- basket_item.quantity = quantity
- basket_item.is_included_VAT = is_included_VAT
- return basket_item
-
- def add_product_price_discount(self, discount):
- av.val_instance(discount, 'discount', 'Basket_Item.add_product_price_discount', Discount, v_arg_type='class attribute')
- self.discounts.append(discount)
-
- def set_delivery_option(self, delivery_option):
- av.val_instance(delivery_option, 'delivery_option', 'Basket_Item.set_delivery_option', Delivery_Option, v_arg_type='class attribute')
- self.delivery_option = delivery_option
-
- def update_quantity(self, quantity):
- _m = 'Basket_Item.update_quantity'
- v_arg_type = 'class attribute'
- av.full_val_float(quantity, 'quantity', _m, self.product.get_quantity_min(), v_arg_type=v_arg_type)
- self.quantity = quantity
-
- def jsonify(self):
- return jsonify(self)
-
- def to_json(self):
- permutation = self.product.get_permutation_selected()
- return {
- 'product_id': self.product.id_product,
- 'permutation_id': permutation.id_permutation,
- 'price': permutation.output_price(self.is_included_VAT),
- 'quantity': self.quantity
- }
-
- def get_subtotal(self):
- permutation = self.product.get_permutation_selected()
- return round(self.product.get_price_local(self.is_included_VAT) * self.quantity, 2) if permutation.is_available else 0
-
- def output_currency(self):
- return self.product.output_currency()
-
- def output_subtotal(self):
- locale.setlocale(locale.LC_ALL, '')
- subtotal = self.get_subtotal()
- permutation = self.product.get_permutation_selected()
- return 'Not available in this currency or region' if permutation.is_unavailable_in_currency_or_region else 'Not available' if not permutation.is_available else f'{self.product.output_currency()} {locale.format_string("%d", subtotal, grouping=True)}'
-
- def __repr__(self):
- return f'''
- product: {self.product}
- quantity: {self.quantity}
- subtotal: {self.get_subtotal()}
- '''
-
-class Basket(Store_Base):
- KEY_BASKET: str = 'basket'
- KEY_ID_CURRENCY: str = 'id_currency'
- KEY_ID_REGION_DELIVERY: str = 'id_region_delivery'
- KEY_IS_INCLUDED_VAT: str = 'is_included_VAT'
- KEY_ITEMS: str = 'items'
- items: list
- is_included_VAT: bool
- id_region_delivery: int
- id_currency: int
-
- def __init__(self, is_included_VAT, id_currency, id_region_delivery):
- self.items = []
- self.is_included_VAT = is_included_VAT
- self.id_currency = id_currency
- self.id_region_delivery = id_region_delivery
- def add_item(self, item):
- av.val_instance(item, 'item', 'Basket.add_item', Basket_Item)
- self.items.append(item)
- def to_csv(self):
- ids_permutation = ''
- quantities_permutation = ''
- for b_i in range(len(self.items)):
- basket_item = self.items[b_i]
- product = basket_item.product
- if b_i > 0:
- ids_permutation += ','
- quantities_permutation += ','
- ids_permutation += str(product.get_id_permutation())
- quantities_permutation += str(basket_item.quantity)
- Helper_App.console_log(f'ids_permutation_basket = {ids_permutation}')
- Helper_App.console_log(f'quantities_permutation_basket = {quantities_permutation}')
- return ids_permutation, quantities_permutation
- def to_json_list(self):
- json_list = []
- for item in self.items:
- json_list.append(item.to_json())
- return json_list
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- Basket.KEY_ITEMS: self.to_json_list(),
- Basket.KEY_IS_INCLUDED_VAT: self.is_included_VAT,
- Basket.KEY_ID_CURRENCY: self.id_currency,
- Basket.KEY_ID_REGION_DELIVERY: self.id_region_delivery
- }
- def output_total(self):
- sum = 0
- for b_i in self.items:
- sum += b_i.get_subtotal()
- symbol = self.items[0].output_currency() if len(self.items) > 0 else ''
-
- return f'{symbol} {locale.format_string("%d", sum, grouping=True)}'
- def len(self):
- return len(self.items)
- """
- def get_key_product_index_from_ids_product_permutation(id_product, id_permutation):
- return f'{id_product},{"" if id_permutation is None else id_permutation}'
- """
- def __repr__(self):
- repr = f'Basket:'
- for basket_item in self.items:
- Helper_App.console_log(f'{basket_item}')
- repr = f'{repr}\n{basket_item}'
- return repr
-
- def get_ids_permutation_unavailable(self):
- ids_permutation = []
- for item in self.items:
- permutation = item.product.get_permutation_selected()
- if not permutation.is_available:
- ids_permutation.append(permutation.id_permutation)
- return ids_permutation
\ No newline at end of file
diff --git a/business_objects/store/delivery_option.py b/business_objects/store/delivery_option.py
deleted file mode 100644
index 2dd7ab6c..00000000
--- a/business_objects/store/delivery_option.py
+++ /dev/null
@@ -1,98 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Product Delivery Option Business Object
-
-Description:
-Business object for delivery option
-"""
-
-# internal
-from extensions import db
-
-
-# CLASSES
-"""
-class Delivery_Option():
- name: str
- delay_min: int # days
- delay_max: int
- quantity_min: float
- quantity_max: float
- regions: list # [Enum_Region]
- cost: float
-
- def __new__(cls, name, delay_min, delay_max, quantity_min, quantity_max, regions, cost):
- _m = 'Delivery_Option.__new__'
- v_arg_type = 'class attribute'
- av.val_str(name, 'name', _m, v_arg_type = v_arg_type)
- av.val_int(delay_min, 'delay_min', _m, 0, v_arg_type = v_arg_type)
- av.val_int(delay_max, 'delay_max', _m, 0, v_arg_type = v_arg_type)
- av.val_float(quantity_min, 'quantity_min', _m, 0, v_arg_type = v_arg_type)
- av.val_float(quantity_max, 'quantity_max', _m, 0, v_arg_type = v_arg_type)
- av.val_list_instances(regions, 'regions', _m, Enum_Region, v_arg_type = v_arg_type)
- av.val_float(cost, 'cost', _m, 0, v_arg_type = v_arg_type)
- return super(Delivery_Option, cls).__new__(cls)
-
- def __init__(self, name, delay_min, delay_max, quantity_min, quantity_max, regions, cost):
- self.name = name
- self.delay_min = delay_min
- self.delay_max = delay_max
- self.quantity_min = quantity_min
- self.quantity_max = quantity_max
- self.regions = regions
- self.cost = cost
-"""
-class Delivery_Option(db.Model):
- id_option = db.Column(db.Integer, primary_key=True)
- id_product = db.Column(db.Integer)
- id_permutation = db.Column(db.Integer)
- id_category = db.Column(db.Integer)
- code = db.Column(db.String(50))
- name = db.Column(db.String(100))
- latency_min = db.Column(db.Integer)
- latency_max = db.Column(db.Integer)
- quantity_min = db.Column(db.Integer)
- quantity_max = db.Column(db.Integer)
- codes_region = db.Column(db.String(4000))
- names_region = db.Column(db.String(4000))
- price_GBP = db.Column(db.Float)
- display_order = db.Column(db.Integer)
- def __init__(self):
- self.delivery_regions = []
- def from_DB_get_many_product_catalogue(query_row):
- option = Delivery_Option()
- option.id_option = query_row[0]
- option.id_product = query_row[1]
- option.id_permutation = query_row[2]
- option.id_category = query_row[3]
- option.code = query_row[4]
- option.name = query_row[5]
- option.latency_min = query_row[6]
- option.latency_max = query_row[7]
- option.quantity_min = query_row[8]
- option.quantity_max = query_row[9]
- option.codes_region = query_row[10]
- option.names_region = query_row[11]
- option.price_GBP = query_row[12]
- option.display_order = query_row[13]
- return option
- def __repr__(self):
- return f'''
- id: {self.id_option}
- id_product: {self.id_product}
- id_category: {self.id_category}
- name: {self.name}
- code: {self.code}
- latency_min: {self.latency_min}
- latency_max: {self.latency_max}
- quantity_min: {self.quantity_min}
- quantity_max: {self.quantity_max}
- codes_region: {self.codes_region}
- names_region: {self.names_region}
- price_GBP: {self.price_GBP}
- display_order: {self.display_order}
- '''
diff --git a/business_objects/store/discount.py b/business_objects/store/discount.py
deleted file mode 100644
index f5e5c75a..00000000
--- a/business_objects/store/discount.py
+++ /dev/null
@@ -1,75 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Product Discount Business Object
-
-Description:
-Business object for discount
-"""
-
-# internal
-from extensions import db
-
-
-# CLASSES
-class Discount(db.Model):
- id_discount = db.Column(db.Integer, primary_key=True)
- id_category = db.Column(db.Integer)
- id_product = db.Column(db.Integer)
- id_permutation = db.Column(db.Integer)
- code = db.Column(db.String(50))
- name = db.Column(db.String(200))
- multiplier = db.Column(db.Float)
- subtractor = db.Column(db.Float)
- apply_multiplier_first = db.Column(db.Boolean)
- quantity_min = db.Column(db.Integer)
- quantity_max = db.Column(db.Integer)
- date_start = db.Column(db.DateTime)
- date_end = db.Column(db.DateTime)
- codes_region = db.Column(db.String(4000))
- names_region = db.Column(db.String(4000))
- codes_currency = db.Column(db.String(4000))
- names_currency = db.Column(db.String(4000))
- display_order = db.Column(db.Integer)
-
- def __init__(self):
- self.delivery_regions = []
- def from_DB_get_many_product_catalogue(query_row):
- discount = Discount()
- discount.id_discount = query_row[0]
- discount.id_category = query_row[1]
- discount.id_product = query_row[2]
- discount.id_permutation = query_row[3]
- discount.code = query_row[4]
- discount.name = query_row[5]
- discount.multiplier = query_row[6]
- discount.subtractor = query_row[7]
- discount.apply_multiplier_first = query_row[8]
- discount.quantity_min = query_row[9]
- discount.quantity_max = query_row[10]
- discount.date_start = query_row[11]
- discount.date_end = query_row[12]
- discount.codes_region = query_row[13]
- discount.names_region = query_row[14]
- discount.codes_currency = query_row[15]
- discount.names_currency = query_row[16]
- discount.display_order = query_row[17]
- return discount
- def __repr__(self):
- return f'''
- id: {self.id_discount}
- id_category: {self.id_category}
- id_product: {self.id_product}
- name: {self.name}
- code: {self.code}
- multiplier: {self.multiplier}
- quantity_min: {self.quantity_min}
- quantity_max: {self.quantity_max}
- date_start: {self.date_start}
- date_end: {self.date_end}
- display_order: {self.display_order}
- '''
-
diff --git a/business_objects/store/image.py b/business_objects/store/image.py
deleted file mode 100644
index 8b4d301c..00000000
--- a/business_objects/store/image.py
+++ /dev/null
@@ -1,131 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Product Image Business Object
-
-Description:
-Business object for product image
-"""
-
-# internal
-from business_objects.store.store_base import Store_Base
-from extensions import db
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-# external
-from enum import Enum
-from typing import ClassVar
-
-
-class Resolution_Level_Enum(Enum):
- THUMBNAIL = 0
- LOW = 1
- HIGH = 2
- FULL = 3
-
- def text(self):
- return Resolution_Level_Enum.Resolution_Level_Enum_Text(self)
-
- def Resolution_Level_Enum_Text(category):
- av.val_instance(category, 'category', 'Resolution_Level_Enum_Text', Resolution_Level_Enum)
- if category == Resolution_Level_Enum.THUMBNAIL:
- return 'Thumbnail'
- elif category == Resolution_Level_Enum.LOW:
- return 'Low resolution'
- elif category == Resolution_Level_Enum.HIGH:
- return 'High resolution'
- elif category == Resolution_Level_Enum.FULL:
- return 'Full resolution'
- else:
- return 'Unknown'
-
- def get_member_by_text(text):
- for member in Resolution_Level_Enum.__members__.values():
- if member.name == text:
- return member
- return Resolution_Level_Enum.HIGH
-
-
-class Image(db.Model, Store_Base):
- NAME_ATTR_OPTION_TEXT: ClassVar[str] = 'url'
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = 'id_image'
- id_image = db.Column(db.Integer, primary_key=True)
- id_product = db.Column(db.Integer)
- id_permutation = db.Column(db.Integer)
- id_category = db.Column(db.Integer)
- url = db.Column(db.String(255))
- active = db.Column(db.Boolean)
- display_order = db.Column(db.Integer)
- """
- def __new__(cls, id, id_product, id_category, url, display_order):
- _m = 'Image.__new__'
- v_arg_type = 'class attribute'
- av.val_int(id, 'id', _m, 0, v_arg_type=v_arg_type)
- av.val_int(id_product, 'id_product', _m, 0, v_arg_type=v_arg_type)
- av.val_int(id_category, 'id_category', _m, 0, v_arg_type=v_arg_type)
- av.val_str(url, 'url', _m, max_len=254, v_arg_type=v_arg_type)
- av.val_int(display_order, 'display_order', _m, v_arg_type=v_arg_type)
- return super(Image, cls).__new__(cls)
-
- def __init__(self, id, id_product, id_category, url, display_order):
- self.id_image = id
- self.id_product = id_product
- self.id_category = id_category
- self.url = url
- self.display_order = display_order
- super().__init__()
-"""
- def from_DB_get_many_product_catalogue(query_row):
- _m = 'Image.from_DB_get_many_product_catalogue'
- # Helper_App.console_log(f'image: {query_row}')
- image = Image()
- image.id_image = query_row[0]
- image.id_product = query_row[1]
- image.id_permutation = query_row[2]
- image.id_category = query_row[3]
- image.url = query_row[4]
- image.active = query_row[5]
- image.display_order = query_row[6]
- return image
- def __repr__(self):
- return f'''
- id: {self.id_image}
- id_product: {self.id_product}
- id_category: {self.id_category}
- url: {self.url}
- display_order: {self.display_order}
- '''
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_PRODUCT_IMAGE: self.id_image,
- self.ATTR_ID_PRODUCT: self.id_product,
- self.ATTR_ID_PRODUCT_CATEGORY: self.id_category,
- self.FLAG_URL: self.url,
- self.FLAG_DISPLAY_ORDER: self.display_order
- }
-
-
-class Product_Image_Filters():
- product_id: int
- get_thumbnail: bool
- get_remaining_LQ: bool
-
- def __new__(cls, product_id, get_thumbnail, get_remaining_LQ):
- # Initialiser - validation
- _m = 'Parameters_Product.__new__'
- v_arg_type = 'class attribute'
- av.val_int(product_id, 'product_id', _m, v_arg_type=v_arg_type)
- av.val_bool(get_thumbnail, 'get_thumbnail', _m, v_arg_type=v_arg_type)
- av.val_bool(get_remaining_LQ, 'get_remaining_LQ', _m, v_arg_type=v_arg_type)
- return super(Product, cls).__new__(cls)
-
- def __init__(self, product_id, get_thumbnail, get_remaining_LQ):
- # Constructor
- self.product_id = product_id
- self.get_thumbnail = get_thumbnail
- self.get_remaining_LQ = get_remaining_LQ
-
diff --git a/business_objects/store/manufacturing_purchase_order.py b/business_objects/store/manufacturing_purchase_order.py
deleted file mode 100644
index 8e1a21e5..00000000
--- a/business_objects/store/manufacturing_purchase_order.py
+++ /dev/null
@@ -1,354 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Manufacturing_Purchase_Order Business Object
-
-Description:
-Business object for manufacturing_purchase_order
-"""
-
-# internal
-import lib.argument_validation as av
-from business_objects.currency import Currency
-from business_objects.db_base import Get_Many_Parameters_Base
-from business_objects.store.store_base import Store_Base
-from extensions import db
-from helpers.helper_app import Helper_App
-# external
-from pydantic import BaseModel
-from typing import ClassVar, Optional
-from datetime import datetime
-
-class Manufacturing_Purchase_Order(db.Model, Store_Base):
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_MANUFACTURING_PURCHASE_ORDER
- NAME_ATTR_OPTION_TEXT: ClassVar[str] = Store_Base.FLAG_NAME
- # __tablename__ = 'Shop_Manufacturing_Purchase_Order_Temp'
- id_order = db.Column(db.Integer, primary_key=True)
- id_currency = db.Column(db.Integer)
- cost_total_local_VAT_excl = db.Column(db.Float)
- cost_total_local_VAT_incl = db.Column(db.Float)
- price_total_local_VAT_excl = db.Column(db.Float)
- price_total_local_VAT_incl = db.Column(db.Float)
- active = db.Column(db.Boolean)
- created_on = db.Column(db.DateTime)
- created_by = db.Column(db.Integer)
- name = db.Column(db.String(255))
- # items: list = None
- def __init__(self):
- super().__init__()
- Store_Base.__init__(self)
- self.items = []
- self.currency = None
- @classmethod
- def from_DB_manufacturing_purchase_order(cls, query_row):
- manufacturing_purchase_order = cls()
- manufacturing_purchase_order.id_order = query_row[0]
- manufacturing_purchase_order.id_currency = query_row[1]
- manufacturing_purchase_order.currency = Currency.from_DB_manufacturing_purchase_order(query_row)
- manufacturing_purchase_order.cost_total_local_VAT_excl = query_row[4]
- manufacturing_purchase_order.cost_total_local_VAT_incl = query_row[5]
- manufacturing_purchase_order.price_total_local_VAT_excl = query_row[6]
- manufacturing_purchase_order.price_total_local_VAT_incl = query_row[7]
- manufacturing_purchase_order.active = av.input_bool(query_row[8], 'active', f'{cls.__name__}.from_DB_manufacturing_purchase_order')
- manufacturing_purchase_order.created_on = query_row[9]
- manufacturing_purchase_order.name = query_row[10]
- return manufacturing_purchase_order
-
- def __repr__(self):
- return f'''
-{self.ATTR_ID_MANUFACTURING_PURCHASE_ORDER}: {self.id_order},
-{self.ATTR_ID_CURRENCY}: {self.id_currency},
-{self.FLAG_COST_TOTAL_LOCAL_VAT_EXCL}: {self.cost_total_local_VAT_excl},
-{self.FLAG_COST_TOTAL_LOCAL_VAT_INCL}: {self.cost_total_local_VAT_incl},
-{self.FLAG_PRICE_TOTAL_LOCAL_VAT_EXCL}: {self.price_total_local_VAT_excl},
-{self.FLAG_PRICE_TOTAL_LOCAL_VAT_INCL}: {self.price_total_local_VAT_incl},
-{self.FLAG_ACTIVE}: {self.active},
-{self.FLAG_CREATED_ON}: {self.created_on},
-{self.FLAG_NAME}: {self.name}
- '''
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_MANUFACTURING_PURCHASE_ORDER: self.id_order,
- self.ATTR_ID_CURRENCY: self.id_currency,
- self.FLAG_COST_TOTAL_LOCAL_VAT_EXCL: self.cost_total_local_VAT_excl,
- self.FLAG_COST_TOTAL_LOCAL_VAT_INCL: self.cost_total_local_VAT_incl,
- self.FLAG_PRICE_TOTAL_LOCAL_VAT_EXCL: self.price_total_local_VAT_excl,
- self.FLAG_PRICE_TOTAL_LOCAL_VAT_INCL: self.price_total_local_VAT_incl,
- self.FLAG_ORDER_ITEMS: [item.to_json() for item in self.items],
- self.FLAG_ACTIVE: av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json'),
- self.FLAG_CREATED_ON: self.created_on,
- self.FLAG_NAME: self.name,
- }
- def to_json_option(self):
- return {
- 'value': self.id_order,
- 'text': self.name,
- }
- @classmethod
- def from_json(cls, json):
- Helper_App.console_log(f'{cls.__name__}.from_json: {json}')
- manufacturing_purchase_order = cls()
- manufacturing_purchase_order.id_order = json[cls.ATTR_ID_MANUFACTURING_PURCHASE_ORDER]
- manufacturing_purchase_order.id_currency = json[cls.ATTR_ID_CURRENCY]
- manufacturing_purchase_order.cost_total_local_VAT_excl = json.get(cls.FLAG_COST_TOTAL_LOCAL_VAT_EXCL, None)
- manufacturing_purchase_order.cost_total_local_VAT_incl = json.get(cls.FLAG_COST_TOTAL_LOCAL_VAT_INCL, None)
- manufacturing_purchase_order.price_total_local_VAT_excl = json.get(cls.FLAG_PRICE_TOTAL_LOCAL_VAT_EXCL, None)
- manufacturing_purchase_order.price_total_local_VAT_incl = json.get(cls.FLAG_PRICE_TOTAL_LOCAL_VAT_INCL, None)
- manufacturing_purchase_order.items = [Manufacturing_Purchase_Order_Product_Link.from_json(item) for item in json[cls.FLAG_ORDER_ITEMS]]
- manufacturing_purchase_order.active = json[cls.FLAG_ACTIVE]
- manufacturing_purchase_order.created_on = json.get(cls.FLAG_CREATED_ON, None)
- manufacturing_purchase_order.name = json.get(cls.FLAG_NAME, None)
- return manufacturing_purchase_order
- def get_items_preview_str(self):
- preview = ''
- if self.items is not None:
- for item in self.items:
- if preview != '':
- preview += '\n'
- preview += f'{item.name_permutation}{f" -(x{item.quantity_used})" if item.quantity_used > 0 else ""}{f" +(x{item.quantity_produced})" if item.quantity_produced > 0 else ""}'
- return preview
-
-class Manufacturing_Purchase_Order_Product_Link(db.Model, Store_Base):
- FLAG_QUANTITY_PRODUCED: ClassVar[str] = 'quantity_produced'
- FLAG_QUANTITY_USED: ClassVar[str] = 'quantity_used'
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_MANUFACTURING_PURCHASE_ORDER_PRODUCT_LINK
- NAME_ATTR_OPTION_TEXT: ClassVar[str] = Store_Base.FLAG_NAME
- # __tablename__ = 'Shop_Manufacturing_Purchase_Order_Temp'
- id_link = db.Column(db.Integer, primary_key=True)
- id_order = db.Column(db.Integer)
- id_category = db.Column(db.Integer)
- id_product = db.Column(db.Integer)
- id_permutation = db.Column(db.Integer)
- id_unit_quantity = db.Column(db.Integer)
- name_permutation = db.Column(db.String(255))
- csv_id_pairs_variation = db.Column(db.String(4000))
- quantity_used = db.Column(db.Float)
- quantity_produced = db.Column(db.Float)
- id_unit_latency_manufacture = db.Column(db.Integer)
- latency_manufacture = db.Column(db.Integer)
- display_order = db.Column(db.Integer)
- cost_unit_local_VAT_excl = db.Column(db.Float)
- cost_unit_local_VAT_incl = db.Column(db.Float)
- price_unit_local_VAT_excl = db.Column(db.Float)
- price_unit_local_VAT_incl = db.Column(db.Float)
- active = db.Column(db.Boolean)
- created_on = db.Column(db.DateTime)
- created_by = db.Column(db.Integer)
- def __init__(self):
- super().__init__()
- Store_Base.__init__(self)
- @classmethod
- def from_DB_manufacturing_purchase_order(cls, query_row):
- link = cls()
- link.id_link = query_row[0]
- link.id_order = query_row[1]
- link.id_category = query_row[2]
- link.id_product = query_row[3]
- link.id_permutation = query_row[4]
- link.name_permutation = query_row[5]
- link.csv_id_pairs_variation = query_row[6]
- link.id_unit_quantity = query_row[7]
- link.quantity_used = query_row[8]
- link.quantity_produced = query_row[9]
- link.id_unit_latency_manufacture = query_row[10]
- link.latency_manufacture = query_row[11]
- link.display_order = query_row[12]
- link.cost_unit_local_VAT_excl = query_row[13]
- link.cost_unit_local_VAT_incl = query_row[14]
- link.price_unit_local_VAT_excl = query_row[15]
- link.price_unit_local_VAT_incl = query_row[16]
- link.active = query_row[17]
- return link
- def __repr__(self):
- return f'''
-{self.ATTR_ID_MANUFACTURING_PURCHASE_ORDER_PRODUCT_LINK}: {self.id_link},
-{self.ATTR_ID_MANUFACTURING_PURCHASE_ORDER}: {self.id_order},
-{self.ATTR_ID_PRODUCT_CATEGORY}: {self.id_category},
-{self.ATTR_ID_PRODUCT}: {self.id_product},
-{self.ATTR_ID_PRODUCT_PERMUTATION}: {self.id_permutation},
-{self.FLAG_NAME}: {self.name_permutation},
-{self.FLAG_PRODUCT_VARIATIONS}: {self.csv_id_pairs_variation},
-{self.ATTR_ID_UNIT_MEASUREMENT_QUANTITY}: {self.id_unit_quantity},
-{self.FLAG_QUANTITY_USED}: {self.quantity_used},
-{self.FLAG_QUANTITY_PRODUCED}: {self.quantity_produced},
-{self.ATTR_ID_UNIT_MEASUREMENT_LATENCY_MANUFACTURE}: {self.id_unit_latency_manufacture},
-{self.FLAG_LATENCY_MANUFACTURE}: {self.latency_manufacture},
-{self.FLAG_DISPLAY_ORDER}: {self.display_order},
-{self.FLAG_COST_UNIT_LOCAL_VAT_EXCL}: {self.cost_unit_local_VAT_excl},
-{self.FLAG_COST_UNIT_LOCAL_VAT_INCL}: {self.cost_unit_local_VAT_incl},
-{self.FLAG_PRICE_UNIT_LOCAL_VAT_EXCL}: {self.price_unit_local_VAT_excl},
-{self.FLAG_PRICE_UNIT_LOCAL_VAT_INCL}: {self.price_unit_local_VAT_incl},
-{self.FLAG_ACTIVE}: {self.active}
- '''
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_MANUFACTURING_PURCHASE_ORDER_PRODUCT_LINK: self.id_link,
- self.ATTR_ID_MANUFACTURING_PURCHASE_ORDER: self.id_order,
- self.ATTR_ID_PRODUCT_CATEGORY: self.id_category,
- self.ATTR_ID_PRODUCT: self.id_product,
- self.ATTR_ID_PRODUCT_PERMUTATION: self.id_permutation,
- self.FLAG_NAME: self.name_permutation,
- self.FLAG_PRODUCT_VARIATIONS: self.csv_id_pairs_variation,
- self.ATTR_ID_UNIT_MEASUREMENT_QUANTITY: self.id_unit_quantity,
- self.FLAG_QUANTITY_USED: self.quantity_used,
- self.FLAG_QUANTITY_PRODUCED: self.quantity_produced,
- self.ATTR_ID_UNIT_MEASUREMENT_LATENCY_MANUFACTURE: self.id_unit_latency_manufacture,
- self.FLAG_LATENCY_MANUFACTURE: self.latency_manufacture,
- self.FLAG_DISPLAY_ORDER: self.display_order,
- self.FLAG_COST_UNIT_LOCAL_VAT_EXCL: self.cost_unit_local_VAT_excl,
- self.FLAG_COST_UNIT_LOCAL_VAT_INCL: self.cost_unit_local_VAT_incl,
- self.FLAG_PRICE_UNIT_LOCAL_VAT_EXCL: self.price_unit_local_VAT_excl,
- self.FLAG_PRICE_UNIT_LOCAL_VAT_INCL: self.price_unit_local_VAT_incl,
- self.FLAG_ACTIVE: av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json'),
- }
- def to_json_option(self):
- return {
- 'value': self.id_order,
- 'text': self.name_permutation,
- }
- @classmethod
- def from_json(cls, json):
- Helper_App.console_log(f'{cls.__name__}.from_json: {json}')
- link = cls()
- link.id_link = json[cls.ATTR_ID_MANUFACTURING_PURCHASE_ORDER_PRODUCT_LINK]
- link.id_order = json[cls.ATTR_ID_MANUFACTURING_PURCHASE_ORDER]
- link.id_category = json[cls.ATTR_ID_PRODUCT_CATEGORY]
- link.id_product = json[cls.ATTR_ID_PRODUCT]
- link.id_permutation = json.get(cls.ATTR_ID_PRODUCT_PERMUTATION, None)
- link.name_permutation = json.get(cls.FLAG_NAME, None)
- link.csv_id_pairs_variation = json[cls.FLAG_PRODUCT_VARIATIONS]
- link.id_unit_quantity = json[cls.ATTR_ID_UNIT_MEASUREMENT_QUANTITY]
- link.quantity_used = json[cls.FLAG_QUANTITY_USED]
- link.quantity_produced = json[cls.FLAG_QUANTITY_PRODUCED]
- link.id_unit_latency_manufacture = json[cls.ATTR_ID_UNIT_MEASUREMENT_LATENCY_MANUFACTURE]
- link.latency_manufacture = json[cls.FLAG_LATENCY_MANUFACTURE]
- link.display_order = json[cls.FLAG_DISPLAY_ORDER]
- link.cost_unit_local_VAT_excl = json.get(cls.FLAG_COST_UNIT_LOCAL_VAT_EXCL, None)
- link.cost_unit_local_VAT_incl = json.get(cls.FLAG_COST_UNIT_LOCAL_VAT_INCL, None)
- link.active = json[cls.FLAG_ACTIVE]
- return link
-
-class Parameters_Manufacturing_Purchase_Order(Get_Many_Parameters_Base):
- a_get_all_order: bool
- a_get_inactive_order: bool
- a_ids_order: str
- a_ids_permutation: str
- a_date_from: Optional[datetime]
- a_date_to: Optional[datetime]
- def __init__(self, **kwargs):
- super().__init__(**kwargs)
- @classmethod
- def get_default(cls):
- return cls(
- a_get_all_order = True,
- a_get_inactive_order = False,
- a_ids_order = '',
- a_ids_permutation = '',
- a_date_from = None,
- a_date_to = None
- )
- @classmethod
- def from_filters_manufacturing_purchase_order(cls, form):
- parameters = cls.get_default()
- parameters.a_get_inactive_order = form.active.data
- parameters.a_date_from = form.date_from.data
- parameters.a_date_to = form.date_to.data
- return parameters
-
-class Manufacturing_Purchase_Order_Temp(db.Model, Store_Base):
- __tablename__: ClassVar[str] = 'Shop_Manufacturing_Purchase_Order_Temp'
- __table_args__ = { 'extend_existing': True }
- id_temp: int = db.Column(db.Integer, primary_key=True, autoincrement=True)
- id_order: int = db.Column(db.Integer)
- id_currency: int = db.Column(db.Integer)
- active: bool = db.Column(db.Boolean)
- guid: str = db.Column(db.String(36))
- def __init__(self):
- super().__init__()
- self.id_temp = None
- @classmethod
- def from_manufacturing_purchase_order(cls, manufacturing_purchase_order):
- row = cls()
- row.id_order = manufacturing_purchase_order.id_order
- row.id_currency = manufacturing_purchase_order.id_currency
- row.active = 1 if manufacturing_purchase_order.active else 0
- return row
- def __repr__(self):
- return f'''
-id_order: {self.id_order}
-id_currency: {self.id_currency}
-active: {self.active}
-guid: {self.guid}
- '''
-
-class Manufacturing_Purchase_Order_Product_Link_Temp(db.Model, Store_Base):
- __tablename__: ClassVar[str] = 'Shop_Manufacturing_Purchase_Order_Product_Link_Temp'
- __table_args__ = { 'extend_existing': True }
- id_temp: int = db.Column(db.Integer, primary_key=True, autoincrement=True)
- id_link: int = db.Column(db.Integer)
- id_order: int = db.Column(db.Integer)
- # id_category: int = db.Column(db.Integer)
- id_product: int = db.Column(db.Integer)
- id_permutation: int = db.Column(db.Integer)
- csv_list_variations: str = db.Column(db.String)
- id_unit_quantity: int = db.Column(db.Integer)
- quantity_used: float = db.Column(db.Float)
- quantity_produced: float = db.Column(db.Float)
- id_unit_latency_manufacture = db.Column(db.Integer)
- latency_manufacture: int = db.Column(db.Integer)
- display_order: int = db.Column(db.Integer)
- """
- cost_unit_local_VAT_excl: float = db.Column(db.Float)
- cost_unit_local_VAT_incl: float = db.Column(db.Float)
- price_unit_local_VAT_excl: float = db.Column(db.Float)
- price_unit_local_VAT_incl: float = db.Column(db.Float)
- """
- active: bool = db.Column(db.Boolean)
- guid: str = db.Column(db.String(36))
- def __init__(self):
- super().__init__()
- self.id_temp = None
- @classmethod
- def from_manufacturing_purchase_order_product_link(cls, manufacturing_purchase_order_product_link):
- row = cls()
- row.id_link = manufacturing_purchase_order_product_link.id_link
- row.id_order = manufacturing_purchase_order_product_link.id_order
- # row.id_category = manufacturing_purchase_order_product_link.id_category
- row.id_product = manufacturing_purchase_order_product_link.id_product
- row.id_permutation = manufacturing_purchase_order_product_link.id_permutation
- row.csv_list_variations = manufacturing_purchase_order_product_link.csv_id_pairs_variation
- row.id_unit_quantity = manufacturing_purchase_order_product_link.id_unit_quantity
- row.quantity_used = manufacturing_purchase_order_product_link.quantity_used
- row.quantity_produced = manufacturing_purchase_order_product_link.quantity_produced
- row.id_unit_latency_manufacture = manufacturing_purchase_order_product_link.id_unit_latency_manufacture
- row.latency_manufacture = manufacturing_purchase_order_product_link.latency_manufacture
- row.display_order = manufacturing_purchase_order_product_link.display_order
- """
- row.cost_unit_local_VAT_excl = manufacturing_purchase_order_product_link.cost_unit_local_VAT_excl
- row.cost_unit_local_VAT_incl = manufacturing_purchase_order_product_link.cost_unit_local_VAT_incl
- row.price_unit_local_VAT_excl = manufacturing_purchase_order_product_link.price_unit_local_VAT_excl
- row.price_unit_local_VAT_incl = manufacturing_purchase_order_product_link.price_unit_local_VAT_incl
- """
- row.active = 1 if manufacturing_purchase_order_product_link.active else 0
- return row
- def __repr__(self):
- return f'''
-id_link: {self.id_link}
-id_order: {self.id_order}
-id_product: {self.id_product}
-id_permutation: {self.id_permutation}
-csv_list_variations: {self.csv_list_variations}
-id_unit_quantity: {self.id_unit_quantity}
-quantity_used: {self.quantity_used}
-quantity_produced: {self.quantity_produced}
-{self.ATTR_ID_UNIT_MEASUREMENT_LATENCY_MANUFACTURE}: {self.id_unit_latency_manufacture}
-latency_manufacture: {self.latency_manufacture}
-display_order: {self.display_order}
-active: {self.active}
-guid: {self.guid}
- '''
\ No newline at end of file
diff --git a/business_objects/store/order.py b/business_objects/store/order.py
deleted file mode 100644
index 12e02bb8..00000000
--- a/business_objects/store/order.py
+++ /dev/null
@@ -1,89 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Order Business Object
-
-Description:
-Business object for order
-"""
-
-# internal
-import lib.argument_validation as av
-# from lib import data_types
-from business_objects.store.product import Product
-from business_objects.store.delivery_option import Delivery_Option
-from business_objects.store.store_base import Store_Base
-# from forms import Form_Product
-# from models.model_view_store import Model_View_Store # circular
-# external
-# from enum import Enum
-from flask import jsonify
-import locale
-
-
-# VARIABLE INSTANTIATION
-
-# CLASSES
-class Order(Store_Base):
- category: str
- product: Product
- quantity: int
- subtotal: float
- delivery_option: Delivery_Option
- # form: Form_Product
-
- def __new__(cls, category, product, quantity):
- # Initialiser - validation
- _m = 'Product.__new__'
- v_arg_type = 'class attribute'
- av.val_str(category, 'category', _m, v_arg_type=v_arg_type)
- av.val_instance(product, 'product', _m, Product, v_arg_type=v_arg_type)
- av.full_val_float(quantity, 'quantity', _m, product.quantity_min, v_arg_type=v_arg_type)
- return super(Basket_Item, cls).__new__(cls)
-
- def __init__(self, category, product, quantity):
- # Constructor
- self.category = category
- self.product = product
- self.quantity = quantity
- self.subtotal = round(self.product.price_GBP_full * self.quantity, 2)
- """
- self.form = Form_Product()
- if self.form.validate_on_submit():
- # Handle form submission
-
- pass
- """
-
- def update_quantity(self, quantity):
- _m = 'Basket_Item.update_quantity'
- v_arg_type = 'class attribute'
- av.full_val_float(quantity, 'quantity', _m, self.product.quantity_min, v_arg_type=v_arg_type)
- self.quantity = quantity
- self.subtotal = round(self.product.price_GBP_full * self.quantity, 2)
-
- def jsonify(self):
- return jsonify(self)
-
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- 'product_id': self.product.id_product,
- 'price': self.product.price_GBP_full,
- 'quantity': self.quantity
- }
-
- def output_subtotal(self):
- locale.setlocale(locale.LC_ALL, '')
- return locale.format_string("%d", self.subtotal, grouping=True)
-
- def __repr__(self):
- return f'''
- category: {self.category}
- product: {self.product}
- quantity: {self.quantity}
- subtotal: {self.subtotal}
- '''
\ No newline at end of file
diff --git a/business_objects/store/plant.py b/business_objects/store/plant.py
deleted file mode 100644
index 17d506f9..00000000
--- a/business_objects/store/plant.py
+++ /dev/null
@@ -1,93 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Plant Business Object
-
-Description:
-Business object for plant
-"""
-
-# internal
-import lib.argument_validation as av
-from business_objects.address import Address
-from business_objects.store.store_base import Store_Base
-from extensions import db
-from helpers.helper_app import Helper_App
-# external
-from typing import ClassVar
-
-
-class Plant(db.Model, Store_Base):
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_PLANT
- NAME_ATTR_OPTION_TEXT: ClassVar[str] = Store_Base.FLAG_NAME
- __tablename__ = 'Shop_Plant'
- id_plant = db.Column(db.Integer, primary_key=True)
- code = db.Column(db.String(50))
- name = db.Column(db.String(255))
- id_address = db.Column(db.Integer)
- id_user_manager = db.Column(db.Integer)
- active = db.Column(db.Boolean)
-
- # address = None
-
- def __init__(self):
- super().__init__()
- Store_Base.__init__(self)
- self.address = None
- @classmethod
- def from_DB_storage_location(cls, query_row):
- plant = cls()
- plant.id_plant = query_row[1]
- plant.id_address = query_row[2]
- plant.address = Address.from_DB_storage_location(query_row)
- return plant
- @classmethod
- def from_DB_plant(cls, query_row):
- plant = cls()
- plant.id_plant = query_row[0]
- plant.id_address = query_row[1]
- plant.address = Address.from_DB_plant(query_row)
- plant.code = query_row[4]
- plant.name = query_row[5]
- plant.active = query_row[6]
- return plant
- @classmethod
- def from_DB_stock_item(cls, query_row):
- plant = cls()
- plant.id_plant = query_row[5]
- plant.code = query_row[10]
- plant.name = query_row[11]
- return plant
- def __repr__(self):
- return f'''
- {self.ATTR_ID_PLANT}: {self.id_plant}
- {self.FLAG_CODE}: {self.code}
- {self.FLAG_NAME}: {self.name}
- {self.FLAG_ADDRESS}: {self.address}
- {self.ATTR_ID_USER_MANAGER}: {self.id_user_manager}
- {self.FLAG_ACTIVE}: {self.active}
- '''
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_PLANT: self.id_plant,
- self.FLAG_CODE: self.code,
- self.FLAG_NAME: self.name,
- self.FLAG_ADDRESS: None if self.address is None else self.address.to_json(),
- self.ATTR_ID_USER_MANAGER: self.id_user_manager,
- self.FLAG_ACTIVE: 1 if av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json') else 0
- }
- @classmethod
- def from_json(cls, json):
- Helper_App.console_log(f'{cls.__name__}.from_json: {json}')
- plant = cls()
- plant.id_plant = json[cls.ATTR_ID_PLANT],
- plant.code = json[cls.FLAG_CODE],
- plant.name = json[cls.FLAG_NAME],
- plant.address = Address.from_json(json[cls.FLAG_ADDRESS]),
- plant.id_user_manager = json[cls.ATTR_ID_USER_MANAGER],
- plant.active = json[cls.FLAG_ACTIVE]
- return plant
diff --git a/business_objects/store/product.py b/business_objects/store/product.py
deleted file mode 100644
index 4888216d..00000000
--- a/business_objects/store/product.py
+++ /dev/null
@@ -1,917 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Product Business Object
-
-Description:
-Business object for product
-"""
-
-# internal
-import lib.argument_validation as av
-from lib import data_types
-from forms.forms import Form_Basket_Add, Form_Basket_Edit
-from forms.store.product_permutation import Filters_Product_Permutation
-from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base
-from business_objects.store.delivery_option import Delivery_Option
-from business_objects.store.discount import Discount
-from business_objects.store.image import Image
-from business_objects.store.product_permutation import Product_Permutation
-from business_objects.store.product_price import Product_Price
-from business_objects.store.store_base import Store_Base
-from business_objects.store.stock_item import Stock_Item
-from business_objects.store.product_variation import Product_Variation
-from business_objects.store.product_variation_tree import Product_Variation_Tree
-from extensions import db
-from forms.base import Form_Base
-from forms.store.product import Filters_Product
-from helpers.helper_app import Helper_App
-# external
-from dataclasses import dataclass
-from typing import ClassVar, List
-"""
-class Enum_Status_Stock(Enum):
- OUT = 0
- LOW = 1
- IN = 99
-
- def text(self):
- return Enum_Status_Stock.Enum_Status_Stock_Text(self)
-
- def Enum_Status_Stock_Text(status):
- av.val_instance(status, 'category', 'Enum_Status_Stock_Text', Enum_Status_Stock)
- if status == Enum_Status_Stock.OUT:
- return 'Out of stock'
- elif status == Enum_Status_Stock.LOW:
- return 'Low on stock'
- else:
- return 'Fully stocked'
-
- def get_member_by_text(text):
- return data_types.get_enum_member_by_text(Enum_Status_Stock, text.upper())
-
-"""
-class Product(SQLAlchemy_ABC, Store_Base):
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_PRODUCT
- NAME_ATTR_OPTION_TEXT = Store_Base.FLAG_NAME
- # FLAG_HAS_VARIATIONS: ClassVar[str] = 'has-variations-product'
- FLAG_INDEX_PERMUTATION_SELECTED: ClassVar[str] = 'index-permutation-selected'
- FLAG_PRODUCT_VARIATION_TREES: ClassVar[str] = 'variation-trees'
-
- id_product = db.Column(db.Integer, primary_key=True)
- id_category = db.Column(db.Integer)
- name = db.Column(db.String(255))
- id_access_level_required = db.Column(db.Integer)
- active = db.Column(db.Boolean)
- display_order = db.Column(db.Integer)
- can_view = db.Column(db.Boolean)
- can_edit = db.Column(db.Boolean)
- can_admin = db.Column(db.Boolean)
- # form_basket_add: Form_Basket_Add
- # form_basket_edit: Form_Basket_Edit
- # has_variations: bool
- # index_permutation_selected: int
-
- """
- permutations: list = None
- permutation_index: dict = None
- variation_trees: list = None
- """
-
- def __init__(self):
- self.permutations = []
- self.permutation_index = {}
- self.variation_trees = []
- self.index_permutation_selected = None
- self.has_variations = False
- super().__init__()
- Store_Base.__init__(self)
- self.form_basket_add = Form_Basket_Add()
- self.form_basket_edit = Form_Basket_Edit()
- self.name_access_level_required = None
-
- def from_DB_get_many_product_catalogue(query_row):
- _m = 'Product.from_DB_get_many_product_catalogue'
- v_arg_type = 'class attribute'
- product = Product()
- product.id_product = query_row[0]
- product.id_category = query_row[1]
- product.name = query_row[2]
- product.has_variations = av.input_bool(query_row[3], "has_variations", _m, v_arg_type=v_arg_type)
- product.id_access_level_required = query_row[4]
- product.name_access_level_required = query_row[5]
- product.active = av.input_bool(query_row[6], "active", _m, v_arg_type=v_arg_type)
- product.display_order = query_row[7]
- product.can_view = av.input_bool(query_row[8], "can_view", _m, v_arg_type=v_arg_type)
- product.can_edit = av.input_bool(query_row[9], "can_edit", _m, v_arg_type=v_arg_type)
- product.can_admin = av.input_bool(query_row[10], "can_admin", _m, v_arg_type=v_arg_type)
- return product
- """
- def from_permutation(permutation, has_variations = False):
- _m = 'Product.from_permutation'
- v_arg_type = 'class attribute'
- av.val_instance(permutation, 'permutation', _m, Product_Permutation, v_arg_type=v_arg_type)
- product = Product()
- product.has_variations = has_variations
- product.index_permutation_selected = 0
- product.id_product = permutation.id_product
- product.id_category = permutation.id_category
- product.display_order = permutation.display_order
- product.can_view = permutation.can_view
- product.can_edit = permutation.can_edit
- product.can_admin = permutation.can_admin
- product.permutations.append(permutation)
- # product.get_variation_trees()
- return product
- """
- def add_product_permutation(self, permutation):
- _m = 'Product.add_product_permutation'
- av.val_instance(permutation, 'permutation', _m, Product_Permutation)
- try:
- self.permutation_index[permutation.id_permutation]
- raise ValueError(f"{av.error_msg_str(permutation, 'permutation', _m, Product_Permutation)}\nPermutation ID already in product")
- except KeyError:
- self.permutation_index[permutation.id_permutation] = len(self.permutations)
- self.permutations.append(permutation)
- """
- if self.has_variations:
- self.has_variations = False
- """
- if self.index_permutation_selected is None:
- self.index_permutation_selected = self.permutation_index[permutation.id_permutation]
- Helper_App.console_log(f'setting selected permutation for product {self.id_product} to {self.index_permutation_selected}') # :\n{self.permutations[self.index_permutation_selected]}
- """
- def from_permutations(permutations):
- _m = 'Product.from_permutations'
- v_arg_type = 'class attribute'
- if len(permutations) == 0:
- raise ValueError(av.error_msg_str(permutations, 'permutations', _m, list, v_arg_type=v_arg_type))
- product = Product()
- product.has_variations = True
- product.index_permutation_selected = 0
- product.id_product = permutations[0].id_product
- product.id_category = permutations[0].id_category
- product.display_order = permutations[0].display_order
- product.can_view = True
- product.can_edit = True
- product.can_admin = True
- for permutation in permutations:
- product.can_view &= permutation.can_view
- product.can_edit &= permutation.can_edit
- product.can_admin &= permutation.can_admin
- product.permutations.append(permutations)
- product.get_variation_trees()
- return product
- """
- def get_variation_trees(self):
- self.variation_trees = []
- for index_permutation in range(len(self.permutations)):
- permutation = self.permutations[index_permutation]
- variation_tree = permutation.variation_tree # Product_Variation_Tree.from_product_permutation(permutation)
- found_variation_tree_match = False
- for index_tree in range(len(self.variation_trees)):
- if self.variation_trees[index_tree].is_equal(variation_tree):
- found_variation_tree_match = True
- break
- if not found_variation_tree_match and variation_tree is not None:
- self.variation_trees.append(variation_tree)
- def from_DB_Stripe_product(query_row):
- permutation = Product_Permutation.from_DB_Stripe_product(query_row)
- product = Product.from_permutation(permutation)
- return product
- def from_DB_Stripe_price(query_row):
- permutation = Product_Permutation.from_DB_Stripe_price(query_row)
- product = Product.from_permutation(permutation)
- return product
- """
- def from_json(json_basket_item, key_id_product, key_id_permutation):
- permutation = Product_Permutation.from_json(json_basket_item, key_id_product, key_id_permutation)
- product = Product.from_permutation(permutation)
- return product
- """
- @classmethod
- def from_json(cls, json):
- product = cls()
- product.id_product = json[cls.ATTR_ID_PRODUCT]
- product.display_order = json[cls.FLAG_DISPLAY_ORDER]
- product.id_category = json[cls.ATTR_ID_PRODUCT_CATEGORY]
- product.name = json[cls.FLAG_NAME]
- product.has_variations = av.input_bool(json.get(cls.FLAG_HAS_VARIATIONS, None), cls.FLAG_HAS_VARIATIONS, f'{cls.__name__}.from_json')
- product.id_access_level_required = json.get(cls.ATTR_ID_ACCESS_LEVEL, None)
- product.active = 1 if av.input_bool(json[cls.FLAG_ACTIVE], cls.FLAG_ACTIVE, f'{cls.__name__}.from_json') else 0
- product.can_view = json.get(cls.FLAG_CAN_VIEW, None)
- product.can_edit = json.get(cls.FLAG_CAN_EDIT, None)
- product.can_admin = json.get(cls.FLAG_CAN_ADMIN, None)
- return product
- def get_permutation_selected(self):
- try:
- return self.permutations[self.index_permutation_selected]
- except:
- raise ValueError(f'list index {self.index_permutation_selected} out of range')
- def output_lead_time(self):
- return self.get_permutation_selected().output_lead_time()
- def output_delivery_date(self):
- return self.get_permutation_selected().output_delivery_date()
- def output_price(self, is_included_VAT):
- return self.get_permutation_selected().output_price(is_included_VAT)
- def output_price_VAT_incl(self):
- return self.get_permutation_selected().output_price(True)
- def output_price_VAT_excl(self):
- return self.get_permutation_selected().output_price(False)
- def get_price_local(self, is_included_VAT):
- if is_included_VAT:
- return self.get_price_local_VAT_incl()
- else:
- return self.get_price_local_VAT_excl()
- def get_price_local_VAT_incl(self):
- return self.get_permutation_selected().get_price_local_VAT_incl()
- def get_price_local_VAT_excl(self):
- return self.get_permutation_selected().get_price_local_VAT_excl()
- def get_quantity_min(self):
- return self.get_permutation_selected().quantity_min
- def get_id_permutation(self):
- return self.get_permutation_selected().id_permutation
- def get_image_from_index(self, index_image):
- return self.get_permutation_selected().images[index_image]
- def get_name(self):
- return self.get_permutation_selected().name
- def get_description(self):
- return self.get_permutation_selected().description
- def output_currency(self):
- return self.get_permutation_selected().get_price().symbol_currency
- """
- def add_form_basket_add(self):
- self.form_basket_add = None
-
- def add_form_basket_edit(self):
- self.form_basket_edit = None
- """
- def __repr__(self):
- return f'''Product
- id_product: {self.id_product}
- id_category: {self.id_category}
- name: {self.name}
- display_order: {self.display_order}
- can_view: {self.can_view}
- can_edit: {self.can_edit}
- can_admin: {self.can_admin}
- has_variations: {self.has_variations}
- permutations: {self.permutations}
- variation trees: {self.variation_trees}
- active: {self.active}
- '''
- """
- def get_index_permutation_from_id(self, id_permutation):
- if id_permutation is None and not self.has_variations:
- return 0
- for index_permutation in range(len(self.permutations)):
- permutation = self.permutations[index_permutation]
- if permutation.id_permutation == id_permutation:
- return index_permutation
- raise ValueError(f"{av.error_msg_str(id_permutation, 'id_permutation', 'Product.get_index_permutation_from_id', int)}\nPermutation ID not found.")
- """
- """
- def add_product_variation(self, variation):
- av.val_instance(variation, 'variation', 'Product.add_product_variation', Product_Variation)
- # Helper_App.console_log(f'variation: {variation}')
- index_permutation = self.permutation_index[variation.id_permutation] # self.get_index_permutation_from_id(variation.id_permutation)
- self.permutations[index_permutation].add_product_variation(variation)
- """
- def add_product_variation_type(self, variation_type):
- variation = variation_type.variations[0]
- index_permutation = self.permutation_index[variation.id_permutation]
- self.permutations[index_permutation].add_product_variation_type(variation_type)
- def add_product_price(self, price):
- av.val_instance(price, 'price', 'Product.add_product_price', Product_Price)
- index_permutation = self.permutation_index[price.id_permutation] # self.get_index_permutation_from_id(price.id_permutation)
- self.permutations[index_permutation].add_product_price(price)
- def add_product_image(self, image):
- av.val_instance(image, 'image', 'Product.add_product_image', Image)
- index_permutation = self.permutation_index[image.id_permutation] # self.get_index_permutation_from_id(image.id_permutation)
- self.permutations[index_permutation].add_product_image(image)
- def add_delivery_option(self, delivery_option):
- av.val_instance(delivery_option, 'delivery_option', 'Product.add_delivery_option', Delivery_Option)
- index_permutation = self.permutation_index[delivery_option.id_permutation] # self.get_index_permutation_from_id(delivery_option.id_permutation)
- self.permutations[index_permutation].add_delivery_option(delivery_option)
- def add_product_price_discount(self, discount):
- av.val_instance(discount, 'discount', 'Product.add_product_price_discount', Discount)
- index_permutation = self.permutation_index[discount.id_permutation] # self.get_index_permutation_from_id(discount.id_permutation)
- self.permutations[index_permutation].add_product_price_discount(discount)
- def add_stock_item(self, stock_item):
- av.val_instance(stock_item, 'stock_item', 'Product.add_stock_item', Stock_Item)
- index_permutation = self.permutation_index[stock_item.id_permutation]
- self.permutations[index_permutation].add_stock_item(stock_item)
- def has_permutations(self):
- return len(self.permutations) > 0
- def is_available(self):
- if len(self.permutations) == 0:
- return False
- for permutation in self.permutations:
- if permutation.is_available():
- return True
- return False
- def to_permutation_row_list(self):
- list_rows = []
- for permutation in self.permutations:
- list_rows.append(permutation.to_row_permutation())
- return list_rows
- """
- @classmethod
- def from_json(cls, json):
- product = cls()
- product.id_product = json[cls.ATTR_ID_PRODUCT]
- product.id_category = json[cls.ATTR_ID_PRODUCT_CATEGORY]
- product.name = json[cls.FLAG_NAME]
- product.display_order = json[cls.FLAG_DISPLAY_ORDER]
- product.can_view = json[cls.FLAG_CAN_VIEW]
- product.can_edit = json[cls.FLAG_CAN_EDIT]
- product.can_admin = json[cls.FLAG_CAN_ADMIN]
- product.has_variations = json[cls.FLAG_HAS_VARIATIONS]
- product.index_permutation_selected = json[cls.FLAG_INDEX_PERMUTATION_SELECTED]
- product.permutations = []
- for json_permutation in json[cls.ATTR_ID_PRODUCT_PERMUTATION]:
- product.permutations.append(Product_Permutation.from_json(json_permutation))
- product.variation_trees = []
- for json_tree in json[cls.FLAG_PRODUCT_VARIATION_TREES]:
- product.variation_trees.append(Product_Variation_Tree.from_json(json_tree))
- return product
- """
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_PRODUCT: self.id_product,
- self.ATTR_ID_PRODUCT_CATEGORY: self.id_category,
- self.FLAG_NAME: self.name,
- self.FLAG_DISPLAY_ORDER: self.display_order,
- self.FLAG_CAN_VIEW: self.can_view,
- self.FLAG_CAN_EDIT: self.can_edit,
- self.FLAG_CAN_ADMIN: self.can_admin,
- self.FLAG_HAS_VARIATIONS: self.has_variations,
- self.FLAG_INDEX_PERMUTATION_SELECTED: self.index_permutation_selected,
- self.ATTR_ID_PRODUCT_PERMUTATION: [permutation.to_json() for permutation in self.permutations],
- self.FLAG_PRODUCT_VARIATION_TREES: [tree.to_json() for tree in self.variation_trees]
- }
- def to_json_option(self):
- return {
- 'value': self.id_product,
- 'text': self.name
- }
- def get_variation_types_unique(self):
- list_types = []
- for tree in self.variation_trees:
- for type in tree.get_types_unique():
- if type not in list_types:
- list_types.append(type)
- return list_types
- """
- def get_json_str_types_variation_trees(self):
- json_str = ''
- for tree in self.variation_trees:
- if json_str != '':
- json_str += '\n'
- json_str += tree.get_json_str_types()
- return json_str
- def get_text_input_variation_types(self):
- text_input = ''
- for tree in self.variation_trees:
- if text_input != '':
- text_input += '\n'
- text_input += tree.get_text_input_types()
- return text_input
- """
- def get_csv_ids_permutation(self):
- csv = ''
- for permutation in self.permutations:
- if csv != '':
- csv += ','
- csv += str(permutation.id_permutation)
- return csv
-
-
-class Parameters_Product(Get_Many_Parameters_Base):
- # id_user: str
- get_all_product_category: bool
- get_inactive_product_category: bool
- # get_first_product_category_only: bool
- ids_product_category: str
- get_all_product: bool
- get_inactive_product: bool
- # get_first_product_only: bool
- ids_product: str
- get_all_permutation: bool
- get_inactive_permutation: bool
- # get_first_permutation_only: bool
- ids_permutation: str
- get_all_image: bool
- get_inactive_image: bool
- # get_first_image_only: bool
- ids_image: str
- """
- get_all_region: bool
- get_inactive_region: bool
- get_first_region_only: bool
- ids_region: str
- get_all_currency: bool
- get_inactive_currency: bool
- get_first_currency_only: bool
- ids_currency: str
- get_all_discount: bool
- get_inactive_discount: bool
- ids_discount: str
- """
- get_products_quantity_stock_below_min: bool
-
- def to_json(self):
- return {
- # 'a_id_user': None,
- 'a_get_all_product_category': self.get_all_product_category,
- 'a_get_inactive_product_category': self.get_inactive_product_category,
- # 'a_get_first_product_category_only': self.get_first_product_category_only,
- 'a_ids_product_category': self.ids_product_category,
- 'a_get_all_product': self.get_all_product,
- 'a_get_inactive_product': self.get_inactive_product,
- # 'a_get_first_product_only': self.get_first_product_only,
- 'a_ids_product': self.ids_product,
- 'a_get_all_permutation': self.get_all_permutation,
- 'a_get_inactive_permutation': self.get_inactive_permutation,
- # 'a_get_first_permutation_only': self.get_first_permutation_only,
- 'a_ids_permutation': self.ids_permutation,
- 'a_get_all_image': self.get_all_image,
- 'a_get_inactive_image': self.get_inactive_image,
- # 'a_get_first_image_only': self.get_first_image_only,
- 'a_ids_image': self.ids_image,
- # 'a_get_all_delivery_region': self.get_all_region,
- # 'a_get_inactive_delivery_region': self.get_inactive_region,
- # 'a_get_first_delivery_region_only': self.get_first_region_only,
- # 'a_ids_delivery_region': self.ids_region,
- # 'a_get_all_currency': self.get_all_currency,
- # 'a_get_inactive_currency': self.get_inactive_currency,
- # 'a_get_first_currency_only': self.get_first_currency_only,
- # 'a_ids_currency': self.ids_currency,
- # 'a_get_all_discount': self.get_all_discount,
- # 'a_get_inactive_discount': self.get_inactive_discount,
- # 'a_ids_discount': self.ids_discount,
- 'a_get_products_quantity_stock_below_min': self.get_products_quantity_stock_below_min
- }
-
- @staticmethod
- def from_form_filters_product(form):
- # if not (form is Filters_Product_Permutation): raise ValueError(f'Invalid form type: {type(form)}')
- av.val_instance(form, 'form', 'Parameters_Product.from_form', Filters_Product)
- has_filter_category = not (form.id_category.data == '0' or form.id_category.data == '' or form.id_category.data is None)
- is_not_empty = av.input_bool(form.is_not_empty.data, "is_not_empty", "Parameters_Product.from_form_filters_product")
- active = av.input_bool(form.active.data, "active", "Parameters_Product.from_form_filters_product")
- return Parameters_Product(
- get_all_product_category = not has_filter_category,
- get_inactive_product_category = not active,
- # get_first_product_category_only = False,
- ids_product_category = form.id_category.data if form.id_category.data is not None else '',
- get_all_product = True,
- get_inactive_product = not active,
- # get_first_product_only = False,
- ids_product = '',
- get_all_permutation = True,
- get_inactive_permutation = not active,
- # get_first_permutation_only = False,
- ids_permutation = '',
- get_all_image = False,
- get_inactive_image = False,
- # get_first_image_only = False,
- ids_image = '',
- # get_all_region = False,
- # get_inactive_region = False,
- # get_first_region_only = False,
- # ids_region = '',
- # get_all_currency = False,
- # get_inactive_currency = False,
- # get_first_currency_only = False,
- # ids_currency = '',
- # get_all_discount = False,
- # get_inactive_discount = False,
- # ids_discount = '',
- get_products_quantity_stock_below_min = False
- )
- @staticmethod
- def from_form_filters_product_permutation(form):
- # if not (form is Filters_Product_Permutation): raise ValueError(f'Invalid form type: {type(form)}')
- # av.val_instance(form, 'form', 'Parameters_Product.from_form', Filters_Product_Permutation)
- has_category_filter = not (form.id_category.data == '0' or form.id_category.data == '' or form.id_category.data is None)
- has_product_filter = not (form.id_product.data == '0' or form.id_product.data == '' or form.id_product.data is None)
- get_permutations_stock_below_min = av.input_bool(form.is_out_of_stock.data, "is_out_of_stock", "Parameters_Product.from_form_filters_product_permutation")
- get_inactive = not av.input_bool(form.active.data, "active", "Parameters_Product.from_form_filters_product_permutation")
- Helper_App.console_log(f'form question: {type(form.is_out_of_stock)}\nbool interpretted: {get_permutations_stock_below_min}\nform question: {type(form.active)}\nget_inactive:{get_inactive}\ntype form: {type(form)}')
- return Parameters_Product(
- get_all_product_category = not has_category_filter,
- get_inactive_product_category = get_inactive,
- # get_first_product_category_only = False,
- ids_product_category = form.id_category.data if form.id_category.data is not None else '',
- get_all_product = not has_product_filter,
- get_inactive_product = get_inactive,
- # get_first_product_only = False,
- ids_product = form.id_product.data if form.id_product.data is not None else '',
- get_all_permutation = not get_permutations_stock_below_min,
- get_inactive_permutation = get_inactive,
- # get_first_permutation_only = False,
- ids_permutation = '',
- get_all_image = False,
- get_inactive_image = False,
- # get_first_image_only = False,
- ids_image = '',
- # get_all_region = False,
- # get_inactive_region = False,
- # get_first_region_only = False,
- # ids_region = '',
- # get_all_currency = False,
- # get_inactive_currency = False,
- # get_first_currency_only = False,
- # ids_currency = '',
- # get_all_discount = False,
- # get_inactive_discount = False,
- # ids_discount = '',
- get_products_quantity_stock_below_min = get_permutations_stock_below_min
- )
-
- @staticmethod
- def get_default():
- return Parameters_Product(
- get_all_product_category = True,
- get_inactive_product_category = False,
- # get_first_product_category_only = False,
- ids_product_category = '',
- get_all_product = True,
- get_inactive_product = False,
- # get_first_product_only = False,
- ids_product = '',
- get_all_permutation = True,
- get_inactive_permutation = False,
- # get_first_permutation_only = False,
- ids_permutation = '',
- get_all_image = True,
- get_inactive_image = False,
- # get_first_image_only = False,
- ids_image = '',
- # get_all_region = True,
- # et_inactive_region = False,
- # get_first_region_only = False,
- # ids_region = '',
- # get_all_currency = True,
- # get_inactive_currency = False,
- # get_first_currency_only = False,
- # ids_currency = '',
- # get_all_discount = True,
- # get_inactive_discount = False,
- # ids_discount = '',
- get_products_quantity_stock_below_min = True
- )
-
- @classmethod
- def from_json(cls, json):
- return cls(
- get_all_product_category = json.get('a_get_all_product_category', False),
- get_inactive_product_category = json.get('a_get_inactive_product_category', False),
- # get_first_product_category_only = json.get('a_get_first_product_category_only', False),
- ids_product_category = json.get('a_ids_product_category', ''),
- get_all_product = json.get('a_get_all_product', False),
- get_inactive_product = json.get('a_get_inactive_product', False),
- # get_first_product_only = json.get('a_get_first_product_only', False),
- ids_product = json.get('a_ids_product', ''),
- get_all_permutation = json.get('a_get_all_permutation', False),
- get_inactive_permutation = json.get('a_get_inactive_permutation', False),
- # get_first_permutation_only = json.get('a_get_first_permutation_only', False),
- ids_permutation = json.get('a_ids_permutation', ''),
- get_all_image = json.get('a_get_all_image', False),
- get_inactive_image = json.get('a_get_inactive_image', False),
- # get_first_image_only = json.get('a_get_first_image_only', False),
- ids_image = json.get('a_ids_image', ''),
- # get_all_region = json.get('a_get_all_region', False),
- # get_inactive_region = json.get('a_get_inactive_region', False),
- # get_first_region_only = json.get('a_get_first_region_only', False),
- # ids_region = json.get('a_ids_region', ''),
- # get_all_currency = json.get('a_get_all_currency', False),
- # get_inactive_currency = json.get('a_get_inactive_currency', False),
- # get_first_currency_only = json.get('a_get_first_currency_only', False),
- # ids_currency = json.get('a_ids_currency', ''),
- # get_all_discount = json.get('a_get_all_discount', False),
- # get_inactive_discount = json.get('a_get_inactive_discount', False),
- # ids_discount = json.get('a_ids_discount', ''),
- get_products_quantity_stock_below_min = json.get('a_get_products_quantity_stock_below_min', False)
- )
-
- @classmethod
- def from_filters_product_category(cls, filters_category):
- return cls(
- get_all_product_category = True,
- get_inactive_product_category = not filters_category.active.data,
- ids_product_category = '',
- get_all_product = True,
- get_inactive_product = False,
- ids_product = '',
- get_all_permutation = True,
- get_inactive_permutation = False,
- ids_permutation = '',
- get_all_image = False,
- get_inactive_image = False,
- ids_image = '',
- get_products_quantity_stock_below_min = False
- )
- @classmethod
- def from_filters_stock_item(cls, filters_stock_item):
- return cls.from_form_filters_product_permutation(filters_stock_item)
-
-"""
-class Parameters_Product(Get_Many_Parameters_Base):
- # id_user: str
- get_all_product_category: bool
- get_inactive_product_category: bool
- # get_first_product_category_only: bool
- ids_product_category: str
- get_all_product: bool
- get_inactive_product: bool
- # get_first_product_only: bool
- ids_product: str
- get_all_permutation: bool
- get_inactive_permutation: bool
- # get_first_permutation_only: bool
- ids_permutation: str
- get_all_image: bool
- get_inactive_image: bool
- # get_first_image_only: bool
- ids_image: str
- ""
- get_all_region: bool
- get_inactive_region: bool
- get_first_region_only: bool
- ids_region: str
- get_all_currency: bool
- get_inactive_currency: bool
- get_first_currency_only: bool
- ids_currency: str
- get_all_discount: bool
- get_inactive_discount: bool
- ids_discount: str
- ""
- get_products_quantity_stock_below_min: bool
-
- def __init__(self, a_id_user, **kwargs):
- super().__init__(a_id_user, **kwargs)
-
- def to_json(self):
- return {
- 'a_id_user': self.a_id_user,
- 'a_get_all_product_category': self.get_all_product_category,
- 'a_get_inactive_product_category': self.get_inactive_product_category,
- # 'a_get_first_product_category_only': self.get_first_product_category_only,
- 'a_ids_product_category': self.ids_product_category,
- 'a_get_all_product': self.get_all_product,
- 'a_get_inactive_product': self.get_inactive_product,
- # 'a_get_first_product_only': self.get_first_product_only,
- 'a_ids_product': self.ids_product,
- 'a_get_all_permutation': self.get_all_permutation,
- 'a_get_inactive_permutation': self.get_inactive_permutation,
- # 'a_get_first_permutation_only': self.get_first_permutation_only,
- 'a_ids_permutation': self.ids_permutation,
- 'a_get_all_image': self.get_all_image,
- 'a_get_inactive_image': self.get_inactive_image,
- # 'a_get_first_image_only': self.get_first_image_only,
- 'a_ids_image': self.ids_image,
- # 'a_get_all_delivery_region': self.get_all_region,
- # 'a_get_inactive_delivery_region': self.get_inactive_region,
- # 'a_get_first_delivery_region_only': self.get_first_region_only,
- # 'a_ids_delivery_region': self.ids_region,
- # 'a_get_all_currency': self.get_all_currency,
- # 'a_get_inactive_currency': self.get_inactive_currency,
- # 'a_get_first_currency_only': self.get_first_currency_only,
- # 'a_ids_currency': self.ids_currency,
- # 'a_get_all_discount': self.get_all_discount,
- # 'a_get_inactive_discount': self.get_inactive_discount,
- # 'a_ids_discount': self.ids_discount,
- 'a_get_products_quantity_stock_below_min': self.get_products_quantity_stock_below_min
- }
-
- @staticmethod
- def from_form_filters_product(form, id_user):
- # if not (form is Filters_Product_Permutation): raise ValueError(f'Invalid form type: {type(form)}')
- av.val_instance(form, 'form', 'Parameters_Product.from_form', Filters_Product)
- has_filter_category = not (form.id_category.data == '0' or form.id_category.data == '')
- is_not_empty = av.input_bool(form.is_not_empty.data, "is_not_empty", "Parameters_Product.from_form_filters_product")
- active = av.input_bool(form.active.data, "active", "Parameters_Product.from_form_filters_product")
- return Parameters_Product(
- a_id_user = id_user,
- get_all_product_category = not has_filter_category,
- get_inactive_product_category = not active,
- # get_first_product_category_only = False,
- ids_product_category = str(form.id_category.data),
- get_all_product = True,
- get_inactive_product = not active,
- # get_first_product_only = False,
- ids_product = '',
- get_all_permutation = True,
- get_inactive_permutation = not active,
- # get_first_permutation_only = False,
- ids_permutation = '',
- get_all_image = False,
- get_inactive_image = False,
- # get_first_image_only = False,
- ids_image = '',
- # get_all_region = False,
- # get_inactive_region = False,
- # get_first_region_only = False,
- # ids_region = '',
- # get_all_currency = False,
- # get_inactive_currency = False,
- # get_first_currency_only = False,
- # ids_currency = '',
- # get_all_discount = False,
- # get_inactive_discount = False,
- # ids_discount = '',
- get_products_quantity_stock_below_min = False
- )
- @staticmethod
- def from_form_filters_product_permutation(form):
- # if not (form is Filters_Product_Permutation): raise ValueError(f'Invalid form type: {type(form)}')
- # av.val_instance(form, 'form', 'Parameters_Product.from_form', Form_Base)
- has_category_filter = not (form.id_category.data is None or form.id_category.data == '0' or form.id_category.data == '')
- has_product_filter = not (form.id_product.data is None or form.id_product.data == '0' or form.id_product.data == '')
- get_permutations_stock_below_min = av.input_bool(form.is_out_of_stock.data, "is_out_of_stock", "Parameters_Product.from_form")
- Helper_App.console_log(f'form question: {type(form.is_out_of_stock)}\nbool interpretted: {get_permutations_stock_below_min}\type form: {type(form)}')
- return Parameters_Product(
- get_all_product_category = not has_category_filter,
- get_inactive_product_category = False,
- # get_first_product_category_only = False,
- ids_product_category = str(form.id_category.data) if has_category_filter else '',
- get_all_product = not has_product_filter,
- get_inactive_product = False,
- # get_first_product_only = False,
- ids_product = str(form.id_product.data) if has_product_filter else '',
- get_all_permutation = not get_permutations_stock_below_min,
- get_inactive_permutation = False,
- # get_first_permutation_only = False,
- ids_permutation = '',
- get_all_image = False,
- get_inactive_image = False,
- # get_first_image_only = False,
- ids_image = '',
- # get_all_region = False,
- # get_inactive_region = False,
- # get_first_region_only = False,
- # ids_region = '',
- # get_all_currency = False,
- # get_inactive_currency = False,
- # get_first_currency_only = False,
- # ids_currency = '',
- # get_all_discount = False,
- # get_inactive_discount = False,
- # ids_discount = '',
- get_products_quantity_stock_below_min = get_permutations_stock_below_min
- )
-
- @classmethod
- def get_default(cls, id_user):
- return cls(
- a_id_user = id_user,
- get_all_product_category = True,
- get_inactive_product_category = False,
- # get_first_product_category_only = False,
- ids_product_category = '',
- get_all_product = True,
- get_inactive_product = False,
- # get_first_product_only = False,
- ids_product = '',
- get_all_permutation = True,
- get_inactive_permutation = False,
- # get_first_permutation_only = False,
- ids_permutation = '',
- get_all_image = True,
- get_inactive_image = False,
- # get_first_image_only = False,
- ids_image = '',
- # get_all_region = True,
- # et_inactive_region = False,
- # get_first_region_only = False,
- # ids_region = '',
- # get_all_currency = True,
- # get_inactive_currency = False,
- # get_first_currency_only = False,
- # ids_currency = '',
- # get_all_discount = True,
- # get_inactive_discount = False,
- # ids_discount = '',
- get_products_quantity_stock_below_min = True
- )
-
- @classmethod
- def from_json(cls, json):
- return cls(
- get_all_product_category = json.get('a_get_all_product_category', False),
- get_inactive_product_category = json.get('a_get_inactive_product_category', False),
- # get_first_product_category_only = json.get('a_get_first_product_category_only', False),
- ids_product_category = json.get('a_ids_product_category', ''),
- get_all_product = json.get('a_get_all_product', False),
- get_inactive_product = json.get('a_get_inactive_product', False),
- # get_first_product_only = json.get('a_get_first_product_only', False),
- ids_product = json.get('a_ids_product', ''),
- get_all_permutation = json.get('a_get_all_permutation', False),
- get_inactive_permutation = json.get('a_get_inactive_permutation', False),
- # get_first_permutation_only = json.get('a_get_first_permutation_only', False),
- ids_permutation = json.get('a_ids_permutation', ''),
- get_all_image = json.get('a_get_all_image', False),
- get_inactive_image = json.get('a_get_inactive_image', False),
- # get_first_image_only = json.get('a_get_first_image_only', False),
- ids_image = json.get('a_ids_image', ''),
- # get_all_region = json.get('a_get_all_region', False),
- # get_inactive_region = json.get('a_get_inactive_region', False),
- # get_first_region_only = json.get('a_get_first_region_only', False),
- # ids_region = json.get('a_ids_region', ''),
- # get_all_currency = json.get('a_get_all_currency', False),
- # get_inactive_currency = json.get('a_get_inactive_currency', False),
- # get_first_currency_only = json.get('a_get_first_currency_only', False),
- # ids_currency = json.get('a_ids_currency', ''),
- # get_all_discount = json.get('a_get_all_discount', False),
- # get_inactive_discount = json.get('a_get_inactive_discount', False),
- # ids_discount = json.get('a_ids_discount', ''),
- get_products_quantity_stock_below_min = json.get('a_get_products_quantity_stock_below_min', False)
- )
-
- @classmethod
- def from_filters_product_category(cls, filters_category):
- return cls(
- get_all_product_category = True,
- get_inactive_product_category = filters_category.active.data,
- ids_product_category = '',
- get_all_product = True,
- get_inactive_product = False,
- ids_product = '',
- get_all_permutation = True,
- get_inactive_permutation = False,
- ids_permutation = '',
- get_all_image = False,
- get_inactive_image = False,
- ids_image = '',
- get_products_quantity_stock_below_min = False
- )
- @classmethod
- def from_filters_stock_item(cls, filters_stock_item):
- return cls.from_form_filters_product_permutation(filters_stock_item)
-"""
-
-class Product_Temp(db.Model, Store_Base):
- __tablename__ = 'Shop_Product_Temp'
- __table_args__ = { 'extend_existing': True }
- id_temp: int = db.Column(db.Integer, primary_key=True, autoincrement=True)
- id_product: int = db.Column(db.Integer)
- id_category: int = db.Column(db.Integer)
- name: str = db.Column(db.String(255))
- has_variations: bool = db.Column(db.Boolean)
- id_access_level_required: int = db.Column(db.Integer)
- active: bool = db.Column(db.Boolean)
- display_order: int = db.Column(db.Integer)
- guid: str = db.Column(db.BINARY(36))
- # created_on: datetime = db.Column(db.DateTime)
- # created_by: int = db.Column(db.Integer)
- def __init__(self):
- self.id_temp = None
- @classmethod
- def from_product(cls, product):
- row = cls()
- row.id_product = product.id_product[0] if isinstance(product.id_product, tuple) else product.id_product
- row.id_category = product.id_category[0] if isinstance(product.id_category, tuple) else product.id_category
- row.name = product.name[0] if isinstance(product.name, tuple) else product.name
- row.has_variations = product.has_variations
- row.id_access_level_required = product.id_access_level_required[0] if isinstance(product.id_access_level_required, tuple) else product.id_access_level_required
- row.active = product.active
- row.display_order = product.display_order
- """
- row.guid = product.guid
- row.created_on = product.created_on
- row.created_by = product.created_by
- """
- return row
- def to_json(self):
- return {
- 'id_product': self.id_product,
- 'id_category': self.id_category,
- 'name': self.name,
- 'has_variations': av.input_bool(self.has_variations, self.FLAG_HAS_VARIATIONS, f'{self.__class__.__name__}.to_json'),
- 'id_access_level_required': self.id_access_level_required,
- 'active': av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json'),
- 'display_order': self.display_order,
- 'guid': self.guid,
- }
- """
- 'created_on': self.created_on,
- 'created_by': self.created_by
- """
- def __repr__(self):
- return f'''Product_Temp
- id_product: {self.id_product}
- id_category: {self.id_category}
- name: {self.name}
- has_variations: {self.has_variations}
- id_access_level_required: {self.id_access_level_required}
- active: {self.active}
- display_order: {self.display_order}
- guid: {self.guid}
- '''
\ No newline at end of file
diff --git a/business_objects/store/product_category.py b/business_objects/store/product_category.py
deleted file mode 100644
index e5f78c97..00000000
--- a/business_objects/store/product_category.py
+++ /dev/null
@@ -1,529 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Product Category Business Object
-
-Description:
-Business object for product category
-"""
-
-# internal
-import lib.argument_validation as av
-from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base
-from business_objects.store.product import Product, Product_Permutation, Product_Price
-# from business_objects.store.product_variation import Product_Variation
-from business_objects.store.product_variation_type import Product_Variation_Type
-from business_objects.store.image import Image
-from business_objects.store.delivery_option import Delivery_Option
-from business_objects.store.discount import Discount
-from business_objects.store.stock_item import Stock_Item
-from business_objects.store.store_base import Store_Base
-from extensions import db
-from helpers.helper_app import Helper_App
-# external
-from pydantic import BaseModel
-from typing import ClassVar
-
-
-class Product_Category(SQLAlchemy_ABC, Store_Base):
- FLAG_ACCESS_LEVEL_REQUIRED: ClassVar[str] = 'id_access_level_required'
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_PRODUCT_CATEGORY
- NAME_ATTR_OPTION_TEXT: ClassVar[str] = Store_Base.FLAG_NAME
-
- __tablename__ = 'Shop_Product_Category'
- id_category = db.Column(db.Integer, primary_key=True)
- code = db.Column(db.String(50))
- name = db.Column(db.String(255))
- description = db.Column(db.String(4000))
- id_access_level_required = db.Column(db.Integer)
- name_access_level_required = db.Column(db.String(255))
- display_order = db.Column(db.Integer)
- active = db.Column(db.Boolean)
- can_view = db.Column(db.Boolean)
- can_edit = db.Column(db.Boolean)
- can_admin = db.Column(db.Boolean)
- created_on = db.Column(db.DateTime)
- created_by = db.Column(db.Integer)
-
- """
- products: list = None # []
- product_index: dict = None # {}
- """
-
- def __init__(self):
- self.products = []
- self.product_index = {}
- super().__init__()
- Store_Base.__init__(self)
- self.name_access_level_required = None
- @classmethod
- def from_DB_get_many_product_catalogue(cls, query_row):
- category = cls()
- category.id_category = query_row[0]
- category.code = query_row[1]
- category.name = query_row[2]
- category.description = query_row[3]
- category.id_access_level_required = query_row[4]
- category.name_access_level_required = query_row[5]
- category.display_order = query_row[6]
- category.active = av.input_bool(query_row[7], cls.FLAG_ACTIVE, f'{cls.__name__}.from_DB_get_many_product_catalogue')
- category.can_view = av.input_bool(query_row[8], cls.FLAG_CAN_VIEW, f'{cls.__name__}.from_DB_get_many_product_catalogue')
- category.can_edit = av.input_bool(query_row[9], cls.FLAG_CAN_EDIT, f'{cls.__name__}.from_DB_get_many_product_catalogue')
- category.can_admin = av.input_bool(query_row[10], cls.FLAG_CAN_ADMIN, f'{cls.__name__}.from_DB_get_many_product_catalogue')
- return category
- """
- def key_product_index_from_ids_product_permutation(id_product, id_permutation):
- return f'{id_product},{"" if id_permutation is None else id_permutation}'
- def key_product_index_from_product(product):
- av.val_instance(product, 'product', 'Category.key_product_index_from_product', Product)
- return f'{product.id_product},{"" if product.id_permutation is None else product.id_permutation}'
- """
- def get_index_product(self, product):
- return self.get_index_product_from_id(product.id_product)
- def get_index_product_from_id(self, id_product):
- try:
- return self.product_index[id_product]
- except:
- raise KeyError(f'product id: {id_product} not in product index keys: {self.product_index.keys()} with category id: {self.id_category}')
- def get_index_product_from_id_permutation(self, id_permutation):
- for product in self.products:
- try:
- index_permutation = product.get_index_permutation_from_id(id_permutation)
- return self.get_index_product(product)
- except:
- pass
- raise KeyError(f'permutation id: {id_permutation} not in category id: {self.id_category}')
- def add_product(self, product):
- _m = 'Category.add_product'
- av.val_instance(product, 'product', _m, Product)
- # self.product_index.append(len(self.products))
- # self.product_index[Category.key_product_index_from_ids_product_permutation(product.id_product, product.id_permutation)] = len(self.products)
- try:
- self.get_index_product(product)
- Helper_App.console_log(f'category: {self}')
- raise ValueError(f"{av.error_msg_str(product, 'product', _m, Product)}\nProduct already in category.")
- except KeyError:
- self.product_index[product.id_product] = len(self.products)
- self.products.append(product)
- def add_product_permutation(self, permutation):
- _m = 'Category.add_product_permutation'
- av.val_instance(permutation, 'permutation', _m, Product_Permutation)
- # self.product_index.append(len(self.products))
- # self.product_index[Category.key_product_index_from_ids_product_permutation(product.id_product, product.id_permutation)] = len(self.products)
- index_product = self.get_index_product_from_id(permutation.id_product)
- # index_product = self.product_index[permutation.id_product]
- self.products[index_product].add_product_permutation(permutation)
- """
- def add_product_variation(self, variation):
- av.val_instance(variation, 'variation', 'Category.add_product_variation', Product_Variation)
- index_product = self.get_index_product_from_id(variation.id_product)
- self.products[index_product].add_product_variation(variation)
- """
- def add_product_variation_type(self, variation_type):
- av.val_instance(variation_type, 'variation_type', 'Category.add_product_variation_type', Product_Variation_Type)
- variation = variation_type.variations[0]
- index_product = self.get_index_product_from_id(variation.id_product)
- self.products[index_product].add_product_variation_type(variation_type)
- def add_product_price(self, price):
- av.val_instance(price, 'price', 'Category.add_product_price', Product_Price)
- index_product = self.get_index_product_from_id(price.id_product)
- self.products[index_product].add_product_price(price)
- def add_product_image(self, image):
- av.val_instance(image, 'image', 'Category.add_product_image', Image)
- index_product = self.get_index_product_from_id(image.id_product)
- self.products[index_product].add_product_image(image)
- def add_delivery_option(self, delivery_option):
- av.val_instance(delivery_option, 'delivery_option', 'Category.add_delivery_option', Delivery_Option)
- index_product = self.get_index_product_from_id(delivery_option.id_product)
- self.products[index_product].add_delivery_option(delivery_option)
- def add_product_price_discount(self, discount):
- av.val_instance(discount, 'discount', 'Category.add_product_price_discount', Discount)
- index_product = self.get_index_product_from_id(discount.id_product)
- self.products[index_product].add_product_price_discount(discount)
- def add_stock_item(self, stock_item):
- av.val_instance(stock_item, 'stock_item', 'Category.add_stock_item', Stock_Item)
- index_product = self.get_index_product_from_id(stock_item.id_product)
- self.products[index_product].add_stock_item(stock_item)
- def get_all_product_variation_trees(self):
- for product in self.products:
- if product.has_variations:
- Helper_App.console_log(f'product with id:{product.id_product} has variations')
- product.get_variation_trees()
- """
- def index_product_from_ids_product_permutation(self, id_product, id_permutation):
- key = Category.key_product_index_from_ids_product_permutation(id_product, id_permutation)
- Helper_App.console_log(f'product_index: {self.product_index}')
- Helper_App.console_log(f'Key Error: {key}')
- try:
- return self.product_index[key]
- except KeyError:
- pass
- """
- def __repr__(self):
- return f'''
- id: {self.id_category[0] if isinstance(self.id_category, tuple) else self.id_category}
- code: {self.code[0] if isinstance(self.code, tuple) else self.code}
- name: {self.name[0] if isinstance(self.name, tuple) else self.name}
- description: {self.description[0] if isinstance(self.description, tuple) else self.description}
- access_level: {self.name_access_level_required[0] if isinstance(self.name_access_level_required, tuple) else self.name_access_level_required}
- display_order: {self.display_order}
- active: {self.active}
- products: {self.products}
- '''
- """
- def get_permutation_first(self):
- if not (len(self.products) == 0):
- Helper_App.console_log(f'getting first permutation from product')
- return None if len(self.products) == 0 else self.products[0].get_permutation_selected()
- """
- def is_available(self):
- if len(self.products) == 0:
- return False
- for product in self.products:
- if product.is_available():
- return True
- return False
- def to_permutation_row_list(self):
- list_rows = []
- for product in self.products:
- list_rows += product.to_permutation_row_list()
- return list_rows
- def to_product_option_list(self):
- list_products = []
- for product in self.products:
- list_products.append({'value': product.id_product, 'text': product.name})
- return list_products
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_PRODUCT_CATEGORY: self.id_category[0] if isinstance(self.id_category, tuple) else self.id_category,
- self.FLAG_CODE: self.code[0] if isinstance(self.code, tuple) else self.code,
- self.FLAG_NAME: self.name[0] if isinstance(self.name, tuple) else self.name,
- self.FLAG_DESCRIPTION: self.description[0] if isinstance(self.description, tuple) else self.description,
- self.ATTR_ID_ACCESS_LEVEL: self.id_access_level_required[0] if isinstance(self.id_access_level_required, tuple) else self.id_access_level_required,
- self.FLAG_ACCESS_LEVEL_REQUIRED: self.name_access_level_required[0] if isinstance(self.name_access_level_required, tuple) else self.name_access_level_required,
- self.FLAG_DISPLAY_ORDER: self.display_order,
- self.FLAG_ACTIVE: self.active,
- self.FLAG_CAN_VIEW: self.can_view,
- self.FLAG_CAN_EDIT: self.can_edit,
- self.FLAG_CAN_ADMIN: self.can_admin
- }
- @classmethod
- def from_json(cls, json):
- Helper_App.console_log(f' Category.from_json: {json}')
- category = cls()
- category.id_category = json[cls.ATTR_ID_PRODUCT_CATEGORY]
- category.code = json[cls.FLAG_CODE]
- category.name = json[cls.FLAG_NAME]
- category.description = json[cls.FLAG_DESCRIPTION]
- category.id_access_level_required = json[cls.ATTR_ID_ACCESS_LEVEL]
- category.name_access_level_required = json.get(cls.FLAG_ACCESS_LEVEL_REQUIRED, '')
- category.display_order = json[cls.FLAG_DISPLAY_ORDER]
- category.active = 1 if av.input_bool(json[cls.FLAG_ACTIVE], cls.FLAG_ACTIVE, f'{cls.__name__}.from_json') else 0
- category.can_view = json.get(cls.FLAG_CAN_VIEW, False)
- category.can_edit = json.get(cls.FLAG_CAN_EDIT, False)
- category.can_admin = json.get(cls.FLAG_CAN_ADMIN, False)
- return category
- """
- def to_json_str(self):
- return {
- self.ATTR_ID_PRODUCT_CATEGORY: self.id_category[0] if isinstance(self.id_category, tuple) else self.id_category,
- self.FLAG_CODE: self.code[0] if isinstance(self.code, tuple) else self.code,
- self.FLAG_NAME: self.name[0] if isinstance(self.name, tuple) else self.name,
- self.FLAG_DESCRIPTION: self.description[0] if isinstance(self.description, tuple) else self.description,
- self.ATTR_ID_ACCESS_LEVEL: self.id_access_level_required[0] if isinstance(self.id_access_level_required, tuple) else self.id_access_level_required,
- self.FLAG_ACCESS_LEVEL_REQUIRED: self.name_access_level_required[0] if isinstance(self.name_access_level_required, tuple) else self.name_access_level_required,
- self.FLAG_DISPLAY_ORDER: self.display_order,
- self.FLAG_ACTIVE: self.output_bool(self.active),
- self.FLAG_CAN_VIEW: self.output_bool(self.can_view),
- self.FLAG_CAN_EDIT: self.output_bool(self.can_edit),
- self.FLAG_CAN_ADMIN: self.output_bool(self.can_admin)
- }
- """
- @staticmethod
- def output_bool(value):
- return av.input_bool(value, 'Product_Category bool attribute', 'Product_Category.output_bool')
- def to_json_option(self):
- return {
- 'value': self.id_category,
- 'text': self.name
- }
- def get_csv_ids_permutation(self):
- list_ids = []
- for product in self.products:
- list_ids += product.get_csv_ids_permutation()
- return list_ids
-"""
-class Filters_Product_Category(BaseModel, Store_Base):
- ids_product_category: str
- ids_product: str
- ""
- def __new__(cls, product_ids, product_categories):
- _m = 'Parameters_Product.__new__'
- v_arg_type = 'class attribute'
- # av.val_list_instances(product_ids, 'product_ids', _m, str, v_arg_type=v_arg_type)
- # av.val_list_instances(product_categories, 'product_categories', _m, Product_Category_Enum, v_arg_type=v_arg_type)
- av.val_str(product_ids, 'product_ids', _m, v_arg_type=v_arg_type)
- av.val_str(product_categories, 'product_categories', _m, v_arg_type=v_arg_type)
- return super(Parameters_Product_Category, cls).__new__(cls)
- ""
- def __init__(self, ids_product, ids_product_category):
- super().__init__(ids_product=ids_product, ids_product_category=ids_product_category)
- ""
- # Constructor
- self.ids = product_ids
- self.categories = product_categories
- ""
- @classmethod
- def get_default(cls):
- return Filters_Product_Category(
- ids_product_category = '',
- ids_product = ''
- )
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- 'a_ids_product_category': self.ids_product_category,
- 'a_ids_product': self.ids_product
- }
- @classmethod
- def from_json(cls, json):
- filters = cls()
- filters.ids_product_category = json['a_ids_product_category'],
- filters.ids_product = json['a_ids_product']
-
-
-class Filters_Product_Category(Get_Many_Parameters_Base):
- FLAG_IS_NOT_EMPTY: ClassVar[str] = 'is_not_empty'
- is_not_empty: bool
- active: bool
- def __init__(self, is_not_empty, active):
- super().__init__(is_not_empty=is_not_empty, active=active)
- @classmethod
- def get_default(cls):
- return cls(
- is_not_empty = False,
- active = True
- )
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.FLAG_IS_NOT_EMPTY: self.is_not_empty,
- self.FLAG_ACTIVE: av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json')
- }
- @classmethod
- def from_json(cls, json):
- return cls(
- is_not_empty = json['is_not_empty'],
- active = json['active']
- )
- @classmethod
- def from_form(cls, form):
- return cls(
- is_not_empty = av.input_bool(form.is_not_empty.data, 'is_not_empty', 'Filters_Product_Category.from_form'),
- active = av.input_bool(form.active.data, 'active', 'Filters_Product_Category.from_form')
- )
-"""
-
-class Product_Category_Container(Store_Base):
- NAME_ATTR_OPTION_TEXT: ClassVar[str] = ''
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.FLAG_ROWS
- categories: list
- def __init__(self):
- self.categories = []
- def add_product_category(self, category):
- av.val_instance(category, 'category', 'Container_Product_Categories.add_product_category', Product_Category)
- self.categories.append(category)
- def get_index_category_from_id(self, id_category):
- for index_category in range(len(self.categories)):
- category = self.categories[index_category]
- if category.id_category == id_category:
- return index_category
- raise ValueError(f"{av.error_msg_str(id_category, 'id_category', 'Container_Product_Categories.get_index_category_from_id', int)}\nID not in list")
- def get_index_category_from_id_permutation(self, id_permutation):
- for index_category in range(len(self.categories)):
- category = self.categories[index_category]
- try:
- index_product = category.get_index_product_from_id_permutation(id_permutation)
- return index_category
- except:
- pass
- raise ValueError(f"{av.error_msg_str(id_permutation, 'id_permutation', 'Container_Product_Categories.get_index_category_from_id_permutation', int)}. Permutation ID not in list")
- def add_product(self, product):
- av.val_instance(product, 'product', 'Container_Product_Categories.add_product', Product)
- index_category = self.get_index_category_from_id(product.id_category)
- self.categories[index_category].add_product(product)
- def add_product_permutation(self, permutation):
- av.val_instance(permutation, 'permutation', 'Container_Product_Categories.add_product_permutation', Product_Permutation)
- index_category = self.get_index_category_from_id(permutation.id_category)
- self.categories[index_category].add_product_permutation(permutation)
- """
- def add_product_variation(self, variation):
- av.val_instance(variation, 'variation', 'Container_Product_Categories.add_product_variation', Product_Variation)
- index_category = self.get_index_category_from_id(variation.id_category)
- self.categories[index_category].add_product_variation(variation)
- """
- def add_product_variation_type(self, variation_type):
- av.val_instance(variation_type, 'variation_type', 'Container_Product_Categories.add_product_variation_type', Product_Variation_Type)
- variation = variation_type.variations[0]
- index_category = self.get_index_category_from_id(variation.id_category)
- self.categories[index_category].add_product_variation_type(variation_type)
- def add_product_price(self, price):
- av.val_instance(price, 'price', 'Container_Product_Categories.add_product_price', Product_Price)
- index_category = self.get_index_category_from_id(price.id_category)
- self.categories[index_category].add_product_price(price)
- def add_product_image(self, image):
- av.val_instance(image, 'image', 'Container_Product_Categories.add_product_image', Image)
- index_category = self.get_index_category_from_id(image.id_category)
- self.categories[index_category].add_product_image(image)
- def add_delivery_option(self, delivery_option):
- av.val_instance(delivery_option, 'delivery_option', 'Container_Product_Categories.add_delivery_option', Delivery_Option)
- index_category = self.get_index_category_from_id(delivery_option.id_category)
- self.categories[index_category].add_delivery_option(delivery_option)
- def add_product_price_discount(self, discount):
- av.val_instance(discount, 'discount', 'Container_Product_Categories.add_product_price_discount', Discount)
- index_category = self.get_index_category_from_id(discount.id_category)
- self.categories[index_category].add_product_price_discount(discount)
- def add_stock_item(self, stock_item):
- av.val_instance(stock_item, 'stock_item', 'Container_Product_Categories.add_stock_item', Stock_Item)
- index_category = self.get_index_category_from_id(stock_item.id_category)
- self.categories[index_category].add_stock_item(stock_item)
- def get_all_product_variation_trees(self):
- for category in self.categories:
- category.get_all_product_variation_trees()
- def __repr__(self):
- return f'categories: {self.categories}'
- """
- def get_permutation_first(self):
- Helper_App.console_log(f'getting first permutation from category list')
- if not (len(self.categories) == 0):
- Helper_App.console_log(f'getting first permutation from category')
- return None if len(self.categories) == 0 else self.categories[0].get_permutation_first()
- """
- def get_category_count(self):
- return len(self.categories)
- def to_permutation_row_list(self):
- list_rows = []
- for category in self.categories:
- list_rows += category.to_permutation_row_list()
- return list_rows
- def to_category_option_list(self):
- list_categories = []
- for category in self.categories:
- list_categories.append({'value': category.id_category, 'text': category.name})
- return list_categories
- def get_list_products(self):
- list_products = []
- for category in self.categories:
- # list_products.append(category.to_product_option_list())
- """
- for product in category.products:
- list_products.append({'value': product.id_product, 'text': product.name, Product.ATTR_ID_PRODUCT_CATEGORY: product.id_category})
- """
- list_products += category.products
- return list_products
- def to_product_option_list(self):
- list_products = self.get_list_products()
- return [{'value': product.id_product, 'text': product.name, Product.ATTR_ID_PRODUCT_CATEGORY: product.id_category} for product in list_products]
- def get_product_option_lists_by_category(self):
- dict_lists_products = {}
- for category in self.categories:
- dict_lists_products[category.id_category] = category.to_product_option_list()
- return dict_lists_products
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- f'{self.FLAG_ROWS}': [category.to_json() for category in self.categories]
- }
- """
- def to_json_str(self):
- return {
- f'{self.FLAG_ROWS}': [category.to_json_str() for category in self.categories]
- }
- """
- @classmethod
- def from_json(cls, json):
- return None
- def to_json_option(self):
- return None
- def to_temporary_record(self):
- excluded_attributes = {
- column.name: getattr(self, column.name)
- for column in self.__table__.columns
- if column.name not in ['created_on', 'created_by']
- }
- return self.to_object_with_missing_attributes(excluded_attributes)
- def get_csv_ids_permutation(self):
- list_ids = []
- for category in self.categories:
- list_ids += category.get_csv_ids_permutation()
- return ','.join(list_ids)
-
-
-"""
-class Table_Shop_Product_Category(db.Model):
- __tablename__ = 'Shop_Product_Category'
- id_category: int = db.Column(db.Integer, primary_key=True)
- code: str = db.Column(db.String(50))
- name: str = db.Column(db.String(255))
- description: str = db.Column(db.String(4000))
- active: bool = db.Column(db.Boolean)
- display_order: int = db.Column(db.Integer)
- created_on: datetime = db.Column(db.DateTime)
- created_by: int = db.Column(db.Integer)
- id_change_set: int = db.Column(db.Integer)
-"""
-class Product_Category_Temp(db.Model, Store_Base):
- __tablename__ = 'Shop_Product_Category_Temp'
- __table_args__ = { 'extend_existing': True }
- id_temp: int = db.Column(db.Integer, primary_key=True, autoincrement=True)
- id_category: int = db.Column(db.Integer)
- code: str = db.Column(db.String(50))
- name: str = db.Column(db.String(255))
- description: str = db.Column(db.String(4000))
- id_access_level_required: int = db.Column(db.Integer)
- active: bool = db.Column(db.Boolean)
- display_order: int = db.Column(db.Integer)
- guid: str = db.Column(db.String(36))
- # created_on: datetime = db.Column(db.DateTime)
- # created_by: int = db.Column(db.Integer)
- def __init__(self):
- super().__init__()
- self.id_temp = None
- @classmethod
- def from_product_category(cls, product_category):
- row = cls()
- row.id_category = product_category.id_category[0] if isinstance(product_category.id_category, tuple) else product_category.id_category
- row.code = product_category.code[0] if isinstance(product_category.code, tuple) else product_category.code
- row.name = product_category.name[0] if isinstance(product_category.name, tuple) else product_category.name
- row.description = product_category.description[0] if isinstance(product_category.description, tuple) else product_category.description
- row.id_access_level_required = product_category.id_access_level_required[0] if isinstance(product_category.id_access_level_required, tuple) else product_category.id_access_level_required
- row.active = product_category.active
- row.display_order = product_category.display_order
- """
- row.guid = product_category.guid
- row.created_on = product_category.created_on
- row.created_by = product_category.created_by
- """
- return row
- def to_json(self):
- return {
- 'id_category': self.id_category,
- 'code': self.code,
- 'name': self.name,
- 'description': self.description,
- 'id_access_level_required': self.id_access_level_required,
- 'active': av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json'),
- 'display_order': self.display_order,
- 'guid': self.guid,
- }
- """
- 'created_on': self.created_on,
- 'created_by': self.created_by
- """
-
- def __repr__(self):
- return str(self.__dict__)
\ No newline at end of file
diff --git a/business_objects/store/product_permutation.py b/business_objects/store/product_permutation.py
deleted file mode 100644
index 2aa0de6a..00000000
--- a/business_objects/store/product_permutation.py
+++ /dev/null
@@ -1,617 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Product Permutation Business Object
-
-Description:
-Business object for product permutation
-"""
-
-# internal
-import lib.argument_validation as av
-from lib import data_types
-from forms.forms import Form_Basket_Add, Form_Basket_Edit
-from business_objects.currency import Currency
-from business_objects.store.delivery_option import Delivery_Option
-from business_objects.store.discount import Discount
-from business_objects.store.image import Image
-from business_objects.store.product_price import Product_Price
-from business_objects.store.stock_item import Stock_Item
-from business_objects.store.store_base import Store_Base
-from business_objects.store.product_variation import Product_Variation
-from business_objects.store.product_variation_tree import Product_Variation_Tree
-from business_objects.unit_measurement import Unit_Measurement
-from extensions import db
-from helpers.helper_app import Helper_App
-# external
-from datetime import datetime, timedelta
-import locale
-from dataclasses import dataclass
-from typing import ClassVar
-
-class Product_Permutation(db.Model, Store_Base):
- NAME_ATTR_OPTION_VALUE = Store_Base.ATTR_ID_PRODUCT_PERMUTATION
- NAME_ATTR_OPTION_TEXT = Store_Base.FLAG_NAME
- FLAG_CURRENCY_COST = f'{Currency.ATTR_ID_CURRENCY}_cost'
- FLAG_CODE_CURRENCY_COST = f'{Currency.FLAG_CODE}_cost'
- FLAG_SYMBOL_CURRENCY_COST = f'{Currency.FLAG_SYMBOL}_cost'
- FLAG_PROFIT_LOCAL_MIN = 'profit_local_min'
- FLAG_HAS_VARIATIONS = 'has_variations'
- FLAG_LATENCY_MANUFACTURE = 'latency_manufacture'
- FLAG_UNIT_MEASUREMENT_QUANTITY = f'{Unit_Measurement.ATTR_ID_UNIT_MEASUREMENT}_quantity'
- FLAG_SYMBOL_UNIT_MEASUREMENT_QUANTITY = f'{Unit_Measurement.FLAG_SYMBOL}_quantity'
- FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_MEASUREMENT_QUANTITY = f'{Unit_Measurement.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX}_quantity'
- FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_QUANTITY = f'{Unit_Measurement.FLAG_NAME_SINGULAR}_quantity'
- FLAG_NAME_PLURAL_UNIT_MEASUREMENT_QUANTITY = f'{Unit_Measurement.FLAG_NAME_PLURAL}_quantity'
- FLAG_COUNT_UNIT_MEASUREMENT_PER_QUANTITY_STEP = 'count_unit_measurement_per_quantity_step'
- FLAG_QUANTITY_STOCK = 'quantity_stock'
- FLAG_IS_SUBSCRIPTION = 'is_subscription'
- FLAG_UNIT_MEASUREMENT_INTERVAL_RECURRENCE = f'{Unit_Measurement.ATTR_ID_UNIT_MEASUREMENT}_interval_recurrence'
- FLAG_SYMBOL_UNIT_MEASUREMENT_INTERVAL_RECURRENCE = f'{Unit_Measurement.FLAG_SYMBOL}_unit_measurement_interval_recurrence'
- FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_MEASUREMENT_INTERVAL_RECURRENCE = f'{Unit_Measurement.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX}_unit_measurement_interval_recurrence'
- FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_INTERVAL_RECURRENCE = f'{Unit_Measurement.FLAG_NAME_SINGULAR}_unit_measurement_interval_recurrence'
- FLAG_NAME_PLURAL_UNIT_MEASUREMENT_INTERVAL_RECURRENCE = f'{Unit_Measurement.FLAG_NAME_PLURAL}_unit_measurement_interval_recurrence'
- FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_RECURRENCE = 'count_interval_recurrence'
- FLAG_ID_STRIPE_PRODUCT = 'id_stripe_product'
- FLAG_DOES_EXPIRE_FASTER_ONCE_UNSEALED = 'does_expire_faster_once_unsealed'
- FLAG_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED = f'{Unit_Measurement.ATTR_ID_UNIT_MEASUREMENT}_interval_expiration_unsealed'
- FLAG_SYMBOL_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED = f'{Unit_Measurement.FLAG_SYMBOL}_interval_expiration_unsealed'
- FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_INTERVAL_EXPIRATION_UNSEALED = f'{Unit_Measurement.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX}_interval_expiration_unsealed'
- FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED = f'{Unit_Measurement.FLAG_NAME_SINGULAR}_interval_expiration_unsealed'
- FLAG_NAME_PLURAL_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED = f'{Unit_Measurement.FLAG_NAME_PLURAL}_interval_expiration_unsealed'
- FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED = 'count_interval_expiration_unsealed'
-
- id_permutation = db.Column(db.Integer, primary_key=True)
- id_product = db.Column(db.Integer)
- id_category = db.Column(db.Integer)
- csv_id_pairs_variation = db.Column(db.String(4000))
- # name = db.Column(db.String(255))
- description = db.Column(db.String(4000))
- # price_GBP_full = db.Column(db.Float)
- # price_GBP_min = db.Column(db.Float)
- """
- id_currency_cost = db.Column(db.Integer)
- code_currency_cost = db.Column(db.String(3))
- symbol_currency_cost = db.Column(db.String(3))
- """
- # currency_cost: Currency
- cost_local_VAT_excl = db.Column(db.Float)
- cost_local_VAT_incl = db.Column(db.Float)
- profit_local_min = db.Column(db.Float)
- has_variations = db.Column(db.Boolean)
- latency_manufacture = db.Column(db.Integer)
- id_unit_measurement_quantity = db.Column(db.Integer)
- symbol_unit_measurement_quantity = db.Column(db.String(50))
- symbol_is_suffix_not_prefix_unit_measurement_quantity = db.Column(db.Boolean)
- name_singular_unit_measurement_quantity = db.Column(db.String(255))
- name_plural_unit_measurement_quantity = db.Column(db.String(256))
- count_unit_measurement_per_quantity_step = db.Column(db.Integer)
- quantity_min = db.Column(db.Float)
- quantity_max = db.Column(db.Float)
- quantity_stock = db.Column(db.Float)
- is_subscription = db.Column(db.Boolean)
- id_unit_measurement_interval_recurrence = db.Column(db.Integer)
- symbol_unit_measurement_interval_recurrence = db.Column(db.String(50))
- symbol_is_suffix_not_prefix_unit_measurement_interval_recurrence = db.Column(db.Boolean)
- name_singular_unit_measurement_interval_recurrence = db.Column(db.String(255))
- name_plural_unit_measurement_interval_recurrence = db.Column(db.String(256))
- count_interval_recurrence = db.Column(db.Integer)
- id_stripe_product = db.Column(db.String(100))
- does_expire_faster_once_unsealed = db.Column(db.Boolean)
- id_unit_measurement_interval_expiration_unsealed = db.Column(db.Integer)
- symbol_unit_measurement_interval_expiration_unsealed = db.Column(db.String(50))
- symbol_is_suffix_not_prefix_unit_interval_expiration_unsealed = db.Column(db.Boolean)
- name_singular_unit_measurement_interval_expiration_unsealed = db.Column(db.String(255))
- name_plural_unit_measurement_interval_expiration_unsealed = db.Column(db.String(256))
- count_interval_expiration_unsealed = db.Column(db.Integer)
- has_variations = db.Column(db.Boolean)
- active = db.Column(db.Boolean)
- # display_order = db.Column(db.Integer)
- can_view = db.Column(db.Boolean)
- can_edit = db.Column(db.Boolean)
- can_admin = db.Column(db.Boolean)
- # form_basket_add: Form_Basket_Add
- # form_basket_edit: Form_Basket_Edit
- # is_unavailable_in_currency_or_region: bool
- # is_available: bool
- # variation_tree
-
- def __init__(self):
- self.prices = []
- self.price_index = {}
- self.images = []
- self.image_index = {}
- self.delivery_options = []
- self.delivery_option_index = {}
- self.discounts = []
- self.discount_index = {}
- self.stock_items = []
- self.stock_item_index = {}
- super().__init__()
- Store_Base.__init__(self)
- self.currency_cost = None
- self.form_basket_add = Form_Basket_Add()
- self.form_basket_edit = Form_Basket_Edit()
- self.is_unavailable_in_currency_or_region = False
- # self.is_available = False
- self.variation_tree = None
- # self.variations = []
- @classmethod
- def from_DB_get_many_product_catalogue(cls, query_row):
- _m = f'{cls.__name__}.from_DB_get_many_product_catalogue'
- v_arg_type = 'class attribute'
- Helper_App.console_log(f'query_row: {query_row}')
- permutation = cls()
- permutation.id_permutation = query_row[0]
- permutation.id_product = query_row[1]
- permutation.id_category = query_row[2]
- permutation.description = query_row[3]
- permutation.cost_local_VAT_excl = query_row[4]
- permutation.cost_local_VAT_incl = query_row[5]
- permutation.currency_cost = Currency.from_DB_get_many_product_catalogue_product_permutation(query_row)
- permutation.profit_local_min = query_row[9]
- permutation.latency_manufacture = query_row[10]
- permutation.id_unit_measurement_quantity = query_row[11]
- permutation.symbol_unit_measurement_quantity = query_row[12]
- permutation.symbol_is_suffix_not_prefix_unit_measurement_quantity = av.input_bool(query_row[13], cls.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_MEASUREMENT_QUANTITY, _m, v_arg_type=v_arg_type)
- permutation.name_singular_unit_measurement_quantity = query_row[14]
- permutation.name_plural_unit_measurement_quantity = query_row[15]
- permutation.count_unit_measurement_per_quantity_step = query_row[16]
- permutation.quantity_min = query_row[17]
- permutation.quantity_max = query_row[18]
- permutation.quantity_stock = query_row[19]
- permutation.is_subscription = av.input_bool(query_row[20], "is_subscription", _m, v_arg_type=v_arg_type)
- permutation.id_unit_measurement_interval_recurrence = query_row[21]
- permutation.symbol_unit_measurement_interval_recurrence = query_row[22]
- permutation.symbol_is_suffix_not_prefix_unit_measurement_interval_recurrence = av.input_bool(query_row[23], cls.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_MEASUREMENT_INTERVAL_RECURRENCE, _m, v_arg_type=v_arg_type)
- permutation.name_singular_unit_measurement_interval_recurrence = query_row[24]
- permutation.name_plural_unit_measurement_interval_recurrence = query_row[25]
- permutation.count_interval_recurrence = query_row[26]
- permutation.id_stripe_product = query_row[27]
- permutation.does_expire_faster_once_unsealed = av.input_bool(query_row[28], "does_expire_faster_once_unsealed", _m, v_arg_type=v_arg_type)
- permutation.id_unit_measurement_interval_expiration_unsealed = query_row[29]
- permutation.symbol_unit_measurement_interval_expiration_unsealed = query_row[30]
- permutation.symbol_is_suffix_not_prefix_unit_interval_expiration_unsealed = av.input_bool(query_row[31], cls.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_INTERVAL_EXPIRATION_UNSEALED, _m, v_arg_type=v_arg_type)
- permutation.name_singular_unit_measurement_interval_expiration_unsealed = query_row[32]
- permutation.name_plural_unit_measurement_interval_expiration_unsealed = query_row[33]
- permutation.count_interval_expiration_unsealed = query_row[34]
- permutation.has_variations = av.input_bool(query_row[35], cls.FLAG_HAS_VARIATIONS, _m, v_arg_type=v_arg_type)
- permutation.active = av.input_bool(query_row[36], cls.FLAG_ACTIVE, _m, v_arg_type=v_arg_type)
- # permutation.display_order = query_row[27]
- permutation.can_view = av.input_bool(query_row[37], "can_view", _m, v_arg_type=v_arg_type)
- permutation.can_edit = av.input_bool(query_row[38], "can_edit", _m, v_arg_type=v_arg_type)
- permutation.can_admin = av.input_bool(query_row[39], "can_admin", _m, v_arg_type=v_arg_type)
- return permutation
-
- def from_DB_Stripe_product(query_row):
- _m = 'Product_Permutation.from_DB_Stripe_product'
- v_arg_type = 'class attribute'
- permutation = Product_Permutation()
- permutation.id_product = query_row[0]
- # permutation.name = query_row[1]
- permutation.description = query_row[2]
- return permutation
-
- def from_DB_Stripe_price(query_row):
- _m = 'Product_Permutation.from_DB_Stripe_price'
- v_arg_type = 'class attribute'
- permutation = Product_Permutation()
- permutation.id_product = query_row[0]
- # permutation.price_GBP_full = query_row[1]
- permutation.id_stripe_product = query_row[2]
- permutation.is_subscription = av.input_bool(query_row[3], "is_subscription", _m, v_arg_type=v_arg_type)
- permutation.name_singular_unit_measurement_interval_recurrence = query_row[4]
- permutation.count_interval_recurrence = query_row[5]
- return permutation
- """
- def from_json(json_basket_item, key_id_product, key_id_permutation):
- _m = 'Product_Permutation.from_json'
- v_arg_type = 'class attribute'
- permutation = Product_Permutation()
- permutation.id_product = json_basket_item[key_id_product]
- permutation.id_permutation = json_basket_item[key_id_permutation]
- return permutation
- """
- @classmethod
- def from_json(cls, json):
- _m = f'{cls.__name__}.from_json'
- permutation = cls()
- permutation.id_permutation = json[cls.ATTR_ID_PRODUCT_PERMUTATION]
- permutation.id_product = json[cls.ATTR_ID_PRODUCT]
- permutation.id_category = json[cls.ATTR_ID_PRODUCT_CATEGORY]
- permutation.description = json[cls.FLAG_DESCRIPTION]
- permutation.cost_local_VAT_excl = json.get(cls.FLAG_COST_UNIT_LOCAL_VAT_EXCL, None)
- permutation.cost_local_VAT_incl = json.get(cls.FLAG_COST_UNIT_LOCAL_VAT_INCL, None)
- permutation.currency_cost = Currency.from_json(json, '_cost')
- permutation.profit_local_min = json[cls.FLAG_PROFIT_LOCAL_MIN]
- permutation.latency_manufacture = json[cls.FLAG_LATENCY_MANUFACTURE]
- permutation.id_unit_measurement_quantity = json[cls.FLAG_UNIT_MEASUREMENT_QUANTITY]
- permutation.symbol_unit_measurement_quantity = json.get(cls.FLAG_SYMBOL_UNIT_MEASUREMENT_QUANTITY)
- permutation.symbol_is_suffix_not_prefix_unit_measurement_quantity = json.get(cls.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_MEASUREMENT_QUANTITY)
- permutation.name_singular_unit_measurement_quantity = json.get(cls.FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_QUANTITY)
- permutation.name_plural_unit_measurement_quantity = json.get(cls.FLAG_NAME_PLURAL_UNIT_MEASUREMENT_QUANTITY)
- permutation.count_unit_measurement_per_quantity_step = json[cls.FLAG_COUNT_UNIT_MEASUREMENT_PER_QUANTITY_STEP]
- permutation.quantity_min = json[cls.FLAG_QUANTITY_MIN]
- permutation.quantity_max = json[cls.FLAG_QUANTITY_MAX]
- permutation.quantity_stock = json[cls.FLAG_QUANTITY_STOCK]
- permutation.is_subscription = 1 if av.input_bool(json[cls.FLAG_IS_SUBSCRIPTION], cls.FLAG_IS_SUBSCRIPTION, _m) else 0
- permutation.id_unit_measurement_interval_recurrence = json[cls.FLAG_UNIT_MEASUREMENT_INTERVAL_RECURRENCE] if json[cls.FLAG_UNIT_MEASUREMENT_INTERVAL_RECURRENCE] != '' else None
- permutation.symbol_unit_measurement_interval_recurrence = json.get(cls.FLAG_SYMBOL_UNIT_MEASUREMENT_INTERVAL_RECURRENCE)
- permutation.symbol_is_suffix_not_prefix_unit_measurement_interval_recurrence = json.get(cls.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_MEASUREMENT_INTERVAL_RECURRENCE)
- permutation.name_singular_unit_measurement_interval_recurrence = json.get(cls.FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_INTERVAL_RECURRENCE)
- permutation.name_plural_unit_measurement_interval_recurrence = json.get(cls.FLAG_NAME_PLURAL_UNIT_MEASUREMENT_INTERVAL_RECURRENCE)
- permutation.count_interval_recurrence = json[cls.FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_RECURRENCE] if json[cls.FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_RECURRENCE] != '' else None
- permutation.id_stripe_product = json[cls.FLAG_ID_STRIPE_PRODUCT]
- permutation.does_expire_faster_once_unsealed = 1 if av.input_bool(json[cls.FLAG_DOES_EXPIRE_FASTER_ONCE_UNSEALED], cls.FLAG_DOES_EXPIRE_FASTER_ONCE_UNSEALED, _m) else 0
- permutation.id_unit_measurement_interval_expiration_unsealed = json[cls.FLAG_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED] if json[cls.FLAG_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED] != '' else None
- permutation.symbol_unit_measurement_interval_expiration_unsealed = json.get(cls.FLAG_SYMBOL_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED)
- permutation.symbol_is_suffix_not_prefix_unit_interval_expiration_unsealed = json.get(cls.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_INTERVAL_EXPIRATION_UNSEALED)
- permutation.name_singular_unit_measurement_interval_expiration_unsealed = json.get(cls.FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED)
- permutation.name_plural_unit_measurement_interval_expiration_unsealed = json.get(cls.FLAG_NAME_PLURAL_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED)
- permutation.count_interval_expiration_unsealed = json[cls.FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED] if json[cls.FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED] != '' else None
- permutation.has_variations = json[cls.FLAG_HAS_VARIATIONS]
- permutation.active = 1 if av.input_bool(json[cls.FLAG_ACTIVE], cls.FLAG_ACTIVE, _m) else 0
- if permutation.has_variations:
- permutation.csv_id_pairs_variation = json[cls.FLAG_PRODUCT_VARIATIONS]
- permutation.variation_tree = Product_Variation_Tree.from_json_str(permutation.csv_id_pairs_variation)
- """
- for jsonProductVariation in json[cls.FLAG_PRODUCT_VARIATIONS]:
- variation = Product_Variation.from_json(jsonProductVariation)
- permutation.add_product_variation(variation)
- """
- return permutation
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_PRODUCT_PERMUTATION: self.id_permutation,
- self.ATTR_ID_PRODUCT: self.id_product,
- self.ATTR_ID_PRODUCT_CATEGORY: self.id_category,
- self.FLAG_DESCRIPTION: self.description,
- self.FLAG_COST_UNIT_LOCAL_VAT_EXCL: self.cost_local_VAT_excl,
- self.FLAG_COST_UNIT_LOCAL_VAT_INCL: self.cost_local_VAT_incl,
- self.FLAG_CURRENCY_COST: self.currency_cost.to_json(),
- self.FLAG_PROFIT_LOCAL_MIN: self.profit_local_min,
- self.FLAG_LATENCY_MANUFACTURE: self.latency_manufacture,
- self.FLAG_UNIT_MEASUREMENT_QUANTITY: self.id_unit_measurement_quantity,
- self.FLAG_SYMBOL_UNIT_MEASUREMENT_QUANTITY: self.symbol_unit_measurement_quantity,
- self.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_MEASUREMENT_QUANTITY: self.symbol_is_suffix_not_prefix_unit_measurement_quantity,
- self.FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_QUANTITY: self.name_singular_unit_measurement_quantity,
- self.FLAG_NAME_PLURAL_UNIT_MEASUREMENT_QUANTITY: self.name_plural_unit_measurement_quantity,
- self.FLAG_COUNT_UNIT_MEASUREMENT_PER_QUANTITY_STEP: self.count_unit_measurement_per_quantity_step,
- self.FLAG_QUANTITY_MIN: self.quantity_min,
- self.FLAG_QUANTITY_MAX: self.quantity_max,
- self.FLAG_QUANTITY_STOCK: self.quantity_stock,
- self.FLAG_IS_SUBSCRIPTION: self.is_subscription,
- self.FLAG_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: self.id_unit_measurement_interval_recurrence,
- self.FLAG_SYMBOL_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: self.symbol_unit_measurement_interval_recurrence,
- self.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: self.symbol_is_suffix_not_prefix_unit_measurement_interval_recurrence,
- self.FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: self.name_singular_unit_measurement_interval_recurrence,
- self.FLAG_NAME_PLURAL_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: self.name_plural_unit_measurement_interval_recurrence,
- self.FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: self.count_interval_recurrence,
- self.FLAG_ID_STRIPE_PRODUCT: self.id_stripe_product,
- self.FLAG_DOES_EXPIRE_FASTER_ONCE_UNSEALED: self.does_expire_faster_once_unsealed,
- self.FLAG_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: self.id_unit_measurement_interval_expiration_unsealed,
- self.FLAG_SYMBOL_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: self.symbol_unit_measurement_interval_expiration_unsealed,
- self.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_INTERVAL_EXPIRATION_UNSEALED: self.symbol_is_suffix_not_prefix_unit_interval_expiration_unsealed,
- self.FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: self.name_singular_unit_measurement_interval_expiration_unsealed,
- self.FLAG_NAME_PLURAL_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: self.name_plural_unit_measurement_interval_expiration_unsealed,
- self.FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: self.count_interval_expiration_unsealed,
- self.FLAG_HAS_VARIATIONS: self.has_variations,
- self.FLAG_ACTIVE: self.active,
- self.FLAG_CAN_VIEW: self.can_view,
- self.FLAG_CAN_EDIT: self.can_edit,
- self.FLAG_CAN_ADMIN: self.can_admin,
- self.FLAG_PRODUCT_VARIATIONS: [] if self.variation_tree is None else [variation_type.to_json() for variation_type in self.variation_tree.get_product_variation_types()],
- self.FLAG_PRODUCT_IMAGE: [image.to_json() for image in self.images],
- self.FLAG_DELIVERY_OPTION: [option.to_json() for option in self.delivery_options],
- self.FLAG_PRODUCT_PRICE: [price.to_json() for price in self.prices],
- }
- def to_json_option(self):
- return {
- 'value': self.id_permutation,
- 'text': self.get_name_variations()
- }
-
- def get_name(self):
- return
- def get_name_variations(self):
- return self.variation_tree.get_name_variations()
- def is_available(self):
- return len(self.prices) > 0
- def get_price(self):
- return self.prices[0]
-
- def output_delivery_date(self):
- return (datetime.now() + timedelta(days=self.latency_manufacture)).strftime('%A, %d %B %Y')
-
- """
- def output_lead_time(self):
- return '1 day' if self.latency_manufacture == 1 else f'{self.latency_manufacture} days'
-
- def output_price(self, is_included_VAT):
- if self.is_unavailable_in_currency_or_region:
- return 'Not available in currency and region'
- if not self.is_available:
- return 'Not available'
- price = self.get_price()
- locale.setlocale(locale.LC_ALL, '')
- if is_included_VAT:
- return f'{price.symbol_currency} {locale.format_string("%d", price.value_local_VAT_incl, grouping=True)}'
- else:
- return f'{price.symbol_currency} {locale.format_string("%d", price.value_local_VAT_excl, grouping=True)}'
- def output_variations(self):
- if not self.has_variations: return ''
- return '\n'.join([f'{variation.name_variation_type}: {variation.name_variation}' for variation in self.variations])
- def output_variations_jsonify(self):
- if not self.has_variations: return ''
- return ','.join([f'{variation.id_type}: {variation.id_variation}' for variation in self.variations])
- """
-
- def __repr__(self):
- return f'''Product_Permutation
- id_permutation: {self.id_permutation}
- id_product: {self.id_product}
- id_category: {self.id_category}
- description: {self.description}
- cost_local_VAT_excl: {self.cost_local_VAT_excl}
- cost_local_VAT_incl: {self.cost_local_VAT_incl}
- currency_cost: {self.currency_cost}
- latency_manufacture: {self.latency_manufacture}
- id_unit_measurement_quantity: {self.id_unit_measurement_quantity}
- symbol_unit_measurement_quantity: {self.symbol_unit_measurement_quantity}
- symbol_is_suffix_not_prefix_unit_measurement_quantity: {self.symbol_is_suffix_not_prefix_unit_measurement_quantity}
- name_singular_unit_measurement_quantity: {self.name_singular_unit_measurement_quantity}
- name_plural_unit_measurement_quantity: {self.name_plural_unit_measurement_quantity}
- count_unit_measurement_per_quantity_step: {self.count_unit_measurement_per_quantity_step}
- quantity_min: {self.quantity_min}
- quantity_max: {self.quantity_max}
- quantity_stock: {self.quantity_stock}
- is_subscription: {self.is_subscription}
- id_unit_measurement_interval_recurrence: {self.id_unit_measurement_interval_recurrence}
- symbol_unit_measurement_interval_recurrence: {self.symbol_unit_measurement_interval_recurrence}
- symbol_is_suffix_not_prefix_unit_measurement_interval_recurrence: {self.symbol_is_suffix_not_prefix_unit_measurement_interval_recurrence}
- name_singular_unit_measurement_interval_recurrence: {self.name_singular_unit_measurement_interval_recurrence}
- name_plural_unit_measurement_interval_recurrence: {self.name_plural_unit_measurement_interval_recurrence}
- count_interval_recurrence: {self.count_interval_recurrence}
- id_stripe_product: {self.id_stripe_product}
- does_expire_faster_once_unsealed: {self.does_expire_faster_once_unsealed}
- id_unit_measurement_interval_expiration_unsealed: {self.id_unit_measurement_interval_expiration_unsealed}
- symbol_unit_measurement_interval_expiration_unsealed: {self.symbol_unit_measurement_interval_expiration_unsealed}
- symbol_is_suffix_not_prefix_unit_interval_expiration_unsealed: {self.symbol_is_suffix_not_prefix_unit_interval_expiration_unsealed}
- name_singular_unit_measurement_interval_expiration_unsealed: {self.name_singular_unit_measurement_interval_expiration_unsealed}
- name_plural_unit_measurement_interval_expiration_unsealed: {self.name_plural_unit_measurement_interval_expiration_unsealed}
- count_interval_expiration_unsealed: {self.count_interval_expiration_unsealed}
- has_variations: {self.has_variations}
- csv_id_pairs_variation: {self.csv_id_pairs_variation}
- can_view: {self.can_view}
- can_edit: {self.can_edit}
- can_admin: {self.can_admin}
- variation tree: {self.variation_tree}
- images: {self.images}
- delivery_options: {self.delivery_options}
- prices: {self.prices}
- '''
- """
- price_GBP_full: {self.price_GBP_full}
- price_GBP_min: {self.price_GBP_min}
- """
- """
- def add_product_variation(self, variation):
- _m = 'Product_Permutation.add_product_variation'
- ""
- av.val_instance(variation, 'variation', _m, Product_Variation)
- try:
- self.variation_index[variation.id_variation]
- raise ValueError(f"{av.error_msg_str(variation, 'variation', _m, Product_Variation)}\nProduct_Variation already in product.")
- except KeyError:
- self.variation_index[variation.id_variation] = len(self.variations)
- self.variations.append(variation)
- ""
- if self.variation_tree is None:
- self.variation_tree = Product_Variation_Tree.from_product_variation(variation)
- else:
- self.variation_tree.add_product_variation(variation)
- """
- def add_product_variation_type(self, variation_type):
- _m = 'Product_Permutation.add_product_variation_type'
- if self.variation_tree is None:
- self.variation_tree = Product_Variation_Tree.from_product_variation_type(variation_type)
- else:
- self.variation_tree.add_product_variation_type(variation_type)
- def add_product_price(self, price):
- _m = 'Product_Permutation.add_product_price'
- av.val_instance(price, 'price', _m, Product_Price)
- try:
- self.price_index[price.display_order]
- raise ValueError(f"{av.error_msg_str(price, 'price', _m, Product_Price)}\nPrice already in product.")
- except KeyError:
- self.price_index[price.display_order] = len(self.prices)
- self.prices.append(price)
- def add_product_image(self, image):
- _m = 'Product_Permutation.add_product_image'
- av.val_instance(image, 'image', _m, Image)
- try:
- self.image_index[image.id_image]
- raise ValueError(f"{av.error_msg_str(image, 'image', _m, Image)}\nImage already in product.")
- except KeyError:
- self.image_index[image.id_image] = len(self.images)
- self.images.append(image)
- def add_delivery_option(self, delivery_option):
- _m = 'Product_Permutation.add_delivery_option'
- av.val_instance(delivery_option, 'delivery_option', _m, Delivery_Option)
- try:
- self.delivery_option_index[delivery_option.id_option]
- raise ValueError(f"{av.error_msg_str(delivery_option, 'delivery_option', _m, Delivery_Option)}\nDelivery_Option already in product.")
- except KeyError:
- self.delivery_option_index[delivery_option.id_option] = len(self.delivery_options)
- self.delivery_options.append(delivery_option)
- def add_product_price_discount(self, discount):
- _m = 'Product_Permutation.add_product_price_discount'
- av.val_instance(discount, 'discount', _m, Discount)
- try:
- self.discount_index[discount.display_order]
- raise ValueError(f"{av.error_msg_str(discount, 'discount', _m, Discount)}\nDiscount already in product.")
- except KeyError:
- self.discount_index[discount.display_order] = len(self.discounts)
- self.discounts.append(discount)
-
- def add_stock_item(self, stock_item):
- av.val_instance(stock_item, 'stock_item', 'Product_Permutation.add_stock_item', Stock_Item)
- self.stock_items.append(stock_item)
-
- def get_image_from_index(self, index_image):
- try:
- return self.images[index_image]
- except:
- raise IndexError(f"Invalid image index: {index_image}")
-
- def get_price_from_code_currency(self, code_currency):
- for price in self.prices:
- if price.code_currency == code_currency:
- return price
-
- def to_row_permutation(self):
- a = {
- Product_Permutation.ATTR_ID_PRODUCT_CATEGORY: self.id_category,
- Product_Permutation.ATTR_ID_PRODUCT: self.id_product,
- Product_Permutation.ATTR_ID_PRODUCT_VARIATION: self.output_variations(),
- Product_Permutation.FLAG_QUANTITY_STOCK: self.quantity_stock,
- Product_Permutation.FLAG_QUANTITY_MIN: self.quantity_min,
- Product_Permutation.FLAG_QUANTITY_MAX: self.quantity_max,
- Product_Permutation.FLAG_COST_UNIT_LOCAL_VAT_EXCL: f"{self.symbol_currency_cost}{self.cost_local_VAT_excl}"
- }
- Helper_App.console_log('permutation row: ', a)
- return a
-
-
-"""
-class Permutation_Product_Variation_Link(db.Model):
- id_permutation = db.Column(db.Integer)
- id_product = db.Column(db.Integer)
- id_category = db.Column(db.Integer)
- id_variation = db.Column(db.Integer)
-
- def from_DB_get_many_product_catalogue(query_row):
- _m = 'Permutation_Product_Variation_Link.from_DB_get_many_product_catalogue'
- v_arg_type = 'class attribute'
- link = Permutation_Product_Variation_Link()
- link.id_permutation = query_row[0]
- link.id_product = query_row[1]
- link.id_category = query_row[2]
- link.id_variation = query_row[3]
- return link
-"""
-
-class Product_Permutation_Temp(db.Model, Store_Base):
- __tablename__: ClassVar[str] = 'Shop_Product_Permutation_Temp'
- __table_args__ = { 'extend_existing': True }
- id_temp: int = db.Column(db.Integer, primary_key=True, autoincrement=True)
- id_permutation: int = db.Column(db.Integer)
- id_product: int = db.Column(db.Integer)
- csv_id_pairs_variation: str = db.Column(db.String(4000))
- description: str = db.Column(db.String(4000))
- cost_local_VAT_excl: float = db.Column(db.Float)
- cost_local_VAT_incl: float = db.Column(db.Float)
- id_currency_cost: int = db.Column(db.Integer)
- profit_local_min: float = db.Column(db.Float)
- latency_manufacture: int = db.Column(db.Integer)
- id_unit_measurement_quantity: int = db.Column(db.Integer)
- count_unit_measurement_per_quantity_step: int = db.Column(db.Float)
- quantity_min: int = db.Column(db.Integer)
- quantity_max: int = db.Column(db.Integer)
- quantity_stock: int = db.Column(db.Integer)
- is_subscription: bool = db.Column(db.Boolean)
- id_unit_measurement_interval_recurrence: int = db.Column(db.Integer)
- count_interval_recurrence: int = db.Column(db.Float)
- id_stripe_product: str = db.Column(db.String(50))
- does_expire_faster_once_unsealed: bool = db.Column(db.Boolean)
- id_unit_measurement_interval_expiration_unsealed: int = db.Column(db.Integer)
- count_interval_expiration_unsealed: int = db.Column(db.Integer)
- active: bool = db.Column(db.Boolean)
- guid: str = db.Column(db.String(36))
- def __init__(self):
- super().__init__()
- self.id_temp = None
- @classmethod
- def from_product_permutation(cls, product_permutation):
- Helper_App.console_log(f'Product_Permutation_Temp.from_product_permutation: {product_permutation}\ntype(cost local): {str(type(product_permutation.cost_local_VAT_excl))}')
- row = cls()
- row.id_permutation = product_permutation.id_permutation
- row.id_product = product_permutation.id_product
- row.csv_id_pairs_variation = product_permutation.csv_id_pairs_variation
- row.description = product_permutation.description
- row.cost_local_VAT_excl = product_permutation.cost_local_VAT_excl if product_permutation.cost_local_VAT_excl != 'None' else None
- row.cost_local_VAT_incl = product_permutation.cost_local_VAT_incl if product_permutation.cost_local_VAT_incl != 'None' else None
- row.id_currency_cost = product_permutation.currency_cost.id_currency
- row.profit_local_min = product_permutation.profit_local_min if product_permutation.profit_local_min != 'None' else None
- row.latency_manufacture = product_permutation.latency_manufacture
- row.id_unit_measurement_quantity = product_permutation.id_unit_measurement_quantity
- row.count_unit_measurement_per_quantity_step = product_permutation.count_unit_measurement_per_quantity_step
- row.quantity_min = product_permutation.quantity_min
- row.quantity_max = product_permutation.quantity_max
- row.quantity_stock = product_permutation.quantity_stock
- row.is_subscription = product_permutation.is_subscription
- row.id_unit_measurement_interval_recurrence = product_permutation.id_unit_measurement_interval_recurrence
- row.count_interval_recurrence = product_permutation.count_interval_recurrence
- row.id_stripe_product = product_permutation.id_stripe_product
- row.does_expire_faster_once_unsealed = product_permutation.does_expire_faster_once_unsealed
- row.id_unit_measurement_interval_expiration_unsealed = product_permutation.id_unit_measurement_interval_expiration_unsealed
- row.count_interval_expiration_unsealed = product_permutation.count_interval_expiration_unsealed
- row.active = product_permutation.active
- return row
- def __repr__(self):
- return f'''
- id_permutation: {self.id_permutation}
- id_product: {self.id_product}
- csv_id_pairs_variation: {self.csv_id_pairs_variation}
- description: {self.description}
- cost_local_VAT_excl: {self.cost_local_VAT_excl}
- cost_local_VAT_incl: {self.cost_local_VAT_incl}
- id_currency_cost: {self.id_currency_cost}
- profit_local_min: {self.profit_local_min}
- latency_manufacture: {self.latency_manufacture}
- id_unit_measurement_quantity: {self.id_unit_measurement_quantity}
- {Product_Permutation.FLAG_COUNT_UNIT_MEASUREMENT_PER_QUANTITY_STEP}: {self.count_unit_measurement_per_quantity_step}
- quantity_min: {self.quantity_min}
- quantity_max: {self.quantity_max}
- quantity_stock: {self.quantity_stock}
- is_subscription: {self.is_subscription}
- id_unit_measurement_interval_recurrence: {self.id_unit_measurement_interval_recurrence}
- count_interval_recurrence: {self.count_interval_recurrence}
- id_stripe_product: {self.id_stripe_product}
- does_expire_faster_once_unsealed: {self.does_expire_faster_once_unsealed}
- id_unit_measurement_interval_expiration_unsealed: {self.id_unit_measurement_interval_expiration_unsealed}
- count_interval_expiration_unsealed: {self.count_interval_expiration_unsealed}
- active: {self.active}
- guid: {self.guid}
- '''
- """
- def to_json(self):
- return {
- self.ATTR_ID_PRODUCT_PERMUTATION: int(self.id_permutation),
- self.ATTR_ID_PRODUCT: int(self.id_product),
- self.FLAG_DESCRIPTION: self.description,
- Product_Permutation.FLAG_COST_LOCAL: float(self.cost_local),
- Product_Permutation.FLAG_CURRENCY_COST: int(self.id_currency_cost),
- Product_Permutation.FLAG_PROFIT_LOCAL_MIN: float(self.profit_local_min),
- Product_Permutation.FLAG_LATENCY_MANUFACTURE: int(self.latency_manufacture),
- Product_Permutation.FLAG_UNIT_MEASUREMENT_QUANTITY: int(self.id_unit_measurement_quantity),
- Product_Permutation.FLAG_COUNT_UNIT_MEASUREMENT_PER_QUANTITY_STEP: float(self.count_unit_measurement_per_quantity_step),
- self.FLAG_QUANTITY_MIN: float(self.quantity_min),
- self.FLAG_QUANTITY_MAX: float(self.quantity_max),
- Product_Permutation.FLAG_QUANTITY_STOCK: float(self.quantity_stock),
- Product_Permutation.FLAG_IS_SUBSCRIPTION: bool(self.is_subscription),
- Product_Permutation.FLAG_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: int(self.id_unit_measurement_interval_recurrence) if self.id_unit_measurement_interval_recurrence != '' else None,
- Product_Permutation.FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: float(self.count_interval_recurrence) if self.count_interval_recurrence != '' else None,
- Product_Permutation.FLAG_ID_STRIPE_PRODUCT: self.id_stripe_product,
- Product_Permutation.FLAG_DOES_EXPIRE_FASTER_ONCE_UNSEALED: bool(self.does_expire_faster_once_unsealed),
- Product_Permutation.FLAG_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: int(self.id_unit_measurement_interval_expiration_unsealed) if self.id_unit_measurement_interval_expiration_unsealed != '' else None,
- Product_Permutation.FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: float(self.count_interval_expiration_unsealed) if self.count_interval_expiration_unsealed != '' else None,
- self.FLAG_ACTIVE: bool(self.active),
- self.FLAG_GUID: self.guid
- }
- """
-
\ No newline at end of file
diff --git a/business_objects/store/product_price.py b/business_objects/store/product_price.py
deleted file mode 100644
index 4822836c..00000000
--- a/business_objects/store/product_price.py
+++ /dev/null
@@ -1,106 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Product Price Business Object
-
-Description:
-Business object for product price
-"""
-
-# internal
-from business_objects.currency import Currency
-from business_objects.region import Region
-from business_objects.store.store_base import Store_Base
-from extensions import db
-# external
-from dataclasses import dataclass
-from typing import ClassVar
-
-class Product_Price(db.Model, Store_Base):
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_PRODUCT_PRICE
- NAME_ATTR_OPTION_TEXT = Store_Base.FLAG_TEXT
-
- id_price = db.Column(db.Integer, primary_key=True)
- id_permutation = db.Column(db.Integer)
- id_product = db.Column(db.Integer)
- id_category = db.Column(db.Integer)
- """
- id_currency = db.Column(db.Integer)
- code_currency = db.Column(db.String(50))
- name_currency = db.Column(db.String(255))
- symbol_currency = db.Column(db.String(50))
- """
- # id_region = db.Column(db.Integer)
- value_local_VAT_incl = db.Column(db.Float)
- value_local_VAT_excl = db.Column(db.Float)
- display_order = db.Column(db.Float)
-
- def __init__(self):
- super().__init__()
- Store_Base.__init__(self)
- self.currency = None
- self.delivery_region = None
- @classmethod
- def from_DB_get_many_product_catalogue(cls, query_row):
- # _m = 'Product_Price.from_DB_get_many_product_catalogue'
- price = cls()
- price.id_price = query_row[0]
- price.id_permutation = query_row[1]
- price.id_product = query_row[2]
- price.id_category = query_row[3]
- price.currency = Currency.from_DB_get_many_product_price_and_discount_and_delivery_region(query_row)
- """
- price.id_currency = query_row[4]
- price.code_currency = query_row[5]
- price.name_currency = query_row[6]
- price.symbol_currency = query_row[7]
- """
- # price.id_region = query_row[8]
- price.value_local_VAT_incl = query_row[9]
- price.value_local_VAT_excl = query_row[10]
- price.display_order = query_row[11]
- return price
-
- def __repr__(self):
- return f'''Product_Price
- id: {self.id_price}
- id_permutation: {self.id_permutation}
- id_product: {self.id_product}
- id_category: {self.id_category}
- currency: {self.currency}
- value_local (VAT incl): {self.value_local_VAT_incl}
- value_local (VAT excl): {self.value_local_VAT_excl}
- display_order (UID): {self.display_order}
- {self.FLAG_TEXT}: {self.currency.symbol} {self.value_local_VAT_incl}
- '''
-
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_PRODUCT_PRICE: self.id_price,
- self.ATTR_ID_PRODUCT_PERMUTATION: self.id_permutation,
- self.ATTR_ID_PRODUCT: self.id_product,
- self.ATTR_ID_PRODUCT_CATEGORY: self.id_category,
- self.FLAG_CURRENCY: self.currency.to_json(),
- # Region.ATTR_ID_REGION_DELIVERY: self.id_region,
- self.FLAG_VALUE_LOCAL_VAT_INCL: self.value_local_VAT_incl,
- self.FLAG_VALUE_LOCAL_VAT_EXCL: self.value_local_VAT_excl,
- self.FLAG_DISPLAY_ORDER: self.display_order
- }
-
- @classmethod
- def from_json(cls, json):
- price = cls()
- price.id_price = json[cls.ATTR_ID_PRODUCT_PRICE]
- price.id_permutation = json[cls.ATTR_ID_PRODUCT_PERMUTATION]
- price.id_product = json[cls.ATTR_ID_PRODUCT]
- price.id_category = json[cls.ATTR_ID_PRODUCT_CATEGORY]
- price.currency = Currency.from_json(json)
- # price.id_region = json[Region.ATTR_ID_REGION_DELIVERY]
- price.value_local_VAT_incl = json[cls.FLAG_VALUE_LOCAL_VAT_INCL]
- price.value_local_VAT_excl = json[cls.FLAG_VALUE_LOCAL_VAT_EXCL]
- price.display_order = json[cls.FLAG_DISPLAY_ORDER]
- return price
\ No newline at end of file
diff --git a/business_objects/store/product_variation.py b/business_objects/store/product_variation.py
deleted file mode 100644
index e5ae26a8..00000000
--- a/business_objects/store/product_variation.py
+++ /dev/null
@@ -1,217 +0,0 @@
-"""
-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.db_base import Get_Many_Parameters_Base
-from business_objects.store.store_base import Store_Base
-# from business_objects.store.product_variation_type import Product_Variation_Type
-from extensions import db
-from helpers.helper_app import Helper_App
-# external
-from dataclasses import dataclass
-from typing import ClassVar
-from pydantic import BaseModel
-from itertools import filterfalse
-from operator import attrgetter
-
-
-class Product_Variation(db.Model, Store_Base):
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_PRODUCT_VARIATION
- NAME_ATTR_OPTION_TEXT = Store_Base.FLAG_NAME
-
- id_variation = db.Column(db.Integer, primary_key=True)
- id_type = db.Column(db.Integer)
- code = db.Column(db.String(50))
- name = db.Column(db.String(255))
- display_order = db.Column(db.Integer)
- active = db.Column(db.Boolean)
-
- id_permutation = db.Column(db.Integer)
- id_product = db.Column(db.Integer)
- id_category = db.Column(db.Integer)
-
- def __init__(self):
- super().__init__()
- self.variation_type = None
-
- @classmethod
- def from_DB_get_many_product_catalogue(cls, query_row):
- variation = Product_Variation.from_DB_get_many_product_variation(query_row)
- variation.id_product = query_row[11]
- variation.id_permutation = query_row[12]
- variation.id_category = query_row[13]
- # variation.variation_type = Product_Variation_Type.from_DB_get_many_product_catalogue(query_row)
- return variation
-
- @classmethod
- def from_DB_get_many_product_variation(cls, query_row):
- variation = cls()
- variation.id_variation = query_row[0]
- variation.id_type = query_row[1]
- variation.code = query_row[2]
- variation.name = query_row[3]
- variation.display_order = query_row[4]
- variation.active = av.input_bool(query_row[5], cls.FLAG_ACTIVE, f'{cls.__name__}.from_DB_get_many_product_variation')
- return variation
-
- @classmethod
- def from_json(cls, json):
- variation = cls()
- variation.id_variation = json[cls.ATTR_ID_PRODUCT_VARIATION]
- variation.id_type = json[cls.ATTR_ID_PRODUCT_VARIATION_TYPE]
- variation.code = json[cls.FLAG_CODE]
- variation.name = json[cls.FLAG_NAME]
- variation.display_order = json[cls.FLAG_DISPLAY_ORDER]
- variation.active = 1 if av.input_bool(json[cls.FLAG_ACTIVE], cls.FLAG_ACTIVE, f'{cls.__name__}.from_json') else 0
- variation.id_permutation = json.get(cls.ATTR_ID_PRODUCT_PERMUTATION, None)
- variation.id_product = json.get(cls.ATTR_ID_PRODUCT, None)
- variation.id_category = json.get(cls.ATTR_ID_PRODUCT_CATEGORY, None)
- return variation
-
- def __repr__(self):
- return f'''
- {self.__class__.__name__}
- id_variation: {self.id_variation}
- id_type: {self.id_type}
- code: {self.code}
- name: {self.name}
- display_order: {self.display_order}
- active: {self.active}
- id_permutation: {self.id_permutation}
- id_product: {self.id_product}
- id_category: {self.id_category}
- variation_type: {self.variation_type}
- '''
-
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_PRODUCT_VARIATION: self.id_variation,
- self.ATTR_ID_PRODUCT_VARIATION_TYPE: self.id_type,
- self.FLAG_CODE: self.code,
- self.FLAG_NAME: self.name,
- self.FLAG_DISPLAY_ORDER: self.display_order,
- self.FLAG_ACTIVE: self.active,
- self.ATTR_ID_PRODUCT: self.id_product,
- self.ATTR_ID_PRODUCT_PERMUTATION: self.id_permutation,
- self.ATTR_ID_PRODUCT_CATEGORY: self.id_category,
- }
- def to_json_option(self):
- return {
- 'value': self.id_variation,
- 'text': self.name
- }
-
-class Parameters_Product_Variation(Get_Many_Parameters_Base):
- a_get_all_variation_type: bool
- a_get_inactive_variation_type: bool
- a_ids_variation_type: str
- a_get_all_variation: bool
- a_get_inactive_variation: bool
- a_ids_variation: str
- def __init__(self, **kwargs):
- super().__init__(**kwargs)
- @classmethod
- def get_default(cls):
- return cls(
- a_get_all_variation_type = True,
- a_get_inactive_variation_type = False,
- a_ids_variation_type = '',
- a_get_all_variation = True,
- a_get_inactive_variation = False,
- a_ids_variation = ''
- )
- @classmethod
- def from_filters_product_variation(cls, form):
- parameters = cls.get_default()
- get_inactive = not form.active.data
- parameters.a_get_inactive_variation_type = get_inactive
- parameters.a_get_inactive_variation = get_inactive
- return parameters
-
-"""
-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
-"""
-
-class Product_Variation_Temp(db.Model, Store_Base):
- __tablename__ = 'Shop_Variation_Temp'
- __table_args__ = { 'extend_existing': True }
- id_temp: int = db.Column(db.Integer, primary_key=True, autoincrement=True)
- id_variation: int = db.Column(db.Integer) # , primary_key=True)
- id_type: int = db.Column(db.Integer, nullable=False)
- code: str = db.Column(db.String(50))
- name: str = db.Column(db.String(255))
- active: bool = db.Column(db.Boolean)
- display_order: int = db.Column(db.Integer)
- guid: str = db.Column(db.String(36))
-
- def __repr__(self):
- attrs = '\n'.join(f'{k}={v!r}' for k, v in self.__dict__.items())
- return f'<{self.__class__.__name__}(\n{attrs}\n)>'
- def __init__(self):
- super().__init__()
- self.id_temp = None
- @classmethod
- def from_product_variation(cls, product_variation):
- row = cls()
- row.id_variation = product_variation.id_variation
- row.id_type = product_variation.id_type
- row.code = product_variation.code
- row.name = product_variation.name
- row.active = 1 if av.input_bool(product_variation.active, cls.FLAG_ACTIVE, f'{cls.__name__}.to_json') else 0
- row.display_order = product_variation.display_order
- return row
- def to_json(self):
- return {
- 'id_variation': self.id_variation,
- 'id_type': self.id_type,
- 'code': self.code,
- 'name': self.name,
- 'active': self.active,
- 'display_order': self.display_order,
- 'guid': self.guid,
- }
\ No newline at end of file
diff --git a/business_objects/store/product_variation_tree.py b/business_objects/store/product_variation_tree.py
deleted file mode 100644
index 00a3647e..00000000
--- a/business_objects/store/product_variation_tree.py
+++ /dev/null
@@ -1,161 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Product Business Object
-
-Description:
-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_type: Product_Variation_Type
- node_parent: None
- nodes_child: list
- def __init__(self):
- self.nodes_child = []
- def from_variation_type_and_node_parent(variation_type, node_parent):
- node = Product_Variation_Tree_Node()
- node.variation_type = variation_type
- node.node_parent = node_parent
- return node
- def from_node_parent(node_parent):
- node = Product_Variation_Tree_Node()
- node.node_parent = node_parent
- return node
- def add_child(self, node_child):
- self.nodes_child.append(node_child)
- def is_leaf(self):
- return (len(self.nodes_child) == 0)
-
-class Product_Variation_Tree():
- node_root: Product_Variation_Tree_Node
- @classmethod
- def from_node_root(cls, node_root):
- tree = cls()
- tree.node_root = node_root
- return tree
- @classmethod
- 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_variation_types()
- sz_me = len(my_type_list)
- other_type_list = tree.get_product_variation_types()
- sz_other = len(other_type_list)
- is_equal = (sz_me == sz_other)
- if is_equal:
- for index_type in range(sz_me):
- 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.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_type_and_node_parent(product_permutation.variation_types[depth + 1], node)
- return cls.from_node_root(node_root)
- @classmethod
- 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_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_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):
- variation_types = []
- if json_str is None or json_str == '': return None
- 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_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()
- while not at_leaf_node:
- node = node.nodes_child[0]
- at_leaf_node = node.is_leaf()
- return node
- def add_product_variation_type(self, variation_type):
- node_leaf = self.get_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_type)
- node = node.nodes_child[0]
- at_leaf_node = node.is_leaf()
- types.append(node.variation_type)
- return types
- """
- def get_product_variations(self):
- variations = []
- node = self.node_root
- at_leaf_node = node.is_leaf()
- variations.append(node.variation)
- while not at_leaf_node:
- node = node.nodes_child[0]
- 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')
- variation_types = self.get_product_variation_types()
- Helper_App.console_log(f'variation_types: {variation_types}')
- preview_str = ''
- for variation_type in variation_types:
- is_first = (preview_str == '')
- preview_str += f'{variation_type.name_singular}: {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):
- 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):
- variation_types = self.get_product_variation_types()
- pairs_str = ''
- for variation_type in variation_types:
- pairs_str += f'{variation_type.id_type}:{variation_type.variations[0].id_variation},'
- return pairs_str
\ No newline at end of file
diff --git a/business_objects/store/product_variation_type.py b/business_objects/store/product_variation_type.py
deleted file mode 100644
index 7e799893..00000000
--- a/business_objects/store/product_variation_type.py
+++ /dev/null
@@ -1,169 +0,0 @@
-"""
-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.product_variation import Product_Variation
-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
-from itertools import filterfalse
-from operator import attrgetter
-
-class Product_Variation_Type(db.Model, Store_Base):
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_PRODUCT_VARIATION_TYPE
- NAME_ATTR_OPTION_TEXT = Store_Base.FLAG_NAME
-
- id_type = db.Column(db.Integer, primary_key=True)
- code = db.Column(db.String(50))
- name_singular = db.Column(db.String(255))
- name_plural = db.Column(db.String(255))
- display_order = db.Column(db.Integer)
- active = db.Column(db.Boolean)
-
- def __init__(self):
- super().__init__()
- self.variations = []
-
- @classmethod
- def from_DB_get_many_product_catalogue(cls, query_row):
- variation_type = cls()
- variation_type.id_type = query_row[1]
- variation_type.code = query_row[6]
- variation_type.name_singular = query_row[7]
- variation_type.name_plural = query_row[8]
- variation_type.display_order = query_row[9]
- variation_type.active = av.input_bool(query_row[10], cls.FLAG_ACTIVE, f'{cls.__name__}.from_DB_get_many_product_catalogue')
- variation_type.variations = [Product_Variation.from_DB_get_many_product_catalogue(query_row)]
- return variation_type
-
- @classmethod
- def from_DB_get_many_product_variation(cls, query_row):
- variation_type = cls()
- variation_type.id_type = query_row[0]
- variation_type.code = query_row[1]
- variation_type.name_singular = query_row[2]
- variation_type.name_plural = query_row[3]
- variation_type.display_order = query_row[4]
- variation_type.active = av.input_bool(query_row[5], cls.FLAG_ACTIVE, f'{cls.__name__}.from_DB_get_many_product_variation')
- return variation_type
-
- @classmethod
- def from_json(cls, json):
- variation_type = cls()
- variation_type.id_type = json[cls.ATTR_ID_PRODUCT_VARIATION_TYPE]
- variation_type.code = json[cls.FLAG_CODE]
- variation_type.name_singular = json.get(cls.FLAG_NAME_SINGULAR, json.get(cls.FLAG_NAME, ''))
- variation_type.name_plural = json[cls.FLAG_NAME_PLURAL]
- variation_type.display_order = json[cls.FLAG_DISPLAY_ORDER]
- variation_type.active = json[cls.FLAG_ACTIVE]
- variations = json.get(cls.FLAG_PRODUCT_VARIATIONS, [])
- if variations is not None and len(variations) > 0:
- variation_type.variations = [Product_Variation.from_json(variation) for variation in variations]
- return variation_type
-
- def __repr__(self):
- return f'''
- {self.__class__.__name__}
- id_type: {self.id_type}
- code: {self.code}
- name_singular: {self.name_singular}
- name_plural: {self.name_plural}
- display_order: {self.display_order}
- active: {self.active}
- '''
-
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_PRODUCT_VARIATION_TYPE: self.id_type,
- self.FLAG_CODE: self.code,
- self.FLAG_NAME: self.name_singular,
- self.FLAG_NAME_PLURAL: self.name_plural,
- self.FLAG_DISPLAY_ORDER: self.display_order,
- self.FLAG_ACTIVE: self.active,
- self.FLAG_PRODUCT_VARIATIONS: [variation.to_json() for variation in self.variations]
- }
- def to_json_option(self):
- return {
- 'value': self.id_type,
- 'text': self.name_singular
- }
- """
- def get_preview_variations(self):
- preview = ''
- if len(self.variations) > 0:
- # preview = '\n'.join([variation.name for variation in self.variations])
- preview = '
' + '
'.join([variation.name for variation in self.variations]) + '
'
- return preview
- def get_str_list_ids_variation(self):
- if self.variations is None or len(self.variations) == 0:
- return ''
- return ','.join([str(variation.id_variation) for variation in self.variations])
- """
-
-class Product_Variation_Type_Temp(db.Model, Store_Base):
- __tablename__ = 'Shop_Variation_Type_Temp'
- __table_args__ = { 'extend_existing': True }
- id_temp: int = db.Column(db.Integer, primary_key=True, autoincrement=True)
- id_type: int = db.Column(db.Integer)
- code: str = db.Column(db.String(50))
- name: str = db.Column(db.String(255))
- name_plural: str = db.Column(db.String(256))
- active: bool = db.Column(db.Boolean)
- display_order: int = db.Column(db.Integer)
- guid: str = db.Column(db.String(36))
-
- def __init__(self):
- super().__init__()
- self.id_temp = None
- @classmethod
- def from_product_variation_type(cls, product_variation_type):
- row = cls()
- row.id_type = product_variation_type.id_type
- row.code = product_variation_type.code
- row.name = product_variation_type.name_singular
- row.name_plural = product_variation_type.name_plural
- row.active = 1 if av.input_bool(product_variation_type.active, cls.FLAG_ACTIVE, f'{cls.__name__}.from_product_variation_type') else 0
- row.display_order = product_variation_type.display_order
- return row
- def to_json(self):
- return {
- 'id_type': self.id_type,
- 'code': self.code,
- 'name': self.name,
- 'name_plural': self.name_plural,
- 'active': self.active,
- 'display_order': self.display_order,
- 'guid': self.guid,
- }
- def __repr__(self):
- return f'''
- {self.__class__.__name__}
- id_temp: {self.id_temp}
- id_type: {self.id_type}
- code: {self.code}
- name: {self.name}
- name_plural: {self.name_plural}
- active: {self.active}
- display_order: {self.display_order}
- guid: {self.guid}
- '''
\ No newline at end of file
diff --git a/business_objects/store/stock_item.py b/business_objects/store/stock_item.py
deleted file mode 100644
index 77fabadc..00000000
--- a/business_objects/store/stock_item.py
+++ /dev/null
@@ -1,303 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Stock Item Business Object
-"""
-
-# IMPORTS
-# internal
-import lib.argument_validation as av
-from lib import data_types
-from forms.store.stock_item import Filters_Stock_Item
-from business_objects.db_base import Get_Many_Parameters_Base
-from business_objects.currency import Currency
-# from business_objects.discount import Discount
-from business_objects.store.product_variation_tree import Product_Variation_Tree
-from business_objects.store.storage_location import Storage_Location
-from business_objects.store.store_base import Store_Base
-from extensions import db
-from helpers.helper_app import Helper_App
-# external
-from dataclasses import dataclass
-from typing import ClassVar, Optional
-from datetime import datetime
-
-
-class Stock_Item(db.Model, Store_Base):
- ATTR_ID_CURRENCY_COST: ClassVar[str] = f'{Store_Base.ATTR_ID_CURRENCY}_cost'
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_CURRENCY
- NAME_ATTR_OPTION_TEXT = Store_Base.FLAG_NAME
- FLAG_DATE_CONSUMED: ClassVar[str] = 'date_consumed'
- FLAG_DATE_EXPIRATION: ClassVar[str] = 'date_expiration'
- FLAG_DATE_PURCHASED: ClassVar[str] = 'date_purchased'
- FLAG_DATE_RECEIVED: ClassVar[str] = 'date_received'
- FLAG_DATE_UNSEALED: ClassVar[str] = 'date_unsealed'
- FLAG_IS_CONSUMED: ClassVar[str] = 'is_consumed'
- FLAG_IS_SEALED: ClassVar[str] = 'is_sealed'
-
- id_stock = db.Column(db.Integer, primary_key=True)
- id_permutation = db.Column(db.Integer)
- id_product = db.Column(db.Integer)
- id_category = db.Column(db.Integer)
- id_location_storage = db.Column(db.Integer)
- id_plant = db.Column(db.Integer)
- id_region = db.Column(db.Integer)
- id_currency_cost = db.Column(db.Integer)
- cost_local_VAT_excl = db.Column(db.Float)
- cost_local_VAT_incl = db.Column(db.Float)
- date_purchased = db.Column(db.DateTime)
- date_received = db.Column(db.DateTime)
- is_sealed = db.Column(db.Boolean)
- date_unsealed = db.Column(db.DateTime)
- date_expiration = db.Column(db.DateTime)
- is_consumed = db.Column(db.Boolean)
- date_consumed = db.Column(db.DateTime)
- active = db.Column(db.Boolean)
- """
- can_view = db.Column(db.Boolean)
- can_edit = db.Column(db.Boolean)
- can_admin = db.Column(db.Boolean)
- """
- # variation_tree: Product_Variation_Tree = None
-
- def __init__(self):
- super().__init__()
- Store_Base.__init__(self)
- self.currency_cost = None
- self.storage_location = None
- self.variation_tree = None
- self.has_variations = False
-
- def from_DB_stock_item(query_row):
- _m = 'Product.from_DB_stock_item'
- v_arg_type = 'class attribute'
- stock_item = Stock_Item()
- stock_item.id_stock = query_row[0]
- stock_item.id_permutation = query_row[1]
- stock_item.id_product = query_row[2]
- stock_item.id_category = query_row[3]
- stock_item.id_location_storage = query_row[4]
- stock_item.storage_location = Storage_Location.from_DB_stock_item(query_row)
- stock_item.id_currency_cost = query_row[12]
- stock_item.currency_cost = Currency.from_DB_stock_item(query_row)
- stock_item.cost_local_VAT_excl = query_row[15]
- stock_item.cost_local_VAT_incl = query_row[16]
- stock_item.date_purchased = query_row[17]
- stock_item.date_received = query_row[18]
- stock_item.is_sealed = av.input_bool(query_row[19], "is_sealed", _m, v_arg_type=v_arg_type)
- stock_item.date_unsealed = query_row[20]
- stock_item.date_expiration = query_row[21]
- stock_item.is_consumed = av.input_bool(query_row[22], "is_consumed", _m, v_arg_type=v_arg_type)
- stock_item.date_consumed = query_row[23]
- stock_item.active = av.input_bool(query_row[24], "active", _m, v_arg_type=v_arg_type)
- """
- stock_item.can_view = av.input_bool(query_row[24], "can_view", _m, v_arg_type=v_arg_type)
- stock_item.can_edit = av.input_bool(query_row[25], "can_edit", _m, v_arg_type=v_arg_type)
- stock_item.can_admin = av.input_bool(query_row[26], "can_admin", _m, v_arg_type=v_arg_type)
- """
- return stock_item
-
- @classmethod
- def from_json(cls, json):
- stock_item = cls()
- stock_item.id_stock = json[cls.ATTR_ID_STOCK_ITEM]
- stock_item.id_permutation = json.get(cls.ATTR_ID_PRODUCT_PERMUTATION, 0)
- stock_item.id_product = json[cls.ATTR_ID_PRODUCT]
- stock_item.id_category = json[cls.ATTR_ID_PRODUCT_CATEGORY]
- Helper_App.console_log(f'json: {json}\nhalf stock item: {stock_item}')
- stock_item.variation_tree = Product_Variation_Tree.from_json_str(json[cls.FLAG_PRODUCT_VARIATIONS])
- stock_item.date_purchased = json[cls.FLAG_DATE_PURCHASED]
- stock_item.date_received = json[cls.FLAG_DATE_RECEIVED]
- stock_item.id_location_storage = json[cls.ATTR_ID_STORAGE_LOCATION]
- stock_item.id_currency_cost = json[cls.ATTR_ID_CURRENCY_COST]
- stock_item.cost_local_VAT_excl = json[cls.FLAG_COST_UNIT_LOCAL_VAT_EXCL]
- stock_item.cost_local_VAT_incl = json[cls.FLAG_COST_UNIT_LOCAL_VAT_INCL]
- stock_item.is_sealed = json[cls.FLAG_IS_SEALED]
- stock_item.date_unsealed = json[cls.FLAG_DATE_UNSEALED]
- stock_item.date_expiration = json[cls.FLAG_DATE_EXPIRATION]
- stock_item.is_consumed = json[cls.FLAG_IS_CONSUMED]
- stock_item.date_consumed = json[cls.FLAG_DATE_CONSUMED]
- stock_item.active = json[cls.FLAG_ACTIVE]
- return stock_item
- def __repr__(self):
- return f'''Stock Item
- id_stock: {self.id_stock}
- id_permutation: {self.id_permutation}
- id_product: {self.id_product}
- id_category: {self.id_category}
- variations: {self.variation_tree.to_preview_str() if self.variation_tree is not None else 'None'}
- storage_location: {self.storage_location}
- currency: {self.currency_cost}
- cost_local_VAT_excl: {self.cost_local_VAT_excl}
- cost_local_VAT_incl: {self.cost_local_VAT_incl}
- date_purchased: {self.date_purchased}
- date_received: {self.date_received}
- is_sealed: {self.is_sealed}
- date_unsealed: {self.date_unsealed}
- date_expiration: {self.date_expiration}
- is_consumed: {self.is_consumed}
- date_consumed: {self.date_consumed}
- active: {self.active}
- '''
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_STOCK_ITEM: self.id_stock,
- self.ATTR_ID_PRODUCT_PERMUTATION: self.id_permutation,
- self.ATTR_ID_PRODUCT: self.id_product,
- self.ATTR_ID_PRODUCT_CATEGORY: self.id_category,
- self.FLAG_STORAGE_LOCATION: self.storage_location.to_json(),
- self.FLAG_CURRENCY_COST: self.currency_cost.to_json(),
- self.FLAG_COST_UNIT_LOCAL_VAT_EXCL: self.cost_local_VAT_excl,
- self.FLAG_COST_UNIT_LOCAL_VAT_INCL: self.cost_local_VAT_incl,
- }
- def has_permutations(self):
- return len(self.permutations) > 0
- def is_available(self):
- if len(self.permutations) == 0:
- return False
- for permutation in self.permutations:
- if permutation.is_available():
- return True
- return False
- """
- def to_permutation_row_list(self):
- list_rows = []
- for permutation in self.permutations:
- list_rows.append(permutation.to_row_permutation())
- return list_rows
- def to_json_option(self):
- return {
- 'value': self.id_stock_item,
- 'text': self.id_stock_item
- }
- """
-
-class Parameters_Stock_Item(Get_Many_Parameters_Base):
- a_get_all_product_permutation: bool
- a_get_inactive_product_permutation: bool
- a_ids_product_permutation: str
- a_get_all_stock_item: bool
- a_get_inactive_stock_item: bool
- a_ids_stock_item: str
- a_get_all_region_storage: bool
- a_get_inactive_region_storage: bool
- a_ids_region_storage: str
- a_get_all_plant_storage: bool
- a_get_inactive_plant_storage: bool
- a_ids_plant_storage: str
- a_get_all_location_storage: bool
- a_get_inactive_location_storage: bool
- a_ids_location_storage: str
- a_date_received_to: Optional[datetime] = None
- a_get_sealed_stock_item_only: bool
- a_get_unsealed_stock_item_only: bool
- a_get_expired_stock_item_only: bool
- a_get_nonexpired_stock_item_only: bool
- a_get_consumed_stock_item_only: bool
- a_get_nonconsumed_stock_item_only: bool
-
- def __init__(self, **kwargs):
- super().__init__(**kwargs)
-
- @classmethod
- def get_default(cls):
- return cls(
- # a_id_user = id_user,
- a_get_all_product_permutation = False,
- a_get_inactive_product_permutation = False,
- a_ids_product_permutation = '',
- a_get_all_stock_item = True,
- a_get_inactive_stock_item = False,
- a_ids_stock_item = '',
- a_get_all_region_storage = True,
- a_get_inactive_region_storage = False,
- a_ids_region_storage = '',
- a_get_all_plant_storage = True,
- a_get_inactive_plant_storage = False,
- a_ids_plant_storage = '',
- a_get_all_location_storage = True,
- a_get_inactive_location_storage = False,
- a_ids_location_storage = '',
- a_date_received_to = None,
- a_get_sealed_stock_item_only = False,
- a_get_unsealed_stock_item_only = False,
- a_get_expired_stock_item_only = False,
- a_get_nonexpired_stock_item_only = False,
- a_get_consumed_stock_item_only = False,
- a_get_nonconsumed_stock_item_only = False
- )
-
- @classmethod
- def from_form_stock_item(cls, form):
- return cls.get_default()
-
-
-class Stock_Item_Temp(db.Model, Store_Base):
- __tablename__: ClassVar[str] = 'Shop_Stock_Item_Temp'
- __table_args__ = { 'extend_existing': True }
- id_stock: int = db.Column(db.Integer, primary_key=True)
- # id_category: int = db.Column(db.Integer)
- id_product: int = db.Column(db.Integer)
- # has_variations: bool = db.Column(db.Boolean)
- id_permutation: int = db.Column(db.Integer)
- id_pairs_variations: str = db.Column(db.String(4000))
- date_purchased: datetime = db.Column(db.DateTime)
- date_received: datetime = db.Column(db.DateTime, nullable=True)
- id_location_storage: int = db.Column(db.Integer)
- id_currency_cost: int = db.Column(db.Integer)
- cost_local_VAT_excl: float = db.Column(db.Float)
- cost_local_VAT_incl: float = db.Column(db.Float)
- is_sealed: bool = db.Column(db.Boolean)
- date_unsealed: datetime = db.Column(db.DateTime, nullable=True)
- date_expiration: datetime = db.Column(db.DateTime, nullable=True)
- is_consumed: bool = db.Column(db.Boolean)
- date_consumed: datetime = db.Column(db.DateTime, nullable=True)
- active: bool = db.Column(db.Boolean)
- guid: str = db.Column(db.String(36))
-
- @classmethod
- def from_stock_item(cls, stock_item):
- row = cls()
- row.id_stock = stock_item.id_stock
- # row.id_category = stock_item.id_category
- row.id_product = stock_item.id_product
- row.id_permutation = stock_item.id_permutation
- # row.has_variations = stock_item.has_variations
- row.id_pairs_variations = stock_item.variation_tree.to_json_str() if stock_item.variation_tree is not None else ''
- row.date_purchased = stock_item.date_purchased
- row.date_received = stock_item.date_received if stock_item.date_received else None
- row.id_location_storage = stock_item.id_location_storage
- row.id_currency_cost = stock_item.id_currency_cost
- row.cost_local_VAT_excl = stock_item.cost_local_VAT_excl
- row.cost_local_VAT_incl = stock_item.cost_local_VAT_incl
- row.is_sealed = 1 if stock_item.is_sealed else 0
- row.date_unsealed = stock_item.date_unsealed if stock_item.date_unsealed else None
- row.date_expiration = stock_item.date_expiration if stock_item.date_expiration else None
- row.is_consumed = 1 if stock_item.is_consumed else 0
- row.date_consumed = stock_item.date_consumed if stock_item.date_consumed else None
- row.active = 1 if stock_item.active else 0
- return row
- def __repr__(self):
- return f'''
-id_stock: {self.id_stock}
-id_product: {self.id_product}
-id_permutation: {self.id_permutation}
-id_pairs_variations: {self.id_pairs_variations}
-date_purchased: {self.date_purchased}
-date_received: {self.date_received}
-id_location_storage: {self.id_location_storage}
-id_currency_cost: {self.id_currency_cost}
-cost_local_VAT_excl: {self.cost_local_VAT_excl}
-cost_local_VAT_incl: {self.cost_local_VAT_incl}
-is_sealed: {self.is_sealed}
-date_unsealed: {self.date_unsealed}
-date_expiration: {self.date_expiration}
-is_consumed: {self.is_consumed}
-date_consumed: {self.date_consumed}
-active: {self.active}
-guid: {self.guid}
- '''
\ No newline at end of file
diff --git a/business_objects/store/storage_location.py b/business_objects/store/storage_location.py
deleted file mode 100644
index 61a3fb8f..00000000
--- a/business_objects/store/storage_location.py
+++ /dev/null
@@ -1,88 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Product Category Business Object
-
-Description:
-Business object for product
-"""
-
-# internal
-import lib.argument_validation as av
-from business_objects.store.plant import Plant
-from business_objects.store.store_base import Store_Base
-from extensions import db
-from helpers.helper_app import Helper_App
-# external
-from typing import ClassVar
-
-
-class Storage_Location(db.Model, Store_Base):
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_STORAGE_LOCATION
- NAME_ATTR_OPTION_TEXT: ClassVar[str] = Store_Base.FLAG_NAME
- __tablename__ = 'Shop_Storage_Location_Temp'
- id_location = db.Column(db.Integer, primary_key=True)
- id_plant = db.Column(db.Integer)
- code = db.Column(db.String(50))
- name = db.Column(db.String(255))
- active = db.Column(db.Boolean)
-
- # plant = None
-
- def __init__(self):
- super().__init__()
- Store_Base.__init__(self)
- self.plant = None
-
- @classmethod
- def from_DB_storage_location(cls, query_row):
- location = cls()
- location.id_location = query_row[0]
- location.id_plant = query_row[1]
- location.plant = Plant.from_DB_storage_location(query_row)
- location.code = query_row[4]
- location.name = query_row[5]
- location.active = query_row[6]
- return location
- @classmethod
- def from_DB_stock_item(cls, query_row):
- location = cls()
- location.id_location = query_row[4]
- location.id_plant = query_row[5]
- location.code = query_row[8]
- location.name = query_row[9]
- location.plant = Plant.from_DB_stock_item(query_row)
- return location
- def __repr__(self):
- return f'''
- {self.ATTR_ID_STORAGE_LOCATION}: {self.id_location}
- {self.ATTR_ID_PLANT}: {self.id_plant}
- {self.FLAG_CODE}: {self.code}
- {self.FLAG_NAME}: {self.name}
- {self.FLAG_ACTIVE}: {self.active}
- '''
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_STORAGE_LOCATION: self.id_location,
- self.ATTR_ID_PLANT: self.id_plant,
- self.FLAG_CODE: self.code,
- self.FLAG_NAME: self.name,
- self.FLAG_ACTIVE: 1 if av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json') else 0
- }
- @classmethod
- def from_json(cls, json):
- Helper_App.console_log(f'{cls.__name__}.from_json: {json}')
- location = cls()
- location.id_location = json[cls.ATTR_ID_STORAGE_LOCATION],
- location.id_plant = json[cls.ATTR_ID_PLANT],
- location.code = json[cls.FLAG_CODE],
- location.name = json[cls.FLAG_NAME],
- location.active = json[cls.FLAG_ACTIVE]
- return location
-
- def get_full_name(self):
- return f'{self.plant.name} - {self.name}'
\ No newline at end of file
diff --git a/business_objects/store/store_base.py b/business_objects/store/store_base.py
deleted file mode 100644
index 4eac4567..00000000
--- a/business_objects/store/store_base.py
+++ /dev/null
@@ -1,129 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Base Store Business Object
-
-Description:
-Abstract business object for store objects
-"""
-
-# internal
-# from helpers.DEPRECATED.helper_abc import Interface_ABC
-from business_objects.base import Base
-from extensions import db
-import lib.argument_validation as av
-# external
-from typing import ClassVar
-
-"""
-class I_Store_Base():
- @abstractmethod
- def __repr__(self):
- pass
- @classmethod
- @abstractmethod
- def from_json(cls, json):
- pass
- @abstractmethod
- def to_json(self):
- pass
- @abstractmethod
- def to_json_option(self):
- pass
- @abstractmethod
- def test_69 (self):
- pass
- ""
- def __init_subclass__(cls, **kwargs):
- super().__init_subclass__(**kwargs)
- for name, value in vars(Store_Base).items():
- if getattr(value, "__isabstractmethod__", False):
- if name not in cls.__dict__:
- raise TypeError(f"Can't instantiate class {cls.__name__} "
- f"without implementation of abstract method {name}")
- subclass_value = cls.__dict__[name]
- if (isinstance(value, (staticmethod, classmethod)) and
- not isinstance(subclass_value, type(value))):
- raise TypeError(f"Abstract {type(value).__name__} {name} in {cls.__name__} "
- f"must be implemented as a {type(value).__name__}")
- def __new__(cls, *args, **kwargs):
- if cls is Store_Base:
- raise TypeError("Can't instantiate abstract class Store_Base directly")
- return super().__new__(cls)
- ""
-"""
-
-class Store_Base(Base):
- # ATTR_ID_CURRENCY_COST: ClassVar[str] = 'id_currency_cost'
- ATTR_ID_CUSTOMER: ClassVar[str] = 'id_customer'
- ATTR_ID_CUSTOMER_ADDRESS: ClassVar[str] = 'id_address'
- ATTR_ID_CUSTOMER_SALES_ORDER: ClassVar[str] = 'id_customer_sales_order'
- ATTR_ID_DELIVERY_OPTION: ClassVar[str] = 'id_delivery_option'
- ATTR_ID_DISCOUNT: ClassVar[str] = 'id_discount'
- ATTR_ID_IMAGE: ClassVar[str] = 'id_image'
- ATTR_ID_MANUFACTURING_PURCHASE_ORDER: ClassVar[str] = 'id_order'
- ATTR_ID_MANUFACTURING_PURCHASE_ORDER_PRODUCT_LINK: ClassVar[str] = 'id_link'
- ATTR_ID_PLANT: ClassVar[str] = 'id_plant'
- ATTR_ID_PRODUCT: ClassVar[str] = 'id_product'
- ATTR_ID_PRODUCT_CATEGORY: ClassVar[str] = 'id_category'
- ATTR_ID_PRODUCT_IMAGE: ClassVar[str] = 'id_image'
- ATTR_ID_PRODUCT_PERMUTATION: ClassVar[str] = 'id_permutation'
- ATTR_ID_PRODUCT_PRICE: ClassVar[str] = 'id_price'
- ATTR_ID_PRODUCT_VARIATION: ClassVar[str] = 'id_variation'
- ATTR_ID_PRODUCT_VARIATION_TYPE: ClassVar[str] = 'id_type'
- ATTR_ID_STOCK_ITEM: ClassVar[str] = 'id_stock_item'
- ATTR_ID_STORAGE_LOCATION: ClassVar[str] = 'id_location'
- ATTR_ID_SUPPLIER: ClassVar[str] = 'id_supplier'
- ATTR_ID_SUPPLIER_ADDRESS: ClassVar[str] = 'id_address'
- ATTR_ID_SUPPLIER_PURCHASE_ORDER: ClassVar[str] = 'id_order'
- ATTR_ID_SUPPLIER_PURCHASE_ORDER_PRODUCT_LINK: ClassVar[str] = 'id_link'
- ATTR_ID_UNIT_MEASUREMENT_LATENCY_MANUFACTURE: ClassVar[str] = 'id_unit_latency_manufacture'
- ATTR_ID_UNIT_MEASUREMENT_QUANTITY: ClassVar[str] = 'id_unit_quantity'
- # FLAG_COST_LOCAL: ClassVar[str] = 'cost_local'
- FLAG_COST_TOTAL_LOCAL_VAT_EXCL: ClassVar[str] = 'cost_total_local_vat_excl'
- FLAG_COST_TOTAL_LOCAL_VAT_INCL: ClassVar[str] = 'cost_total_local_vat_incl'
- FLAG_COST_UNIT_LOCAL_VAT_EXCL: ClassVar[str] = 'cost_unit_local_vat_excl'
- FLAG_COST_UNIT_LOCAL_VAT_INCL: ClassVar[str] = 'cost_unit_local_vat_incl'
- FLAG_CUSTOMER: ClassVar[str] = 'customer'
- FLAG_CUSTOMER_ADDRESS: ClassVar[str] = 'customer_address'
- FLAG_CUSTOMER_SALES_ORDER: ClassVar[str] = 'customer_sales_order'
- FLAG_DELIVERY_OPTION: ClassVar[str] = 'delivery_option'
- FLAG_DISCOUNT: ClassVar[str] = 'discount'
- FLAG_HAS_VARIATIONS: ClassVar[str] = 'has_variations'
- FLAG_IS_OUT_OF_STOCK: ClassVar[str] = 'is_out_of_stock'
- FLAG_LATENCY_DELIVERY_DAYS: ClassVar[str] = 'latency_delivery_days'
- FLAG_LATENCY_MANUFACTURE: ClassVar[str] = 'latency_manufacture'
- FLAG_MANUFACTURING_PURCHASE_ORDER: ClassVar[str] = 'manufacturing_purchase_order'
- FLAG_ORDER_ITEMS: ClassVar[str] = 'order_items'
- FLAG_PLANT: ClassVar[str] = 'plant'
- FLAG_PRICE_TOTAL_LOCAL_VAT_EXCL: ClassVar[str] = 'price_total_local_vat_excl'
- FLAG_PRICE_TOTAL_LOCAL_VAT_INCL: ClassVar[str] = 'price_total_local_vat_incl'
- FLAG_PRICE_UNIT_LOCAL_VAT_EXCL: ClassVar[str] = 'price_unit_local_vat_excl'
- FLAG_PRICE_UNIT_LOCAL_VAT_INCL: ClassVar[str] = 'price_unit_local_vat_incl'
- FLAG_PRODUCT: ClassVar[str] = 'product'
- FLAG_PRODUCT_CATEGORY: ClassVar[str] = 'product_category'
- FLAG_PRODUCT_IMAGE: ClassVar[str] = 'product_image'
- FLAG_PRODUCT_PERMUTATION: ClassVar[str] = 'product_permutation'
- FLAG_PRODUCT_PRICE: ClassVar[str] = 'product_price'
- FLAG_PRODUCT_VARIATION: ClassVar[str] = 'product_variation'
- FLAG_PRODUCT_VARIATIONS: ClassVar[str] = f'{FLAG_PRODUCT_VARIATION}s'
- FLAG_PRODUCT_VARIATION_TYPE: ClassVar[str] = 'product_variation_type'
- FLAG_QUANTITY_MIN: ClassVar[str] = 'quantity_min'
- FLAG_QUANTITY_MAX: ClassVar[str] = 'quantity_max'
- FLAG_QUANTITY_ORDERED: ClassVar[str] = 'quantity_ordered'
- FLAG_QUANTITY_RECEIVED: ClassVar[str] = 'quantity_received'
- FLAG_STOCK_ITEM: ClassVar[str] = 'stock_item'
- FLAG_STORAGE_LOCATION: ClassVar[str] = 'storage_location'
- FLAG_SUPPLIER: ClassVar[str] = 'supplier'
- FLAG_SUPPLIER_ADDRESS: ClassVar[str] = 'supplier_address'
- FLAG_SUPPLIER_PURCHASE_ORDER: ClassVar[str] = 'supplier_purchase_order'
- FLAG_TEXT: ClassVar[str] = 'text'
- FLAG_UNIT_MEASUREMENT_LATENCY_MANUFACTURE: ClassVar[str] = 'unit_measurement_latency_manufacture'
- FLAG_UNIT_MEASUREMENT_QUANTITY: ClassVar[str] = 'unit_measurement_quantity'
- FLAG_VALUE_TEXT: ClassVar[str] = 'value_text'
-
- def __repr__(self):
- return str(self.__dict__)
\ No newline at end of file
diff --git a/business_objects/store/stripe.py b/business_objects/store/stripe.py
deleted file mode 100644
index 3ed8c54d..00000000
--- a/business_objects/store/stripe.py
+++ /dev/null
@@ -1,161 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Stripe Business Object
-
-Description:
-Business objects for Stripe
-"""
-
-# internal
-import lib.argument_validation as av
-from lib import data_types
-from forms.forms import Form_Basket_Add, Form_Basket_Edit # Form_Product
-from extensions import db
-from helpers.helper_app import Helper_App
-# external
-from datetime import datetime, timedelta
-import locale
-
-class Stripe_Product(db.Model):
- id_product = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(255))
- description = db.Column(db.String(4000))
- price_GBP_full = db.Column(db.Float)
- id_category = db.Column(db.Integer)
- lead_time_manuf = db.Column(db.Integer)
- quantity_min = db.Column(db.Float)
- quantity_max = db.Column(db.Float)
- quantity_step = db.Column(db.Float)
- quantity_stock = db.Column(db.Float)
- id_stripe_product = db.Column(db.String(255))
- id_stripe_price = db.Column(db.String(255))
- is_subscription = db.Column(db.Boolean)
- name_recurring_interval = db.Column(db.String(255))
- name_plural_recurring_interval = db.Column(db.String(256))
- count_recurring_interval = db.Column(db.Integer)
- display_order = db.Column(db.Integer)
- can_view = db.Column(db.Boolean)
- can_edit = db.Column(db.Boolean)
- can_admin = db.Column(db.Boolean)
- # form_basket_add: Form_Basket_Add
- # form_basket_edit: Form_Basket_Edit
-
- def __new__(cls, id, name, description, price_GBP_full, id_category, lead_time_manuf, quantity_min, quantity_max, quantity_step, quantity_stock, id_stripe_product, id_stripe_price,
- is_subscription, name_recurring_interval, name_plural_recurring_interval, count_recurring_interval, display_order, can_view, can_edit, can_admin):
- _m = 'Product.__new__'
- v_arg_type = 'class attribute'
- av.val_int(id, 'id', _m, 0, v_arg_type=v_arg_type)
- av.val_str(name, 'name', _m, max_len=256, v_arg_type=v_arg_type)
- av.val_str(description, 'description', _m, max_len=4000, v_arg_type=v_arg_type)
- av.full_val_float(price_GBP_full, 'price_GBP_full', _m, 0., v_arg_type=v_arg_type)
- av.val_int(id_category, 'id_category', _m, 0, v_arg_type=v_arg_type)
- av.val_int(lead_time_manuf, 'lead_time_manuf', _m, 0, v_arg_type=v_arg_type)
- av.full_val_float(quantity_step, 'quantity_step', _m, 0., v_arg_type=v_arg_type)
- av.full_val_float(quantity_min, 'quantity_min', _m, quantity_step, v_arg_type=v_arg_type)
- av.full_val_float(quantity_max, 'quantity_max', _m, quantity_min, v_arg_type=v_arg_type)
- av.full_val_float(quantity_stock, 'quantity_stock', _m, 0, v_arg_type=v_arg_type)
- av.val_str(id_stripe_product, 'id_stripe_product', _m, max_len=100, v_arg_type=v_arg_type)
- av.val_str(id_stripe_price, 'id_stripe_price', _m, max_len=100, v_arg_type=v_arg_type)
- av.full_val_bool(is_subscription, 'is_subscription', _m, v_arg_type=v_arg_type)
- Helper_App.console_log(f'is_subscription: {is_subscription}, {av.input_bool(is_subscription, "is_subscription", _m, v_arg_type=v_arg_type)}')
- is_subscription = av.input_bool(is_subscription, "is_subscription", _m, v_arg_type=v_arg_type)
- if is_subscription:
- av.val_str(name_recurring_interval, 'name_recurring_interval', _m, max_len=255, v_arg_type=v_arg_type)
- av.val_str(name_plural_recurring_interval, 'name_plural_recurring_interval', _m, max_len=256, v_arg_type=v_arg_type)
- av.val_int(count_recurring_interval, 'count_recurring_interval', _m, 0, v_arg_type=v_arg_type)
- av.val_int(display_order, 'display_order', _m, v_arg_type=v_arg_type)
- av.full_val_bool(can_view, 'can_view', _m, v_arg_type=v_arg_type)
- # can_view = av.input_bool(can_view, "can_view", _m, v_arg_type=v_arg_type)
- av.full_val_bool(can_edit, 'can_edit', _m, v_arg_type=v_arg_type)
- # can_edit = av.input_bool(can_edit, "can_edit", _m, v_arg_type=v_arg_type)
- av.full_val_bool(can_admin, 'can_admin', _m, v_arg_type=v_arg_type)
- # can_admin = av.input_bool(can_admin, "can_admin", _m, v_arg_type=v_arg_type)
- return super(Product, cls).__new__(cls) # , id, name, description, price_GBP, id_category, lead_time_manuf, quantity_min, quantity_max, quantity_step, quantity_stock, id_stripe_product, id_stripe_price,
- # is_subscription, name_recurring_interval, name_plural_recurring_interval, count_recurring_interval, can_view, can_edit, can_admin)
-
- def __init__(self, id, name, description, price_GBP_full, id_category, lead_time_manuf, quantity_min, quantity_max, quantity_step, quantity_stock, id_stripe_product, id_stripe_price,
- is_subscription, name_recurring_interval, name_plural_recurring_interval, count_recurring_interval, display_order, can_view, can_edit, can_admin):
- _m = 'Product.__new__'
- v_arg_type = 'class attribute'
- self.id_product = id
- self.name = name
- self.description = description
- self.price_GBP_full = price_GBP_full
- self.id_category = id_category
- self.lead_time_manuf = lead_time_manuf
- self.quantity_min = quantity_min
- self.quantity_max = quantity_max
- self.quantity_step = quantity_step
- self.quantity_stock = quantity_stock
- self.id_stripe_product = id_stripe_product
- self.id_stripe_price = id_stripe_price
- self.is_subscription = av.input_bool(is_subscription, "is_subscription", _m, v_arg_type=v_arg_type)
- self.name_recurring_interval = name_recurring_interval
- self.name_plural_recurring_interval = name_plural_recurring_interval
- self.count_recurring_interval = count_recurring_interval
- self.display_order = display_order
- self.can_view = av.input_bool(can_view, "can_view", _m, v_arg_type=v_arg_type)
- self.can_edit = av.input_bool(can_edit, "can_edit", _m, v_arg_type=v_arg_type)
- self.can_admin = av.input_bool(can_admin, "can_admin", _m, v_arg_type=v_arg_type)
- self.variations = []
- self.images = []
- self.delivery_options = []
- self.discounts = []
- self.discount_index = {}
- super().__init__()
- self.form_basket_add = Form_Basket_Add()
- self.form_basket_edit = Form_Basket_Edit()
-
- def output_lead_time(self):
- return '1 day' if self.lead_time_manuf == 1 else f'{self.lead_time_manuf} days'
-
- def output_delivery_date(self):
- return (datetime.now() + timedelta(days=self.lead_time_manuf)).strftime('%A, %d %B %Y')
-
- def output_price(self):
- locale.setlocale(locale.LC_ALL, '')
- return locale.format_string("%d", self.price_GBP_full, grouping=True)
- """
- def add_form_basket_add(self):
- self.form_basket_add = None
-
- def add_form_basket_edit(self):
- self.form_basket_edit = None
- """
- def __repr__(self):
- return f'''Product
- id: {self.id_product}
- name: {self.name}
- description: {self.description}
- price_GBP_full: {self.price_GBP_full}
- id_category: {self.id_category}
- lead_time_manuf: {self.lead_time_manuf}
- quantity_min: {self.quantity_min}
- quantity_max: {self.quantity_max}
- quantity_step: {self.quantity_step}
- quantity_stock: {self.quantity_stock}
- id_stripe_product: {self.id_stripe_product}
- id_stripe_price: {self.id_stripe_price}
- is_subscription: {self.is_subscription}
- name_recurring_interval: {self.name_recurring_interval}
- name_plural_recurring_interval: {self.name_plural_recurring_interval}
- count_recurring_interval: {self.count_recurring_interval}
- display_order: {self.display_order}
- can_view: {self.can_view}
- can_edit: {self.can_edit}
- can_admin: {self.can_admin}
- variations: {self.variations}
- images: {self.images}
- delivery_options: {self.delivery_options}
- '''
-
- def add_product_price_discount(self, discount):
- _m = 'Category.add_product'
- av.val_instance(discount, 'discount', _m, Discount)
- # self.product_index.append(len(self.products))
- self.discount_index[discount.id_discount] = len(self.discounts)
- self.discounts.append(discount)
\ No newline at end of file
diff --git a/business_objects/store/supplier.py b/business_objects/store/supplier.py
deleted file mode 100644
index d4752bef..00000000
--- a/business_objects/store/supplier.py
+++ /dev/null
@@ -1,200 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Supplier Business Object
-
-Description:
-Business object for supplier
-"""
-
-# internal
-import lib.argument_validation as av
-from business_objects.store.supplier_address import Supplier_Address
-from business_objects.currency import Currency
-from business_objects.db_base import Get_Many_Parameters_Base
-from business_objects.store.store_base import Store_Base
-from extensions import db
-from helpers.helper_app import Helper_App
-# external
-from pydantic import BaseModel
-from typing import ClassVar
-
-
-class Supplier(db.Model, Store_Base):
- FLAG_DEPARTMENT_CONTACT: ClassVar[str] = 'department_contact'
- FLAG_NAME_COMPANY: ClassVar[str] = 'name_company'
- FLAG_NAME_CONTACT: ClassVar[str] = 'name_contact'
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_SUPPLIER
- NAME_ATTR_OPTION_TEXT: ClassVar[str] = FLAG_NAME_COMPANY
- __tablename__ = 'Shop_Supplier'
- id_supplier = db.Column(db.Integer, primary_key=True)
- # id_address = db.Column(db.Integer)
- id_currency = db.Column(db.Integer)
- name_company = db.Column(db.String(255))
- name_contact = db.Column(db.String(255))
- department_contact = db.Column(db.String(255))
- phone_number = db.Column(db.String(50))
- fax = db.Column(db.String(50))
- email = db.Column(db.String(255))
- website = db.Column(db.String(255))
- active = db.Column(db.Boolean)
- created_on = db.Column(db.DateTime)
- created_by = db.Column(db.Integer)
- def __init__(self):
- super().__init__()
- Store_Base.__init__(self)
- self.addresses = []
- self.currency = None
- @classmethod
- def from_DB_supplier(cls, query_row):
- supplier = cls()
- supplier.id_supplier = query_row[0]
- # supplier.id_address = query_row[1]
- # supplier.address = Supplier_Address.from_DB_supplier(query_row)
- supplier.id_currency = query_row[1]
- supplier.currency = Currency.from_DB_supplier(query_row)
- supplier.name_company = query_row[4]
- supplier.name_contact = query_row[5]
- supplier.department_contact = query_row[6]
- supplier.phone_number = query_row[7]
- supplier.fax = query_row[8]
- supplier.email = query_row[9]
- supplier.website = query_row[10]
- supplier.active = av.input_bool(query_row[11], 'active', f'{cls.__name__}.from_DB_supplier')
- return supplier
- @classmethod
- def from_DB_supplier_purchase_order(cls, query_row):
- supplier = cls()
- supplier.id_supplier = query_row[1]
- supplier.name_company = query_row[2]
- return supplier
- def __repr__(self):
- return f'''
-id: {self.id_supplier},
-id_currency: {self.id_currency},
-name_company: {self.name_company},
-name_contact: {self.name_contact},
-department_contact: {self.department_contact},
-phone_number: {self.phone_number},
-fax: {self.fax},
-email: {self.email},
-website: {self.website},
-active: {self.active},
-addresses: {self.addresses}
- '''
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_SUPPLIER: self.id_supplier,
- # self.ATTR_ID_ADDRESS: self.id_address,
- self.ATTR_ID_CURRENCY: self.id_currency,
- self.FLAG_NAME_COMPANY: self.name_company,
- self.FLAG_NAME_CONTACT: self.name_contact,
- self.FLAG_DEPARTMENT_CONTACT: self.department_contact,
- self.FLAG_PHONE_NUMBER: self.phone_number,
- self.FLAG_FAX: self.fax,
- self.FLAG_EMAIL: self.email,
- self.FLAG_WEBSITE: self.website,
- self.FLAG_ACTIVE: av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json')
- }
- def to_json_option(self):
- return {
- 'value': self.id_supplier,
- 'text': self.name_company
- }
- @classmethod
- def from_json(cls, json):
- Helper_App.console_log(f'{cls.__name__}.from_json: {json}')
- supplier = cls()
- supplier.id_supplier = json[cls.ATTR_ID_SUPPLIER]
- supplier.id_currency = json[cls.ATTR_ID_CURRENCY]
- supplier.name_company = json[cls.FLAG_NAME_COMPANY]
- supplier.name_contact = json[cls.FLAG_NAME_CONTACT]
- supplier.department_contact = json[cls.FLAG_DEPARTMENT_CONTACT]
- supplier.phone_number = json[cls.FLAG_PHONE_NUMBER]
- supplier.fax = json[cls.FLAG_FAX]
- supplier.email = json[cls.FLAG_EMAIL]
- supplier.website = json[cls.FLAG_WEBSITE]
- supplier.active = json[cls.FLAG_ACTIVE]
- addresses = json.get(cls.FLAG_SUPPLIER_ADDRESS, [])
- supplier.addresses = [Supplier_Address.from_json(address) for address in addresses]
- return supplier
- def get_address_active(self):
- for address in self.addresses:
- if address.active:
- return address
- return Supplier_Address()
- address = Supplier_Address()
- address.postcode = ''
- return address
-
-class Parameters_Supplier(Get_Many_Parameters_Base):
- a_get_all_supplier: bool
- a_get_inactive_supplier: bool
- a_ids_supplier: str
- def __init__(self, **kwargs):
- super().__init__(**kwargs)
- @classmethod
- def get_default(cls):
- return cls(
- a_get_all_supplier = True,
- a_get_inactive_supplier = False,
- a_ids_supplier = '',
- )
- @classmethod
- def from_filters_supplier(cls, form):
- parameters = cls.get_default()
- parameters.a_get_inactive_supplier = form.active.data
- return parameters
-
-class Supplier_Temp(db.Model, Store_Base):
- __tablename__: ClassVar[str] = 'Shop_Supplier_Temp'
- __table_args__ = { 'extend_existing': True }
- id_temp: int = db.Column(db.Integer, primary_key=True, autoincrement=True)
- id_supplier: int = db.Column(db.Integer)
- id_currency: int = db.Column(db.Integer)
- # id_address: int = db.Column(db.Integer)
- name_company: str = db.Column(db.String(255))
- name_contact: str = db.Column(db.String(255))
- department_contact: str = db.Column(db.String(255))
- phone_number: str = db.Column(db.String(50))
- fax: str = db.Column(db.String(50))
- email: str = db.Column(db.String(255))
- website: str = db.Column(db.String(255))
- active: bool = db.Column(db.Boolean)
- guid: str = db.Column(db.String(36))
- def __init__(self):
- super().__init__()
- self.id_temp = None
- @classmethod
- def from_supplier(cls, supplier):
- row = cls()
- row.id_supplier = supplier.id_supplier
- row.id_currency = supplier.id_currency
- # row.id_address = supplier.id_address
- row.name_company = supplier.name_company
- row.name_contact = supplier.name_contact
- row.department_contact = supplier.department_contact
- row.phone_number = supplier.phone_number
- row.fax = supplier.fax
- row.email = supplier.email
- row.website = supplier.website
- row.active = 1 if supplier.active else 0
- return row
- def __repr__(self):
- return f'''
-id_supplier: {self.id_supplier}
-id_currency: {self.id_currency}
-name_company: {self.name_company}
-name_contact: {self.name_contact}
-department_contact: {self.department_contact}
-phone_number: {self.phone_number}
-fax: {self.fax}
-email: {self.email}
-website: {self.website}
-active: {self.active}
-guid: {self.guid}
- '''
\ No newline at end of file
diff --git a/business_objects/store/supplier_address.py b/business_objects/store/supplier_address.py
deleted file mode 100644
index 8c73f914..00000000
--- a/business_objects/store/supplier_address.py
+++ /dev/null
@@ -1,146 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Supplier Address Business Object
-
-Description:
-Business object for supplier address
-"""
-
-# internal
-import lib.argument_validation as av
-from business_objects.store.store_base import Store_Base
-from business_objects.region import Region
-from extensions import db
-from helpers.helper_app import Helper_App
-# external
-from typing import ClassVar
-from flask import jsonify
-
-class Supplier_Address(db.Model, Store_Base):
- FLAG_ADDRESS_LINE_1: ClassVar[str] = 'address_line_1'
- FLAG_ADDRESS_LINE_2: ClassVar[str] = 'address_line_2'
- FLAG_CITY: ClassVar[str] = 'city'
- FLAG_COUNTY: ClassVar[str] = 'county'
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_ADDRESS
- NAME_ATTR_OPTION_TEXT: ClassVar[str] = Store_Base.FLAG_POSTCODE
- __tablename__ = 'Shop_Supplier_Address'
- id_address = db.Column(db.Integer, primary_key=True)
- id_supplier = db.Column(db.Integer)
- id_region = db.Column(db.Integer)
- postcode = db.Column(db.String(20))
- address_line_1 = db.Column(db.String(256))
- address_line_2 = db.Column(db.String(256))
- city = db.Column(db.String(256))
- county = db.Column(db.String(256))
- active = db.Column(db.Boolean)
-
- # region = None
-
- def __init__(self):
- super().__init__()
- Store_Base.__init__(self)
- self.region = Region()
- @classmethod
- def from_DB_supplier(cls, query_row):
- address = cls()
- address.id_supplier = query_row[0]
- address.id_address = query_row[1]
- address.id_region = query_row[2]
- address.region = Region.from_DB_supplier(query_row)
- address.postcode = query_row[4]
- address.address_line_1 = query_row[5]
- address.address_line_2 = query_row[6]
- address.city = query_row[7]
- address.county = query_row[8]
- address.active = av.input_bool(query_row[9], 'active', f'{cls.__name__}.from_DB_supplier')
-
- return address
- def __repr__(self):
- return f'''
-{self.ATTR_ID_ADDRESS}: {self.id_address}
-{self.ATTR_ID_SUPPLIER}: {self.id_supplier}
-{self.FLAG_REGION}: {self.region}
-{self.FLAG_POSTCODE}: {self.postcode}
-{self.FLAG_ADDRESS_LINE_1}: {self.address_line_1}
-{self.FLAG_ADDRESS_LINE_2}: {self.address_line_2}
-{self.FLAG_CITY}: {self.city}
-{self.FLAG_COUNTY}: {self.county}
-{self.FLAG_ACTIVE}: {self.active}
- '''
- def to_json(self):
- Helper_App.console_log(f'{self.__class__.__name__}.to_json\n{self.__dict__}\n{self}')
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_ADDRESS: self.id_address,
- self.ATTR_ID_SUPPLIER: self.id_supplier,
- self.FLAG_REGION: self.region.to_json(),
- self.FLAG_POSTCODE: self.postcode,
- self.FLAG_ADDRESS_LINE_1: self.address_line_1,
- self.FLAG_ADDRESS_LINE_2: self.address_line_2,
- self.FLAG_CITY: self.city,
- self.FLAG_COUNTY: self.county,
- self.FLAG_ACTIVE: 1 if av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json') else 0
- }
- def to_json_str(self):
- return jsonify(self.to_json())
- @classmethod
- def from_json(cls, json):
- Helper_App.console_log(f'{cls.__name__}.from_json: {json}')
- address = cls()
- address.id_address = json[cls.ATTR_ID_ADDRESS]
- address.id_supplier = json[cls.ATTR_ID_SUPPLIER]
- address.id_region = json[cls.ATTR_ID_REGION]
- address.region = Region()
- address.region.id_region = json[cls.ATTR_ID_REGION]
- address.postcode = json[cls.FLAG_POSTCODE]
- address.address_line_1 = json[cls.FLAG_ADDRESS_LINE_1]
- address.address_line_2 = json.get(cls.FLAG_ADDRESS_LINE_2, '')
- address.city = json[cls.FLAG_CITY]
- address.county = json[cls.FLAG_COUNTY]
- address.active = json[cls.FLAG_ACTIVE]
- return address
-
-
-class Supplier_Address_Temp(db.Model, Store_Base):
- __tablename__: ClassVar[str] = 'Shop_Supplier_Address_Temp'
- __table_args__ = { 'extend_existing': True }
- id_address: int = db.Column(db.Integer, primary_key=True)
- id_supplier: int = db.Column(db.Integer)
- id_region: int = db.Column(db.Integer)
- postcode: str = db.Column(db.String(20))
- address_line_1: str = db.Column(db.String(256))
- address_line_2: str = db.Column(db.String(256))
- city: str = db.Column(db.String(256))
- county: str = db.Column(db.String(256))
- active: bool = db.Column(db.Boolean)
- guid: str = db.Column(db.String(36))
- @classmethod
- def from_supplier_address(cls, address):
- row = cls()
- row.id_address = address.id_address
- row.id_supplier = address.id_supplier
- row.id_region = address.id_region
- row.postcode = address.postcode
- row.address_line_1 = address.address_line_1
- row.address_line_2 = address.address_line_2
- row.city = address.city
- row.county = address.county
- row.active = 1 if address.active else 0
- return row
- def __repr__(self):
- return f'''
-id_address: {self.id_address}
-id_supplier: {self.id_supplier}
-id_region: {self.id_region}
-postcode: {self.postcode}
-address_line_1: {self.address_line_1}
-address_line_2: {self.address_line_2}
-city: {self.city}
-county: {self.county}
-active: {self.active}
-guid: {self.guid}
- '''
\ No newline at end of file
diff --git a/business_objects/store/supplier_purchase_order.py b/business_objects/store/supplier_purchase_order.py
deleted file mode 100644
index 24bda6aa..00000000
--- a/business_objects/store/supplier_purchase_order.py
+++ /dev/null
@@ -1,343 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Business Objects
-Feature: Supplier_Purchase_Order Business Object
-
-Description:
-Business object for supplier_purchase_order
-"""
-
-# internal
-import lib.argument_validation as av
-from business_objects.currency import Currency
-from business_objects.db_base import Get_Many_Parameters_Base
-from business_objects.store.store_base import Store_Base
-from business_objects.store.supplier import Supplier
-from extensions import db
-from helpers.helper_app import Helper_App
-# external
-from pydantic import BaseModel
-from typing import ClassVar, Optional
-from datetime import datetime
-
-class Supplier_Purchase_Order(db.Model, Store_Base):
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_SUPPLIER_PURCHASE_ORDER
- NAME_ATTR_OPTION_TEXT: ClassVar[str] = Store_Base.FLAG_NAME
- __tablename__ = 'Shop_Supplier_Purchase_Order'
- id_order = db.Column(db.Integer, primary_key=True)
- id_supplier = db.Column(db.Integer)
- id_currency = db.Column(db.Integer)
- cost_total_local_VAT_excl = db.Column(db.Float)
- cost_total_local_VAT_incl = db.Column(db.Float)
- active = db.Column(db.Boolean)
- created_on = db.Column(db.DateTime)
- created_by = db.Column(db.Integer)
- name = db.Column(db.String(255))
- # items: list = None
- def __init__(self):
- super().__init__()
- Store_Base.__init__(self)
- self.currency = None
- self.items = []
- self.supplier = None
- @classmethod
- def from_DB_supplier_purchase_order(cls, query_row):
- supplier_purchase_order = cls()
- supplier_purchase_order.id_order = query_row[0]
- supplier_purchase_order.id_supplier = query_row[1]
- supplier_purchase_order.supplier = Supplier.from_DB_supplier_purchase_order(query_row)
- supplier_purchase_order.id_currency = query_row[3]
- supplier_purchase_order.currency = Currency.from_DB_supplier_purchase_order(query_row)
- supplier_purchase_order.cost_total_local_VAT_excl = query_row[6]
- supplier_purchase_order.cost_total_local_VAT_incl = query_row[7]
- supplier_purchase_order.active = av.input_bool(query_row[8], 'active', f'{cls.__name__}.from_DB_supplier_purchase_order')
- supplier_purchase_order.created_on = query_row[9]
- supplier_purchase_order.name = query_row[10]
- return supplier_purchase_order
-
- def __repr__(self):
- return f'''
-{self.ATTR_ID_SUPPLIER_PURCHASE_ORDER}: {self.id_order},
-{self.ATTR_ID_SUPPLIER}: {self.id_supplier},
-{self.FLAG_SUPPLIER}: {self.supplier},
-{self.ATTR_ID_CURRENCY}: {self.id_currency},
-{self.FLAG_CURRENCY}: {self.currency},
-{self.FLAG_COST_TOTAL_LOCAL_VAT_EXCL}: {self.cost_total_local_VAT_excl},
-{self.FLAG_COST_TOTAL_LOCAL_VAT_INCL}: {self.cost_total_local_VAT_incl},
-{self.FLAG_ACTIVE}: {self.active},
-{self.FLAG_CREATED_ON}: {self.created_on},
-{self.FLAG_NAME}: {self.name}
- '''
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_SUPPLIER_PURCHASE_ORDER: self.id_order,
- self.ATTR_ID_SUPPLIER: self.id_supplier,
- self.FLAG_SUPPLIER: self.supplier.to_json(),
- self.ATTR_ID_CURRENCY: self.id_currency,
- self.FLAG_CURRENCY: self.currency.to_json(),
- self.FLAG_COST_TOTAL_LOCAL_VAT_EXCL: self.cost_total_local_VAT_excl,
- self.FLAG_COST_TOTAL_LOCAL_VAT_INCL: self.cost_total_local_VAT_incl,
- self.FLAG_ORDER_ITEMS: [item.to_json() for item in self.items],
- self.FLAG_ACTIVE: av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json'),
- self.FLAG_CREATED_ON: self.created_on,
- self.FLAG_NAME: self.name,
- }
- def to_json_option(self):
- return {
- 'value': self.id_order,
- 'text': self.name,
- }
- @classmethod
- def from_json(cls, json):
- Helper_App.console_log(f'{cls.__name__}.from_json: {json}')
- supplier_purchase_order = cls()
- supplier_purchase_order.id_order = json[cls.ATTR_ID_SUPPLIER_PURCHASE_ORDER]
- supplier_purchase_order.id_supplier = json[cls.ATTR_ID_SUPPLIER]
- supplier_purchase_order.id_currency = json[cls.ATTR_ID_CURRENCY]
- supplier_purchase_order.cost_total_local_VAT_excl = json[cls.FLAG_COST_TOTAL_LOCAL_VAT_EXCL]
- supplier_purchase_order.cost_total_local_VAT_incl = json[cls.FLAG_COST_TOTAL_LOCAL_VAT_INCL]
- supplier_purchase_order.items = [Supplier_Purchase_Order_Product_Link.from_json(item) for item in json[cls.FLAG_ORDER_ITEMS]]
- supplier_purchase_order.active = json[cls.FLAG_ACTIVE]
- supplier_purchase_order.created_on = json.get(cls.FLAG_CREATED_ON, None)
- supplier_purchase_order.created_by = json.get(cls.FLAG_CREATED_BY, None)
- supplier_purchase_order.name = json.get(cls.FLAG_NAME, None)
- return supplier_purchase_order
-
-class Supplier_Purchase_Order_Product_Link(db.Model, Store_Base):
- NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_SUPPLIER_PURCHASE_ORDER_PRODUCT_LINK
- NAME_ATTR_OPTION_TEXT: ClassVar[str] = Store_Base.FLAG_NAME
- __tablename__ = 'Shop_Supplier_Purchase_Order_Product_Link'
- id_link = db.Column(db.Integer, primary_key=True)
- id_order = db.Column(db.Integer)
- id_category = db.Column(db.Integer)
- id_product = db.Column(db.Integer)
- id_permutation = db.Column(db.Integer)
- csv_id_pairs_variation = db.Column(db.String)
- id_unit_quantity = db.Column(db.Integer)
- name_permutation = db.Column(db.String(255))
- quantity_ordered = db.Column(db.Float)
- quantity_received = db.Column(db.Float)
- latency_delivery_days = db.Column(db.Integer)
- display_order = db.Column(db.Integer)
- cost_total_local_VAT_excl = db.Column(db.Float)
- cost_total_local_VAT_incl = db.Column(db.Float)
- cost_unit_local_VAT_excl = db.Column(db.Float)
- cost_unit_local_VAT_incl = db.Column(db.Float)
- active = db.Column(db.Boolean)
- created_on = db.Column(db.DateTime)
- created_by = db.Column(db.Integer)
- def __init__(self):
- super().__init__()
- Store_Base.__init__(self)
- # self.unit_quantity = None
- @classmethod
- def from_DB_supplier_purchase_order(cls, query_row):
- link = cls()
- link.id_link = query_row[0]
- link.id_order = query_row[1]
- link.id_category = query_row[2]
- link.id_product = query_row[3]
- link.id_permutation = query_row[4]
- link.name_permutation = query_row[5]
- link.csv_id_pairs_variation = query_row[6]
- link.id_unit_quantity = query_row[7]
- link.quantity_ordered = query_row[8]
- link.quantity_received = query_row[9]
- link.latency_delivery_days = query_row[10]
- link.display_order = query_row[11]
- link.cost_total_local_VAT_excl = query_row[12]
- link.cost_total_local_VAT_incl = query_row[13]
- link.cost_unit_local_VAT_excl = query_row[14]
- link.cost_unit_local_VAT_incl = query_row[15]
- link.active = query_row[16]
- return link
- def __repr__(self):
- return f'''
-{self.ATTR_ID_SUPPLIER_PURCHASE_ORDER_PRODUCT_LINK}: {self.id_link},
-{self.ATTR_ID_SUPPLIER_PURCHASE_ORDER}: {self.id_order},
-{self.ATTR_ID_PRODUCT_CATEGORY}: {self.id_category},
-{self.ATTR_ID_PRODUCT}: {self.id_product},
-{self.ATTR_ID_PRODUCT_PERMUTATION}: {self.id_permutation},
-{self.FLAG_NAME}: {self.name_permutation},
-{self.FLAG_PRODUCT_VARIATIONS}: {self.csv_id_pairs_variation},
-{self.ATTR_ID_UNIT_MEASUREMENT_QUANTITY}: {self.id_unit_quantity},
-{self.FLAG_QUANTITY_ORDERED}: {self.quantity_ordered},
-{self.FLAG_QUANTITY_RECEIVED}: {self.quantity_received},
-{self.FLAG_LATENCY_DELIVERY_DAYS}: {self.latency_delivery_days},
-{self.FLAG_DISPLAY_ORDER}: {self.display_order},
-{self.FLAG_COST_TOTAL_LOCAL_VAT_EXCL}: {self.cost_total_local_VAT_excl},
-{self.FLAG_COST_TOTAL_LOCAL_VAT_INCL}: {self.cost_total_local_VAT_incl},
-{self.FLAG_COST_UNIT_LOCAL_VAT_EXCL}: {self.cost_unit_local_VAT_excl},
-{self.FLAG_COST_UNIT_LOCAL_VAT_INCL}: {self.cost_unit_local_VAT_incl},
-{self.FLAG_ACTIVE}: {self.active}
- '''
- def to_json(self):
- return {
- **self.get_shared_json_attributes(self),
- self.ATTR_ID_SUPPLIER_PURCHASE_ORDER_PRODUCT_LINK: self.id_link,
- self.ATTR_ID_SUPPLIER_PURCHASE_ORDER: self.id_order,
- self.ATTR_ID_PRODUCT_CATEGORY: self.id_category,
- self.ATTR_ID_PRODUCT: self.id_product,
- self.ATTR_ID_PRODUCT_PERMUTATION: self.id_permutation,
- self.FLAG_NAME: self.name_permutation,
- self.FLAG_PRODUCT_VARIATIONS: self.csv_id_pairs_variation,
- self.ATTR_ID_UNIT_MEASUREMENT_QUANTITY: self.id_unit_quantity,
- self.FLAG_QUANTITY_ORDERED: self.quantity_ordered,
- self.FLAG_QUANTITY_RECEIVED: self.quantity_received,
- self.FLAG_LATENCY_DELIVERY_DAYS: self.latency_delivery_days,
- self.FLAG_DISPLAY_ORDER: self.display_order,
- self.FLAG_COST_TOTAL_LOCAL_VAT_EXCL: self.cost_total_local_VAT_excl,
- self.FLAG_COST_TOTAL_LOCAL_VAT_INCL: self.cost_total_local_VAT_incl,
- self.FLAG_COST_UNIT_LOCAL_VAT_EXCL: self.cost_unit_local_VAT_excl,
- self.FLAG_COST_UNIT_LOCAL_VAT_INCL: self.cost_unit_local_VAT_incl,
- self.FLAG_ACTIVE: av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json'),
- }
- def to_json_option(self):
- return {
- 'value': self.id_order,
- 'text': self.name_permutation,
- }
- @classmethod
- def from_json(cls, json):
- Helper_App.console_log(f'{cls.__name__}.from_json: {json}')
- link = cls()
- link.id_link = json[cls.ATTR_ID_SUPPLIER_PURCHASE_ORDER_PRODUCT_LINK]
- link.id_order = json[cls.ATTR_ID_SUPPLIER_PURCHASE_ORDER]
- link.id_category = json.get(cls.ATTR_ID_PRODUCT_CATEGORY, None)
- link.id_product = json.get(cls.ATTR_ID_PRODUCT, None)
- link.id_permutation = json.get(cls.ATTR_ID_PRODUCT_PERMUTATION, None)
- link.name_permutation = json.get(cls.FLAG_NAME, None)
- link.csv_id_pairs_variation = json.get(cls.FLAG_PRODUCT_VARIATIONS, '')
- link.id_unit_quantity = json[cls.ATTR_ID_UNIT_MEASUREMENT_QUANTITY]
- link.quantity_ordered = json[cls.FLAG_QUANTITY_ORDERED]
- link.quantity_received = json[cls.FLAG_QUANTITY_RECEIVED]
- link.latency_delivery_days = json[cls.FLAG_LATENCY_DELIVERY_DAYS]
- link.display_order = json[cls.FLAG_DISPLAY_ORDER]
- link.cost_total_local_VAT_excl = json[cls.FLAG_COST_TOTAL_LOCAL_VAT_EXCL]
- link.cost_total_local_VAT_incl = json[cls.FLAG_COST_TOTAL_LOCAL_VAT_INCL]
- link.cost_unit_local_VAT_excl = json.get(cls.FLAG_COST_UNIT_LOCAL_VAT_EXCL, None)
- link.cost_unit_local_VAT_incl = json.get(cls.FLAG_COST_UNIT_LOCAL_VAT_INCL, None)
- link.active = json[cls.FLAG_ACTIVE]
- return link
-
-class Parameters_Supplier_Purchase_Order(Get_Many_Parameters_Base):
- a_get_all_supplier: bool
- a_get_inactive_supplier: bool
- a_ids_supplier: str
- a_get_all_order: bool
- a_get_inactive_order: bool
- a_ids_order: str
- a_ids_permutation: str
- a_date_from: Optional[datetime]
- a_date_to: Optional[datetime]
- def __init__(self, **kwargs):
- super().__init__(**kwargs)
- @classmethod
- def get_default(cls):
- return cls(
- a_get_all_supplier = True,
- a_get_inactive_supplier = False,
- a_ids_supplier = '',
- a_get_all_order = True,
- a_get_inactive_order = False,
- a_ids_order = '',
- a_ids_permutation = '',
- a_date_from = None,
- a_date_to = None
- )
- @classmethod
- def from_filters_supplier_purchase_order(cls, form):
- parameters = cls.get_default()
- parameters.a_get_inactive_order = form.active.data
- parameters.a_date_from = None if form.date_from.data == '' else form.date_from.data
- parameters.a_date_to = None if form.date_to.data == '' else form.date_to.data
- return parameters
-
-class Supplier_Purchase_Order_Temp(db.Model, Store_Base):
- __tablename__: ClassVar[str] = 'Shop_Supplier_Purchase_Order_Temp'
- __table_args__ = { 'extend_existing': True }
- id_temp: int = db.Column(db.Integer, primary_key=True, autoincrement=True)
- id_order: int = db.Column(db.Integer)
- id_supplier_ordered: int = db.Column(db.Integer)
- id_currency_cost: int = db.Column(db.Integer)
- active: bool = db.Column(db.Boolean)
- guid: str = db.Column(db.String(36))
- def __init__(self):
- super().__init__()
- self.id_temp = None
- @classmethod
- def from_supplier_purchase_order(cls, supplier_purchase_order):
- row = cls()
- row.id_order = supplier_purchase_order.id_order
- row.id_supplier_ordered = supplier_purchase_order.id_supplier
- row.id_currency_cost = supplier_purchase_order.id_currency
- row.active = 1 if supplier_purchase_order.active else 0
- return row
- def __repr__(self):
- return f'''
-id_order: {self.id_order}
-id_supplier_ordered: {self.id_supplier_ordered}
-id_currency_cost: {self.id_currency_cost}
-active: {self.active}
-guid: {self.guid}
- '''
-
-class Supplier_Purchase_Order_Product_Link_Temp(db.Model, Store_Base):
- __tablename__: ClassVar[str] = 'Shop_Supplier_Purchase_Order_Product_Link_Temp'
- __table_args__ = { 'extend_existing': True }
- id_temp: int = db.Column(db.Integer, primary_key=True, autoincrement=True)
- id_link = db.Column(db.Integer)
- id_order = db.Column(db.Integer)
- id_product = db.Column(db.Integer)
- id_permutation = db.Column(db.Integer)
- csv_list_variations = db.Column(db.String)
- id_unit_quantity = db.Column(db.Integer)
- quantity_ordered = db.Column(db.Float)
- quantity_received = db.Column(db.Float)
- latency_delivery_days = db.Column(db.Integer)
- display_order = db.Column(db.Integer)
- cost_total_local_VAT_excl = db.Column(db.Float)
- cost_total_local_VAT_incl = db.Column(db.Float)
- active = db.Column(db.Boolean)
- guid = db.Column(db.String(36))
- def __init__(self):
- super().__init__()
- self.id_temp = None
- @classmethod
- def from_supplier_purchase_order_product_link(cls, supplier_purchase_order_product_link):
- row = cls()
- row.id_link = supplier_purchase_order_product_link.id_link
- row.id_order = supplier_purchase_order_product_link.id_order
- row.id_product = supplier_purchase_order_product_link.id_product
- row.id_permutation = supplier_purchase_order_product_link.id_permutation
- row.csv_list_variations = supplier_purchase_order_product_link.csv_id_pairs_variation
- row.id_unit_quantity = supplier_purchase_order_product_link.id_unit_quantity
- row.quantity_ordered = supplier_purchase_order_product_link.quantity_ordered
- row.quantity_received = supplier_purchase_order_product_link.quantity_received
- row.latency_delivery_days = supplier_purchase_order_product_link.latency_delivery_days
- row.display_order = supplier_purchase_order_product_link.display_order
- row.cost_total_local_VAT_excl = supplier_purchase_order_product_link.cost_total_local_VAT_excl
- row.cost_total_local_VAT_incl = supplier_purchase_order_product_link.cost_total_local_VAT_incl
- row.active = 1 if supplier_purchase_order_product_link.active else 0
- return row
- def __repr__(self):
- return f'''
-id_link: {self.id_link}
-id_order: {self.id_order}
-id_product: {self.id_product}
-id_permutation: {self.id_permutation}
-csv_list_variations: {self.csv_list_variations}
-id_unit_quantity: {self.id_unit_quantity}
-quantity_ordered: {self.quantity_ordered}
-quantity_received: {self.quantity_received}
-latency_delivery_days: {self.latency_delivery_days}
-display_order: {self.display_order}
-cost_total_local_VAT_excl: {self.cost_total_local_VAT_excl}
-cost_total_local_VAT_incl: {self.cost_total_local_VAT_incl}
-active: {self.active}
-guid: {self.guid}
- '''
\ No newline at end of file
diff --git a/controllers/core.py b/controllers/core.py
index a654d981..009ab5e5 100644
--- a/controllers/core.py
+++ b/controllers/core.py
@@ -13,11 +13,9 @@ Initializes the Flask application, sets the configuration based on the environme
# IMPORTS
# internal
from datastores.datastore_base import DataStore_Base
-from forms.forms import Form_Contact
-from models.model_view_admin_home import Model_View_Admin_Home
+from forms.contact import Form_Contact
from models.model_view_contact import Model_View_Contact
from models.model_view_home import Model_View_Home
-from models.model_view_services import Model_View_Services
import lib.argument_validation as av
# external
from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app
@@ -44,10 +42,7 @@ def home():
@routes_core.route(Model_View_Contact.HASH_PAGE_CONTACT, methods=['GET'])
def contact():
try:
- user = DataStore_Base.get_user_session()
form = Form_Contact()
- form.email.data = user.email
- form.name.data = (user.firstname if user.firstname else '') + (' ' if user.firstname and user.surname else '') + (user.surname if user.surname else '')
model = Model_View_Contact(form)
html_body = render_template('pages/core/_contact.html', model = model)
except Exception as e:
@@ -62,37 +57,17 @@ def contact_post():
# Handle form submission
email = form.email.data
CC = form.CC.data # not in use
- name = form.name.data
+ contact_name = form.contact_name.data
+ company_name = form.company_name.data
message = form.message.data
+ receive_marketing = form.receive_marketing.data
+ receive_marketing_text = "I would like to receive marketing emails." if receive_marketing else ""
# send email
mailItem = Message("PARTS Website Contact Us Message", recipients=[current_app.config['MAIL_CONTACT_PUBLIC']])
- mailItem.body = f"Dear Lord Edward Middleton-Smith,\n\n{message}\n\nKind regards,\n{name}\n{email}"
+ mailItem.body = f"Dear Lord Edward Middleton-Smith,\n\n{message}\n{receive_marketing_text}\nKind regards,\n{contact_name}\n{company_name}\n{email}"
mail.send(mailItem)
return "Submitted."
return "Invalid. Failed to submit."
# html_body = render_template('pages/core/_contact.html', model = model)
except Exception as e:
return jsonify(error=str(e)), 403
-
-@routes_core.route(Model_View_Services.HASH_PAGE_SERVICES, methods=['GET', 'POST'])
-def services():
- try:
- model = Model_View_Services()
- html_body = render_template('pages/core/_services.html', model = model)
- except Exception as e:
- return jsonify(error=str(e)), 403
- return html_body
-
-@routes_core.route(Model_View_Admin_Home.HASH_PAGE_ADMIN_HOME, methods=['GET', 'POST'])
-def admin_home():
- try:
- model = Model_View_Admin_Home()
- if not model.is_user_logged_in:
- # return redirect(url_for('routes_user.login', callback = Model_View_Admin_Home.HASH_PAGE_ADMIN_HOME))
- return redirect(url_for('routes_core.home'))
- if not (model.user.can_admin_store or model.user.can_admin_user):
- return redirect(url_for('routes_core.home'))
- html_body = render_template('pages/core/_admin_home.html', model = model)
- except Exception as e:
- return jsonify(error=str(e)), 403
- return html_body
diff --git a/controllers/store/__init__.py b/controllers/store/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/controllers/store/__pycache__/__init__.cpython-312.pyc b/controllers/store/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index aa8a0685..00000000
Binary files a/controllers/store/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/controllers/store/__pycache__/product.cpython-312.pyc b/controllers/store/__pycache__/product.cpython-312.pyc
deleted file mode 100644
index da18e248..00000000
Binary files a/controllers/store/__pycache__/product.cpython-312.pyc and /dev/null differ
diff --git a/controllers/store/__pycache__/product_category.cpython-312.pyc b/controllers/store/__pycache__/product_category.cpython-312.pyc
deleted file mode 100644
index 2cde36df..00000000
Binary files a/controllers/store/__pycache__/product_category.cpython-312.pyc and /dev/null differ
diff --git a/controllers/store/__pycache__/product_permutation.cpython-312.pyc b/controllers/store/__pycache__/product_permutation.cpython-312.pyc
deleted file mode 100644
index 5b4c8733..00000000
Binary files a/controllers/store/__pycache__/product_permutation.cpython-312.pyc and /dev/null differ
diff --git a/controllers/store/__pycache__/stock_item.cpython-312.pyc b/controllers/store/__pycache__/stock_item.cpython-312.pyc
deleted file mode 100644
index 5c20d4b5..00000000
Binary files a/controllers/store/__pycache__/stock_item.cpython-312.pyc and /dev/null differ
diff --git a/controllers/store/__pycache__/store.cpython-312.pyc b/controllers/store/__pycache__/store.cpython-312.pyc
deleted file mode 100644
index 934b6cbc..00000000
Binary files a/controllers/store/__pycache__/store.cpython-312.pyc and /dev/null differ
diff --git a/controllers/store/__pycache__/supplier.cpython-312.pyc b/controllers/store/__pycache__/supplier.cpython-312.pyc
deleted file mode 100644
index 26a0326b..00000000
Binary files a/controllers/store/__pycache__/supplier.cpython-312.pyc and /dev/null differ
diff --git a/controllers/store/manufacturing_purchase_order.py b/controllers/store/manufacturing_purchase_order.py
deleted file mode 100644
index 39c0cd17..00000000
--- a/controllers/store/manufacturing_purchase_order.py
+++ /dev/null
@@ -1,82 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: App Routing
-Feature: Store Manufacturing_Purchase_Order Routes
-
-Description:
-Initializes the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
-"""
-
-# internal
-from business_objects.store.manufacturing_purchase_order import Manufacturing_Purchase_Order
-from forms.store.manufacturing_purchase_order import Filters_Manufacturing_Purchase_Order
-from models.model_view_store_manufacturing_purchase_order import Model_View_Store_Manufacturing_Purchase_Order
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-# external
-from datetime import datetime
-from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app
-from extensions import db, oauth
-from urllib.parse import quote_plus, urlencode
-from authlib.integrations.flask_client import OAuth
-from authlib.integrations.base_client import OAuthError
-from urllib.parse import quote, urlparse, parse_qs
-import requests
-
-routes_store_manufacturing_purchase_order = Blueprint('routes_store_manufacturing_purchase_order', __name__)
-
-@routes_store_manufacturing_purchase_order.route(Model_View_Store_Manufacturing_Purchase_Order.HASH_PAGE_STORE_MANUFACTURING_PURCHASE_ORDERS, methods=['GET'])
-def manufacturing_purchase_orders():
- Helper_App.console_log('manufacturing_purchase_orders')
- try:
- form_filters = Filters_Manufacturing_Purchase_Order.from_json(request.args)
- except Exception as e:
- Helper_App.console_log(f'Error: {e}')
- form_filters = Filters_Manufacturing_Purchase_Order()
- Helper_App.console_log(f'form_filters={form_filters}')
- model = Model_View_Store_Manufacturing_Purchase_Order(form_filters)
- if not model.is_user_logged_in:
- return redirect(url_for('routes_core.home'))
- return render_template('pages/store/_manufacturing_purchase_orders.html', model = model, datetime = datetime)
-
-
-@routes_store_manufacturing_purchase_order.route(Model_View_Store_Manufacturing_Purchase_Order.HASH_SAVE_STORE_MANUFACTURING_PURCHASE_ORDER, methods=['POST'])
-def save_manufacturing_purchase_order():
- data = Helper_App.get_request_data(request)
- try:
- form_filters = Filters_Manufacturing_Purchase_Order.from_json(data[Model_View_Store_Manufacturing_Purchase_Order.FLAG_FORM_FILTERS])
- Helper_App.console_log(f'form_filters: {form_filters}')
-
- manufacturing_purchase_orders = data[Model_View_Store_Manufacturing_Purchase_Order.FLAG_MANUFACTURING_PURCHASE_ORDER]
- if len(manufacturing_purchase_orders) == 0:
- return jsonify({
- Model_View_Store_Manufacturing_Purchase_Order.FLAG_STATUS: Model_View_Store_Manufacturing_Purchase_Order.FLAG_FAILURE,
- Model_View_Store_Manufacturing_Purchase_Order.FLAG_MESSAGE: f'No stock items.'
- })
- Helper_App.console_log(f'manufacturing_purchase_orders={manufacturing_purchase_orders}')
- objs_manufacturing_purchase_order = []
- for manufacturing_purchase_order in manufacturing_purchase_orders:
- objs_manufacturing_purchase_order.append(Manufacturing_Purchase_Order.from_json(manufacturing_purchase_order))
- Helper_App.console_log(f'objs_manufacturing_purchase_order={objs_manufacturing_purchase_order}')
- save_errors = Model_View_Store_Manufacturing_Purchase_Order.save_manufacturing_purchase_orders(data.get('comment', 'No comment'), objs_manufacturing_purchase_order)
- if len(save_errors) > 0:
- return jsonify({
- Model_View_Store_Manufacturing_Purchase_Order.FLAG_STATUS: Model_View_Store_Manufacturing_Purchase_Order.FLAG_FAILURE,
- Model_View_Store_Manufacturing_Purchase_Order.FLAG_MESSAGE: f'Save errors: {save_errors}'
- })
- model_return = Model_View_Store_Manufacturing_Purchase_Order(form_filters_old = form_filters)
- if not model_return.is_user_logged_in:
- raise Exception('User not logged in.')
- return jsonify({
- Model_View_Store_Manufacturing_Purchase_Order.FLAG_STATUS: Model_View_Store_Manufacturing_Purchase_Order.FLAG_SUCCESS,
- Model_View_Store_Manufacturing_Purchase_Order.FLAG_DATA: model_return.convert_list_objects_to_json(model_return.manufacturing_purchase_orders)
- })
- except Exception as e:
- return jsonify({
- Model_View_Store_Manufacturing_Purchase_Order.FLAG_STATUS: Model_View_Store_Manufacturing_Purchase_Order.FLAG_FAILURE,
- Model_View_Store_Manufacturing_Purchase_Order.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
- })
-
\ No newline at end of file
diff --git a/controllers/store/pay_stripe.py b/controllers/store/pay_stripe.py
deleted file mode 100644
index 9ae08d65..00000000
--- a/controllers/store/pay_stripe.py
+++ /dev/null
@@ -1,167 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: App General
-Feature: App
-
-Description:
-Initializes the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
-"""
-
-# IMPORTS
-from helpers.helper_app import Helper_App
-import os
-import stripe
-import json
-from flask import Flask, render_template, render_template_string, jsonify, request, send_from_directory, redirect
-from dotenv import load_dotenv, find_dotenv
-
-
-# VARIABLE INSTANTIATION
-key_secret = os.environ.get("KEY_SECRET_STRIPE")
-key_public = os.environ.get("KEY_PUBLIC_STRIPE") # 'pk_test_51OGrxlL7BuLKjoMpfpfw7bSmZZK1MhqMoQ5VhW2jUj7YtoEejO4vqnxKPiqTHHuh9U4qqkywbPCSI9TpFKtr4SYH007KHMWs68'
-
-# METHODS
-def create_product_price():
- Helper_App.console_log(f'stripe.api_key = {stripe.api_key}')
- starter_subscription = stripe.Product.create(
- name="Starter Subscription",
- description="$12/Month subscription",
- )
-
- starter_subscription_price = stripe.Price.create(
- unit_amount=1200,
- currency="usd",
- recurring={"interval": "month"},
- product=starter_subscription['id'],
- )
-
- # Save these identifiers
- Helper_App.console_log(f"Success! Here is your starter subscription product id: {starter_subscription.id}")
- Helper_App.console_log(f"Success! Here is your starter subscription price id: {starter_subscription_price.id}")
-
- return starter_subscription_price.id
-
-def get_file_str(f_address):
- f = open(f_address)
- return f.read()
-
-# Ensure environment variables are set.
-price = os.getenv('PRICE')
-if price is None or price == 'price_12345' or price == '':
- Helper_App.console_log('You must set a Price ID in .env. Please see the README.')
- exit(0)
-
-# For sample support and debugging, not required for production:
-stripe.set_app_info(
- 'stripe-samples/checkout-one-time-payments',
- version='0.0.1',
- url='https://github.com/stripe-samples/checkout-one-time-payments')
-
-# stripe.api_version = '2020-08-27'
-stripe.api_key = key_secret # os.getenv('KEY_SECRET_STRIPE')
-
-app_dir = str(os.path.abspath(os.path.join(
- __file__, "..", "..")))
-static_dir = str(os.path.abspath(os.path.join(
- app_dir, os.getenv("STATIC_DIR"))))
-app = Flask(__name__, static_folder=static_dir,
- static_url_path="", template_folder=static_dir)
-
-
-@app.route('/', methods=['GET'])
-def get_example():
- # return render_template(f'{app_dir}\\templates\\_home.html') # f'{app_dir}\\templates\\layout.html')
- # return render_template_string(get_file_str(f'{app_dir}\\templates\\_home.html')) # f'{app_dir}\\templates\\layout.html')
- return render_template('../templates/_home.html')
-
-
-@app.route('/config', methods=['GET'])
-def get_publishable_key():
- price = stripe.Price.retrieve(os.getenv('PRICE'))
- return jsonify({
- 'publicKey': key_public, # os.getenv('KEY_PUBLIC_STRIPE'),
- 'unitAmount': price['unit_amount'],
- 'currency': price['currency']
- })
-
-# Fetch the Checkout Session to display the JSON result on the success page
-@app.route('/checkout-session', methods=['GET'])
-def get_checkout_session():
- id = request.args.get('sessionId')
- checkout_session = stripe.checkout.Session.retrieve(id)
- return jsonify(checkout_session)
-
-
-@app.route('/create-checkout-session', methods=['POST'])
-def create_checkout_session():
- quantity = request.form.get('quantity', 1)
- domain_url = os.getenv('DOMAIN')
-
- try:
- # Create new Checkout Session for the order
- # Other optional params include:
- # [billing_address_collection] - to display billing address details on the page
- # [customer] - if you have an existing Stripe Customer ID
- # [payment_intent_data] - lets capture the payment later
- # [customer_email] - lets you prefill the email input in the form
- # [automatic_tax] - to automatically calculate sales tax, VAT and GST in the checkout page
- # For full details see https://stripe.com/docs/api/checkout/sessions/create
-
- # ?session_id={CHECKOUT_SESSION_ID} means the redirect will have the session ID set as a query param
- checkout_session = stripe.checkout.Session.create(
- success_url=domain_url + '/success.html?session_id={CHECKOUT_SESSION_ID}',
- cancel_url=domain_url + '/canceled.html',
- mode='payment',
- # automatic_tax={'enabled': True},
- line_items=[{
- 'price': os.getenv('PRICE'),
- 'quantity': quantity,
- }]
- )
- return redirect(checkout_session.url, code=303)
- except Exception as e:
- return jsonify(error=str(e)), 403
-
-
-@app.route('/webhook', methods=['POST'])
-def webhook_received():
- # You can use webhooks to receive information about asynchronous payment events.
- # For more about our webhook events check out https://stripe.com/docs/webhooks.
- webhook_secret = os.getenv('STRIPE_WEBHOOK_SECRET')
- request_data = json.loads(request.data)
-
- if webhook_secret:
- # Retrieve the event by verifying the signature using the raw body and secret if webhook signing is configured.
- signature = request.headers.get('stripe-signature')
- try:
- event = stripe.Webhook.construct_event(
- payload=request.data, sig_header=signature, secret=webhook_secret)
- data = event['data']
- except Exception as e:
- return e
- # Get the type of webhook event sent - used to check the status of PaymentIntents.
- event_type = event['type']
- else:
- data = request_data['data']
- event_type = request_data['type']
- data_object = data['object']
-
- Helper_App.console_log('event ' + event_type)
-
- if event_type == 'checkout.session.completed':
- Helper_App.console_log('🔔 Payment succeeded!')
-
- return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_SUCCESS})
-
-
-if __name__ == '__main__':
- # stripe.api_key = key_secret
-
- # create_product_price()
-
- # Setup Stripe python client library.
- load_dotenv(find_dotenv())
- app.run(port=4242, debug=True)
\ No newline at end of file
diff --git a/controllers/store/product.py b/controllers/store/product.py
deleted file mode 100644
index 7d29403f..00000000
--- a/controllers/store/product.py
+++ /dev/null
@@ -1,86 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: App Routing
-Feature: Store Product Routes
-
-Description:
-Initializes the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
-"""
-
-# internal
-from business_objects.store.product import Product, Parameters_Product
-from datastores.datastore_store_product import DataStore_Store_Product
-from forms.store.product import Filters_Product
-from models.model_view_store_product import Model_View_Store_Product
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-# external
-from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app
-from extensions import db, oauth
-from urllib.parse import quote_plus, urlencode
-from authlib.integrations.flask_client import OAuth
-from authlib.integrations.base_client import OAuthError
-from urllib.parse import quote, urlparse, parse_qs
-
-
-routes_store_product = Blueprint('routes_store_product', __name__)
-
-@routes_store_product.route(Model_View_Store_Product.HASH_PAGE_STORE_PRODUCTS, methods=['GET'])
-def products():
- Helper_App.console_log('products')
- try:
- form_filters = Filters_Product.from_json(request.args)
- except Exception as e:
- Helper_App.console_log(f'Error: {e}')
- form_filters = Filters_Product()
- Helper_App.console_log(f'form_filters={form_filters}')
- model = Model_View_Store_Product(form_filters)
- if not model.is_user_logged_in:
- # return redirect(url_for('routes_user.login', data = jsonify({ Model_View_Store_Product.FLAG_CALLBACK: Model_View_Store_Product.HASH_PAGE_STORE_PRODUCTS })))
- return redirect(url_for('routes_core.home'))
- return render_template('pages/store/_products.html', model = model)
-
-
-@routes_store_product.route(Model_View_Store_Product.HASH_SAVE_STORE_PRODUCT, methods=['POST'])
-def save_product():
- data = Helper_App.get_request_data(request)
- try:
- form_filters = Filters_Product.from_json(data[Model_View_Store_Product.FLAG_FORM_FILTERS])
- if not form_filters.validate_on_submit():
- return jsonify({
- Model_View_Store_Product.FLAG_STATUS: Model_View_Store_Product.FLAG_FAILURE,
- Model_View_Store_Product.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}'
- })
- # filters_form = Filters_Product.from_form(form_filters)
- Helper_App.console_log(f'form_filters: {form_filters}')
-
- products = data[Model_View_Store_Product.FLAG_PRODUCT]
- if len(products) == 0:
- return jsonify({
- Model_View_Store_Product.FLAG_STATUS: Model_View_Store_Product.FLAG_FAILURE,
- Model_View_Store_Product.FLAG_MESSAGE: f'No products.'
- })
- objsProduct = []
- for product in products:
- objsProduct.append(Product.from_json(product))
- # model_save = Model_View_Store_Product() # filters_product=filters_form)
- Helper_App.console_log(f'objsProduct={objsProduct}')
- save_errors = Model_View_Store_Product.save_products(data.get('comment', 'No comment'), objsProduct)
-
- model_return = Model_View_Store_Product(form_filters_old=form_filters)
- if not model_return.is_user_logged_in:
- raise Exception('User not logged in')
- Helper_App.console_log('nips')
- return jsonify({
- Model_View_Store_Product.FLAG_STATUS: Model_View_Store_Product.FLAG_SUCCESS,
- Model_View_Store_Product.FLAG_DATA: model_return.category_list.to_json()
- })
- except Exception as e:
- return jsonify({
- Model_View_Store_Product.FLAG_STATUS: Model_View_Store_Product.FLAG_FAILURE,
- Model_View_Store_Product.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
- })
-
\ No newline at end of file
diff --git a/controllers/store/product_category.py b/controllers/store/product_category.py
deleted file mode 100644
index 2dc443b6..00000000
--- a/controllers/store/product_category.py
+++ /dev/null
@@ -1,104 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: App Routing
-Feature: Store Product Category Routes
-
-Description:
-Initializes the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
-"""
-
-# internal
-from business_objects.store.product_category import Product_Category #, Filters_Product_Category
-from forms.store.product_category import Filters_Product_Category
-from models.model_view_store_product_category import Model_View_Store_Product_Category
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-# external
-from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app
-from extensions import db, oauth
-from urllib.parse import quote_plus, urlencode
-from authlib.integrations.flask_client import OAuth
-from authlib.integrations.base_client import OAuthError
-from urllib.parse import quote, urlparse, parse_qs
-
-
-routes_store_product_category = Blueprint('routes_store_product_category', __name__)
-
-
-@routes_store_product_category.route(Model_View_Store_Product_Category.HASH_PAGE_STORE_PRODUCT_CATEGORIES, methods=['GET'])
-def categories():
- Helper_App.console_log('categories')
- # data = Helper_App.get_request_data(request)
- try:
- form_filters = Filters_Product_Category.from_json(request.args)
- except Exception as e:
- Helper_App.console_log(f'Error: {e}')
- form_filters = Filters_Product_Category()
- Helper_App.console_log(f'form_filters={form_filters}')
- """
- filters = Filters_Product_Category.get_default()
- have_changed_filters = False
- arg_filter_is_not_empty = request.args.get(Model_View_Store_Product_Category.FLAG_IS_NOT_EMPTY, None)
- have_changed_filters = have_changed_filters or arg_filter_is_not_empty is None
- Helper_App.console_log(f'arg_filter_is_not_empty={arg_filter_is_not_empty}')
- filters.is_not_empty = filters.is_not_empty if arg_filter_is_not_empty is None else av.input_bool(arg_filter_is_not_empty, 'is_not_empty', 'filter_category')
- arg_filter_active = request.args.get(Model_View_Store_Product_Category.FLAG_ACTIVE, None)
- have_changed_filters = have_changed_filters or arg_filter_active is None
- Helper_App.console_log(f'arg_filter_active={arg_filter_active}')
- filters.active = filters.active if arg_filter_active is None else av.input_bool(arg_filter_active, 'active', 'filter_category')
- if have_changed_filters:
- Helper_App.console_log('redirecting')
- return redirect(url_for('routes_store_product_category.categories', **filters.to_json()))
- """
- model = Model_View_Store_Product_Category(form_filters)
- if not model.is_user_logged_in:
- # return redirect(url_for('routes_user.login', data = jsonify({ Model_View_Store_Product_Category.FLAG_CALLBACK: Model_View_Store_Product_Category.HASH_PAGE_STORE_PRODUCT_CATEGORIES })))
- return redirect(url_for('routes_core.home'))
- return render_template('pages/store/_product_categories.html', model = model)
-
-@routes_store_product_category.route(Model_View_Store_Product_Category.HASH_SAVE_STORE_PRODUCT_CATEGORY, methods=['POST'])
-def save_category():
- data = Helper_App.get_request_data(request)
- try:
- form_filters = Filters_Product_Category.from_json(data[Model_View_Store_Product_Category.FLAG_FORM_FILTERS])
- if not form_filters.validate_on_submit():
- return jsonify({
- Model_View_Store_Product_Category.FLAG_STATUS: Model_View_Store_Product_Category.FLAG_FAILURE,
- Model_View_Store_Product_Category.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}'
- })
- # filters_form = Filters_Product_Category.from_form(form_filters)
-
- categories = data[Model_View_Store_Product_Category.FLAG_PRODUCT_CATEGORY]
- if len(categories) == 0:
- return jsonify({
- Model_View_Store_Product_Category.FLAG_STATUS: Model_View_Store_Product_Category.FLAG_FAILURE,
- Model_View_Store_Product_Category.FLAG_MESSAGE: f'No categories.'
- })
- objsCategory = []
- for category in categories:
- objsCategory.append(Product_Category.from_json(category))
- # model_save = Model_View_Store_Product_Category() # filters_product=filters_form)
- Helper_App.console_log(f'objsCategory={objsCategory}')
- errors = Model_View_Store_Product_Category.save_categories(data.get('comment', 'No comment'), objsCategory)
-
- model_return = Model_View_Store_Product_Category(form_filters_old=form_filters)
- if not model_return.is_user_logged_in:
- raise Exception('User not logged in')
- if (len(errors) > 0):
- return jsonify({
- Model_View_Store_Product_Category.FLAG_STATUS: Model_View_Store_Product_Category.FLAG_FAILURE,
- Model_View_Store_Product_Category.FLAG_MESSAGE: f'Error saving categories.\n{model_return.convert_list_objects_to_json(errors)}'
- })
- return jsonify({
- Model_View_Store_Product_Category.FLAG_STATUS: Model_View_Store_Product_Category.FLAG_SUCCESS,
- Model_View_Store_Product_Category.FLAG_DATA: model_return.category_list.to_json()
- })
- except Exception as e:
- return jsonify({
- Model_View_Store_Product_Category.FLAG_STATUS: Model_View_Store_Product_Category.FLAG_FAILURE,
- Model_View_Store_Product_Category.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
- })
-
\ No newline at end of file
diff --git a/controllers/store/product_permutation.py b/controllers/store/product_permutation.py
deleted file mode 100644
index 65448ba1..00000000
--- a/controllers/store/product_permutation.py
+++ /dev/null
@@ -1,90 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: App Routing
-Feature: Store Product Permutation Routes
-
-Description:
-Initializes the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
-"""
-
-
-# internal
-from business_objects.store.product import Parameters_Product, Product_Permutation
-from forms.store.product_permutation import Filters_Product_Permutation
-from models.model_view_base import Model_View_Base
-from models.model_view_store import Model_View_Store
-from models.model_view_store_product_permutation import Model_View_Store_Product_Permutation
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-# external
-from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app
-from extensions import db, oauth
-from urllib.parse import quote_plus, urlencode
-from authlib.integrations.flask_client import OAuth
-from authlib.integrations.base_client import OAuthError
-from urllib.parse import quote, urlparse, parse_qs
-
-
-routes_store_product_permutation = Blueprint('routes_store_product_permutation', __name__)
-
-@routes_store_product_permutation.route(Model_View_Store_Product_Permutation.HASH_PAGE_STORE_PRODUCT_PERMUTATIONS, methods=['GET'])
-def permutations():
- Helper_App.console_log('permutations')
- data = request.args
- # Helper_App.console_log(f'data={data}\nrequest.args={request.args}\nrequest.form={request.form}\nrequest.data={request.data}\nrequest.values={request.values}\nrequest.headers={request.headers}')
- try:
- form_filters = Filters_Product_Permutation.from_json(data)
- except Exception as e:
- Helper_App.console_log(f'Error: {e}')
- form_filters = Filters_Product_Permutation()
- Helper_App.console_log(f'form_filters={form_filters}')
- model = Model_View_Store_Product_Permutation(form_filters)
- if not model.is_user_logged_in:
- # return redirect(url_for('routes_user.login', data = jsonify({ Model_View_Store_Product_Permutation.FLAG_CALLBACK: Model_View_Store_Product_Permutation.HASH_PAGE_STORE_PRODUCT_PERMUTATIONS })))
- return redirect(url_for('routes_core.home'))
- return render_template('pages/store/_product_permutations.html', model = model)
-
-
-@routes_store_product_permutation.route(Model_View_Store_Product_Permutation.HASH_SAVE_STORE_PRODUCT_PERMUTATION, methods=['POST'])
-def save_permutation():
- data = Helper_App.get_request_data(request)
- try:
- form_filters = Filters_Product_Permutation.from_json(data[Model_View_Store_Product_Permutation.FLAG_FORM_FILTERS])
- if not form_filters.validate_on_submit():
- return jsonify({
- Model_View_Store_Product_Permutation.FLAG_STATUS: Model_View_Store_Product_Permutation.FLAG_FAILURE,
- Model_View_Store_Product_Permutation.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}'
- })
- # filters_form = Filters_Product_Permutation.from_form(form_filters)
- Helper_App.console_log(f'form_filters: {form_filters}')
-
- permutations = data[Model_View_Store_Product_Permutation.FLAG_PRODUCT_PERMUTATION]
- if len(permutations) == 0:
- return jsonify({
- Model_View_Store_Product_Permutation.FLAG_STATUS: Model_View_Store_Product_Permutation.FLAG_FAILURE,
- Model_View_Store_Product_Permutation.FLAG_MESSAGE: f'No permutations.'
- })
- objsPermutation = []
- for permutation in permutations:
- objsPermutation.append(Product_Permutation.from_json(permutation))
- # model_save = Model_View_Store_Product_Permutation() # filters_product=filters_form)
- Helper_App.console_log(f'objsPermutation={objsPermutation}')
- Model_View_Store_Product_Permutation.save_permutations(data.get('comment', 'No comment'), objsPermutation)
-
- model_return = Model_View_Store_Product_Permutation(form_filters_old=form_filters)
- if not model_return.is_user_logged_in:
- raise Exception('User not logged in')
- Helper_App.console_log('nips')
- return jsonify({
- Model_View_Store_Product_Permutation.FLAG_STATUS: Model_View_Store_Product_Permutation.FLAG_SUCCESS,
- Model_View_Store_Product_Permutation.FLAG_DATA: model_return.category_list.to_json()
- })
- except Exception as e:
- return jsonify({
- Model_View_Store_Product_Permutation.FLAG_STATUS: Model_View_Store_Product_Permutation.FLAG_FAILURE,
- Model_View_Store_Product_Permutation.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
- })
-
\ No newline at end of file
diff --git a/controllers/store/product_variation.py b/controllers/store/product_variation.py
deleted file mode 100644
index 88a8e134..00000000
--- a/controllers/store/product_variation.py
+++ /dev/null
@@ -1,87 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: App Routing
-Feature: Store Product Variation Routes
-
-Description:
-Initializes the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
-"""
-
-# internal
-from business_objects.store.product_variation import Product_Variation, Parameters_Product_Variation
-from business_objects.store.product_variation_type import Product_Variation_Type
-from datastores.datastore_store_product_variation import DataStore_Store_Product_Variation
-from forms.store.product_variation import Filters_Product_Variation
-from models.model_view_store_product_variation import Model_View_Store_Product_Variation
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-# external
-from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app
-from extensions import db, oauth
-from urllib.parse import quote_plus, urlencode
-from authlib.integrations.flask_client import OAuth
-from authlib.integrations.base_client import OAuthError
-from urllib.parse import quote, urlparse, parse_qs
-
-
-routes_store_product_variation = Blueprint('routes_store_product_variation', __name__)
-
-
-@routes_store_product_variation.route(Model_View_Store_Product_Variation.HASH_PAGE_STORE_PRODUCT_VARIATIONS, methods=['GET'])
-def product_variations():
- Helper_App.console_log('product_variations')
- try:
- form_filters = Filters_Product_Variation.from_json(request.args)
- except Exception as e:
- Helper_App.console_log(f'Error: {e}')
- form_filters = Filters_Product_Variation()
- Helper_App.console_log(f'form_filters={form_filters}')
- model = Model_View_Store_Product_Variation(form_filters)
- if not model.is_user_logged_in:
- return redirect(url_for('routes_core.home'))
- return render_template('pages/store/_product_variations.html', model = model)
-
-
-@routes_store_product_variation.route(Model_View_Store_Product_Variation.HASH_SAVE_STORE_PRODUCT_VARIATION, methods=['POST'])
-def save_product_variation():
- data = Helper_App.get_request_data(request)
- try:
- form_filters = Filters_Product_Variation.from_json(data[Model_View_Store_Product_Variation.FLAG_FORM_FILTERS])
- if not form_filters.validate_on_submit():
- return jsonify({
- Model_View_Store_Product_Variation.FLAG_STATUS: Model_View_Store_Product_Variation.FLAG_FAILURE,
- Model_View_Store_Product_Variation.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}'
- })
- # filters_form = Filters_Product_Variation.from_form(form_filters)
- Helper_App.console_log(f'form_filters: {form_filters}')
-
- product_variation_types = data[Model_View_Store_Product_Variation.FLAG_PRODUCT_VARIATION_TYPE]
- if len(product_variation_types) == 0:
- return jsonify({
- Model_View_Store_Product_Variation.FLAG_STATUS: Model_View_Store_Product_Variation.FLAG_FAILURE,
- Model_View_Store_Product_Variation.FLAG_MESSAGE: f'No Product Variations.'
- })
- objs_product_variation_type = []
- for product_variation_type in product_variation_types:
- objs_product_variation_type.append(Product_Variation_Type.from_json(product_variation_type))
- # model_save = Model_View_Store_Product_Variation() # filters_product_variation=filters_form)
- Helper_App.console_log(f'objs_product_variation_type={objs_product_variation_type}')
- save_errors = Model_View_Store_Product_Variation.save_product_variations(data.get('comment', 'No comment'), objs_product_variation_type)
-
- model_return = Model_View_Store_Product_Variation(form_filters_old = form_filters)
- if not model_return.is_user_logged_in:
- raise Exception('User not logged in')
- Helper_App.console_log('nips')
- return jsonify({
- Model_View_Store_Product_Variation.FLAG_STATUS: Model_View_Store_Product_Variation.FLAG_SUCCESS,
- Model_View_Store_Product_Variation.FLAG_DATA: model_return.convert_list_objects_to_json(model_return.variation_types)
- })
- except Exception as e:
- return jsonify({
- Model_View_Store_Product_Variation.FLAG_STATUS: Model_View_Store_Product_Variation.FLAG_FAILURE,
- Model_View_Store_Product_Variation.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
- })
-
\ No newline at end of file
diff --git a/controllers/store/stock_item.py b/controllers/store/stock_item.py
deleted file mode 100644
index 613347d9..00000000
--- a/controllers/store/stock_item.py
+++ /dev/null
@@ -1,107 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: App Routing
-Feature: Store Stock Item Routes
-
-Description:
-Initializes the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
-"""
-
-# internal
-from business_objects.store.stock_item import Stock_Item
-from forms.store.stock_item import Filters_Stock_Item
-from models.model_view_store_stock_item import Model_View_Store_Stock_Item
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-# external
-from datetime import datetime
-from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app
-from extensions import db, oauth
-from urllib.parse import quote_plus, urlencode
-from authlib.integrations.flask_client import OAuth
-from authlib.integrations.base_client import OAuthError
-from urllib.parse import quote, urlparse, parse_qs
-import requests
-
-routes_store_stock_item = Blueprint('routes_store_stock_item', __name__)
-
-@routes_store_stock_item.route(Model_View_Store_Stock_Item.HASH_PAGE_STORE_STOCK_ITEMS, methods=['GET'])
-def stock_items():
- Helper_App.console_log('stock_items')
- try:
- form_filters = Filters_Stock_Item.from_json(request.args)
- except Exception as e:
- Helper_App.console_log(f'Error: {e}')
- form_filters = Filters_Stock_Item()
- Helper_App.console_log(f'form_filters={form_filters}')
- model = Model_View_Store_Stock_Item(form_filters)
- if not model.is_user_logged_in:
- # return redirect(url_for('routes_user.login', data = jsonify({ Model_View_Store_Stock_Item.FLAG_CALLBACK: Model_View_Store_Stock_Item.HASH_PAGE_STORE_STOCK_ITEMS })))
- # return requests.post(f"{current_app.config['URL_HOST']}{url_for('routes_user.login')}", json={ Model_View_Store_Stock_Item.FLAG_CALLBACK: Model_View_Store_Stock_Item.HASH_PAGE_STORE_STOCK_ITEMS })
- return redirect(url_for('routes_core.home'))
- return render_template('pages/store/_stock_items.html', model = model, datetime = datetime)
-
-
-@routes_store_stock_item.route(Model_View_Store_Stock_Item.HASH_SAVE_STORE_STOCK_ITEM, methods=['POST'])
-def save_stock_item():
- data = Helper_App.get_request_data(request)
- try:
- form_filters = Filters_Stock_Item.from_json(data[Model_View_Store_Stock_Item.FLAG_FORM_FILTERS])
- """
- if not form_filters.validate_on_submit():
- error_keys = list(form_filters.errors.keys())
- try:
- error_keys.remove(Stock_Item.ATTR_ID_PRODUCT_CATEGORY)
- ""
- if not av.val_int(form_filters.id_product_category.data):
- form_filters.errors[Stock_Item.ATTR_ID_PRODUCT_CATEGORY] = ['Invalid category.']
- ""
- except:
- pass
- try:
- error_keys.remove(Stock_Item.ATTR_ID_PRODUCT)
- except:
- pass
- if error_keys:
- return jsonify({
- Model_View_Store_Stock_Item.FLAG_STATUS: Model_View_Store_Stock_Item.FLAG_FAILURE,
- Model_View_Store_Stock_Item.FLAG_MESSAGE: f'Form invalid.\n{form_filters.errors}'
- })
- """
- # filters_form = Filters_Stock_Item.from_form(form_filters)
- Helper_App.console_log(f'form_filters: {form_filters}')
-
- stock_items = data[Model_View_Store_Stock_Item.FLAG_STOCK_ITEM]
- if len(stock_items) == 0:
- return jsonify({
- Model_View_Store_Stock_Item.FLAG_STATUS: Model_View_Store_Stock_Item.FLAG_FAILURE,
- Model_View_Store_Stock_Item.FLAG_MESSAGE: f'No stock items.'
- })
- Helper_App.console_log(f'stock_items={stock_items}')
- objs_stock_item = []
- for stock_item in stock_items:
- objs_stock_item.append(Stock_Item.from_json(stock_item))
- # model_save = Model_View_Store_Stock_Item() # filters_product=filters_form)
- Helper_App.console_log(f'objs_stock_item={objs_stock_item}')
- save_errors = Model_View_Store_Stock_Item.save_stock_items(data.get('comment', 'No comment'), objs_stock_item)
- if len(save_errors) > 0:
- return jsonify({
- Model_View_Store_Stock_Item.FLAG_STATUS: Model_View_Store_Stock_Item.FLAG_FAILURE,
- Model_View_Store_Stock_Item.FLAG_MESSAGE: f'Save errors: {save_errors}'
- })
- model_return = Model_View_Store_Stock_Item(filters_stock_item=form_filters)
- if not model_return.is_user_logged_in:
- raise Exception('User not logged in.')
- return jsonify({
- Model_View_Store_Stock_Item.FLAG_STATUS: Model_View_Store_Stock_Item.FLAG_SUCCESS,
- Model_View_Store_Stock_Item.FLAG_DATA: model_return.category_list.to_json()
- })
- except Exception as e:
- return jsonify({
- Model_View_Store_Stock_Item.FLAG_STATUS: Model_View_Store_Stock_Item.FLAG_FAILURE,
- Model_View_Store_Stock_Item.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
- })
-
\ No newline at end of file
diff --git a/controllers/store/supplier.py b/controllers/store/supplier.py
deleted file mode 100644
index c9a8cb92..00000000
--- a/controllers/store/supplier.py
+++ /dev/null
@@ -1,83 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: App Routing
-Feature: Store Supplier Routes
-
-Description:
-Initializes the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
-"""
-
-# internal
-from business_objects.store.supplier import Supplier
-from forms.store.supplier import Filters_Supplier
-from models.model_view_store_supplier import Model_View_Store_Supplier
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-# external
-from datetime import datetime
-from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app
-from extensions import db, oauth
-from urllib.parse import quote_plus, urlencode
-from authlib.integrations.flask_client import OAuth
-from authlib.integrations.base_client import OAuthError
-from urllib.parse import quote, urlparse, parse_qs
-import requests
-
-routes_store_supplier = Blueprint('routes_store_supplier', __name__)
-
-@routes_store_supplier.route(Model_View_Store_Supplier.HASH_PAGE_STORE_SUPPLIERS, methods=['GET'])
-def suppliers():
- Helper_App.console_log('suppliers')
- try:
- form_filters = Filters_Supplier.from_json(request.args)
- except Exception as e:
- Helper_App.console_log(f'Error: {e}')
- form_filters = Filters_Supplier()
- Helper_App.console_log(f'form_filters={form_filters}')
- model = Model_View_Store_Supplier(form_filters)
- if not model.is_user_logged_in:
- return redirect(url_for('routes_core.home'))
- return render_template('pages/store/_suppliers.html', model = model, datetime = datetime)
-
-
-@routes_store_supplier.route(Model_View_Store_Supplier.HASH_SAVE_STORE_SUPPLIER, methods=['POST'])
-def save_supplier():
- data = Helper_App.get_request_data(request)
- try:
- form_filters = Filters_Supplier.from_json(data[Model_View_Store_Supplier.FLAG_FORM_FILTERS])
- Helper_App.console_log(f'form_filters: {form_filters}')
-
- suppliers = data[Model_View_Store_Supplier.FLAG_SUPPLIER]
- if len(suppliers) == 0:
- return jsonify({
- Model_View_Store_Supplier.FLAG_STATUS: Model_View_Store_Supplier.FLAG_FAILURE,
- Model_View_Store_Supplier.FLAG_MESSAGE: f'No stock items.'
- })
- Helper_App.console_log(f'suppliers={suppliers}')
- objs_supplier = []
- for supplier in suppliers:
- objs_supplier.append(Supplier.from_json(supplier))
- Helper_App.console_log(f'objs_supplier={objs_supplier}')
-
- save_errors = Model_View_Store_Supplier.save_suppliers(data.get('comment', 'No comment'), objs_supplier)
- if len(save_errors) > 0:
- return jsonify({
- Model_View_Store_Supplier.FLAG_STATUS: Model_View_Store_Supplier.FLAG_FAILURE,
- Model_View_Store_Supplier.FLAG_MESSAGE: f'Save errors: {save_errors}'
- })
- model_return = Model_View_Store_Supplier(form_filters_old = form_filters)
- if not model_return.is_user_logged_in:
- raise Exception('User not logged in.')
- return jsonify({
- Model_View_Store_Supplier.FLAG_STATUS: Model_View_Store_Supplier.FLAG_SUCCESS,
- Model_View_Store_Supplier.FLAG_DATA: {supplier.id_supplier: supplier.to_json() for supplier in model_return.suppliers}
- })
- except Exception as e:
- return jsonify({
- Model_View_Store_Supplier.FLAG_STATUS: Model_View_Store_Supplier.FLAG_FAILURE,
- Model_View_Store_Supplier.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
- })
-
\ No newline at end of file
diff --git a/controllers/store/supplier_purchase_order.py b/controllers/store/supplier_purchase_order.py
deleted file mode 100644
index ba9cdc06..00000000
--- a/controllers/store/supplier_purchase_order.py
+++ /dev/null
@@ -1,82 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: App Routing
-Feature: Store Supplier_Purchase_Order Routes
-
-Description:
-Initializes the Flask application, sets the configuration based on the environment, and defines two routes (/ and /about) that render templates with the specified titles.
-"""
-
-# internal
-from business_objects.store.supplier_purchase_order import Supplier_Purchase_Order
-from forms.store.supplier_purchase_order import Filters_Supplier_Purchase_Order
-from models.model_view_store_supplier_purchase_order import Model_View_Store_Supplier_Purchase_Order
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-# external
-from datetime import datetime
-from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app
-from extensions import db, oauth
-from urllib.parse import quote_plus, urlencode
-from authlib.integrations.flask_client import OAuth
-from authlib.integrations.base_client import OAuthError
-from urllib.parse import quote, urlparse, parse_qs
-import requests
-
-routes_store_supplier_purchase_order = Blueprint('routes_store_supplier_purchase_order', __name__)
-
-@routes_store_supplier_purchase_order.route(Model_View_Store_Supplier_Purchase_Order.HASH_PAGE_STORE_SUPPLIER_PURCHASE_ORDERS, methods=['GET'])
-def supplier_purchase_orders():
- Helper_App.console_log('supplier_purchase_orders')
- try:
- form_filters = Filters_Supplier_Purchase_Order.from_json(request.args)
- except Exception as e:
- Helper_App.console_log(f'Error: {e}')
- form_filters = Filters_Supplier_Purchase_Order()
- Helper_App.console_log(f'form_filters={form_filters}')
- model = Model_View_Store_Supplier_Purchase_Order(form_filters)
- if not model.is_user_logged_in:
- return redirect(url_for('routes_core.home'))
- return render_template('pages/store/_supplier_purchase_orders.html', model = model, datetime = datetime)
-
-
-@routes_store_supplier_purchase_order.route(Model_View_Store_Supplier_Purchase_Order.HASH_SAVE_STORE_SUPPLIER_PURCHASE_ORDER, methods=['POST'])
-def save_supplier_purchase_order():
- data = Helper_App.get_request_data(request)
- try:
- form_filters = Filters_Supplier_Purchase_Order.from_json(data[Model_View_Store_Supplier_Purchase_Order.FLAG_FORM_FILTERS])
- Helper_App.console_log(f'form_filters: {form_filters}')
-
- supplier_purchase_orders = data[Model_View_Store_Supplier_Purchase_Order.FLAG_SUPPLIER_PURCHASE_ORDER]
- if len(supplier_purchase_orders) == 0:
- return jsonify({
- Model_View_Store_Supplier_Purchase_Order.FLAG_STATUS: Model_View_Store_Supplier_Purchase_Order.FLAG_FAILURE,
- Model_View_Store_Supplier_Purchase_Order.FLAG_MESSAGE: f'No stock items.'
- })
- Helper_App.console_log(f'supplier_purchase_orders={supplier_purchase_orders}')
- objs_supplier_purchase_order = []
- for supplier_purchase_order in supplier_purchase_orders:
- objs_supplier_purchase_order.append(Supplier_Purchase_Order.from_json(supplier_purchase_order))
- Helper_App.console_log(f'objs_supplier_purchase_order={objs_supplier_purchase_order}')
- save_errors, save_warnings = Model_View_Store_Supplier_Purchase_Order.save_supplier_purchase_orders(data.get('comment', 'No comment'), objs_supplier_purchase_order)
- if len(save_errors) > 0:
- return jsonify({
- Model_View_Store_Supplier_Purchase_Order.FLAG_STATUS: Model_View_Store_Supplier_Purchase_Order.FLAG_FAILURE,
- Model_View_Store_Supplier_Purchase_Order.FLAG_MESSAGE: f'Save errors: {save_errors}'
- })
- model_return = Model_View_Store_Supplier_Purchase_Order(form_filters_old = form_filters)
- if not model_return.is_user_logged_in:
- raise Exception('User not logged in.')
- return jsonify({
- Model_View_Store_Supplier_Purchase_Order.FLAG_STATUS: Model_View_Store_Supplier_Purchase_Order.FLAG_SUCCESS,
- Model_View_Store_Supplier_Purchase_Order.FLAG_DATA: model_return.convert_list_objects_to_json(model_return.supplier_purchase_orders)
- })
- except Exception as e:
- return jsonify({
- Model_View_Store_Supplier_Purchase_Order.FLAG_STATUS: Model_View_Store_Supplier_Purchase_Order.FLAG_FAILURE,
- Model_View_Store_Supplier_Purchase_Order.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
- })
-
\ No newline at end of file
diff --git a/datastores/datastore_base.py b/datastores/datastore_base.py
index 2d486680..71d14323 100644
--- a/datastores/datastore_base.py
+++ b/datastores/datastore_base.py
@@ -13,20 +13,9 @@ Datastore for Store
# internal
# from routes import bp_home
import lib.argument_validation as av
-from business_objects.store.access_level import Access_Level
-"""
-from business_objects.store.basket import Basket, Basket_Item
-from business_objects.store.product_category import Product_Category_Container, Product_Category
-from business_objects.store.currency import Currency
-from business_objects.store.image import Image
-from business_objects.store.delivery_option import Delivery_Option
-from business_objects.store.discount import Discount
-from business_objects.store.order import Order
-from business_objects.store.product import Product, Product_Permutation, Product_Price, Parameters_Product # Permutation_Variation_Link
-"""
+from business_objects.access_level import Access_Level
from business_objects.region import Region
from business_objects.sql_error import SQL_Error
-from business_objects.store.stock_item import Stock_Item
from business_objects.unit_measurement import Unit_Measurement
from business_objects.user import User, Parameters_User, User_Permission_Evaluation
# from helpers.helper_db_mysql import Helper_DB_MySQL
diff --git a/datastores/datastore_store_basket.py b/datastores/datastore_store_basket.py
deleted file mode 100644
index e7731cbb..00000000
--- a/datastores/datastore_store_basket.py
+++ /dev/null
@@ -1,143 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: DataStores
-Feature: Store Basket DataStore
-
-Description:
-Datastore for Store Baskets
-"""
-
-# internal
-# from routes import bp_home
-import lib.argument_validation as av
-from business_objects.store.basket import Basket, Basket_Item
-from business_objects.sql_error import SQL_Error
-from datastores.datastore_store_base import DataStore_Store_Base
-from helpers.helper_app import Helper_App
-# from helpers.helper_db_mysql import Helper_DB_MySQL
-# from models.model_view_store_checkout import Model_View_Store_Checkout # circular!
-from extensions import db
-# external
-# from abc import ABC, abstractmethod, abstractproperty
-from flask_sqlalchemy import SQLAlchemy
-from sqlalchemy import text
-import stripe
-import os
-from flask import Flask, session, current_app
-from pydantic import BaseModel, ConfigDict
-from typing import ClassVar
-from datetime import datetime
-
-# db = SQLAlchemy()
-
-
-class DataStore_Store_Basket(DataStore_Store_Base):
- # Global constants
- KEY_BASKET: ClassVar[str] = Basket.KEY_BASKET
- # Attributes
-
- def __init__(self, **kwargs):
- super().__init__(**kwargs)
-
- def get_metadata_basket(json_request):
- try:
- basket = json_request[DataStore_Store_Basket.KEY_BASKET]
- except KeyError:
- basket = {DataStore_Store_Basket.KEY_IS_INCLUDED_VAT: True, DataStore_Store_Basket.KEY_ID_CURRENCY: 1, DataStore_Store_Basket.KEY_ID_REGION_DELIVERY: 1}
- is_included_VAT = basket[DataStore_Store_Basket.KEY_IS_INCLUDED_VAT]
- id_currency = basket[DataStore_Store_Basket.KEY_ID_CURRENCY]
- id_region_delivery = basket[DataStore_Store_Basket.KEY_ID_REGION_DELIVERY]
- return id_currency, id_region_delivery, is_included_VAT
-
- def edit_basket(self, ids_permutation_basket, quantities_permutation_basket, id_permutation_edit, quantity_permutation_edit, sum_not_edit, id_currency, id_region_delivery, is_included_VAT):
- # redundant argument validation?
- _m = 'DataStore_Store_Base.edit_basket'
- Helper_App.console_log(f'{_m}\nstarting...')
- # av.val_instance(filters, 'filters', _m, Parameters_Product_Category)
- # av.val_str(ids_product_basket, 'ids_product_basket', _m)
- av.val_str(ids_permutation_basket, 'ids_permutation_basket', _m)
- # av.val_str(quantities_product_basket, 'quantities_product_basket', _m)
- av.val_str(quantities_permutation_basket, 'quantities_permutation_basket', _m)
- """
- if id_product_edit == 'None':
- id_product_edit = None
- else:
- Helper_App.console_log(f'id_product_edit: {id_product_edit}')
- av.val_int(id_product_edit, 'id_product_edit', _m)
- """
- if id_permutation_edit == 'None' or str(type(id_permutation_edit)) =="":
- id_permutation_edit = None
- else:
- Helper_App.console_log(f'id_permutation_edit: {id_permutation_edit}')
- Helper_App.console_log(str(type(id_permutation_edit)))
- av.val_int(id_permutation_edit, 'id_permutation_edit', _m)
- if quantity_permutation_edit == 'None' or str(type(quantity_permutation_edit)) =="":
- quantity_permutation_edit = None
- else:
- Helper_App.console_log(f'quantity_permutation_edit: {quantity_permutation_edit}')
- av.val_int(quantity_permutation_edit, 'quantity_permutation_edit', _m)
- if sum_not_edit == 'None':
- sum_not_edit = None
- else:
- Helper_App.console_log(f'sum_not_edit: {sum_not_edit}')
- av.val_bool(sum_not_edit, 'sum_not_edit', _m)
-
- argument_dict_list = {
- 'a_id_user': self.info_user.get('sub'),
- # 'a_ids_product_basket': ids_product_basket,
- 'a_ids_permutation_basket': ids_permutation_basket,
- # 'a_quantities_product_basket': quantities_product_basket,
- 'a_quantities_permutation_basket': quantities_permutation_basket,
- # 'a_id_product_edit': id_product_edit if id_permutation_edit is None else None,
- 'a_id_permutation_edit': id_permutation_edit,
- 'a_quantity_permutation_edit': quantity_permutation_edit,
- 'a_sum_not_edit': 1 if sum_not_edit else 0,
- 'a_id_currency': id_currency,
- 'a_id_region_purchase': id_region_delivery
- }
-
- result = self.db_procedure_execute('p_shop_edit_user_basket', argument_dict_list)
- Helper_App.console_log('data received')
-
- cursor = result.cursor
-
- # categories, category_index = DataStore_Store_Base.input_many_product(cursor)
- category_list, errors = DataStore_Store_Base.input_many_product(cursor)
-
- Helper_App.console_log(f'cursor: {str(cursor)}')
-
- # Basket
- if not cursor.nextset():
- raise Exception("No more query results! Cannot open basket contents")
- result_set = cursor.fetchall()
- Helper_App.console_log(f'raw basket: {result_set}')
- # Helper_App.console_log(f'variations: {result_set_3}')
- # variations = [Product_Variation(**row) for row in result_set_3]
- basket = Basket(is_included_VAT, id_currency, id_region_delivery)
- for row in result_set:
- index_category = category_list.get_index_category_from_id(row[0])
- category = category_list.categories[index_category]
- index_product = category.get_index_product_from_id(row[1])
- product = category.products[index_product]
- basket_item = Basket_Item.from_product_and_quantity_and_VAT_included(product, row[7], self.app.is_included_VAT)
- Helper_App.console_log(f'adding basket item: {row}')
- Helper_App.console_log(f'basket item: {basket_item}')
- basket.add_item(basket_item) # basket.append(basket_item) # Basket_Item(category.name, product, row[4]))
-
- Helper_App.console_log(f'basket: {basket}')
-
- # Errors
- cursor.nextset()
- result_set_e = cursor.fetchall()
- Helper_App.console_log(f'raw errors: {result_set_e}')
- if len(result_set_e) > 0:
- errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # [SQL_Error(row[0], row[1]) for row in result_set_2]
- for error in errors:
- Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
-
- DataStore_Store_Base.db_cursor_clear(cursor)
-
- return basket
diff --git a/datastores/datastore_store_manufacturing_purchase_order.py b/datastores/datastore_store_manufacturing_purchase_order.py
deleted file mode 100644
index f0840480..00000000
--- a/datastores/datastore_store_manufacturing_purchase_order.py
+++ /dev/null
@@ -1,137 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: DataStores
-Feature: Store Manufacturing Purchase Order Purchase Order DataStore
-
-Description:
-Datastore for Store Manufacturing Purchase Order Purchase Orders
-"""
-
-# internal
-# from routes import bp_home
-import lib.argument_validation as av
-from business_objects.sql_error import SQL_Error
-from business_objects.store.manufacturing_purchase_order import Manufacturing_Purchase_Order, Manufacturing_Purchase_Order_Product_Link, Parameters_Manufacturing_Purchase_Order, Manufacturing_Purchase_Order_Temp, Manufacturing_Purchase_Order_Product_Link_Temp
-from datastores.datastore_store_base import DataStore_Store_Base
-from helpers.helper_app import Helper_App
-from helpers.helper_db_mysql import Helper_DB_MySQL
-from extensions import db
-# external
-# from abc import ABC, abstractmethod, abstractproperty
-from flask_sqlalchemy import SQLAlchemy
-from sqlalchemy import text
-import stripe
-import os
-from flask import Flask, session, current_app
-from pydantic import BaseModel, ConfigDict
-from typing import ClassVar
-from datetime import datetime
-
-
-class DataStore_Store_Manufacturing_Purchase_Order(DataStore_Store_Base):
-
- def __init__(self):
- super().__init__()
-
- def get_many_manufacturing_purchase_order(self, parameters_manufacturing_purchase_order):
- _m = 'DataStore_Store_Manufacturing_Purchase_Order.get_many_manufacturing_purchase_order'
- av.val_instance(parameters_manufacturing_purchase_order, 'parameters_manufacturing_purchase_order', _m, Parameters_Manufacturing_Purchase_Order)
- argument_dict = parameters_manufacturing_purchase_order.to_json()
- user = self.get_user_session()
- argument_dict = {
- 'a_id_user': user.id_user
- , **argument_dict
- , 'a_debug': 0
- }
- Helper_App.console_log(f'argument_dict: {argument_dict}')
- Helper_App.console_log('executing p_shop_get_many_manufacturing_purchase_order')
- result = self.db_procedure_execute('p_shop_get_many_manufacturing_purchase_order', argument_dict)
- cursor = result.cursor
- Helper_App.console_log('data received')
-
- # Manufacturing_Purchase_Orders
- result_set_1 = cursor.fetchall()
- Helper_App.console_log(f'raw manufacturing_purchase_orders: {result_set_1}')
- manufacturing_purchase_orders = []
- indices_manufacturing_purchase_order = {}
- for row in result_set_1:
- new_manufacturing_purchase_order = Manufacturing_Purchase_Order.from_DB_manufacturing_purchase_order(row)
- indices_manufacturing_purchase_order[new_manufacturing_purchase_order.id_order] = len(manufacturing_purchase_orders)
- manufacturing_purchase_orders.append(new_manufacturing_purchase_order)
-
- # Manufacturing_Purchase_Orders Items
- cursor.nextset()
- result_set_1 = cursor.fetchall()
- Helper_App.console_log(f'raw manufacturing_purchase_order_product_links: {result_set_1}')
- order_product_links = []
- for row in result_set_1:
- new_link = Manufacturing_Purchase_Order_Product_Link.from_DB_manufacturing_purchase_order(row)
- order_product_links.append(new_link)
- manufacturing_purchase_orders[indices_manufacturing_purchase_order[new_link.id_order]].items.append(new_link)
-
- # Errors
- cursor.nextset()
- result_set_e = cursor.fetchall()
- Helper_App.console_log(f'raw errors: {result_set_e}')
- errors = []
- if len(result_set_e) > 0:
- errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # (row[0], row[1])
- for error in errors:
- Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
-
- DataStore_Store_Manufacturing_Purchase_Order.db_cursor_clear(cursor)
-
- return manufacturing_purchase_orders, errors
-
- @classmethod
- def save_manufacturing_purchase_orders(cls, comment, manufacturing_purchase_orders):
- _m = 'DataStore_Store_Manufacturing_Purchase_Order.save_manufacturing_purchase_orders'
- av.val_str(comment, 'comment', _m)
-
- guid = Helper_DB_MySQL.create_guid_str()
- now = datetime.now()
- user = cls.get_user_session()
- rows_order = []
- for manufacturing_purchase_order in manufacturing_purchase_orders:
- row = Manufacturing_Purchase_Order_Temp.from_manufacturing_purchase_order(manufacturing_purchase_order)
- row.guid = guid
- rows_order.append(row)
- Helper_App.console_log(f'order rows: {rows_order}')
- DataStore_Store_Base.upload_bulk(Manufacturing_Purchase_Order_Temp.__tablename__, rows_order, 1000)
- Helper_App.console_log('bulk uploaded orders')
-
- rows_link = []
- for manufacturing_purchase_order in manufacturing_purchase_orders:
- for link in manufacturing_purchase_order.items:
- row = Manufacturing_Purchase_Order_Product_Link_Temp.from_manufacturing_purchase_order_product_link(link)
- row.guid = guid
- rows_link.append(row)
- Helper_App.console_log(f'link rows: {rows_link}')
- DataStore_Store_Base.upload_bulk(Manufacturing_Purchase_Order_Product_Link_Temp.__tablename__, rows_link, 1000)
- Helper_App.console_log('bulk uploaded links')
-
- argument_dict_list = {
- 'a_comment': comment,
- 'a_guid': guid,
- 'a_id_user': user.id_user,
- 'a_debug': 0
- }
- result = cls.db_procedure_execute('p_shop_save_manufacturing_purchase_order', argument_dict_list)
- Helper_App.console_log('saved manufacturing purchase orders')
-
- # Errors
- cursor = result.cursor
- cursor.nextset()
- result_set_e = cursor.fetchall()
- Helper_App.console_log(f'raw errors: {result_set_e}')
- errors = []
- if len(result_set_e) > 0:
- errors = [SQL_Error.from_DB_record(row) for row in result_set_e]
- for error in errors:
- Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
-
- DataStore_Store_Manufacturing_Purchase_Order.db_cursor_clear(cursor)
- return errors
diff --git a/datastores/datastore_store_product.py b/datastores/datastore_store_product.py
deleted file mode 100644
index 7dea7b47..00000000
--- a/datastores/datastore_store_product.py
+++ /dev/null
@@ -1,139 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: DataStores
-Feature: Store Product DataStore
-
-Description:
-Datastore for Store Products
-"""
-
-# internal
-import lib.argument_validation as av
-from business_objects.sql_error import SQL_Error
-from business_objects.store.product import Product, Product_Permutation, Product_Price, Parameters_Product, Product_Temp
-from datastores.datastore_store_base import DataStore_Store_Base
-from helpers.helper_app import Helper_App
-from helpers.helper_db_mysql import Helper_DB_MySQL
-# from models.model_view_store_checkout import Model_View_Store_Checkout # circular!
-from extensions import db
-# external
-# from abc import ABC, abstractmethod, abstractproperty
-from flask_sqlalchemy import SQLAlchemy
-from sqlalchemy import text
-import stripe
-import os
-from flask import Flask, session, current_app
-from pydantic import BaseModel, ConfigDict
-from typing import ClassVar
-from datetime import datetime
-
-# db = SQLAlchemy()
-
-"""
-class Table_Shop_Product_Category(db.Model):
- __tablename__ = 'Shop_Product_Category'
- id_category: int = db.Column(db.Integer, primary_key=True)
- code: str = db.Column(db.String(50))
- name: str = db.Column(db.String(255))
- description: str = db.Column(db.String(4000))
- active: bool = db.Column(db.Boolean)
- display_order: int = db.Column(db.Integer)
- created_on: datetime = db.Column(db.DateTime)
- created_by: int = db.Column(db.Integer)
- id_change_set: int = db.Column(db.Integer)
-"""
-"""
-class Row_Shop_Product_Temp(db.Model):
- __tablename__ = 'Shop_Product_Temp'
- __table_args__ = { 'extend_existing': True }
- id_product: int = db.Column(db.Integer, primary_key=True)
- id_category: int = db.Column(db.Integer)
- name: str = db.Column(db.String(50))
- has_variations: str = db.Column(db.String(255))
- id_access_level_required: int = db.Column(db.Integer)
- active: bool = db.Column(db.Boolean)
- display_order: int = db.Column(db.Integer)
- guid: str = db.Column(db.BINARY(36))
-
- @classmethod
- def from_product(cls, product):
- row = cls()
- row.id_product = product.id_product[0] if isinstance(product.id_product, tuple) else product.id_product
- row.id_category = product.id_category[0] if isinstance(product.id_category, tuple) else product.id_category
- row.name = product.name[0] if isinstance(product.name, tuple) else product.name
- row.id_access_level_required = product.id_access_level_required[0] if isinstance(product.id_access_level_required, tuple) else product.id_access_level_required
- row.active = product.active
- row.display_order = product.display_order
- return row
- def to_json(self):
- return {
- 'id_product': self.id_product,
- 'id_category': self.id_category,
- 'name': self.name,
- 'has_variations': self.has_variations,
- 'id_access_level_required': self.id_access_level_required,
- 'active': av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json'),
- 'display_order': self.display_order,
- 'guid': self.guid,
- }
-"""
-
-class DataStore_Store_Product(DataStore_Store_Base):
- def __init__(self):
- super().__init__()
- @classmethod
- def save_products(cls, comment, products):
- _m = 'DataStore_Store_Product.save_products'
- Helper_App.console_log(f'{_m}\nstarting...')
- Helper_App.console_log(f'comment: {comment}\nproducts: {products}')
-
- guid = Helper_DB_MySQL.create_guid()
- user = cls.get_user_session()
- rows = []
- id_product_new = 0
- for product in products:
- row = Product_Temp.from_product(product)
- if row.id_product == '':
- id_product_new -= 1
- row.id_product = id_product_new
- else:
- Helper_App.console_log(f'row.id_product: {row.id_product}')
- row.guid = guid
- rows.append(row)
-
- Helper_App.console_log(f'rows: {rows}')
- DataStore_Store_Base.upload_bulk(Product_Temp.__tablename__, rows, 1000)
-
- argument_dict_list = {
- 'a_comment': comment,
- 'a_guid': guid,
- 'a_id_user': user.id_user,
- 'a_debug': 0,
- }
- save_result = cls.db_procedure_execute('p_shop_save_product', argument_dict_list)
-
- cursor = save_result # .cursor
- Helper_App.console_log('data received')
-
- # Errors
- # cursor.nextset()
- result_set_e = cursor.fetchall()
- Helper_App.console_log(f'raw errors: {result_set_e}')
- errors = []
- if len(result_set_e) > 0:
- errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # (row[0], row[1])
- for error in errors:
- Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
- try:
- DataStore_Store_Base.db_cursor_clear(cursor)
- except Exception as e:
- Helper_App.console_log(f'Error clearing cursor: {e}')
- cursor.close()
-
- save_result.close()
- Helper_App.console_log('save procedure executed')
- return errors
-
diff --git a/datastores/datastore_store_product_category.py b/datastores/datastore_store_product_category.py
deleted file mode 100644
index 6a32c4e9..00000000
--- a/datastores/datastore_store_product_category.py
+++ /dev/null
@@ -1,103 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: DataStores
-Feature: Store Product Category DataStore
-
-Description:
-Datastore for Store Product Categories
-"""
-
-# internal
-import lib.argument_validation as av
-from business_objects.store.product_category import Product_Category_Container, Product_Category, Product_Category_Temp
-from business_objects.sql_error import SQL_Error
-# from datastores.datastore_base import Table_Shop_Product_Category, Table_Shop_Product_Category_Temp
-from datastores.datastore_store_base import DataStore_Store_Base
-from helpers.helper_app import Helper_App
-from helpers.helper_db_mysql import Helper_DB_MySQL
-# from models.model_view_store_checkout import Model_View_Store_Checkout # circular!
-from extensions import db
-# external
-# from abc import ABC, abstractmethod, abstractproperty
-from flask_sqlalchemy import SQLAlchemy
-from sqlalchemy import text
-import stripe
-import os
-from flask import Flask, session, current_app
-from pydantic import BaseModel, ConfigDict
-from typing import ClassVar
-from datetime import datetime
-
-
-class DataStore_Store_Product_Category(DataStore_Store_Base):
- def __init__(self):
- super().__init__()
- @classmethod
- def save_categories(cls, comment, categories):
- _m = 'DataStore_Store_Product_Category.save_categories'
- Helper_App.console_log(f'{_m}\nstarting...')
- Helper_App.console_log(f'comment: {comment}\ncategories: {categories}')
- # av.val_str(comment, 'comment', _m)
- # av.val_list_instances(categories, 'categories', _m, Product_Category, 1)
-
- guid = Helper_DB_MySQL.create_guid()
- now = datetime.now()
- user = cls.get_user_session()
- rows = []
- id_category_new = 0
- for category in categories:
- row = Product_Category_Temp.from_product_category(category)
- # row = category.to_temporary_record()
- # id_tmp =
- if row.id_category == '':
- id_category_new -= 1
- row.id_category = id_category_new
- else:
- Helper_App.console_log(f'row.id_category: {row.id_category}')
- row.guid = guid
- # row.created_on = now
- # row.created_by = user.id_user
- rows.append(row)
-
- Helper_App.console_log(f'rows: {rows}')
- """
- cursor = db.cursor()
- Helper_App.console_log('cursor created')
- cursor.executemany(
- 'INSERT INTO Shop_Product_Category_Temp (id_category, code, name, description, active, display_order, guid, created_on, created_by) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)',
- categories
- )
- Helper_App.console_log('bulk upload executed')
- db.commit()
- Helper_App.console_log('bulk upload committed')
- cursor.close()
- Helper_App.console_log('cursor closed')
- """
- DataStore_Store_Base.upload_bulk(Product_Category_Temp.__tablename__, rows, 1000)
-
- argument_dict_list = {
- 'a_comment': comment,
- 'a_guid': guid,
- 'a_id_user': user.id_user,
- 'a_debug': 0,
- }
- save_result = cls.db_procedure_execute('p_shop_save_product_category', argument_dict_list)
-
- # Errors
- cursor = save_result.cursor
- result_set_e = cursor.fetchall()
- Helper_App.console_log(f'raw errors: {result_set_e}')
- errors = []
- if len(result_set_e) > 0:
- errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # (row[0], row[1])
- for error in errors:
- Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
-
- DataStore_Store_Product_Category.db_cursor_clear(cursor)
-
- save_result.close()
- Helper_App.console_log('save procedure executed')
- return errors
diff --git a/datastores/datastore_store_product_permutation.py b/datastores/datastore_store_product_permutation.py
deleted file mode 100644
index 2d9dc6b7..00000000
--- a/datastores/datastore_store_product_permutation.py
+++ /dev/null
@@ -1,106 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: DataStores
-Feature: Store Product Permutation DataStore
-
-Description:
-Datastore for Store Product Permutations
-"""
-
-# internal
-import lib.argument_validation as av
-from business_objects.store.store_base import Store_Base
-from business_objects.store.product_permutation import Product_Permutation, Product_Permutation_Temp
-from datastores.datastore_store_base import DataStore_Store_Base
-from helpers.helper_app import Helper_App
-from helpers.helper_db_mysql import Helper_DB_MySQL
-# from models.model_view_store_checkout import Model_View_Store_Checkout # circular!
-from extensions import db
-# external
-# from abc import ABC, abstractmethod, abstractproperty
-from flask_sqlalchemy import SQLAlchemy
-from sqlalchemy import text
-import stripe
-import os
-from flask import Flask, session, current_app
-from pydantic import BaseModel, ConfigDict
-from typing import ClassVar
-from datetime import datetime
-
-# db = SQLAlchemy()
-
-
-
-class DataStore_Store_Product_Permutation(DataStore_Store_Base):
- def __init__(self):
- super().__init__()
-
- @classmethod
- def save_permutations(cls, comment, permutations):
- _m = 'DataStore_Store_Product_Permutation.save_permutations'
- av.val_str(comment, 'comment', _m)
- # av.val_list(permutations, 'list_permutations', _m, Product_Permutation, 1)
-
- guid = Helper_DB_MySQL.create_guid_str()
- now = datetime.now()
- user = cls.get_user_session()
- rows = []
- for permutation in permutations:
- # row = permutation.to_temporary_record()
- row = Product_Permutation_Temp.from_product_permutation(permutation)
- row.guid = guid
- rows.append(row)
-
- Helper_App.console_log(f'rows: {rows}')
-
- """
- cursor = db.cursor()
- Helper_App.console_log('cursor created')
- cursor.executemany(
- '''INSERT INTO Shop_Product_Permutation_Temp (
- id_permutation,
- id_product,
- description,
- cost_local,
- id_currency_cost,
- profit_local_min,
- latency_manufacture,
- id_unit_measurement_quantity,
- count_unit_measurement_quantity,
- quantity_min,
- quantity_max,
- quantity_stock,
- is_subscription,
- id_unit_measurement_interval_recurrence,
- count_interval_recurrence,
- id_stripe_product,
- does_expire_faster_once_unsealed,
- id_unit_measurement_interval_expiration_unsealed,
- count_interval_expiration_unsealed,
- active,
- guid
- )
- VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)''',
- rows
- )
- Helper_App.console_log('cursor executed')
- db.commit()
- Helper_App.console_log('cursor committed')
- cursor.close()
- Helper_App.console_log('cursor closed')
- """
- DataStore_Store_Base.upload_bulk(Product_Permutation_Temp.__tablename__, rows, 1000)
- Helper_App.console_log('bulk uploaded')
-
- argument_dict_list = {
- 'a_comment': comment,
- 'a_guid': guid,
- 'a_id_user': user.id_user,
- 'a_debug': 0,
- }
- results = cls.db_procedure_execute('p_shop_save_product_permutation', argument_dict_list)
- DataStore_Store_Base.db_cursor_clear(results.cursor)
- Helper_App.console_log('saved product permutations')
diff --git a/datastores/datastore_store_product_variation.py b/datastores/datastore_store_product_variation.py
deleted file mode 100644
index 5265df82..00000000
--- a/datastores/datastore_store_product_variation.py
+++ /dev/null
@@ -1,77 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: DataStores
-Feature: Store Product Variation DataStore
-
-Description:
-Datastore for Store Product Variations
-"""
-
-# internal
-# from routes import bp_home
-import lib.argument_validation as av
-from business_objects.store.product_variation import Product_Variation, Parameters_Product_Variation, Product_Variation_Temp
-from business_objects.store.product_variation_type import Product_Variation_Type, Product_Variation_Type_Temp
-from datastores.datastore_store_base import DataStore_Store_Base
-from helpers.helper_app import Helper_App
-from helpers.helper_db_mysql import Helper_DB_MySQL
-# from models.model_view_store_checkout import Model_View_Store_Checkout # circular!
-from extensions import db
-# external
-# from abc import ABC, abstractmethod, abstractproperty
-from flask_sqlalchemy import SQLAlchemy
-from sqlalchemy import text
-import stripe
-import os
-from flask import Flask, session, current_app
-from pydantic import BaseModel, ConfigDict
-from typing import ClassVar
-from datetime import datetime
-
-
-
-class DataStore_Store_Product_Variation(DataStore_Store_Base):
-
- def __init__(self, **kwargs):
- super().__init__(**kwargs)
-
- @classmethod
- def save_product_variations(cls, comment, variation_types):
- _m = f'{cls.__class__}.save_product_variations'
- av.val_str(comment, 'comment', _m)
-
- guid = Helper_DB_MySQL.create_guid_str()
- user = cls.get_user_session()
- rows = []
- for variation_type in variation_types:
- row = Product_Variation_Type_Temp.from_product_variation_type(variation_type)
- row.guid = guid
- rows.append(row)
- Helper_App.console_log(f'rows: {rows}')
-
- DataStore_Store_Base.upload_bulk(Product_Variation_Type_Temp.__tablename__, rows, 1000)
- Helper_App.console_log('bulk uploaded product variation types')
-
- rows = []
- for variation_type in variation_types:
- if variation_type.variations is not None:
- for variation in variation_type.variations:
- row = Product_Variation_Temp.from_product_variation(variation)
- row.guid = guid
- rows.append(row)
- Helper_App.console_log(f'rows: {rows}')
-
- DataStore_Store_Base.upload_bulk(Product_Variation_Temp.__tablename__, rows, 1000)
- Helper_App.console_log('bulk uploaded product variations')
-
- argument_dict_list = {
- 'a_comment': comment,
- 'a_guid': guid,
- 'a_id_user': user.id_user,
- 'a_debug': 0,
- }
- cls.db_procedure_execute('p_shop_save_product_variation', argument_dict_list)
- Helper_App.console_log('saved product variations')
diff --git a/datastores/datastore_store_stock_item.py b/datastores/datastore_store_stock_item.py
deleted file mode 100644
index fbc933e4..00000000
--- a/datastores/datastore_store_stock_item.py
+++ /dev/null
@@ -1,146 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: DataStores
-Feature: Store Stock Item DataStore
-
-Description:
-Datastore for Store Stock Items
-"""
-
-# internal
-# from routes import bp_home
-import lib.argument_validation as av
-from business_objects.sql_error import SQL_Error
-from business_objects.store.stock_item import Stock_Item, Parameters_Stock_Item, Stock_Item_Temp
-from datastores.datastore_store_base import DataStore_Store_Base
-from helpers.helper_app import Helper_App
-from helpers.helper_db_mysql import Helper_DB_MySQL
-# from models.model_view_store_checkout import Model_View_Store_Checkout # circular!
-from extensions import db
-# external
-# from abc import ABC, abstractmethod, abstractproperty
-from flask_sqlalchemy import SQLAlchemy
-from sqlalchemy import text
-import stripe
-import os
-from flask import Flask, session, current_app
-from pydantic import BaseModel, ConfigDict
-from typing import ClassVar
-from datetime import datetime
-
-# db = SQLAlchemy()
-
-
-class DataStore_Store_Stock_Item(DataStore_Store_Base):
- # Global constants
- # Attributes
-
- def __init__(self):
- super().__init__()
-
- # Stock Items
- def get_many_stock_item(self, parameters_stock_item, category_list):
- # redundant argument validation?
- _m = 'DataStore_Store_Stock_Item.get_many_stock_item'
- av.val_instance(parameters_stock_item, 'parameters_stock_item', _m, Parameters_Stock_Item)
- argument_dict = parameters_stock_item.to_json()
- user = self.get_user_session()
- argument_dict = {
- 'a_id_user': user.id_user
- , **argument_dict
- , 'a_debug': 0
- }
- ids_permutation = category_list.get_csv_ids_permutation()
- Helper_App.console_log(f'ids_permutation: {ids_permutation}')
- argument_dict['a_ids_product_permutation'] = ids_permutation
- Helper_App.console_log(f'argument_dict: {argument_dict}')
- Helper_App.console_log('executing p_shop_get_many_stock_item')
- result = self.db_procedure_execute('p_shop_get_many_stock_item', argument_dict)
- cursor = result.cursor
- Helper_App.console_log('data received')
- category_list, errors = DataStore_Store_Stock_Item.input_many_stock_item(cursor, category_list)
- DataStore_Store_Stock_Item.db_cursor_clear(cursor)
-
- return category_list, errors
-
-
- def input_many_stock_item(cursor, category_list):
- _m = 'DataStore_Store_Stock_Item.input_many_stock_item'
- result_set_1 = cursor.fetchall()
- Helper_App.console_log(f'raw categories: {result_set_1}')
- for row in result_set_1:
- new_stock_item = Stock_Item.from_DB_stock_item(row)
- category_list.add_stock_item(new_stock_item) # , row)
-
- # Errors
- cursor.nextset()
- result_set_e = cursor.fetchall()
- Helper_App.console_log(f'raw errors: {result_set_e}')
- errors = []
- if len(result_set_e) > 0:
- errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # (row[0], row[1])
- for error in errors:
- Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
- """
- if len(errors) > 0:
- for error in errors:
- if error.code == 'PRODUCT_AVAILABILITY':
- ids_permutation_unavailable = DataStore_Store_Stock_Item.get_ids_permutation_from_error_availability(error.msg)
- for id_permutation in ids_permutation_unavailable:
- index_category = category_list.get_index_category_from_id_permutation(id_permutation)
- category = category_list.categories[index_category]
- index_product = category.get_index_product_from_id_permutation(id_permutation)
- product = category.products[index_product]
- index_permutation = product.get_index_permutation_from_id(id_permutation)
- permutation = product.permutations[index_permutation]
- permutation.is_available = False
- if 'region' in error.msg or 'currency' in error.msg:
- permutation.is_unavailable_in_currency_or_region = True
- """
- DataStore_Store_Stock_Item.db_cursor_clear(cursor)
- return category_list, errors # categories, category_index
-
- @classmethod
- def save_stock_items(cls, comment, stock_items):
- _m = 'DataStore_Store_Stock_Item.save_stock_items'
- av.val_str(comment, 'comment', _m)
-
- guid = Helper_DB_MySQL.create_guid_str()
- now = datetime.now()
- user = cls.get_user_session()
- rows = []
- for stock_item in stock_items:
- # row = permutation.to_temporary_record()
- row = Stock_Item_Temp.from_stock_item(stock_item)
- row.guid = guid
- rows.append(row)
-
- Helper_App.console_log(f'rows: {rows}')
-
- DataStore_Store_Base.upload_bulk(Stock_Item_Temp.__tablename__, rows, 1000)
- Helper_App.console_log('bulk uploaded')
-
- argument_dict_list = {
- 'a_comment': comment,
- 'a_guid': guid,
- 'a_id_user': user.id_user,
- 'a_debug': 0
- }
- result = cls.db_procedure_execute('p_shop_save_stock_item', argument_dict_list)
- Helper_App.console_log('saved product permutations')
-
- # Errors
- cursor = result.cursor
- cursor.nextset()
- result_set_e = cursor.fetchall()
- Helper_App.console_log(f'raw errors: {result_set_e}')
- errors = []
- if len(result_set_e) > 0:
- errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # (row[0], row[1])
- for error in errors:
- Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
- DataStore_Store_Stock_Item.db_cursor_clear(cursor)
- return errors
diff --git a/datastores/datastore_store_supplier.py b/datastores/datastore_store_supplier.py
deleted file mode 100644
index 1a9538ea..00000000
--- a/datastores/datastore_store_supplier.py
+++ /dev/null
@@ -1,143 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: DataStores
-Feature: Store Supplier DataStore
-
-Description:
-Datastore for Store Suppliers
-"""
-
-# internal
-# from routes import bp_home
-import lib.argument_validation as av
-from business_objects.sql_error import SQL_Error
-from business_objects.store.supplier_address import Supplier_Address, Supplier_Address_Temp
-from business_objects.store.supplier import Supplier, Parameters_Supplier, Supplier_Temp
-from datastores.datastore_store_base import DataStore_Store_Base
-from helpers.helper_app import Helper_App
-from helpers.helper_db_mysql import Helper_DB_MySQL
-from extensions import db
-# external
-# from abc import ABC, abstractmethod, abstractproperty
-from flask_sqlalchemy import SQLAlchemy
-from sqlalchemy import text
-import stripe
-import os
-from flask import Flask, session, current_app
-from pydantic import BaseModel, ConfigDict
-from typing import ClassVar
-from datetime import datetime
-
-
-class DataStore_Store_Supplier(DataStore_Store_Base):
-
- def __init__(self):
- super().__init__()
-
- @classmethod
- def get_many_supplier(cls, parameters_supplier):
- _m = 'DataStore_Store_Supplier.get_many_supplier'
- av.val_instance(parameters_supplier, 'parameters_supplier', _m, Parameters_Supplier)
- argument_dict = parameters_supplier.to_json()
- user = cls.get_user_session()
- argument_dict = {
- 'a_id_user': user.id_user
- , **argument_dict
- , 'a_debug': 0
- }
- Helper_App.console_log(f'argument_dict: {argument_dict}')
- Helper_App.console_log('executing p_shop_get_many_supplier')
- result = cls.db_procedure_execute('p_shop_get_many_supplier', argument_dict)
- cursor = result.cursor
- Helper_App.console_log('data received')
-
- # Suppliers
- result_set_1 = cursor.fetchall()
- Helper_App.console_log(f'raw suppliers: {result_set_1}')
- suppliers = []
- supplier_indexes = {}
- for row in result_set_1:
- new_supplier = Supplier.from_DB_supplier(row)
- supplier_indexes[new_supplier.id_supplier] = len(suppliers)
- suppliers.append(new_supplier)
-
- # Supplier Addresses
- cursor.nextset()
- result_set_1 = cursor.fetchall()
- Helper_App.console_log(f'raw supplier addresses: {result_set_1}')
- for row in result_set_1:
- new_address = Supplier_Address.from_DB_supplier(row)
- index_supplier = supplier_indexes[new_address.id_supplier]
- suppliers[index_supplier].addresses.append(new_address)
-
- # Errors
- cursor.nextset()
- result_set_e = cursor.fetchall()
- Helper_App.console_log(f'raw errors: {result_set_e}')
- errors = []
- if len(result_set_e) > 0:
- errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # (row[0], row[1])
- for error in errors:
- Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
-
- DataStore_Store_Supplier.db_cursor_clear(cursor)
-
- return suppliers, errors
-
- @classmethod
- def save_suppliers(cls, comment, suppliers):
- _m = 'DataStore_Store_Supplier.save_suppliers'
- Helper_App.console_log(f'{_m}\n{suppliers}')
- av.val_str(comment, 'comment', _m)
-
- guid = Helper_DB_MySQL.create_guid_str()
- now = datetime.now()
- user = cls.get_user_session()
-
- rows = []
- for supplier in suppliers:
- row = Supplier_Temp.from_supplier(supplier)
- row.guid = guid
- rows.append(row)
- Helper_App.console_log(f'rows: {rows}')
-
- DataStore_Store_Base.upload_bulk(Supplier_Temp.__tablename__, rows, 1000)
- Helper_App.console_log('bulk uploaded suppliers')
-
- rows = []
- for supplier in suppliers:
- Helper_App.console_log(f'supplier: {supplier}')
- for supplier_address in supplier.addresses:
- row = Supplier_Address_Temp.from_supplier_address(supplier_address)
- row.guid = guid
- rows.append(row)
- Helper_App.console_log(f'rows: {rows}')
-
- DataStore_Store_Base.upload_bulk(Supplier_Address_Temp.__tablename__, rows, 1000)
- Helper_App.console_log('bulk uploaded supplier addresses')
-
- argument_dict_list = {
- 'a_comment': comment,
- 'a_guid': guid,
- 'a_id_user': user.id_user,
- 'a_debug': 0
- }
- result = cls.db_procedure_execute('p_shop_save_supplier', argument_dict_list)
- Helper_App.console_log('saved suppliers')
-
- # Errors
- cursor = result.cursor
- cursor.nextset()
- result_set_e = cursor.fetchall()
- Helper_App.console_log(f'raw errors: {result_set_e}')
- errors = []
- if len(result_set_e) > 0:
- errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # (row[0], row[1])
- for error in errors:
- Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
-
- DataStore_Store_Supplier.db_cursor_clear(cursor)
- return errors
diff --git a/datastores/datastore_store_supplier_purchase_order.py b/datastores/datastore_store_supplier_purchase_order.py
deleted file mode 100644
index 03e2854b..00000000
--- a/datastores/datastore_store_supplier_purchase_order.py
+++ /dev/null
@@ -1,143 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: DataStores
-Feature: Store Supplier Purchase Order Purchase Order DataStore
-
-Description:
-Datastore for Store Supplier Purchase Order Purchase Orders
-"""
-
-# internal
-# from routes import bp_home
-import lib.argument_validation as av
-from business_objects.sql_error import SQL_Error
-from business_objects.store.supplier_purchase_order import Supplier_Purchase_Order, Supplier_Purchase_Order_Product_Link, Parameters_Supplier_Purchase_Order, Supplier_Purchase_Order_Temp, Supplier_Purchase_Order_Product_Link_Temp
-from datastores.datastore_store_base import DataStore_Store_Base
-from helpers.helper_app import Helper_App
-from helpers.helper_db_mysql import Helper_DB_MySQL
-from extensions import db
-# external
-# from abc import ABC, abstractmethod, abstractproperty
-from flask_sqlalchemy import SQLAlchemy
-from sqlalchemy import text
-import stripe
-import os
-from flask import Flask, session, current_app
-from pydantic import BaseModel, ConfigDict
-from typing import ClassVar
-from datetime import datetime
-
-
-class DataStore_Store_Supplier_Purchase_Order(DataStore_Store_Base):
-
- def __init__(self):
- super().__init__()
-
- def get_many_supplier_purchase_order(self, parameters_supplier_purchase_order):
- _m = 'DataStore_Store_Supplier_Purchase_Order.get_many_supplier_purchase_order'
- av.val_instance(parameters_supplier_purchase_order, 'parameters_supplier_purchase_order', _m, Parameters_Supplier_Purchase_Order)
- argument_dict = parameters_supplier_purchase_order.to_json()
- user = self.get_user_session()
- argument_dict = {
- 'a_id_user': user.id_user
- , **argument_dict
- , 'a_debug': 0
- }
- Helper_App.console_log(f'argument_dict: {argument_dict}')
- Helper_App.console_log('executing p_shop_get_many_supplier_purchase_order')
- result = self.db_procedure_execute('p_shop_get_many_supplier_purchase_order', argument_dict)
- cursor = result.cursor
- Helper_App.console_log('data received')
-
- # Supplier_Purchase_Orders
- result_set_1 = cursor.fetchall()
- Helper_App.console_log(f'raw supplier_purchase_orders: {result_set_1}')
- supplier_purchase_orders = []
- indices_supplier_purchase_order = {}
- for row in result_set_1:
- new_supplier_purchase_order = Supplier_Purchase_Order.from_DB_supplier_purchase_order(row)
- indices_supplier_purchase_order[new_supplier_purchase_order.id_order] = len(supplier_purchase_orders)
- supplier_purchase_orders.append(new_supplier_purchase_order)
-
- # Supplier_Purchase_Orders Items
- cursor.nextset()
- result_set_2 = cursor.fetchall()
- Helper_App.console_log(f'raw supplier_purchase_order_product_links: {result_set_2}')
- order_product_links = []
- for row in result_set_2:
- new_link = Supplier_Purchase_Order_Product_Link.from_DB_supplier_purchase_order(row)
- order_product_links.append(new_link)
- supplier_purchase_orders[indices_supplier_purchase_order[new_link.id_order]].items.append(new_link)
-
-
- # Errors
- cursor.nextset()
- result_set_e = cursor.fetchall()
- Helper_App.console_log(f'raw errors: {result_set_e}')
- errors = []
- if len(result_set_e) > 0:
- errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # (row[0], row[1])
- for error in errors:
- Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
-
- DataStore_Store_Supplier_Purchase_Order.db_cursor_clear(cursor)
-
- return supplier_purchase_orders, errors
-
- @classmethod
- def save_supplier_purchase_orders(cls, comment, supplier_purchase_orders):
- _m = 'DataStore_Store_Supplier_Purchase_Order.save_supplier_purchase_orders'
- av.val_str(comment, 'comment', _m)
-
- guid = Helper_DB_MySQL.create_guid_str()
- now = datetime.now()
- user = cls.get_user_session()
- rows_order = []
- for supplier_purchase_order in supplier_purchase_orders:
- row = Supplier_Purchase_Order_Temp.from_supplier_purchase_order(supplier_purchase_order)
- row.guid = guid
- rows_order.append(row)
- Helper_App.console_log(f'order rows: {rows_order}')
- DataStore_Store_Base.upload_bulk(Supplier_Purchase_Order_Temp.__tablename__, rows_order, 1000)
- Helper_App.console_log('bulk uploaded orders')
-
- rows_link = []
- for supplier_purchase_order in supplier_purchase_orders:
- for link in supplier_purchase_order.items:
- row = Supplier_Purchase_Order_Product_Link_Temp.from_supplier_purchase_order_product_link(link)
- row.guid = guid
- rows_link.append(row)
- Helper_App.console_log(f'link rows: {rows_link}')
- DataStore_Store_Base.upload_bulk(Supplier_Purchase_Order_Product_Link_Temp.__tablename__, rows_link, 1000)
- Helper_App.console_log('bulk uploaded links')
-
- argument_dict_list = {
- 'a_comment': comment,
- 'a_guid': guid,
- 'a_id_user': user.id_user,
- 'a_debug': 0
- }
- result = cls.db_procedure_execute('p_shop_save_supplier_purchase_order', argument_dict_list)
- Helper_App.console_log('saved supplier purchase orders')
-
- # Errors
- cursor = result.cursor
- cursor.nextset()
- result_set_e = cursor.fetchall()
- Helper_App.console_log(f'raw errors: {result_set_e}')
- errors = []
- warnings = []
- if len(result_set_e) > 0:
- for row in result_set_e:
- new_error = SQL_Error.from_DB_record(row)
- if new_error.code == 'WARNING':
- warnings.append(new_error)
- else:
- errors.append(new_error)
- Helper_App.console_log(f"Error [{new_error.code}]: {new_error.msg}")
-
- cls.db_cursor_clear(cursor)
- return errors, warnings
diff --git a/datastores/datastore_user.py b/datastores/datastore_user.py
index 42e1a523..f79b526a 100644
--- a/datastores/datastore_user.py
+++ b/datastores/datastore_user.py
@@ -14,10 +14,8 @@ Datastore for Users
# from routes import bp_home
import lib.argument_validation as av
from business_objects.sql_error import SQL_Error
-from business_objects.store.stock_item import Stock_Item
from business_objects.user import User, Parameters_User, User_Permission_Evaluation
-# from datastores.datastore_base import DataStore_Base
-from datastores.datastore_store_base import DataStore_Store_Base
+from datastores.datastore_base import DataStore_Base
from helpers.helper_app import Helper_App
from helpers.helper_db_mysql import Helper_DB_MySQL
# from models.model_view_store_checkout import Model_View_Store_Checkout # circular!
@@ -36,7 +34,7 @@ from datetime import datetime
db = SQLAlchemy()
-class DataStore_User(DataStore_Store_Base):
+class DataStore_User(DataStore_Base):
# Global constants
# Attributes
diff --git a/forms/contact.py b/forms/contact.py
new file mode 100644
index 00000000..4e2a5ed5
--- /dev/null
+++ b/forms/contact.py
@@ -0,0 +1,33 @@
+"""
+Project: PARTS Website
+Author: Edward Middleton-Smith
+ Precision And Research Technology Systems Limited
+
+Technology: Backend
+Feature: Contact Us Form
+
+Description:
+Defines Flask-WTF form for handling user input on Contact Us page.
+"""
+
+# IMPORTS
+# internal
+# from business_objects.store.product_category import Filters_Product_Category # circular
+# from models.model_view_store import Model_View_Store # circular
+from forms.base import Form_Base
+# 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 Form_Contact(FlaskForm):
+ email = StringField('Email')
+ contact_name = StringField('Name')
+ company_name = StringField('Company')
+ message = TextAreaField('Message')
+ receive_marketing = BooleanField('I would like to receive marketing emails.')
+ recaptcha = RecaptchaField()
+ submit = SubmitField('Send Message')
diff --git a/forms/store/__init__.py b/forms/store/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/forms/store/__pycache__/__init__.cpython-312.pyc b/forms/store/__pycache__/__init__.cpython-312.pyc
deleted file mode 100644
index f2679b87..00000000
Binary files a/forms/store/__pycache__/__init__.cpython-312.pyc and /dev/null differ
diff --git a/forms/store/__pycache__/product.cpython-312.pyc b/forms/store/__pycache__/product.cpython-312.pyc
deleted file mode 100644
index 73c5e222..00000000
Binary files a/forms/store/__pycache__/product.cpython-312.pyc and /dev/null differ
diff --git a/forms/store/__pycache__/product_category.cpython-312.pyc b/forms/store/__pycache__/product_category.cpython-312.pyc
deleted file mode 100644
index 4b9588f9..00000000
Binary files a/forms/store/__pycache__/product_category.cpython-312.pyc and /dev/null differ
diff --git a/forms/store/__pycache__/product_permutation.cpython-312.pyc b/forms/store/__pycache__/product_permutation.cpython-312.pyc
deleted file mode 100644
index 14d4c745..00000000
Binary files a/forms/store/__pycache__/product_permutation.cpython-312.pyc and /dev/null differ
diff --git a/forms/store/manufacturing_purchase_order.py b/forms/store/manufacturing_purchase_order.py
deleted file mode 100644
index eae4f7c2..00000000
--- a/forms/store/manufacturing_purchase_order.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Backend
-Feature: Forms - Manufacturing Purchase Order Filters data input
-
-Description:
-Defines Flask-WTF forms for handling manufacturing purchase order filter input.
-"""
-
-# internal
-from business_objects.store.store_base import Store_Base
-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, DateField
-from wtforms.validators import InputRequired, NumberRange, Regexp, DataRequired, Optional
-from flask_wtf.recaptcha import RecaptchaField
-from abc import ABCMeta, abstractmethod
-
-
-class Filters_Manufacturing_Purchase_Order(Form_Base):
- active = BooleanField("Active only?", default = True)
- date_from = DateField('Date from')
- date_to = DateField('Date to')
- def __repr__(self):
- return f'Filters_Manufacturing_Purchase_Order(active={self.active.data}, date_from={self.date_from.data}, date_to={self.date_to.data})'
- @classmethod
- def from_json(cls, json):
- _m = f'{cls.__name__}.from_json'
- form = cls()
- form.active.data = av.input_bool(json[Store_Base.FLAG_ACTIVE], 'active', _m)
- if json[Store_Base.FLAG_DATE_FROM] != '':
- form.date_from.data = json[Store_Base.FLAG_DATE_FROM]
- if json[Store_Base.FLAG_DATE_TO] != '':
- form.date_to.data = json[Store_Base.FLAG_DATE_TO]
- return form
\ No newline at end of file
diff --git a/forms/store/product.py b/forms/store/product.py
deleted file mode 100644
index 702e2fcf..00000000
--- a/forms/store/product.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Backend
-Feature: Forms - Product Filter data input
-
-Description:
-Defines Flask-WTF forms for handling user input.
-"""
-
-# IMPORTS
-# internal
-# from business_objects.store.product_category import Filters_Product_Category
-# from models.model_view_store import Model_View_Store # circular
-# 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
-
-
-class Filters_Product(FlaskForm):
- id_category = SelectField('Category', validators=[Optional()], choices=[('', 'All')], default='')
- is_not_empty = BooleanField('Not empty only?')
- active = BooleanField("Active only?", default = True)
- @classmethod
- def from_filters_product(cls, filters_product):
- form = Filters_Product()
- form.id_category = filters_product.id_category
- form.is_not_empty.data = filters_product.is_not_empty
- form.active.data = filters_product.active
- return form
- def __repr__(self):
- return f'Filters_Product(id_category={self.id_category}, is_not_empty={self.is_not_empty.data}, active={self.active.data})'
- @classmethod
- def from_json(cls, json):
- filters = cls()
- filters.id_category.data = json['id_category']
- filters.is_not_empty.data = json['is_not_empty']
- filters.active.data = json['active']
- return filters
\ No newline at end of file
diff --git a/forms/store/product_category.py b/forms/store/product_category.py
deleted file mode 100644
index 463540ab..00000000
--- a/forms/store/product_category.py
+++ /dev/null
@@ -1,47 +0,0 @@
-"""
-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_Product_Category(Form_Base):
- is_not_empty = BooleanField('Not empty only?')
- active = BooleanField("Active only?", default = True)
- """
- @classmethod
- def from_filters(cls, filters):
- form = Filters_Product_Category()
- form.is_not_empty.data = filters.is_not_empty
- form.active.data = filters.active
- return form
- """
- def __repr__(self):
- return f'Filters_Product_Category(is_not_empty={self.is_not_empty.data}, active={self.active.data})'
- @classmethod
- def from_json(cls, json):
- _m = f'{cls.__name__}.from_json'
- form = Filters_Product_Category() # is_not_empty=json['is_not_empty'], active=json['active'])
- form.is_not_empty.data = av.input_bool(json[Store_Base.FLAG_IS_NOT_EMPTY], 'is_not_empty', _m)
- form.active.data = av.input_bool(json[Store_Base.FLAG_ACTIVE], 'active', _m)
- return form
\ No newline at end of file
diff --git a/forms/store/product_permutation.py b/forms/store/product_permutation.py
deleted file mode 100644
index 2fcd9d91..00000000
--- a/forms/store/product_permutation.py
+++ /dev/null
@@ -1,68 +0,0 @@
-"""
-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_Product_Permutation(Form_Base):
- id_category = SelectField('Category', validators=[Optional()], choices=[('', 'All')], default='')
- id_product = SelectField('Product', validators=[Optional()], choices=[('', 'All')], default='')
- is_out_of_stock = BooleanField('Out of stock only?')
- active = BooleanField('Active only?', default=True)
- quantity_min = FloatField('Min stock')
- quantity_max = FloatField('Max stock')
- # submit = SubmitField('Submit')
- """
- @classmethod
- def from_filters(cls, filters):
- form = Filters_Product_Permutation()
- form.id_category.choices = Store_Base.convert_list_objects_to_list_options(filters.categories)
- form.id_product.choices = Store_Base.convert_list_objects_to_list_options(filters.products)
- form.is_out_of_stock.data = filters.is_out_of_stock
- form.quantity_min.data = filters.quantity_min
- form.quantity_max.data = filters.quantity_max
- return form
- """
- def __repr__(self):
- return f'''
- Filters_Product_Permutation(
- id_category={self.id_category.data},
- id_product={self.id_product.data},
- is_out_of_stock={self.is_out_of_stock.data},
- active={self.active.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.active.data = av.input_bool(json[Store_Base.FLAG_ACTIVE], Store_Base.FLAG_ACTIVE, 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
\ No newline at end of file
diff --git a/forms/store/product_variation.py b/forms/store/product_variation.py
deleted file mode 100644
index 33efd993..00000000
--- a/forms/store/product_variation.py
+++ /dev/null
@@ -1,38 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Backend
-Feature: Forms - Product Variation Filters data input
-
-Description:
-Defines Flask-WTF forms for handling product variation filter input.
-"""
-
-# internal
-from business_objects.store.store_base import Store_Base
-from forms.base import Form_Base
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-# external
-from flask_wtf import FlaskForm
-from wtforms import StringField, TextAreaField, SubmitField, BooleanField, IntegerField, SelectField, FloatField, DateField
-from wtforms.validators import InputRequired, NumberRange, Regexp, DataRequired, Optional
-from flask_wtf.recaptcha import RecaptchaField
-from abc import ABCMeta, abstractmethod
-
-
-class Filters_Product_Variation(Form_Base):
- is_not_empty = BooleanField('Not empty only?')
- active = BooleanField("Active only?", default = True)
- def __repr__(self):
- return f'Filters_Product_Variation(is_not_empty={self.is_not_empty.data}, active={self.active.data})'
- @classmethod
- def from_json(cls, json):
- _m = f'{cls.__name__}.from_json'
- Helper_App.console_log(f'{_m}\njson={json}')
- form = cls()
- form.is_not_empty.data = av.input_bool(json[Store_Base.FLAG_IS_NOT_EMPTY], Store_Base.FLAG_IS_NOT_EMPTY, _m)
- form.active.data = av.input_bool(json[Store_Base.FLAG_ACTIVE], Store_Base.FLAG_ACTIVE, _m)
- return form
\ No newline at end of file
diff --git a/forms/store/stock_item.py b/forms/store/stock_item.py
deleted file mode 100644
index 0388031f..00000000
--- a/forms/store/stock_item.py
+++ /dev/null
@@ -1,76 +0,0 @@
-"""
-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
- """
\ No newline at end of file
diff --git a/forms/store/supplier.py b/forms/store/supplier.py
deleted file mode 100644
index 5ae4b600..00000000
--- a/forms/store/supplier.py
+++ /dev/null
@@ -1,34 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Backend
-Feature: Forms - Supplier Filters data input
-
-Description:
-Defines Flask-WTF forms for handling supplier filter input.
-"""
-
-# internal
-from business_objects.store.store_base import Store_Base
-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_Supplier(Form_Base):
- active = BooleanField("Active only?", default = True)
- def __repr__(self):
- return f'Filters_Supplier(active={self.active.data})'
- @classmethod
- def from_json(cls, json):
- _m = f'{cls.__name__}.from_json'
- form = cls()
- form.active.data = av.input_bool(json[Store_Base.FLAG_ACTIVE], 'active', _m)
- return form
\ No newline at end of file
diff --git a/forms/store/supplier_purchase_order.py b/forms/store/supplier_purchase_order.py
deleted file mode 100644
index ad5c3b8e..00000000
--- a/forms/store/supplier_purchase_order.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: Backend
-Feature: Forms - Supplier Purchase Order Filters data input
-
-Description:
-Defines Flask-WTF forms for handling supplier purchase order filter input.
-"""
-
-# internal
-from business_objects.store.store_base import Store_Base
-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, DateField
-from wtforms.validators import InputRequired, NumberRange, Regexp, DataRequired, Optional
-from flask_wtf.recaptcha import RecaptchaField
-from abc import ABCMeta, abstractmethod
-
-
-class Filters_Supplier_Purchase_Order(Form_Base):
- active = BooleanField("Active only?", default = True)
- date_from = DateField('Date from')
- date_to = DateField('Date to')
- def __repr__(self):
- return f'Filters_Supplier_Purchase_Order(active={self.active.data}, date_from={self.date_from.data}, date_to={self.date_to.data})'
- @classmethod
- def from_json(cls, json):
- _m = f'{cls.__name__}.from_json'
- form = cls()
- form.active.data = av.input_bool(json[Store_Base.FLAG_ACTIVE], 'active', _m)
- if json[Store_Base.FLAG_DATE_FROM] != '':
- form.date_from.data = json[Store_Base.FLAG_DATE_FROM]
- if json[Store_Base.FLAG_DATE_TO] != '':
- form.date_to.data = json[Store_Base.FLAG_DATE_TO]
- return form
\ No newline at end of file
diff --git a/forms/unit_measurement.py b/forms/unit_measurement.py
index 2c2d46e2..720da3e8 100644
--- a/forms/unit_measurement.py
+++ b/forms/unit_measurement.py
@@ -11,7 +11,7 @@ Defines Flask-WTF forms for handling unit of measurement filter input.
"""
# internal
-from business_objects.store.store_base import Store_Base
+from business_objects.base import Base
from forms.base import Form_Base
import lib.argument_validation as av
# external
@@ -34,9 +34,9 @@ class Filters_Unit_Measurement(Form_Base):
@classmethod
def from_json(cls, json):
form = Filters_Unit_Measurement()
- form.active.data = av.input_bool(json[Store_Base.FLAG_ACTIVE], 'active', 'Filters_Unit_Measurement')
+ form.active.data = av.input_bool(json[Base.FLAG_ACTIVE], 'active', 'Filters_Unit_Measurement')
return form
def to_json(self):
return {
- Store_Base.FLAG_ACTIVE: av.input_bool(self.active.data, Store_Base.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json'),
+ Base.FLAG_ACTIVE: av.input_bool(self.active.data, Base.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json'),
}
\ No newline at end of file
diff --git a/models/__pycache__/model_view_base.cpython-38.pyc b/models/__pycache__/model_view_base.cpython-38.pyc
index 3112cb6e..4532f87d 100644
Binary files a/models/__pycache__/model_view_base.cpython-38.pyc and b/models/__pycache__/model_view_base.cpython-38.pyc differ
diff --git a/models/__pycache__/model_view_contact.cpython-38.pyc b/models/__pycache__/model_view_contact.cpython-38.pyc
index 1cdaffb2..6a352b35 100644
Binary files a/models/__pycache__/model_view_contact.cpython-38.pyc and b/models/__pycache__/model_view_contact.cpython-38.pyc differ
diff --git a/models/model_view_admin.py b/models/model_view_admin.py
deleted file mode 100644
index 9e87f03d..00000000
--- a/models/model_view_admin.py
+++ /dev/null
@@ -1,26 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Store Permutations View Model
-
-Description:
-Data model for store permutations view
-"""
-
-# internal
-from helpers.helper_app import Helper_App
-from models.model_view_base import Model_View_Base
-
-# external
-from pydantic import BaseModel
-from typing import ClassVar
-
-class Model_View_Admin(Model_View_Base):
-
- def __init__(self, hash_page_current, **kwargs):
- _m = 'Model_View_Admin.__init__'
- Helper_App.console_log(f'{_m}\nstarting')
- super().__init__(hash_page_current=hash_page_current, **kwargs)
\ No newline at end of file
diff --git a/models/model_view_admin_home.py b/models/model_view_admin_home.py
deleted file mode 100644
index 269adea2..00000000
--- a/models/model_view_admin_home.py
+++ /dev/null
@@ -1,27 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Admin Home View Model
-
-Description:
-Data model for admin home view
-"""
-
-# internal
-from models.model_view_admin import Model_View_Admin
-
-# external
-from pydantic import BaseModel
-from typing import ClassVar
-
-class Model_View_Admin_Home(Model_View_Admin):
- @property
- def title(self):
- return 'Admin Home'
-
- def __init__(self, hash_page_current=Model_View_Admin.HASH_PAGE_ADMIN_HOME):
- super().__init__(hash_page_current=hash_page_current)
-
\ No newline at end of file
diff --git a/models/model_view_base.py b/models/model_view_base.py
index df1cabcd..7d82315a 100644
--- a/models/model_view_base.py
+++ b/models/model_view_base.py
@@ -18,7 +18,6 @@ Base data model for views
# internal
# from routes import bp_home
from business_objects.base import Base
-from business_objects.store.product_category import Product_Category
from business_objects.user import User, Parameters_User
from datastores.datastore_base import DataStore_Base
from datastores.datastore_user import DataStore_User
@@ -46,8 +45,10 @@ class Model_View_Base(BaseModel, ABC):
ATTR_TEXT_EXPANDED: ClassVar[str] = 'textExpanded'
ATTR_VALUE_CURRENT: ClassVar[str] = 'current-value'
ATTR_VALUE_PREVIOUS: ClassVar[str] = 'previous-value'
+ COMPANY_ADDRESS_SHORT: ClassVar[str] = '53 Alfred Green Close, Rugby, United Kingdom, CV22 6DN'
+ COMPANY_NUMBER: ClassVar[str] = '13587499'
FLAG_ACCESS_LEVEL: ClassVar[str] = 'access_level'
- FLAG_ACCESS_LEVEL_REQUIRED: ClassVar[str] = Product_Category.FLAG_ACCESS_LEVEL_REQUIRED
+ FLAG_ACCESS_LEVEL_REQUIRED: ClassVar[str] = Base.FLAG_ACCESS_LEVEL_REQUIRED
FLAG_ACTIVE: ClassVar[str] = Base.FLAG_ACTIVE
FLAG_ADD: ClassVar[str] = 'add'
# FLAG_ADD_DELETE: ClassVar[str] = 'add-delete'
@@ -56,6 +57,9 @@ class Model_View_Base(BaseModel, ABC):
FLAG_ADDRESS_LINE_2: ClassVar[str] = Base.FLAG_ADDRESS_LINE_2
FLAG_BOOL_FALSE: ClassVar[str] = 'false'
FLAG_BOOL_TRUE: ClassVar[str] = 'true'
+ FLAG_BUTTON: ClassVar[str] = 'button'
+ FLAG_BUTTON_LIGHT: ClassVar[str] = 'button-light'
+ FLAG_BUTTON_PRIMARY: ClassVar[str] = 'button-primary'
FLAG_CANCEL: ClassVar[str] = 'button-cancel'
FLAG_CALLBACK: ClassVar[str] = 'callback'
FLAG_CARD: ClassVar[str] = 'card'
@@ -68,8 +72,9 @@ class Model_View_Base(BaseModel, ABC):
FLAG_COMMENT: ClassVar[str] = 'comment'
# FLAG_CONTACT_US: ClassVar[str] = 'button-contact'
FLAG_CONTAINER: ClassVar[str] = 'container'
+ FLAG_CONTAINER_CHECKBOX: ClassVar[str] = 'container-checkbox'
FLAG_CONTAINER_ICON_AND_LABEL: ClassVar[str] = 'container-icon-label'
- FLAG_CONTAINER_INPUT: ClassVar[str] = FLAG_CONTAINER + '-input'
+ FLAG_CONTAINER_INPUT: ClassVar[str] = 'container-input'
FLAG_COUNTY: ClassVar[str] = Base.FLAG_COUNTY
FLAG_CSRF_TOKEN: ClassVar[str] = 'X-CSRFToken'
FLAG_CURRENCY: ClassVar[str] = 'currency'
@@ -95,8 +100,9 @@ class Model_View_Base(BaseModel, ABC):
FLAG_IMAGE_LOGO: ClassVar[str] = 'image-logo'
FLAG_INITIALISED: ClassVar[str] = 'initialised'
FLAG_IS_INCLUDED_VAT: ClassVar[str] = 'is_included_VAT'
- # FLAG_KEY_PRIMARY: ClassVar[str] = Store_Base.FLAG_KEY_PRIMARY
- FLAG_MESSAGE: ClassVar[str] = 'Message'
+ FLAG_LEFT_HAND_STUB: ClassVar[str] = 'lhs'
+ FLAG_LOGO: ClassVar[str] = 'logo'
+ FLAG_MESSAGE: ClassVar[str] = 'message'
FLAG_MODAL: ClassVar[str] = 'modal'
FLAG_NAME: ClassVar[str] = Base.FLAG_NAME
FLAG_NAME_ATTR_OPTION_TEXT: ClassVar[str] = Base.FLAG_NAME_ATTR_OPTION_TEXT
@@ -127,6 +133,7 @@ class Model_View_Base(BaseModel, ABC):
FLAG_PAGE_BODY: ClassVar[str] = 'page-body'
FLAG_PHONE_NUMBER: ClassVar[str] = Base.FLAG_PHONE_NUMBER
FLAG_POSTCODE: ClassVar[str] = Base.FLAG_POSTCODE
+ FLAG_RIGHT_HAND_SIDE: ClassVar[str] = 'rhs'
FLAG_ROW: ClassVar[str] = 'row'
FLAG_ROW_NEW: ClassVar[str] = 'row-new'
FLAG_ROWS: ClassVar[str] = Base.FLAG_ROWS
@@ -153,24 +160,10 @@ class Model_View_Base(BaseModel, ABC):
HASH_PAGE_LICENSE: ClassVar[str] = '/license'
HASH_PAGE_PRIVACY_POLICY: ClassVar[str] = '/privacy-policy'
HASH_PAGE_SERVICES: ClassVar[str] = '/services'
- # HASH_PAGE_STORE_ADMIN: ClassVar[str] = '/store/admin'
- HASH_PAGE_STORE_BASKET: ClassVar[str] = '/store/basket'
- HASH_PAGE_STORE_CUSTOMER_SALES_ORDERS: ClassVar[str] = '/store/customer_sales_orders'
- HASH_PAGE_STORE_HOME: ClassVar[str] = '/store'
- HASH_PAGE_STORE_MANUFACTURING_PURCHASE_ORDERS: ClassVar[str] = '/store/manufacturing_purchase_orders'
- HASH_PAGE_STORE_PRODUCT_CATEGORIES: ClassVar[str] = '/store/categories'
- HASH_PAGE_STORE_PRODUCTS: ClassVar[str] = '/store/products'
- HASH_PAGE_STORE_PRODUCT_PERMUTATIONS: ClassVar[str] = '/store/permutations'
- HASH_PAGE_STORE_PRODUCT_PRICES: ClassVar[str] = '/store/prices'
- HASH_PAGE_STORE_PRODUCT_VARIATIONS: ClassVar[str] = '/store/variations'
- HASH_PAGE_STORE_STOCK_ITEMS: ClassVar[str] = '/store/stock_items'
- HASH_PAGE_STORE_SUPPLIERS: ClassVar[str] = '/store/suppliers'
- HASH_PAGE_STORE_SUPPLIER_PURCHASE_ORDERS: ClassVar[str] = '/store/supplier_purchase_orders'
HASH_PAGE_USER_ACCOUNT: ClassVar[str] = '/user'
HASH_PAGE_USER_ADMIN: ClassVar[str] = '/user/admin'
HASH_PAGE_USER_LOGIN: ClassVar[str] = '/login'
HASH_PAGE_USER_LOGOUT: ClassVar[str] = '/logout'
- HASH_SCRIPTS_SECTION_STORE: ClassVar[str] = '/scripts_store'
ID_BUTTON_ADD: ClassVar[str] = 'buttonAdd'
ID_BUTTON_APPLY_FILTERS: ClassVar[str] = 'buttonApplyFilters'
ID_BUTTON_CANCEL: ClassVar[str] = 'buttonCancel'
@@ -192,14 +185,6 @@ class Model_View_Base(BaseModel, ABC):
# ID_BUTTON_NAV_CONTACT: ClassVar[str] = 'navContact'
ID_BUTTON_NAV_HOME: ClassVar[str] = 'navHome'
ID_BUTTON_NAV_SERVICES: ClassVar[str] = 'navServices'
- ID_BUTTON_NAV_STORE_HOME: ClassVar[str] = 'navStoreHome'
- ID_BUTTON_NAV_STORE_PRODUCT: ClassVar[str] = 'navStoreProduct'
- ID_BUTTON_NAV_STORE_PRODUCT_CATEGORIES: ClassVar[str] = 'navStoreProductCategories'
- ID_BUTTON_NAV_STORE_PRODUCT_PERMUTATIONS: ClassVar[str] = 'navStoreProductPermutations'
- ID_BUTTON_NAV_STORE_PRODUCT_PRICES: ClassVar[str] = 'navStoreProductPrices'
- ID_BUTTON_NAV_STORE_PRODUCT_VARIATIONS: ClassVar[str] = 'navStoreProductVariations'
- ID_BUTTON_NAV_STORE_STOCK_ITEMS: ClassVar[str] = 'navStoreStockItems'
- ID_BUTTON_NAV_USER_ACCOUNT: ClassVar[str] = 'navUserAccount'
ID_BUTTON_NAV_USER_ADMIN: ClassVar[str] = 'navUserAdmin'
ID_BUTTON_NAV_USER_LOGIN: ClassVar[str] = 'navUserLogin'
ID_BUTTON_NAV_USER_LOGOUT: ClassVar[str] = 'navUserLogout'
@@ -211,6 +196,7 @@ class Model_View_Base(BaseModel, ABC):
ID_TABLE_MAIN: ClassVar[str] = 'tableMain'
ID_TEXTAREA_CONFIRM: ClassVar[str] = 'textareaConfirm'
NAME_COMPANY: ClassVar[str] = 'Precision And Research Technology Systems Limited'
+ NAME_COMPANY_SHORT: ClassVar[str] = 'PARTS Ltd'
NAME_CSRF_TOKEN: ClassVar[str] = 'csrf-token'
# URL_HOST: ClassVar[str] = os.env() 'http://127.0.0.1:5000' # 'https://www.partsltd.co.uk'
URL_GITHUB: ClassVar[str] = 'https://github.com/Teddy-1024'
@@ -392,4 +378,6 @@ class Model_View_Base(BaseModel, ABC):
return date_time.strftime('%Y-%m-%dT%H:%M')
@staticmethod
def jsonify(data):
- return jsonify(data)
\ No newline at end of file
+ return jsonify(data)
+ def get_mail_contact_public(self):
+ return self.app.config['MAIL_CONTACT_PUBLIC']
\ No newline at end of file
diff --git a/models/model_view_contact.py b/models/model_view_contact.py
index ffac579b..67124483 100644
--- a/models/model_view_contact.py
+++ b/models/model_view_contact.py
@@ -14,18 +14,27 @@ Data model for contact view
from models.model_view_base import Model_View_Base
# from routes import bp_home
from lib import argument_validation as av
-from forms.forms import Form_Contact
+from forms.contact import Form_Contact
# external
from flask_wtf import FlaskForm
from abc import abstractproperty
from pydantic import BaseModel
+from typing import ClassVar
class Model_View_Contact(Model_View_Base):
# Attributes
- ID_EMAIL: str = 'email'
- ID_MESSAGE: str = 'msg'
- ID_NAME: str = 'name'
-
+ FLAG_COMPANY_NAME: ClassVar[str] = 'company_name'
+ FLAG_CONTACT_NAME: ClassVar[str] = 'contact_name'
+ FLAG_RECEIVE_MARKETING: ClassVar[str] = 'receive_marketing'
+ """
+ ID_EMAIL: ClassVar[str] = 'email'
+ ID_COMPANY_NAME: ClassVar[str] = 'company_name'
+ ID_CONTACT_NAME: ClassVar[str] = 'contact_name'
+ ID_MESSAGE: ClassVar[str] = 'msg'
+ ID_RECEIVE_MARKETING: ClassVar[str] = 'receive_marketing'
+ ID_NAME: ClassVar[str] = 'name'
+ """
+
form_contact: Form_Contact
@property
diff --git a/models/model_view_services.py b/models/model_view_services.py
deleted file mode 100644
index 4a9557a8..00000000
--- a/models/model_view_services.py
+++ /dev/null
@@ -1,27 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Services View Model
-
-Description:
-Data model for services view
-"""
-
-# internal
-from models.model_view_base import Model_View_Base
-# from routes import bp_home
-# external
-
-class Model_View_Services(Model_View_Base):
- # Attributes
- @property
- def title(self):
- return 'Services'
-
- def __init__(self, hash_page_current=Model_View_Base.HASH_PAGE_SERVICES):
- # Constructor
- super().__init__(hash_page_current=hash_page_current)
-
\ No newline at end of file
diff --git a/models/model_view_store.py b/models/model_view_store.py
deleted file mode 100644
index d6806940..00000000
--- a/models/model_view_store.py
+++ /dev/null
@@ -1,515 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Store Parent View Model
-
-Description:
-Parent data model for store views
-"""
-
-# IMPORTS
-# VARIABLE INSTANTIATION
-# METHODS
-
-# IMPORTS
-# internal
-# from context import models
-from business_objects.store.store_base import Store_Base
-from business_objects.store.product import Product, Parameters_Product, Product_Permutation # Product_Image_Filters,
-# from business_objects.store.product_category import Filters_Product_Category
-from business_objects.store.image import Resolution_Level_Enum
-from business_objects.store.basket import Basket_Item, Basket
-from business_objects.store.product_category import Product_Category
-from business_objects.store.product_variation import Product_Variation, Parameters_Product_Variation
-from business_objects.store.stock_item import Stock_Item
-from datastores.datastore_store_base import DataStore_Store_Base
-from datastores.datastore_user import DataStore_User
-from datastores.datastore_store_basket import DataStore_Store_Basket
-from forms.forms import Form_Basket_Edit, Form_Is_Included_VAT, Form_Delivery_Region, Form_Currency
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-from models.model_view_base import Model_View_Base
-# external
-from flask import send_file, jsonify
-from flask_sqlalchemy import SQLAlchemy
-import locale
-from typing import ClassVar
-from abc import abstractmethod
-
-
-class Model_View_Store(Model_View_Base):
- # Global constants
- ATTR_FORM_TYPE: ClassVar[str] = 'form-type'
- ATTR_ID_CUSTOMER: ClassVar[str] = 'id-customer'
- ATTR_ID_CUSTOMER_ADDRESS: ClassVar[str] = Store_Base.ATTR_ID_CUSTOMER_ADDRESS
- ATTR_ID_CUSTOMER_SALES_ORDER: ClassVar[str] = 'id-customer-sales-order'
- ATTR_ID_DELIVERY_OPTION: ClassVar[str] = Store_Base.ATTR_ID_DELIVERY_OPTION
- ATTR_ID_DISCOUNT: ClassVar[str] = Store_Base.ATTR_ID_DISCOUNT
- ATTR_ID_MANUFACTURING_PURCHASE_ORDER: ClassVar[str] = Store_Base.ATTR_ID_MANUFACTURING_PURCHASE_ORDER
- ATTR_ID_MANUFACTURING_PURCHASE_ORDER_PRODUCT_LINK: ClassVar[str] = Store_Base.ATTR_ID_MANUFACTURING_PURCHASE_ORDER_PRODUCT_LINK
- ATTR_ID_PLANT: ClassVar[str] = 'id-plant'
- ATTR_ID_PRODUCT : ClassVar[str] = Product.ATTR_ID_PRODUCT # 'id-product'
- ATTR_ID_PRODUCT_CATEGORY: ClassVar[str] = Product.ATTR_ID_PRODUCT_CATEGORY
- ATTR_ID_PRODUCT_PERMUTATION : ClassVar[str] = Product.ATTR_ID_PRODUCT_PERMUTATION # 'id-permutation'
- ATTR_ID_PRODUCT_PRICE: ClassVar[str] = Product.ATTR_ID_PRODUCT_PRICE
- ATTR_ID_PRODUCT_VARIATION : ClassVar[str] = Product_Variation.ATTR_ID_PRODUCT_VARIATION # 'id-variation'
- ATTR_ID_PRODUCT_VARIATION_TYPE : ClassVar[str] = Product_Variation.ATTR_ID_PRODUCT_VARIATION_TYPE # 'id-variation-type'
- ATTR_ID_STOCK_ITEM: ClassVar[str] = Store_Base.ATTR_ID_STOCK_ITEM
- ATTR_ID_STORAGE_LOCATION: ClassVar[str] = Store_Base.ATTR_ID_STORAGE_LOCATION
- ATTR_ID_SUPPLIER: ClassVar[str] = Store_Base.ATTR_ID_SUPPLIER
- ATTR_ID_SUPPLIER_ADDRESS: ClassVar[str] = Store_Base.ATTR_ID_SUPPLIER_ADDRESS
- ATTR_ID_SUPPLIER_PURCHASE_ORDER: ClassVar[str] = Store_Base.ATTR_ID_SUPPLIER_PURCHASE_ORDER
- ATTR_ID_SUPPLIER_PURCHASE_ORDER_PRODUCT_LINK: ClassVar[str] = Store_Base.ATTR_ID_SUPPLIER_PURCHASE_ORDER_PRODUCT_LINK
- ATTR_ID_UNIT_MEASUREMENT_LATENCY_MANUFACTURE: ClassVar[str] = Product_Permutation.ATTR_ID_UNIT_MEASUREMENT_LATENCY_MANUFACTURE
- ATTR_ID_UNIT_MEASUREMENT_QUANTITY: ClassVar[str] = Product_Permutation.ATTR_ID_UNIT_MEASUREMENT_QUANTITY
- FLAG_BUTTON_BASKET_ADD : ClassVar[str] = Model_View_Base.FLAG_SUBMIT + '.buttonAddToBasket'
- FLAG_BUTTON_BUY_NOW : ClassVar[str] = 'buttonBuyNow'
- """
- FLAG_COST_LOCAL: ClassVar[str] = Store_Base.FLAG_COST_LOCAL
- FLAG_COST_LOCAL_VAT_EXCL: ClassVar[str] = Store_Base.FLAG_COST_LOCAL_VAT_EXCL
- FLAG_COST_LOCAL_VAT_INCL: ClassVar[str] = Store_Base.FLAG_COST_LOCAL_VAT_INCL
- """
- FLAG_COST_TOTAL_LOCAL_VAT_EXCL: ClassVar[str] = Store_Base.FLAG_COST_TOTAL_LOCAL_VAT_EXCL
- FLAG_COST_TOTAL_LOCAL_VAT_INCL: ClassVar[str] = Store_Base.FLAG_COST_TOTAL_LOCAL_VAT_INCL
- FLAG_COST_UNIT_LOCAL_VAT_EXCL: ClassVar[str] = Store_Base.FLAG_COST_UNIT_LOCAL_VAT_EXCL
- FLAG_COST_UNIT_LOCAL_VAT_INCL: ClassVar[str] = Store_Base.FLAG_COST_UNIT_LOCAL_VAT_INCL
- FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: ClassVar[str] = Product_Permutation.FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED
- FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: ClassVar[str] = Product_Permutation.FLAG_COUNT_UNIT_MEASUREMENT_INTERVAL_RECURRENCE
- FLAG_COUNT_UNIT_MEASUREMENT_PER_QUANTITY_STEP: ClassVar[str] = Product_Permutation.FLAG_COUNT_UNIT_MEASUREMENT_PER_QUANTITY_STEP
- FLAG_CURRENCY_COST: ClassVar[str] = Product_Permutation.FLAG_CURRENCY_COST
- FLAG_CUSTOMER: ClassVar[str] = Store_Base.FLAG_CUSTOMER
- FLAG_CUSTOMER_ADDRESS: ClassVar[str] = Store_Base.FLAG_CUSTOMER_ADDRESS
- FLAG_CUSTOMER_SALES_ORDER: ClassVar[str] = Store_Base.FLAG_CUSTOMER_SALES_ORDER
- FLAG_DATE_CONSUMED: ClassVar[str] = Stock_Item.FLAG_DATE_CONSUMED
- FLAG_DATE_EXPIRATION: ClassVar[str] = Stock_Item.FLAG_DATE_EXPIRATION
- FLAG_DATE_PURCHASED: ClassVar[str] = Stock_Item.FLAG_DATE_PURCHASED
- FLAG_DATE_RECEIVED: ClassVar[str] = Stock_Item.FLAG_DATE_RECEIVED
- FLAG_DATE_UNSEALED: ClassVar[str] = Stock_Item.FLAG_DATE_UNSEALED
- FLAG_DISCOUNT: ClassVar[str] = Store_Base.FLAG_DISCOUNT
- FLAG_DOES_EXPIRE_FASTER_ONCE_UNSEALED: ClassVar[str] = Product_Permutation.FLAG_DOES_EXPIRE_FASTER_ONCE_UNSEALED
- FLAG_HAS_VARIATIONS: ClassVar[str] = Product_Permutation.FLAG_HAS_VARIATIONS
- FLAG_ID_STRIPE_PRODUCT: ClassVar[str] = Product_Permutation.FLAG_ID_STRIPE_PRODUCT
- FLAG_IS_CONSUMED: ClassVar[str] = Stock_Item.FLAG_IS_CONSUMED
- FLAG_IS_NOT_EMPTY: ClassVar[str] = Store_Base.FLAG_IS_NOT_EMPTY
- FLAG_IS_OUT_OF_STOCK: ClassVar[str] = Store_Base.FLAG_IS_OUT_OF_STOCK
- FLAG_IS_SEALED: ClassVar[str] = Stock_Item.FLAG_IS_SEALED
- FLAG_IS_SUBSCRIPTION: ClassVar[str] = Product_Permutation.FLAG_IS_SUBSCRIPTION
- FLAG_LATENCY_DELIVERY_DAYS: ClassVar[str] = Store_Base.FLAG_LATENCY_DELIVERY_DAYS
- FLAG_LATENCY_MANUFACTURE: ClassVar[str] = Product_Permutation.FLAG_LATENCY_MANUFACTURE
- FLAG_MANUFACTURING_PURCHASE_ORDER: ClassVar[str] = Store_Base.FLAG_MANUFACTURING_PURCHASE_ORDER
- FLAG_NAME_PLURAL_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: ClassVar[str] = Product_Permutation.FLAG_NAME_PLURAL_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED
- FLAG_NAME_PLURAL_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: ClassVar[str] = Product_Permutation.FLAG_NAME_PLURAL_UNIT_MEASUREMENT_INTERVAL_RECURRENCE
- FLAG_NAME_PLURAL_UNIT_MEASUREMENT_QUANTITY: ClassVar[str] = Product_Permutation.FLAG_NAME_PLURAL_UNIT_MEASUREMENT_QUANTITY
- FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: ClassVar[str] = Product_Permutation.FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED
- FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: ClassVar[str] = Product_Permutation.FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_INTERVAL_RECURRENCE
- FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_QUANTITY: ClassVar[str] = Product_Permutation.FLAG_NAME_SINGULAR_UNIT_MEASUREMENT_QUANTITY
- FLAG_ORDER_ITEMS: ClassVar[str] = Store_Base.FLAG_ORDER_ITEMS
- FLAG_PLANT: ClassVar[str] = Store_Base.FLAG_PLANT
- FLAG_PRICE_TOTAL_LOCAL_VAT_EXCL: ClassVar[str] = Store_Base.FLAG_PRICE_TOTAL_LOCAL_VAT_EXCL
- FLAG_PRICE_TOTAL_LOCAL_VAT_INCL: ClassVar[str] = Store_Base.FLAG_PRICE_TOTAL_LOCAL_VAT_INCL
- FLAG_PRICE_UNIT_LOCAL_VAT_EXCL: ClassVar[str] = Store_Base.FLAG_PRICE_UNIT_LOCAL_VAT_EXCL
- FLAG_PRICE_UNIT_LOCAL_VAT_INCL: ClassVar[str] = Store_Base.FLAG_PRICE_UNIT_LOCAL_VAT_INCL
- FLAG_PRODUCT: ClassVar[str] = Store_Base.FLAG_PRODUCT
- FLAG_PRODUCT_CATEGORY: ClassVar[str] = Store_Base.FLAG_PRODUCT_CATEGORY
- FLAG_PRODUCT_PERMUTATION: ClassVar[str] = Store_Base.FLAG_PRODUCT_PERMUTATION
- FLAG_PRODUCT_PRICE: ClassVar[str] = Store_Base.FLAG_PRODUCT_PRICE
- FLAG_PRODUCT_VARIATION: ClassVar[str] = Store_Base.FLAG_PRODUCT_VARIATION
- FLAG_PRODUCT_VARIATIONS: ClassVar[str] = Store_Base.FLAG_PRODUCT_VARIATIONS
- FLAG_PRODUCT_VARIATION_TYPE: ClassVar[str] = Store_Base.FLAG_PRODUCT_VARIATION_TYPE
- FLAG_PROFIT_LOCAL_MIN: ClassVar[str] = Product_Permutation.FLAG_PROFIT_LOCAL_MIN
- FLAG_QUANTITY: ClassVar[str] = 'quantity'
- FLAG_QUANTITY_MAX: ClassVar[str] = Product_Permutation.FLAG_QUANTITY_MAX # 'quantity-max'
- FLAG_QUANTITY_MIN: ClassVar[str] = Product_Permutation.FLAG_QUANTITY_MIN # 'quantity-min'
- FLAG_QUANTITY_ORDERED: ClassVar[str] = Store_Base.FLAG_QUANTITY_ORDERED
- FLAG_QUANTITY_RECEIVED: ClassVar[str] = Store_Base.FLAG_QUANTITY_RECEIVED
- FLAG_QUANTITY_STOCK: ClassVar[str] = Product_Permutation.FLAG_QUANTITY_STOCK # 'quantity-stock'
- FLAG_REGION: ClassVar[str] = Store_Base.FLAG_REGION
- FLAG_STOCK_ITEM: ClassVar[str] = Store_Base.FLAG_STOCK_ITEM
- FLAG_STORAGE_LOCATION: ClassVar[str] = Store_Base.FLAG_STORAGE_LOCATION
- FLAG_SUPPLIER: ClassVar[str] = Store_Base.FLAG_SUPPLIER
- FLAG_SUPPLIER_ADDRESS: ClassVar[str] = Store_Base.FLAG_SUPPLIER_ADDRESS
- FLAG_SUPPLIER_PURCHASE_ORDER: ClassVar[str] = Store_Base.FLAG_SUPPLIER_PURCHASE_ORDER
- FLAG_SYMBOL_CURRENCY_COST: ClassVar[str] = Product_Permutation.FLAG_SYMBOL_CURRENCY_COST
- FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_INTERVAL_EXPIRATION_UNSEALED: ClassVar[str] = Product_Permutation.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_INTERVAL_EXPIRATION_UNSEALED
- FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: ClassVar[str] = Product_Permutation.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_MEASUREMENT_INTERVAL_RECURRENCE
- FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_MEASUREMENT_QUANTITY: ClassVar[str] = Product_Permutation.FLAG_SYMBOL_IS_SUFFIX_NOT_PREFIX_UNIT_MEASUREMENT_QUANTITY
- FLAG_SYMBOL_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: ClassVar[str] = Product_Permutation.FLAG_SYMBOL_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED
- FLAG_SYMBOL_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: ClassVar[str] = Product_Permutation.FLAG_SYMBOL_UNIT_MEASUREMENT_INTERVAL_RECURRENCE
- FLAG_SYMBOL_UNIT_MEASUREMENT_QUANTITY: ClassVar[str] = Product_Permutation.FLAG_SYMBOL_UNIT_MEASUREMENT_QUANTITY
- FLAG_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED: ClassVar[str] = Product_Permutation.FLAG_UNIT_MEASUREMENT_INTERVAL_EXPIRATION_UNSEALED
- FLAG_UNIT_MEASUREMENT_INTERVAL_RECURRENCE: ClassVar[str] = Product_Permutation.FLAG_UNIT_MEASUREMENT_INTERVAL_RECURRENCE
- FLAG_UNIT_MEASUREMENT_LATENCY_MANUFACTURE: ClassVar[str] = Store_Base.FLAG_UNIT_MEASUREMENT_LATENCY_MANUFACTURE
- FLAG_UNIT_MEASUREMENT_QUANTITY: ClassVar[str] = Product_Permutation.FLAG_UNIT_MEASUREMENT_QUANTITY
- HASH_GET_STORE_CUSTOMER_SALES_ORDER: ClassVar[str] = '/store/customer_sales_order_get'
- HASH_GET_STORE_MANUFACTURING_PURCHASE_ORDER: ClassVar[str] = '/store/manufacturing_purchase_order_get'
- HASH_GET_STORE_PRODUCT: ClassVar[str] = '/store/product_get'
- HASH_GET_STORE_PRODUCT_CATEGORY: ClassVar[str] = '/store/category_get'
- HASH_GET_STORE_PRODUCT_PERMUTATION: ClassVar[str] = '/store/permutation_get'
- HASH_GET_STORE_PRODUCT_VARIATION: ClassVar[str] = '/store/product_variation_get'
- HASH_GET_STORE_STOCK_ITEM: ClassVar[str] = '/store/stock_item_get'
- HASH_GET_STORE_SUPPLIER: ClassVar[str] = '/store/supplier_get'
- HASH_GET_STORE_SUPPLIER_PURCHASE_ORDER: ClassVar[str] = '/store/supplier_purchase_order_get'
- HASH_PAGE_STORE_BASKET : ClassVar[str] = '/store/basket'
- HASH_SAVE_STORE_CUSTOMER_SALES_ORDER: ClassVar[str] = '/store/save_customer_sales_order'
- HASH_SAVE_STORE_MANUFACTURING_PURCHASE_ORDER: ClassVar[str] = '/store/save_manufacturing_purchase_order'
- HASH_SAVE_STORE_PRODUCT: ClassVar[str] = '/store/save_product'
- HASH_SAVE_STORE_PRODUCT_CATEGORY: ClassVar[str] = '/store/save_category'
- HASH_SAVE_STORE_PRODUCT_PERMUTATION: ClassVar[str] = '/store/save_permutation'
- HASH_SAVE_STORE_PRODUCT_VARIATION: ClassVar[str] = '/store/save_product_variation'
- HASH_SAVE_STORE_STOCK_ITEM: ClassVar[str] = '/store/save_stock_item'
- HASH_SAVE_STORE_SUPPLIER: ClassVar[str] = '/store/save_supplier'
- HASH_SAVE_STORE_SUPPLIER_PURCHASE_ORDER: ClassVar[str] = '/store/save_supplier_purchase_order'
- HASH_STORE_BASKET_ADD : ClassVar[str] = '/store/basket_add'
- HASH_STORE_BASKET_DELETE : ClassVar[str] = '/store/basket_delete'
- HASH_STORE_BASKET_EDIT : ClassVar[str] = '/store/basket_edit'
- HASH_STORE_BASKET_LOAD : ClassVar[str] = '/store/basket_load'
- HASH_STORE_SET_CURRENCY : ClassVar[str] = '/store/set_currency'
- HASH_STORE_SET_DELIVERY_REGION : ClassVar[str] = '/store/set_delivery_region'
- HASH_STORE_SET_IS_INCLUDED_VAT : ClassVar[str] = '/store/set_is_included_VAT'
- ID_BASKET : ClassVar[str] = 'basket'
- ID_BASKET_CONTAINER : ClassVar[str] = 'basketContainer'
- ID_BASKET_TOTAL : ClassVar[str] = 'basketTotal'
- ID_BUTTON_BASKET_ADD : ClassVar[str] = 'buttonBasketAdd'
- ID_BUTTON_BUY_NOW : ClassVar[str] = 'buttonBuyNow'
- ID_BUTTON_CHECKOUT : ClassVar[str] = 'buttonCheckout'
- ID_CURRENCY : ClassVar[str] = Form_Currency.id_id_currency # 'id_currency'
- ID_CURRENCY_DEFAULT : ClassVar[str] = 1
- ID_LABEL_BASKET_EMPTY : ClassVar[str] = 'basketEmpty'
- ID_PRODUCT_CATEGORY_DEFAULT: ClassVar[str] = 1
- ID_REGION_DELIVERY_DEFAULT : ClassVar[str] = 1
- IS_INCLUDED_VAT_DEFAULT : ClassVar[str] = True
- """
- KEY_BASKET : ClassVar[str] = Basket.KEY_BASKET # 'basket'
- # KEY_CODE_CURRENCY : ClassVar[str] = 'code_currency'
- KEY_ID_CURRENCY : ClassVar[str] = Basket.KEY_ID_CURRENCY # 'id_currency'
- KEY_ID_PRODUCT : ClassVar[str] = 'product_id'
- KEY_ID_PERMUTATION : ClassVar[str] = 'permutation_id'
- KEY_ID_REGION_DELIVERY : ClassVar[str] = Basket.KEY_ID_REGION_DELIVERY # 'id_region_delivery'
- KEY_IS_INCLUDED_VAT : ClassVar[str] = Basket.KEY_IS_INCLUDED_VAT # 'is_included_VAT'
- KEY_ITEMS : ClassVar[str] = Basket.KEY_ITEMS # 'items'
- KEY_PRICE : ClassVar[str] = 'price'
- KEY_QUANTITY : ClassVar[str] = 'quantity'
- KEY_VALUE_DEFAULT : ClassVar[str] = 'default'
- """
- TYPE_FORM_BASKET_ADD : ClassVar[str] = 'Form_Basket_Add'
- TYPE_FORM_BASKET_EDIT : ClassVar[str] = 'Form_Basket_Edit'
- # development variables
- # valid_product_id_list = ['prod_PB0NUOSEs06ymG']
-
- # Attributes
- # id_user: str
- # db: SQLAlchemy
- # basket: Basket # list # dict
- # basket_total: float
- """
- id_currency: bool
- id_region_delivery: bool
- is_included_VAT: bool
- show_delivery_option: bool # for checkout page
- """
- """
- def __new__(cls, db, info_user, app, id_currency, id_region_delivery, is_included_VAT): # , *args, **kwargs``
- # Initialiser - validation
- _m = 'Model_View_Store.__new__'
- v_arg_type = 'class attribute'
- Helper_App.console_log(f'{_m}\nstarting')
- # av.val_str(id_user, 'id_user', _m)
- # return super().__new__(cls, *args, **kwargs)
- # cls.FLAG_BUTTON_BASKET_ADD = cls.FLAG_BUTTON_SUBMIT + '.buttonAddToBasket'
- return super().__new__(cls, db, info_user, app) # Model_View_Store, cls
- """
- @property
- def title(self):
- raise NotImplementedError('title must be implemented in child class')
-
- def __init__(self, hash_page_current, **kwargs): # , id_currency, id_region_delivery, is_included_VAT):
- # Constructor
- _m = 'Model_View_Store.__init__'
- Helper_App.console_log(f'{_m}\nstarting')
- super().__init__(hash_page_current=hash_page_current, **kwargs)
- self.is_page_store = True
- """
- self.basket = Basket(id_currency, id_region_delivery, is_included_VAT)
- # self.basket_total = 0
- # self.db = db
- # if logged in:
- # else:
- self.id_currency = id_currency
- self.id_region_delivery = id_region_delivery
- self.is_included_VAT = is_included_VAT
- self.show_delivery_option = True
- self.form_is_included_VAT = Form_Is_Included_VAT()
- regions, currencies = self.get_many_region_and_currency()
- self.form_currency = Form_Currency(id_currency=self.id_currency)
- self.form_currency.id_currency.choices = [(currency.id_currency, f'{currency.code} - {currency.name}') for currency in currencies]
- self.form_currency.id_currency.data = str(self.id_currency) if len(currencies) > 0 else None
- self.form_delivery_region = Form_Delivery_Region(id_region_delivery=self.id_region_delivery)
- self.form_delivery_region.id_region_delivery.choices = [(region.id_region, f'{region.code} - {region.name}') for region in regions]
- self.form_delivery_region.id_region_delivery.data = str(self.id_region_delivery) if len(regions) > 0 else None
- """
-
- def get_many_product(self, product_filters): # category_ids = '', product_ids = '', get_all_category = True, get_all_product = True, max_products_per_category = -1):
- _m = 'Model_View_Store.get_many_product'
- av.val_instance(product_filters, 'product_filters', _m, Parameters_Product)
- """
- av.val_str(category_ids, 'category_ids', _m)
- av.val_str(product_ids, 'product_ids', _m)
- av.val_bool(get_all_category, 'get_all_category', _m)
- av.val_bool(get_all_product, 'get_all_product', _m)
- av.val_int(max_products_per_category, 'max_products_per_category', _m)
- """
- # get products from database
- # call datastore method
- # return [Product.template()]
- self.category_list, errors = DataStore_Store_Base().get_many_product(product_filters) # category_ids, product_ids, get_all_category, get_all_product, max_products_per_category)
- # self.categories = categories
- # self.category_index = category_index
-
- return
- if get_all_category or get_all_product:
- prod = Product.template()
- prod_list = [ prod, prod ]
- return { 'MISCELLANEOUS': prod_list if max_products_per_category < 0 else prod_list[:max_products_per_category] }
- if product_ids == 'panties123':
- prod = Product.template()
- return { 'MISCELLANEOUS': [ prod] }
-
- # def product_category_getMany(self, category_ids = '', product_ids = '', get_all_category = True, get_all_product = True):
- # return Model_View_Store.product_category_getMany(category_ids, product_ids, get_all_category, get_all_product)
-
- def get_many_product_image_src(self, product_id, image_ids = '', get_primary_only = True, resolution_level = ''):
- _m = 'Model_View_Store.get_many_product_image'
- # Helper_App.console_log(f'{_m}\n')
- # av.val_instance(filters, 'filters', _m, Product_Image_Filters)
- av.val_int(product_id, 'product_id', _m)
- # av.full_val_int(product_id, 'product_id', _m)
- # product_id = int(product_id)
- av.val_str(image_ids, 'image_ids', _m)
- av.full_val_bool(get_primary_only, 'get_primary_only', _m)
- get_primary_only = bool(get_primary_only)
- resolution_level = Resolution_Level_Enum.get_member_by_text(resolution_level)
- av.val_instance(resolution_level, 'resolution_level', _m, Resolution_Level_Enum)
- # if (filters.product_id < 0 or filters.product_id not in self.valid_product_id_list):
- if (product_id not in Model_View_Store.valid_product_id_list): # product_id < 0 or
- return ''
- path_suffix = 'jpg' # get_suffix_from_product_id(product_id)
- path_file = f'/static/images/{product_id}.{path_suffix}'
- return path_file
- # return send_file(path_file, mimetype=f'image/{path_suffix}')
-
- """
- def get_product_category_text(self, category):
- return Enum_Product_Product_Category.get_member_by_text(category).text()
-
- def add_2_basket(product_id, quantity, basket_local):
- _m = 'Model_View_Store.add_2_basket'
- av.full_val_int(product_id, 'product_id', _m)
- product_id = str(product_id)
- av.full_val_int(quantity, 'quantity', _m)
- quantity = int(quantity)
- av.val_instance(basket_local, 'basket_local', _m, dict)
- # send to database
-
- # update basket on webpage with new database status
- if product_id in basket_local:
- basket_local[product_id] += quantity
- else:
- basket_local[product_id] = quantity
- return basket_local // jsonify(basket_local)
- """
-
-
- def basket_item_edit(self, permutation_id, quantity, quantity_sum_not_replace):
- _m = 'Model_View_Store.basket_item_edit'
- # av.full_val_int(product_id, 'product_id', _m)
- # product_id = int(product_id)
- # av.val_instance(db, 'db', _m, SQLAlchemy)
- Helper_App.console_log(f'{_m} starting')
- # Helper_App.console_log(f'product_id: {product_id}\npermutation_id: {permutation_id}\nquantity = {quantity}')
- # av.full_val_int(product_id, 'product_id', _m)
- # Helper_App.console_log('valid product id')
- av.full_val_int(quantity, 'quantity', _m)
- quantity = int(quantity)
- # item_added = False
- Helper_App.console_log(f'basket: {self.basket}')
- ids_permutation, quantities_permutation = self.basket.to_csv()
- self.basket = DataStore_Store_Basket().edit_basket(ids_permutation, quantities_permutation, permutation_id, quantity, quantity_sum_not_replace, self.id_currency, self.id_region_delivery, self.is_included_VAT)
- return True
-
- def get_basket(self, json_data):
- self.import_JSON_basket(json_data)
- if self.is_user_logged_in:
- ids_permutation, quantities_permutation = self.basket.to_csv()
- self.basket = DataStore_Store_Basket().edit_basket(ids_permutation, quantities_permutation, None, None, None, self.id_currency, self.id_region_delivery, self.is_included_VAT)
- # return self.basket
-
- def _get_json_basket_id_CSVs_product_permutation(self, basket):
- product_ids = ''
- permutation_ids = ''
- item_index_dict = {}
- if len(basket) > 0:
- for index_item in range(len(basket)):
- if index_item > 0:
- product_ids += ','
- permutation_ids += ','
- basket_item = basket[index_item]
- id_product = basket_item[self.KEY_ID_PRODUCT]
- id_permutation = basket_item[self.KEY_ID_PERMUTATION]
- id_permutation = '' if (id_permutation is None or id_permutation == 'None') else str(id_permutation)
- product_ids += str(id_product) # str(basket[b].product.id)
- permutation_ids += id_permutation # str(basket[b].product.id)
- # item_index_dict[Basket.get_key_product_index_from_ids_product_permutation(id_product, id_permutation)] = index_item
- item_index_dict[id_permutation] = index_item
- Helper_App.console_log(f'product_ids = {product_ids}')
- Helper_App.console_log(f'permutation_ids = {permutation_ids}')
- return product_ids, permutation_ids, item_index_dict
-
- def _get_basket_from_json(self, json_data):
- basket = json_data[self.KEY_BASKET]['items']
- av.val_instance(basket, 'basket', 'Model_View_Store._get_basket_from_json', list)
- Helper_App.console_log(f'basket = {basket}')
- return basket
-
- def import_JSON_basket(self, json_data):
- _m = 'Model_View_Store.import_JSON_basket'
- # av.val_instance(db, 'db', _m, SQLAlchemy)
- items = self._get_basket_from_json(json_data)
- basket = json_data[self.KEY_BASKET]
- id_currency = basket[self.KEY_ID_CURRENCY]
- id_region_delivery = basket[self.KEY_ID_REGION_DELIVERY]
- is_included_VAT = basket[self.KEY_IS_INCLUDED_VAT]
- Helper_App.console_log(f'json basket items: {items}')
- product_ids, permutation_ids, item_index_dict = self._get_json_basket_id_CSVs_product_permutation(items)
- category_list, errors = DataStore_Store_Base().get_many_product(Parameters_Product(
- self.id_user, # :a_id_user
- True, '', False, # :a_get_all_category, :a_ids_category, :a_get_inactive_category
- False, product_ids, False, False, # :a_get_all_product, :a_ids_product, :a_get_inactive_product, :a_get_first_product_only
- False, permutation_ids, False, # :a_get_all_permutation, :a_ids_permutation, :a_get_inactive_permutation
- False, '', False, True, # :a_get_all_image, :a_ids_image, :a_get_inactive_image, :a_get_first_image_only
- False, str(id_region_delivery), False, # :a_get_all_delivery_region, :a_ids_delivery_region, :a_get_inactive_delivery_region
- False, str(id_currency), False, # :a_get_all_currency, :a_ids_currency, :a_get_inactive_currency
- True, '', False # :a_get_all_discount, :a_ids_discount, :a_get_inactive_discount
- )) # product_ids=product_ids, get_all_category=False, get_all_product=False)
- # Helper_App.console_log(f'categories = {categories}')
- self.basket = Basket(id_currency, id_region_delivery, is_included_VAT)
- if len(category_list.categories) > 0: # not (categories is None):
- for category in category_list.categories:
- for product in category.products:
- # product = Product.from_json(items[index_item])
- product.form_basket_edit = Form_Basket_Edit()
- # key_index_product = Basket.get_key_product_index_from_ids_product_permutation(product.id_product, product.get_id_permutation())
- permutation = product.get_permutation_selected()
- self.basket.add_item(Basket_Item.from_product_and_quantity_and_VAT_included(product, items[item_index_dict[str(permutation.id_permutation)]][self.KEY_QUANTITY], self.is_included_VAT))
- """
- if len(items) > 0:
- for index_item in range(len(items)):
- """
- Helper_App.console_log(f'basket data: {json_data}')
- Helper_App.console_log(f'basket: {self.basket}')
-
- # ids_permutation_unavailable_region_or_currency = []
- # id_permutation_unavailable_otherwise = []
- if len(errors) > 0:
- for error in errors:
- if error[1] == 'PRODUCT_AVAILABILITY':
- ids_permutation = DataStore_Store_Base.get_ids_permutation_from_error_availability(error[2])
- for id_permutation in ids_permutation:
- for item in self.basket.items:
- permutation = item.product.get_permutation_selected()
- if id_permutation == permutation.id_permutation:
- item.is_available = False
- if 'region' in error[2] or 'currency' in error[2]:
- item.is_unavailable_in_currency_or_region = True
- # ids_permutation_unavailable_region_or_currency.append(id_permutation)
- # else:
- # for id_permutation in ids_permutation:
- # id_permutation_unavailable_otherwise.append(id_permutation)
- """
- ids_permutation_unavailable = self.basket.get_ids_permutation_unavailable()
- if len(ids_permutation_unavailable) > 0:
- category_list_unavailable, errors_unavailable = DataStore_Store().get_many_product(Parameters_Product(
- self.id_user, # :a_id_user
- True, '', False, # :a_get_all_category, :a_ids_category, :a_get_inactive_category
- False, '', False, False, # :a_get_all_product, :a_ids_product, :a_get_inactive_product, :a_get_first_product_only
- False, ','.join(ids_permutation_unavailable), False, # :a_get_all_permutation, :a_ids_permutation, :a_get_inactive_permutation
- False, '', False, True, # :a_get_all_image, :a_ids_image, :a_get_inactive_image, :a_get_first_image_only
- True, '', False, # :a_get_all_delivery_region, :a_ids_delivery_region, :a_get_inactive_delivery_region
- True, '', False, # :a_get_all_currency, :a_ids_currency, :a_get_inactive_currency
- True, '', False # :a_get_all_discount, :a_ids_discount, :a_get_inactive_discount
- )) # product_ids=product_ids, get_all_category=False, get_all_product=False)
- else:
- category_list_unavailable = None
- errors_unavailable = []
- """
-
-
- def import_JSON_basket_item(self, json_data, form_basket = None):
- _m = 'Model_View_Store.import_JSON_basket_item'
- Helper_App.console_log(f'starting {_m}')
- # Helper_App.console_log('getting product id')
- # product_id = av.input_int(json_data[self.key_id_product], self.key_id_product, _m)
-
- # Helper_App.console_log(f'product id: {product_id}, type: {str(type(product_id))}')
- try:
- permutation_id = json_data[self.KEY_ID_PERMUTATION]
- av.full_val_int(permutation_id, self.KEY_ID_PERMUTATION, _m)
- permutation_id = int(permutation_id)
- except:
- permutation_id = None
- if not permutation_id == 'None':
- Helper_App.console_log(f'permutation_id invalid: {permutation_id}')
- raise ValueError("Invalid permutation id")
- Helper_App.console_log(f'permutation_id: {permutation_id}')
-
- try:
- Helper_App.console_log(f'form_basket: {form_basket}')
- Helper_App.console_log('getting quantity')
- Helper_App.console_log(f'form_basket.quantity: {form_basket.quantity}')
- Helper_App.console_log(f'form_basket.quantity.data: {form_basket.quantity.data}')
- quantity = int(form_basket.quantity.data)
- except:
- quantity = 0
- Helper_App.console_log(f'quantity: {quantity}')
-
- Helper_App.console_log(f'permutation_id: {permutation_id}\nquantity: {quantity}')
-
- return permutation_id, quantity
-
- def output_basket_total(self):
- return self.basket.output_total()
-
-
- def init_forms_basket_add(self):
- for cat in self.categories:
- c = self.category_index
-
- def get_many_user_order(self, ids_order, n_order_max, id_checkout_session):
- # _m = 'Model_View_Store.get_many_user_order'
- # av.val_str(id_user)
- # validation conducted by server
- return DataStore_User().get_many_user_order(self.info_user['sub'], ids_order, n_order_max, id_checkout_session)
-
- def get_many_plant(self, get_inactive = False):
- plants = DataStore_Store_Base().get_many_plant(get_inactive)
- return plants
- def get_many_storage_location(self, get_inactive = False):
- storage_locations = DataStore_Store_Base().get_many_storage_location(get_inactive)
- return storage_locations
- def get_many_currency(self):
- currencies = DataStore_Store_Base().get_many_currency()
- return currencies
- def get_many_region(self):
- regions = DataStore_Store_Base().get_many_region()
- return regions
- def get_many_region_and_currency(self):
- regions, currencies = DataStore_Store_Base().get_many_region_and_currency()
- return regions, currencies
-
- def get_many_product_variation(self, variation_filters = None):
- if variation_filters is None:
- variation_filters = Parameters_Product_Variation.get_default()
- variation_types, variations, errors = DataStore_Store_Base().get_many_product_variation(variation_filters)
- return variation_types, variations, errors
\ No newline at end of file
diff --git a/models/model_view_store_basket.py b/models/model_view_store_basket.py
deleted file mode 100644
index a8e965c7..00000000
--- a/models/model_view_store_basket.py
+++ /dev/null
@@ -1,89 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Store Basket View Model
-
-Description:
-Data model for store basket view
-"""
-
-# IMPORTS
-# VARIABLE INSTANTIATION
-# METHODS
-
-# IMPORTS
-# internal
-from models.model_view_store import Model_View_Store
-# from routes import bp_home
-from business_objects.store.product import Product
-from forms.forms import Form_Billing # Form_Product
-# external
-
-
-# VARIABLE INSTANTIATION
-
-
-# CLASSES
-class Model_View_Store_Basket(Model_View_Store):
- # Attributes
- # product_categories: list # (str)
- form_delivery: Form_Billing
- form_billing: Form_Billing
- forms_delivery_method: list # []
- is_collapsed_info_billing: bool
- is_collapsed_info_delivery: bool
- # Global constants
- # category_products: dict { category_enum_id: List[Product] }
- hash_page_store_checkout = '/store/checkout'
- hash_page_store_checkout_session = '/store/checkout_session'
- hash_store_basket_info = '/store/basket_info'
- id_container_info_billing = 'containerInfoBilling'
- id_container_info_delivery = 'containerInfoDelivery'
- id_overlay_info_delivery = 'overlayInfoDelivery'
- id_overlay_info_billing = 'overlayInfoBilling'
- key_address1 = 'address_1'
- key_address2 = 'address_2'
- key_city = 'city'
- key_county = 'county'
- key_id_checkout = 'checkout-session-id'
- key_info_billing = 'billing-info'
- key_info_delivery = 'delivery-info'
- key_info_identical = 'identical'
- key_info_type = 'type-info'
- key_is_subscription = 'is-subscription'
- key_name_full = 'name_full'
- key_phone_number = 'phone_number'
- key_postcode = 'postcode'
- key_region = 'region'
- key_url_checkout = 'checkout-url'
-
- # Attributes
- @property
- def title(self):
- return 'Store Basket'
-
- def __init__(self, id_currency, id_region_delivery, is_included_VAT, hash_page_current=Model_View_Store.HASH_PAGE_STORE_BASKET):
- # Constructor
- super().__init__(hash_page_current=hash_page_current, id_currency=id_currency, id_region_delivery=id_region_delivery, is_included_VAT=is_included_VAT)
- # self.product_categories = Model_View_Store_Basket.get_many_product(get_all_category = True, get_all_product = True)
- self.form_billing = Form_Billing()
- self.form_billing.form_type_billing_not_delivery = True
- self.form_delivery = Form_Billing()
- # if logged in:
- # else:
- self.is_collapsed_info_billing = False
- self.is_collapsed_info_delivery = False
- """
- self.forms_product = {}
- for cat in self.product_categories:
- for product in cat:
- if len(list(product.variations.keys())) == 0:
- new_form = Form_Product()
- if new_form.validate_on_submit():
- # Handle form submission
- self.add_2_basket(product.id, )
- self.forms[str(product.id)] = new_form
- """
\ No newline at end of file
diff --git a/models/model_view_store_checkout.py b/models/model_view_store_checkout.py
deleted file mode 100644
index e93c49f5..00000000
--- a/models/model_view_store_checkout.py
+++ /dev/null
@@ -1,71 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Store Checkout View Model
-
-Description:
-Data model for store checkout view
-"""
-
-# IMPORTS
-# VARIABLE INSTANTIATION
-# METHODS
-
-# IMPORTS
-# internal
-from models.model_view_store import Model_View_Store
-from models.model_view_store_basket import Model_View_Store_Basket
-# from routes import bp_home
-from business_objects.store.product import Product
-from forms.forms import Form_Billing # Form_Product
-import lib.argument_validation as av
-# from datastores.datastore_store_base import DataStore_Store
-# external
-import os
-import stripe
-
-# VARIABLE INSTANTIATION
-
-
-# CLASSES
-class Model_View_Store_Checkout(Model_View_Store_Basket):
- # Attributes
- key_secret_stripe: str
- key_public_stripe: str
- # Global constants
- key_id_price = 'price_id'
- @property
- def title(self):
- return 'Store Checkout'
-
- def __init__(self, id_currency, id_region_delivery, is_included_VAT, hash_page_current=Model_View_Store.HASH_PAGE_STORE_CHECKOUT):
- # Constructor
- super().__init__(hash_page_current=hash_page_current, id_currency=id_currency, id_region_delivery=id_region_delivery, is_included_VAT=is_included_VAT)
- self.key_secret_stripe = os.environ.get("KEY_SECRET_STRIPE")
- self.key_public_stripe = os.environ.get("KEY_PUBLIC_STRIPE")
-
- # For sample support and debugging, not required for production:
- stripe.set_app_info(
- 'stripe-samples/checkout-one-time-payments',
- version='0.0.1',
- url='https://github.com/stripe-samples/checkout-one-time-payments')
-
- stripe.api_key = self.key_secret_stripe
-
-
- """
- def create_product(self, product): # _name, product_description):
- return DataStore_Store().create_product(product) # _name, product_description)
-
- def create_price(self, product, currency):
- return DataStore_Store().create_price(product, currency)
-
- def get_many_product_new(self):
- return DataStore_Store().get_many_product_new()
-
- def get_price_id(product_ids):
- return DataStore_Store().get_many_id_price(product_ids)
- """
diff --git a/models/model_view_store_checkout_success.py b/models/model_view_store_checkout_success.py
deleted file mode 100644
index 9edb0d0d..00000000
--- a/models/model_view_store_checkout_success.py
+++ /dev/null
@@ -1,49 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Store Checkout Success View Model
-
-Description:
-Data model for store checkout success view
-"""
-
-# IMPORTS
-# VARIABLE INSTANTIATION
-# METHODS
-
-# IMPORTS
-# internal
-from models.model_view_store import Model_View_Store
-from models.model_view_store_checkout import Model_View_Store_Checkout
-# from routes import bp_home
-from business_objects.store.product import Product
-from forms.forms import Form_Billing # Form_Product
-import lib.argument_validation as av
-# from datastores.datastore_store_base import DataStore_Store
-# external
-import os
-
-# VARIABLE INSTANTIATION
-
-
-# CLASSES
-class Model_View_Store_Checkout_Success(Model_View_Store_Checkout):
- # Attributes
- key_secret_stripe: str
- key_public_stripe: str
- # Global constants
- key_id_price = 'price_id'
-
- @property
- def title(self):
- return 'Store Checkout Success'
-
- def __init__(self, id_checkout_session, checkout_items, id_currency, id_region_delivery, is_included_VAT, hash_page_current=Model_View_Store.HASH_PAGE_STORE_CHECKOUT_SUCCESS):
- # Constructor
- super().__init__(hash_page_current=hash_page_current, id_currency=id_currency, id_region_delivery=id_region_delivery, is_included_VAT=is_included_VAT)
- self.checkout_items = checkout_items
- self.id_checkout_session = id_checkout_session
- self.order = self.get_many_user_order('', 1, id_checkout_session)
\ No newline at end of file
diff --git a/models/model_view_store_home.py b/models/model_view_store_home.py
deleted file mode 100644
index a5bb1b7a..00000000
--- a/models/model_view_store_home.py
+++ /dev/null
@@ -1,59 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Store Home View Model
-
-Description:
-Data model for store home view
-"""
-
-# IMPORTS
-# VARIABLE INSTANTIATION
-# METHODS
-
-# IMPORTS
-# internal
-from models.model_view_store import Model_View_Store
-# from routes import bp_home
-from business_objects.store.product import Product
-from forms.forms import Form_Basket_Add, Form_Basket_Edit # Form_Product
-# external
-from typing import ClassVar
-
-# VARIABLE INSTANTIATION
-
-
-# CLASSES
-class Model_View_Store_Home(Model_View_Store):
- # Global constants
- MAX_PRODUCTS_PER_CATEGORY: ClassVar[int] = -1
- # Attributes
- product_categories: list # (str)
- forms_product: dict
- forms_basket: dict
- # category_products: dict { category_enum_id: List[Product] }
- # Attributes
- @property
- def title(self):
- return 'Store Home'
-
- def __init__(self, id_currency, id_region_delivery, is_included_VAT, hash_page_current=Model_View_Store.HASH_PAGE_STORE_HOME):
- # Constructor
- super().__init__(id_currency, id_region_delivery, is_included_VAT)
- # self.categories = Model_View_Store_Home.get_many_product(self.db, get_all_category = True, get_all_product = True)
- # self.get_many_product(get_all_category = True, get_all_product = True)
- """
- self.forms_product = {}
- for cat in self.product_categories:
- for product in cat:
- if len(list(product.variations.keys())) == 0:
- new_form = Form_Product()
- if new_form.validate_on_submit():
- # Handle form submission
- self.add_2_basket(product.id, )
- self.forms[str(product.id)] = new_form
- """
-
diff --git a/models/model_view_store_manufacturing_purchase_order.py b/models/model_view_store_manufacturing_purchase_order.py
deleted file mode 100644
index 0c5693a1..00000000
--- a/models/model_view_store_manufacturing_purchase_order.py
+++ /dev/null
@@ -1,61 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Manufacturing Purchase Order View Model
-
-Description:
-Data model for manufacturing purchase order view page
-"""
-
-# internal
-from models.model_view_store import Model_View_Store
-from datastores.datastore_store_manufacturing_purchase_order import DataStore_Store_Manufacturing_Purchase_Order
-from business_objects.store.product import Product, Parameters_Product
-from business_objects.store.product_category import Product_Category_Container
-from business_objects.store.manufacturing_purchase_order import Manufacturing_Purchase_Order, Parameters_Manufacturing_Purchase_Order, Manufacturing_Purchase_Order_Product_Link
-from forms.store.manufacturing_purchase_order import Filters_Manufacturing_Purchase_Order
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-# external
-from typing import ClassVar
-
-class Model_View_Store_Manufacturing_Purchase_Order(Model_View_Store):
- FLAG_QUANTITY_PRODUCED: ClassVar[str] = Manufacturing_Purchase_Order_Product_Link.FLAG_QUANTITY_PRODUCED
- FLAG_QUANTITY_USED: ClassVar[str] = Manufacturing_Purchase_Order_Product_Link.FLAG_QUANTITY_USED
- category_list_filters: Product_Category_Container = None
- currencies: list = None
- currency_options: list = None
- form_filters: Filters_Manufacturing_Purchase_Order = None
- form_filters_old: Filters_Manufacturing_Purchase_Order
- manufacturing_purchase_orders: list = None
- units_measurement: list = None
- units_measurement_time: list = None
- variation_types: list = None
- variations: list = None
-
- @property
- def title(self):
- return 'Store Manufacturing Purchase Order'
-
- def __init__(self, form_filters_old, hash_page_current=Model_View_Store.HASH_PAGE_STORE_MANUFACTURING_PURCHASE_ORDERS):
- _m = 'Model_View_Store_Manufacturing.__init__'
- Helper_App.console_log(f'{_m}\nstarting...')
- super().__init__(hash_page_current = hash_page_current, form_filters_old = form_filters_old)
- self.form_filters = form_filters_old # Filters_Manufacturing_Purchase_Order.from_json(form_filters_old.to_json())
- parameters_manufacturing_purchase_order = Parameters_Manufacturing_Purchase_Order.from_filters_manufacturing_purchase_order(form_filters_old)
- datastore_manufacturing_purchase_order = DataStore_Store_Manufacturing_Purchase_Order()
- self.manufacturing_purchase_orders, errors = datastore_manufacturing_purchase_order.get_many_manufacturing_purchase_order(parameters_manufacturing_purchase_order)
- self.category_list_filters, errors = DataStore_Store_Manufacturing_Purchase_Order.get_many_product(Parameters_Product.get_default())
- self.variation_types, self.variations, errors = self.get_many_product_variation()
- self.units_measurement = self.get_many_unit_measurement()
- self.units_measurement_time = [unit_measurement for unit_measurement in self.units_measurement if unit_measurement.is_unit_of_time]
- self.currencies = self.get_many_currency()
- self.currency_options = [currency.to_json_option() for currency in self.currencies]
-
- @classmethod
- def save_manufacturing_purchase_orders(cls, comment, list_orders):
- _m = f'{cls.__name__}.save_manufacturing_purchase_orders'
- return DataStore_Store_Manufacturing_Purchase_Order().save_manufacturing_purchase_orders(comment, list_orders)
\ No newline at end of file
diff --git a/models/model_view_store_product.py b/models/model_view_store_product.py
deleted file mode 100644
index 948b254f..00000000
--- a/models/model_view_store_product.py
+++ /dev/null
@@ -1,88 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Store Product View Model
-
-Description:
-Data model for store product view
-"""
-
-# internal
-from business_objects.store.product import Product, Parameters_Product
-from business_objects.store.product_category import Product_Category_Container
-from datastores.datastore_store_product import DataStore_Store_Product
-from forms.access_level import Filters_Access_Level
-from forms.store.product import Filters_Product
-from helpers.helper_app import Helper_App
-from models.model_view_store import Model_View_Store
-# from routes import bp_home
-import lib.argument_validation as av
-# external
-from typing import ClassVar
-
-class Model_View_Store_Product(Model_View_Store):
- access_levels: list = None
- category_list: Product_Category_Container = None
- category_list_filters: Product_Category_Container = None
- currencies: list = None
- currency_options: list = None
- form_filters: Filters_Product = None
- form_filters_old: Filters_Product
- list_options_product: list = None
- # product_blank: Product = None
- units_measurement: list = None
- units_measurement_time: list = None
- variations: list = None
- variation_types: list = None
-
- @property
- def title(self):
- return 'Products'
-
- def __init__(self, form_filters_old, hash_page_current=Model_View_Store.HASH_PAGE_STORE_PRODUCTS):
- _m = 'Model_View_Store_Product.__init__'
- Helper_App.console_log(f'{_m}\nstarting...')
- super().__init__(hash_page_current=hash_page_current, form_filters_old=form_filters_old)
- self.form_filters = form_filters_old
- self.access_levels = self.get_many_access_level(Filters_Access_Level())
- parameters_product = Parameters_Product.from_form_filters_product(self.form_filters)
- datastore_store = DataStore_Store_Product()
- self.category_list, errors = datastore_store.get_many_product(parameters_product)
- countProducts = 0
- for category in self.category_list.categories:
- countProducts += len(category.products)
- Helper_App.console_log(f'category count: {len(self.category_list.categories)}\nproduct count: {countProducts}')
- self.category_list_filters, errors_filters = datastore_store.get_many_product(
- Parameters_Product(
- get_all_product_category = True,
- get_inactive_product_category = False,
- ids_product_category = '',
- get_all_product = True,
- get_inactive_product = False,
- ids_product = '',
- get_all_permutation = True,
- get_inactive_permutation = False,
- ids_permutation = '',
- get_all_image = False,
- get_inactive_image = False,
- ids_image = '',
- get_products_quantity_stock_below_min = parameters_product.get_products_quantity_stock_below_min
- )
- )
- Helper_App.console_log(f'category filters: {self.category_list_filters.categories}')
- self.form_filters.id_category.choices += [(str(category.id_category), category.name) for category in self.category_list_filters.categories]
- Helper_App.console_log(f'category options: {self.form_filters.id_category.choices}')
- self.variation_types, self.variations, errors = self.get_many_product_variation()
- self.units_measurement = self.get_many_unit_measurement()
- self.units_measurement_time = [unit_measurement for unit_measurement in self.units_measurement if unit_measurement.is_unit_of_time]
- self.currencies = self.get_many_currency()
- self.currency_options = [currency.to_json_option() for currency in self.currencies]
-
- Helper_App.console_log(f'category count: {len(self.category_list.categories)}\nproduct count: {countProducts}')
- @staticmethod
- def save_products(comment, list_products):
- _m = 'Model_View_Store_Product.save_products'
- return DataStore_Store_Product.save_products(comment, list_products)
\ No newline at end of file
diff --git a/models/model_view_store_product_category.py b/models/model_view_store_product_category.py
deleted file mode 100644
index 2ef26582..00000000
--- a/models/model_view_store_product_category.py
+++ /dev/null
@@ -1,58 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Store Permutations View Model
-
-Description:
-Data model for store permutations view
-"""
-
-# internal
-from models.model_view_store import Model_View_Store
-# from datastores.datastore_store_base import DataStore_Store_Base
-from datastores.datastore_store_product_category import DataStore_Store_Product_Category
-from business_objects.store.product import Parameters_Product
-from business_objects.store.product_category import Product_Category_Container # , Filters_Product_Category
-from forms.access_level import Filters_Access_Level
-# from forms.store.product_permutation import Filters_Product_Permutation
-from forms.store.product_category import Filters_Product_Category
-# from routes import bp_home
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-
-# external
-from pydantic import BaseModel
-from typing import ClassVar
-
-class Model_View_Store_Product_Category(Model_View_Store):
- # KEY_CATEGORIES: ClassVar[str] = 'categories'
-
- access_levels: list = None
- category_list: Product_Category_Container = None # (str)
- # filters_category: Filters_Product_Category
- form_filters: Filters_Product_Category = None
- form_filters_old: Filters_Product_Category
-
- @property
- def title(self):
- return 'Product Category'
-
- def __init__(self, form_filters_old, hash_page_current=Model_View_Store.HASH_PAGE_STORE_PRODUCT_CATEGORIES):
- _m = 'Model_View_Store_Product_Category.__init__'
- Helper_App.console_log(f'{_m}\nstarting...')
- super().__init__(hash_page_current=hash_page_current, form_filters_old=form_filters_old) # filters_category=filters_category)
- self.form_filters = form_filters_old
- # BaseModel.__init__(self, app=app, filters_product=filters_product, **kwargs)
- self.access_levels = self.get_many_access_level(Filters_Access_Level())
- datastore_store = DataStore_Store_Product_Category()
- # self.form_filters = Filters_Product_Category.from_filters(filters_category)
- filters_product = Parameters_Product.from_filters_product_category(self.form_filters)
- self.category_list, errors = datastore_store.get_many_product(filters_product)
-
- @classmethod
- def save_categories(cls, comment, list_categories):
- _m = f'{cls.__name__}.save_categories'
- return DataStore_Store_Product_Category().save_categories(comment, list_categories)
\ No newline at end of file
diff --git a/models/model_view_store_product_permutation.py b/models/model_view_store_product_permutation.py
deleted file mode 100644
index 24e5fe2e..00000000
--- a/models/model_view_store_product_permutation.py
+++ /dev/null
@@ -1,86 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Store Permutations View Model
-
-Description:
-Data model for store permutations view
-"""
-
-# internal
-from models.model_view_store import Model_View_Store
-from datastores.datastore_store_product_permutation import DataStore_Store_Product_Permutation
-from business_objects.store.product_category import Product_Category_Container
-from forms.store.product_permutation import Filters_Product_Permutation
-# from routes import bp_home
-from business_objects.store.product import Product, Parameters_Product, Product_Permutation
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-
-# external
-from pydantic import BaseModel
-from typing import ClassVar
-
-class Model_View_Store_Product_Permutation(Model_View_Store):
- category_list: Product_Category_Container = None
- category_list_filters: Product_Category_Container = None
- currencies: list = None
- currency_options: list = None
- # filters_product: Parameters_Product = None
- form_filters: Filters_Product_Permutation = None
- form_filters_old: Filters_Product_Permutation
- list_options_product: list = None
- units_measurement: list = None
- units_measurement_time: list = None
- variations: list = None
- variation_types: list = None
-
- @property
- def title(self):
- return 'Product Permutations'
-
- def __init__(self, form_filters_old, hash_page_current=Model_View_Store.HASH_PAGE_STORE_PRODUCT_PERMUTATIONS):
- _m = 'Model_View_Store_Permutation.__init__'
- Helper_App.console_log(f'{_m}\nstarting...')
- super().__init__(hash_page_current=hash_page_current, form_filters_old=form_filters_old)
- self.form_filters = form_filters_old
- # self.form_filters = Filters_Product_Permutation()
- filters_product = Parameters_Product.from_form_filters_product_permutation(self.form_filters)
- datastore_store = DataStore_Store_Product_Permutation()
- self.category_list, errors = datastore_store.get_many_product(filters_product)
- self.category_list_filters, errors_filters = datastore_store.get_many_product(
- Parameters_Product(
- get_all_product_category = True,
- get_inactive_product_category = False,
- ids_product_category = '',
- get_all_product = True,
- get_inactive_product = False,
- ids_product = '',
- get_all_permutation = True,
- get_inactive_permutation = False,
- ids_permutation = '',
- get_all_image = False,
- get_inactive_image = False,
- ids_image = '',
- get_products_quantity_stock_below_min = filters_product.get_products_quantity_stock_below_min
- )
- )
- Helper_App.console_log(f'category filters: {self.category_list_filters.categories}')
- self.form_filters.id_category.choices += [(str(category.id_category), category.name) for category in self.category_list_filters.categories]
- Helper_App.console_log(f'category options: {self.form_filters.id_category.choices}')
- self.list_options_product = self.category_list_filters.to_product_option_list()
- Helper_App.console_log(f'product options: {self.list_options_product}')
- self.form_filters.id_product.choices += [(str(product['value']), product['text']) for product in self.list_options_product]
- self.variation_types, self.variations, errors = self.get_many_product_variation()
- self.units_measurement = self.get_many_unit_measurement()
- self.units_measurement_time = [unit_measurement for unit_measurement in self.units_measurement if unit_measurement.is_unit_of_time]
- self.currencies = self.get_many_currency()
- self.currency_options = [currency.to_json_option() for currency in self.currencies]
-
- @staticmethod
- def save_permutations(comment, list_permutations):
- _m = 'Model_View_Store_Permutation.save_permutations'
- DataStore_Store_Product_Permutation.save_permutations(comment, list_permutations)
\ No newline at end of file
diff --git a/models/model_view_store_product_variation.py b/models/model_view_store_product_variation.py
deleted file mode 100644
index cf4de7f0..00000000
--- a/models/model_view_store_product_variation.py
+++ /dev/null
@@ -1,54 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Store Product View Model
-
-Description:
-Data model for store product view
-"""
-
-# IMPORTS
-# VARIABLE INSTANTIATION
-# METHODS
-
-# IMPORTS
-# internal
-from business_objects.store.product_variation import Product_Variation, Parameters_Product_Variation
-from business_objects.store.product_category import Product_Category_Container
-from datastores.datastore_store_product_variation import DataStore_Store_Product_Variation
-from forms.access_level import Filters_Access_Level
-from forms.store.product_variation import Filters_Product_Variation
-from helpers.helper_app import Helper_App
-from models.model_view_store import Model_View_Store
-# from routes import bp_home
-import lib.argument_validation as av
-# external
-from typing import ClassVar
-
-
-class Model_View_Store_Product_Variation(Model_View_Store):
- form_filters: Filters_Product_Variation = None
- form_filters_old: Filters_Product_Variation
- variation_types: list = None
- variations: list = None
-
- @property
- def title(self):
- return 'Store Product Variation'
-
- def __init__(self, form_filters_old, hash_page_current=Model_View_Store.HASH_PAGE_STORE_PRODUCT_VARIATIONS):
- _m = 'Model_View_Store_Product_Variation.__init__'
- Helper_App.console_log(f'{_m}\nstarting...')
- super().__init__(hash_page_current = hash_page_current, form_filters_old = form_filters_old)
- self.form_filters = form_filters_old
- parameters_variation = Parameters_Product_Variation.from_filters_product_variation(self.form_filters)
- datastore_variation = DataStore_Store_Product_Variation()
- self.variation_types, self.variations, errors = datastore_variation.get_many_product_variation(parameters_variation)
-
- @classmethod
- def save_product_variations(cls, comment, list_orders):
- _m = f'{cls.__name__}.save_product_variations'
- return DataStore_Store_Product_Variation().save_product_variations(comment, list_orders)
\ No newline at end of file
diff --git a/models/model_view_store_stock_item.py b/models/model_view_store_stock_item.py
deleted file mode 100644
index 0976295b..00000000
--- a/models/model_view_store_stock_item.py
+++ /dev/null
@@ -1,98 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Store Stock Items View Model
-
-Description:
-Data model for store stock items view
-"""
-
-# internal
-from models.model_view_store import Model_View_Store
-from datastores.datastore_store_stock_item import DataStore_Store_Stock_Item
-from business_objects.store.product_category import Product_Category_Container
-# from routes import bp_home
-from business_objects.store.product import Product, Parameters_Product, Product_Permutation
-from business_objects.store.stock_item import Stock_Item, Parameters_Stock_Item
-from forms.store.stock_item import Filters_Stock_Item
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-
-# external
-from pydantic import BaseModel
-from typing import ClassVar
-
-class Model_View_Store_Stock_Item(Model_View_Store):
- category_list: Product_Category_Container = None
- category_list_filters: Product_Category_Container = None
- currencies: list = None
- currency_options: list = None
- form_filters: Filters_Stock_Item = None
- form_filters_old: Filters_Stock_Item
- list_options_product: list = None
- plants: list = None
- storage_locations: list = None
- units_measurement: list = None
- units_measurement_time: list = None
- variations: list = None
- variation_types: list = None
-
- @property
- def title(self):
- return 'Store Stock Items'
-
- def __init__(self, form_filters_old, hash_page_current=Model_View_Store.HASH_PAGE_STORE_STOCK_ITEMS):
- _m = 'Model_View_Store_Stock_Item.__init__'
- Helper_App.console_log(f'{_m}\nstarting...')
- super().__init__(hash_page_current=hash_page_current, form_filters_old=form_filters_old)
- # BaseModel.__init__(self, app=app, form_filters_old=form_filters_old, **kwargs)
- self.form_filters = form_filters_old # Filters_Stock_Item.from_json(form_filters_old.to_json()) # .from_form_stock_item(form_filters_old)
- datastore_store = DataStore_Store_Stock_Item()
- tmp_category_list_stock_item, errors = datastore_store.get_many_product(Parameters_Product.from_filters_stock_item(self.form_filters))
- self.category_list, errors = datastore_store.get_many_stock_item(Parameters_Stock_Item.from_form_stock_item(self.form_filters), tmp_category_list_stock_item)
- self.category_list_filters, errors_filters = datastore_store.get_many_product(Parameters_Product.get_default())
- """
- Parameters_Stock_Item(
- # self.info_user['sub'],
- True, False, False, '', # get_all_category, get_inactive_category, get_first_category_only, ids_category
- True, False, False, '', # get_all_product, get_inactive_product, get_first_product_only, ids_product
- True, False, False, '', # get_all_permutation, get_inactive_permutation, get_first_permutation_only, ids_permutation
- False, False, False, '', # get_all_stock_item, get_inactive_stock_item, get_first_stock_item_only, ids_stock_item
- False, False, False, '', # get_all_region_storage, get_inactive_region_storage, get_first_region_storage_only, ids_region_storage
- False, False, False, '', # get_all_plant_storage, get_inactive_plant_storage, get_first_plant_storage_only, ids_plant_storage
- False, False, False, '', # get_all_location_storage, get_inactive_location_storage, get_first_location_storage_only, ids_location_storage
- None, # date_received_to
- False, False, # get_sealed_stock_item_only, get_unsealed_stock_item_only
- False, False, # get_expired_stock_item_only, get_nonexpired_stock_item_only
- False, False # get_consumed_stock_item_only, get_nonconsumed_stock_item_only
- )
- """
-
- Helper_App.console_log(f'category_list_filters: {self.category_list_filters.categories}')
- self.form_filters.id_category.choices += [(str(category.id_category), category.name) for category in self.category_list_filters.categories] # [Filters_Stock_Item.get_choice_all()] +
- Helper_App.console_log(f'category options: {self.form_filters.id_category.choices}')
- product_list = self.category_list_filters.to_product_option_list()
- filtered_product_list = []
- if product_list is not None:
- for product in product_list:
- # Helper_App.console_log(f'product: {product}\n{product[Stock_Item.ATTR_ID_PRODUCT_CATEGORY]}\n{self.form_filters.id_category.data}\n{str(type(product[Stock_Item.ATTR_ID_PRODUCT_CATEGORY]))}\n{str(type(self.form_filters.id_category.data))}')
- if (self.form_filters.id_category.data == '' or str(product[Stock_Item.ATTR_ID_PRODUCT_CATEGORY]) == self.form_filters.id_category.data):
- filtered_product_list.append(product)
- Helper_App.console_log(f'product_list: {product_list}\nfiltered_product_list: {filtered_product_list}')
- self.form_filters.id_product.choices += [(str(product['value']), product['text']) for product in filtered_product_list] # [Filters_Stock_Item.get_choice_all()] +
- # self.form_filters.import_values(form_filters_old)
- self.variation_types, self.variations, errors = self.get_many_product_variation()
- self.units_measurement = self.get_many_unit_measurement()
- self.units_measurement_time = [unit_measurement for unit_measurement in self.units_measurement if unit_measurement.is_unit_of_time]
- self.currencies = self.get_many_currency()
- self.currency_options = [currency.to_json_option() for currency in self.currencies]
- self.plants = self.get_many_plant(False)
- self.storage_locations = self.get_many_storage_location(False)
-
- @classmethod
- def save_stock_items(cls, comment, list_stock_items):
- _m = f'{cls.__name__}.save_stock_items'
- return DataStore_Store_Stock_Item().save_stock_items(comment, list_stock_items)
\ No newline at end of file
diff --git a/models/model_view_store_supplier.py b/models/model_view_store_supplier.py
deleted file mode 100644
index f44cae90..00000000
--- a/models/model_view_store_supplier.py
+++ /dev/null
@@ -1,63 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Supplier View Model
-
-Description:
-Data model for supplier view page
-"""
-
-# internal
-from models.model_view_store import Model_View_Store
-from datastores.datastore_store_supplier import DataStore_Store_Supplier
-from business_objects.store.supplier import Supplier, Parameters_Supplier
-from forms.store.supplier import Filters_Supplier
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-# external
-from typing import ClassVar
-
-class Model_View_Store_Supplier(Model_View_Store):
- FLAG_DEPARTMENT_CONTACT: ClassVar[str] = Supplier.FLAG_DEPARTMENT_CONTACT
- FLAG_NAME_COMPANY: ClassVar[str] = Supplier.FLAG_NAME_COMPANY
- FLAG_NAME_CONTACT: ClassVar[str] = Supplier.FLAG_NAME_CONTACT
- supplier_addresses: list = None
- currencies: list = None
- currency_options: list = None
- form_filters: Filters_Supplier = None
- form_filters_old: Filters_Supplier
- regions: list = None
- suppliers: list = None
- units_measurement: list = None
- units_measurement_time: list = None
-
- @property
- def title(self):
- return 'Store Supplier'
-
- def __init__(self, form_filters_old, hash_page_current=Model_View_Store.HASH_PAGE_STORE_SUPPLIERS):
- _m = 'Model_View_Store_Supplier.__init__'
- Helper_App.console_log(f'{_m}\nstarting...')
- super().__init__(hash_page_current = hash_page_current, form_filters_old = form_filters_old)
- self.form_filters = form_filters_old # Filters_Supplier.from_json(form_filters_old.to_json())
- parameters_supplier = Parameters_Supplier.from_filters_supplier(self.form_filters)
- datastore_supplier = DataStore_Store_Supplier()
- self.suppliers, errors = datastore_supplier.get_many_supplier(parameters_supplier)
-
- """
- self.units_measurement = self.get_many_unit_measurement()
- self.units_measurement_time = [unit_measurement for unit_measurement in self.units_measurement if unit_measurement.is_unit_of_time]
- """
- self.currencies = self.get_many_currency()
- self.currency_options = [currency.to_json_option() for currency in self.currencies]
- self.supplier_addresses = {}
- for supplier in self.suppliers:
- self.supplier_addresses[supplier.id_supplier] = [address.to_json() for address in supplier.addresses] if supplier.addresses else []
- self.regions = self.get_many_region()
- @classmethod
- def save_suppliers(cls, comment, list_suppliers):
- _m = f'{cls.__name__}.save_suppliers'
- return DataStore_Store_Supplier().save_suppliers(comment, list_suppliers)
\ No newline at end of file
diff --git a/models/model_view_store_supplier_purchase_order.py b/models/model_view_store_supplier_purchase_order.py
deleted file mode 100644
index 86b0e3d1..00000000
--- a/models/model_view_store_supplier_purchase_order.py
+++ /dev/null
@@ -1,62 +0,0 @@
-"""
-Project: PARTS Website
-Author: Edward Middleton-Smith
- Precision And Research Technology Systems Limited
-
-Technology: View Models
-Feature: Supplier Purchase Order View Model
-
-Description:
-Data model for supplier purchase order view page
-"""
-
-# internal
-from models.model_view_store import Model_View_Store
-from datastores.datastore_store_supplier import DataStore_Store_Supplier
-from datastores.datastore_store_supplier_purchase_order import DataStore_Store_Supplier_Purchase_Order
-from business_objects.store.product import Product, Parameters_Product
-from business_objects.store.product_category import Product_Category_Container
-from business_objects.store.supplier import Supplier, Parameters_Supplier
-from business_objects.store.supplier_purchase_order import Supplier_Purchase_Order, Parameters_Supplier_Purchase_Order
-from forms.store.supplier_purchase_order import Filters_Supplier_Purchase_Order
-from helpers.helper_app import Helper_App
-import lib.argument_validation as av
-
-class Model_View_Store_Supplier_Purchase_Order(Model_View_Store):
- category_list_filters: Product_Category_Container = None
- currencies: list = None
- currency_options: list = None
- form_filters: Filters_Supplier_Purchase_Order = None
- form_filters_old: Filters_Supplier_Purchase_Order
- supplier_purchase_orders: list = None
- suppliers: list = None
- units_measurement: list = None
- units_measurement_time: list = None
- variation_types: list = None
- variations: list = None
-
- @property
- def title(self):
- return 'Store Supplier Purchase Order'
-
- def __init__(self, form_filters_old, hash_page_current=Model_View_Store.HASH_PAGE_STORE_SUPPLIER_PURCHASE_ORDERS):
- _m = 'Model_View_Store_Supplier.__init__'
- Helper_App.console_log(f'{_m}\nstarting...')
- super().__init__(hash_page_current = hash_page_current, form_filters_old = form_filters_old)
- self.form_filters = form_filters_old # Filters_Supplier_Purchase_Order.from_json(form_filters_old.to_json())
- parameters_supplier_purchase_order = Parameters_Supplier_Purchase_Order.from_filters_supplier_purchase_order(self.form_filters)
- datastore_supplier_purchase_order = DataStore_Store_Supplier_Purchase_Order()
- self.supplier_purchase_orders, errors = datastore_supplier_purchase_order.get_many_supplier_purchase_order(parameters_supplier_purchase_order)
-
- self.suppliers, errors = DataStore_Store_Supplier.get_many_supplier(Parameters_Supplier.get_default())
- self.category_list_filters, errors = DataStore_Store_Supplier_Purchase_Order.get_many_product(Parameters_Product.get_default())
- self.variation_types, self.variations, errors = self.get_many_product_variation()
- self.units_measurement = self.get_many_unit_measurement()
- self.units_measurement_time = [unit_measurement for unit_measurement in self.units_measurement if unit_measurement.is_unit_of_time]
- self.currencies = self.get_many_currency()
- self.currency_options = [currency.to_json_option() for currency in self.currencies]
-
- @classmethod
- def save_supplier_purchase_orders(cls, comment, list_orders):
- _m = f'{cls.__name__}.save_supplier_purchase_orders'
- return DataStore_Store_Supplier_Purchase_Order().save_supplier_purchase_orders(comment, list_orders)
\ No newline at end of file
diff --git a/models/model_view_user.py b/models/model_view_user.py
index eb851254..b5a9e446 100644
--- a/models/model_view_user.py
+++ b/models/model_view_user.py
@@ -12,13 +12,12 @@ Data model for user view
# internal
from datastores.datastore_user import DataStore_User
-# from models.model_view_base import Model_View_Base
-from models.model_view_store import Model_View_Store
+from models.model_view_base import Model_View_Base
# from routes import bp_home
# external
from typing import ClassVar
-class Model_View_User(Model_View_Store):
+class Model_View_User(Model_View_Base):
FLAG_ERROR_OAUTH: ClassVar[str] = 'error'
FLAG_ERROR_DESCRIPTION_OAUTH: ClassVar[str] = 'error_description'
FLAG_FIRSTNAME: ClassVar[str] = 'firstname'
@@ -32,7 +31,7 @@ class Model_View_User(Model_View_Store):
def title(self):
return 'User'
- def __init__(self, hash_page_current=Model_View_Store.HASH_PAGE_USER_ACCOUNT):
+ def __init__(self, hash_page_current=Model_View_Base.HASH_PAGE_USER_ACCOUNT):
# Constructor
super().__init__(hash_page_current=hash_page_current, form_filters_old = None)
datastore_user = DataStore_User()
diff --git a/package-lock.json b/package-lock.json
index 02310043..8b32eaea 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,6 +8,9 @@
"name": "app",
"version": "1.0.0",
"license": "ISC",
+ "dependencies": {
+ "aos": "^2.3.4"
+ },
"devDependencies": {
"@babel/core": "^7.25.2",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
@@ -26,6 +29,7 @@
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
@@ -35,12 +39,14 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
- "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+ "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/highlight": "^7.24.7",
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "js-tokens": "^4.0.0",
"picocolors": "^1.0.0"
},
"engines": {
@@ -48,30 +54,32 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
- "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz",
+ "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.25.2",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
- "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
+ "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.25.0",
- "@babel/helper-compilation-targets": "^7.25.2",
- "@babel/helper-module-transforms": "^7.25.2",
- "@babel/helpers": "^7.25.0",
- "@babel/parser": "^7.25.0",
- "@babel/template": "^7.25.0",
- "@babel/traverse": "^7.25.2",
- "@babel/types": "^7.25.2",
+ "@babel/code-frame": "^7.26.0",
+ "@babel/generator": "^7.26.0",
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-module-transforms": "^7.26.0",
+ "@babel/helpers": "^7.26.0",
+ "@babel/parser": "^7.26.0",
+ "@babel/template": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.26.0",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -86,64 +94,46 @@
"url": "https://opencollective.com/babel"
}
},
- "node_modules/@babel/core/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/@babel/generator": {
- "version": "7.25.6",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
- "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz",
+ "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.25.6",
+ "@babel/parser": "^7.26.5",
+ "@babel/types": "^7.26.5",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
- "jsesc": "^2.5.1"
+ "jsesc": "^3.0.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
- "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
+ "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
- "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
- "dev": true,
- "dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.25.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
- "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
+ "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.25.2",
- "@babel/helper-validator-option": "^7.24.8",
- "browserslist": "^4.23.1",
+ "@babel/compat-data": "^7.26.5",
+ "@babel/helper-validator-option": "^7.25.9",
+ "browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
@@ -151,27 +141,19 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
- "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz",
+ "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "@babel/helper-member-expression-to-functions": "^7.24.8",
- "@babel/helper-optimise-call-expression": "^7.24.7",
- "@babel/helper-replace-supers": "^7.25.0",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
- "@babel/traverse": "^7.25.4",
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-member-expression-to-functions": "^7.25.9",
+ "@babel/helper-optimise-call-expression": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
"semver": "^6.3.1"
},
"engines": {
@@ -181,23 +163,15 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.25.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz",
- "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==",
+ "version": "7.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz",
+ "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "regexpu-core": "^5.3.1",
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "regexpu-core": "^6.2.0",
"semver": "^6.3.1"
},
"engines": {
@@ -207,20 +181,12 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
- "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz",
+ "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-compilation-targets": "^7.22.6",
"@babel/helper-plugin-utils": "^7.22.5",
@@ -233,41 +199,43 @@
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz",
- "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz",
+ "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.24.8",
- "@babel/types": "^7.24.8"
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
- "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
+ "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.25.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
- "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
+ "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.24.7",
- "@babel/helper-simple-access": "^7.24.7",
- "@babel/helper-validator-identifier": "^7.24.7",
- "@babel/traverse": "^7.25.2"
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -277,35 +245,38 @@
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
- "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz",
+ "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.24.7"
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
- "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
+ "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz",
- "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz",
+ "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "@babel/helper-wrap-function": "^7.25.0",
- "@babel/traverse": "^7.25.0"
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-wrap-function": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -315,14 +286,15 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz",
- "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz",
+ "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.24.8",
- "@babel/helper-optimise-call-expression": "^7.24.7",
- "@babel/traverse": "^7.25.0"
+ "@babel/helper-member-expression-to-functions": "^7.25.9",
+ "@babel/helper-optimise-call-expression": "^7.25.9",
+ "@babel/traverse": "^7.26.5"
},
"engines": {
"node": ">=6.9.0"
@@ -331,108 +303,87 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-simple-access": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
- "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
- "dev": true,
- "dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
- "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz",
+ "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.24.7",
- "@babel/types": "^7.24.7"
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
- "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
- "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
- "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
+ "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz",
- "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz",
+ "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/template": "^7.25.0",
- "@babel/traverse": "^7.25.0",
- "@babel/types": "^7.25.0"
+ "@babel/template": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.25.6",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
- "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
+ "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/template": "^7.25.0",
- "@babel/types": "^7.25.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
- "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.24.7",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.0.0"
+ "@babel/template": "^7.25.9",
+ "@babel/types": "^7.26.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.25.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
- "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz",
+ "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.25.6"
+ "@babel/types": "^7.26.5"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -442,13 +393,14 @@
}
},
"node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
- "version": "7.25.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
- "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz",
+ "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.8",
- "@babel/traverse": "^7.25.3"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -458,12 +410,13 @@
}
},
"node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz",
- "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz",
+ "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.8"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -473,12 +426,13 @@
}
},
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz",
- "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz",
+ "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.8"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -488,14 +442,15 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
- "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz",
+ "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
- "@babel/plugin-transform-optional-chaining": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
+ "@babel/plugin-transform-optional-chaining": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -505,13 +460,14 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz",
- "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz",
+ "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.8",
- "@babel/traverse": "^7.25.0"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -525,45 +481,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
"integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
"dev": true,
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-static-block": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
- "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
},
@@ -576,6 +494,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
"integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -583,25 +502,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-export-namespace-from": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
- "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.3"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
"node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.25.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz",
- "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz",
+ "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.8"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -611,138 +519,13 @@
}
},
"node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.25.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz",
- "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz",
+ "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.8"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-private-property-in-object": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
- "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -756,6 +539,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
"integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
@@ -768,12 +552,13 @@
}
},
"node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
- "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz",
+ "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -783,15 +568,15 @@
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz",
- "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz",
+ "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.8",
- "@babel/helper-remap-async-to-generator": "^7.25.0",
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/traverse": "^7.25.4"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-remap-async-to-generator": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -801,14 +586,15 @@
}
},
"node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
- "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz",
+ "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-remap-async-to-generator": "^7.24.7"
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-remap-async-to-generator": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -818,12 +604,13 @@
}
},
"node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
- "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz",
+ "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.26.5"
},
"engines": {
"node": ">=6.9.0"
@@ -833,12 +620,13 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz",
- "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz",
+ "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.8"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -848,13 +636,14 @@
}
},
"node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
- "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz",
+ "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.25.4",
- "@babel/helper-plugin-utils": "^7.24.8"
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -864,14 +653,14 @@
}
},
"node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
- "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz",
+ "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -881,16 +670,17 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
- "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz",
+ "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "@babel/helper-compilation-targets": "^7.25.2",
- "@babel/helper-plugin-utils": "^7.24.8",
- "@babel/helper-replace-supers": "^7.25.0",
- "@babel/traverse": "^7.25.4",
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
"globals": "^11.1.0"
},
"engines": {
@@ -901,13 +691,14 @@
}
},
"node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
- "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz",
+ "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/template": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/template": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -917,12 +708,13 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz",
- "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz",
+ "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.8"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -932,13 +724,14 @@
}
},
"node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
- "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz",
+ "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -948,12 +741,13 @@
}
},
"node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
- "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz",
+ "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -963,13 +757,14 @@
}
},
"node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz",
- "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz",
+ "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.0",
- "@babel/helper-plugin-utils": "^7.24.8"
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -979,13 +774,13 @@
}
},
"node_modules/@babel/plugin-transform-dynamic-import": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
- "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz",
+ "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -995,13 +790,13 @@
}
},
"node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
- "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
+ "version": "7.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz",
+ "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1011,13 +806,13 @@
}
},
"node_modules/@babel/plugin-transform-export-namespace-from": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
- "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz",
+ "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1027,13 +822,14 @@
}
},
"node_modules/@babel/plugin-transform-for-of": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
- "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz",
+ "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1043,14 +839,15 @@
}
},
"node_modules/@babel/plugin-transform-function-name": {
- "version": "7.25.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz",
- "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz",
+ "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.24.8",
- "@babel/helper-plugin-utils": "^7.24.8",
- "@babel/traverse": "^7.25.1"
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1060,13 +857,13 @@
}
},
"node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
- "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz",
+ "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-json-strings": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1076,12 +873,13 @@
}
},
"node_modules/@babel/plugin-transform-literals": {
- "version": "7.25.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz",
- "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz",
+ "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.8"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1091,13 +889,13 @@
}
},
"node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
- "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz",
+ "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1107,12 +905,13 @@
}
},
"node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
- "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz",
+ "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1122,13 +921,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
- "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz",
+ "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-module-transforms": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1138,14 +938,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz",
- "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==",
+ "version": "7.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz",
+ "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.24.8",
- "@babel/helper-plugin-utils": "^7.24.8",
- "@babel/helper-simple-access": "^7.24.7"
+ "@babel/helper-module-transforms": "^7.26.0",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1155,15 +955,16 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz",
- "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz",
+ "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.25.0",
- "@babel/helper-plugin-utils": "^7.24.8",
- "@babel/helper-validator-identifier": "^7.24.7",
- "@babel/traverse": "^7.25.0"
+ "@babel/helper-module-transforms": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1173,13 +974,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
- "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz",
+ "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-module-transforms": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1189,13 +991,14 @@
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
- "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz",
+ "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1205,12 +1008,13 @@
}
},
"node_modules/@babel/plugin-transform-new-target": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
- "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz",
+ "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1220,13 +1024,13 @@
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
- "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
+ "version": "7.26.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz",
+ "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.26.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1236,13 +1040,13 @@
}
},
"node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
- "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz",
+ "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1252,15 +1056,15 @@
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
- "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz",
+ "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-compilation-targets": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.24.7"
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/plugin-transform-parameters": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1270,13 +1074,14 @@
}
},
"node_modules/@babel/plugin-transform-object-super": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
- "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz",
+ "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-replace-supers": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-replace-supers": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1286,13 +1091,13 @@
}
},
"node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
- "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz",
+ "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1302,14 +1107,14 @@
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz",
- "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz",
+ "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.8",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1319,12 +1124,13 @@
}
},
"node_modules/@babel/plugin-transform-parameters": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
- "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz",
+ "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1334,13 +1140,14 @@
}
},
"node_modules/@babel/plugin-transform-private-methods": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
- "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz",
+ "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.25.4",
- "@babel/helper-plugin-utils": "^7.24.8"
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1350,15 +1157,15 @@
}
},
"node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
- "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz",
+ "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.24.7",
- "@babel/helper-create-class-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-create-class-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1368,12 +1175,13 @@
}
},
"node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
- "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz",
+ "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1383,12 +1191,13 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
- "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz",
+ "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.25.9",
"regenerator-transform": "^0.15.2"
},
"engines": {
@@ -1398,13 +1207,31 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
- "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
+ "node_modules/@babel/plugin-transform-regexp-modifiers": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz",
+ "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-reserved-words": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz",
+ "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1414,12 +1241,13 @@
}
},
"node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
- "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz",
+ "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1429,13 +1257,14 @@
}
},
"node_modules/@babel/plugin-transform-spread": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
- "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz",
+ "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1445,12 +1274,13 @@
}
},
"node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
- "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz",
+ "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1460,12 +1290,13 @@
}
},
"node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
- "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz",
+ "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1475,12 +1306,13 @@
}
},
"node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz",
- "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz",
+ "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.8"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1490,12 +1322,13 @@
}
},
"node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
- "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz",
+ "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1505,13 +1338,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-property-regex": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
- "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz",
+ "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1521,13 +1355,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.24.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
- "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz",
+ "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.24.7",
- "@babel/helper-plugin-utils": "^7.24.7"
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1537,13 +1372,14 @@
}
},
"node_modules/@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
- "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz",
+ "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.25.2",
- "@babel/helper-plugin-utils": "^7.24.8"
+ "@babel/helper-create-regexp-features-plugin": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1553,93 +1389,80 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.25.4",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz",
- "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz",
+ "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.25.4",
- "@babel/helper-compilation-targets": "^7.25.2",
- "@babel/helper-plugin-utils": "^7.24.8",
- "@babel/helper-validator-option": "^7.24.8",
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3",
- "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0",
+ "@babel/compat-data": "^7.26.0",
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-validator-option": "^7.25.9",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9",
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.24.7",
- "@babel/plugin-syntax-import-attributes": "^7.24.7",
- "@babel/plugin-syntax-import-meta": "^7.10.4",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-syntax-import-assertions": "^7.26.0",
+ "@babel/plugin-syntax-import-attributes": "^7.26.0",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.24.7",
- "@babel/plugin-transform-async-generator-functions": "^7.25.4",
- "@babel/plugin-transform-async-to-generator": "^7.24.7",
- "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
- "@babel/plugin-transform-block-scoping": "^7.25.0",
- "@babel/plugin-transform-class-properties": "^7.25.4",
- "@babel/plugin-transform-class-static-block": "^7.24.7",
- "@babel/plugin-transform-classes": "^7.25.4",
- "@babel/plugin-transform-computed-properties": "^7.24.7",
- "@babel/plugin-transform-destructuring": "^7.24.8",
- "@babel/plugin-transform-dotall-regex": "^7.24.7",
- "@babel/plugin-transform-duplicate-keys": "^7.24.7",
- "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0",
- "@babel/plugin-transform-dynamic-import": "^7.24.7",
- "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
- "@babel/plugin-transform-export-namespace-from": "^7.24.7",
- "@babel/plugin-transform-for-of": "^7.24.7",
- "@babel/plugin-transform-function-name": "^7.25.1",
- "@babel/plugin-transform-json-strings": "^7.24.7",
- "@babel/plugin-transform-literals": "^7.25.2",
- "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
- "@babel/plugin-transform-member-expression-literals": "^7.24.7",
- "@babel/plugin-transform-modules-amd": "^7.24.7",
- "@babel/plugin-transform-modules-commonjs": "^7.24.8",
- "@babel/plugin-transform-modules-systemjs": "^7.25.0",
- "@babel/plugin-transform-modules-umd": "^7.24.7",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
- "@babel/plugin-transform-new-target": "^7.24.7",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
- "@babel/plugin-transform-numeric-separator": "^7.24.7",
- "@babel/plugin-transform-object-rest-spread": "^7.24.7",
- "@babel/plugin-transform-object-super": "^7.24.7",
- "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
- "@babel/plugin-transform-optional-chaining": "^7.24.8",
- "@babel/plugin-transform-parameters": "^7.24.7",
- "@babel/plugin-transform-private-methods": "^7.25.4",
- "@babel/plugin-transform-private-property-in-object": "^7.24.7",
- "@babel/plugin-transform-property-literals": "^7.24.7",
- "@babel/plugin-transform-regenerator": "^7.24.7",
- "@babel/plugin-transform-reserved-words": "^7.24.7",
- "@babel/plugin-transform-shorthand-properties": "^7.24.7",
- "@babel/plugin-transform-spread": "^7.24.7",
- "@babel/plugin-transform-sticky-regex": "^7.24.7",
- "@babel/plugin-transform-template-literals": "^7.24.7",
- "@babel/plugin-transform-typeof-symbol": "^7.24.8",
- "@babel/plugin-transform-unicode-escapes": "^7.24.7",
- "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
- "@babel/plugin-transform-unicode-regex": "^7.24.7",
- "@babel/plugin-transform-unicode-sets-regex": "^7.25.4",
+ "@babel/plugin-transform-arrow-functions": "^7.25.9",
+ "@babel/plugin-transform-async-generator-functions": "^7.25.9",
+ "@babel/plugin-transform-async-to-generator": "^7.25.9",
+ "@babel/plugin-transform-block-scoped-functions": "^7.25.9",
+ "@babel/plugin-transform-block-scoping": "^7.25.9",
+ "@babel/plugin-transform-class-properties": "^7.25.9",
+ "@babel/plugin-transform-class-static-block": "^7.26.0",
+ "@babel/plugin-transform-classes": "^7.25.9",
+ "@babel/plugin-transform-computed-properties": "^7.25.9",
+ "@babel/plugin-transform-destructuring": "^7.25.9",
+ "@babel/plugin-transform-dotall-regex": "^7.25.9",
+ "@babel/plugin-transform-duplicate-keys": "^7.25.9",
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9",
+ "@babel/plugin-transform-dynamic-import": "^7.25.9",
+ "@babel/plugin-transform-exponentiation-operator": "^7.25.9",
+ "@babel/plugin-transform-export-namespace-from": "^7.25.9",
+ "@babel/plugin-transform-for-of": "^7.25.9",
+ "@babel/plugin-transform-function-name": "^7.25.9",
+ "@babel/plugin-transform-json-strings": "^7.25.9",
+ "@babel/plugin-transform-literals": "^7.25.9",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.25.9",
+ "@babel/plugin-transform-member-expression-literals": "^7.25.9",
+ "@babel/plugin-transform-modules-amd": "^7.25.9",
+ "@babel/plugin-transform-modules-commonjs": "^7.25.9",
+ "@babel/plugin-transform-modules-systemjs": "^7.25.9",
+ "@babel/plugin-transform-modules-umd": "^7.25.9",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9",
+ "@babel/plugin-transform-new-target": "^7.25.9",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9",
+ "@babel/plugin-transform-numeric-separator": "^7.25.9",
+ "@babel/plugin-transform-object-rest-spread": "^7.25.9",
+ "@babel/plugin-transform-object-super": "^7.25.9",
+ "@babel/plugin-transform-optional-catch-binding": "^7.25.9",
+ "@babel/plugin-transform-optional-chaining": "^7.25.9",
+ "@babel/plugin-transform-parameters": "^7.25.9",
+ "@babel/plugin-transform-private-methods": "^7.25.9",
+ "@babel/plugin-transform-private-property-in-object": "^7.25.9",
+ "@babel/plugin-transform-property-literals": "^7.25.9",
+ "@babel/plugin-transform-regenerator": "^7.25.9",
+ "@babel/plugin-transform-regexp-modifiers": "^7.26.0",
+ "@babel/plugin-transform-reserved-words": "^7.25.9",
+ "@babel/plugin-transform-shorthand-properties": "^7.25.9",
+ "@babel/plugin-transform-spread": "^7.25.9",
+ "@babel/plugin-transform-sticky-regex": "^7.25.9",
+ "@babel/plugin-transform-template-literals": "^7.25.9",
+ "@babel/plugin-transform-typeof-symbol": "^7.25.9",
+ "@babel/plugin-transform-unicode-escapes": "^7.25.9",
+ "@babel/plugin-transform-unicode-property-regex": "^7.25.9",
+ "@babel/plugin-transform-unicode-regex": "^7.25.9",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.25.9",
"@babel/preset-modules": "0.1.6-no-external-plugins",
"babel-plugin-polyfill-corejs2": "^0.4.10",
"babel-plugin-polyfill-corejs3": "^0.10.6",
"babel-plugin-polyfill-regenerator": "^0.6.1",
- "core-js-compat": "^3.37.1",
+ "core-js-compat": "^3.38.1",
"semver": "^6.3.1"
},
"engines": {
@@ -1649,20 +1472,12 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/preset-env/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/@babel/preset-modules": {
"version": "0.1.6-no-external-plugins",
"resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
"integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/types": "^7.4.4",
@@ -1672,17 +1487,12 @@
"@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
}
},
- "node_modules/@babel/regjsgen": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
- "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
- "dev": true
- },
"node_modules/@babel/runtime": {
- "version": "7.25.6",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
- "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
+ "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -1691,30 +1501,32 @@
}
},
"node_modules/@babel/template": {
- "version": "7.25.0",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
- "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
+ "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.24.7",
- "@babel/parser": "^7.25.0",
- "@babel/types": "^7.25.0"
+ "@babel/code-frame": "^7.25.9",
+ "@babel/parser": "^7.25.9",
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.25.6",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
- "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz",
+ "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.24.7",
- "@babel/generator": "^7.25.6",
- "@babel/parser": "^7.25.6",
- "@babel/template": "^7.25.0",
- "@babel/types": "^7.25.6",
+ "@babel/code-frame": "^7.26.2",
+ "@babel/generator": "^7.26.5",
+ "@babel/parser": "^7.26.5",
+ "@babel/template": "^7.25.9",
+ "@babel/types": "^7.26.5",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -1723,14 +1535,14 @@
}
},
"node_modules/@babel/types": {
- "version": "7.25.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
- "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz",
+ "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.24.8",
- "@babel/helper-validator-identifier": "^7.24.7",
- "to-fast-properties": "^2.0.0"
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1741,6 +1553,7 @@
"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
"integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10.0.0"
}
@@ -1750,6 +1563,7 @@
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"string-width": "^5.1.2",
"string-width-cjs": "npm:string-width@^4.2.0",
@@ -1763,10 +1577,11 @@
}
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -1781,6 +1596,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
@@ -1790,6 +1606,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
@@ -1799,6 +1616,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25"
@@ -1808,192 +1626,224 @@
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "node_modules/@types/eslint": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
+ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
"dev": true,
- "optional": true,
- "engines": {
- "node": ">=14"
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.7",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
}
},
"node_modules/@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
- "dev": true
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.5.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz",
- "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==",
+ "version": "22.10.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.6.tgz",
+ "integrity": "sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "undici-types": "~6.19.2"
+ "undici-types": "~6.20.0"
}
},
"node_modules/@webassemblyjs/ast": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
- "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
+ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@webassemblyjs/helper-numbers": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
+ "@webassemblyjs/helper-numbers": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
}
},
"node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
- "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
- "dev": true
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
+ "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
- "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
- "dev": true
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
+ "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
- "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
- "dev": true
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
+ "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@webassemblyjs/helper-numbers": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
- "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
+ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.6",
- "@webassemblyjs/helper-api-error": "1.11.6",
+ "@webassemblyjs/floating-point-hex-parser": "1.13.2",
+ "@webassemblyjs/helper-api-error": "1.13.2",
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
- "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
- "dev": true
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
+ "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
- "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
+ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.12.1"
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/wasm-gen": "1.14.1"
}
},
"node_modules/@webassemblyjs/ieee754": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
- "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
+ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@xtuc/ieee754": "^1.2.0"
}
},
"node_modules/@webassemblyjs/leb128": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
- "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
+ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webassemblyjs/utf8": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
- "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
- "dev": true
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
+ "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
- "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
+ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/helper-wasm-section": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-opt": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1",
- "@webassemblyjs/wast-printer": "1.12.1"
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/helper-wasm-section": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
+ "@webassemblyjs/wasm-opt": "1.14.1",
+ "@webassemblyjs/wasm-parser": "1.14.1",
+ "@webassemblyjs/wast-printer": "1.14.1"
}
},
"node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
- "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
+ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/ieee754": "1.13.2",
+ "@webassemblyjs/leb128": "1.13.2",
+ "@webassemblyjs/utf8": "1.13.2"
}
},
"node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
- "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
+ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1"
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
+ "@webassemblyjs/wasm-parser": "1.14.1"
}
},
"node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
- "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
+ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-api-error": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/ieee754": "1.13.2",
+ "@webassemblyjs/leb128": "1.13.2",
+ "@webassemblyjs/utf8": "1.13.2"
}
},
"node_modules/@webassemblyjs/wast-printer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
- "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
+ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/ast": "1.14.1",
"@xtuc/long": "4.2.2"
}
},
@@ -2002,6 +1852,7 @@
"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
"integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=14.15.0"
},
@@ -2015,6 +1866,7 @@
"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
"integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=14.15.0"
},
@@ -2028,6 +1880,7 @@
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
"integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=14.15.0"
},
@@ -2045,19 +1898,22 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/@xtuc/long": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true
+ "dev": true,
+ "license": "Apache-2.0"
},
"node_modules/acorn": {
- "version": "8.12.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
- "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"dev": true,
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -2065,25 +1921,17 @@
"node": ">=0.4.0"
}
},
- "node_modules/acorn-import-attributes": {
- "version": "1.9.5",
- "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
- "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^8"
- }
- },
"node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
@@ -2095,6 +1943,7 @@
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ajv": "^8.0.0"
},
@@ -2107,35 +1956,17 @@
}
}
},
- "node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-formats/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
"node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
"peerDependencies": {
- "ajv": "^6.9.1"
+ "ajv": "^8.8.2"
}
},
"node_modules/ansi-regex": {
@@ -2143,6 +1974,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
@@ -2151,22 +1983,35 @@
}
},
"node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
"dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
+ "license": "MIT",
"engines": {
- "node": ">=4"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/aos": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/aos/-/aos-2.3.4.tgz",
+ "integrity": "sha512-zh/ahtR2yME4I51z8IttIt4lC1Nw0ktsFtmeDzID1m9naJnWXhCoARaCgNOGXb5CLy3zm+wqmRAEgMYB5E2HUw==",
+ "license": "MIT",
+ "dependencies": {
+ "classlist-polyfill": "^1.0.3",
+ "lodash.debounce": "^4.0.6",
+ "lodash.throttle": "^4.0.1"
}
},
"node_modules/babel-loader": {
- "version": "9.1.3",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
- "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz",
+ "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"find-cache-dir": "^4.0.0",
"schema-utils": "^4.0.0"
@@ -2179,87 +2024,27 @@
"webpack": ">=5"
}
},
- "node_modules/babel-loader/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/babel-loader/node_modules/ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- },
- "peerDependencies": {
- "ajv": "^8.8.2"
- }
- },
- "node_modules/babel-loader/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/babel-loader/node_modules/schema-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
- "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.11",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
- "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==",
+ "version": "0.4.12",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz",
+ "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.6.2",
+ "@babel/helper-define-polyfill-provider": "^0.6.3",
"semver": "^6.3.1"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
- "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/babel-plugin-polyfill-corejs3": {
"version": "0.10.6",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz",
"integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.6.2",
"core-js-compat": "^3.38.0"
@@ -2269,12 +2054,13 @@
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz",
- "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==",
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz",
+ "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.6.2"
+ "@babel/helper-define-polyfill-provider": "^0.6.3"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -2284,21 +2070,23 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/browserslist": {
- "version": "4.23.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
- "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+ "version": "4.24.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
+ "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
"dev": true,
"funding": [
{
@@ -2314,11 +2102,12 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001646",
- "electron-to-chromium": "^1.5.4",
- "node-releases": "^2.0.18",
- "update-browserslist-db": "^1.1.0"
+ "caniuse-lite": "^1.0.30001688",
+ "electron-to-chromium": "^1.5.73",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.1"
},
"bin": {
"browserslist": "cli.js"
@@ -2331,12 +2120,13 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001660",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz",
- "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==",
+ "version": "1.0.30001692",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz",
+ "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==",
"dev": true,
"funding": [
{
@@ -2351,57 +2141,31 @@
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ]
- },
- "node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chalk/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chalk/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
+ ],
+ "license": "CC-BY-4.0"
},
"node_modules/chrome-trace-event": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
"integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.0"
}
},
+ "node_modules/classlist-polyfill": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.2.0.tgz",
+ "integrity": "sha512-GzIjNdcEtH4ieA2S8NmrSxv7DfEV5fmixQeyTmqmRmRJPGpRBaSnA2a0VrCjyT8iW8JjEdMbKzDotAJf+ajgaQ==",
+ "license": "Unlicense"
+ },
"node_modules/clone-deep": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4",
"kind-of": "^6.0.2",
@@ -2412,51 +2176,61 @@
}
},
"node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "color-name": "1.1.3"
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
}
},
"node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/colorette": {
"version": "2.0.20",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/common-path-prefix": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
"integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/convert-source-map": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/core-js-compat": {
- "version": "3.38.1",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz",
- "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==",
+ "version": "3.40.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz",
+ "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "browserslist": "^4.23.3"
+ "browserslist": "^4.24.3"
},
"funding": {
"type": "opencollective",
@@ -2464,10 +2238,11 @@
}
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -2482,6 +2257,7 @@
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz",
"integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"icss-utils": "^5.1.0",
"postcss": "^8.4.33",
@@ -2512,11 +2288,25 @@
}
}
},
+ "node_modules/css-loader/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
"dev": true,
+ "license": "MIT",
"bin": {
"cssesc": "bin/cssesc"
},
@@ -2525,10 +2315,11 @@
}
},
"node_modules/debug": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
@@ -2545,25 +2336,29 @@
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/electron-to-chromium": {
- "version": "1.5.18",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz",
- "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==",
- "dev": true
+ "version": "1.5.82",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.82.tgz",
+ "integrity": "sha512-Zq16uk1hfQhyGx5GpwPAYDwddJuSGhtRhgOA2mCxANYaDT79nAeGnaXogMGng4KqLaJUVnOnuL0+TDop9nLOiA==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/emoji-regex": {
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/enhanced-resolve": {
- "version": "5.17.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
- "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+ "version": "5.18.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz",
+ "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
@@ -2573,10 +2368,11 @@
}
},
"node_modules/envinfo": {
- "version": "7.13.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz",
- "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==",
+ "version": "7.14.0",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz",
+ "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==",
"dev": true,
+ "license": "MIT",
"bin": {
"envinfo": "dist/cli.js"
},
@@ -2585,34 +2381,28 @@
}
},
"node_modules/es-module-lexer": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
- "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
- "dev": true
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz",
+ "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
"node_modules/eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
@@ -2626,6 +2416,7 @@
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"estraverse": "^5.2.0"
},
@@ -2638,6 +2429,7 @@
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
}
@@ -2647,6 +2439,7 @@
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
}
@@ -2656,6 +2449,7 @@
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -2665,6 +2459,7 @@
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.8.x"
}
@@ -2673,25 +2468,39 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-uri": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
- "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
- "dev": true
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz",
+ "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
},
"node_modules/fastest-levenshtein": {
"version": "1.0.16",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
"integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4.9.1"
}
@@ -2701,6 +2510,7 @@
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
"integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"common-path-prefix": "^3.0.0",
"pkg-dir": "^7.0.0"
@@ -2712,11 +2522,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/find-cache-dir/node_modules/find-up": {
+ "node_modules/find-up": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
"integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^7.1.0",
"path-exists": "^5.0.0"
@@ -2728,93 +2539,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/find-cache-dir/node_modules/locate-path": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
- "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
- "dev": true,
- "dependencies": {
- "p-locate": "^6.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/find-cache-dir/node_modules/p-limit": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
- "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^1.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/find-cache-dir/node_modules/p-locate": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
- "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/find-cache-dir/node_modules/path-exists": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
- "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
- "dev": true,
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- }
- },
- "node_modules/find-cache-dir/node_modules/pkg-dir": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
- "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
- "dev": true,
- "dependencies": {
- "find-up": "^6.3.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/flat": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
"dev": true,
+ "license": "BSD-3-Clause",
"bin": {
"flat": "cli.js"
}
@@ -2824,6 +2554,7 @@
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
"integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^4.0.1"
@@ -2840,6 +2571,7 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
+ "license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -2849,15 +2581,17 @@
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/glob": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz",
- "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==",
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz",
+ "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^4.0.1",
@@ -2880,13 +2614,15 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "dev": true
+ "dev": true,
+ "license": "BSD-2-Clause"
},
"node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
@@ -2895,13 +2631,15 @@
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2911,6 +2649,7 @@
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -2923,6 +2662,7 @@
"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": "^10 || ^12 || >= 14"
},
@@ -2935,6 +2675,7 @@
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
"integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
@@ -2949,20 +2690,101 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/import-local/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-local/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-local/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-local/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-local/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/import-local/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/interpret": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
"integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/is-core-module": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
- "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"hasown": "^2.0.2"
},
@@ -2978,6 +2800,7 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2987,6 +2810,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -2998,22 +2822,25 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/jackspeak": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz",
- "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz",
+ "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==",
"dev": true,
+ "license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
@@ -3022,9 +2849,6 @@
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
}
},
"node_modules/jest-worker": {
@@ -3032,6 +2856,7 @@
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
"integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/node": "*",
"merge-stream": "^2.0.0",
@@ -3045,37 +2870,42 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true,
+ "license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
- "node": ">=4"
+ "node": ">=6"
}
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
+ "license": "MIT",
"bin": {
"json5": "lib/cli.js"
},
@@ -3088,6 +2918,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3097,33 +2928,45 @@
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
"integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.11.5"
}
},
"node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+ "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "p-locate": "^4.1.0"
+ "p-locate": "^6.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
- "dev": true
+ "license": "MIT"
+ },
+ "node_modules/lodash.throttle": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+ "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==",
+ "license": "MIT"
},
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"yallist": "^3.0.2"
}
@@ -3132,13 +2975,15 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
@@ -3148,6 +2993,7 @@
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
@@ -3156,10 +3002,11 @@
}
},
"node_modules/mini-css-extract-plugin": {
- "version": "2.9.1",
- "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz",
- "integrity": "sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==",
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz",
+ "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"schema-utils": "^4.0.0",
"tapable": "^2.2.1"
@@ -3175,64 +3022,12 @@
"webpack": "^5.0.0"
}
},
- "node_modules/mini-css-extract-plugin/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
- "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3"
- },
- "peerDependencies": {
- "ajv": "^8.8.2"
- }
- },
- "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/mini-css-extract-plugin/node_modules/schema-utils": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
- "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "ajv": "^8.9.0",
- "ajv-formats": "^2.1.1",
- "ajv-keywords": "^5.1.0"
- },
- "engines": {
- "node": ">= 12.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
"node_modules/minimatch": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
"integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -3248,6 +3043,7 @@
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -3256,12 +3052,13 @@
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/nanoid": {
- "version": "3.3.7",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
- "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
"dev": true,
"funding": [
{
@@ -3269,6 +3066,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -3280,39 +3078,46 @@
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/node-releases": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
- "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
- "dev": true
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+ "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "p-try": "^2.0.0"
+ "yocto-queue": "^1.0.0"
},
"engines": {
- "node": ">=6"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+ "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "p-limit": "^2.2.0"
+ "p-limit": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-try": {
@@ -3320,23 +3125,26 @@
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/package-json-from-dist": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
- "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
- "dev": true
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
},
"node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+ "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
"node_modules/path-key": {
@@ -3344,6 +3152,7 @@
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -3352,13 +3161,15 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/path-scurry": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
"integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
"dev": true,
+ "license": "BlueOak-1.0.0",
"dependencies": {
"lru-cache": "^11.0.0",
"minipass": "^7.1.2"
@@ -3371,36 +3182,42 @@
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz",
- "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==",
+ "version": "11.0.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz",
+ "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": "20 || >=22"
}
},
"node_modules/picocolors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
- "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
- "dev": true
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
+ "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "find-up": "^4.0.0"
+ "find-up": "^6.3.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/postcss": {
- "version": "8.4.45",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz",
- "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==",
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
+ "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
"dev": true,
"funding": [
{
@@ -3416,10 +3233,11 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "nanoid": "^3.3.7",
- "picocolors": "^1.0.1",
- "source-map-js": "^1.2.0"
+ "nanoid": "^3.3.8",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -3430,6 +3248,7 @@
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
"integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": "^10 || ^12 || >= 14"
},
@@ -3438,13 +3257,14 @@
}
},
"node_modules/postcss-modules-local-by-default": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz",
- "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz",
+ "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"icss-utils": "^5.0.0",
- "postcss-selector-parser": "^6.0.2",
+ "postcss-selector-parser": "^7.0.0",
"postcss-value-parser": "^4.1.0"
},
"engines": {
@@ -3455,12 +3275,13 @@
}
},
"node_modules/postcss-modules-scope": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz",
- "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==",
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz",
+ "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "postcss-selector-parser": "^6.0.4"
+ "postcss-selector-parser": "^7.0.0"
},
"engines": {
"node": "^10 || ^12 || >= 14"
@@ -3474,6 +3295,7 @@
"resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
"integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"icss-utils": "^5.0.0"
},
@@ -3485,10 +3307,11 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
- "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz",
+ "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -3501,13 +3324,15 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -3517,6 +3342,7 @@
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"safe-buffer": "^5.1.0"
}
@@ -3526,6 +3352,7 @@
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
"integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"resolve": "^1.20.0"
},
@@ -3537,13 +3364,15 @@
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
"integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/regenerate-unicode-properties": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
- "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz",
+ "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"regenerate": "^1.4.2"
},
@@ -3555,27 +3384,30 @@
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/regenerator-transform": {
"version": "0.15.2",
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
"integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.8.4"
}
},
"node_modules/regexpu-core": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
- "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz",
+ "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/regjsgen": "^0.8.0",
"regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.1.0",
- "regjsparser": "^0.9.1",
+ "regenerate-unicode-properties": "^10.2.0",
+ "regjsgen": "^0.8.0",
+ "regjsparser": "^0.12.0",
"unicode-match-property-ecmascript": "^2.0.0",
"unicode-match-property-value-ecmascript": "^2.1.0"
},
@@ -3583,25 +3415,37 @@
"node": ">=4"
}
},
- "node_modules/regjsparser": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
- "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+ "node_modules/regjsgen": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==",
"dev": true,
+ "license": "MIT"
+ },
+ "node_modules/regjsparser": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz",
+ "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "jsesc": "~0.5.0"
+ "jsesc": "~3.0.2"
},
"bin": {
"regjsparser": "bin/parser"
}
},
"node_modules/regjsparser/node_modules/jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+ "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
"dev": true,
+ "license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/require-from-string": {
@@ -3609,23 +3453,28 @@
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "version": "1.22.10",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-core-module": "^2.13.0",
+ "is-core-module": "^2.16.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -3635,6 +3484,7 @@
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"resolve-from": "^5.0.0"
},
@@ -3647,6 +3497,7 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -3669,17 +3520,20 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz",
+ "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
},
"engines": {
"node": ">= 10.13.0"
@@ -3690,15 +3544,13 @@
}
},
"node_modules/semver": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
- "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
}
},
"node_modules/serialize-javascript": {
@@ -3706,6 +3558,7 @@
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"randombytes": "^2.1.0"
}
@@ -3715,6 +3568,7 @@
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"kind-of": "^6.0.2"
},
@@ -3727,6 +3581,7 @@
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -3739,6 +3594,7 @@
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -3748,6 +3604,7 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=14"
},
@@ -3760,6 +3617,7 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -3769,6 +3627,7 @@
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -3778,6 +3637,7 @@
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -3788,6 +3648,7 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
@@ -3806,6 +3667,7 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -3820,6 +3682,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -3828,13 +3691,15 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/string-width-cjs/node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -3847,6 +3712,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -3863,6 +3729,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -3875,6 +3742,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -3884,6 +3752,7 @@
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz",
"integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 18.12.0"
},
@@ -3900,6 +3769,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -3915,6 +3785,7 @@
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -3927,15 +3798,17 @@
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/terser": {
- "version": "5.32.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.32.0.tgz",
- "integrity": "sha512-v3Gtw3IzpBJ0ugkxEX8U0W6+TnPKRRCWGh1jC/iM/e3Ki5+qvO1L1EAZ56bZasc64aXHwRHNIQEzm6//i5cemQ==",
+ "version": "5.37.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz",
+ "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
@@ -3950,16 +3823,17 @@
}
},
"node_modules/terser-webpack-plugin": {
- "version": "5.3.10",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
- "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
+ "version": "5.3.11",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz",
+ "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jridgewell/trace-mapping": "^0.3.20",
+ "@jridgewell/trace-mapping": "^0.3.25",
"jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.1",
- "terser": "^5.26.0"
+ "schema-utils": "^4.3.0",
+ "serialize-javascript": "^6.0.2",
+ "terser": "^5.31.1"
},
"engines": {
"node": ">= 10.13.0"
@@ -3983,26 +3857,19 @@
}
}
},
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/undici-types": {
- "version": "6.19.8",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
- "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
- "dev": true
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+ "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/unicode-canonical-property-names-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
- "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
+ "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
@@ -4012,6 +3879,7 @@
"resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
"integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"unicode-canonical-property-names-ecmascript": "^2.0.0",
"unicode-property-aliases-ecmascript": "^2.0.0"
@@ -4021,10 +3889,11 @@
}
},
"node_modules/unicode-match-property-value-ecmascript": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
- "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",
+ "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
@@ -4034,14 +3903,15 @@
"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
"integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/update-browserslist-db": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
- "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz",
+ "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==",
"dev": true,
"funding": [
{
@@ -4057,9 +3927,10 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "escalade": "^3.1.2",
- "picocolors": "^1.0.1"
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -4073,6 +3944,7 @@
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
}
@@ -4081,13 +3953,15 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/watchpack": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
"integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
@@ -4097,18 +3971,19 @@
}
},
"node_modules/webpack": {
- "version": "5.94.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
- "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
+ "version": "5.97.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz",
+ "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/estree": "^1.0.5",
- "@webassemblyjs/ast": "^1.12.1",
- "@webassemblyjs/wasm-edit": "^1.12.1",
- "@webassemblyjs/wasm-parser": "^1.12.1",
- "acorn": "^8.7.1",
- "acorn-import-attributes": "^1.9.5",
- "browserslist": "^4.21.10",
+ "@types/eslint-scope": "^3.7.7",
+ "@types/estree": "^1.0.6",
+ "@webassemblyjs/ast": "^1.14.1",
+ "@webassemblyjs/wasm-edit": "^1.14.1",
+ "@webassemblyjs/wasm-parser": "^1.14.1",
+ "acorn": "^8.14.0",
+ "browserslist": "^4.24.0",
"chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1",
@@ -4147,6 +4022,7 @@
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
"integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@discoveryjs/json-ext": "^0.5.0",
"@webpack-cli/configtest": "^2.1.1",
@@ -4192,6 +4068,7 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
"integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=14"
}
@@ -4201,6 +4078,7 @@
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
"integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"clone-deep": "^4.0.1",
"flat": "^5.0.2",
@@ -4215,15 +4093,70 @@
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
"integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10.13.0"
}
},
+ "node_modules/webpack/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/webpack/node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/webpack/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/webpack/node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -4238,13 +4171,15 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
"integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/wrap-ansi": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^6.1.0",
"string-width": "^5.0.1",
@@ -4263,6 +4198,7 @@
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -4280,6 +4216,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -4289,6 +4226,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -4299,35 +4237,19 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/wrap-ansi-cjs/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/wrap-ansi-cjs/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -4342,6 +4264,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -4349,29 +4272,19 @@
"node": ">=8"
}
},
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/yocto-queue": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
"integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12.20"
},
diff --git a/package.json b/package.json
index 9aa4ab71..3497ad3e 100644
--- a/package.json
+++ b/package.json
@@ -33,5 +33,8 @@
"style-loader": "^4.0.0",
"webpack": "^5.94.0",
"webpack-cli": "^5.1.4"
+ },
+ "dependencies": {
+ "aos": "^2.3.4"
}
}
diff --git a/static/css/components/button.css b/static/css/components/button.css
index 3243556c..fb55ad03 100644
--- a/static/css/components/button.css
+++ b/static/css/components/button.css
@@ -1,24 +1,31 @@
-
-button, .button-submit, input[type="submit"] {
- font-size: 20px;
- font-weight: bold;
- border: 4px solid;
- border-radius: 2vh;
- padding: 1vh 2vh 1vh 2vh;
- margin: 0.5vh;
- background-color: var(--c_purple_pastel);
- color: var(--c_purple_dark);
- border-color: var(--c_purple_dark);
+.button {
+ display: inline-block;
+ padding: 0.75rem 1.5rem;
+ border-radius: 6px;
+ text-decoration: none;
+ font-weight: 500;
+ transition: all 0.3s ease;
+ width: fit-content;
}
-button.navContactUs {
- border: 4px solid var(--c_purple_dark);
- background-color: var(--c_purple_pastel);
- color: var(--c_purple_dark) !important;
- border-radius: 2vh;
- width: 180px !important;
+.button-primary {
+ background: var(--primary);
+ color: white;
}
-button:hover, input[type="submit"]:hover {
- text-decoration: underline;
+.button-primary:hover {
+ background: var(--secondary);
}
+
+.button-light {
+ background: white;
+ color: var(--primary);
+}
+
+.button-light:hover {
+ background: var(--light);
+}
+
+.logo:hover{
+ cursor: pointer;
+}
\ No newline at end of file
diff --git a/static/css/components/card.css b/static/css/components/card.css
deleted file mode 100644
index e69de29b..00000000
diff --git a/static/css/components/dialog.css b/static/css/components/dialog.css
deleted file mode 100644
index e69de29b..00000000
diff --git a/static/css/components/form.css b/static/css/components/form.css
deleted file mode 100644
index e69de29b..00000000
diff --git a/static/css/components/image.css b/static/css/components/image.css
deleted file mode 100644
index 589ed1c1..00000000
--- a/static/css/components/image.css
+++ /dev/null
@@ -1,4 +0,0 @@
-
-img, video {
- border-radius: 3vh;
-}
diff --git a/static/css/components/label.css b/static/css/components/label.css
deleted file mode 100644
index b1c40294..00000000
--- a/static/css/components/label.css
+++ /dev/null
@@ -1,26 +0,0 @@
-
-h1 {
- font-size: min(24px, calc(1vh * 6));
-}
-
-h2 {
- font-size: min(20px, calc(1vh * 5));
-}
-
-h3 {
- font-size: min(16px, calc(1vh * 4));
- margin-top: 1vh;
-}
-
-h4 {
- font-size: 13px;
- margin: 1vh;
- text-align: center;
- margin-left: auto;
- margin-right: auto;
-}
-
-h5 {
- font-size: 11px;
- margin: 1vh;
-}
diff --git a/static/css/components/modal.css b/static/css/components/modal.css
deleted file mode 100644
index e69de29b..00000000
diff --git a/static/css/components/navigation.css b/static/css/components/navigation.css
deleted file mode 100644
index e69de29b..00000000
diff --git a/static/css/components/overlay.css b/static/css/components/overlay.css
deleted file mode 100644
index 6ad963a6..00000000
--- a/static/css/components/overlay.css
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-/* Overlay modal */
-.overlay {
- /*
- display: none;
- */
- position: fixed;
- top: 15vh;
- right: 0;
- width: 100px;
- /* height: 50%; */
- background: var(--c_purple_pastel);
- justify-content: right;
- align-items: right;
- align-self: right;
- z-index: 999;
-}
-.overlay.expanded {
- display: block;
-}
-.collapsed {
- display: none;
-}
-
-/* Hamburger menu overlay */
-#buttonHamburger:hover {
- text-decoration: none;
-}
-#overlayHamburger {
- overflow-x: hidden;
- overflow-y: auto;
- max-height: 80%;
-}
-.hamburger {
- border: 2px solid var(--c_purple_dark);
- border-radius: 4px;
-}
-.hamburger:first-child {
- border-top-left-radius: 12px;
- border-top-right-radius: 12px;
-}
-.hamburger:last-child {
- border-bottom-left-radius: 12px;
- border-bottom-right-radius: 12px;
-}
-
-.hamburger > * {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: center;
- text-align: center;
- width: 100%;
- color: var(--c_purple_dark);
- font-weight: bold;
- font-size: 18px;
- /* height: 18px; */
-}
-.hamburger > :hover {
- background-color: var(--c_purple_light);
- color: var(--c_purple_dark);
-}
-.hamburger > * > * {
- width: 100%;
- /*
- margin-top: 4.5px;
- margin-bottom: 4.5px;
- */
-}
-.hamburger > .container {
- padding-top: 4.5px;
- padding-bottom: 4.5px;
-}
-
-#overlayHamburger .row *:hover {
- text-decoration: underline;
-}
-
-/* Confirm overlay */
-#overlayConfirm {
- position: absolute;
- left: 25vw;
- width: 50vw;
- height: 50vh;
-}
\ No newline at end of file
diff --git a/static/css/components/table.css b/static/css/components/table.css
deleted file mode 100644
index a93db554..00000000
--- a/static/css/components/table.css
+++ /dev/null
@@ -1,66 +0,0 @@
-
-#formFilters .container {
- max-width: fit-content;
-}
-
-thead, tbody {
- padding-top: 0px !important;
- padding-bottom: 0px !important;
-}
-
-th {
- background-color: var(--c_purple_pastel);
-}
-td {
- font-size: min(12px, calc(1vh * 3));
-}
-
-th, td {
- min-width: fit-content;
-}
-tr:not(:last-child) > td {
- border-bottom: 1px dashed var(--c_purple_dark);
-}
-td > table > tbody > tr > td {
- border: none !important;
-}
-th.collapsed, td.collapsed {
- display: table-cell !important;
-}
-td.dirty {
- background-color: var(--c_purple_dark);
-}
-td:not(.dirty) {
- /* color: var(--c_purple_dark); */
- background-color: var(--c_purple_pastel);
-}
-
-tr {
- min-height: 1px;
- border-bottom: 1px solid var(--c_purple_dark);
- border-top: 1px solid var(--c_purple_dark);
- background-color: transparent;
-}
-
-/*
-.row-new {
- visibility: hidden;
-}
-*/
-
-table button {
- margin: 0.25vh;
- padding: 0.5vh 1vh;
-}
-
-table button.active {
- background-color: var(--c_purple_pastel);
-}
-
-tr.delete, tr.delete > td {
- background-color: red;
-}
-
-table div {
- align-content: center;
-}
\ No newline at end of file
diff --git a/static/css/layouts/footer.css b/static/css/layouts/footer.css
index 8493cada..7ab45171 100644
--- a/static/css/layouts/footer.css
+++ b/static/css/layouts/footer.css
@@ -1,23 +1,57 @@
-/* Footer */
.footer {
- padding: 1vh;
- padding-left: 1vw;
- padding-right: 1vw;
- text-align: center;
- margin: 0;
- height: 8vh !important;
- overflow-y: auto;
- background-color: var(--c_purple_pastel);
- border-top-left-radius: 2.5vh;
- border-top-right-radius: 2.5vh;
- position: absolute;
- /* top: 2.5vh; */
- bottom: 0;
- width: 98vw;
+ background: #1f2937;
+ color: #f3f4f6;
+ padding: 4rem 0 2rem;
}
-.footer > h4, h5 {
+.footer-content {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 2rem;
+ margin-bottom: 2rem;
+}
+
+.footer-section h3 {
+ color: #fff;
+ margin-bottom: 1rem;
+ font-size: 1.2rem;
+}
+
+.footer-section ul {
+ list-style: none;
padding: 0;
- margin: 0;
+}
+
+.footer-section ul li {
+ margin-bottom: 0.5rem;
+}
+
+.footer-section a {
+ color: #f3f4f6;
+ text-decoration: none;
+ transition: color 0.3s ease;
+}
+
+.footer-section a:hover {
+ color: #fff;
+ text-decoration: underline;
+}
+
+.footer-bottom {
+ border-top: 1px solid #374151;
+ padding-top: 2rem;
+ text-align: center;
+ font-size: 0.9rem;
+}
+
+.footer-bottom a {
+ color: aquamarine;
+}
+
+@media (max-width: 768px) {
+ .footer-content {
+ grid-template-columns: 1fr;
+ text-align: center;
+ }
}
\ No newline at end of file
diff --git a/static/css/layouts/header.css b/static/css/layouts/header.css
index eb486b3b..a0d16567 100644
--- a/static/css/layouts/header.css
+++ b/static/css/layouts/header.css
@@ -1,104 +1,37 @@
-
-/* Navigation */
-.topnav {
- border-bottom-left-radius: 2.5vh;
- border-bottom-right-radius: 2.5vh;
- display: flex;
- flex-wrap: wrap;
- flex: 1;
- flex-direction: row;
- font-weight: bold;
- font-size: 1vh;
- max-height: 15vh;
- height: 15vh;
- align-items: flex-start;
-}
-.topnav a, .topnav label, .topnav p, .topnav h1 {
- float: left;
- display: flex;
- color: white;
- text-align: center;
- text-decoration: none;
+header {
+ background: white;
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+ /* position: fixed;
+ top: 0; */
width: 100%;
- max-height: 15vh;
- font-weight: normal;
- justify-content: center;
-}
-.topnav a:hover {
- background-color: var(--c_purple_light);
- color: var(--c_purple_dark);
+ z-index: 1000;
}
-.topnav > .container {
- max-width: 50%;
- height: 100%;
- align-items: center;
- align-self: center;
- /* align-content: center; */
- /* width: fit-content; */
+.navbar {
display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 1rem 0;
}
-.topnav select {
- padding: 1vh;
- margin: 1vh;
- border-radius: 1vh;
- /* background-color: var(--c_purple_light); */
- color: var(--c_purple_dark);
- border: 2px solid white;
+
+.logo {
+ font-size: 1.5rem;
font-weight: bold;
- text-align: center;
-}
-.topnav select .collapsed {
- width: 5vw;
-}
-.topnav select .expanded {
- width: 25vw;
+ color: var(--primary);
}
-.company-name {
- font-size: min(28px, calc(1vh * 7));
+.nav-links {
+ display: flex;
+ gap: 2rem;
+}
+
+.nav-links a {
+ text-decoration: none;
+ color: var(--text);
+ font-weight: 500;
+ align-content: center;
+}
+.nav-links a.button {
color: white;
-}
-@media screen and (max-width: 450px) {
- .company-name {
- font-size: min(24px, calc(1vh * 7));
- }
-}
-
-/* Page Filters */
-#formFilters * {
- font-size: 12px;
-}
-
-#formFilters .container {
- max-width: fit-content;
-}
-#formFilters .container-input {
- padding: 0 0.5vh;
-}
-
-#formFilters .container-input input {
- max-width: 5vh;
-}
-
-#formFilters .container-input.filter.active {
- width: 8vh;
-}
-#formFilters .container-input.filter.is_not_empty {
- width: 12vh;
-}
-
-button.collapsed {
- display: block;
- opacity: 0;
-}
-
-form.filter button.save, form.filter button.button-cancel {
- margin-top: 0;
- margin-bottom: 0;
-}
-form.filter button.save, form.filter button.button-cancel {
- margin-top: 0;
- margin-bottom: 0;
}
\ No newline at end of file
diff --git a/static/css/layouts/table-main.css b/static/css/layouts/table-main.css
deleted file mode 100644
index c4628d34..00000000
--- a/static/css/layouts/table-main.css
+++ /dev/null
@@ -1,41 +0,0 @@
-
-#tableMain {
- overflow-x: auto;
- padding: 1vh;
- max-width: 95vw; /* min(calc(1vh * 80), calc(1vw * 90)); */
- width: fit-content;
- margin: 1vh 2vh;
- align-items: normal;
- justify-content: normal;
-}
-
-#tableMain * {
- padding: 0.25vh 0.5vh;
-}
-
-#tableMain select, #tableMain input:not([type="checkbox"]), #tableMain textarea, #tableMain div {
- box-sizing: border-box;
- width: 100%;
- height: 100%;
-}
-
-#tableMain thead tr th, #tableMain tbody tr td {
- width: 20vh;
- min-width: 20vh;
- padding: 0 0.5vh;
-}
-#tableMain tbody tr td {
- height: 5vh;
- padding-top: 0.5vh;
-}
-#tableMain tbody tr:not(:last-of-type) td {
- padding-bottom: 0.5vh;
-}
-#tableMain thead tr th.active, #tableMain tbody tr td.active {
- width: 6vh;
- min-width: 6vh;
-}
-#tableMain tbody tr td.display_order, #tableMain thead tr th.display_order {
- width: 5vh;
- min-width: 5vh;
-}
diff --git a/static/css/lib/utils.css b/static/css/lib/utils.css
index e69de29b..d2aba3e8 100644
--- a/static/css/lib/utils.css
+++ b/static/css/lib/utils.css
@@ -0,0 +1,22 @@
+.text-center {
+ text-align: center;
+}
+
+.section-title {
+ font-size: 2rem;
+ margin-bottom: 1rem;
+}
+
+.section-subtitle {
+ margin-bottom: 2rem;
+}
+
+@media (max-width: 768px) {
+ .hero h1 {
+ font-size: 2.5rem;
+ }
+
+ .nav-links {
+ display: none;
+ }
+}
\ No newline at end of file
diff --git a/static/css/main.css b/static/css/main.css
index b56c8995..84180ab7 100644
--- a/static/css/main.css
+++ b/static/css/main.css
@@ -1,282 +1,33 @@
:root {
- /* Declare global variables */
- --c_purple: #5B29FF;
- --c_purple_pastel: #D1D1FF;
- --c_purple_light: #C6BDFF;
- --c_purple_dark: #4700B3;
- --c_blue: #0044FF;
- --c_blue_pastel: #B8E0FF;
- --c_blue_light: #73E8FF;
- --c_blue_dark: #003ADB;
-}
-
-html {
- height: 100%;
-}
-
-body {
- background-color: var(--background-color);
- color: var(--text-color);
- font-family: var(--font-family-base);
- font-family: Arial;
- padding: 0;
- margin: 0;
- border: 0;
- background: linear-gradient(to bottom right, var(--c_purple), #dc2430); /* var(--c_purple_pastel); */
- height: 100vh;
- max-height: 100%;
+ --primary: #2563eb;
+ --secondary: #1e40af;
+ --text: #1f2937;
+ --subheading: #4b5563;
+ --light: #f3f4f6;
}
* {
margin: 0;
-}
-
-script, link {
- display: none !important;
-}
-
-#pageBody {
- height: 69vh !important;
- padding: 1vh;
- padding-left: 1vw;
- padding-right: 1vw;
- margin: 1vh;
- margin-left: 0;
- margin-right: 0;
- border: 0;
- align-content: center;
- justify-content: flex-start;
- display: flex;
- flex-direction: column;
- align-items: flex-start;
- overflow-y: auto;
- overflow-x: hidden;
- position: absolute;
- width: 98vw;
-}
-
-.page-body > * {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: center;
- text-align: center;
- width: 100%;
- align-self: center;
- font-size: min(16px, calc(1vh * 4));
-}
-#pageBody > * > * {
- align-self: center;
- padding-top: 0.5vh;
- padding-bottom: 0.5vh;
- color: var(--c_purple_dark);
-}
-#pageBody > .card {
- height: fit-content;
- margin-top: 1vh;
-}
-#pageBody > .card:first-of-type{
- margin-top: 0vh;
- top: 0;
-}
-
-/* Create two unequal columns that floats next to each other *
-/* Left column *
-.leftcolumn {
- float: left;
- width: 70%;
- display: flex;
- flex-wrap: wrap;
- /* min-width: fit-content; *
- align-items: center;
- justify-content: center;
-}
-
-/* Right column *
-.rightcolumn {
- float: left;
- width: 30%;
- display: flex;
- flex-wrap: wrap;
- /* min-width: fit-content; only on store?? *
- /* background-color: #f1f1f1; *
- padding-left: 20px;
- height: fit-content;
- align-items: center;
- justify-content: center;
-}
-*/
-
-/* Fake image
-.fakeimg {
- background-color: var(--c_purple_light);
- width: 100%;
- padding: 20px;
-}
-*/
-
-
-/* header image */
-img.header-logo {
- max-height: 15vh;
- max-width: 20vw;
- cursor: pointer;
- border-radius: 5vh !important;
-}
-
-/* icon images */
-.img-icon {
- max-width: 16vh;
- max-height: 8vh;
- border-radius: 0;
-}
-
-/*
-.container-icon-label {
padding: 0;
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: center;
- text-align: center;
+ box-sizing: border-box;
+ font-family: system-ui, -apple-system, sans-serif;
}
-.container-icon-label > * {
- display: inline-flex;
- margin-left: 1vh;
- margin-right: 1vh;
-}
-
-.header > .container:first-of-type {
- max-width: 25%;
- justify-self: left;
-}
-.header > .container:last-of-type {
- max-width: 75%;
- justify-self: left;
-}
-*/
-
-/* Add a card effect for articles */
-.card {
- background-color: var(--c_purple_pastel);
- padding: 1vh;
- margin: 1vh;
- display: flex !important;
- flex-wrap: wrap;
- align-items: center;
- justify-content: center;
- text-align: center;
- border-radius: 4vh;
- /* min-width: fit-content; */
- position: relative;
- height: fit-content;
- max-width: 80vw;
- padding-left: 2.5vw;
- padding-right: 2.5vw;
-}
-
-.header.card {
- border-radius: 2.5vh;
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
+body {
+ line-height: 1.6;
+ color: var(--text);
}
.container {
- flex: 1;
- margin: 0px;
- align-items: flex-start;
- justify-content: flex-start;
- text-align: flex-start;
- /* max-width: 100%; */
- /* min-width: fit-content; */
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 0 1.5rem;
}
-.column {
- display: flex;
- flex-direction: column;
- align-items: center;
- margin: auto 0;
-}
-
-.row {
- display: flex;
- flex-direction: row;
- width: 100%;
- /* min-width: fit-content; */
-}
-
-.container > .card:first-of-type {
- margin-top: none;
-}
-
-
/*
-/* Responsive layout - when the screen is less than 800px wide, make the two columns stack on top of each other instead of next to each other *
-@media screen and (max-width: 800px) {
- .leftcolumn, .rightcolumn {
- width: 100%;
- /* padding: 0; *
- }
+.page_body {
+ position: fixed;
+ top:
}
-
-/* Responsive layout - when the screen is less than 400px wide, make the navigation links stack on top of each other instead of next to each other *
-@media screen and (max-width: 400px) {
- .topnav a {
- float: none;
- width: 100%;
- }
-}
-*/
-
-.container-input {
- padding: 1vh;
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: center;
- text-align: center;
-}
-
-.container-input > label {
- width: 100%;
- margin-bottom: 1vh;
- margin-top: 0;
-}
-
-.container-input:not(:nth-child(3)) > label {
- margin-top: 1vh;
-}
-
-.container-input > input, .container-input > textarea {
- border: 2px solid var(--c_purple);
- padding: 1vh;
-}
-
-.label-title {
- width: 100%;
-}
-
-
-ul {
- max-width: 90%;
- padding: 5px 0 10px 0;
-}
-li {
- text-align: left;
- font-size: 18px;
-}
-
-
-:not(input,textarea,select,button).dirty {
- background-color: var(--c_purple_dark);
-}
-input.dirty, textarea.dirty, select.dirty {
- border-color: var(--c_purple_dark);
-}
-
-
-#pageBody > *, button {
- font-size: min(12px, calc(1vh * 3));
-}
\ No newline at end of file
+*/
\ No newline at end of file
diff --git a/static/css/pages/core/admin_home.css b/static/css/pages/core/admin_home.css
deleted file mode 100644
index 1a767856..00000000
--- a/static/css/pages/core/admin_home.css
+++ /dev/null
@@ -1,7 +0,0 @@
-#pageBody > .card:first-of-type {
- width: 80%;
-}
-
-.container.row {
- width: auto;
-}
\ No newline at end of file
diff --git a/static/css/pages/core/contact.css b/static/css/pages/core/contact.css
index f97d13cb..11152a23 100644
--- a/static/css/pages/core/contact.css
+++ b/static/css/pages/core/contact.css
@@ -1,27 +1,173 @@
-
-#pageBody > .card:first-of-type{
- flex-grow: 1;
-}
-#pageBody > .card:last-of-type {
-}
-#pageBody > .card:not(:first-of-type) {
+/*
+h1, h2, h3 {
+ margin-bottom: 1rem;
+ align-self: center;
+ justify-self: center;
+ margin: 0 auto;
+ width: fit-content;
}
-#pageBody label {
- font-size: min(16px, calc(1vh * 4));
+section {
+ display: flex;
+ margin: 0 auto;
+ width: 100vw;
}
-#email {
- /* min-width: 40vw; */
- width: 40vw;
+.container {
+ display: flex;
+ flex-direction: column;
+ align-content: center;
}
-#name {
+.container-input {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+.container-input label {
+ width: 100%;
+ margin: 0 auto;
+}
+
+/* Contact Form Section * /
+.contact-form {
+ padding: 8rem 0 4rem;
+ background: linear-gradient(45deg, #f8fafc, #eff6ff);
+}
+
+.contact-form-content {
width: 50vw;
}
-#message {
- width: 60vw;
+
+.contact-form h1 {
+ font-size: 3rem;
+ line-height: 1.2;
+ margin-bottom: 1.5rem;
+ color: var(--text);
}
-input, textarea {
- max-width: 65vw;
+.contact-form p {
+ font-size: 1.25rem;
+ margin-bottom: 2rem;
+ color: var(--subheading);
+}
+
+table {
+ margin: 0 auto;
+}
+
+th.lhs,
+td.lhs {
+ min-width: 8vw;
+ max-width: 8vw;
+}
+
+th.rhs,
+td.rhs {
+ min-width: 36vw;
+ max-width: 36vw;
+}
+
+td input,
+td textarea {
+ width: 100%;
+}
+
+textarea {
+ resize: vertical;
+}
+
+.container-checkbox.receive_marketing {
+ margin-left: 22.25vw;
+}
+
+*/
+
+.contact-section {
+ padding: 2rem 2rem 4rem;
+}
+
+.contact-form {
+ max-width: 800px;
+ margin: 0 auto;
+ background: #fff;
+ padding: 2rem;
+ border-radius: 8px;
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+}
+
+.form-grid {
+ display: grid;
+ grid-template-columns: 200px 1fr;
+ gap: 1.5rem;
+ margin-bottom: 1.5rem;
+}
+
+.form-label {
+ padding-top: 0.5rem;
+ font-weight: 500;
+}
+
+.form-input {
+ width: 100%;
+ padding: 0.5rem;
+ border: 1px solid #d1d5db;
+ border-radius: 4px;
+ font-size: 1rem;
+}
+
+textarea.form-input {
+ min-height: 120px;
+}
+
+.marketing-consent {
+ margin: 2rem 0;
+ padding-left: 200px;
+}
+
+input[type="submit"] {
+ margin-left: 40%;
+ padding: 0.75rem 1.5rem;
+ background: #2563eb;
+ color: white;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 1rem;
+}
+
+input[type="submit"]:hover {
+ background: #1d4ed8;
+}
+
+.data-notice {
+ margin-top: 3rem;
+ padding: 1.5rem;
+ background: #f3f4f6;
+ border-radius: 4px;
+ font-size: 0.95rem;
+}
+
+.data-notice h3 {
+ margin-bottom: 1rem;
+ font-size: 1.1rem;
+}
+
+@media (max-width: 768px) {
+ .form-grid {
+ grid-template-columns: 1fr;
+ gap: 0.5rem;
+ }
+
+ .form-label {
+ padding-top: 0;
+ }
+
+ .marketing-consent {
+ padding-left: 0;
+ }
+
+ .submit-button {
+ margin-left: 0;
+ width: 100%;
+ }
}
\ No newline at end of file
diff --git a/static/css/pages/core/home.css b/static/css/pages/core/home.css
index 642e9327..7d5fa20d 100644
--- a/static/css/pages/core/home.css
+++ b/static/css/pages/core/home.css
@@ -1,35 +1,126 @@
-#pageBody > * > * {
- width: 100%;
-}
-#pageBody > * {
- height: 100%;
-}
-#pageBody > * :first-child{
- margin-top: 25vh;
-}
-#pageBody > * :last-child {
- margin-bottom: 35vh;
+/* Hero Section */
+.hero {
+ padding: 8rem 0 4rem;
+ background: linear-gradient(45deg, #f8fafc, #eff6ff);
}
-.img-demo {
- max-width: 50%;
- min-width: 500px;
+.hero-content {
+ max-width: 600px;
}
-.img-featured {
- width: 100%;
+.hero h1 {
+ font-size: 3rem;
+ line-height: 1.2;
+ margin-bottom: 1.5rem;
+ color: var(--text);
}
-/*
-img {
- background-image: url("/static/images/Tag_Molly1.png");
+.hero p {
+ font-size: 1.25rem;
+ margin-bottom: 2rem;
+ color: var(--subheading);
}
-*/
-#pageBody h2 {
- width: 100%;
+/* Services Section */
+.services {
+ padding: 6rem 0;
+ background: white;
}
-#pageBody button.navContact {
- width: fit-content;
+
+.services-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+ gap: 2rem;
+ margin-top: 3rem;
}
+
+.service-card {
+ padding: 2rem;
+ background: var(--light);
+ border-radius: 8px;
+ transition: transform 0.3s ease;
+}
+
+.service-card:hover {
+ transform: translateY(-5px);
+}
+
+/* Testimonial Section */
+.testimonial {
+ padding: 6rem 0;
+ background: var(--light);
+}
+
+.testimonial-card {
+ background: white;
+ padding: 2rem;
+ border-radius: 8px;
+ max-width: 800px;
+ margin: 3rem auto 0;
+ box-shadow: 0 4px 6px rgba(0,0,0,0.1);
+}
+
+/* Pricing Section */
+.pricing {
+ padding: 6rem 0;
+ background: white;
+}
+
+.pricing-card {
+ background: var(--light);
+ padding: 2rem;
+ border-radius: 8px;
+ text-align: center;
+ max-width: 400px;
+ margin: 3rem auto 0;
+}
+
+.price {
+ font-size: 2.5rem;
+ color: var(--primary);
+ font-weight: bold;
+ margin: 1rem 0;
+}
+
+/* CTA Section */
+.cta {
+ padding: 6rem 0;
+ background: var(--primary);
+ color: white;
+ text-align: center;
+}
+
+
+/* Animations */
+/* Fallback styles to ensure content is visible without JS */
+.reveal {
+ opacity: 1; /* Default visible state */
+}
+
+/* Only hide elements if browser supports Intersection Observer */
+@supports (animation-name: fade) {
+ .reveal {
+ opacity: 0;
+ }
+
+ .reveal.active {
+ animation: fade-up 0.8s ease-out forwards;
+ }
+}
+
+@keyframes fade-up {
+ 0% {
+ opacity: 0;
+ transform: translateY(30px);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.delay-1 { animation-delay: 0.1s; }
+.delay-2 { animation-delay: 0.2s; }
+.delay-3 { animation-delay: 0.3s; }
+.delay-4 { animation-delay: 0.4s; }
\ No newline at end of file
diff --git a/static/css/pages/core/services.css b/static/css/pages/core/services.css
deleted file mode 100644
index e65bae53..00000000
--- a/static/css/pages/core/services.css
+++ /dev/null
@@ -1,29 +0,0 @@
-#pageBody > .card {
- padding-left: 5vw;
- padding-right: 5vw;
- max-width: 80vw;
-}
-
-#pageBody .card h1,
-#pageBody .card h2,
-#pageBody .card p {
- width: 100%;
-}
-
-#pageBody .card p {
- font-size: min(16px, calc(1vh * 4));
-}
-
-table {
- left: 5vw;
- max-width: 70vw;
- width: fit-content !important;
-}
-
-table td {
- padding: 10px;
-}
-
-table th {
- font-size: min(16px, calc(1vh * 4));
-}
diff --git a/static/css/pages/store/home.css b/static/css/pages/store/home.css
deleted file mode 100644
index e69de29b..00000000
diff --git a/static/css/pages/store/manufacturing_purchase_order.css b/static/css/pages/store/manufacturing_purchase_order.css
deleted file mode 100644
index cd3dfd63..00000000
--- a/static/css/pages/store/manufacturing_purchase_order.css
+++ /dev/null
@@ -1,94 +0,0 @@
-
-#formFilters {
- width: 100vh;
-}
-
-#formFilters .container-input.filter.active {
- width: 8vh;
-}
-#formFilters .container-input.filter.date_from,
-#formFilters .container-input.filter.date_to {
- width: 8vh;
-}
-
-
-#tableMain tbody tr td.cost_total_local_vat_excl, #tableMain thead tr th.cost_total_local_vat_excl,
-#tableMain tbody tr td.cost_total_local_vat_incl, #tableMain thead tr th.cost_total_local_vat_incl {
- width: 10vh;
- min-width: 10vh;
-}
-
-#tableMain thead tr th.order_items.collapsed,
-#tableMain tbody tr td.order_items.collapsed {
- width: 15vh;
- min-width: 15vh;
-}
-#tableMain:has(tbody tr td.order_items table thead tr th.product_variations.collapsed) thead tr th.order_items,
-#tableMain:has(tbody tr td.order_items table thead tr th.product_variations.collapsed) tbody tr td.order_items {
- width: 100vh; /* 95vh */
- min-width: 100vh;
-}
-#tableMain thead tr th.order_items,
-#tableMain tbody tr td.order_items {
- width: 110vh;
- min-width: 110vh;
-}
-#tableMain tbody tr td.order_items table thead tr th, #tableMain tbody tr td.order_items table tbody tr td {
- width: 12vh;
- min-width: 12vh;
-}
-#tableMain tbody tr td.order_items table thead tr th.display_order, #tableMain tbody tr td.order_items table tbody tr td.display_order {
- width: 5vh;
- min-width: 5vh;
-}
-#tableMain tbody tr td.order_items table thead tr th.id_unit_measurement_quantity, #tableMain tbody tr td.order_items table tbody tr td.id_unit_measurement_quantity,
-#tableMain tbody tr td.order_items table thead tr th.unit_measurement_latency_manufacture, #tableMain tbody tr td.order_items table tbody tr td.unit_measurement_latency_manufacture {
- width: 6vh;
- min-width: 6vh;
-}
-
-#tableMain tbody tr td.order_items table thead tr th.product_variations.collapsed, #tableMain tbody tr td.order_items table tbody tr td.product_variations.collapsed {
- width: 10vh;
- min-width: 10vh;
-}
-#tableMain tbody tr td.order_items table thead tr th.product_variations, #tableMain tbody tr td.order_items table tbody tr td.product_variations {
- width: 20vh;
- min-width: 20vh;
-}
-#tableMain tbody tr td.order_items table tbody tr td.product_variations table thead tr th, #tableMain tbody tr td.order_items table tbody tr td.product_variations table tbody tr td {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain tbody tr td.order_items table tbody tr td.product_variations table thead tr th:last-of-type, #tableMain tbody tr td.order_items table tbody tr td.product_variations table tbody tr td:last-of-type {
- width: 4vh;
- min-width: 4vh;
-}
-
-#tableMain tbody tr td.order_items table thead tr th.quantity_used, #tableMain tbody tr td.order_items table tbody tr td.quantity_used,
-#tableMain tbody tr td.order_items table thead tr th.quantity_produced, #tableMain tbody tr td.order_items table tbody tr td.quantity_produced,
-#tableMain tbody tr td.order_items table thead tr th.latency_manufacture, #tableMain tbody tr td.order_items table tbody tr td.latency_manufacture {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain tbody tr td.order_items table thead tr th.active, #tableMain tbody tr td.order_items table tbody tr td.active,
-#tableMain tbody tr td.order_items table thead tr th.add, #tableMain tbody tr td.order_items table tbody tr td.delete {
- width: 4vh;
- min-width: 4vh;
-}
-
-#tableMain thead tr th.currency.collapsed, #tableMain tbody tr td.currency.collapsed {
- width: 9vh;
- min-width: 9vh;
-}
-#tableMain thead tr th.currency, #tableMain tbody tr td.currency {
- width: 11vh;
- min-width: 11vh;
-}
-
-#tableMain tbody tr td.cost_total_local_vat_excl, #tableMain thead tr th.cost_total_local_vat_excl,
-#tableMain tbody tr td.cost_total_local_vat_incl, #tableMain thead tr th.cost_total_local_vat_incl,
-#tableMain tbody tr td.price_total_local_vat_excl, #tableMain thead tr th.price_total_local_vat_excl,
-#tableMain tbody tr td.price_total_local_vat_incl, #tableMain thead tr th.price_total_local_vat_incl {
- width: 5vh;
- min-width: 5vh;
-}
\ No newline at end of file
diff --git a/static/css/pages/store/product_categories.css b/static/css/pages/store/product_categories.css
deleted file mode 100644
index 7d80d358..00000000
--- a/static/css/pages/store/product_categories.css
+++ /dev/null
@@ -1,62 +0,0 @@
-
-#formFilters {
- width: 50vh;
-}
-
-#formFilters .container {
- max-width: fit-content;
-}
-
-#formFilters .container-input.filter.is_not_empty {
- width: 10vh;
-}
-
-#formFilters .container-input.filter.active {
- width: 8vh;
-}
-
-#tableMain {
- max-width: min(calc(1vh * 79), calc(1vw * 90));
-}
-
-/*
-#tableMain thead tr th, #tableMain tbody tr td {
- margin-left: 1vh;
- margin-right: 1vh;
-}
-*/
-
-#tableMain tbody tr td.display_order, #tableMain thead tr th.display_order {
- width: 5vh;
- min-width: 5vh;
-}
-#tableMain tbody tr td.code, #tableMain thead tr th.code {
- width: 10vh;
- min-width: 10vh;
-}
-#tableMain tbody tr td.name, #tableMain thead tr th.name {
- width: 15vh;
- min-width: 15vh;
-}
-#tableMain tbody tr td.description, #tableMain thead tr th.description {
- width: 25vh;
- min-width: 25vh;
-}
-#tableMain tbody tr td.access_level, #tableMain thead tr th.access_level {
- width: 7vh;
- min-width: 7vh;
-}
-#tableMain tbody tr td.active, #tableMain thead tr th.active {
- width: 5vh;
- min-width: 5vh;
-}
-
-td > input, td > select, td > textarea, .container-input > input, .container-input > select, .container-input > textarea {
- border: 2px solid var(--c_purple);
- border-radius: 0.5vh;
-}
-
-#tableMain tbody tr td table thead tr th.id_variation_type, #tableMain tbody tr td table tbody tr td.id_variation_type, #tableMain tbody tr td table thead tr th.id_variation, #tableMain tbody tr td table tbody tr td.id_variation {
- width: 47.5%;
-}
-
diff --git a/static/css/pages/store/product_permutations.css b/static/css/pages/store/product_permutations.css
deleted file mode 100644
index bf8b4fa9..00000000
--- a/static/css/pages/store/product_permutations.css
+++ /dev/null
@@ -1,120 +0,0 @@
-
-#formFilters {
- width: 95vh;
-}
-
-#tableMain {
- max-width: 90vw;
-}
-#tableMain thead tr th.category, #tableMain tbody tr td.category {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain thead tr th.product, #tableMain tbody tr td.product {
- width: 10vh;
- min-width: 10vh;
-}
-#tableMain thead tr th.product_variations.collapsed, #tableMain tbody tr td.product_variations.collapsed {
- width: 10vh;
- min-width: 10vh;
- display: table-cell !important;
-}
-#tableMain thead tr th.product_variations, #tableMain tbody tr td.product_variations {
- width: 24vh;
- min-width: 24vh;
-}
-#tableMain tbody tr td.product_variations table thead tr th.product_variation_type, #tableMain tbody tr td.product_variations table tbody tr td.product_variation_type,
-#tableMain tbody tr td.product_variations table thead tr th.product_variation, #tableMain tbody tr td.product_variations table tbody tr td.product_variation {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain tbody tr td.product_variations table thead tr th.add, #tableMain tbody tr td.product_variations table tbody tr td.delete {
- width: 4vh;
- min-width: 4vh;
-}
-#tableMain thead tr th.description, #tableMain tbody tr td.description {
-}
-#tableMain thead tr th.quantity_stock, #tableMain tbody tr td.quantity_stock {
- width: 6vh;
- min-width: 6vh;
-}
-#tableMain thead tr th.quantity_min, #tableMain tbody tr td.quantity_min {
- width: 6vh;
- min-width: 6vh;
-}
-#tableMain thead tr th.quantity_max, #tableMain tbody tr td.quantity_max {
- width: 6vh;
- min-width: 6vh;
-}
-#tableMain thead tr th.count_unit_measurement_per_quantity_step, #tableMain tbody tr td.count_unit_measurement_per_quantity_step {
- width: 6vh;
- min-width: 6vh;
-}
-#tableMain thead tr th.id_unit_measurement_quantity, #tableMain tbody tr td.id_unit_measurement_quantity {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain thead tr th.is_subscription, #tableMain tbody tr td.is_subscription {
- width: 9vh;
- min-width: 9vh;
-}
-#tableMain thead tr th.count_interval_recurrence, #tableMain tbody tr td.count_interval_recurrence {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain thead tr th.id_unit_measurement_interval_recurrence, #tableMain tbody tr td.id_unit_measurement_interval_recurrence {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain thead tr th.id_stripe_product, #tableMain tbody tr td.id_stripe_product {
- width: 10vh;
- min-width: 10vh;
-}
-#tableMain thead tr th.does_expire_faster_once_unsealed, #tableMain tbody tr td.does_expire_faster_once_unsealed {
- width: 7vh;
- min-width: 7vh;
-}
-#tableMain thead tr th.count_interval_expiration_unsealed, #tableMain tbody tr td.count_interval_expiration_unsealed {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain thead tr th.id_unit_measurement_interval_expiration_unsealed, #tableMain tbody tr td.id_unit_measurement_interval_expiration_unsealed {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain thead tr th.cost_local, #tableMain tbody tr td.cost_local {
- width: 9vh;
- min-width: 9vh;
-}
-#tableMain thead tr th.id_currency_cost, #tableMain tbody tr td.id_currency_cost {
- width: 6vh;
- min-width: 6vh;
-}
-#tableMain thead tr th.profit_local_min, #tableMain tbody tr td.profit_local_min {
- width: 9vh;
- min-width: 9vh;
-}
-#tableMain thead tr th.latency_manufacture, #tableMain tbody tr td.latency_manufacture {
- width: 9vh;
- min-width: 9vh;
-}
-#tableMain thead tr th.active, #tableMain tbody tr td.active {
- width: 6vh;
- min-width: 6vh;
-}
-
-
-td > input, td > select, td > textarea, .container-input > input, .container-input > select, .container-input > textarea {
- border: 2px solid var(--c_purple);
- border-radius: 0.5vh;
-}
-
-#tableMain tbody tr td table thead tr th.id_variation_type, #tableMain tbody tr td table tbody tr td.id_variation_type, #tableMain tbody tr td table thead tr th.id_variation, #tableMain tbody tr td table tbody tr td.id_variation {
- width: 47.5%;
-}
-
-/*
-select.id_variation, select.id_variation_type {
- max-width: 40% !important;
-}
-*/
diff --git a/static/css/pages/store/product_variations.css b/static/css/pages/store/product_variations.css
deleted file mode 100644
index ff9c3cbd..00000000
--- a/static/css/pages/store/product_variations.css
+++ /dev/null
@@ -1,46 +0,0 @@
-
-/*
-#formFilters {
- width: 50vh;
-}
-*/
-
-
-#tableMain:has(thead tr th.product_variations.collapsed) {
- max-width: 66vh;
-}
-#tableMain {
- max-width: 97vh;
-}
-
-#tableMain tbody tr td.display_order, #tableMain thead tr th.display_order,
-#tableMain tbody tr td.active, #tableMain thead tr th.active {
- width: 6vh;
- min-width: 6vh;
-}
-#tableMain tbody tr td.code, #tableMain thead tr th.code,
-#tableMain tbody tr td.name, #tableMain thead tr th.name,
-#tableMain tbody tr td.name_plural, #tableMain thead tr th.name_plural {
- width: 12vh;
- min-width: 12vh;
-}
-
-#tableMain thead tr th.product_variations.collapsed, #tableMain tbody tr td.product_variations.collapsed {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain thead tr th.product_variations, #tableMain tbody tr td.product_variations {
- width: 41vh;
- min-width: 41vh;
-}
-
-#tableMain tbody tr td.product_variations table thead tr th.code, #tableMain tbody tr td.product_variations table tbody tr td.code,
-#tableMain tbody tr td.product_variations table thead tr th.name, #tableMain tbody tr td.product_variations table tbody tr td.name {
- width: 12vh;
- min-width: 12vh;
-}
-#tableMain tbody tr td.product_variations table thead tr th.display_order, #tableMain tbody tr td.product_variations table tbody tr td.display_order,
-#tableMain tbody tr td.product_variations table thead tr th.active, #tableMain tbody tr td.product_variations table tbody tr td.active {
- width: 6vh;
- min-width: 6vh;
-}
diff --git a/static/css/pages/store/products.css b/static/css/pages/store/products.css
deleted file mode 100644
index 9219df7c..00000000
--- a/static/css/pages/store/products.css
+++ /dev/null
@@ -1,56 +0,0 @@
-
-#formFilters {
- width: 50vh;
-}
-
-#formFilters .container {
- max-width: fit-content;
-}
-
-#formFilters .container-input.filter.is_not_empty {
- width: 10vh;
-}
-
-#formFilters .container-input.filter.active {
- width: 8vh;
-}
-
-
-#tableMain {
- max-width: min(calc(1vh * 65), calc(1vw * 90));
-}
-
-#tableMain tbody tr td.display_order, #tableMain thead tr th.display_order {
- width: 5vh;
- min-width: 5vh;
-}
-#tableMain tbody tr td.product_category, #tableMain thead tr th.product_category {
- width: 15vh;
- min-width: 15vh;
-}
-#tableMain tbody tr td.name, #tableMain thead tr th.name {
- width: 15vh;
- min-width: 15vh;
-}
-#tableMain thead tr th.has_variations, #tableMain tbody tr td.has_variations {
- width: 5vh;
- min-width: 5vh;
-}
-#tableMain tbody tr td.access_level, #tableMain thead tr th.access_level {
- width: 7vh;
- min-width: 7vh;
-}
-#tableMain tbody tr td.active, #tableMain thead tr th.active {
- width: 5vh;
- min-width: 5vh;
-}
-
-td > input, td > select, td > textarea, .container-input > input, .container-input > select, .container-input > textarea {
- border: 2px solid var(--c_purple);
- border-radius: 0.5vh;
-}
-
-#tableMain tbody tr td table thead tr th.id_variation_type, #tableMain tbody tr td table tbody tr td.id_variation_type, #tableMain tbody tr td table thead tr th.id_variation, #tableMain tbody tr td table tbody tr td.id_variation {
- width: 47.5%;
-}
-
diff --git a/static/css/pages/store/stock_items.css b/static/css/pages/store/stock_items.css
deleted file mode 100644
index f8330705..00000000
--- a/static/css/pages/store/stock_items.css
+++ /dev/null
@@ -1,87 +0,0 @@
-
-th, td {
- min-width: fit-content;
-}
-
-
-#tableMain {
- max-width: 90vw;
-}
-#tableMain thead tr th.product_category, #tableMain tbody tr td.product_category {
- width: 12vh;
- min-width: 12vh;
-}
-#tableMain thead tr th.product, #tableMain tbody tr td.product,
-#tableMain thead tr th.storage_location, #tableMain tbody tr td.storage_location {
- width: 10vh;
- min-width: 10vh;
-}
-
-#tableMain thead tr th.product_variations.collapsed, #tableMain tbody tr td.product_variations.collapsed {
- width: 10vh;
- min-width: 10vh;
- display: table-cell !important;
-}
-#tableMain thead tr th.product_variations, #tableMain tbody tr td.product_variations {
- width: 24vh;
- min-width: 24vh;
-}
-#tableMain tbody tr td.product_variations table thead tr th.product_variation_type, #tableMain tbody tr td.product_variations table tbody tr td.product_variation_type,
-#tableMain tbody tr td.product_variations table thead tr th.product_variation, #tableMain tbody tr td.product_variations table tbody tr td.product_variation {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain tbody tr td.product_variations table thead tr th.add, #tableMain tbody tr td.product_variations table tbody tr td.delete {
- width: 4vh;
- min-width: 4vh;
-}
-
-#tableMain thead tr th.id_currency_cost.collapsed, #tableMain tbody tr td.id_currency_cost.collapsed {
- width: 9vh;
- min-width: 9vh;
-}
-#tableMain thead tr th.id_currency_cost, #tableMain tbody tr td.id_currency_cost {
- width: 11vh;
- min-width: 11vh;
-}
-
-#tableMain thead tr th.cost_unit_local_vat_excl, #tableMain tbody tr td.cost_unit_local_vat_excl,
-#tableMain thead tr th.cost_unit_local_vat_incl, #tableMain tbody tr td.cost_unit_local_vat_incl {
- width: 9vh;
- min-width: 9vh;
-}
-
-#tableMain thead tr th.storage_location.collapsed, #tableMain tbody tr td.storage_location.collapsed {
- width: 10vh;
- min-width: 10vh;
-}
-#tableMain thead tr th.storage_location, #tableMain tbody tr td.storage_location {
- width: 20vh;
- min-width: 20vh;
-}
-#tableMain tbody tr td.storage_location table thead tr th,
-#tableMain tbody tr td.storage_location table tbody tr td {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain tbody tr td.storage_location table thead tr th:last-of-type,
-#tableMain tbody tr td.storage_location table tbody tr td:last-of-type {
- width: 4vh;
- min-width: 4vh;
-}
-
-#tableMain thead tr th.active, #tableMain tbody tr td.active,
-#tableMain thead tr th.is_sealed, #tableMain tbody tr td.is_sealed,
-#tableMain thead tr th.is_consumed, #tableMain tbody tr td.is_consumed {
- width: 6vh;
- min-width: 6vh;
-}
-
-#tableMain thead tr th.date_purchased, #tableMain tbody tr td.date_purchased,
-#tableMain thead tr th.date_received, #tableMain tbody tr td.date_received,
-#tableMain thead tr th.date_unsealed, #tableMain tbody tr td.date_unsealed,
-#tableMain thead tr th.date_expiration, #tableMain tbody tr td.date_expiration,
-#tableMain thead tr th.date_consumed, #tableMain tbody tr td.date_consumed {
- width: 15vh;
- min-width: 15vh;
-}
\ No newline at end of file
diff --git a/static/css/pages/store/supplier.css b/static/css/pages/store/supplier.css
deleted file mode 100644
index 25b14d44..00000000
--- a/static/css/pages/store/supplier.css
+++ /dev/null
@@ -1,59 +0,0 @@
-
-#formFilters {
- width: 50vh;
-}
-
-#formFilters .container-input.filter.active {
- width: 8vh;
-}
-
-#tableMain tbody tr td.name_company, #tableMain thead tr th.name_company,
-#tableMain tbody tr td.name_contact, #tableMain thead tr th.name_contact,
-#tableMain tbody tr td.department_contact, #tableMain thead tr th.department_contact,
-#tableMain tbody tr td.phone_number, #tableMain thead tr th.phone_number {
- width: 10vh;
- min-width: 10vh;
-}
-#tableMain tbody tr td.email, #tableMain thead tr th.email,
-#tableMain tbody tr td.website, #tableMain thead tr th.website {
- width: 15vh;
- min-width: 15vh;
-}
-
-#tableMain thead tr th.address.collapsed, #tableMain tbody tr td.address.collapsed {
- width: 9vh;
- min-width: 9vh;
- display: table-cell !important;
-}
-#tableMain thead tr th.address, #tableMain tbody tr td.address {
- width: 108vh;
- min-width: 108vh;
-}
-#tableMain tbody tr td.address table thead tr th.postcode, #tableMain tbody tr td.address table tbody tr td.postcode,
-#tableMain tbody tr td.address table thead tr th.address_line_1, #tableMain tbody tr td.address table tbody tr td.address_line_1,
-#tableMain tbody tr td.address table thead tr th.address_line_2, #tableMain tbody tr td.address table tbody tr td.address_line_2,
-#tableMain tbody tr td.address table thead tr th.city, #tableMain tbody tr td.address table tbody tr td.city,
-#tableMain tbody tr td.address table thead tr th.county, #tableMain tbody tr td.address table tbody tr td.county,
-#tableMain tbody tr td.address table thead tr th.region, #tableMain tbody tr td.address table tbody tr td.region {
- width: 15vh;
- min-width: 15vh;
-}
-#tableMain tbody tr td.address table thead tr th.active, #tableMain tbody tr td.address table tbody tr td.active,
-#tableMain tbody tr td.address table thead tr th.add, #tableMain tbody tr td.address table tbody tr td.delete {
- width: 5vh;
- min-width: 5vh;
-}
-
-#tableMain thead tr th.currency.collapsed, #tableMain tbody tr td.currency.collapsed {
- width: 9vh;
- min-width: 9vh;
-}
-#tableMain thead tr th.currency, #tableMain tbody tr td.currency {
- width: 11vh;
- min-width: 11vh;
-}
-
-#tableMain tbody tr td.active, #tableMain thead tr th.active {
- width: 5vh;
- min-width: 5vh;
-}
diff --git a/static/css/pages/store/supplier_purchase_order.css b/static/css/pages/store/supplier_purchase_order.css
deleted file mode 100644
index 97dbb219..00000000
--- a/static/css/pages/store/supplier_purchase_order.css
+++ /dev/null
@@ -1,101 +0,0 @@
-
-#formFilters {
- width: 100vh;
-}
-
-#formFilters .container-input.filter.active {
- width: 8vh;
-}
-#formFilters .container-input.filter.date_from,
-#formFilters .container-input.filter.date_to {
- width: 8vh;
-}
-
-#tableMain tbody tr td.supplier, #tableMain thead tr th.supplier {
- width: 15vh;
- min-width: 15vh;
-}
-
-#tableMain thead tr th.currency.collapsed, #tableMain tbody tr td.currency.collapsed {
- width: 9vh;
- min-width: 9vh;
-}
-#tableMain thead tr th.currency, #tableMain tbody tr td.currency {
- width: 11vh;
- min-width: 11vh;
-}
-
-#tableMain tbody tr td.cost_total_local_vat_excl, #tableMain thead tr th.cost_total_local_vat_excl,
-#tableMain tbody tr td.cost_total_local_vat_incl, #tableMain thead tr th.cost_total_local_vat_incl {
- width: 10vh;
- min-width: 10vh;
-}
-
-#tableMain tbody tr td.order_items, #tableMain thead tr th.items {
- width: 40vh;
- min-width: 40vh;
-}
-#tableMain thead tr th.order_items.collapsed, #tableMain tbody tr td.order_items.collapsed {
- width: 15vh;
- min-width: 15vh;
-}
-#tableMain:has(tbody tr td.order_items table thead tr th.product_variations.collapsed) thead tr th.order_items,
-#tableMain:has(tbody tr td.order_items table thead tr th.product_variations.collapsed) tbody tr td.order_items {
- width: 126vh;
- min-width: 126vh;
-}
-#tableMain thead tr th.order_items,
-#tableMain tbody tr td.order_items {
- width: 136vh;
- min-width: 136vh;
-}
-#tableMain tbody tr td.order_items table thead tr th, #tableMain tbody tr td.order_items table tbody tr td {
- width: 12vh;
- min-width: 12vh;
-}
-#tableMain tbody tr td.order_items table thead tr th.display_order, #tableMain tbody tr td.order_items table tbody tr td.display_order,
-#tableMain tbody tr td.order_items table thead tr th.add, #tableMain tbody tr td.order_items table tbody tr td.delete {
- width: 5vh;
- min-width: 5vh;
-}
-
-#tableMain tbody tr td.order_items table thead tr th.product_variations.collapsed, #tableMain tbody tr td.order_items table tbody tr td.product_variations.collapsed {
- width: 10vh;
- min-width: 10vh;
-}
-#tableMain tbody tr td.order_items table thead tr th.product_variations, #tableMain tbody tr td.order_items table tbody tr td.product_variations {
- width: 20vh;
- min-width: 20vh;
-}
-#tableMain tbody tr td.order_items table tbody tr td.product_variations table thead tr th, #tableMain tbody tr td.order_items table tbody tr td.product_variations table tbody tr td {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain tbody tr td.order_items table tbody tr td.product_variations table thead tr th:last-of-type, #tableMain tbody tr td.order_items table tbody tr td.product_variations table tbody tr td:last-of-type {
- width: 4vh;
- min-width: 4vh;
-}
-
-#tableMain tbody tr td.order_items table thead tr th.id_unit_measurement_quantity, #tableMain tbody tr td.order_items table tbody tr td.id_unit_measurement_quantity {
- width: 6vh;
- min-width: 6vh;
-}
-#tableMain tbody tr td.order_items table thead tr th.quantity_ordered, #tableMain tbody tr td.order_items table tbody tr td.quantity_ordered,
-#tableMain tbody tr td.order_items table thead tr th.quantity_received, #tableMain tbody tr td.order_items table tbody tr td.quantity_received,
-#tableMain tbody tr td.order_items table thead tr th.cost_total_local_vat_excl, #tableMain tbody tr td.order_items table tbody tr td.cost_total_local_vat_excl,
-#tableMain tbody tr td.order_items table thead tr th.cost_total_local_vat_incl, #tableMain tbody tr td.order_items table tbody tr td.cost_total_local_vat_incl,
-#tableMain tbody tr td.order_items table thead tr th.cost_unit_local_vat_excl, #tableMain tbody tr td.order_items table tbody tr td.cost_unit_local_vat_excl,
-#tableMain tbody tr td.order_items table thead tr th.cost_unit_local_vat_incl, #tableMain tbody tr td.order_items table tbody tr td.cost_unit_local_vat_incl,
-#tableMain tbody tr td.order_items table thead tr th.latency_delivery_days, #tableMain tbody tr td.order_items table tbody tr td.latency_delivery_days {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain tbody tr td.order_items table thead tr th.active, #tableMain tbody tr td.order_items table tbody tr td.active {
- width: 4vh;
- min-width: 4vh;
-}
-
-#tableMain tbody tr td.active, #tableMain thead tr th.active {
- width: 5vh;
- min-width: 5vh;
-}
diff --git a/static/css/sections/store.css b/static/css/sections/store.css
deleted file mode 100644
index a8c1974b..00000000
--- a/static/css/sections/store.css
+++ /dev/null
@@ -1,56 +0,0 @@
-
-.img-product {
- max-width: 20vh;
- max-height: 20vh;
- border-radius: 3vh;
- justify-self: left;
-}
-
-.img-thumbnail {
- max-width: 10vh;
- max-height: 10vh;
- border-radius: 3vh;
- justify-self: left;
-}
-
-.buttonAddToBasket {
- background-color: var(--c_blue_pastel);
- color: var(--c_blue_dark);
- border-color: var(--c_blue_dark);
-}
-
-#buttonCheckout, .buttonBuyNow {
- background-color: var(--c_purple_pastel);
- color: var(--c_purple_dark);
- border-color: var(--c_purple_dark);
-}
-
-.button-increment, .button-decrement {
- border: 2px solid darkgrey;
- background-color: lightgray;
- margin: 1vh 1vh;
- width: 2.5vh;
- height: 2.5vh;
- border-radius: 1.25vh;
- font-size: 2vh;
-}
-
-.container-input > input {
- padding: 0vh 1vh;
- border-radius: 0.5vh;
- max-width: 7vh;
-}
-
-#basket {
- max-width: 100%;
-}
-
-
-
-/* Right column */
-.rightcolumn {
- min-width: fit-content;
-}
-
-/* Main Table */
-
diff --git a/static/css/themes/light.css b/static/css/themes/light.css
index e46bc225..c1faf9af 100644
--- a/static/css/themes/light.css
+++ b/static/css/themes/light.css
@@ -1,45 +1 @@
-:root {
- --background-color: #ffffff;
- --text-color: #333333;
- --primary-color: #007bff;
- --secondary-color: #6c757d;
- --success-color: #28a745;
- --danger-color: #dc3545;
- --warning-color: #ffc107;
- --info-color: #17a2b8;
- --light-color: #f8f9fa;
- --dark-color: #343a40;
- --border-color: #dee2e6;
- --shadow-color: rgba(0, 0, 0, 0.1);
-
- /* Header */
- --header-bg: #f8f9fa;
- --header-text: #333333;
-
- /* Footer */
- --footer-bg: #f8f9fa;
- --footer-text: #6c757d;
-
- /* Navigation */
- --nav-bg: #ffffff;
- --nav-text: #333333;
- --nav-hover-bg: #f1f3f5;
- --nav-hover-text: #007bff;
-
- /* Buttons */
- --Button-primary-bg: #007bff;
- --Button-primary-text: #ffffff;
- --Button-secondary-bg: #6c757d;
- --Button-secondary-text: #ffffff;
-
- /* Forms */
- --input-bg: #ffffff;
- --input-border: #ced4da;
- --input-text: #495057;
- --input-focus-border: #80bdff;
-
- /* Cards */
- --card-bg: #ffffff;
- --card-border: #dee2e6;
- --card-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
-}
\ No newline at end of file
+/* Default */
\ No newline at end of file
diff --git a/static/dist/css/core_contact.bundle.css b/static/dist/css/core_contact.bundle.css
index b8d0d4ae..b3749ebd 100644
--- a/static/dist/css/core_contact.bundle.css
+++ b/static/dist/css/core_contact.bundle.css
@@ -1,29 +1,175 @@
-
-#pageBody > .card:first-of-type{
- flex-grow: 1;
-}
-#pageBody > .card:last-of-type {
-}
-#pageBody > .card:not(:first-of-type) {
+/*
+h1, h2, h3 {
+ margin-bottom: 1rem;
+ align-self: center;
+ justify-self: center;
+ margin: 0 auto;
+ width: fit-content;
}
-#pageBody label {
- font-size: min(16px, calc(1vh * 4));
+section {
+ display: flex;
+ margin: 0 auto;
+ width: 100vw;
}
-#email {
- /* min-width: 40vw; */
- width: 40vw;
+.container {
+ display: flex;
+ flex-direction: column;
+ align-content: center;
}
-#name {
+.container-input {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+.container-input label {
+ width: 100%;
+ margin: 0 auto;
+}
+
+/* Contact Form Section * /
+.contact-form {
+ padding: 8rem 0 4rem;
+ background: linear-gradient(45deg, #f8fafc, #eff6ff);
+}
+
+.contact-form-content {
width: 50vw;
}
-#message {
- width: 60vw;
+
+.contact-form h1 {
+ font-size: 3rem;
+ line-height: 1.2;
+ margin-bottom: 1.5rem;
+ color: var(--text);
}
-input, textarea {
- max-width: 65vw;
+.contact-form p {
+ font-size: 1.25rem;
+ margin-bottom: 2rem;
+ color: var(--subheading);
+}
+
+table {
+ margin: 0 auto;
+}
+
+th.lhs,
+td.lhs {
+ min-width: 8vw;
+ max-width: 8vw;
+}
+
+th.rhs,
+td.rhs {
+ min-width: 36vw;
+ max-width: 36vw;
+}
+
+td input,
+td textarea {
+ width: 100%;
+}
+
+textarea {
+ resize: vertical;
+}
+
+.container-checkbox.receive_marketing {
+ margin-left: 22.25vw;
+}
+
+*/
+
+.contact-section {
+ padding: 8rem 2rem 4rem;
+}
+
+.contact-form {
+ max-width: 800px;
+ margin: 0 auto;
+ background: #fff;
+ padding: 2rem;
+ border-radius: 8px;
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+}
+
+.form-grid {
+ display: grid;
+ grid-template-columns: 200px 1fr;
+ gap: 1.5rem;
+ margin-bottom: 1.5rem;
+}
+
+.form-label {
+ padding-top: 0.5rem;
+ font-weight: 500;
+}
+
+.form-input {
+ width: 100%;
+ padding: 0.5rem;
+ border: 1px solid #d1d5db;
+ border-radius: 4px;
+ font-size: 1rem;
+}
+
+textarea.form-input {
+ min-height: 120px;
+}
+
+.marketing-consent {
+ margin: 2rem 0;
+ padding-left: 200px;
+}
+
+input[type="submit"] {
+ margin-left: 40%;
+ padding: 0.75rem 1.5rem;
+ background: #2563eb;
+ color: white;
+ border: none;
+ border-radius: 4px;
+ cursor: pointer;
+ font-size: 1rem;
+}
+
+input[type="submit"]:hover {
+ background: #1d4ed8;
+}
+
+.data-notice {
+ margin-top: 3rem;
+ padding: 1.5rem;
+ background: #f3f4f6;
+ border-radius: 4px;
+ font-size: 0.95rem;
+}
+
+.data-notice h3 {
+ margin-bottom: 1rem;
+ font-size: 1.1rem;
+}
+
+@media (max-width: 768px) {
+ .form-grid {
+ grid-template-columns: 1fr;
+ gap: 0.5rem;
+ }
+
+ .form-label {
+ padding-top: 0;
+ }
+
+ .marketing-consent {
+ padding-left: 0;
+ }
+
+ .submit-button {
+ margin-left: 0;
+ width: 100%;
+ }
}
/*# sourceMappingURL=core_contact.bundle.css.map*/
\ No newline at end of file
diff --git a/static/dist/css/core_home.bundle.css b/static/dist/css/core_home.bundle.css
index d0514284..da36690b 100644
--- a/static/dist/css/core_home.bundle.css
+++ b/static/dist/css/core_home.bundle.css
@@ -1,38 +1,128 @@
-#pageBody > * > * {
- width: 100%;
-}
-#pageBody > * {
- height: 100%;
-}
-#pageBody > * :first-child{
- margin-top: 25vh;
-}
-#pageBody > * :last-child {
- margin-bottom: 35vh;
+/* Hero Section */
+.hero {
+ padding: 8rem 0 4rem;
+ background: linear-gradient(45deg, #f8fafc, #eff6ff);
}
-.img-demo {
- max-width: 50%;
- min-width: 500px;
+.hero-content {
+ max-width: 600px;
}
-.img-featured {
- width: 100%;
+.hero h1 {
+ font-size: 3rem;
+ line-height: 1.2;
+ margin-bottom: 1.5rem;
+ color: var(--text);
}
-/*
-img {
- background-image: url("/static/images/Tag_Molly1.png");
-}
-*/
-
-#pageBody h2 {
- width: 100%;
-}
-#pageBody button.navContact {
- width: fit-content;
+.hero p {
+ font-size: 1.25rem;
+ margin-bottom: 2rem;
+ color: var(--subheading);
}
+/* Services Section */
+.services {
+ padding: 6rem 0;
+ background: white;
+}
+
+.services-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+ gap: 2rem;
+ margin-top: 3rem;
+}
+
+.service-card {
+ padding: 2rem;
+ background: var(--light);
+ border-radius: 8px;
+ transition: transform 0.3s ease;
+}
+
+.service-card:hover {
+ transform: translateY(-5px);
+}
+
+/* Testimonial Section */
+.testimonial {
+ padding: 6rem 0;
+ background: var(--light);
+}
+
+.testimonial-card {
+ background: white;
+ padding: 2rem;
+ border-radius: 8px;
+ max-width: 800px;
+ margin: 3rem auto 0;
+ box-shadow: 0 4px 6px rgba(0,0,0,0.1);
+}
+
+/* Pricing Section */
+.pricing {
+ padding: 6rem 0;
+ background: white;
+}
+
+.pricing-card {
+ background: var(--light);
+ padding: 2rem;
+ border-radius: 8px;
+ text-align: center;
+ max-width: 400px;
+ margin: 3rem auto 0;
+}
+
+.price {
+ font-size: 2.5rem;
+ color: var(--primary);
+ font-weight: bold;
+ margin: 1rem 0;
+}
+
+/* CTA Section */
+.cta {
+ padding: 6rem 0;
+ background: var(--primary);
+ color: white;
+ text-align: center;
+}
+
+
+/* Animations */
+/* Fallback styles to ensure content is visible without JS */
+.reveal {
+ opacity: 1; /* Default visible state */
+}
+
+/* Only hide elements if browser supports Intersection Observer */
+@supports (animation-name: fade) {
+ .reveal {
+ opacity: 0;
+ }
+
+ .reveal.active {
+ animation: fade-up 0.8s ease-out forwards;
+ }
+}
+
+@keyframes fade-up {
+ 0% {
+ opacity: 0;
+ transform: translateY(30px);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.delay-1 { animation-delay: 0.1s; }
+.delay-2 { animation-delay: 0.2s; }
+.delay-3 { animation-delay: 0.3s; }
+.delay-4 { animation-delay: 0.4s; }
/*# sourceMappingURL=core_home.bundle.css.map*/
\ No newline at end of file
diff --git a/static/dist/css/main.bundle.css b/static/dist/css/main.bundle.css
index 4a91ab5c..72ffa405 100644
--- a/static/dist/css/main.bundle.css
+++ b/static/dist/css/main.bundle.css
@@ -1,716 +1,186 @@
:root {
- /* Declare global variables */
- --c_purple: #5B29FF;
- --c_purple_pastel: #D1D1FF;
- --c_purple_light: #C6BDFF;
- --c_purple_dark: #4700B3;
- --c_blue: #0044FF;
- --c_blue_pastel: #B8E0FF;
- --c_blue_light: #73E8FF;
- --c_blue_dark: #003ADB;
-}
-
-html {
- height: 100%;
-}
-
-body {
- background-color: var(--background-color);
- color: var(--text-color);
- font-family: var(--font-family-base);
- font-family: Arial;
- padding: 0;
- margin: 0;
- border: 0;
- background: linear-gradient(to bottom right, var(--c_purple), #dc2430); /* var(--c_purple_pastel); */
- height: 100vh;
- max-height: 100%;
+ --primary: #2563eb;
+ --secondary: #1e40af;
+ --text: #1f2937;
+ --subheading: #4b5563;
+ --light: #f3f4f6;
}
* {
margin: 0;
-}
-
-script, link {
- display: none !important;
-}
-
-#pageBody {
- height: 69vh !important;
- padding: 1vh;
- padding-left: 1vw;
- padding-right: 1vw;
- margin: 1vh;
- margin-left: 0;
- margin-right: 0;
- border: 0;
- align-content: center;
- justify-content: flex-start;
- display: flex;
- flex-direction: column;
- align-items: flex-start;
- overflow-y: auto;
- overflow-x: hidden;
- position: absolute;
- width: 98vw;
-}
-
-.page-body > * {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: center;
- text-align: center;
- width: 100%;
- align-self: center;
- font-size: min(16px, calc(1vh * 4));
-}
-#pageBody > * > * {
- align-self: center;
- padding-top: 0.5vh;
- padding-bottom: 0.5vh;
- color: var(--c_purple_dark);
-}
-#pageBody > .card {
- height: fit-content;
- margin-top: 1vh;
-}
-#pageBody > .card:first-of-type{
- margin-top: 0vh;
- top: 0;
-}
-
-/* Create two unequal columns that floats next to each other *
-/* Left column *
-.leftcolumn {
- float: left;
- width: 70%;
- display: flex;
- flex-wrap: wrap;
- /* min-width: fit-content; *
- align-items: center;
- justify-content: center;
-}
-
-/* Right column *
-.rightcolumn {
- float: left;
- width: 30%;
- display: flex;
- flex-wrap: wrap;
- /* min-width: fit-content; only on store?? *
- /* background-color: #f1f1f1; *
- padding-left: 20px;
- height: fit-content;
- align-items: center;
- justify-content: center;
-}
-*/
-
-/* Fake image
-.fakeimg {
- background-color: var(--c_purple_light);
- width: 100%;
- padding: 20px;
-}
-*/
-
-
-/* header image */
-img.header-logo {
- max-height: 15vh;
- max-width: 20vw;
- cursor: pointer;
- border-radius: 5vh !important;
-}
-
-/* icon images */
-.img-icon {
- max-width: 16vh;
- max-height: 8vh;
- border-radius: 0;
-}
-
-/*
-.container-icon-label {
padding: 0;
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: center;
- text-align: center;
+ box-sizing: border-box;
+ font-family: system-ui, -apple-system, sans-serif;
}
-.container-icon-label > * {
- display: inline-flex;
- margin-left: 1vh;
- margin-right: 1vh;
-}
-
-.header > .container:first-of-type {
- max-width: 25%;
- justify-self: left;
-}
-.header > .container:last-of-type {
- max-width: 75%;
- justify-self: left;
-}
-*/
-
-/* Add a card effect for articles */
-.card {
- background-color: var(--c_purple_pastel);
- padding: 1vh;
- margin: 1vh;
- display: flex !important;
- flex-wrap: wrap;
- align-items: center;
- justify-content: center;
- text-align: center;
- border-radius: 4vh;
- /* min-width: fit-content; */
- position: relative;
- height: fit-content;
- max-width: 80vw;
- padding-left: 2.5vw;
- padding-right: 2.5vw;
-}
-
-.header.card {
- border-radius: 2.5vh;
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
+body {
+ line-height: 1.6;
+ color: var(--text);
}
.container {
- flex: 1;
- margin: 0px;
- align-items: flex-start;
- justify-content: flex-start;
- text-align: flex-start;
- /* max-width: 100%; */
- /* min-width: fit-content; */
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 0 1.5rem;
}
-.column {
- display: flex;
- flex-direction: column;
- align-items: center;
- margin: auto 0;
-}
-
-.row {
- display: flex;
- flex-direction: row;
- width: 100%;
- /* min-width: fit-content; */
-}
-
-.container > .card:first-of-type {
- margin-top: none;
-}
-
-
/*
-/* Responsive layout - when the screen is less than 800px wide, make the two columns stack on top of each other instead of next to each other *
-@media screen and (max-width: 800px) {
- .leftcolumn, .rightcolumn {
- width: 100%;
- /* padding: 0; *
- }
-}
-
-/* Responsive layout - when the screen is less than 400px wide, make the navigation links stack on top of each other instead of next to each other *
-@media screen and (max-width: 400px) {
- .topnav a {
- float: none;
- width: 100%;
- }
-}
-*/
-
-.container-input {
- padding: 1vh;
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: center;
- text-align: center;
-}
-
-.container-input > label {
- width: 100%;
- margin-bottom: 1vh;
- margin-top: 0;
-}
-
-.container-input:not(:nth-child(3)) > label {
- margin-top: 1vh;
-}
-
-.container-input > input, .container-input > textarea {
- border: 2px solid var(--c_purple);
- padding: 1vh;
-}
-
-.label-title {
- width: 100%;
-}
-
-
-ul {
- max-width: 90%;
- padding: 5px 0 10px 0;
-}
-li {
- text-align: left;
- font-size: 18px;
-}
-
-
-:not(input,textarea,select,button).dirty {
- background-color: var(--c_purple_dark);
-}
-input.dirty, textarea.dirty, select.dirty {
- border-color: var(--c_purple_dark);
-}
-
-
-#pageBody > *, button {
- font-size: min(12px, calc(1vh * 3));
-}
-
-button, .button-submit, input[type="submit"] {
- font-size: 20px;
- font-weight: bold;
- border: 4px solid;
- border-radius: 2vh;
- padding: 1vh 2vh 1vh 2vh;
- margin: 0.5vh;
- background-color: var(--c_purple_pastel);
- color: var(--c_purple_dark);
- border-color: var(--c_purple_dark);
-}
-
-button.navContactUs {
- border: 4px solid var(--c_purple_dark);
- background-color: var(--c_purple_pastel);
- color: var(--c_purple_dark) !important;
- border-radius: 2vh;
- width: 180px !important;
-}
-
-button:hover, input[type="submit"]:hover {
- text-decoration: underline;
-}
-
-
-
-
-
-img, video {
- border-radius: 3vh;
-}
-
-
-h1 {
- font-size: min(24px, calc(1vh * 6));
-}
-
-h2 {
- font-size: min(20px, calc(1vh * 5));
-}
-
-h3 {
- font-size: min(16px, calc(1vh * 4));
- margin-top: 1vh;
-}
-
-h4 {
- font-size: 13px;
- margin: 1vh;
- text-align: center;
- margin-left: auto;
- margin-right: auto;
-}
-
-h5 {
- font-size: 11px;
- margin: 1vh;
-}
-
-
-
-
-
-/* Overlay modal */
-.overlay {
- /*
- display: none;
- */
+.page_body {
position: fixed;
- top: 15vh;
- right: 0;
- width: 100px;
- /* height: 50%; */
- background: var(--c_purple_pastel);
- justify-content: right;
- align-items: right;
- align-self: right;
- z-index: 999;
-}
-.overlay.expanded {
- display: block;
-}
-.collapsed {
- display: none;
-}
-
-/* Hamburger menu overlay */
-#buttonHamburger:hover {
- text-decoration: none;
-}
-#overlayHamburger {
- overflow-x: hidden;
- overflow-y: auto;
- max-height: 80%;
-}
-.hamburger {
- border: 2px solid var(--c_purple_dark);
- border-radius: 4px;
-}
-.hamburger:first-child {
- border-top-left-radius: 12px;
- border-top-right-radius: 12px;
-}
-.hamburger:last-child {
- border-bottom-left-radius: 12px;
- border-bottom-right-radius: 12px;
-}
-
-.hamburger > * {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: center;
- text-align: center;
- width: 100%;
- color: var(--c_purple_dark);
- font-weight: bold;
- font-size: 18px;
- /* height: 18px; */
-}
-.hamburger > :hover {
- background-color: var(--c_purple_light);
- color: var(--c_purple_dark);
-}
-.hamburger > * > * {
- width: 100%;
- /*
- margin-top: 4.5px;
- margin-bottom: 4.5px;
- */
-}
-.hamburger > .container {
- padding-top: 4.5px;
- padding-bottom: 4.5px;
-}
-
-#overlayHamburger .row *:hover {
- text-decoration: underline;
-}
-
-/* Confirm overlay */
-#overlayConfirm {
- position: absolute;
- left: 25vw;
- width: 50vw;
- height: 50vh;
-}
-
-#formFilters .container {
- max-width: fit-content;
-}
-
-thead, tbody {
- padding-top: 0px !important;
- padding-bottom: 0px !important;
-}
-
-th {
- background-color: var(--c_purple_pastel);
-}
-td {
- font-size: min(12px, calc(1vh * 3));
-}
-
-th, td {
- min-width: fit-content;
-}
-tr:not(:last-child) > td {
- border-bottom: 1px dashed var(--c_purple_dark);
-}
-td > table > tbody > tr > td {
- border: none !important;
-}
-th.collapsed, td.collapsed {
- display: table-cell !important;
-}
-td.dirty {
- background-color: var(--c_purple_dark);
-}
-td:not(.dirty) {
- /* color: var(--c_purple_dark); */
- background-color: var(--c_purple_pastel);
-}
-
-tr {
- min-height: 1px;
- border-bottom: 1px solid var(--c_purple_dark);
- border-top: 1px solid var(--c_purple_dark);
- background-color: transparent;
-}
-
-/*
-.row-new {
- visibility: hidden;
+ top:
}
*/
-
-table button {
- margin: 0.25vh;
- padding: 0.5vh 1vh;
+.button {
+ display: inline-block;
+ padding: 0.75rem 1.5rem;
+ border-radius: 6px;
+ text-decoration: none;
+ font-weight: 500;
+ transition: all 0.3s ease;
+ width: fit-content;
}
-table button.active {
- background-color: var(--c_purple_pastel);
+.button-primary {
+ background: var(--primary);
+ color: white;
}
-tr.delete, tr.delete > td {
- background-color: red;
+.button-primary:hover {
+ background: var(--secondary);
}
-table div {
+.button-light {
+ background: white;
+ color: var(--primary);
+}
+
+.button-light:hover {
+ background: var(--light);
+}
+
+.logo:hover{
+ cursor: pointer;
+}
+
+header {
+ background: white;
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+ /* position: fixed;
+ top: 0; */
+ width: 100%;
+ z-index: 1000;
+}
+
+.navbar {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 1rem 0;
+}
+
+.logo {
+ font-size: 1.5rem;
+ font-weight: bold;
+ color: var(--primary);
+}
+
+.nav-links {
+ display: flex;
+ gap: 2rem;
+}
+
+.nav-links a {
+ text-decoration: none;
+ color: var(--text);
+ font-weight: 500;
align-content: center;
}
-
-
-/* Navigation */
-.topnav {
- border-bottom-left-radius: 2.5vh;
- border-bottom-right-radius: 2.5vh;
- display: flex;
- flex-wrap: wrap;
- flex: 1;
- flex-direction: row;
- font-weight: bold;
- font-size: 1vh;
- max-height: 15vh;
- height: 15vh;
- align-items: flex-start;
-}
-.topnav a, .topnav label, .topnav p, .topnav h1 {
- float: left;
- display: flex;
+.nav-links a.button {
color: white;
- text-align: center;
+}
+
+.footer {
+ background: #1f2937;
+ color: #f3f4f6;
+ padding: 4rem 0 2rem;
+}
+
+.footer-content {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 2rem;
+ margin-bottom: 2rem;
+}
+
+.footer-section h3 {
+ color: #fff;
+ margin-bottom: 1rem;
+ font-size: 1.2rem;
+}
+
+.footer-section ul {
+ list-style: none;
+ padding: 0;
+}
+
+.footer-section ul li {
+ margin-bottom: 0.5rem;
+}
+
+.footer-section a {
+ color: #f3f4f6;
text-decoration: none;
- width: 100%;
- max-height: 15vh;
- font-weight: normal;
- justify-content: center;
-}
-.topnav a:hover {
- background-color: var(--c_purple_light);
- color: var(--c_purple_dark);
+ transition: color 0.3s ease;
}
-.topnav > .container {
- max-width: 50%;
- height: 100%;
- align-items: center;
- align-self: center;
- /* align-content: center; */
- /* width: fit-content; */
- display: flex;
+.footer-section a:hover {
+ color: #fff;
+ text-decoration: underline;
}
-.topnav select {
- padding: 1vh;
- margin: 1vh;
- border-radius: 1vh;
- /* background-color: var(--c_purple_light); */
- color: var(--c_purple_dark);
- border: 2px solid white;
- font-weight: bold;
+
+.footer-bottom {
+ border-top: 1px solid #374151;
+ padding-top: 2rem;
text-align: center;
-}
-.topnav select .collapsed {
- width: 5vw;
-}
-.topnav select .expanded {
- width: 25vw;
+ font-size: 0.9rem;
}
-.company-name {
- font-size: min(28px, calc(1vh * 7));
- color: white;
+.footer-bottom a {
+ color: aquamarine;
}
-@media screen and (max-width: 450px) {
- .company-name {
- font-size: min(24px, calc(1vh * 7));
+
+@media (max-width: 768px) {
+ .footer-content {
+ grid-template-columns: 1fr;
+ text-align: center;
}
}
-/* Page Filters */
-#formFilters * {
- font-size: 12px;
-}
-#formFilters .container {
- max-width: fit-content;
-}
-#formFilters .container-input {
- padding: 0 0.5vh;
-}
-
-#formFilters .container-input input {
- max-width: 5vh;
-}
-
-#formFilters .container-input.filter.active {
- width: 8vh;
-}
-#formFilters .container-input.filter.is_not_empty {
- width: 12vh;
-}
-
-button.collapsed {
- display: block;
- opacity: 0;
-}
-
-form.filter button.save, form.filter button.button-cancel {
- margin-top: 0;
- margin-bottom: 0;
-}
-form.filter button.save, form.filter button.button-cancel {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-/* Footer */
-.footer {
- padding: 1vh;
- padding-left: 1vw;
- padding-right: 1vw;
+.text-center {
text-align: center;
- margin: 0;
- height: 8vh !important;
- overflow-y: auto;
- background-color: var(--c_purple_pastel);
- border-top-left-radius: 2.5vh;
- border-top-right-radius: 2.5vh;
- position: absolute;
- /* top: 2.5vh; */
- bottom: 0;
- width: 98vw;
}
-.footer > h4, h5 {
- padding: 0;
- margin: 0;
+.section-title {
+ font-size: 2rem;
+ margin-bottom: 1rem;
}
-#tableMain {
- overflow-x: auto;
- padding: 1vh;
- max-width: 95vw; /* min(calc(1vh * 80), calc(1vw * 90)); */
- width: fit-content;
- margin: 1vh 2vh;
- align-items: normal;
- justify-content: normal;
+.section-subtitle {
+ margin-bottom: 2rem;
}
-#tableMain * {
- padding: 0.25vh 0.5vh;
-}
-
-#tableMain select, #tableMain input:not([type="checkbox"]), #tableMain textarea, #tableMain div {
- box-sizing: border-box;
- width: 100%;
- height: 100%;
-}
-
-#tableMain thead tr th, #tableMain tbody tr td {
- width: 20vh;
- min-width: 20vh;
- padding: 0 0.5vh;
-}
-#tableMain tbody tr td {
- height: 5vh;
- padding-top: 0.5vh;
-}
-#tableMain tbody tr:not(:last-of-type) td {
- padding-bottom: 0.5vh;
-}
-#tableMain thead tr th.active, #tableMain tbody tr td.active {
- width: 6vh;
- min-width: 6vh;
-}
-#tableMain tbody tr td.display_order, #tableMain thead tr th.display_order {
- width: 5vh;
- min-width: 5vh;
-}
-
-
-
-
-
-:root {
- --background-color: #ffffff;
- --text-color: #333333;
- --primary-color: #007bff;
- --secondary-color: #6c757d;
- --success-color: #28a745;
- --danger-color: #dc3545;
- --warning-color: #ffc107;
- --info-color: #17a2b8;
- --light-color: #f8f9fa;
- --dark-color: #343a40;
- --border-color: #dee2e6;
- --shadow-color: rgba(0, 0, 0, 0.1);
+@media (max-width: 768px) {
+ .hero h1 {
+ font-size: 2.5rem;
+ }
- /* Header */
- --header-bg: #f8f9fa;
- --header-text: #333333;
-
- /* Footer */
- --footer-bg: #f8f9fa;
- --footer-text: #6c757d;
-
- /* Navigation */
- --nav-bg: #ffffff;
- --nav-text: #333333;
- --nav-hover-bg: #f1f3f5;
- --nav-hover-text: #007bff;
-
- /* Buttons */
- --Button-primary-bg: #007bff;
- --Button-primary-text: #ffffff;
- --Button-secondary-bg: #6c757d;
- --Button-secondary-text: #ffffff;
-
- /* Forms */
- --input-bg: #ffffff;
- --input-border: #ced4da;
- --input-text: #495057;
- --input-focus-border: #80bdff;
-
- /* Cards */
- --card-bg: #ffffff;
- --card-border: #dee2e6;
- --card-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+ .nav-links {
+ display: none;
+ }
}
+/* Default */
+
/*# sourceMappingURL=main.bundle.css.map*/
\ No newline at end of file
diff --git a/static/dist/js/core_admin_home.bundle.js b/static/dist/js/core_admin_home.bundle.js
index b7f572da..6e543b60 100644
--- a/static/dist/js/core_admin_home.bundle.js
+++ b/static/dist/js/core_admin_home.bundle.js
@@ -2,7 +2,7 @@
/******/ "use strict";
/******/ var __webpack_modules__ = ({
-/***/ 497:
+/***/ 561:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -10,7 +10,7 @@
/***/ }),
-/***/ 647:
+/***/ 711:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -94,7 +94,7 @@
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ 780: 0,
-/******/ 564: 0
+/******/ 466: 0
/******/ };
/******/
/******/ // no chunk on demand loading
@@ -144,8 +144,8 @@
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
-/******/ __webpack_require__.O(undefined, [564], () => (__webpack_require__(647)))
-/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [564], () => (__webpack_require__(497)))
+/******/ __webpack_require__.O(undefined, [466], () => (__webpack_require__(711)))
+/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [466], () => (__webpack_require__(561)))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/
/******/ })()
diff --git a/static/dist/js/core_contact.bundle.js b/static/dist/js/core_contact.bundle.js
index f171a7ec..9d39c392 100644
--- a/static/dist/js/core_contact.bundle.js
+++ b/static/dist/js/core_contact.bundle.js
@@ -2,7 +2,7 @@
/******/ "use strict";
/******/ var __webpack_modules__ = ({
-/***/ 206:
+/***/ 278:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -10,7 +10,7 @@
/***/ }),
-/***/ 647:
+/***/ 711:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -94,7 +94,7 @@
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ 775: 0,
-/******/ 564: 0
+/******/ 466: 0
/******/ };
/******/
/******/ // no chunk on demand loading
@@ -144,8 +144,8 @@
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
-/******/ __webpack_require__.O(undefined, [564], () => (__webpack_require__(647)))
-/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [564], () => (__webpack_require__(206)))
+/******/ __webpack_require__.O(undefined, [466], () => (__webpack_require__(711)))
+/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [466], () => (__webpack_require__(278)))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/
/******/ })()
diff --git a/static/dist/js/core_home.bundle.js b/static/dist/js/core_home.bundle.js
index 81cafc5f..53bb722c 100644
--- a/static/dist/js/core_home.bundle.js
+++ b/static/dist/js/core_home.bundle.js
@@ -2,7 +2,7 @@
/******/ "use strict";
/******/ var __webpack_modules__ = ({
-/***/ 469:
+/***/ 805:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -10,7 +10,7 @@
/***/ }),
-/***/ 647:
+/***/ 711:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -94,7 +94,7 @@
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ 664: 0,
-/******/ 564: 0
+/******/ 466: 0
/******/ };
/******/
/******/ // no chunk on demand loading
@@ -144,8 +144,8 @@
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
-/******/ __webpack_require__.O(undefined, [564], () => (__webpack_require__(647)))
-/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [564], () => (__webpack_require__(469)))
+/******/ __webpack_require__.O(undefined, [466], () => (__webpack_require__(711)))
+/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [466], () => (__webpack_require__(805)))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/
/******/ })()
diff --git a/static/dist/js/core_services.bundle.js b/static/dist/js/core_services.bundle.js
index b26c5ab7..ea715ef1 100644
--- a/static/dist/js/core_services.bundle.js
+++ b/static/dist/js/core_services.bundle.js
@@ -2,7 +2,7 @@
/******/ "use strict";
/******/ var __webpack_modules__ = ({
-/***/ 396:
+/***/ 188:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -10,7 +10,7 @@
/***/ }),
-/***/ 647:
+/***/ 711:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -94,7 +94,7 @@
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ 405: 0,
-/******/ 564: 0
+/******/ 466: 0
/******/ };
/******/
/******/ // no chunk on demand loading
@@ -144,8 +144,8 @@
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
-/******/ __webpack_require__.O(undefined, [564], () => (__webpack_require__(647)))
-/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [564], () => (__webpack_require__(396)))
+/******/ __webpack_require__.O(undefined, [466], () => (__webpack_require__(711)))
+/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [466], () => (__webpack_require__(188)))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/
/******/ })()
diff --git a/static/dist/js/legal_accessibility_statement.bundle.js b/static/dist/js/legal_accessibility_statement.bundle.js
index 6a4f7c11..6412d1ae 100644
--- a/static/dist/js/legal_accessibility_statement.bundle.js
+++ b/static/dist/js/legal_accessibility_statement.bundle.js
@@ -2,7 +2,7 @@
/******/ "use strict";
/******/ var __webpack_modules__ = ({
-/***/ 132:
+/***/ 780:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -10,7 +10,7 @@
/***/ }),
-/***/ 807:
+/***/ 359:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -94,7 +94,7 @@
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ 841: 0,
-/******/ 830: 0
+/******/ 416: 0
/******/ };
/******/
/******/ // no chunk on demand loading
@@ -144,8 +144,8 @@
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
-/******/ __webpack_require__.O(undefined, [830], () => (__webpack_require__(807)))
-/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [830], () => (__webpack_require__(132)))
+/******/ __webpack_require__.O(undefined, [416], () => (__webpack_require__(359)))
+/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [416], () => (__webpack_require__(780)))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/
/******/ })()
diff --git a/static/dist/js/legal_license.bundle.js b/static/dist/js/legal_license.bundle.js
index 2c4f3a66..303e433f 100644
--- a/static/dist/js/legal_license.bundle.js
+++ b/static/dist/js/legal_license.bundle.js
@@ -2,7 +2,7 @@
/******/ "use strict";
/******/ var __webpack_modules__ = ({
-/***/ 527:
+/***/ 623:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -10,7 +10,7 @@
/***/ }),
-/***/ 807:
+/***/ 359:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -94,7 +94,7 @@
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ 690: 0,
-/******/ 830: 0
+/******/ 416: 0
/******/ };
/******/
/******/ // no chunk on demand loading
@@ -144,8 +144,8 @@
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
-/******/ __webpack_require__.O(undefined, [830], () => (__webpack_require__(807)))
-/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [830], () => (__webpack_require__(527)))
+/******/ __webpack_require__.O(undefined, [416], () => (__webpack_require__(359)))
+/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [416], () => (__webpack_require__(623)))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/
/******/ })()
diff --git a/static/dist/js/legal_privacy_policy.bundle.js b/static/dist/js/legal_privacy_policy.bundle.js
index 260c6aeb..fc95391f 100644
--- a/static/dist/js/legal_privacy_policy.bundle.js
+++ b/static/dist/js/legal_privacy_policy.bundle.js
@@ -2,7 +2,7 @@
/******/ "use strict";
/******/ var __webpack_modules__ = ({
-/***/ 649:
+/***/ 713:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -10,7 +10,7 @@
/***/ }),
-/***/ 807:
+/***/ 359:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -94,7 +94,7 @@
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ 364: 0,
-/******/ 830: 0
+/******/ 416: 0
/******/ };
/******/
/******/ // no chunk on demand loading
@@ -144,8 +144,8 @@
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
-/******/ __webpack_require__.O(undefined, [830], () => (__webpack_require__(807)))
-/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [830], () => (__webpack_require__(649)))
+/******/ __webpack_require__.O(undefined, [416], () => (__webpack_require__(359)))
+/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [416], () => (__webpack_require__(713)))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/
/******/ })()
diff --git a/static/dist/js/legal_retention_schedule.bundle.js b/static/dist/js/legal_retention_schedule.bundle.js
index 6faac6c5..1a032edc 100644
--- a/static/dist/js/legal_retention_schedule.bundle.js
+++ b/static/dist/js/legal_retention_schedule.bundle.js
@@ -2,7 +2,7 @@
/******/ "use strict";
/******/ var __webpack_modules__ = ({
-/***/ 954:
+/***/ 930:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -10,7 +10,7 @@
/***/ }),
-/***/ 807:
+/***/ 359:
/***/ (() => {
// extracted by mini-css-extract-plugin
@@ -94,7 +94,7 @@
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ 607: 0,
-/******/ 830: 0
+/******/ 416: 0
/******/ };
/******/
/******/ // no chunk on demand loading
@@ -144,8 +144,8 @@
/******/ // startup
/******/ // Load entry module and return exports
/******/ // This entry module depends on other loaded chunks and execution need to be delayed
-/******/ __webpack_require__.O(undefined, [830], () => (__webpack_require__(807)))
-/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [830], () => (__webpack_require__(954)))
+/******/ __webpack_require__.O(undefined, [416], () => (__webpack_require__(359)))
+/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [416], () => (__webpack_require__(930)))
/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
/******/
/******/ })()
diff --git a/static/dist/js/main.bundle.js b/static/dist/js/main.bundle.js
index b403cae4..18566f3b 100644
--- a/static/dist/js/main.bundle.js
+++ b/static/dist/js/main.bundle.js
@@ -1,18 +1,614 @@
/******/ (() => { // webpackBootstrap
-/******/ "use strict";
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+/******/ var __webpack_modules__ = ({
+
+/***/ 431:
+/***/ (function(module) {
+
+!function (e, t) {
+ true ? module.exports = t() : 0;
+}(this, function () {
+ return function (e) {
+ function t(o) {
+ if (n[o]) return n[o].exports;
+ var i = n[o] = {
+ exports: {},
+ id: o,
+ loaded: !1
+ };
+ return e[o].call(i.exports, i, i.exports, t), i.loaded = !0, i.exports;
+ }
+ var n = {};
+ return t.m = e, t.c = n, t.p = "dist/", t(0);
+ }([function (e, t, n) {
+ "use strict";
+
+ function o(e) {
+ return e && e.__esModule ? e : {
+ default: e
+ };
+ }
+ var i = Object.assign || function (e) {
+ for (var t = 1; t < arguments.length; t++) {
+ var n = arguments[t];
+ for (var o in n) Object.prototype.hasOwnProperty.call(n, o) && (e[o] = n[o]);
+ }
+ return e;
+ },
+ r = n(1),
+ a = (o(r), n(6)),
+ u = o(a),
+ c = n(7),
+ s = o(c),
+ f = n(8),
+ d = o(f),
+ l = n(9),
+ p = o(l),
+ m = n(10),
+ b = o(m),
+ v = n(11),
+ y = o(v),
+ g = n(14),
+ h = o(g),
+ w = [],
+ k = !1,
+ x = {
+ offset: 120,
+ delay: 0,
+ easing: "ease",
+ duration: 400,
+ disable: !1,
+ once: !1,
+ startEvent: "DOMContentLoaded",
+ throttleDelay: 99,
+ debounceDelay: 50,
+ disableMutationObserver: !1
+ },
+ j = function () {
+ var e = arguments.length > 0 && void 0 !== arguments[0] && arguments[0];
+ if (e && (k = !0), k) return w = (0, y.default)(w, x), (0, b.default)(w, x.once), w;
+ },
+ O = function () {
+ w = (0, h.default)(), j();
+ },
+ M = function () {
+ w.forEach(function (e, t) {
+ e.node.removeAttribute("data-aos"), e.node.removeAttribute("data-aos-easing"), e.node.removeAttribute("data-aos-duration"), e.node.removeAttribute("data-aos-delay");
+ });
+ },
+ S = function (e) {
+ return e === !0 || "mobile" === e && p.default.mobile() || "phone" === e && p.default.phone() || "tablet" === e && p.default.tablet() || "function" == typeof e && e() === !0;
+ },
+ _ = function (e) {
+ x = i(x, e), w = (0, h.default)();
+ var t = document.all && !window.atob;
+ return S(x.disable) || t ? M() : (x.disableMutationObserver || d.default.isSupported() || (console.info('\n aos: MutationObserver is not supported on this browser,\n code mutations observing has been disabled.\n You may have to call "refreshHard()" by yourself.\n '), x.disableMutationObserver = !0), document.querySelector("body").setAttribute("data-aos-easing", x.easing), document.querySelector("body").setAttribute("data-aos-duration", x.duration), document.querySelector("body").setAttribute("data-aos-delay", x.delay), "DOMContentLoaded" === x.startEvent && ["complete", "interactive"].indexOf(document.readyState) > -1 ? j(!0) : "load" === x.startEvent ? window.addEventListener(x.startEvent, function () {
+ j(!0);
+ }) : document.addEventListener(x.startEvent, function () {
+ j(!0);
+ }), window.addEventListener("resize", (0, s.default)(j, x.debounceDelay, !0)), window.addEventListener("orientationchange", (0, s.default)(j, x.debounceDelay, !0)), window.addEventListener("scroll", (0, u.default)(function () {
+ (0, b.default)(w, x.once);
+ }, x.throttleDelay)), x.disableMutationObserver || d.default.ready("[data-aos]", O), w);
+ };
+ e.exports = {
+ init: _,
+ refresh: j,
+ refreshHard: O
+ };
+ }, function (e, t) {},,,,, function (e, t) {
+ (function (t) {
+ "use strict";
+
+ function n(e, t, n) {
+ function o(t) {
+ var n = b,
+ o = v;
+ return b = v = void 0, k = t, g = e.apply(o, n);
+ }
+ function r(e) {
+ return k = e, h = setTimeout(f, t), M ? o(e) : g;
+ }
+ function a(e) {
+ var n = e - w,
+ o = e - k,
+ i = t - n;
+ return S ? j(i, y - o) : i;
+ }
+ function c(e) {
+ var n = e - w,
+ o = e - k;
+ return void 0 === w || n >= t || n < 0 || S && o >= y;
+ }
+ function f() {
+ var e = O();
+ return c(e) ? d(e) : void (h = setTimeout(f, a(e)));
+ }
+ function d(e) {
+ return h = void 0, _ && b ? o(e) : (b = v = void 0, g);
+ }
+ function l() {
+ void 0 !== h && clearTimeout(h), k = 0, b = w = v = h = void 0;
+ }
+ function p() {
+ return void 0 === h ? g : d(O());
+ }
+ function m() {
+ var e = O(),
+ n = c(e);
+ if (b = arguments, v = this, w = e, n) {
+ if (void 0 === h) return r(w);
+ if (S) return h = setTimeout(f, t), o(w);
+ }
+ return void 0 === h && (h = setTimeout(f, t)), g;
+ }
+ var b,
+ v,
+ y,
+ g,
+ h,
+ w,
+ k = 0,
+ M = !1,
+ S = !1,
+ _ = !0;
+ if ("function" != typeof e) throw new TypeError(s);
+ return t = u(t) || 0, i(n) && (M = !!n.leading, S = "maxWait" in n, y = S ? x(u(n.maxWait) || 0, t) : y, _ = "trailing" in n ? !!n.trailing : _), m.cancel = l, m.flush = p, m;
+ }
+ function o(e, t, o) {
+ var r = !0,
+ a = !0;
+ if ("function" != typeof e) throw new TypeError(s);
+ return i(o) && (r = "leading" in o ? !!o.leading : r, a = "trailing" in o ? !!o.trailing : a), n(e, t, {
+ leading: r,
+ maxWait: t,
+ trailing: a
+ });
+ }
+ function i(e) {
+ var t = "undefined" == typeof e ? "undefined" : c(e);
+ return !!e && ("object" == t || "function" == t);
+ }
+ function r(e) {
+ return !!e && "object" == ("undefined" == typeof e ? "undefined" : c(e));
+ }
+ function a(e) {
+ return "symbol" == ("undefined" == typeof e ? "undefined" : c(e)) || r(e) && k.call(e) == d;
+ }
+ function u(e) {
+ if ("number" == typeof e) return e;
+ if (a(e)) return f;
+ if (i(e)) {
+ var t = "function" == typeof e.valueOf ? e.valueOf() : e;
+ e = i(t) ? t + "" : t;
+ }
+ if ("string" != typeof e) return 0 === e ? e : +e;
+ e = e.replace(l, "");
+ var n = m.test(e);
+ return n || b.test(e) ? v(e.slice(2), n ? 2 : 8) : p.test(e) ? f : +e;
+ }
+ var c = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
+ return typeof e;
+ } : function (e) {
+ return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
+ },
+ s = "Expected a function",
+ f = NaN,
+ d = "[object Symbol]",
+ l = /^\s+|\s+$/g,
+ p = /^[-+]0x[0-9a-f]+$/i,
+ m = /^0b[01]+$/i,
+ b = /^0o[0-7]+$/i,
+ v = parseInt,
+ y = "object" == ("undefined" == typeof t ? "undefined" : c(t)) && t && t.Object === Object && t,
+ g = "object" == ("undefined" == typeof self ? "undefined" : c(self)) && self && self.Object === Object && self,
+ h = y || g || Function("return this")(),
+ w = Object.prototype,
+ k = w.toString,
+ x = Math.max,
+ j = Math.min,
+ O = function () {
+ return h.Date.now();
+ };
+ e.exports = o;
+ }).call(t, function () {
+ return this;
+ }());
+ }, function (e, t) {
+ (function (t) {
+ "use strict";
+
+ function n(e, t, n) {
+ function i(t) {
+ var n = b,
+ o = v;
+ return b = v = void 0, O = t, g = e.apply(o, n);
+ }
+ function r(e) {
+ return O = e, h = setTimeout(f, t), M ? i(e) : g;
+ }
+ function u(e) {
+ var n = e - w,
+ o = e - O,
+ i = t - n;
+ return S ? x(i, y - o) : i;
+ }
+ function s(e) {
+ var n = e - w,
+ o = e - O;
+ return void 0 === w || n >= t || n < 0 || S && o >= y;
+ }
+ function f() {
+ var e = j();
+ return s(e) ? d(e) : void (h = setTimeout(f, u(e)));
+ }
+ function d(e) {
+ return h = void 0, _ && b ? i(e) : (b = v = void 0, g);
+ }
+ function l() {
+ void 0 !== h && clearTimeout(h), O = 0, b = w = v = h = void 0;
+ }
+ function p() {
+ return void 0 === h ? g : d(j());
+ }
+ function m() {
+ var e = j(),
+ n = s(e);
+ if (b = arguments, v = this, w = e, n) {
+ if (void 0 === h) return r(w);
+ if (S) return h = setTimeout(f, t), i(w);
+ }
+ return void 0 === h && (h = setTimeout(f, t)), g;
+ }
+ var b,
+ v,
+ y,
+ g,
+ h,
+ w,
+ O = 0,
+ M = !1,
+ S = !1,
+ _ = !0;
+ if ("function" != typeof e) throw new TypeError(c);
+ return t = a(t) || 0, o(n) && (M = !!n.leading, S = "maxWait" in n, y = S ? k(a(n.maxWait) || 0, t) : y, _ = "trailing" in n ? !!n.trailing : _), m.cancel = l, m.flush = p, m;
+ }
+ function o(e) {
+ var t = "undefined" == typeof e ? "undefined" : u(e);
+ return !!e && ("object" == t || "function" == t);
+ }
+ function i(e) {
+ return !!e && "object" == ("undefined" == typeof e ? "undefined" : u(e));
+ }
+ function r(e) {
+ return "symbol" == ("undefined" == typeof e ? "undefined" : u(e)) || i(e) && w.call(e) == f;
+ }
+ function a(e) {
+ if ("number" == typeof e) return e;
+ if (r(e)) return s;
+ if (o(e)) {
+ var t = "function" == typeof e.valueOf ? e.valueOf() : e;
+ e = o(t) ? t + "" : t;
+ }
+ if ("string" != typeof e) return 0 === e ? e : +e;
+ e = e.replace(d, "");
+ var n = p.test(e);
+ return n || m.test(e) ? b(e.slice(2), n ? 2 : 8) : l.test(e) ? s : +e;
+ }
+ var u = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
+ return typeof e;
+ } : function (e) {
+ return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
+ },
+ c = "Expected a function",
+ s = NaN,
+ f = "[object Symbol]",
+ d = /^\s+|\s+$/g,
+ l = /^[-+]0x[0-9a-f]+$/i,
+ p = /^0b[01]+$/i,
+ m = /^0o[0-7]+$/i,
+ b = parseInt,
+ v = "object" == ("undefined" == typeof t ? "undefined" : u(t)) && t && t.Object === Object && t,
+ y = "object" == ("undefined" == typeof self ? "undefined" : u(self)) && self && self.Object === Object && self,
+ g = v || y || Function("return this")(),
+ h = Object.prototype,
+ w = h.toString,
+ k = Math.max,
+ x = Math.min,
+ j = function () {
+ return g.Date.now();
+ };
+ e.exports = n;
+ }).call(t, function () {
+ return this;
+ }());
+ }, function (e, t) {
+ "use strict";
+
+ function n(e) {
+ var t = void 0,
+ o = void 0,
+ i = void 0;
+ for (t = 0; t < e.length; t += 1) {
+ if (o = e[t], o.dataset && o.dataset.aos) return !0;
+ if (i = o.children && n(o.children)) return !0;
+ }
+ return !1;
+ }
+ function o() {
+ return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
+ }
+ function i() {
+ return !!o();
+ }
+ function r(e, t) {
+ var n = window.document,
+ i = o(),
+ r = new i(a);
+ u = t, r.observe(n.documentElement, {
+ childList: !0,
+ subtree: !0,
+ removedNodes: !0
+ });
+ }
+ function a(e) {
+ e && e.forEach(function (e) {
+ var t = Array.prototype.slice.call(e.addedNodes),
+ o = Array.prototype.slice.call(e.removedNodes),
+ i = t.concat(o);
+ if (n(i)) return u();
+ });
+ }
+ Object.defineProperty(t, "__esModule", {
+ value: !0
+ });
+ var u = function () {};
+ t.default = {
+ isSupported: i,
+ ready: r
+ };
+ }, function (e, t) {
+ "use strict";
+
+ function n(e, t) {
+ if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
+ }
+ function o() {
+ return navigator.userAgent || navigator.vendor || window.opera || "";
+ }
+ Object.defineProperty(t, "__esModule", {
+ value: !0
+ });
+ var i = function () {
+ function e(e, t) {
+ for (var n = 0; n < t.length; n++) {
+ var o = t[n];
+ o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, o.key, o);
+ }
+ }
+ return function (t, n, o) {
+ return n && e(t.prototype, n), o && e(t, o), t;
+ };
+ }(),
+ r = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,
+ a = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,
+ u = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i,
+ c = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i,
+ s = function () {
+ function e() {
+ n(this, e);
+ }
+ return i(e, [{
+ key: "phone",
+ value: function () {
+ var e = o();
+ return !(!r.test(e) && !a.test(e.substr(0, 4)));
+ }
+ }, {
+ key: "mobile",
+ value: function () {
+ var e = o();
+ return !(!u.test(e) && !c.test(e.substr(0, 4)));
+ }
+ }, {
+ key: "tablet",
+ value: function () {
+ return this.mobile() && !this.phone();
+ }
+ }]), e;
+ }();
+ t.default = new s();
+ }, function (e, t) {
+ "use strict";
+
+ Object.defineProperty(t, "__esModule", {
+ value: !0
+ });
+ var n = function (e, t, n) {
+ var o = e.node.getAttribute("data-aos-once");
+ t > e.position ? e.node.classList.add("aos-animate") : "undefined" != typeof o && ("false" === o || !n && "true" !== o) && e.node.classList.remove("aos-animate");
+ },
+ o = function (e, t) {
+ var o = window.pageYOffset,
+ i = window.innerHeight;
+ e.forEach(function (e, r) {
+ n(e, i + o, t);
+ });
+ };
+ t.default = o;
+ }, function (e, t, n) {
+ "use strict";
+
+ function o(e) {
+ return e && e.__esModule ? e : {
+ default: e
+ };
+ }
+ Object.defineProperty(t, "__esModule", {
+ value: !0
+ });
+ var i = n(12),
+ r = o(i),
+ a = function (e, t) {
+ return e.forEach(function (e, n) {
+ e.node.classList.add("aos-init"), e.position = (0, r.default)(e.node, t.offset);
+ }), e;
+ };
+ t.default = a;
+ }, function (e, t, n) {
+ "use strict";
+
+ function o(e) {
+ return e && e.__esModule ? e : {
+ default: e
+ };
+ }
+ Object.defineProperty(t, "__esModule", {
+ value: !0
+ });
+ var i = n(13),
+ r = o(i),
+ a = function (e, t) {
+ var n = 0,
+ o = 0,
+ i = window.innerHeight,
+ a = {
+ offset: e.getAttribute("data-aos-offset"),
+ anchor: e.getAttribute("data-aos-anchor"),
+ anchorPlacement: e.getAttribute("data-aos-anchor-placement")
+ };
+ switch (a.offset && !isNaN(a.offset) && (o = parseInt(a.offset)), a.anchor && document.querySelectorAll(a.anchor) && (e = document.querySelectorAll(a.anchor)[0]), n = (0, r.default)(e).top, a.anchorPlacement) {
+ case "top-bottom":
+ break;
+ case "center-bottom":
+ n += e.offsetHeight / 2;
+ break;
+ case "bottom-bottom":
+ n += e.offsetHeight;
+ break;
+ case "top-center":
+ n += i / 2;
+ break;
+ case "bottom-center":
+ n += i / 2 + e.offsetHeight;
+ break;
+ case "center-center":
+ n += i / 2 + e.offsetHeight / 2;
+ break;
+ case "top-top":
+ n += i;
+ break;
+ case "bottom-top":
+ n += e.offsetHeight + i;
+ break;
+ case "center-top":
+ n += e.offsetHeight / 2 + i;
+ }
+ return a.anchorPlacement || a.offset || isNaN(t) || (o = t), n + o;
+ };
+ t.default = a;
+ }, function (e, t) {
+ "use strict";
+
+ Object.defineProperty(t, "__esModule", {
+ value: !0
+ });
+ var n = function (e) {
+ for (var t = 0, n = 0; e && !isNaN(e.offsetLeft) && !isNaN(e.offsetTop);) t += e.offsetLeft - ("BODY" != e.tagName ? e.scrollLeft : 0), n += e.offsetTop - ("BODY" != e.tagName ? e.scrollTop : 0), e = e.offsetParent;
+ return {
+ top: n,
+ left: t
+ };
+ };
+ t.default = n;
+ }, function (e, t) {
+ "use strict";
+
+ Object.defineProperty(t, "__esModule", {
+ value: !0
+ });
+ var n = function (e) {
+ return e = e || document.querySelectorAll("[data-aos]"), Array.prototype.map.call(e, function (e) {
+ return {
+ node: e
+ };
+ });
+ };
+ t.default = n;
+ }]);
+});
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/compat get default export */
+/******/ (() => {
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = (module) => {
+/******/ var getter = module && module.__esModule ?
+/******/ () => (module['default']) :
+/******/ () => (module);
+/******/ __webpack_require__.d(getter, { a: getter });
+/******/ return getter;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/define property getters */
+/******/ (() => {
+/******/ // define getter functions for harmony exports
+/******/ __webpack_require__.d = (exports, definition) => {
+/******/ for(var key in definition) {
+/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ }
+/******/ }
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/************************************************************************/
+// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
+"use strict";
// UNUSED EXPORTS: default
-;// CONCATENATED MODULE: ./static/js/lib/validation.js
+;// ./static/js/lib/validation.js
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-var validation_Validation = /*#__PURE__*/function () {
+var Validation = /*#__PURE__*/function () {
function Validation() {
_classCallCheck(this, Validation);
}
@@ -158,7 +754,7 @@ var validation_Validation = /*#__PURE__*/function () {
}]);
}();
-;// CONCATENATED MODULE: ./static/js/dom.js
+;// ./static/js/dom.js
function dom_typeof(o) { "@babel/helpers - typeof"; return dom_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, dom_typeof(o); }
function _defineProperty(e, r, t) { return (r = dom_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function dom_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
@@ -210,7 +806,7 @@ var DOM = /*#__PURE__*/function () {
}, {
key: "setElementValueCurrentIfEmpty",
value: function setElementValueCurrentIfEmpty(element, data) {
- if (validation_Validation.isEmpty(DOM.getElementValueCurrent(element))) {
+ if (Validation.isEmpty(DOM.getElementValueCurrent(element))) {
DOM.setElementValueCurrent(element, data);
}
}
@@ -222,7 +818,7 @@ var DOM = /*#__PURE__*/function () {
}, {
key: "getRowFromElement",
value: function getRowFromElement(element, flagRow) {
- var selector = validation_Validation.isEmpty(flagRow) ? 'tr' : 'tr.' + flagRow;
+ var selector = Validation.isEmpty(flagRow) ? 'tr' : 'tr.' + flagRow;
return element.closest(selector);
}
}, {
@@ -241,7 +837,7 @@ var DOM = /*#__PURE__*/function () {
key: "convertForm2JSON",
value: function convertForm2JSON(elementForm) {
var dataForm = {};
- if (validation_Validation.isEmpty(elementForm)) {
+ if (Validation.isEmpty(elementForm)) {
return dataForm;
}
var containersFilter = elementForm.querySelectorAll('.' + flagContainerInput + '.' + flagFilter);
@@ -312,7 +908,7 @@ var DOM = /*#__PURE__*/function () {
key: "getElementValueCurrent",
value: function getElementValueCurrent(element) {
var returnVal = '';
- if (!validation_Validation.isEmpty(element)) {
+ if (!Validation.isEmpty(element)) {
if (element.type === "checkbox") {
returnVal = element.checked;
}
@@ -330,15 +926,16 @@ var DOM = /*#__PURE__*/function () {
returnVal = element.textContent;
}
}
- if (validation_Validation.isEmpty(returnVal)) returnVal = '';
+ if (Validation.isEmpty(returnVal)) returnVal = '';
return returnVal;
}
}, {
key: "getElementAttributeValueCurrent",
value: function getElementAttributeValueCurrent(element) {
- if (validation_Validation.isEmpty(element)) return null;
+ debugger;
+ if (Validation.isEmpty(element)) return null;
return element.getAttribute(attrValueCurrent);
- if (!validation_Validation.isEmpty(value) && element.type === "checkbox") {
+ if (!Validation.isEmpty(value) && element.type === "checkbox") {
value = value === 'true';
}
return value;
@@ -346,9 +943,9 @@ var DOM = /*#__PURE__*/function () {
}, {
key: "getElementAttributeValuePrevious",
value: function getElementAttributeValuePrevious(element) {
- if (validation_Validation.isEmpty(element)) return null;
+ if (Validation.isEmpty(element)) return null;
return element.getAttribute(attrValuePrevious);
- if (!validation_Validation.isEmpty(value) && element.type === "checkbox") {
+ if (!Validation.isEmpty(value) && element.type === "checkbox") {
value = value === 'true';
}
return value;
@@ -412,7 +1009,7 @@ var DOM = /*#__PURE__*/function () {
}, {
key: "createOption",
value: function createOption(optionJson) {
- if (validation_Validation.isEmpty(optionJson)) optionJson = {
+ if (Validation.isEmpty(optionJson)) optionJson = {
text: 'Select',
value: 0
};
@@ -425,7 +1022,7 @@ var DOM = /*#__PURE__*/function () {
}]);
}();
-;// CONCATENATED MODULE: ./static/js/lib/events.js
+;// ./static/js/lib/events.js
function events_typeof(o) { "@babel/helpers - typeof"; return events_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, events_typeof(o); }
function events_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function events_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, events_toPropertyKey(o.key), o); } }
@@ -448,7 +1045,7 @@ var Events = /*#__PURE__*/function () {
}]);
}();
-;// CONCATENATED MODULE: ./static/js/lib/local_storage.js
+;// ./static/js/lib/local_storage.js
function local_storage_typeof(o) { "@babel/helpers - typeof"; return local_storage_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, local_storage_typeof(o); }
function local_storage_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function local_storage_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, local_storage_toPropertyKey(o.key), o); } }
@@ -524,7 +1121,448 @@ var LocalStorage = /*#__PURE__*/function () {
}]);
}();
-;// CONCATENATED MODULE: ./static/js/api.js
+;// ./static/js/components/common/temporary/overlay_confirm.js
+function overlay_confirm_typeof(o) { "@babel/helpers - typeof"; return overlay_confirm_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, overlay_confirm_typeof(o); }
+function overlay_confirm_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function overlay_confirm_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, overlay_confirm_toPropertyKey(o.key), o); } }
+function overlay_confirm_createClass(e, r, t) { return r && overlay_confirm_defineProperties(e.prototype, r), t && overlay_confirm_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function overlay_confirm_toPropertyKey(t) { var i = overlay_confirm_toPrimitive(t, "string"); return "symbol" == overlay_confirm_typeof(i) ? i : i + ""; }
+function overlay_confirm_toPrimitive(t, r) { if ("object" != overlay_confirm_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != overlay_confirm_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var OverlayConfirm = /*#__PURE__*/function () {
+ function OverlayConfirm() {
+ overlay_confirm_classCallCheck(this, OverlayConfirm);
+ }
+ return overlay_confirm_createClass(OverlayConfirm, null, [{
+ key: "hookup",
+ value: function hookup(callbackSuccess) {
+ Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagCancel, flagInitialised, function (buttonCancel) {
+ buttonCancel.addEventListener('click', function () {
+ var overlay = document.querySelector(idOverlayConfirm);
+ overlay.style.visibility = 'hidden';
+ });
+ });
+ Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagSubmit, flagInitialised, function (buttonConfirm) {
+ buttonConfirm.addEventListener('click', function () {
+ var overlay = document.querySelector(idOverlayConfirm);
+ var textarea = overlay.querySelector('textarea');
+ overlay.style.visibility = 'hidden';
+ callbackSuccess(textarea.value);
+ });
+ });
+ }
+ }, {
+ key: "show",
+ value: function show() {
+ var overlay = document.querySelector(idOverlayConfirm);
+ overlay.classList.remove(flagCollapsed);
+ overlay.style.visibility = 'visible';
+ }
+ }]);
+}();
+
+;// ./static/js/pages/base.js
+function base_typeof(o) { "@babel/helpers - typeof"; return base_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, base_typeof(o); }
+function base_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function base_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, base_toPropertyKey(o.key), o); } }
+function base_createClass(e, r, t) { return r && base_defineProperties(e.prototype, r), t && base_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function base_toPropertyKey(t) { var i = base_toPrimitive(t, "string"); return "symbol" == base_typeof(i) ? i : i + ""; }
+function base_toPrimitive(t, r) { if ("object" != base_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != base_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+
+
+
+
+
+var BasePage = /*#__PURE__*/function () {
+ function BasePage(router) {
+ base_classCallCheck(this, BasePage);
+ if (!router) {
+ throw new Error("Router is required");
+ } else {
+ if (_verbose) {
+ console.log("initialising with router: ", router);
+ }
+ }
+ this.router = router;
+ this.title = titlePageCurrent;
+ // this.hash = hashPageCurrent;
+ if (this.constructor === BasePage) {
+ throw new Error("Cannot instantiate abstract class");
+ }
+ if (!this.constructor.hash) {
+ throw new Error("Class ".concat(this.constructor.name, " must have a static hash attribute."));
+ }
+ }
+ return base_createClass(BasePage, [{
+ key: "initialize",
+ value: function initialize() {
+ throw new Error("Method 'initialize()' must be implemented.");
+ }
+ }, {
+ key: "sharedInitialize",
+ value: function sharedInitialize() {
+ this.logInitialisation();
+ this.hookupCommonElements();
+ }
+ }, {
+ key: "logInitialisation",
+ value: function logInitialisation() {
+ if (_verbose) {
+ console.log('Initializing ' + this.title + ' page');
+ }
+ }
+ }, {
+ key: "hookupCommonElements",
+ value: function hookupCommonElements() {
+ // hookupVideos();
+ this.hookupLogos();
+ this.hookupOverlays();
+ }
+ }, {
+ key: "hookupEventHandler",
+ value: function hookupEventHandler(eventType, selector, callback) {
+ Events.initialiseEventHandler(selector, flagInitialised, function (element) {
+ element.addEventListener(eventType, function (event) {
+ event.stopPropagation();
+ callback(event, element);
+ });
+ });
+ }
+ }, {
+ key: "hookupLogos",
+ value: function hookupLogos() {
+ var _this = this;
+ this.hookupEventHandler("click", "." + flagImageLogo + "," + "." + flagLogo, function (event, element) {
+ if (_verbose) {
+ console.log('clicking logo');
+ }
+ _this.router.navigateToHash(hashPageHome);
+ });
+ }
+ }, {
+ key: "hookupOverlays",
+ value: function hookupOverlays() {
+ this.hookupOverlayFromId(idOverlayConfirm);
+ this.hookupOverlayFromId(idOverlayError);
+ }
+ }, {
+ key: "hookupOverlayFromId",
+ value: function hookupOverlayFromId(idOverlay) {
+ Events.initialiseEventHandler(idOverlay, flagInitialised, function (overlay) {
+ overlay.querySelector('button.' + flagCancel).addEventListener("click", function (event) {
+ event.stopPropagation();
+ overlay.style.display = 'none';
+ });
+ });
+ }
+ }, {
+ key: "hookupButtonSave",
+ value: function hookupButtonSave() {
+ var _this2 = this;
+ Events.initialiseEventHandler('form.' + flagFilter + ' button.' + flagSave, flagInitialised, function (button) {
+ button.addEventListener("click", function (event) {
+ event.stopPropagation();
+ if (_verbose) {
+ console.log('saving page: ', _this2.title);
+ }
+ OverlayConfirm.show();
+ });
+ // button.classList.add(flagCollapsed);
+ });
+ }
+ }, {
+ key: "leave",
+ value: function leave() {
+ if (_verbose) {
+ console.log('Leaving ' + this.title + ' page');
+ }
+ if (this.constructor === BasePage) {
+ throw new Error("Must implement leave() method.");
+ }
+ }
+ }, {
+ key: "setLocalStoragePage",
+ value: function setLocalStoragePage(dataPage) {
+ LocalStorage.setLocalStorage(this.hash, dataPage);
+ }
+ }, {
+ key: "getLocalStoragePage",
+ value: function getLocalStoragePage() {
+ return LocalStorage.getLocalStorage(this.hash);
+ }
+ }, {
+ key: "toggleShowButtonsSaveCancel",
+ value: function toggleShowButtonsSaveCancel(show) {
+ // , buttonSave = null, buttonCancel = null
+ var buttonSave = document.querySelector('form.' + flagFilter + ' button.' + flagSave);
+ var buttonCancel = document.querySelector('form.' + flagFilter + ' button.' + flagCancel);
+ if (show) {
+ buttonCancel.classList.remove(flagCollapsed);
+ buttonSave.classList.remove(flagCollapsed);
+ if (_verbose) {
+ console.log('showing buttons');
+ }
+ } else {
+ buttonCancel.classList.add(flagCollapsed);
+ buttonSave.classList.add(flagCollapsed);
+ if (_verbose) {
+ console.log('hiding buttons');
+ }
+ }
+ }
+ }], [{
+ key: "isDirtyFilter",
+ value: function isDirtyFilter(filter) {
+ var isDirty = DOM.updateAndCheckIsElementDirty(filter);
+ if (isDirty) document.querySelectorAll(idTableMain + ' tbody tr').remove();
+ return isDirty;
+ }
+ }]);
+}();
+
+// EXTERNAL MODULE: ./node_modules/aos/dist/aos.js
+var aos = __webpack_require__(431);
+var aos_default = /*#__PURE__*/__webpack_require__.n(aos);
+;// ./static/js/pages/core/home.js
+function home_typeof(o) { "@babel/helpers - typeof"; return home_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, home_typeof(o); }
+function home_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function home_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, home_toPropertyKey(o.key), o); } }
+function home_createClass(e, r, t) { return r && home_defineProperties(e.prototype, r), t && home_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function _possibleConstructorReturn(t, e) { if (e && ("object" == home_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
+function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
+function _get() { return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); }
+function _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; }
+function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
+function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
+function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
+function home_defineProperty(e, r, t) { return (r = home_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function home_toPropertyKey(t) { var i = home_toPrimitive(t, "string"); return "symbol" == home_typeof(i) ? i : i + ""; }
+function home_toPrimitive(t, r) { if ("object" != home_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != home_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+// internal
+
+// external
+
+var PageHome = /*#__PURE__*/function (_BasePage) {
+ function PageHome(router) {
+ home_classCallCheck(this, PageHome);
+ return _callSuper(this, PageHome, [router]);
+ }
+ _inherits(PageHome, _BasePage);
+ return home_createClass(PageHome, [{
+ key: "initialize",
+ value: function initialize() {
+ this.sharedInitialize();
+ this.hookupButtonsNavContact();
+ // this.initialiseAOS();
+ this.initialiseAnimations();
+ }
+
+ /* AOS */
+ }, {
+ key: "initialiseAOS",
+ value: function initialiseAOS() {
+ aos_default().init({
+ duration: 1000,
+ once: true
+ });
+ }
+ /* Manual animations *
+ initialiseAnimations() {
+ // Check if IntersectionObserver is supported
+ if ('IntersectionObserver' in window) {
+ const observer = new IntersectionObserver((entries) => {
+ entries.forEach(entry => {
+ if (entry.isIntersecting) {
+ entry.target.classList.add('active');
+ }
+ });
+ }, {
+ threshold: 0.1,
+ rootMargin: '50px'
+ });
+ // Observe all elements with 'reveal' class
+ document.querySelectorAll('.reveal').forEach((element) => {
+ observer.observe(element);
+ });
+ } else {
+ // If IntersectionObserver is not supported, make all elements visible
+ document.querySelectorAll('.reveal').forEach((element) => {
+ element.style.opacity = 1;
+ });
+ }
+ }
+ */
+ }, {
+ key: "leave",
+ value: function leave() {
+ _superPropGet(PageHome, "leave", this, 3)([]);
+ }
+ }]);
+}(BasePage);
+home_defineProperty(PageHome, "hash", hashPageHome);
+
+;// ./static/js/pages/core/contact.js
+function contact_typeof(o) { "@babel/helpers - typeof"; return contact_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, contact_typeof(o); }
+function contact_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function contact_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, contact_toPropertyKey(o.key), o); } }
+function contact_createClass(e, r, t) { return r && contact_defineProperties(e.prototype, r), t && contact_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function contact_callSuper(t, o, e) { return o = contact_getPrototypeOf(o), contact_possibleConstructorReturn(t, contact_isNativeReflectConstruct() ? Reflect.construct(o, e || [], contact_getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function contact_possibleConstructorReturn(t, e) { if (e && ("object" == contact_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return contact_assertThisInitialized(t); }
+function contact_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function contact_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (contact_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function contact_getPrototypeOf(t) { return contact_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, contact_getPrototypeOf(t); }
+function contact_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && contact_setPrototypeOf(t, e); }
+function contact_setPrototypeOf(t, e) { return contact_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, contact_setPrototypeOf(t, e); }
+function contact_defineProperty(e, r, t) { return (r = contact_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function contact_toPropertyKey(t) { var i = contact_toPrimitive(t, "string"); return "symbol" == contact_typeof(i) ? i : i + ""; }
+function contact_toPrimitive(t, r) { if ("object" != contact_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != contact_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var PageContact = /*#__PURE__*/function (_BasePage) {
+ function PageContact(router) {
+ contact_classCallCheck(this, PageContact);
+ return contact_callSuper(this, PageContact, [router]);
+ }
+ contact_inherits(PageContact, _BasePage);
+ return contact_createClass(PageContact, [{
+ key: "initialize",
+ value: function initialize() {
+ this.sharedInitialize();
+ this.hookupButtonSubmitFormContactUs();
+ }
+ }, {
+ key: "hookupButtonSubmitFormContactUs",
+ value: function hookupButtonSubmitFormContactUs() {
+ var button = document.querySelector('form input[type="submit"]');
+ button.classList.add(flagButton);
+ button.classList.add(flagButtonPrimary);
+ }
+ }]);
+}(BasePage);
+contact_defineProperty(PageContact, "hash", hashPageContact);
+
+;// ./static/js/pages/legal/accessibility_report.js
+function accessibility_report_typeof(o) { "@babel/helpers - typeof"; return accessibility_report_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, accessibility_report_typeof(o); }
+function accessibility_report_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function accessibility_report_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, accessibility_report_toPropertyKey(o.key), o); } }
+function accessibility_report_createClass(e, r, t) { return r && accessibility_report_defineProperties(e.prototype, r), t && accessibility_report_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function accessibility_report_callSuper(t, o, e) { return o = accessibility_report_getPrototypeOf(o), accessibility_report_possibleConstructorReturn(t, accessibility_report_isNativeReflectConstruct() ? Reflect.construct(o, e || [], accessibility_report_getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function accessibility_report_possibleConstructorReturn(t, e) { if (e && ("object" == accessibility_report_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return accessibility_report_assertThisInitialized(t); }
+function accessibility_report_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function accessibility_report_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (accessibility_report_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function accessibility_report_superPropGet(t, o, e, r) { var p = accessibility_report_get(accessibility_report_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
+function accessibility_report_get() { return accessibility_report_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = accessibility_report_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, accessibility_report_get.apply(null, arguments); }
+function accessibility_report_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = accessibility_report_getPrototypeOf(t));); return t; }
+function accessibility_report_getPrototypeOf(t) { return accessibility_report_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, accessibility_report_getPrototypeOf(t); }
+function accessibility_report_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && accessibility_report_setPrototypeOf(t, e); }
+function accessibility_report_setPrototypeOf(t, e) { return accessibility_report_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, accessibility_report_setPrototypeOf(t, e); }
+function accessibility_report_defineProperty(e, r, t) { return (r = accessibility_report_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function accessibility_report_toPropertyKey(t) { var i = accessibility_report_toPrimitive(t, "string"); return "symbol" == accessibility_report_typeof(i) ? i : i + ""; }
+function accessibility_report_toPrimitive(t, r) { if ("object" != accessibility_report_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != accessibility_report_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var PageAccessibilityReport = /*#__PURE__*/function (_BasePage) {
+ function PageAccessibilityReport(router) {
+ accessibility_report_classCallCheck(this, PageAccessibilityReport);
+ return accessibility_report_callSuper(this, PageAccessibilityReport, [router]);
+ }
+ accessibility_report_inherits(PageAccessibilityReport, _BasePage);
+ return accessibility_report_createClass(PageAccessibilityReport, [{
+ key: "initialize",
+ value: function initialize() {
+ this.sharedInitialize();
+ }
+ }, {
+ key: "leave",
+ value: function leave() {
+ accessibility_report_superPropGet(PageAccessibilityReport, "leave", this, 3)([]);
+ }
+ }]);
+}(BasePage);
+accessibility_report_defineProperty(PageAccessibilityReport, "hash", hashPageAccessibilityReport);
+
+;// ./static/js/pages/legal/accessibility_statement.js
+function accessibility_statement_typeof(o) { "@babel/helpers - typeof"; return accessibility_statement_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, accessibility_statement_typeof(o); }
+function accessibility_statement_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function accessibility_statement_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, accessibility_statement_toPropertyKey(o.key), o); } }
+function accessibility_statement_createClass(e, r, t) { return r && accessibility_statement_defineProperties(e.prototype, r), t && accessibility_statement_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function accessibility_statement_callSuper(t, o, e) { return o = accessibility_statement_getPrototypeOf(o), accessibility_statement_possibleConstructorReturn(t, accessibility_statement_isNativeReflectConstruct() ? Reflect.construct(o, e || [], accessibility_statement_getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function accessibility_statement_possibleConstructorReturn(t, e) { if (e && ("object" == accessibility_statement_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return accessibility_statement_assertThisInitialized(t); }
+function accessibility_statement_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function accessibility_statement_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (accessibility_statement_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function accessibility_statement_superPropGet(t, o, e, r) { var p = accessibility_statement_get(accessibility_statement_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
+function accessibility_statement_get() { return accessibility_statement_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = accessibility_statement_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, accessibility_statement_get.apply(null, arguments); }
+function accessibility_statement_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = accessibility_statement_getPrototypeOf(t));); return t; }
+function accessibility_statement_getPrototypeOf(t) { return accessibility_statement_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, accessibility_statement_getPrototypeOf(t); }
+function accessibility_statement_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && accessibility_statement_setPrototypeOf(t, e); }
+function accessibility_statement_setPrototypeOf(t, e) { return accessibility_statement_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, accessibility_statement_setPrototypeOf(t, e); }
+function accessibility_statement_defineProperty(e, r, t) { return (r = accessibility_statement_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function accessibility_statement_toPropertyKey(t) { var i = accessibility_statement_toPrimitive(t, "string"); return "symbol" == accessibility_statement_typeof(i) ? i : i + ""; }
+function accessibility_statement_toPrimitive(t, r) { if ("object" != accessibility_statement_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != accessibility_statement_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var PageAccessibilityStatement = /*#__PURE__*/function (_BasePage) {
+ function PageAccessibilityStatement(router) {
+ accessibility_statement_classCallCheck(this, PageAccessibilityStatement);
+ return accessibility_statement_callSuper(this, PageAccessibilityStatement, [router]);
+ }
+ accessibility_statement_inherits(PageAccessibilityStatement, _BasePage);
+ return accessibility_statement_createClass(PageAccessibilityStatement, [{
+ key: "initialize",
+ value: function initialize() {
+ this.sharedInitialize();
+ }
+ }, {
+ key: "leave",
+ value: function leave() {
+ accessibility_statement_superPropGet(PageAccessibilityStatement, "leave", this, 3)([]);
+ }
+ }]);
+}(BasePage);
+accessibility_statement_defineProperty(PageAccessibilityStatement, "hash", hashPageAccessibilityStatement);
+
+;// ./static/js/pages/legal/license.js
+function license_typeof(o) { "@babel/helpers - typeof"; return license_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, license_typeof(o); }
+function license_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function license_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, license_toPropertyKey(o.key), o); } }
+function license_createClass(e, r, t) { return r && license_defineProperties(e.prototype, r), t && license_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function license_callSuper(t, o, e) { return o = license_getPrototypeOf(o), license_possibleConstructorReturn(t, license_isNativeReflectConstruct() ? Reflect.construct(o, e || [], license_getPrototypeOf(t).constructor) : o.apply(t, e)); }
+function license_possibleConstructorReturn(t, e) { if (e && ("object" == license_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return license_assertThisInitialized(t); }
+function license_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
+function license_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (license_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
+function license_superPropGet(t, o, e, r) { var p = license_get(license_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
+function license_get() { return license_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = license_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, license_get.apply(null, arguments); }
+function license_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = license_getPrototypeOf(t));); return t; }
+function license_getPrototypeOf(t) { return license_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, license_getPrototypeOf(t); }
+function license_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && license_setPrototypeOf(t, e); }
+function license_setPrototypeOf(t, e) { return license_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, license_setPrototypeOf(t, e); }
+function license_defineProperty(e, r, t) { return (r = license_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function license_toPropertyKey(t) { var i = license_toPrimitive(t, "string"); return "symbol" == license_typeof(i) ? i : i + ""; }
+function license_toPrimitive(t, r) { if ("object" != license_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != license_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var PageLicense = /*#__PURE__*/function (_BasePage) {
+ function PageLicense(router) {
+ license_classCallCheck(this, PageLicense);
+ return license_callSuper(this, PageLicense, [router]);
+ }
+ license_inherits(PageLicense, _BasePage);
+ return license_createClass(PageLicense, [{
+ key: "initialize",
+ value: function initialize() {
+ this.sharedInitialize();
+ }
+ }, {
+ key: "leave",
+ value: function leave() {
+ license_superPropGet(PageLicense, "leave", this, 3)([]);
+ }
+ }]);
+}(BasePage);
+license_defineProperty(PageLicense, "hash", hashPageLicense);
+
+;// ./static/js/api.js
function api_typeof(o) { "@babel/helpers - typeof"; return api_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, api_typeof(o); }
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == api_typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(api_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -540,7 +1578,7 @@ function api_toPrimitive(t, r) { if ("object" != api_typeof(t) || !t) return t;
// Module for API calls
-var api_API = /*#__PURE__*/function () {
+var API = /*#__PURE__*/function () {
function API() {
api_classCallCheck(this, API);
}
@@ -909,5912 +1947,7 @@ document.addEventListener('DOMContentLoaded', () => {
});
*/
-;// CONCATENATED MODULE: ./static/js/components/common/temporary/overlay_confirm.js
-function overlay_confirm_typeof(o) { "@babel/helpers - typeof"; return overlay_confirm_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, overlay_confirm_typeof(o); }
-function overlay_confirm_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function overlay_confirm_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, overlay_confirm_toPropertyKey(o.key), o); } }
-function overlay_confirm_createClass(e, r, t) { return r && overlay_confirm_defineProperties(e.prototype, r), t && overlay_confirm_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function overlay_confirm_toPropertyKey(t) { var i = overlay_confirm_toPrimitive(t, "string"); return "symbol" == overlay_confirm_typeof(i) ? i : i + ""; }
-function overlay_confirm_toPrimitive(t, r) { if ("object" != overlay_confirm_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != overlay_confirm_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-var OverlayConfirm = /*#__PURE__*/function () {
- function OverlayConfirm() {
- overlay_confirm_classCallCheck(this, OverlayConfirm);
- }
- return overlay_confirm_createClass(OverlayConfirm, null, [{
- key: "hookup",
- value: function hookup(callbackSuccess) {
- Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagCancel, flagInitialised, function (buttonCancel) {
- buttonCancel.addEventListener('click', function () {
- var overlay = document.querySelector(idOverlayConfirm);
- overlay.style.visibility = 'hidden';
- });
- });
- Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagSubmit, flagInitialised, function (buttonConfirm) {
- buttonConfirm.addEventListener('click', function () {
- var overlay = document.querySelector(idOverlayConfirm);
- var textarea = overlay.querySelector('textarea');
- overlay.style.visibility = 'hidden';
- callbackSuccess(textarea.value);
- });
- });
- }
- }, {
- key: "show",
- value: function show() {
- var overlay = document.querySelector(idOverlayConfirm);
- overlay.classList.remove(flagCollapsed);
- overlay.style.visibility = 'visible';
- }
- }]);
-}();
-
-;// CONCATENATED MODULE: ./static/js/pages/base.js
-function base_typeof(o) { "@babel/helpers - typeof"; return base_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, base_typeof(o); }
-function base_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function base_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, base_toPropertyKey(o.key), o); } }
-function base_createClass(e, r, t) { return r && base_defineProperties(e.prototype, r), t && base_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function base_toPropertyKey(t) { var i = base_toPrimitive(t, "string"); return "symbol" == base_typeof(i) ? i : i + ""; }
-function base_toPrimitive(t, r) { if ("object" != base_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != base_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-
-
-
-
-
-
-var BasePage = /*#__PURE__*/function () {
- function BasePage(router) {
- base_classCallCheck(this, BasePage);
- if (!router) {
- throw new Error("Router is required");
- } else {
- if (_verbose) {
- console.log("initialising with router: ", router);
- }
- }
- this.router = router;
- this.title = titlePageCurrent;
- // this.hash = hashPageCurrent;
- if (this.constructor === BasePage) {
- throw new Error("Cannot instantiate abstract class");
- }
- if (!this.constructor.hash) {
- throw new Error("Class ".concat(this.constructor.name, " must have a static hash attribute."));
- }
- }
- return base_createClass(BasePage, [{
- key: "initialize",
- value: function initialize() {
- throw new Error("Method 'initialize()' must be implemented.");
- }
- }, {
- key: "sharedInitialize",
- value: function sharedInitialize() {
- this.logInitialisation();
- this.hookupCommonElements();
- }
- }, {
- key: "logInitialisation",
- value: function logInitialisation() {
- if (_verbose) {
- console.log('Initializing ' + this.title + ' page');
- }
- }
- }, {
- key: "hookupCommonElements",
- value: function hookupCommonElements() {
- // hookupVideos();
- this.hookupNavigation();
- this.hookupImagesLogo();
- this.hookupOverlays();
- }
- }, {
- key: "hookupNavigation",
- value: function hookupNavigation() {
- /* Can be removed: */
- var overlayHamburger = document.querySelector(idOverlayHamburger);
- var hamburgerOptions = overlayHamburger.querySelectorAll('div.' + flagRow);
- var countOptions = hamburgerOptions.length;
- // console.log('count nav options: ', countOptions);
- // overlayHamburger.css('height', (countOptions * 27) + 'px');
- /* end of can be removed */
-
- this.hookupEventHandler("click", idButtonHamburger, function (event, element) {
- var overlayHamburger = document.querySelector(idOverlayHamburger);
- if (overlayHamburger.classList.contains(flagCollapsed)) {
- overlayHamburger.classList.remove(flagCollapsed);
- overlayHamburger.classList.add(flagExpanded);
- } else {
- overlayHamburger.classList.remove(flagExpanded);
- overlayHamburger.classList.add(flagCollapsed);
- }
- // overlayHamburger.classList.add(flagInitialised);
- });
- this.hookupButtonsNavHome();
- this.hookupButtonsNavServices();
- this.hookupButtonsNavContact();
- this.hookupButtonsNavUserAccount();
- this.hookupButtonsNavUserLogout();
- this.hookupButtonsNavUserLogin();
- this.hookupButtonsNavStoreHome();
- this.hookupButtonsNavStoreManufacturingPurchaseOrders();
- this.hookupButtonsNavStoreProductPermutations();
- this.hookupButtonsNavStoreStockItems();
- this.hookupButtonsNavStoreSuppliers();
- this.hookupButtonsNavStoreSupplierPurchaseOrders();
- this.hookupButtonsNavAdminHome();
- }
- }, {
- key: "hookupEventHandler",
- value: function hookupEventHandler(eventType, selector, callback) {
- Events.initialiseEventHandler(selector, flagInitialised, function (element) {
- element.addEventListener(eventType, function (event) {
- event.stopPropagation();
- callback(event, element);
- });
- });
- }
- }, {
- key: "hookupButtonsNavHome",
- value: function hookupButtonsNavHome() {
- this.hookupButtonsNav('.' + flagNavHome, hashPageHome);
- }
- }, {
- key: "hookupButtonsNav",
- value: function hookupButtonsNav(buttonSelector, hashPageNav) {
- var _this = this;
- this.hookupEventHandler("click", buttonSelector, function (event, button) {
- _this.router.navigateToHash(hashPageNav);
- });
- }
- }, {
- key: "hookupButtonsNavServices",
- value: function hookupButtonsNavServices() {
- this.hookupButtonsNav('.' + flagNavServices, hashPageServices);
- }
- }, {
- key: "hookupButtonsNavContact",
- value: function hookupButtonsNavContact() {
- this.hookupButtonsNav('.' + flagNavContact, hashPageContact);
- }
- }, {
- key: "hookupButtonsNavUserAccount",
- value: function hookupButtonsNavUserAccount() {
- this.hookupButtonsNav('.' + flagNavUserAccount, hashPageUserAccount);
- }
- }, {
- key: "hookupButtonsNavUserLogout",
- value: function hookupButtonsNavUserLogout() {
- this.hookupButtonsNav('.' + flagNavUserLogout, hashPageUserLogout);
- }
- }, {
- key: "hookupButtonsNavUserLogin",
- value: function hookupButtonsNavUserLogin() {
- var _this2 = this;
- this.hookupEventHandler("click", '.' + flagNavUserLogin, function (event, navigator) {
- event.stopPropagation();
- _this2.leave();
- api_API.loginUser().then(function (response) {
- if (response.Success) {
- // this.router.navigateToUrl(response[flagCallback], null, false); // window.app.
- window.location.href = response[flagCallback];
- } else {
- DOM.alertError("Error", response.Message);
- }
- });
- });
- }
- }, {
- key: "hookupButtonsNavStoreHome",
- value: function hookupButtonsNavStoreHome() {
- this.hookupButtonsNav('.' + flagNavStoreHome, hashPageStoreHome);
- }
- }, {
- key: "hookupButtonsNavStoreManufacturingPurchaseOrders",
- value: function hookupButtonsNavStoreManufacturingPurchaseOrders() {
- this.hookupButtonsNav('.' + flagNavStoreManufacturingPurchaseOrders, hashPageStoreManufacturingPurchaseOrders);
- }
- }, {
- key: "hookupButtonsNavStoreProductCategories",
- value: function hookupButtonsNavStoreProductCategories() {
- this.hookupButtonsNav('.' + flagNavStoreProductCategories, hashPageStoreProductCategories);
- }
- }, {
- key: "hookupButtonsNavStoreProducts",
- value: function hookupButtonsNavStoreProducts() {
- this.hookupButtonsNav('.' + flagNavStoreProducts, hashPageStoreProducts);
- }
- }, {
- key: "hookupButtonsNavStoreProductPermutations",
- value: function hookupButtonsNavStoreProductPermutations() {
- this.hookupButtonsNav('.' + flagNavStoreProductPermutations, hashPageStoreProductPermutations);
- }
- }, {
- key: "hookupButtonsNavStoreProductPrices",
- value: function hookupButtonsNavStoreProductPrices() {
- this.hookupButtonsNav('.' + flagNavStoreProductPrices, hashPageStoreProductPrices);
- }
- }, {
- key: "hookupButtonsNavStoreProductVariations",
- value: function hookupButtonsNavStoreProductVariations() {
- this.hookupButtonsNav('.' + flagNavStoreProductVariations, hashPageStoreProductVariations);
- }
- }, {
- key: "hookupButtonsNavStoreStockItems",
- value: function hookupButtonsNavStoreStockItems() {
- this.hookupButtonsNav('.' + flagNavStoreStockItems, hashPageStoreStockItems);
- }
- }, {
- key: "hookupButtonsNavAdminHome",
- value: function hookupButtonsNavAdminHome() {
- this.hookupButtonsNav('.' + flagNavAdminHome, hashPageAdminHome);
- }
- }, {
- key: "hookupButtonsNavStoreSuppliers",
- value: function hookupButtonsNavStoreSuppliers() {
- this.hookupButtonsNav('.' + flagNavStoreSuppliers, hashPageStoreSuppliers);
- }
- }, {
- key: "hookupButtonsNavStoreSupplierPurchaseOrders",
- value: function hookupButtonsNavStoreSupplierPurchaseOrders() {
- this.hookupButtonsNav('.' + flagNavStoreSupplierPurchaseOrders, hashPageStoreSupplierPurchaseOrders);
- }
- }, {
- key: "hookupImagesLogo",
- value: function hookupImagesLogo() {
- this.hookupButtonsNav("img." + flagImageLogo, hashPageHome);
- }
- }, {
- key: "hookupOverlays",
- value: function hookupOverlays() {
- this.hookupOverlayFromId(idOverlayConfirm);
- this.hookupOverlayFromId(idOverlayError);
- }
- }, {
- key: "hookupOverlayFromId",
- value: function hookupOverlayFromId(idOverlay) {
- Events.initialiseEventHandler(idOverlay, flagInitialised, function (overlay) {
- overlay.querySelector('button.' + flagCancel).addEventListener("click", function (event) {
- event.stopPropagation();
- overlay.style.display = 'none';
- });
- });
- }
- }, {
- key: "hookupButtonSave",
- value: function hookupButtonSave() {
- var _this3 = this;
- Events.initialiseEventHandler('form.' + flagFilter + ' button.' + flagSave, flagInitialised, function (button) {
- button.addEventListener("click", function (event) {
- event.stopPropagation();
- if (_verbose) {
- console.log('saving page: ', _this3.title);
- }
- OverlayConfirm.show();
- });
- // button.classList.add(flagCollapsed);
- });
- }
- }, {
- key: "hookupVideos",
- value: function hookupVideos() {
- Events.initialiseEventHandler('video', flagInitialised, function (video) {
- video.addEventListener("mouseover", videoPlay(video));
- video.addEventListener("mouseout", videoPause(video));
- });
- }
- }, {
- key: "leave",
- value: function leave() {
- if (_verbose) {
- console.log('Leaving ' + this.title + ' page');
- }
- if (this.constructor === BasePage) {
- throw new Error("Must implement leave() method.");
- }
- }
- }, {
- key: "setLocalStoragePage",
- value: function setLocalStoragePage(dataPage) {
- LocalStorage.setLocalStorage(this.hash, dataPage);
- }
- }, {
- key: "getLocalStoragePage",
- value: function getLocalStoragePage() {
- return LocalStorage.getLocalStorage(this.hash);
- }
- }, {
- key: "toggleShowButtonsSaveCancel",
- value: function toggleShowButtonsSaveCancel(show) {
- // , buttonSave = null, buttonCancel = null
- var buttonSave = document.querySelector('form.' + flagFilter + ' button.' + flagSave);
- var buttonCancel = document.querySelector('form.' + flagFilter + ' button.' + flagCancel);
- if (show) {
- buttonCancel.classList.remove(flagCollapsed);
- buttonSave.classList.remove(flagCollapsed);
- if (_verbose) {
- console.log('showing buttons');
- }
- } else {
- buttonCancel.classList.add(flagCollapsed);
- buttonSave.classList.add(flagCollapsed);
- if (_verbose) {
- console.log('hiding buttons');
- }
- }
- }
- }], [{
- key: "isDirtyFilter",
- value: function isDirtyFilter(filter) {
- var isDirty = DOM.updateAndCheckIsElementDirty(filter);
- if (isDirty) document.querySelectorAll(idTableMain + ' tbody tr').remove();
- return isDirty;
- }
- }]);
-}();
-
-;// CONCATENATED MODULE: ./static/js/pages/core/admin_home.js
-function admin_home_typeof(o) { "@babel/helpers - typeof"; return admin_home_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, admin_home_typeof(o); }
-function admin_home_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function admin_home_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, admin_home_toPropertyKey(o.key), o); } }
-function admin_home_createClass(e, r, t) { return r && admin_home_defineProperties(e.prototype, r), t && admin_home_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function _possibleConstructorReturn(t, e) { if (e && ("object" == admin_home_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
-function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function _superPropGet(t, e, o, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function _get() { return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); }
-function _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; }
-function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
-function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
-function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
-function admin_home_defineProperty(e, r, t) { return (r = admin_home_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function admin_home_toPropertyKey(t) { var i = admin_home_toPrimitive(t, "string"); return "symbol" == admin_home_typeof(i) ? i : i + ""; }
-function admin_home_toPrimitive(t, r) { if ("object" != admin_home_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != admin_home_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-
-var PageAdminHome = /*#__PURE__*/function (_BasePage) {
- function PageAdminHome(router) {
- admin_home_classCallCheck(this, PageAdminHome);
- return _callSuper(this, PageAdminHome, [router]);
- }
- _inherits(PageAdminHome, _BasePage);
- return admin_home_createClass(PageAdminHome, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- this.hookupAdminStore();
- }
- }, {
- key: "hookupAdminStore",
- value: function hookupAdminStore() {
- this.hookupButtonsNavStoreProductCategories();
- this.hookupButtonsNavStoreProducts();
- this.hookupButtonsNavStoreProductPermutations();
- this.hookupButtonsNavStoreProductPrices();
- this.hookupButtonsNavStoreStockItems();
- this.hookupButtonsNavStoreProductVariations();
- this.hookupButtonsNavAdminStoreStripeProducts();
- this.hookupButtonsNavAdminStoreStripePrices();
- }
- }, {
- key: "hookupButtonsNavAdminStoreStripeProducts",
- value: function hookupButtonsNavAdminStoreStripeProducts() {
- Events.initialiseEventHandler('.' + flagNavAdminStoreStripeProducts, flagInitialised, function (navigator) {
- navigator.addEventListener("click", function (event) {
- this.router.navigateToHash(hashPageAdminStoreStripeProducts);
- });
- });
- }
- }, {
- key: "hookupButtonsNavAdminStoreStripePrices",
- value: function hookupButtonsNavAdminStoreStripePrices() {
- Events.initialiseEventHandler('.' + flagNavAdminStoreStripePrices, flagInitialised, function (navigator) {
- navigator.addEventListener("click", function (event) {
- this.router.navigateToHash(hashPageAdminStoreStripePrices);
- });
- });
- }
- }, {
- key: "leave",
- value: function leave() {
- _superPropGet(PageAdminHome, "leave", this, 3)([]);
- }
- }]);
-}(BasePage);
-admin_home_defineProperty(PageAdminHome, "hash", hashPageAdminHome);
-
-;// CONCATENATED MODULE: ./static/js/pages/core/home.js
-function home_typeof(o) { "@babel/helpers - typeof"; return home_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, home_typeof(o); }
-function home_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function home_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, home_toPropertyKey(o.key), o); } }
-function home_createClass(e, r, t) { return r && home_defineProperties(e.prototype, r), t && home_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function home_callSuper(t, o, e) { return o = home_getPrototypeOf(o), home_possibleConstructorReturn(t, home_isNativeReflectConstruct() ? Reflect.construct(o, e || [], home_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function home_possibleConstructorReturn(t, e) { if (e && ("object" == home_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return home_assertThisInitialized(t); }
-function home_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function home_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (home_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function home_superPropGet(t, e, o, r) { var p = home_get(home_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function home_get() { return home_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = home_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, home_get.apply(null, arguments); }
-function home_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = home_getPrototypeOf(t));); return t; }
-function home_getPrototypeOf(t) { return home_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, home_getPrototypeOf(t); }
-function home_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && home_setPrototypeOf(t, e); }
-function home_setPrototypeOf(t, e) { return home_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, home_setPrototypeOf(t, e); }
-function home_defineProperty(e, r, t) { return (r = home_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function home_toPropertyKey(t) { var i = home_toPrimitive(t, "string"); return "symbol" == home_typeof(i) ? i : i + ""; }
-function home_toPrimitive(t, r) { if ("object" != home_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != home_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-var PageHome = /*#__PURE__*/function (_BasePage) {
- function PageHome(router) {
- home_classCallCheck(this, PageHome);
- return home_callSuper(this, PageHome, [router]);
- }
- home_inherits(PageHome, _BasePage);
- return home_createClass(PageHome, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- this.hookupButtonsNavContact();
- }
- }, {
- key: "leave",
- value: function leave() {
- home_superPropGet(PageHome, "leave", this, 3)([]);
- }
- }]);
-}(BasePage);
-home_defineProperty(PageHome, "hash", hashPageHome);
-
-;// CONCATENATED MODULE: ./static/js/pages/core/contact.js
-function contact_typeof(o) { "@babel/helpers - typeof"; return contact_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, contact_typeof(o); }
-function contact_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function contact_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, contact_toPropertyKey(o.key), o); } }
-function contact_createClass(e, r, t) { return r && contact_defineProperties(e.prototype, r), t && contact_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function contact_callSuper(t, o, e) { return o = contact_getPrototypeOf(o), contact_possibleConstructorReturn(t, contact_isNativeReflectConstruct() ? Reflect.construct(o, e || [], contact_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function contact_possibleConstructorReturn(t, e) { if (e && ("object" == contact_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return contact_assertThisInitialized(t); }
-function contact_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function contact_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (contact_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function contact_getPrototypeOf(t) { return contact_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, contact_getPrototypeOf(t); }
-function contact_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && contact_setPrototypeOf(t, e); }
-function contact_setPrototypeOf(t, e) { return contact_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, contact_setPrototypeOf(t, e); }
-function contact_defineProperty(e, r, t) { return (r = contact_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function contact_toPropertyKey(t) { var i = contact_toPrimitive(t, "string"); return "symbol" == contact_typeof(i) ? i : i + ""; }
-function contact_toPrimitive(t, r) { if ("object" != contact_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != contact_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-var PageContact = /*#__PURE__*/function (_BasePage) {
- function PageContact(router) {
- contact_classCallCheck(this, PageContact);
- return contact_callSuper(this, PageContact, [router]);
- }
- contact_inherits(PageContact, _BasePage);
- return contact_createClass(PageContact, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }]);
-}(BasePage);
-contact_defineProperty(PageContact, "hash", hashPageContact);
-
-;// CONCATENATED MODULE: ./static/js/pages/core/services.js
-function services_typeof(o) { "@babel/helpers - typeof"; return services_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, services_typeof(o); }
-function services_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function services_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, services_toPropertyKey(o.key), o); } }
-function services_createClass(e, r, t) { return r && services_defineProperties(e.prototype, r), t && services_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function services_callSuper(t, o, e) { return o = services_getPrototypeOf(o), services_possibleConstructorReturn(t, services_isNativeReflectConstruct() ? Reflect.construct(o, e || [], services_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function services_possibleConstructorReturn(t, e) { if (e && ("object" == services_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return services_assertThisInitialized(t); }
-function services_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function services_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (services_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function services_superPropGet(t, e, o, r) { var p = services_get(services_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function services_get() { return services_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = services_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, services_get.apply(null, arguments); }
-function services_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = services_getPrototypeOf(t));); return t; }
-function services_getPrototypeOf(t) { return services_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, services_getPrototypeOf(t); }
-function services_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && services_setPrototypeOf(t, e); }
-function services_setPrototypeOf(t, e) { return services_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, services_setPrototypeOf(t, e); }
-function services_defineProperty(e, r, t) { return (r = services_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function services_toPropertyKey(t) { var i = services_toPrimitive(t, "string"); return "symbol" == services_typeof(i) ? i : i + ""; }
-function services_toPrimitive(t, r) { if ("object" != services_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != services_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-var PageServices = /*#__PURE__*/function (_BasePage) {
- function PageServices(router) {
- services_classCallCheck(this, PageServices);
- return services_callSuper(this, PageServices, [router]);
- }
- services_inherits(PageServices, _BasePage);
- return services_createClass(PageServices, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }, {
- key: "leave",
- value: function leave() {
- services_superPropGet(PageServices, "leave", this, 3)([]);
- }
- }]);
-}(BasePage);
-services_defineProperty(PageServices, "hash", hashPageServices);
-
-;// CONCATENATED MODULE: ./static/js/pages/legal/accessibility_report.js
-function accessibility_report_typeof(o) { "@babel/helpers - typeof"; return accessibility_report_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, accessibility_report_typeof(o); }
-function accessibility_report_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function accessibility_report_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, accessibility_report_toPropertyKey(o.key), o); } }
-function accessibility_report_createClass(e, r, t) { return r && accessibility_report_defineProperties(e.prototype, r), t && accessibility_report_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function accessibility_report_callSuper(t, o, e) { return o = accessibility_report_getPrototypeOf(o), accessibility_report_possibleConstructorReturn(t, accessibility_report_isNativeReflectConstruct() ? Reflect.construct(o, e || [], accessibility_report_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function accessibility_report_possibleConstructorReturn(t, e) { if (e && ("object" == accessibility_report_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return accessibility_report_assertThisInitialized(t); }
-function accessibility_report_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function accessibility_report_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (accessibility_report_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function accessibility_report_superPropGet(t, e, o, r) { var p = accessibility_report_get(accessibility_report_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function accessibility_report_get() { return accessibility_report_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = accessibility_report_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, accessibility_report_get.apply(null, arguments); }
-function accessibility_report_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = accessibility_report_getPrototypeOf(t));); return t; }
-function accessibility_report_getPrototypeOf(t) { return accessibility_report_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, accessibility_report_getPrototypeOf(t); }
-function accessibility_report_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && accessibility_report_setPrototypeOf(t, e); }
-function accessibility_report_setPrototypeOf(t, e) { return accessibility_report_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, accessibility_report_setPrototypeOf(t, e); }
-function accessibility_report_defineProperty(e, r, t) { return (r = accessibility_report_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function accessibility_report_toPropertyKey(t) { var i = accessibility_report_toPrimitive(t, "string"); return "symbol" == accessibility_report_typeof(i) ? i : i + ""; }
-function accessibility_report_toPrimitive(t, r) { if ("object" != accessibility_report_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != accessibility_report_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-var PageAccessibilityReport = /*#__PURE__*/function (_BasePage) {
- function PageAccessibilityReport(router) {
- accessibility_report_classCallCheck(this, PageAccessibilityReport);
- return accessibility_report_callSuper(this, PageAccessibilityReport, [router]);
- }
- accessibility_report_inherits(PageAccessibilityReport, _BasePage);
- return accessibility_report_createClass(PageAccessibilityReport, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }, {
- key: "leave",
- value: function leave() {
- accessibility_report_superPropGet(PageAccessibilityReport, "leave", this, 3)([]);
- }
- }]);
-}(BasePage);
-accessibility_report_defineProperty(PageAccessibilityReport, "hash", hashPageAccessibilityReport);
-
-;// CONCATENATED MODULE: ./static/js/pages/legal/accessibility_statement.js
-function accessibility_statement_typeof(o) { "@babel/helpers - typeof"; return accessibility_statement_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, accessibility_statement_typeof(o); }
-function accessibility_statement_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function accessibility_statement_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, accessibility_statement_toPropertyKey(o.key), o); } }
-function accessibility_statement_createClass(e, r, t) { return r && accessibility_statement_defineProperties(e.prototype, r), t && accessibility_statement_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function accessibility_statement_callSuper(t, o, e) { return o = accessibility_statement_getPrototypeOf(o), accessibility_statement_possibleConstructorReturn(t, accessibility_statement_isNativeReflectConstruct() ? Reflect.construct(o, e || [], accessibility_statement_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function accessibility_statement_possibleConstructorReturn(t, e) { if (e && ("object" == accessibility_statement_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return accessibility_statement_assertThisInitialized(t); }
-function accessibility_statement_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function accessibility_statement_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (accessibility_statement_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function accessibility_statement_superPropGet(t, e, o, r) { var p = accessibility_statement_get(accessibility_statement_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function accessibility_statement_get() { return accessibility_statement_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = accessibility_statement_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, accessibility_statement_get.apply(null, arguments); }
-function accessibility_statement_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = accessibility_statement_getPrototypeOf(t));); return t; }
-function accessibility_statement_getPrototypeOf(t) { return accessibility_statement_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, accessibility_statement_getPrototypeOf(t); }
-function accessibility_statement_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && accessibility_statement_setPrototypeOf(t, e); }
-function accessibility_statement_setPrototypeOf(t, e) { return accessibility_statement_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, accessibility_statement_setPrototypeOf(t, e); }
-function accessibility_statement_defineProperty(e, r, t) { return (r = accessibility_statement_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function accessibility_statement_toPropertyKey(t) { var i = accessibility_statement_toPrimitive(t, "string"); return "symbol" == accessibility_statement_typeof(i) ? i : i + ""; }
-function accessibility_statement_toPrimitive(t, r) { if ("object" != accessibility_statement_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != accessibility_statement_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-var PageAccessibilityStatement = /*#__PURE__*/function (_BasePage) {
- function PageAccessibilityStatement(router) {
- accessibility_statement_classCallCheck(this, PageAccessibilityStatement);
- return accessibility_statement_callSuper(this, PageAccessibilityStatement, [router]);
- }
- accessibility_statement_inherits(PageAccessibilityStatement, _BasePage);
- return accessibility_statement_createClass(PageAccessibilityStatement, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }, {
- key: "leave",
- value: function leave() {
- accessibility_statement_superPropGet(PageAccessibilityStatement, "leave", this, 3)([]);
- }
- }]);
-}(BasePage);
-accessibility_statement_defineProperty(PageAccessibilityStatement, "hash", hashPageAccessibilityStatement);
-
-;// CONCATENATED MODULE: ./static/js/pages/legal/license.js
-function license_typeof(o) { "@babel/helpers - typeof"; return license_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, license_typeof(o); }
-function license_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function license_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, license_toPropertyKey(o.key), o); } }
-function license_createClass(e, r, t) { return r && license_defineProperties(e.prototype, r), t && license_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function license_callSuper(t, o, e) { return o = license_getPrototypeOf(o), license_possibleConstructorReturn(t, license_isNativeReflectConstruct() ? Reflect.construct(o, e || [], license_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function license_possibleConstructorReturn(t, e) { if (e && ("object" == license_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return license_assertThisInitialized(t); }
-function license_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function license_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (license_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function license_superPropGet(t, e, o, r) { var p = license_get(license_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function license_get() { return license_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = license_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, license_get.apply(null, arguments); }
-function license_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = license_getPrototypeOf(t));); return t; }
-function license_getPrototypeOf(t) { return license_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, license_getPrototypeOf(t); }
-function license_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && license_setPrototypeOf(t, e); }
-function license_setPrototypeOf(t, e) { return license_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, license_setPrototypeOf(t, e); }
-function license_defineProperty(e, r, t) { return (r = license_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function license_toPropertyKey(t) { var i = license_toPrimitive(t, "string"); return "symbol" == license_typeof(i) ? i : i + ""; }
-function license_toPrimitive(t, r) { if ("object" != license_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != license_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-var PageLicense = /*#__PURE__*/function (_BasePage) {
- function PageLicense(router) {
- license_classCallCheck(this, PageLicense);
- return license_callSuper(this, PageLicense, [router]);
- }
- license_inherits(PageLicense, _BasePage);
- return license_createClass(PageLicense, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }, {
- key: "leave",
- value: function leave() {
- license_superPropGet(PageLicense, "leave", this, 3)([]);
- }
- }]);
-}(BasePage);
-license_defineProperty(PageLicense, "hash", hashPageLicense);
-
-;// CONCATENATED MODULE: ./static/js/pages/store/basket.js
-function basket_typeof(o) { "@babel/helpers - typeof"; return basket_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, basket_typeof(o); }
-function basket_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function basket_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, basket_toPropertyKey(o.key), o); } }
-function basket_createClass(e, r, t) { return r && basket_defineProperties(e.prototype, r), t && basket_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function basket_callSuper(t, o, e) { return o = basket_getPrototypeOf(o), basket_possibleConstructorReturn(t, basket_isNativeReflectConstruct() ? Reflect.construct(o, e || [], basket_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function basket_possibleConstructorReturn(t, e) { if (e && ("object" == basket_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return basket_assertThisInitialized(t); }
-function basket_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function basket_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (basket_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function basket_superPropGet(t, e, o, r) { var p = basket_get(basket_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function basket_get() { return basket_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = basket_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, basket_get.apply(null, arguments); }
-function basket_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = basket_getPrototypeOf(t));); return t; }
-function basket_getPrototypeOf(t) { return basket_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, basket_getPrototypeOf(t); }
-function basket_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && basket_setPrototypeOf(t, e); }
-function basket_setPrototypeOf(t, e) { return basket_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, basket_setPrototypeOf(t, e); }
-function basket_defineProperty(e, r, t) { return (r = basket_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function basket_toPropertyKey(t) { var i = basket_toPrimitive(t, "string"); return "symbol" == basket_typeof(i) ? i : i + ""; }
-function basket_toPrimitive(t, r) { if ("object" != basket_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != basket_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-
-
-var PageStoreBasket = /*#__PURE__*/function (_BasePage) {
- function PageStoreBasket(router) {
- basket_classCallCheck(this, PageStoreBasket);
- return basket_callSuper(this, PageStoreBasket, [router]);
- }
- basket_inherits(PageStoreBasket, _BasePage);
- return basket_createClass(PageStoreBasket, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- this.hookupStoreCardsInfo();
- this.hookupOverlaysStoreBasketInfo();
- this.hookupButtonCheckoutSession();
- }
- }, {
- key: "hookupStoreCardsInfo",
- value: function hookupStoreCardsInfo() {
- document.querySelectorAll(idContainerInfoDelivery).addEventListener("click", function (event) {
- if (_verbose) {
- console.log("delivery modal display method");
- }
- document.querySelectorAll(idOverlayInfoDelivery).css('display', 'block');
- });
- document.querySelectorAll(idContainerInfoBilling).addEventListener("click", function (event) {
- if (_verbose) {
- console.log("billing modal display method");
- }
- document.querySelectorAll(idOverlayInfoBilling).css('display', 'block');
- });
- }
- }, {
- key: "hookupOverlaysStoreBasketInfo",
- value: function hookupOverlaysStoreBasketInfo() {
- var elOverlay, elForm;
-
- // Delivery
- elOverlay = document.querySelectorAll(idOverlayInfoDelivery);
- elForm = elOverlay.querySelector('form');
- hookupOverlay(elOverlay);
- Events.initialiseEventHandler(elForm, flagInitialised, function () {
- elForm.submit(function (event) {
- elForm = document.querySelectorAll(elForm);
- event.preventDefault();
- if (_verbose) {
- console.log("delivery submit method");
- }
- ajaxData = {};
- ajaxData[keyInfoType] = keyInfoDelivery;
- ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoDelivery);
- ajaxJSONData('info delivery', mapHashToController(hashStoreBasketInfo), ajaxData, loadInfoAddress, false);
- // document.querySelectorAll(idOverlayInfoDelivery).css('display', 'none');
- });
- });
-
- // Billing
- elOverlay = document.querySelectorAll(idOverlayInfoBilling);
- elForm = elOverlay.querySelector('form');
- hookupOverlay(elOverlay);
- Events.initialiseEventHandler(elForm, flagInitialised, function () {
- elForm.submit(function (event) {
- event.preventDefault();
- if (_verbose) {
- console.log("billing submit method");
- }
- ajaxData = {};
- ajaxData[keyInfoType] = keyInfoBilling;
- ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoBilling); // formData; // form.serialize();
-
- ajaxJSONData('info billing', mapHashToController(hashStoreBasketInfo), ajaxData, loadInfoAddress, false);
- // document.querySelectorAll(idOverlayInfoBilling).css('display', 'none');
- });
- });
- var keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyCity, keyCounty];
- for (var k in keys) {
- elForm.querySelector('#' + keys[k]).removeAttr('required');
- }
- }
- }, {
- key: "loadInfoAddress",
- value: function loadInfoAddress(response) {
- if (_verbose) {
- console.log('response:');
- console.log(response.data);
- }
- var infoType = response.data[keyInfoType];
- var infoAddress = response.data[infoType];
- LocalStorage.setLocalStorage(infoType, infoAddress);
-
- // update webpage elements in background
- if (infoType == keyInfoBilling) {
- var container = document.querySelectorAll(idContainerInfoBilling);
- if (infoAddress[keyInfoIdentical]) {
- container.querySelector('div').innerHTML = "Same as delivery address";
- } else {
- container.querySelector('div').innerHTML = "" + infoAddress[keyNameFull] + ' at ' + infoAddress[keyPostcode] + "";
- }
- document.querySelectorAll(idOverlayInfoBilling).css('display', 'none');
- document.querySelectorAll(idOverlayInfoBilling).querySelector('form').classList.add(flagSubmitted);
- } else {
- var _container = document.querySelectorAll(idContainerInfoDelivery);
- _container.querySelector('div').innerHTML = "" + infoAddress[keyNameFull] + ' at ' + infoAddress[keyPostcode] + "";
- document.querySelectorAll(idOverlayInfoDelivery).css('display', 'none');
- document.querySelectorAll(idOverlayInfoDelivery).querySelector('form').classList.add(flagSubmitted);
- }
- }
- }, {
- key: "convertFormBilling2JSON",
- value: function convertFormBilling2JSON(ajaxData, idOverlayInfo) {
- var elOverlay, elForm, elOverlayDelivery, elFormDelivery;
- elOverlay = document.querySelectorAll(idOverlayInfo);
- elForm = elOverlay.querySelector('form');
- elOverlay = document.querySelectorAll(idOverlayInfoDelivery);
- elForm = elOverlay.querySelector('form');
- ajaxData[flagForm] = convertForm2JSON(elForm); // formData; // form.serialize();
- var keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyAddress2, keyCity, keyCounty];
- if (_verbose) {
- console.log('converting billing form to json\nform ID: ' + elForm.id);
- console.log('ajaxData:');
- console.log(ajaxData);
- }
- ajaxData[flagForm][keyInfoIdentical] = getElementValueCurrent(elForm.querySelector('#' + keyInfoIdentical));
- for (var k in keys) {
- if (idOverlayInfo == idOverlayInfoBilling && ajaxData[flagForm][keyInfoIdentical]) {
- ajaxData[flagForm][keys[k]] = getElementValueCurrent(elFormDelivery.querySelector('#' + keys[k]));
- } else {
- ajaxData[flagForm][keys[k]] = getElementValueCurrent(elForm.querySelector('#' + keys[k]));
- }
- }
- if (_verbose) {
- console.log('ajaxData:');
- console.log(ajaxData);
- }
- return ajaxData;
- }
- }, {
- key: "hookupButtonCheckoutSession",
- value: function hookupButtonCheckoutSession() {
- var btnCheckout = document.querySelectorAll(idButtonCheckout);
- btnCheckout.classList.remove(flagInitialised);
- Events.initialiseEventHandler(idButtonCheckout, flagInitialised, function () {
- btnCheckout.removeEventListener("click");
- btnCheckout.addEventListener("click", function (event) {
- //setupPageLocalStorageNext(hashPageStoreBasket);
- var basket = LocalStorage.getLocalStorage(keyBasket);
- // goToPage(hashPageStoreBasket);
- var ajaxData = {};
- ajaxData[keyBasket] = basket;
- ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoDelivery);
- ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoBilling);
- ajaxData[key_code_currency] = getCurrencySelected();
- // ajaxData[keyIsSubscription] = false; // only checkout one-time payment items for now
-
- ajaxJSONData('checkout session', mapHashToController(hashPageStoreCheckout), ajaxData, handleResponseCheckout, false);
- });
- });
- }
- }, {
- key: "handleResponseCheckout",
- value: function handleResponseCheckout(response) {
- // let tmpData = {};
- // tmpData[keyIdCheckout] = response.data[keyIdCheckout]
- // goToPage(hashPageStoreCheckoutSession, tmpData);
- window.location.href = response.data[keyUrlCheckout];
- }
- }, {
- key: "hookupButtonFormBillingCopy",
- value: function hookupButtonFormBillingCopy() {
- // let elButton = document.querySelectorAll(idButtonFormBillingCopy);
-
- Events.initialiseEventHandler(idButtonFormBillingCopy, flagInitialised, function () {
- document.querySelectorAll(idButtonFormBillingCopy).addEventListener("click", function (event) {
- var keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyAddress2, keyCity, keyCounty];
- var elFormBilling = document.querySelectorAll(idOverlayInfoBilling).querySelector('form');
- var elFormDelivery = document.querySelectorAll(idOverlayInfoDelivery).querySelector('form');
- for (var k in keys) {
- elFormBilling.querySelector('#' + keys[k]).value = getElementValueCurrent(elFormDelivery.querySelector('#' + keys[k]));
- }
- });
- });
- }
- }, {
- key: "leave",
- value: function leave() {
- basket_superPropGet(PageStoreBasket, "leave", this, 3)([]);
- }
- }]);
-}(BasePage);
-basket_defineProperty(PageStoreBasket, "hash", hashPageStoreBasket);
-
-;// CONCATENATED MODULE: ./static/js/pages/store/home.js
-function store_home_typeof(o) { "@babel/helpers - typeof"; return store_home_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, store_home_typeof(o); }
-function store_home_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function store_home_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, store_home_toPropertyKey(o.key), o); } }
-function store_home_createClass(e, r, t) { return r && store_home_defineProperties(e.prototype, r), t && store_home_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function store_home_callSuper(t, o, e) { return o = store_home_getPrototypeOf(o), store_home_possibleConstructorReturn(t, store_home_isNativeReflectConstruct() ? Reflect.construct(o, e || [], store_home_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function store_home_possibleConstructorReturn(t, e) { if (e && ("object" == store_home_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return store_home_assertThisInitialized(t); }
-function store_home_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function store_home_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (store_home_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function store_home_superPropGet(t, e, o, r) { var p = store_home_get(store_home_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function store_home_get() { return store_home_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = store_home_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, store_home_get.apply(null, arguments); }
-function store_home_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = store_home_getPrototypeOf(t));); return t; }
-function store_home_getPrototypeOf(t) { return store_home_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, store_home_getPrototypeOf(t); }
-function store_home_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && store_home_setPrototypeOf(t, e); }
-function store_home_setPrototypeOf(t, e) { return store_home_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, store_home_setPrototypeOf(t, e); }
-function store_home_defineProperty(e, r, t) { return (r = store_home_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function store_home_toPropertyKey(t) { var i = store_home_toPrimitive(t, "string"); return "symbol" == store_home_typeof(i) ? i : i + ""; }
-function store_home_toPrimitive(t, r) { if ("object" != store_home_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != store_home_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-var PageStoreHome = /*#__PURE__*/function (_BasePage) {
- function PageStoreHome(router) {
- store_home_classCallCheck(this, PageStoreHome);
- return store_home_callSuper(this, PageStoreHome, [router]);
- }
- store_home_inherits(PageStoreHome, _BasePage);
- return store_home_createClass(PageStoreHome, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- this.hookupFiltersStore();
- this.hookupStoreHome();
- }
- }, {
- key: "leave",
- value: function leave() {
- store_home_superPropGet(PageStoreHome, "leave", this, 3)([]);
- }
- }]);
-}(BasePage);
-store_home_defineProperty(PageStoreHome, "hash", hashPageStoreHome);
-
-;// CONCATENATED MODULE: ./static/js/lib/business_objects/business_objects.js
-function business_objects_typeof(o) { "@babel/helpers - typeof"; return business_objects_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, business_objects_typeof(o); }
-function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
-function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
-function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
-function business_objects_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function business_objects_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, business_objects_toPropertyKey(o.key), o); } }
-function business_objects_createClass(e, r, t) { return r && business_objects_defineProperties(e.prototype, r), t && business_objects_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function business_objects_toPropertyKey(t) { var i = business_objects_toPrimitive(t, "string"); return "symbol" == business_objects_typeof(i) ? i : i + ""; }
-function business_objects_toPrimitive(t, r) { if ("object" != business_objects_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != business_objects_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-var BusinessObjects = /*#__PURE__*/function () {
- function BusinessObjects() {
- business_objects_classCallCheck(this, BusinessObjects);
- }
- return business_objects_createClass(BusinessObjects, null, [{
- key: "getOptionJsonFromObjectJsonAndKeys",
- value: function getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue) {
- var valueSelected = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
- return {
- text: objectJson[keyText],
- value: objectJson[keyValue],
- selected: objectJson[keyValue] == valueSelected
- };
- }
- }, {
- key: "getOptionJsonFromObjectJson",
- value: function getOptionJsonFromObjectJson(objectJson) {
- var valueSelected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
- var keyText = objectJson[flagNameAttrOptionText];
- var keyValue = objectJson[flagNameAttrOptionValue];
- if (_verbose) {
- console.log({
- objectJson: objectJson,
- keyText: keyText,
- keyValue: keyValue
- });
- }
- ;
- return BusinessObjects.getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected);
- }
- /*
- static getOptionJsonFromProductPermutation(permutation) {
- return {
- text: permutation
- };
- }
- */
- }, {
- key: "getObjectText",
- value: function getObjectText(objectJson) {
- return objectJson == null ? '' : objectJson[objectJson[flagNameAttrOptionText]];
- }
- }, {
- key: "getListObjectsFromIdDictAndCsv",
- value: function getListObjectsFromIdDictAndCsv(idDict, idCsv) {
- var listObjects = [];
- var ids = idCsv.split(',');
- var _iterator = _createForOfIteratorHelper(ids),
- _step;
- try {
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
- var id = _step.value;
- listObjects.push(idDict[id]);
- }
- } catch (err) {
- _iterator.e(err);
- } finally {
- _iterator.f();
- }
- return listObjects;
- }
- }]);
-}();
-
-;// CONCATENATED MODULE: ./static/js/lib/business_objects/store/product_permutation.js
-function product_permutation_typeof(o) { "@babel/helpers - typeof"; return product_permutation_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, product_permutation_typeof(o); }
-function product_permutation_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function product_permutation_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, product_permutation_toPropertyKey(o.key), o); } }
-function product_permutation_createClass(e, r, t) { return r && product_permutation_defineProperties(e.prototype, r), t && product_permutation_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function product_permutation_toPropertyKey(t) { var i = product_permutation_toPrimitive(t, "string"); return "symbol" == product_permutation_typeof(i) ? i : i + ""; }
-function product_permutation_toPrimitive(t, r) { if ("object" != product_permutation_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != product_permutation_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-var ProductPermutation = /*#__PURE__*/function () {
- function ProductPermutation() {
- product_permutation_classCallCheck(this, ProductPermutation);
- }
- return product_permutation_createClass(ProductPermutation, null, [{
- key: "getProductVariationsFromIdCsv",
- value: function getProductVariationsFromIdCsv(csvVariations) {
- var productVariations = [];
- if (!csvVariations) return productVariations;
- var variationPairs = csvVariations.split(',');
- if (variationPairs.length == 0) return productVariations;
- var parts;
- variationPairs.forEach(function (variationPair) {
- parts = variationPair.split(':');
- if (parts.length == 2) {
- var productVariationType = productVariationTypes[parts[0]];
- productVariationType[flagProductVariations].some(function (productVariation) {
- if (productVariation[attrIdProductVariation] == parts[1]) {
- productVariations.push([productVariationType, productVariation]);
- return true;
- }
- return false;
- });
- }
- });
- return productVariations;
- }
- }, {
- key: "getProductVariationsPreviewFromIdCsv",
- value: function getProductVariationsPreviewFromIdCsv(csvVariations) {
- var variationPairs = ProductPermutation.getProductVariationsFromIdCsv(csvVariations);
- var preview = '';
- if (variationPairs.length == 0) return preview;
- var variationType, variation;
- variationPairs.forEach(function (variationPair) {
- if (preview.length > 0) {
- preview += '\n';
- }
- variationType = variationPair[0];
- variation = variationPair[1];
- preview += variationType[flagName] + ': ' + variation[flagName];
- });
- return preview;
- }
- }, {
- key: "getProductVariationsIdCsvFromVariationTypeList",
- value: function getProductVariationsIdCsvFromVariationTypeList(variationTypeList) {
- var csvVariations = '';
- if (Validation.isEmpty(variationTypeList)) return csvVariations;
- variationTypeList.forEach(function (variationType) {
- if (csvVariations.length > 0) {
- csvVariations += ',';
- }
- csvVariations += variationType[attrIdProductVariationType] + ':' + variationType[flagProductVariations][0][attrIdProductVariation];
- });
- return csvVariations;
- }
- }]);
-}();
-
-;// CONCATENATED MODULE: ./static/js/lib/utils.js
-function utils_typeof(o) { "@babel/helpers - typeof"; return utils_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, utils_typeof(o); }
-function utils_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function utils_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, utils_toPropertyKey(o.key), o); } }
-function utils_createClass(e, r, t) { return r && utils_defineProperties(e.prototype, r), t && utils_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function utils_toPropertyKey(t) { var i = utils_toPrimitive(t, "string"); return "symbol" == utils_typeof(i) ? i : i + ""; }
-function utils_toPrimitive(t, r) { if ("object" != utils_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != utils_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-// Utility functions
-/*
-function $(selector) {
- return document.querySelector(selector);
-}
-
-function $$(selector) {
- return document.querySelectorAll(selector);
-}
-*/
-var Utils = /*#__PURE__*/function () {
- function Utils() {
- utils_classCallCheck(this, Utils);
- }
- return utils_createClass(Utils, null, [{
- key: "getListFromDict",
- value: function getListFromDict(dict) {
- var list = [];
- for (var key in dict) {
- list.push(dict[key]);
- }
- return list;
- }
- }]);
-}();
-
-;// CONCATENATED MODULE: ./static/js/components/common/temporary/overlay_error.js
-function overlay_error_typeof(o) { "@babel/helpers - typeof"; return overlay_error_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, overlay_error_typeof(o); }
-function overlay_error_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function overlay_error_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, overlay_error_toPropertyKey(o.key), o); } }
-function overlay_error_createClass(e, r, t) { return r && overlay_error_defineProperties(e.prototype, r), t && overlay_error_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function overlay_error_toPropertyKey(t) { var i = overlay_error_toPrimitive(t, "string"); return "symbol" == overlay_error_typeof(i) ? i : i + ""; }
-function overlay_error_toPrimitive(t, r) { if ("object" != overlay_error_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != overlay_error_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-var OverlayError = /*#__PURE__*/function () {
- function OverlayError() {
- overlay_error_classCallCheck(this, OverlayError);
- }
- return overlay_error_createClass(OverlayError, null, [{
- key: "hookup",
- value: function hookup() {
- Events.initialiseEventHandler(idOverlayError + ' button.' + flagCancel, flagInitialised, function (buttonCancel) {
- buttonCancel.addEventListener('click', function () {
- var overlay = document.querySelector(idOverlayError);
- overlay.style.visibility = 'hidden';
- });
- });
- }
- }, {
- key: "show",
- value: function show(msgError) {
- var overlay = document.querySelector(idOverlayError);
- var labelError = overlay.querySelector(idLabelError);
- labelError.innerText = msgError;
- overlay.style.visibility = 'visible';
- }
- }]);
-}();
-
-;// CONCATENATED MODULE: ./static/js/pages/base_table.js
-function base_table_typeof(o) { "@babel/helpers - typeof"; return base_table_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, base_table_typeof(o); }
-function base_table_defineProperty(e, r, t) { return (r = base_table_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function base_table_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function base_table_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, base_table_toPropertyKey(o.key), o); } }
-function base_table_createClass(e, r, t) { return r && base_table_defineProperties(e.prototype, r), t && base_table_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function base_table_toPropertyKey(t) { var i = base_table_toPrimitive(t, "string"); return "symbol" == base_table_typeof(i) ? i : i + ""; }
-function base_table_toPrimitive(t, r) { if ("object" != base_table_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != base_table_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-function base_table_callSuper(t, o, e) { return o = base_table_getPrototypeOf(o), base_table_possibleConstructorReturn(t, base_table_isNativeReflectConstruct() ? Reflect.construct(o, e || [], base_table_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function base_table_possibleConstructorReturn(t, e) { if (e && ("object" == base_table_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return base_table_assertThisInitialized(t); }
-function base_table_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function base_table_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (base_table_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function base_table_superPropGet(t, e, o, r) { var p = base_table_get(base_table_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function base_table_get() { return base_table_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = base_table_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, base_table_get.apply(null, arguments); }
-function base_table_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = base_table_getPrototypeOf(t));); return t; }
-function base_table_getPrototypeOf(t) { return base_table_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, base_table_getPrototypeOf(t); }
-function base_table_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && base_table_setPrototypeOf(t, e); }
-function base_table_setPrototypeOf(t, e) { return base_table_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, base_table_setPrototypeOf(t, e); }
-
-
-
-
-
-
-
-
-
-
-var TableBasePage = /*#__PURE__*/function (_BasePage) {
- // static hash
- // static attrIdRowObject
- // callSaveTableContent
-
- function TableBasePage(router) {
- var _this;
- base_table_classCallCheck(this, TableBasePage);
- _this = base_table_callSuper(this, TableBasePage, [router]);
- _this.cursorYInitial = null;
- _this.rowInitial = null;
- _this.placeholder = null;
- _this.dragSrcEl = null;
- _this.dragSrcRow = null;
- _this.hookupTableCellDdls = _this.hookupTableCellDdls.bind(_this);
- return _this;
- }
- base_table_inherits(TableBasePage, _BasePage);
- return base_table_createClass(TableBasePage, [{
- key: "initialize",
- value: function initialize() {
- var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- throw new Error("Must implement initialize() method.");
- }
- }, {
- key: "sharedInitialize",
- value: function sharedInitialize() {
- var _this2 = this;
- var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- var isSinglePageApp = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
- if (!isPopState) {
- base_table_superPropGet(TableBasePage, "sharedInitialize", this, 3)([]);
- this.hookupFilters();
- this.hookupButtonsSaveCancel();
- this.hookupTableMain();
- OverlayConfirm.hookup(function () {
- if (isSinglePageApp) {
- _this2.saveRecordsTableDirtySinglePageApp();
- } else {
- _this2.saveRecordsTableDirty();
- }
- });
- } else {
- var dataPage = this.getLocalStoragePage();
- var filters = dataPage[flagFormFilters];
- var formFilters = this.getFormFilters();
- var filtersDefault = DOM.convertForm2JSON(formFilters);
- if (!validation_Validation.areEqualDicts(filters, filtersDefault)) {
- this.callFilterTableContent();
- }
- }
- }
- }, {
- key: "hookupFilters",
- value: function hookupFilters() {
- if (this.constructor === TableBasePage) {
- throw new Error("Subclass of TableBasePage must implement method hookupFilters().");
- }
- }
- }, {
- key: "sharedHookupFilters",
- value: function sharedHookupFilters() {
- this.hookupButtonApplyFilters();
- }
- }, {
- key: "hookupFilterActive",
- value: function hookupFilterActive() {
- this.hookupFilter(flagActive);
- }
- }, {
- key: "hookupFilter",
- value: function hookupFilter(filterFlag) {
- var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, filter) {
- return TableBasePage.isDirtyFilter(filter);
- };
- var filterSelector = idFormFilters + ' .' + filterFlag;
- this.hookupEventHandler("change", filterSelector, handler);
- }
- }, {
- key: "hookupFilterIsNotEmpty",
- value: function hookupFilterIsNotEmpty() {
- this.hookupFilter(flagIsNotEmpty);
- }
- }, {
- key: "hookupButtonApplyFilters",
- value: function hookupButtonApplyFilters() {
- var _this3 = this;
- this.hookupEventHandler("click", idButtonApplyFilters, function (event, button) {
- event.stopPropagation();
- _this3.callFilterTableContent();
- });
- }
- /*
- getAndLoadFilteredTableContent = () => {
- this.callFilterTableContent()
- .catch(error => console.error('Error:', error));
- }
- */
- }, {
- key: "getFormFilters",
- value: function getFormFilters() {
- return document.querySelector(idFormFilters);
- }
- }, {
- key: "callFilterTableContent",
- value: function callFilterTableContent() {
- var formFilters = this.getFormFilters();
- var filtersJson = DOM.convertForm2JSON(formFilters);
- this.leave();
- api_API.goToHash(this.constructor.hash, filtersJson);
- }
- }, {
- key: "callbackLoadTableContent",
- value: function callbackLoadTableContent(response) {
- var table = TableBasePage.getTableMain();
- var bodyTable = table.querySelector('tbody');
- bodyTable.querySelectorAll('tr').forEach(function (row) {
- row.remove();
- });
- var rowsJson = response.data[flagRows];
- if (!validation_Validation.isEmpty(rowsJson) && rowsJson.every(function (row) {
- return row.hasOwnProperty('display_order');
- })) {
- rowsJson = rowsJson.sort(function (a, b) {
- return a.display_order - b.display_order;
- });
- }
- rowsJson.forEach(this.loadRowTable.bind(this));
- this.hookupTableMain();
- }
- }, {
- key: "loadRowTable",
- value: function loadRowTable(rowJson) {
- throw new Error("Subclass of TableBasePage must implement method loadRowTable().");
- }
- }, {
- key: "getAndLoadFilteredTableContentSinglePageApp",
- value: function getAndLoadFilteredTableContentSinglePageApp() {
- var _this4 = this;
- this.callFilterTableContent().then(function (data) {
- if (_verbose) {
- console.log('Table data received:', data);
- }
- _this4.callbackLoadTableContent(data);
- })["catch"](function (error) {
- return console.error('Error:', error);
- });
- }
- }, {
- key: "hookupButtonsSaveCancel",
- value: function hookupButtonsSaveCancel() {
- this.hookupButtonSave();
- this.hookupButtonCancel();
- this.toggleShowButtonsSaveCancel(false);
- }
- }, {
- key: "saveRecordsTableDirty",
- value: function saveRecordsTableDirty() {
- var _this5 = this;
- var records = this.getTableRecords(true);
- if (records.length == 0) {
- OverlayError.show('No records to save');
- return;
- }
- var formElement = this.getFormFilters();
- var comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));
- this.callSaveTableContent(records, formElement, comment).then(function (data) {
- if (data[flagStatus] == flagSuccess) {
- if (_verbose) {
- console.log('Records saved!');
- console.log('Data received:', data);
- }
- _this5.callFilterTableContent();
- } else {
- if (_verbose) {
- console.log("error: ", data[flagMessage]);
- }
- OverlayError.show(data[flagMessage]);
- }
- })["catch"](function (error) {
- return console.error('Error:', error);
- });
- }
- }, {
- key: "getTableRecords",
- value: function getTableRecords() {
- var _this6 = this;
- var dirtyOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- var records = [];
- var record;
- document.querySelectorAll(idTableMain + ' > tbody > tr').forEach(function (row) {
- if (dirtyOnly && !DOM.hasDirtyChildrenContainer(row)) return;
- record = _this6.getJsonRow(row);
- records.push(record);
- });
- return records;
- }
- }, {
- key: "getJsonRow",
- value: function getJsonRow(row) {
- throw new Error("Subclass of TableBasePage must implement method getJsonRow().");
- }
- }, {
- key: "saveRecordsTableDirtySinglePageApp",
- value: function saveRecordsTableDirtySinglePageApp() {
- var _this7 = this;
- var records = this.getTableRecords(true);
- if (records.length == 0) {
- OverlayError.show('No records to save');
- return;
- }
- var formElement = this.getFormFilters();
- var comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));
- this.callSaveTableContent(records, formElement, comment).then(function (data) {
- if (data[flagStatus] == flagSuccess) {
- if (_verbose) {
- console.log('Records saved!');
- console.log('Data received:', data);
- }
- _this7.callbackLoadTableContent(data);
- } else {
- if (_verbose) {
- console.log("error: ", data[flagMessage]);
- }
- OverlayError.show(data[flagMessage]);
- }
- })["catch"](function (error) {
- return console.error('Error:', error);
- });
- }
- }, {
- key: "hookupButtonCancel",
- value: function hookupButtonCancel() {
- var _this8 = this;
- Events.initialiseEventHandler(idFormFilters + ' button.' + flagCancel, flagInitialised, function (button) {
- button.addEventListener("click", function (event) {
- event.stopPropagation();
- _this8.callFilterTableContent();
- });
- button.classList.add(flagCollapsed);
- });
- }
- }, {
- key: "handleClickAddRowTable",
- value: function handleClickAddRowTable(event, button) {
- event.stopPropagation();
- _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - _rowBlank.getAttribute(this.constructor.attrIdRowObject));
- var tbody = document.querySelector(idTableMain + ' tbody');
- var row = _rowBlank.cloneNode(true);
- row.classList.remove(flagInitialised);
- row.querySelectorAll('.' + flagInitialised).forEach(function (element) {
- element.classList.remove(flagInitialised);
- });
- var countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;
- row.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);
- this.initialiseRowNew(tbody, row);
- tbody.appendChild(row);
- this.hookupTableMain();
- }
- }, {
- key: "initialiseRowNew",
- value: function initialiseRowNew(tbody, row) {
- if (this.constructor === TableBasePage) {
- throw new Error("Subclass of TableBasePage must implement method initialiseRowNew().");
- }
- row.classList.remove(flagRowNew);
- }
- }, {
- key: "hookupTableMain",
- value: function hookupTableMain() {
- var _this9 = this;
- if (this.constructor === TableBasePage) {
- throw new Error("Must implement hookupTableMain() method.");
- }
- if (true) {
- // _rowBlank == null) {
- Events.initialiseEventHandler(idTableMain, flagInitialised, function (table) {
- _this9.cacheRowBlank();
- });
- }
- }
- }, {
- key: "cacheRowBlank",
- value: function cacheRowBlank() {
- var selectorRowNew = idTableMain + ' tbody tr.' + flagRowNew;
- var rowBlankTemp = document.querySelector(selectorRowNew);
- if (_verbose) {
- console.log("row blank temp: ", rowBlankTemp);
- }
- var countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;
- _rowBlank = rowBlankTemp.cloneNode(true);
- document.querySelectorAll(selectorRowNew).forEach(function (row) {
- row.remove();
- });
- _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);
- }
- }, {
- key: "initialiseSliderDisplayOrderRowNew",
- value: function initialiseSliderDisplayOrderRowNew(tbody, row) {
- // let tdSelector = ':scope > tr > td.' + flagDisplayOrder;
- // let tbody = document.querySelector('table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody');
- var slidersDisplayOrder = tbody.querySelectorAll(':scope > tr > td.' + flagDisplayOrder + ' input.' + flagSlider);
- var maxDisplayOrder = 0;
- slidersDisplayOrder.forEach(function (slider) {
- maxDisplayOrder = Math.max(maxDisplayOrder, parseFloat(DOM.getElementValueCurrent(slider)));
- });
- var sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, maxDisplayOrder + 1);
- }
- }, {
- key: "hookupSlidersDisplayOrderTable",
- value: function hookupSlidersDisplayOrderTable() {
- var selectorDisplayOrder = idTableMain + ' tbody tr td.' + flagDisplayOrder + ' input.' + flagSlider + '.' + flagDisplayOrder;
- /*
- Events.initialiseEventHandler(selectorDisplayOrder, flagInitialised, (sliderDisplayOrder) => {
- /*
- sliderDisplayOrder.setAttribute('draggable', true);
- sliderDisplayOrder.addEventListener('dragstart', this.handleDragSliderStart.bind(this), false);
- sliderDisplayOrder.addEventListener('dragenter', this.handleDragSliderEnter.bind(this), false);
- sliderDisplayOrder.addEventListener('dragover', this.handleDragSliderOver.bind(this), false);
- sliderDisplayOrder.addEventListener('dragleave', this.handleDragSliderLeave.bind(this), false);
- sliderDisplayOrder.addEventListener('drop', this.handleDropSlider.bind(this), false);
- sliderDisplayOrder.addEventListener('dragend', this.handleDragSliderEnd.bind(this), false);
- *
- sliderDisplayOrder.addEventListener('change', (event) => {
- console.log("slider change event");
- this.handleChangeNestedElementCellTable(sliderDisplayOrder);
- });
- });
- */
- this.hookupChangeHandlerTableCells(selectorDisplayOrder);
- }
- }, {
- key: "hookupChangeHandlerTableCells",
- value: function hookupChangeHandlerTableCells(inputSelector) {
- var _this10 = this;
- var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, element) {
- _this10.handleChangeNestedElementCellTable(event, element);
- };
- Events.initialiseEventHandler(inputSelector, flagInitialised, function (input) {
- input.addEventListener("change", function (event) {
- handler(event, input);
- });
- handler(null, input);
- });
- // this.hookupEventHandler("change", inputSelector, handler);
- }
- /*
- handleChangeElementCellTable(event, element) {
- let row = DOM.getRowFromElement(element);
- let td = DOM.getCellFromElement(element);
- let wasDirtyRow = DOM.hasDirtyChildrenContainer(row);
- let wasDirtyElement = element.classList.contains(flagDirty);
- let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);
- if (isDirtyElement != wasDirtyElement) {
- DOM.handleDirtyElement(td, isDirtyElement);
- let isNowDirtyRow = DOM.hasDirtyChildrenContainer(row);
- if (isNowDirtyRow != wasDirtyRow) {
- DOM.handleDirtyElement(row, isNowDirtyRow);
- let rows = this.getTableRecords(true);
- let existsDirtyRecord = rows.length > 0;
- this.toggleShowButtonsSaveCancel(existsDirtyRecord);
- }
- }
- }
- handleChangeElementNestedCellTable(event, element, flagColumnList = [], orderNesting = 1) {
- let orderNestingTemp = orderNesting;
- let row, td, nestedRowSelector;
- while (orderNestingTemp > 0) {
- nestedRowSelector = idTableMain;
- for (let indexOrderNesting = 0; indexOrderNesting < orderNestingTemp; indexOrderNesting++) {
- nestedRowSelector += ' tbody tr';
- }
- row = DOM.getClosestParent(element, nestedRowSelector);
- td = row.querySelector('td.' + flag);
- }
- let row = DOM.getRowFromElement(element);
- let td = DOM.getCellFromElement(element);
- let wasDirtyRow = DOM.hasDirtyChildrenContainer(row);
- let wasDirtyElement = element.classList.contains(flagDirty);
- let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);
- if (isDirtyElement != wasDirtyElement) {
- DOM.handleDirtyElement(td, isDirtyElement);
- let isNowDirtyRow = DOM.hasDirtyChildrenContainer(row);
- if (isNowDirtyRow != wasDirtyRow) {
- DOM.handleDirtyElement(row, isNowDirtyRow);
- let rows = this.getTableRecords(true);
- let existsDirtyRecord = rows.length > 0;
- this.toggleShowButtonsSaveCancel(existsDirtyRecord);
- }
- }
- }
- handleChangeElementSubtableCell(event, element, flagFieldSubtable) {
- let rowSubtable = element.closest(idTableMain + ' td.' + flagFieldSubtable + ' tbody tr');
- let rowTable = rowSubtable.closest(idTableMain + ' > tbody > tr');
- let td = DOM.getCellFromElement(element);
- // let tdSubtable = td.closest('td.' + flagFieldSubtable);
- let wasDirtyRowSubtable = DOM.hasDirtyChildrenContainer(rowSubtable);
- let wasDirtyRowTable = DOM.hasDirtyChildrenContainer(rowTable);
- let wasDirtyElement = element.classList.contains(flagDirty);
- let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);
- console.log({isDirtyElement, wasDirtyElement});
- if (isDirtyElement != wasDirtyElement) {
- DOM.handleDirtyElement(td, isDirtyElement);
- let isNowDirtyRowSubtable = DOM.hasDirtyChildrenContainer(rowSubtable);
- console.log({isNowDirtyRowSubtable, wasDirtyRowSubtable});
- if (isNowDirtyRowSubtable != wasDirtyRowSubtable) {
- DOM.handleDirtyElement(rowSubtable, isNowDirtyRowSubtable);
- let isNowDirtyRowTable = DOM.hasDirtyChildrenContainer(rowTable);
- console.log({isNowDirtyRowTable, wasDirtyRowTable});
- if (isNowDirtyRowTable != wasDirtyRowTable) {
- DOM.handleDirtyElement(rowTable, isNowDirtyRowTable);
- let rows = this.getTableRecords(true);
- let existsDirtyRecord = rows.length > 0;
- this.toggleShowButtonsSaveCancel(existsDirtyRecord);
- }
- }
- }
- }
- */
- }, {
- key: "handleChangeNestedElementCellTable",
- value: function handleChangeNestedElementCellTable(event, element) {
- var wasDirtyParentRows = this.getAllIsDirtyRowsInParentTree(element);
- var wasDirtyElement = element.classList.contains(flagDirty);
- var isDirtyElement = DOM.updateAndCheckIsElementDirty(element);
- if (_verbose) {
- console.log({
- isDirtyElement: isDirtyElement,
- wasDirtyElement: wasDirtyElement,
- wasDirtyParentRows: wasDirtyParentRows
- });
- }
- var td = DOM.getCellFromElement(element);
- DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element));
- if (isDirtyElement != wasDirtyElement) {
- DOM.handleDirtyElement(td, isDirtyElement);
- this.updateAndToggleShowButtonsSaveCancel();
- this.cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows);
- }
- }
- }, {
- key: "getAllIsDirtyRowsInParentTree",
- value: function getAllIsDirtyRowsInParentTree(element) {
- var rows = [];
- var parent = element;
- var isDirty;
- while (parent) {
- if (parent.matches('tr')) {
- isDirty = parent.classList.contains(flagDirty);
- rows.push(isDirty);
- }
- parent = parent.parentElement;
- }
- return rows;
- }
- }, {
- key: "cascadeChangedIsDirtyNestedElementCellTable",
- value: function cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows) {
- if (validation_Validation.isEmpty(wasDirtyParentRows)) return;
- var td = DOM.getCellFromElement(element);
- var isDirtyTd = isDirtyElement || DOM.hasDirtyChildrenContainer(tr);
- DOM.handleDirtyElement(td, isDirtyTd);
- var tr = DOM.getRowFromElement(td);
- var isDirtyRow = isDirtyTd || DOM.hasDirtyChildrenContainer(tr);
- var wasDirtyRow = wasDirtyParentRows.shift();
- if (_verbose) {
- console.log({
- isDirtyRow: isDirtyRow,
- wasDirtyRow: wasDirtyRow
- });
- }
- if (isDirtyRow != wasDirtyRow) {
- DOM.handleDirtyElement(tr, isDirtyRow);
- this.updateAndToggleShowButtonsSaveCancel();
- this.cascadeChangedIsDirtyNestedElementCellTable(tr.parentElement, isDirtyRow, wasDirtyParentRows);
- }
- }
- }, {
- key: "hookupChangeHandlerTableCellsWhenNotCollapsed",
- value: function hookupChangeHandlerTableCellsWhenNotCollapsed(inputSelector) {
- var _this11 = this;
- var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, element) {
- if (!element.classList.contains(flagCollapsed)) _this11.handleChangeNestedElementCellTable(event, element);
- };
- this.hookupEventHandler("change", inputSelector, handler);
- }
- /* ToDo: Fix this slider drag and drop functionality
- handleDragSliderStart(event) {
- this.dragSrcEl = event.target;
- event.dataTransfer.effectAllowed = flagMove;
- /*
- console.log("setting outer html: ", this.dragSrcEl.outerHTML);
- event.dataTransfer.setData('text/html', this.dragSrcEl.outerHTML);
- *
- this.dragSrcRow = DOM.getRowFromElement(this.dragSrcEl);
- this.dragSrcEl.classList.add(flagDragging);
- }
- handleDragSliderOver(event) {
- if (event.preventDefault) {
- event.preventDefault();
- }
- event.dataTransfer.dropEffect = flagMove;
- return false;
- }
- handleDragSliderEnter(event) {
- event.target.closest('tr').classList.add(flagDragOver);
- }
- handleDragSliderLeave(event) {
- event.target.closest('tr').classList.remove(flagDragOver);
- }
- handleDropSlider(event) {
- event.stopPropagation();
- let targetRow = DOM.getRowFromElement(event.target);
- if (this.dragSourceRow != targetRow) {
- targetRow.classList.remove(flagDragOver);
- this.dragSrcEl.classList.remove(flagDragging);
- let sourceRowClone = this.dragSrcRow.cloneNode(true);
- let targetRowClone = targetRow.cloneNode(true);
- console.log("sourceRowClone: ", sourceRowClone);
- console.log("targetRowClone: ", targetRowClone);
- let tbody = targetRow.closest('tbody');
- tbody.replaceChild(sourceRowClone, targetRow);
- tbody.replaceChild(targetRowClone, this.dragSrcRow);
- this.refreshDisplayOrders();
- }
- return false;
- }
- handleDragSliderEnd(event) {
- let table = TableBasePage.getTableMain();
- let rows = table.querySelectorAll('tr');
- rows.forEach(row => {
- row.classList.remove(flagDragOver);
- row.classList.remove(flagDragging);
- });
- }
- refreshDisplayOrders() {
- console.log("updating display order values");
- let rows = document.querySelectorAll(idTableMain + 'tbody tr.' + flagRow);
- rows.forEach((row, indexRow) => {
- sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- sliderDisplayOrder.setAttribute(attrValueCurrent, indexRow);
- });
- }
- */
- }, {
- key: "hookupTextareasCodeTable",
- value: function hookupTextareasCodeTable() {
- this.hookupChangeHandlerTableCells(idTableMain + ' tbody tr td.' + flagCode + ' textarea');
- }
- }, {
- key: "hookupTextareasNameTable",
- value: function hookupTextareasNameTable() {
- this.hookupChangeHandlerTableCells(idTableMain + ' tbody tr td.' + flagName + ' textarea');
- }
- }, {
- key: "hookupTextareasDescriptionTable",
- value: function hookupTextareasDescriptionTable() {
- this.hookupChangeHandlerTableCells(idTableMain + ' tbody tr td.' + flagDescription + ' textarea');
- }
- }, {
- key: "hookupFieldsActive",
- value: function hookupFieldsActive() {
- var _this12 = this;
- var flagTable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
- var handleClickRowNew = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, element) {
- _this12.handleClickAddRowTable(event, element);
- };
- var selectorButton = 'table' + (validation_Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody > tr > td.' + flagActive + ' button';
- var selectorButtonDelete = selectorButton + '.' + flagDelete;
- var selectorButtonUndelete = selectorButton + ':not(.' + flagDelete + ')';
- console.log("hookupFieldsActive: ", selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupEventHandler("click", 'table' + (validation_Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > thead > tr > th.' + flagActive + ' button', function (event, button) {
- handleClickRowNew(event, button);
- });
- }
- }, {
- key: "hookupButtonsRowDelete",
- value: function hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete) {
- var _this13 = this;
- var changeHandler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (event, element) {
- _this13.handleChangeNestedElementCellTable(event, element);
- };
- this.hookupEventHandler("click", selectorButtonDelete, function (event, element) {
- _this13.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, function (changeEvent, changeElement) {
- changeHandler(changeEvent, changeElement);
- });
- });
- }
- }, {
- key: "handleClickButtonRowDelete",
- value: function handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete) {
- var _this14 = this;
- var changeHandler = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (event, element) {
- _this14.handleChangeNestedElementCellTable(event, element);
- };
- var row = DOM.getRowFromElement(element);
- if (row.classList.contains(flagRowNew) && !DOM.hasDirtyChildrenContainer(row)) {
- row.parentNode.removeChild(row);
- }
- var buttonAdd = element.cloneNode(false);
- buttonAdd.classList.remove(flagInitialised);
- buttonAdd.classList.remove(flagDelete);
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- element.replaceWith(buttonAdd);
- changeHandler(null, buttonAdd);
- this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, function (changeEvent, changeElement) {
- changeHandler(changeEvent, changeElement);
- });
- this.updateAndToggleShowButtonsSaveCancel();
- }
- }, {
- key: "hookupButtonsRowUndelete",
- value: function hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete) {
- var _this15 = this;
- var changeHandler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (event, element) {
- _this15.handleChangeNestedElementCellTable(event, element);
- };
- this.hookupEventHandler("click", selectorButtonUndelete, function (event, element) {
- _this15.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, function (changeEvent, changeElement) {
- changeHandler(changeEvent, changeElement);
- });
- });
- }
- }, {
- key: "handleClickButtonRowUndelete",
- value: function handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete) {
- var _this16 = this;
- var changeHandler = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (event, element) {
- _this16.handleChangeNestedElementCellTable(event, element);
- };
- var buttonDelete = element.cloneNode(false);
- buttonDelete.classList.remove(flagInitialised);
- buttonDelete.classList.remove(flagAdd);
- buttonDelete.classList.add(flagDelete);
- buttonDelete.textContent = 'x';
- element.replaceWith(buttonDelete);
- changeHandler(null, buttonDelete);
- this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, function (changeEvent, changeElement) {
- changeHandler(changeEvent, changeElement);
- });
- this.updateAndToggleShowButtonsSaveCancel();
- }
- }, {
- key: "hookupTdsAccessLevel",
- value: function hookupTdsAccessLevel() {
- var cellSelector = idTableMain + ' tbody td.' + flagAccessLevel;
- this.hookupTableCellDdlPreviews(cellSelector, Utils.getListFromDict(accessLevels));
- }
- }, {
- key: "hookupTableCellDdlPreviews",
- value: function hookupTableCellDdlPreviews(cellSelector, optionList) {
- var _this17 = this;
- var ddlHookup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (cellSelector) {
- _this17.hookupTableCellDdls(cellSelector);
- };
- var changeHandler = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function (event, element) {
- _this17.handleChangeNestedElementCellTable(event, element);
- };
- this.hookupEventHandler("click", cellSelector, function (event, td) {
- _this17.handleClickTableCellDdlPreview(event, td, optionList, cellSelector, function (cellSelector) {
- ddlHookup(cellSelector, function (event, element) {
- changeHandler(event, element);
- });
- });
- });
- ddlHookup(cellSelector + ' select');
- }
- }, {
- key: "hookupTableCellDdls",
- value: function hookupTableCellDdls(ddlSelector) {
- var _this18 = this;
- var changeHandler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, element) {
- _this18.handleChangeNestedElementCellTable(event, element);
- };
- this.hookupEventHandler("change", ddlSelector, function (event, element) {
- changeHandler(event, element);
- });
- }
- }, {
- key: "handleClickTableCellDdlPreview",
- value: function handleClickTableCellDdlPreview(event, td, optionObjectList, cellSelector) {
- var _this19 = this;
- var ddlHookup = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (cellSelector) {
- _this19.hookupTableCellDdls(cellSelector);
- };
- if (td.querySelector('select')) return;
- // td.removeEventListener("click", ddlHookup);
- var tdNew = td.cloneNode(true);
- td.parentNode.replaceChild(tdNew, td);
- var idSelected = DOM.getElementAttributeValueCurrent(tdNew);
- tdNew.innerHTML = '';
- var ddl = document.createElement('select');
- DOM.setElementValuesCurrentAndPrevious(ddl, idSelected);
- var optionJson, option;
- if (_verbose) {
- console.log("click table cell ddl preview");
- console.log({
- optionObjectList: optionObjectList,
- cellSelector: cellSelector
- });
- }
- option = DOM.createOption(null);
- ddl.appendChild(option);
- optionObjectList.forEach(function (optionObjectJson) {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(optionObjectJson, idSelected);
- option = DOM.createOption(optionJson);
- ddl.appendChild(option);
- });
- tdNew.appendChild(ddl);
- var ddlSelector = cellSelector + ' select';
- ddlHookup(ddlSelector);
- }
- /*
- handleChangeTableCellDdl(event, ddl) {
- let row = DOM.getRowFromElement(ddl);
- let td = DOM.getCellFromElement(ddl);
- console.log("td: ", td);
- let wasDirtyRow = DOM.hasDirtyChildrenContainer(row);
- let wasDirtyElement = ddl.classList.contains(flagDirty);
- let isDirtyElement = DOM.updateAndCheckIsElementDirty(ddl);
- console.log("isDirtyElement: ", isDirtyElement);
- console.log("wasDirtyElement: ", wasDirtyElement);
- if (isDirtyElement != wasDirtyElement) {
- DOM.handleDirtyElement(td, isDirtyElement);
- let optionSelected = ddl.options[ddl.selectedIndex];
- DOM.setElementAttributeValueCurrent(td, optionSelected.value);
- let isNowDirtyRow = DOM.hasDirtyChildrenContainer(row);
- console.log("isNowDirtyRow: ", isNowDirtyRow);
- console.log("wasDirtyRow: ", wasDirtyRow);
- if (isNowDirtyRow != wasDirtyRow) {
- DOM.handleDirtyElement(row, isNowDirtyRow);
- let rows = this.getTableRecords(true);
- let existsDirtyRecord = rows.length > 0;
- console.log("dirty records:", rows);
- console.log("existsDirtyRecord:", existsDirtyRecord);
- this.toggleShowButtonsSaveCancel(existsDirtyRecord);
- }
- }
- }
- */
- }, {
- key: "hookupTableCellDDlPreviewsWhenNotCollapsed",
- value: function hookupTableCellDDlPreviewsWhenNotCollapsed(cellSelector, optionList) {
- var _this20 = this;
- var ddlHookup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (event, element) {
- _this20.hookupTableCellDdls(event, element);
- };
- this.hookupEventHandler("click", cellSelector, function (event, td) {
- var div = td.querySelector('div');
- if (!div || div.classList.contains(flagCollapsed)) return;
- _this20.handleClickTableCellDdlPreview(event, td, optionList, cellSelector, function (event, element) {
- ddlHookup(event, element);
- });
- });
- }
- }, {
- key: "hookupProductCategoryDdls",
- value: function hookupProductCategoryDdls(ddlSelector) {
- var _this21 = this;
- this.hookupChangeHandlerTableCells(ddlSelector, function (event, element) {
- _this21.handleChangeProductCategoryDdl(event, element);
- });
- }
- }, {
- key: "handleChangeProductCategoryDdl",
- value: function handleChangeProductCategoryDdl(event, ddlCategory) {
- this.handleChangeNestedElementCellTable(event, ddlCategory);
- var idProductCategorySelected = DOM.getElementAttributeValueCurrent(ddlCategory);
- var row = DOM.getRowFromElement(ddlCategory);
- var tdProduct = row.querySelector('td.' + flagProduct);
- tdProduct.dispatchEvent(new Event('click'));
- var ddlProduct = row.querySelector('td.' + flagProduct + ' select');
- ddlProduct.innerHTML = '';
- ddlProduct.appendChild(DOM.createOption(null));
- var optionJson, option;
- Utils.getListFromDict(products).forEach(function (product) {
- if (idProductCategorySelected != '0' && product[attrIdProductCategory] != idProductCategorySelected) return;
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(product);
- option = DOM.createOption(optionJson);
- ddlProduct.appendChild(option);
- });
- this.handleChangeNestedElementCellTable(event, ddlProduct);
- }
- }, {
- key: "hookupFieldsProductPermutationVariation",
- value: function hookupFieldsProductPermutationVariation() {
- this.hookupPreviewsProductPermutationVariation();
- this.hookupDdlsProductPermutationVariationType();
- this.hookupDdlsProductPermutationVariation();
- this.hookupButtonsProductPermutationVariationAddDelete();
- }
- }, {
- key: "hookupPreviewsProductPermutationVariation",
- value: function hookupPreviewsProductPermutationVariation() {
- var _this22 = this;
- this.hookupEventHandler("click", idTableMain + ' td.' + flagProductVariations, function (event, element) {
- return _this22.handleClickProductPermutationVariationsPreview(event, element);
- });
- }
- }, {
- key: "handleClickProductPermutationVariationsPreview",
- value: function handleClickProductPermutationVariationsPreview(event, element) {
- var _this23 = this;
- var tblVariations = element.querySelector('table.' + flagProductVariations);
- if (!validation_Validation.isEmpty(tblVariations)) return;
- this.toggleColumnCollapsed(flagProductVariations, false);
- var permutationVariations = this.getElementProductVariations(element);
- tblVariations = document.createElement("table");
- tblVariations.classList.add(flagProductVariations);
- var thead = document.createElement("thead");
- var tr = document.createElement("tr");
- var thVariationType = document.createElement("th");
- thVariationType.classList.add(flagProductVariationType);
- thVariationType.textContent = 'Type';
- var thNameVariation = document.createElement("th");
- thNameVariation.classList.add(flagProductVariation);
- thNameVariation.textContent = 'Name';
- var buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- var thAddDelete = document.createElement("th");
- thAddDelete.classList.add(flagAdd);
- thAddDelete.appendChild(buttonAdd);
- tr.appendChild(thVariationType);
- tr.appendChild(thNameVariation);
- tr.appendChild(thAddDelete);
- thead.appendChild(tr);
- tblVariations.appendChild(thead);
- var tbody = document.createElement("tbody");
- if (!validation_Validation.isEmpty(permutationVariations)) {
- permutationVariations.forEach(function (permutationVariation, index) {
- _this23.addProductPermutationVariationRow(tbody, permutationVariation);
- });
- }
- tblVariations.appendChild(tbody);
- if (_verbose) {
- console.log("click product permutation variations preview");
- console.log('variations:', permutationVariations);
- console.log("tblVariations: ", tblVariations);
- }
- var cellParent = element.closest(idTableMain + ' tbody tr td.' + flagProductVariations);
- cellParent.innerHTML = '';
- cellParent.appendChild(tblVariations);
- this.hookupFieldsProductPermutationVariation();
- }
- }, {
- key: "toggleColumnCollapsed",
- value: function toggleColumnCollapsed(flagColumn, isCollapsed) {
- this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagCollapsed);
- }
- }, {
- key: "toggleColumnHeaderCollapsed",
- value: function toggleColumnHeaderCollapsed(flagColumn, isCollapsed) {
- this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagCollapsed);
- }
- }, {
- key: "getElementProductVariations",
- value: function getElementProductVariations(element) {
- var permutationVariations = element.getAttribute(attrValueCurrent);
- var objVariations = [];
- var parts, new_variation, new_variation_type;
- if (!validation_Validation.isEmpty(permutationVariations)) {
- permutationVariations = permutationVariations.split(',');
- permutationVariations.forEach(function (variation) {
- parts = variation.split(':');
- if (parts.length == 2) {
- if (_verbose) {
- console.log("parts: ", parts);
- }
- new_variation_type = productVariationTypes[parts[0].trim()];
- new_variation = productVariations[parts[1].trim()];
- objVariations.push(base_table_defineProperty(base_table_defineProperty({}, flagProductVariationType, new_variation_type), flagProductVariation, new_variation));
- } else {
- if (_verbose) {
- console.log("error: invalid variation: ", variation);
- }
- }
- });
- }
- return objVariations;
- }
- }, {
- key: "addProductPermutationVariationRow",
- value: function addProductPermutationVariationRow(tbody, permutationVariation) {
- if (_verbose) {
- console.log("permutationVariation: ", permutationVariation);
- }
- var productVariationType, optionProductVariationTypeJson, optionProductVariationType, productVariation, optionProductVariationJson, optionProductVariation;
- /*
- if (Validation.isEmpty(variations)) {
- return;
- }
- */
- var productVariationKeys = Object.keys(productVariations);
- var productVariationTypeKeys = Object.keys(productVariationTypes);
- var ddlsProductVariationType = tbody.querySelectorAll('select.' + flagProductVariationType);
- var productVariationTypeKeysSelected = new Set();
- var valueSelected;
- var doFilterProductVariationKeys = permutationVariation[attrIdProductVariationType] != 0;
- ddlsProductVariationType.forEach(function (ddlProductVariationType) {
- valueSelected = DOM.getElementValueCurrent(ddlProductVariationType);
- productVariationTypeKeysSelected.add(valueSelected);
- });
- productVariationTypeKeys = productVariationTypeKeys.filter(function (typeKey) {
- return !productVariationTypeKeysSelected.has(typeKey);
- });
- if (productVariationTypeKeys.length == 0) return;
- if (doFilterProductVariationKeys) {
- productVariationKeys = productVariationKeys.filter(function (variationKey) {
- return !productVariationTypeKeysSelected.has(productVariations[variationKey][attrIdProductVariationType]);
- });
- }
- var permutationVariationJson = permutationVariation[flagProductVariation];
- var permutationVariationTypeJson = permutationVariation[flagProductVariationType];
- var tdVariationType = document.createElement("td");
- tdVariationType.classList.add(flagProductVariationType);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdVariationType, permutationVariationTypeJson[attrIdProductVariationType]);
- var ddlVariationType = document.createElement("select");
- ddlVariationType.classList.add(flagProductVariationType);
- DOM.setElementAttributesValuesCurrentAndPrevious(ddlVariationType, permutationVariationTypeJson[attrIdProductVariationType]);
- optionProductVariationType = DOM.createOption(null);
- if (_verbose) {
- console.log("optionProductVariationType: ", optionProductVariationType);
- }
- ddlVariationType.appendChild(optionProductVariationType);
- productVariationTypeKeys.forEach(function (productVariationTypeKey) {
- /*
- optionProductVariationType = document.createElement('option');
- optionProductVariationType.value = optionVariationType.value;
- optionProductVariationType.text = optionVariationType.text;
- */
- productVariationType = productVariationTypes[productVariationTypeKey];
- optionProductVariationTypeJson = BusinessObjects.getOptionJsonFromObjectJson(productVariationType, permutationVariationTypeJson[attrIdProductVariationType]);
- optionProductVariationType = DOM.createOption(optionProductVariationTypeJson);
- if (_verbose) {
- console.log("optionProductVariationType: ", optionProductVariationType);
- }
- ddlVariationType.appendChild(optionProductVariationType);
- });
- var tdVariation = document.createElement("td");
- tdVariation.classList.add(flagProductVariation);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdVariation, permutationVariationJson[attrIdProductVariation]);
- var ddlVariation = document.createElement("select");
- ddlVariation.classList.add(flagProductVariation);
- DOM.setElementAttributesValuesCurrentAndPrevious(ddlVariation, permutationVariationJson[attrIdProductVariation]);
- optionProductVariation = DOM.createOption(null);
- if (_verbose) {
- console.log("optionProductVariation: ", optionProductVariation);
- }
- ddlVariation.appendChild(optionProductVariation);
- productVariationKeys.forEach(function (productVariationKey) {
- productVariation = productVariations[productVariationKey];
- optionProductVariationJson = BusinessObjects.getOptionJsonFromObjectJson(productVariation, permutationVariationJson[attrIdProductVariation]);
- optionProductVariation = DOM.createOption(optionProductVariationJson);
- if (_verbose) {
- console.log("optionProductVariation: ", optionProductVariation);
- }
- ddlVariation.appendChild(optionProductVariation);
- });
- var tdDelete = document.createElement("td");
- tdDelete.classList.add(flagDelete);
- var buttonDelete = document.createElement("button");
- buttonDelete.classList.add(flagActive);
- buttonDelete.classList.add(flagDelete);
- buttonDelete.textContent = 'x';
- DOM.setElementAttributesValuesCurrentAndPrevious(buttonDelete, true);
- var tr = document.createElement("tr");
- tr.classList.add(flagProductVariation);
- tdVariationType.appendChild(ddlVariationType);
- tr.appendChild(tdVariationType);
- tdVariation.appendChild(ddlVariation);
- tr.appendChild(tdVariation);
- tdDelete.appendChild(buttonDelete);
- tr.appendChild(tdDelete);
- tbody.appendChild(tr);
- }
- }, {
- key: "hookupDdlsProductPermutationVariationType",
- value: function hookupDdlsProductPermutationVariationType() {
- var _this24 = this;
- this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariationType + ' select', function (event, ddlVariationType) {
- _this24.handleChangeProductVariationInput(event, ddlVariationType);
- var idVariationTypeSelected = DOM.getElementValueCurrent(ddlVariationType);
- var row = DOM.getRowFromElement(ddlVariationType);
- var tdVariation = row.querySelector('td.' + flagProductVariation);
- tdVariation.dispatchEvent(new Event('click'));
- var ddlVariation = row.querySelector('td.' + flagProductVariation + ' select');
- ddlVariation.innerHTML = '';
- ddlVariation.appendChild(DOM.createOption(null));
- var optionJson, option;
- var variationType = productVariationTypes[idVariationTypeSelected];
- if (variationType == null) variationType = base_table_defineProperty({}, flagProductVariations, []);
- variationType[flagProductVariations].forEach(function (variation) {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(variation);
- option = DOM.createOption(optionJson);
- ddlVariation.appendChild(option);
- });
- _this24.handleChangeProductVariationInput(event, ddlVariation);
- });
- }
- }, {
- key: "handleChangeProductVariationInput",
- value: function handleChangeProductVariationInput(event, element) {
- this.handleChangeNestedElementCellTable(event, element);
- this.updateProductPermutationVariations(element);
- }
- }, {
- key: "hookupDdlsProductPermutationVariation",
- value: function hookupDdlsProductPermutationVariation() {
- var _this25 = this;
- this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation + ' select', function (event, ddlVariation) {
- _this25.handleChangeProductVariationInput(event, ddlVariation);
- });
- }
- }, {
- key: "hookupButtonsProductPermutationVariationAddDelete",
- value: function hookupButtonsProductPermutationVariationAddDelete() {
- var _this26 = this;
- var selectorButton = idTableMain + ' td.' + flagProductVariations + ' tr.' + flagProductVariation + ' button';
- var selectorButtonDelete = selectorButton + '.' + flagDelete;
- var selectorButtonUndelete = selectorButton + '.' + flagAdd;
- this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, function (event, element) {
- _this26.handleChangeProductVariationInput(event, element);
- });
- this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, function (event, element) {
- _this26.handleChangeProductVariationInput(event, element);
- });
- this.hookupButtonsProductPermutationVariationAdd();
- }
- }, {
- key: "hookupButtonsProductPermutationVariationAdd",
- value: function hookupButtonsProductPermutationVariationAdd() {
- var _this27 = this;
- this.hookupEventHandler("click", idTableMain + ' td.' + flagProductVariations + ' button.' + flagAdd, function (event, element) {
- _this27.handleClickButtonProductPermutationVariationAdd(event, element);
- });
- }
- }, {
- key: "handleClickButtonProductPermutationVariationAdd",
- value: function handleClickButtonProductPermutationVariationAdd(event, element) {
- var variationsCell = element.closest('td.' + flagProductVariations);
- var tbody = variationsCell.querySelector('tbody');
- var permutationVariation = TableBasePage.createOptionUnselectedProductVariation();
- this.addProductPermutationVariationRow(tbody, permutationVariation);
- this.hookupFieldsProductPermutationVariation();
- }
- }, {
- key: "updateProductPermutationVariations",
- value: function updateProductPermutationVariations(element) {
- var variationsCell = element.closest('td.' + flagProductVariations);
- var variationPairsString = this.getProductPermutationVariationsText(variationsCell);
- DOM.setElementAttributeValueCurrent(variationsCell, variationPairsString);
- this.handleChangeNestedElementCellTable(null, variationsCell);
- }
- }, {
- key: "getProductPermutationVariationsText",
- value: function getProductPermutationVariationsText(variationsTd) {
- var rows = variationsTd.querySelectorAll(':scope tbody tr:has(button.' + flagDelete + ')');
- var variationPairsString = '';
- var ddlVariationType, ddlVariation, idVariationType, idVariation;
- rows.forEach(function (row, index) {
- ddlVariationType = row.querySelector(':scope td select.' + flagProductVariationType);
- ddlVariation = row.querySelector(':scope td select.' + flagProductVariation);
- idVariationType = DOM.getElementValueCurrent(ddlVariationType);
- idVariation = DOM.getElementValueCurrent(ddlVariation);
- if (variationPairsString != '') variationPairsString += ',';
- variationPairsString += idVariationType + ':' + idVariation;
- });
- return variationPairsString;
- }
- }, {
- key: "hookupCurrencyFields",
- value: function hookupCurrencyFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagCurrency, Utils.getListFromDict(currencies));
- }
- }, {
- key: "createTdActive",
- value: function createTdActive(isActive) {
- var tdActive = document.createElement("td");
- tdActive.classList.add(flagActive);
- var buttonActive = document.createElement("button");
- buttonActive.classList.add(flagActive);
- buttonActive.classList.add(isActive ? flagDelete : flagAdd);
- buttonActive.textContent = isActive ? 'x' : '+';
- DOM.setElementAttributesValuesCurrentAndPrevious(buttonActive, isActive);
- tdActive.appendChild(buttonActive);
- return tdActive;
- }
- }, {
- key: "leave",
- value: function leave() {
- if (this.constructor === TableBasePage) {
- throw new Error("Must implement leave() method.");
- }
- base_table_superPropGet(TableBasePage, "leave", this, 3)([]);
- var formFilters = this.getFormFilters();
- var dataPage = {};
- dataPage[flagFormFilters] = DOM.convertForm2JSON(formFilters);
- this.setLocalStoragePage(dataPage);
- // _rowBlank = null;
- }
- }, {
- key: "toggleColumnHasClassnameFlag",
- value: function toggleColumnHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {
- var table = TableBasePage.getTableMain();
- var columnTh = table.querySelector('th.' + columnFlag);
- var columnThHasFlag = columnTh.classList.contains(classnameFlag);
- if (isRequiredFlag == columnThHasFlag) return;
- DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);
- /*
- let columnTds = table.querySelectorAll('td.' + columnFlag);
- columnTds.forEach((columnTd) => {
- DOM.toggleElementHasClassnameFlag(columnTd, isRequiredFlag, classnameFlag);
- });
- */
- }
- }, {
- key: "toggleColumnHeaderHasClassnameFlag",
- value: function toggleColumnHeaderHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {
- var table = TableBasePage.getTableMain();
- var columnTh = table.querySelector('th.' + columnFlag);
- DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);
- }
- }, {
- key: "updateAndToggleShowButtonsSaveCancel",
- value: function updateAndToggleShowButtonsSaveCancel() {
- var records = this.getTableRecords(true);
- var existsDirtyRecord = records.length > 0;
- this.toggleShowButtonsSaveCancel(existsDirtyRecord);
- }
- }], [{
- key: "isDirtyFilter",
- value: function isDirtyFilter(filter) {
- var isDirty = DOM.updateAndCheckIsElementDirty(filter);
- if (isDirty) {
- var tbody = document.querySelector(idTableMain + ' tbody');
- tbody.querySelectorAll('tr').remove();
- tbody.appendChild(document.createElement('Press "Apply Filters" to refresh the table.
'));
- }
- return isDirty;
- }
- }, {
- key: "getTableMain",
- value: function getTableMain() {
- return document.querySelector(idTableMain);
- }
- }, {
- key: "createOptionUnselectedProductVariation",
- value: function createOptionUnselectedProductVariation() {
- return base_table_defineProperty(base_table_defineProperty({}, flagProductVariationType, base_table_defineProperty(base_table_defineProperty(base_table_defineProperty(base_table_defineProperty({}, flagNameAttrOptionText, [flagName]), flagNameAttrOptionValue, [attrIdProductVariationType]), flagName, 'Select Variation Type'), attrIdProductVariationType, 0)), flagProductVariation, base_table_defineProperty(base_table_defineProperty(base_table_defineProperty(base_table_defineProperty({}, flagNameAttrOptionText, [flagName]), flagNameAttrOptionValue, [attrIdProductVariation]), flagName, 'Select Variation'), attrIdProductVariation, 0));
- }
- }]);
-}(BasePage);
-/* Example of a subclass of TableBasePage
-import { TableBasePage } from "./page_table_base.js";
-import API from "../api.js";
-import DOM from "../dom.js";
-
-export class PageStoreProductCategories extends TableBasePage {
- static hash = hashPageStoreProductCategories;
- static attrIdRowObject = attrIdProductCategory;
- callSaveTableContent = API.saveCategories;
-
- constructor() {}
- initialize() {}
- hookupFilters() {}
- loadRowTable(rowJson) {}
- getJsonRow(row) {}
- initialiseRowNew(tbody, row) {}
- hookupTableMain() {}
- isDirtyRow(row) {}
- leave() {}
-}
-*/
-
-;// CONCATENATED MODULE: ./static/js/pages/store/mixin.js
-function mixin_typeof(o) { "@babel/helpers - typeof"; return mixin_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, mixin_typeof(o); }
-function mixin_createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = mixin_unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
-function mixin_unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return mixin_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? mixin_arrayLikeToArray(r, a) : void 0; } }
-function mixin_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
-function mixin_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
-function mixin_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? mixin_ownKeys(Object(t), !0).forEach(function (r) { mixin_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : mixin_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
-function mixin_defineProperty(e, r, t) { return (r = mixin_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function mixin_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function mixin_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, mixin_toPropertyKey(o.key), o); } }
-function mixin_createClass(e, r, t) { return r && mixin_defineProperties(e.prototype, r), t && mixin_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function mixin_toPropertyKey(t) { var i = mixin_toPrimitive(t, "string"); return "symbol" == mixin_typeof(i) ? i : i + ""; }
-function mixin_toPrimitive(t, r) { if ("object" != mixin_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != mixin_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-
-
-// import BasePage from "../base.js";
-
-
-var StoreMixinPage = /*#__PURE__*/function () {
- function StoreMixinPage(pageCurrent) {
- mixin_classCallCheck(this, StoreMixinPage);
- this.page = pageCurrent;
- }
- return mixin_createClass(StoreMixinPage, [{
- key: "initialize",
- value: function initialize() {
- console.log('hookup store start for ', this.page.hash);
- this.hookupFilters();
- this.hookupLocalStorageStore();
- this.hookupBasket();
- this.hookupButtonsAddToBasket();
- }
- }, {
- key: "hookupFilters",
- value: function hookupFilters() {
- this.hookupFilterCurrency();
- this.hookupFilterDeliveryRegion();
- this.hookupFilterIsIncludedVAT();
- }
- }, {
- key: "hookupFilterCurrency",
- value: function hookupFilterCurrency() {
- /*
- let elForm = document.querySelectorAll(idFormCurrency);
- let elSelector = document.querySelectorAll(elForm.querySelector('select')[0]);
- Events.initialiseEventHandler(elSelector, flagInitialised, function(){
- elForm = document.querySelectorAll(idFormCurrency);
- elSelector.addEventListener("change", function(event) {
- ajaxData = {};
- ajaxData[flagForm] = convertForm2JSON(elForm);
- console.log('sending data to currency selector controller: '); console.log(ajaxData);
- ajaxJSONData('select currency', mapHashToController(hashStoreSelectCurrency), ajaxData, function() { window.location.reload() }, false);
- let optionSelected = elSelector.options[elSelector.selectedIndex]
- let textSelected = optionSelected.getAttribute(attrDataShort)
-
- });
- });
- console.log("form currency initialised")
- */
-
- var dropdownCurrency = document.querySelectorAll(idCurrency)[0];
- // dropdownCurrency.options.map(function(option) {
- var option, indexHyphen, textOption;
- for (var indexOption = 0; indexOption < dropdownCurrency.options.length; indexOption++) {
- option = document.querySelectorAll(dropdownCurrency.options[indexOption]);
- textOption = option.text();
- indexHyphen = textOption.indexOf('-');
- option.setAttribute(attrTextExpanded, textOption);
- option.setAttribute(attrTextCollapsed, textOption.substring(0, indexHyphen - 1));
- option.classList.add(flagCollapsed);
- }
- handleSelectCollapse(dropdownCurrency);
- Events.initialiseEventHandler(dropdownCurrency, flagInitialised, function () {
- dropdownCurrency = document.querySelectorAll(dropdownCurrency);
- dropdownCurrency.addEventListener("focus", function () {
- handleSelectExpand(dropdownCurrency);
- });
- dropdownCurrency.addEventListener("blur", function () {
- handleSelectCollapse(dropdownCurrency);
- });
- dropdownCurrency.addEventListener("change", function () {
- var selectedCurrency = dropdownCurrency.val();
- if (_verbose) {
- console.log("selected currency: ", selectedCurrency);
- }
- var basket = LocalStorage.getLocalStorage(keyBasket);
- basket[keyIdCurrency] = selectedCurrency;
- // LocalStorage.setLocalStorage(keyIdCurrency, selectedCurrency);
- LocalStorage.setLocalStorage(keyBasket, basket);
- var ajaxData = {};
- ajaxData[keyBasket] = basket;
- ajaxJSONData('update currency', mapHashToController(hashPageCurrent), ajaxData, loadPageBody, false);
- });
- });
- }
- }, {
- key: "hookupFilterDeliveryRegion",
- value: function hookupFilterDeliveryRegion() {
- /*
- let elForm = document.querySelectorAll(idFormDeliveryRegion);
- let elSelector = document.querySelectorAll(elForm.querySelector('select')[0]);
- Events.initialiseEventHandler(elSelector, flagInitialised, function(){
- elForm = document.querySelectorAll(idFormDeliveryRegion);
- elSelector.addEventListener("change", function(event) {
- ajaxData = {};
- ajaxData[flagForm] = convertForm2JSON(elForm);
- console.log('sending data to delivery region selector controller: '); console.log(ajaxData);
- ajaxJSONData('select delivery region', mapHashToController(hashStoreSelectDeliveryRegion), ajaxData, function() { window.location.reload() }, false);
- });
- console.log("form delivery region initialised")
- });
- */
-
- var dropdownRegion = document.querySelectorAll(idRegionDelivery)[0];
- var option, indexHyphen, textOption;
- for (var indexOption = 0; indexOption < dropdownRegion.options.length; indexOption++) {
- option = document.querySelectorAll(dropdownRegion.options[indexOption]);
- textOption = option.text();
- indexHyphen = textOption.indexOf('-');
- option.setAttribute(attrTextExpanded, textOption);
- option.setAttribute(attrTextCollapsed, textOption.substring(0, indexHyphen - 1));
- option.classList.add(flagCollapsed);
- }
- handleSelectCollapse(dropdownRegion);
- Events.initialiseEventHandler(dropdownRegion, flagInitialised, function () {
- dropdownRegion = document.querySelectorAll(dropdownRegion);
- dropdownRegion.addEventListener("focus", function () {
- if (_verbose) {
- console.log("dropdown region focused");
- }
- handleSelectExpand(dropdownRegion);
- });
- dropdownRegion.addEventListener("blur", function () {
- if (_verbose) {
- console.log("dropdown region blurred");
- }
- handleSelectCollapse(dropdownRegion);
- });
- dropdownRegion.addEventListener("change", function () {
- handleSelectCollapse(dropdownRegion);
- var selectedRegion = dropdownRegion.val();
- if (_verbose) {
- console.log("selected region: ", selectedRegion);
- }
- var basket = LocalStorage.getLocalStorage(keyBasket);
- basket[keyIdRegionDelivery] = selectedRegion;
- // LocalStorage.setLocalStorage(keyIdRegionDelivery, selectedRegion);
- LocalStorage.setLocalStorage(keyBasket, basket);
- var ajaxData = {};
- ajaxData[keyIdRegionDelivery] = selectedRegion;
- ajaxJSONData('update region', mapHashToController(hashStoreSetRegion), ajaxData, null, false);
- });
- });
- }
- }, {
- key: "hookupFilterIsIncludedVAT",
- value: function hookupFilterIsIncludedVAT() {
- var elForm = document.querySelectorAll(idFormIsIncludedVAT);
- var elSelector = document.querySelectorAll(elForm.querySelector('input[type="checkbox"]')[0]);
- Events.initialiseEventHandler(elSelector, flagInitialised, function () {
- elForm = document.querySelectorAll(idFormIsIncludedVAT);
- elSelector.addEventListener("change", function (event) {
- ajaxData = {};
- ajaxData[flagForm] = convertForm2JSON(elForm);
- if (_verbose) {
- console.log('sending data to include VAT controller: ');
- console.log(ajaxData);
- }
- ajaxJSONData('set include VAT', mapHashToController(hashStoreSetIsIncludedVAT), ajaxData, function () {
- window.location.reload();
- }, false);
- });
- if (_verbose) {
- console.log("form is included VAT initialised");
- }
- });
- }
- }, {
- key: "hookupLocalStorage",
- value: function hookupLocalStorage() {
- // setupPageLocalStorage(hashPageCurrent);
- // let lsPage = getPageLocalStorage(hashPageCurrent);
- // let d = {}
- // d[keyBasket] = LocalStorage.getLocalStorage(keyBasket); // (keyBasket in lsPage) ? lsPage[keyBasket] : {'items': []};
- // console.log('d:'); console.log(d);
- var basketLocalStorage = LocalStorage.getLocalStorage(keyBasket);
- if (!StoreMixinPage.validateBasket(basketLocalStorage)) {
- if (_verbose) {
- console.log('locally-stored basket not valid');
- }
- basketLocalStorage = StoreMixinPage.makeNewBasket();
- }
- var basketServer = StoreMixinPage.validateBasket(userBasket) ? userBasket : basketLocalStorage;
- var basket = StoreMixinPage.areEqualBaskets(basketLocalStorage, basketServer) ? basketServer : StoreMixinPage.mergeBaskets(basketLocalStorage, basketServer);
- if (!StoreMixinPage.areEqualBaskets(basketLocalStorage, basket)) {
- LocalStorage.setLocalStorage(keyBasket, basket);
- }
- if (!StoreMixinPage.areEqualBaskets(basketServer, basket)) {
- /*
- let ajaxData = {}
- ajaxData[keyBasket] = basket;
- // console.log("hookupLocalStorageStore\nhashStoreBasketLoad: " + hashStoreBasketLoad + "\n");
- // ajaxData[keyIsIncludedVAT] = LocalStorage.getLocalStorage(keyIsIncludedVAT);
- console.log('ajax:' + ajaxData);
- ajaxJSONData(keyBasket, mapHashToController(hashStoreBasketLoad), ajaxData, loadBasket, false);
- */
- API.saveStoreBasket(basket);
- }
- userBasket = basket;
- }
- }, {
- key: "hookupBasket",
- value: function hookupBasket() {
- // const containerBasket = document.querySelectorAll(idContainerBasket);
- this.toggleShowButtonCheckout(); // containerBasket
- this.hookupButtonCheckout();
- this.hookupBasketItemPlusAndMinusButtons();
- this.hookupBasketAddInputs();
- this.hookupBasketEditInputs();
- this.hookupDeleteBasketItemButtons();
- }
- }, {
- key: "toggleShowButtonCheckout",
- value: function toggleShowButtonCheckout() {
- if (_verbose) {
- console.log("toggling checkout button");
- }
- var buttonCheckout = document.querySelectorAll(idButtonCheckout);
- var labelBasketEmpty = document.querySelectorAll(idLabelBasketEmpty);
- if (userBasket['items'].length == 0) {
- buttonCheckout.style.display = "none";
- labelBasketEmpty.style.display = "";
- } else {
- buttonCheckout.style.display = "";
- labelBasketEmpty.style.display = "none";
- }
- }
- }, {
- key: "hookupButtonCheckout",
- value: function hookupButtonCheckout() {
- if (_verbose) {
- console.log("hooking up checkout button");
- }
- var buttonCheckout = document.querySelectorAll(idButtonCheckout);
- // let lsPage = getPageLocalStorage(hashPageCurrent);
- Events.initialiseEventHandler(buttonCheckout, flagInitialised, function () {
- buttonCheckout.addEventListener("click", function () {
- /*
- //setupPageLocalStorageNext(hashPageStoreBasket);
- let basket = LocalStorage.getLocalStorage(keyBasket);
- // goToPage(hashPageStoreBasket);
- let ajaxData = {};
- ajaxData[keyBasket] = basket;
- ajaxJSONData('checkout', mapHashToController(hashPageStoreBasket), ajaxData, null, false);
- */
- this.router.navigateToHash(hashPageStoreBasket);
- });
- });
- }
- }, {
- key: "hookupBasketItemPlusAndMinusButtons",
- value: function hookupBasketItemPlusAndMinusButtons() {
- var minVal = 1;
- var basket = document.querySelector(idFormBasket);
- // Basket Add
- // Increment
- basket.querySelectorAll('div.btn-increment[' + attrFormType + '=' + typeFormBasketAdd + ']').each(function () {
- var elButton = this;
- Events.initialiseEventHandler(elButton, flagInitialised, function () {
- elButton.addEventListener("click", function (event) {
- event.preventDefault();
- event.stopPropagation();
- var elInput = document.querySelectorAll(getFormProductSelector(typeFormBasketAdd, elButton)).querySelector('input[type="number"]');
- // console.log('input selector ='); console.log('form[' + attrFormType + '=' + elButton.getAttribute(attrFormType) + '][' + attrIdProduct + '=' + elButton.getAttribute(attrIdProduct) + ']');
- var newVal = parseInt(DOM.getElementValueCurrent(elInput));
- if (isNaN(newVal)) newVal = minVal;
- newVal += 1;
- elInput.val(newVal);
- });
- });
- });
- // Decrement
- basket.querySelectorAll('div.btn-decrement[' + attrFormType + '=' + typeFormBasketAdd + ']').each(function () {
- var elButton = this;
- Events.initialiseEventHandler(elButton, flagInitialised, function () {
- elButton.addEventListener("click", function (event) {
- event.preventDefault();
- event.stopPropagation();
- // let product = document.querySelectorAll('.card.subcard[' + attrIdProduct +'=' + elButton.getAttribute(attrIdProduct) + ']');
- var elInput = document.querySelectorAll(getFormProductSelector(typeFormBasketAdd, elButton)).querySelector('input[type="number"]');
- var newVal = parseInt(DOM.getElementValueCurrent(elInput));
- if (isNaN(newVal)) newVal = minVal;
- newVal = Math.max(minVal, newVal - 1);
- elInput.val(newVal);
- });
- });
- });
-
- // Basket Edit
- // Increment
- basket.querySelectorAll('div.btn-increment[' + attrFormType + '=' + typeFormBasketEdit + ']').each(function () {
- var elButton = this;
- Events.initialiseEventHandler(elButton, flagInitialised, function () {
- elButton.addEventListener("click", function (event) {
- event.stopPropagation();
- // basketItem = document.querySelectorAll('.card.subcard[' + attrIdProduct +'=' + elButton.getAttribute(attrIdProduct) + ']');
- var elInput = document.querySelectorAll(getFormProductSelector(typeFormBasketEdit, elButton)).querySelector('input[type="number"]');
- // console.log('input selector ='); console.log('form[' + attrFormType + '=' + elButton.getAttribute(attrFormType) + '][' + attrIdProduct + '=' + elButton.getAttribute(attrIdProduct) + ']');
- var newVal = parseInt(DOM.getElementValueCurrent(elInput));
- if (isNaN(newVal)) newVal = minVal;
- newVal += 1;
- elInput.val(newVal);
- elInput.trigger("change");
- });
- });
- });
- // Decrement
- basket.querySelectorAll('div.btn-decrement[' + attrFormType + '=' + typeFormBasketEdit + ']').each(function () {
- var elButton = this;
- Events.initialiseEventHandler(elButton, flagInitialised, function () {
- elButton.addEventListener("click", function (event) {
- event.stopPropagation();
- var elInput = document.querySelectorAll(getFormProductSelector(typeFormBasketEdit, elButton)).querySelector('input[type="number"]');
- var newVal = parseInt(DOM.getElementValueCurrent(elInput));
- if (isNaN(newVal)) newVal = minVal;
- newVal = Math.max(minVal, newVal - 1);
- elInput.val(newVal);
- elInput.trigger("change");
- });
- });
- });
- }
- }, {
- key: "hookupBasketAddForms",
- value: function hookupBasketAddForms() {
- var basketAddFormSelector = 'form[' + attrFormType + '=' + typeFormBasketAdd + ']';
- Events.initialiseEventHandler(basketAddFormSelector, flagInitialised, function (basketAddForm) {
- var quantityInput = basketAddForm.querySelector('input[type="number"]');
- quantityInput.addEventListener("change", function (event) {
- var newVal = parseInt(quantityInput.value);
- if (isNaN(newVal) || newVal < 0) {
- quantityInput.value = 0;
- }
- });
- var buttonSubmit = basketAddForm.querySelector('button'); // [type="submit"]
- buttonSubmit.addEventListener("click", function (event) {
- event.preventDefault();
- event.stopPropagation();
- var newBasketItem = {};
- newBasketItem[keyIdProductPermutation] = basketAddForm.getAttribute(attrIdPermutation);
- newBasketItem[keyQuantity] = quantityInput.value;
- API.storeAddToBasket(newBasketItem);
- });
- });
- }
- }, {
- key: "hookupBasketEditForms",
- value: function hookupBasketEditForms() {
- var basketEditFormSelector = 'form[' + attrFormType + '=' + typeFormBasketEdit + ']';
- Events.initialiseEventHandler(basketEditFormSelector, flagInitialised, function (basketEditForm) {
- var quantityInput = basketEditForm.querySelector('input[type="number"]');
- quantityInput.addEventListener("change", function (event) {
- var newVal = parseInt(quantityInput.value);
- if (isNaN(newVal) || newVal < 0) {
- quantityInput.value = 0;
- }
- if (quantityInput.value != basketEditForm.getAttribute(attrQuantity)) {
- var newBasketItem = {};
- newBasketItem[keyIdProductPermutation] = basketEditForm.getAttribute(attrIdPermutation);
- newBasketItem[keyQuantity] = quantityInput.value;
- API.storeSaveBasket(newBasketItem);
- }
- });
- var deleteButton = basketEditForm.querySelector('button'); // [type="button"]
- deleteButton.addEventListener("click", function (event) {
- event.preventDefault();
- event.stopPropagation();
- API.storeDeleteBasketItem(basketEditForm.getAttribute(attrIdPermutation));
- });
- });
- }
- }, {
- key: "loadBasket",
- value: function loadBasket(response) {
- userBasket = response.data[keyBasket];
- var basketForm = document.querySelectorAll(idFormBasket);
- /*
- basketForm.replaceChildren();
- let items = userBasket[keyItems];
- let basketItem;
- items.forEach(item => {
- basketItem = document.createElement('div');
- basketForm.appendChild(basketItem);
- });
- */
- var htmlBlock = response.data[keyHtmlBlock];
- basketForm.innerHTML = htmlBlock;
- this.hookupBasket();
- }
- }, {
- key: "getCurrencySelected",
- value: function getCurrencySelected() {
- var elementSelectorCurrency = document.querySelectorAll(idSelectorCurrency);
- var selectedCurrency = elementSelectorCurrency.val();
- if (_verbose) {
- console.log("selected currency: ", selectedCurrency);
- }
- return selectedCurrency;
- }
- }, {
- key: "hookupStoreCardsProduct",
- value: function hookupStoreCardsProduct() {
- var d; // , lsShared;
- var selectorCardProduct = '.card.subcard';
- Events.initialiseEventHandler(selectorCardProduct, flagInitialised, function (cardProduct) {
- if (_verbose) {
- console.log("initialising product card: ", cardProduct);
- }
- cardProduct.addEventListener("click", function (event) {
- // d = { keyIdProduct: product.getAttribute(attrIdProduct) }
- var elemClicked = event.target;
- if (elemClicked.id != 'submit') {
- // disable for submit buttons
- if (_verbose) {
- console.log("product click: " + cardProduct.getAttribute(attrIdProduct));
- console.log("permutation click: " + cardProduct.getAttribute(attrIdPermutation));
- }
- var d = {};
- d[keyIdProduct] = cardProduct.getAttribute(attrIdProduct);
- d[keyIdPermutation] = cardProduct.getAttribute(attrIdPermutation);
- // send quantity requested
- goToPage(hashPageStoreProduct, d);
- }
- });
- if (_verbose) {
- console.log("click method added for product ID: " + cardProduct.getAttribute(attrIdProduct) + ', permutation ID: ', cardProduct.getAttribute(attrIdPermutation));
- }
- });
- }
- }, {
- key: "leave",
- value: function leave() {}
-
- /*
- getFormProductSelector(typeForm, elementInForm) {
- idPermutation = elementInForm.getAttribute(attrIdPermutation);
- console.log('idPermutation: ', idPermutation);
- hasPermutation = !Validation.isEmpty(idPermutation);
- console.log('has permutation: ', hasPermutation);
- selectorIdPermutation = hasPermutation ? '[' + attrIdPermutation + '=' + idPermutation + ']' : '';
- return 'form[' + attrFormType + '="' + typeForm + '"][' + attrIdProduct + '=' + elementInForm.getAttribute(attrIdProduct) + ']' + selectorIdPermutation;
- }
-
- addMetadataBasketToJSON(jsonData) {
- jsonData[keyIdCurrency] = LocalStorage.getLocalStorage(keyIdCurrency);
- jsonData[keyIdRegionDelivery] = LocalStorage.getLocalStorage(keyIdRegionDelivery);
- jsonData[keyIsIncludedVAT] = LocalStorage.getLocalStorage(keyIsIncludedVAT);
- return jsonData;
- }
- */
-
- /*
- loadFiltersFromLocalStorage(pageHash, parameters_dict) {
-
- let lsOld = getPageLocalStorage(pageHashCurrent);
- pageHashCurrent = pageHash;
- clearPageLocalStorage(pageHashCurrent);
- setupPageLocalStorage(pageHashCurrent);
- let lsNew = getPageLocalStorage(pageHashCurrent);
- lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};
- setPageLocalStorage(pageHashCurrent, lsNew);
-
- goToPage(pageHash, parameters_dict);
- }
- */
- }], [{
- key: "validateBasket",
- value: function validateBasket(basket) {
- return validation_Validation.isEmpty(basket) && validation_Validation.dictHasKey(basket, keyItems) && validation_Validation.dictHasKey(basket, keyIsIncludedVAT) && validation_Validation.dictHasKey(basket, keyIdCurrency) && validation_Validation.dictHasKey(basket, keyIdRegionDelivery);
- }
- }, {
- key: "makeNewBasket",
- value: function makeNewBasket() {
- return mixin_defineProperty(mixin_defineProperty(mixin_defineProperty(mixin_defineProperty({}, keyItems, []), keyIsIncludedVAT, true), keyIdCurrency, 1), keyIdRegionDelivery, 1);
- }
- }, {
- key: "areEqualBaskets",
- value: function areEqualBaskets(basket1, basket2) {
- return JSON.stringify(basket1) === JSON.stringify(basket2);
- }
- }, {
- key: "mergeBaskets",
- value: function mergeBaskets(basketPrimary, basketSecondary) {
- var basket = mixin_objectSpread(mixin_objectSpread({}, basketSecondary), basketPrimary);
- var items = {};
- var _iterator = mixin_createForOfIteratorHelper(basketSecondary[keyItems]),
- _step;
- try {
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
- var item = _step.value;
- items[item[keyIdPermutation]] = item.Quantity;
- }
- } catch (err) {
- _iterator.e(err);
- } finally {
- _iterator.f();
- }
- var _iterator2 = mixin_createForOfIteratorHelper(basketPrimary[keyItems]),
- _step2;
- try {
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
- var _item = _step2.value;
- items[_item[keyIdPermutation]] = items[_item[keyIdPermutation]] ? items[_item[keyIdPermutation]] + _item.Quantity : _item.Quantity;
- }
- } catch (err) {
- _iterator2.e(err);
- } finally {
- _iterator2.f();
- }
- basket[keyItems] = Object.values(items);
- return basket;
- }
- }]);
-}();
-
-;// CONCATENATED MODULE: ./static/js/pages/store/mixin_table.js
-function mixin_table_typeof(o) { "@babel/helpers - typeof"; return mixin_table_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, mixin_table_typeof(o); }
-function mixin_table_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function mixin_table_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, mixin_table_toPropertyKey(o.key), o); } }
-function mixin_table_createClass(e, r, t) { return r && mixin_table_defineProperties(e.prototype, r), t && mixin_table_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function mixin_table_toPropertyKey(t) { var i = mixin_table_toPrimitive(t, "string"); return "symbol" == mixin_table_typeof(i) ? i : i + ""; }
-function mixin_table_toPrimitive(t, r) { if ("object" != mixin_table_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != mixin_table_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-function mixin_table_callSuper(t, o, e) { return o = mixin_table_getPrototypeOf(o), mixin_table_possibleConstructorReturn(t, mixin_table_isNativeReflectConstruct() ? Reflect.construct(o, e || [], mixin_table_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function mixin_table_possibleConstructorReturn(t, e) { if (e && ("object" == mixin_table_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return mixin_table_assertThisInitialized(t); }
-function mixin_table_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function mixin_table_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (mixin_table_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function mixin_table_superPropGet(t, e, o, r) { var p = mixin_table_get(mixin_table_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function mixin_table_get() { return mixin_table_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = mixin_table_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, mixin_table_get.apply(null, arguments); }
-function mixin_table_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = mixin_table_getPrototypeOf(t));); return t; }
-function mixin_table_getPrototypeOf(t) { return mixin_table_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, mixin_table_getPrototypeOf(t); }
-function mixin_table_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && mixin_table_setPrototypeOf(t, e); }
-function mixin_table_setPrototypeOf(t, e) { return mixin_table_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, mixin_table_setPrototypeOf(t, e); }
-
-
-
-// import BasePage from "../base.js";
-
-
-
-var StoreTableMixinPage = /*#__PURE__*/function (_StoreMixinPage) {
- function StoreTableMixinPage(pageCurrent) {
- mixin_table_classCallCheck(this, StoreTableMixinPage);
- return mixin_table_callSuper(this, StoreTableMixinPage, [pageCurrent]);
- }
- mixin_table_inherits(StoreTableMixinPage, _StoreMixinPage);
- return mixin_table_createClass(StoreTableMixinPage, [{
- key: "initialize",
- value: function initialize() {
- mixin_table_superPropGet(StoreTableMixinPage, "initialize", this, 3)([]);
- this.hookupFilters();
- this.hookupTable();
- }
- }, {
- key: "hookupFilters",
- value: function hookupFilters() {
- // Implement filter-specific functionality here
- }
- }, {
- key: "hookupTable",
- value: function hookupTable() {
- // Implement table-specific functionality here
- }
- }]);
-}(StoreMixinPage);
-
-;// CONCATENATED MODULE: ./static/js/pages/store/manufacturing_purchase_orders.js
-function manufacturing_purchase_orders_typeof(o) { "@babel/helpers - typeof"; return manufacturing_purchase_orders_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, manufacturing_purchase_orders_typeof(o); }
-function manufacturing_purchase_orders_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function manufacturing_purchase_orders_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, manufacturing_purchase_orders_toPropertyKey(o.key), o); } }
-function manufacturing_purchase_orders_createClass(e, r, t) { return r && manufacturing_purchase_orders_defineProperties(e.prototype, r), t && manufacturing_purchase_orders_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function manufacturing_purchase_orders_callSuper(t, o, e) { return o = manufacturing_purchase_orders_getPrototypeOf(o), manufacturing_purchase_orders_possibleConstructorReturn(t, manufacturing_purchase_orders_isNativeReflectConstruct() ? Reflect.construct(o, e || [], manufacturing_purchase_orders_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function manufacturing_purchase_orders_possibleConstructorReturn(t, e) { if (e && ("object" == manufacturing_purchase_orders_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return manufacturing_purchase_orders_assertThisInitialized(t); }
-function manufacturing_purchase_orders_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function manufacturing_purchase_orders_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (manufacturing_purchase_orders_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function manufacturing_purchase_orders_superPropGet(t, e, o, r) { var p = manufacturing_purchase_orders_get(manufacturing_purchase_orders_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function manufacturing_purchase_orders_get() { return manufacturing_purchase_orders_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = manufacturing_purchase_orders_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, manufacturing_purchase_orders_get.apply(null, arguments); }
-function manufacturing_purchase_orders_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = manufacturing_purchase_orders_getPrototypeOf(t));); return t; }
-function manufacturing_purchase_orders_getPrototypeOf(t) { return manufacturing_purchase_orders_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, manufacturing_purchase_orders_getPrototypeOf(t); }
-function manufacturing_purchase_orders_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && manufacturing_purchase_orders_setPrototypeOf(t, e); }
-function manufacturing_purchase_orders_setPrototypeOf(t, e) { return manufacturing_purchase_orders_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, manufacturing_purchase_orders_setPrototypeOf(t, e); }
-function manufacturing_purchase_orders_defineProperty(e, r, t) { return (r = manufacturing_purchase_orders_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function manufacturing_purchase_orders_toPropertyKey(t) { var i = manufacturing_purchase_orders_toPrimitive(t, "string"); return "symbol" == manufacturing_purchase_orders_typeof(i) ? i : i + ""; }
-function manufacturing_purchase_orders_toPrimitive(t, r) { if ("object" != manufacturing_purchase_orders_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != manufacturing_purchase_orders_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-
-
-
-
-
-
-
-
-var PageStoreManufacturingPurchaseOrders = /*#__PURE__*/function (_TableBasePage) {
- function PageStoreManufacturingPurchaseOrders(router) {
- var _this;
- manufacturing_purchase_orders_classCallCheck(this, PageStoreManufacturingPurchaseOrders);
- _this = manufacturing_purchase_orders_callSuper(this, PageStoreManufacturingPurchaseOrders, [router]);
- manufacturing_purchase_orders_defineProperty(_this, "callSaveTableContent", api_API.saveManufacturingPurchaseOrders);
- _this.storeMixin = new StoreTableMixinPage(_this);
- return _this;
- }
- manufacturing_purchase_orders_inherits(PageStoreManufacturingPurchaseOrders, _TableBasePage);
- return manufacturing_purchase_orders_createClass(PageStoreManufacturingPurchaseOrders, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }, {
- key: "hookupFilters",
- value: function hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterActive();
- }
- }, {
- key: "loadRowTable",
- value: function loadRowTable(rowJson) {}
- }, {
- key: "getJsonRow",
- value: function getJsonRow(row) {
- var _this2 = this;
- if (row == null) return;
- var tdCurrency = row.querySelector('td.' + flagCurrency);
- var inputCostTotalLocalVatExcl = row.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
- var inputCostTotalLocalVatIncl = row.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
- var inputPriceTotalLocalVatExcl = row.querySelector('td.' + flagPriceTotalLocalVatExcl + ' input');
- var inputPriceTotalLocalVatIncl = row.querySelector('td.' + flagPriceTotalLocalVatIncl + ' input');
- var trsPurchaseOrderItem = row.querySelectorAll('tr.' + flagOrderItems);
- var buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
- var jsonRow = {};
- jsonRow[attrIdManufacturingPurchaseOrder] = row.getAttribute(attrIdManufacturingPurchaseOrder);
- jsonRow[attrIdCurrency] = DOM.getElementAttributeValueCurrent(tdCurrency);
- jsonRow[flagCostTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatExcl);
- jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl);
- jsonRow[flagPriceTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputPriceTotalLocalVatExcl);
- jsonRow[flagPriceTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputPriceTotalLocalVatIncl);
- var orderItems = [];
- if (trsPurchaseOrderItem != null) {
- trsPurchaseOrderItem.forEach(function (tr) {
- orderItems.push(_this2.getJsonRowOrderItem(tr));
- });
- }
- jsonRow[flagOrderItems] = orderItems;
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- }, {
- key: "getJsonRowOrderItem",
- value: function getJsonRowOrderItem(tr) {
- var inputDisplayOrder = tr.querySelector('td.' + flagDisplayOrder + ' input');
- var tdCategory = tr.querySelector('td.' + flagProductCategory);
- var tdProduct = tr.querySelector('td.' + flagProduct);
- var tdVariations = tr.querySelector('td.' + flagProductVariations);
- var tdUnitQuantity = tr.querySelector('td.' + flagUnitMeasurementQuantity);
- var inputQuantityUsed = tr.querySelector('td.' + flagQuantityUsed + ' input');
- var inputQuantityProduced = tr.querySelector('td.' + flagQuantityProduced + ' input');
- var tdUnitMeasurementLatencyManufacture = tr.querySelector('td.' + flagUnitMeasurementLatencyManufacture);
- var inputLatencyManufacture = tr.querySelector('td.' + flagLatencyManufacture + ' input');
- var buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
- var jsonRow = {};
- jsonRow[attrIdManufacturingPurchaseOrder] = tr.getAttribute(attrIdManufacturingPurchaseOrder);
- jsonRow[attrIdManufacturingPurchaseOrderProductLink] = tr.getAttribute(attrIdManufacturingPurchaseOrderProductLink);
- jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
- jsonRow[attrIdProductCategory] = DOM.getElementAttributeValueCurrent(tdCategory);
- jsonRow[attrIdProduct] = DOM.getElementAttributeValueCurrent(tdProduct);
- jsonRow[flagProductVariations] = DOM.getElementAttributeValueCurrent(tdVariations);
- jsonRow[attrIdUnitMeasurementQuantity] = DOM.getElementAttributeValueCurrent(tdUnitQuantity);
- jsonRow[flagQuantityUsed] = DOM.getElementAttributeValueCurrent(inputQuantityUsed);
- jsonRow[flagQuantityProduced] = DOM.getElementAttributeValueCurrent(inputQuantityProduced);
- jsonRow[attrIdUnitMeasurementLatencyManufacture] = DOM.getElementAttributeValueCurrent(tdUnitMeasurementLatencyManufacture);
- jsonRow[flagLatencyManufacture] = DOM.getElementAttributeValueCurrent(inputLatencyManufacture);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- }, {
- key: "initialiseRowNew",
- value: function initialiseRowNew(tbody, row) {
- manufacturing_purchase_orders_superPropGet(PageStoreManufacturingPurchaseOrders, "initialiseRowNew", this, 3)([tbody, row]);
- }
- }, {
- key: "hookupTableMain",
- value: function hookupTableMain() {
- manufacturing_purchase_orders_superPropGet(PageStoreManufacturingPurchaseOrders, "hookupTableMain", this, 3)([]);
- this.hookupCurrencyFields();
- this.hookupCostAndPriceInputs();
- this.hookupOrderItemsFields();
- this.hookupFieldsActive();
- }
- }, {
- key: "hookupCostAndPriceInputs",
- value: function hookupCostAndPriceInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatIncl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPriceTotalLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPriceTotalLocalVatIncl + ' input');
- }
- }, {
- key: "hookupOrderItemsFields",
- value: function hookupOrderItemsFields() {
- this.hookupOrderItemsPreviews();
- this.hookupFieldsOrderItemDisplayOrder();
- this.hookupFieldsOrderItemProductCategory();
- this.hookupFieldsOrderItemProduct();
- this.hookupFieldsOrderItemProductVariations();
- this.hookupFieldsOrderItemUnitQuantity();
- this.hookupFieldsOrderItemQuantityUsed();
- this.hookupFieldsOrderItemQuantityProduced();
- this.hookupFieldsOrderItemUnitMeasurementLatencyManufacture();
- this.hookupFieldsOrderItemLatencyManufacture();
- this.hookupFieldsOrderItemActive();
- this.hookupFieldsOrderItemAddDelete();
- this.hookupButtonsOrderItemAdd();
- }
- }, {
- key: "hookupOrderItemsPreviews",
- value: function hookupOrderItemsPreviews() {
- var _this3 = this;
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems, function (event, td) {
- if (!td.classList.contains(flagCollapsed)) return;
- _this3.handleClickOrderItemsPreview(event, td);
- });
- }
- }, {
- key: "handleClickOrderItemsPreview",
- value: function handleClickOrderItemsPreview(event, element) {
- var _this4 = this;
- if (_verbose) {
- console.log("click order items preview");
- }
- this.toggleColumnHeaderCollapsed(flagOrderItems, false);
- element.classList.remove(flagCollapsed);
- var row = DOM.getRowFromElement(element);
- var idManufacturingPurchaseOrder = row.getAttribute(attrIdManufacturingPurchaseOrder);
- var manufacturingPurchaseOrder = idManufacturingPurchaseOrder > 0 ? manufacturingPurchaseOrders[idManufacturingPurchaseOrder] : manufacturing_purchase_orders_defineProperty({}, flagOrderItems, []);
- var tblOrderItems = document.createElement("table");
- tblOrderItems.classList.add(flagOrderItems);
- var thead = document.createElement("thead");
- var tr = document.createElement("tr");
- var thDisplayOrder = document.createElement("th");
- thDisplayOrder.classList.add(flagDisplayOrder);
- thDisplayOrder.textContent = 'Display Order';
- var thCategory = document.createElement("th");
- thCategory.classList.add(flagProductCategory);
- thCategory.textContent = 'Category';
- var thProduct = document.createElement("th");
- thProduct.classList.add(flagProduct);
- thProduct.textContent = 'Product';
- var thVariations = document.createElement("th");
- thVariations.classList.add(flagProductVariations);
- thVariations.classList.add(flagCollapsed);
- thVariations.textContent = 'Variations';
- var thUnitQuantity = document.createElement("th");
- thUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- thUnitQuantity.textContent = 'Unit Quantity';
- var thQuantityUsed = document.createElement("th");
- thQuantityUsed.classList.add(flagQuantityUsed);
- thQuantityUsed.textContent = 'Quantity Used';
- var thQuantityProduced = document.createElement("th");
- thQuantityProduced.classList.add(flagQuantityProduced);
- thQuantityProduced.textContent = 'Quantity Produced';
- /*
- let thCostTotalLocalVatExcl = document.createElement("th");
- thCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- thCostTotalLocalVatExcl.textContent = 'Cost Total Local VAT Excl';
- let thCostTotalLocalVatIncl = document.createElement("th");
- thCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- thCostTotalLocalVatIncl.textContent = 'Cost Total Local VAT Incl';
- let thCostUnitLocalVatExcl = document.createElement("th");
- thCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- thCostUnitLocalVatExcl.textContent = 'Cost Unit Local VAT Excl';
- let thCostUnitLocalVatIncl = document.createElement("th");
- thCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- thCostUnitLocalVatIncl.textContent = 'Cost Unit Local VAT Incl';
- */
- var thUnitMeasurementLatencyManufacture = document.createElement("th");
- thUnitMeasurementLatencyManufacture.classList.add(flagUnitMeasurementLatencyManufacture);
- thUnitMeasurementLatencyManufacture.textContent = 'Unit Measurement Latency Manufacture';
- var thLatencyManufacture = document.createElement("th");
- thLatencyManufacture.classList.add(flagLatencyManufacture);
- thLatencyManufacture.textContent = 'Latency Manufacture';
- var thActive = document.createElement("th");
- thActive.classList.add(flagActive);
- thActive.textContent = 'Active';
- var thAddDelete = document.createElement("th");
- thAddDelete.classList.add(flagAdd);
- var buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- thAddDelete.appendChild(buttonAdd);
- tr.appendChild(thDisplayOrder);
- tr.appendChild(thCategory);
- tr.appendChild(thProduct);
- tr.appendChild(thVariations);
- tr.appendChild(thUnitQuantity);
- tr.appendChild(thQuantityUsed);
- tr.appendChild(thQuantityProduced);
- /*
- tr.appendChild(thCostTotalLocalVatExcl);
- tr.appendChild(thCostTotalLocalVatIncl);
- tr.appendChild(thCostUnitLocalVatExcl);
- tr.appendChild(thCostUnitLocalVatIncl);
- */
- tr.appendChild(thUnitMeasurementLatencyManufacture);
- tr.appendChild(thLatencyManufacture);
- tr.appendChild(thActive);
- tr.appendChild(thAddDelete);
- thead.appendChild(tr);
- tblOrderItems.appendChild(thead);
- var tbody = document.createElement("tbody");
- manufacturingPurchaseOrder[flagOrderItems].forEach(function (orderItem, index) {
- _this4.addRowManufacturingPurchaseOrderItem(tbody, orderItem);
- });
- tblOrderItems.appendChild(tbody);
- var cell = DOM.getCellFromElement(element);
- var cellNew = cell.cloneNode(false);
- cellNew.appendChild(tblOrderItems);
- row.replaceChild(cellNew, cell);
- if (_verbose) {
- console.log("tblOrderItems: ", tblOrderItems);
- }
- this.hookupOrderItemsFields();
- }
- }, {
- key: "addRowManufacturingPurchaseOrderItem",
- value: function addRowManufacturingPurchaseOrderItem(tbody, orderItem) {
- // productVariationTypeOptions, productVariationOptions, productCategoryOptions, productOptions, unitMeasurementOptions,
- if (_verbose) {
- console.log("addRowManufacturingPurchaseOrderItem: ", orderItem);
- }
- var tdDisplayOrder = document.createElement("td");
- tdDisplayOrder.classList.add(flagDisplayOrder);
- var inputDisplayOrder = document.createElement("input");
- inputDisplayOrder.classList.add(flagDisplayOrder);
- inputDisplayOrder.type = 'number';
- inputDisplayOrder.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputDisplayOrder, orderItem[flagDisplayOrder]);
- tdDisplayOrder.appendChild(inputDisplayOrder);
- var tdCategory = document.createElement("td");
- tdCategory.classList.add(flagProductCategory);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdCategory, orderItem[attrIdProductCategory]);
- var divCategory = document.createElement("div");
- divCategory.classList.add(flagProductCategory);
- // DOM.setElementAttributesValuesCurrentAndPrevious(divCategory, orderItem[attrIdProductCategory]);
- var productCategory = productCategories[orderItem[attrIdProductCategory]];
- divCategory.textContent = BusinessObjects.getObjectText(productCategory);
- tdCategory.appendChild(divCategory);
- var tdProduct = document.createElement("td");
- tdProduct.classList.add(flagProduct);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdProduct, orderItem[attrIdProductCategory]);
- var divProduct = document.createElement("div");
- divProduct.classList.add(flagProduct);
- // DOM.setElementAttributesValuesCurrentAndPrevious(divProduct, orderItem[attrIdProduct]);
- var product = products[orderItem[attrIdProduct]];
- divProduct.textContent = BusinessObjects.getObjectText(product);
- tdProduct.appendChild(divProduct);
- var tdVariations = document.createElement("td");
- tdVariations.classList.add(flagProductVariations);
- tdVariations.classList.add(flagCollapsed);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdVariations, orderItem[attrIdProductCategory]);
- var divVariations = document.createElement("div");
- divVariations.classList.add(flagProductVariations);
- // DOM.setElementAttributesValuesCurrentAndPrevious(divVariations, orderItem[attrIdProductVariation]);
- var variationsText = ProductPermutation.getProductVariationsPreviewFromIdCsv(orderItem[flagProductVariations]);
- divVariations.textContent = variationsText;
- tdVariations.appendChild(divVariations);
- var tdUnitQuantity = document.createElement("td");
- tdUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdUnitQuantity, orderItem[attrIdProductCategory]);
- var divUnitQuantity = document.createElement("div");
- divUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- // DOM.setElementValuesCurrentAndPrevious(divUnitQuantity, orderItem[flagUnitMeasurementQuantity]);
- var unitQuantity = unitMeasurements[orderItem[attrIdUnitMeasurementQuantity]];
- divUnitQuantity.textContent = BusinessObjects.getObjectText(unitQuantity);
- tdUnitQuantity.appendChild(divUnitQuantity);
- var tdQuantityUsed = document.createElement("td");
- tdQuantityUsed.classList.add(flagQuantityUsed);
- var inputQuantityUsed = document.createElement("input");
- inputQuantityUsed.classList.add(flagQuantityUsed);
- inputQuantityUsed.type = 'number';
- DOM.setElementValuesCurrentAndPrevious(inputQuantityUsed, orderItem[flagQuantityUsed]);
- tdQuantityUsed.appendChild(inputQuantityUsed);
- var tdQuantityProduced = document.createElement("td");
- tdQuantityProduced.classList.add(flagQuantityProduced);
- var inputQuantityProduced = document.createElement("input");
- inputQuantityProduced.classList.add(flagQuantityProduced);
- inputQuantityProduced.type = 'number';
- DOM.setElementValuesCurrentAndPrevious(inputQuantityProduced, orderItem[flagQuantityProduced]);
- tdQuantityProduced.appendChild(inputQuantityProduced);
-
- /*
- let tdCostTotalLocalVatExcl = document.createElement("td");
- tdCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- let inputCostTotalLocalVatExcl = document.createElement("input");
- inputCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- inputCostTotalLocalVatExcl.type = 'number';
- inputCostTotalLocalVatExcl.step = 0.01;
- DOM.setElementAttributesValuesCurrentAndPrevious(inputCostTotalLocalVatExcl, orderItem[flagCostTotalLocalVatExcl]);
- tdCostTotalLocalVatExcl.appendChild(inputCostTotalLocalVatExcl);
- let tdCostTotalLocalVatIncl = document.createElement("td");
- tdCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- let inputCostTotalLocalVatIncl = document.createElement("input");
- inputCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- inputCostTotalLocalVatIncl.type = 'number';
- inputCostTotalLocalVatIncl.step = 0.01;
- DOM.setElementAttributesValuesCurrentAndPrevious(inputCostTotalLocalVatIncl, orderItem[flagCostTotalLocalVatIncl]);
- tdCostTotalLocalVatIncl.appendChild(inputCostTotalLocalVatIncl);
- let tdCostUnitLocalVatExcl = document.createElement("td");
- tdCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- let divCostUnitLocalVatExcl = document.createElement("div");
- divCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, orderItem[flagCostUnitLocalVatExcl]);
- tdCostUnitLocalVatExcl.appendChild(divCostUnitLocalVatExcl);
- let tdCostUnitLocalVatIncl = document.createElement("td");
- tdCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- let divCostUnitLocalVatIncl = document.createElement("div");
- divCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, orderItem[flagCostUnitLocalVatIncl]);
- tdCostUnitLocalVatIncl.appendChild(divCostUnitLocalVatIncl);
- */
-
- var tdUnitMeasurementLatencyManufacture = document.createElement("td");
- tdUnitMeasurementLatencyManufacture.classList.add(flagUnitMeasurementLatencyManufacture);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdUnitMeasurementLatencyManufacture, orderItem[attrIdUnitMeasurementLatencyManufacture]);
- var divUnitMeasurementLatencyManufacture = document.createElement("div");
- divUnitMeasurementLatencyManufacture.classList.add(flagUnitMeasurementLatencyManufacture);
- // DOM.setElementValuesCurrentAndPrevious(divUnitMeasurementLatencyManufacture, orderItem[flagUnitMeasurementLatencyManufacture]);
- var unitMeasurementLatencyManufacture = unitMeasurementsTime[orderItem[attrIdUnitMeasurementLatencyManufacture]];
- divUnitMeasurementLatencyManufacture.textContent = BusinessObjects.getObjectText(unitMeasurementLatencyManufacture);
- tdUnitMeasurementLatencyManufacture.appendChild(divUnitMeasurementLatencyManufacture);
- var tdLatencyManufacture = document.createElement("td");
- tdLatencyManufacture.classList.add(flagLatencyManufacture);
- var inputLatencyManufacture = document.createElement("input");
- inputLatencyManufacture.classList.add(flagLatencyManufacture);
- inputLatencyManufacture.type = 'number';
- inputLatencyManufacture.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputLatencyManufacture, orderItem[flagLatencyManufacture]);
- tdLatencyManufacture.appendChild(inputLatencyManufacture);
- var tdActive = this.createTdActive(orderItem[flagActive]);
- var tr = document.createElement("tr");
- tr.classList.add(flagOrderItems);
- tr.setAttribute(attrIdManufacturingPurchaseOrder, orderItem[attrIdManufacturingPurchaseOrder]);
- tr.setAttribute(attrIdManufacturingPurchaseOrderProductLink, orderItem[attrIdManufacturingPurchaseOrderProductLink]);
- tr.appendChild(tdDisplayOrder);
- tr.appendChild(tdCategory);
- tr.appendChild(tdProduct);
- tr.appendChild(tdVariations);
- tr.appendChild(tdUnitQuantity);
- tr.appendChild(tdQuantityUsed);
- tr.appendChild(tdQuantityProduced);
- /*
- tr.appendChild(tdCostTotalLocalVatExcl);
- tr.appendChild(tdCostTotalLocalVatIncl);
- tr.appendChild(tdCostUnitLocalVatExcl);
- tr.appendChild(tdCostUnitLocalVatIncl);
- */
- tr.appendChild(tdUnitMeasurementLatencyManufacture);
- tr.appendChild(tdLatencyManufacture);
- tr.appendChild(tdActive);
- tbody.appendChild(tr);
- }
- }, {
- key: "hookupFieldsOrderItemDisplayOrder",
- value: function hookupFieldsOrderItemDisplayOrder() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagDisplayOrder + ' input');
- }
- }, {
- key: "hookupFieldsOrderItemProductCategory",
- value: function hookupFieldsOrderItemProductCategory() {
- var _this5 = this;
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductCategory, Utils.getListFromDict(productCategories), function (cellSelector) {
- _this5.hookupProductCategoryDdls(cellSelector);
- });
- }
- }, {
- key: "hookupFieldsOrderItemProduct",
- value: function hookupFieldsOrderItemProduct() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagProduct, Utils.getListFromDict(products));
- }
- }, {
- key: "hookupFieldsOrderItemProductVariations",
- value: function hookupFieldsOrderItemProductVariations() {
- var _this6 = this;
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductVariations, function (event, element) {
- return _this6.handleClickProductPermutationVariationsPreview(event, element);
- });
- }
- }, {
- key: "hookupFieldsOrderItemUnitQuantity",
- value: function hookupFieldsOrderItemUnitQuantity() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagUnitMeasurementQuantity, Utils.getListFromDict(unitMeasurements));
- }
- }, {
- key: "hookupFieldsOrderItemQuantityUsed",
- value: function hookupFieldsOrderItemQuantityUsed() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityUsed + ' input');
- }
- }, {
- key: "hookupFieldsOrderItemQuantityProduced",
- value: function hookupFieldsOrderItemQuantityProduced() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityProduced + ' input');
- }
- /*
- hookupFieldsOrderItemPriceTotalLocalVatExcl() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatExcl + ' input'
- , (event, element) => {
- this.handleChangeNestedElementCellTable(event, element);
- this.updateFieldsPriceUnitLocalVatExcl(element);
- }
- );
- }
- hookupFieldsOrderItemPriceTotalLocalVatIncl() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatIncl + ' input'
- , (event, element) => {
- this.handleChangeNestedElementCellTable(event, element);
- this.updateFieldsPriceUnitLocalVatIncl(element);
- }
- );
- }
- updateFieldsPriceUnitLocalVatExcl(elementChanged) {
- let row = elementChanged.closest('tr.' + flagOrderItems);
- let inputPriceTotalLocalVatExcl = row.querySelector('td.' + flagPriceTotalLocalVatExcl + ' input');
- let priceTotalLocalVatExcl = DOM.getElementValueCurrent(inputPriceTotalLocalVatExcl);
- let inputQuantityUsed = row.querySelector('td.' + flagQuantityUsed + ' input');
- let quantityUsed = DOM.getElementValueCurrent(inputQuantityUsed);
- let divPriceUnitLocalVatExcl = row.querySelector('td.' + flagPriceUnitLocalVatExcl + ' div');
- let priceUnitLocalVatExcl = quantityUsed == 0 ? 0 : priceTotalLocalVatExcl / quantityUsed;
- DOM.setElementValuesCurrentAndPrevious(divPriceUnitLocalVatExcl, priceUnitLocalVatExcl);
- let rowManufacturingPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
- let divPriceGrandTotalLocalVatExcl = rowManufacturingPurchaseOrder.querySelector('td.' + flagPriceTotalLocalVatExcl + ' div');
- let inputsPriceTotalLocalVatExcl = rowManufacturingPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatExcl + ' input');
- let priceGrandTotalLocalVatExcl = Array.from(inputsPriceTotalLocalVatExcl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0);
- DOM.setElementValueCurrent(divPriceGrandTotalLocalVatExcl, priceGrandTotalLocalVatExcl);
- }
- updateFieldsPriceUnitLocalVatIncl(elementChanged) {
- let row = elementChanged.closest('tr.' + flagOrderItems);
- let inputPriceTotalLocalVatIncl = row.querySelector('td.' + flagPriceTotalLocalVatIncl + ' input');
- let priceTotalLocalVatIncl = DOM.getElementValueCurrent(inputPriceTotalLocalVatIncl);
- let inputQuantityUsed = row.querySelector('td.' + flagQuantityUsed + ' input');
- let quantityUsed = DOM.getElementValueCurrent(inputQuantityUsed);
- let divPriceUnitLocalVatIncl = row.querySelector('td.' + flagPriceUnitLocalVatIncl + ' div');
- let priceUnitLocalVatIncl = quantityUsed == 0 ? 0 : priceTotalLocalVatIncl / quantityUsed;
- DOM.setElementValuesCurrentAndPrevious(divPriceUnitLocalVatIncl, priceUnitLocalVatIncl);
- let rowManufacturingPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
- let divPriceGrandTotalLocalVatIncl = rowManufacturingPurchaseOrder.querySelector('td.' + flagPriceTotalLocalVatIncl + ' div');
- let inputsPriceTotalLocalVatIncl = rowManufacturingPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatIncl + ' input');
- let priceGrandTotalLocalVatIncl = Array.from(inputsPriceTotalLocalVatIncl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0);
- DOM.setElementValueCurrent(divPriceGrandTotalLocalVatIncl, priceGrandTotalLocalVatIncl);
- }
- hookupFieldsOrderItemPriceUnitLocalVatExcl() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceUnitLocalVatExcl + ' input');
- }
- hookupFieldsOrderItemPriceUnitLocalVatIncl() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceUnitLocalVatIncl + ' input');
- }
- */
- }, {
- key: "hookupFieldsOrderItemUnitMeasurementLatencyManufacture",
- value: function hookupFieldsOrderItemUnitMeasurementLatencyManufacture() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagUnitMeasurementLatencyManufacture, Utils.getListFromDict(unitMeasurementsTime));
- }
- }, {
- key: "hookupFieldsOrderItemLatencyManufacture",
- value: function hookupFieldsOrderItemLatencyManufacture() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagLatencyManufacture + ' input');
- }
- }, {
- key: "hookupFieldsOrderItemActive",
- value: function hookupFieldsOrderItemActive() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' input.' + flagActive);
- }
- }, {
- key: "hookupFieldsOrderItemAddDelete",
- value: function hookupFieldsOrderItemAddDelete() {
- var selectorButton = idTableMain + ' td.' + flagOrderItems + ' td.' + flagOrderItems + ' button';
- var selectorButtonDelete = selectorButton + '.' + flagDelete;
- var selectorButtonUndelete = selectorButton + '.' + flagAdd;
- this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsOrderItemAdd();
- }
- }, {
- key: "hookupButtonsOrderItemAdd",
- value: function hookupButtonsOrderItemAdd() {
- var _this7 = this;
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' th button.' + flagAdd, function (event, element) {
- var _manufacturingPurchas;
- var row = element.closest(idTableMain + ' > tbody > tr');
- var idManufacturingPurchaseOrder = row.getAttribute(attrIdManufacturingPurchaseOrder);
- // let hasActiveOrderItem = row.querySelectorAll('td.' + flagOrderItems + ' input.' + flagActive + ':checked').length > 0;
- var countManufacturingOrderItems = row.querySelectorAll('td.' + flagOrderItems + ' td.' + flagManufacturingPurchaseOrder).length;
- var manufacturingPurchaseOrderItem = (_manufacturingPurchas = {}, manufacturing_purchase_orders_defineProperty(manufacturing_purchase_orders_defineProperty(manufacturing_purchase_orders_defineProperty(manufacturing_purchase_orders_defineProperty(manufacturing_purchase_orders_defineProperty(manufacturing_purchase_orders_defineProperty(manufacturing_purchase_orders_defineProperty(manufacturing_purchase_orders_defineProperty(manufacturing_purchase_orders_defineProperty(manufacturing_purchase_orders_defineProperty(_manufacturingPurchas, attrIdManufacturingPurchaseOrder, idManufacturingPurchaseOrder), attrIdManufacturingPurchaseOrderProductLink, -1 - countManufacturingOrderItems), attrIdProductCategory, 0), attrIdProduct, 0), flagProductVariations, ''), attrIdUnitMeasurementQuantity, 0), flagQuantityUsed, ''), flagQuantityProduced, ''), attrIdUnitMeasurementLatencyManufacture, 0), flagLatencyManufacture, ''), manufacturing_purchase_orders_defineProperty(manufacturing_purchase_orders_defineProperty(_manufacturingPurchas, flagDisplayOrder, countManufacturingOrderItems + 1), flagActive, true));
- var tbody = row.querySelector('td.' + flagOrderItems + ' table tbody');
- _this7.addRowManufacturingPurchaseOrderItem(tbody, manufacturingPurchaseOrderItem);
- /*
- if (!hasActiveOrderItem) {
- let tdOrderItem = row.querySelector('td.' + flagOrderItems);
- // tdOrderItem.setAttribute(attrIdManufacturingOrderItem, manufacturingPurchaseOrderItem[attrIdManufacturingOrderItem]);
- DOM.setElementAttributeValueCurrent(tdOrderItem, manufacturingPurchaseOrderItem[attrIdManufacturingOrderItem]);
- }
- */
- _this7.hookupOrderItemsFields();
- });
- }
- }, {
- key: "leave",
- value: function leave() {
- manufacturing_purchase_orders_superPropGet(PageStoreManufacturingPurchaseOrders, "leave", this, 3)([]);
- }
- }]);
-}(TableBasePage);
-manufacturing_purchase_orders_defineProperty(PageStoreManufacturingPurchaseOrders, "hash", hashPageStoreManufacturingPurchaseOrders);
-manufacturing_purchase_orders_defineProperty(PageStoreManufacturingPurchaseOrders, "attrIdRowObject", attrIdManufacturingPurchaseOrder);
-
-;// CONCATENATED MODULE: ./static/js/pages/store/product_categories.js
-function product_categories_typeof(o) { "@babel/helpers - typeof"; return product_categories_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, product_categories_typeof(o); }
-function product_categories_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function product_categories_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, product_categories_toPropertyKey(o.key), o); } }
-function product_categories_createClass(e, r, t) { return r && product_categories_defineProperties(e.prototype, r), t && product_categories_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function product_categories_callSuper(t, o, e) { return o = product_categories_getPrototypeOf(o), product_categories_possibleConstructorReturn(t, product_categories_isNativeReflectConstruct() ? Reflect.construct(o, e || [], product_categories_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function product_categories_possibleConstructorReturn(t, e) { if (e && ("object" == product_categories_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return product_categories_assertThisInitialized(t); }
-function product_categories_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function product_categories_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (product_categories_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function product_categories_superPropGet(t, e, o, r) { var p = product_categories_get(product_categories_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function product_categories_get() { return product_categories_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = product_categories_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, product_categories_get.apply(null, arguments); }
-function product_categories_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = product_categories_getPrototypeOf(t));); return t; }
-function product_categories_getPrototypeOf(t) { return product_categories_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, product_categories_getPrototypeOf(t); }
-function product_categories_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && product_categories_setPrototypeOf(t, e); }
-function product_categories_setPrototypeOf(t, e) { return product_categories_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, product_categories_setPrototypeOf(t, e); }
-function product_categories_defineProperty(e, r, t) { return (r = product_categories_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function product_categories_toPropertyKey(t) { var i = product_categories_toPrimitive(t, "string"); return "symbol" == product_categories_typeof(i) ? i : i + ""; }
-function product_categories_toPrimitive(t, r) { if ("object" != product_categories_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != product_categories_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-
-
-
-
-var PageStoreProductCategories = /*#__PURE__*/function (_TableBasePage) {
- function PageStoreProductCategories(router) {
- var _this;
- product_categories_classCallCheck(this, PageStoreProductCategories);
- _this = product_categories_callSuper(this, PageStoreProductCategories, [router]);
- product_categories_defineProperty(_this, "callSaveTableContent", api_API.saveCategories);
- _this.storeMixin = new StoreTableMixinPage(_this);
- return _this;
- }
- product_categories_inherits(PageStoreProductCategories, _TableBasePage);
- return product_categories_createClass(PageStoreProductCategories, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }, {
- key: "hookupFilters",
- value: function hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterIsNotEmpty();
- this.hookupFilterActive();
- }
- }, {
- key: "hookupFilterIsNotEmpty",
- value: function hookupFilterIsNotEmpty() {
- this.hookupEventHandler("change", idFormFilters + ' .' + flagIsNotEmpty, function (event, filter) {
- PageStoreProductCategories.isDirtyFilter(filter);
- });
- }
- }, {
- key: "loadRowTable",
- value: function loadRowTable(rowJson) {
- if (rowJson == null) return;
- if (_verbose) {
- console.log("applying data row: ", rowJson);
- }
- var row = _rowBlank.cloneNode(true);
- row.classList.remove(flagRowNew);
- row.classList.remove(flagInitialised);
- row.querySelectorAll('.' + flagInitialised).forEach(function (element) {
- element.classList.remove(flagInitialised);
- });
- var sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- var textareaCode = row.querySelector('td.' + flagCode + ' textarea');
- var textareaName = row.querySelector('td.' + flagName + ' textarea');
- var textareaDescription = row.querySelector('td.' + flagDescription + ' textarea');
- var tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- var divAccessLevel = tdAccessLevel.querySelector('div.' + flagAccessLevel);
- var inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
- DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, rowJson[flagDisplayOrder]);
- DOM.setElementValuesCurrentAndPrevious(textareaCode, rowJson[flagCode]);
- DOM.setElementValuesCurrentAndPrevious(textareaName, rowJson[flagName]);
- DOM.setElementValuesCurrentAndPrevious(textareaDescription, rowJson[flagDescription]);
- tdAccessLevel.setAttribute(attrIdAccessLevel, rowJson[attrIdAccessLevel]);
- tdAccessLevel.setAttribute(flagAccessLevelRequired, rowJson[flagAccessLevelRequired]);
- divAccessLevel.setAttribute(attrIdAccessLevel, rowJson[attrIdAccessLevel]);
- DOM.setElementValuesCurrentAndPrevious(divAccessLevel, rowJson[attrIdAccessLevel]);
- divAccessLevel.textContent = rowJson[flagAccessLevelRequired];
- DOM.setElementValuesCurrentAndPrevious(inputActive, rowJson[flagActive]);
- row.setAttribute(rowJson[flagKeyPrimary], rowJson[rowJson[flagKeyPrimary]]);
- var table = TableBasePage.getTableMain();
- var bodyTable = table.querySelector('tbody');
- bodyTable.appendChild(row);
- }
- }, {
- key: "getJsonRow",
- value: function getJsonRow(row) {
- if (row == null) return;
- var sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- var textareaCode = row.querySelector('td.' + flagCode + ' textarea');
- var textareaName = row.querySelector('td.' + flagName + ' textarea');
- var textareaDescription = row.querySelector('td.' + flagDescription + ' textarea');
- var tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- var buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
- var jsonCategory = {};
- jsonCategory[attrIdProductCategory] = row.getAttribute(attrIdProductCategory);
- jsonCategory[flagCode] = DOM.getElementAttributeValueCurrent(textareaCode);
- jsonCategory[flagName] = DOM.getElementAttributeValueCurrent(textareaName);
- jsonCategory[flagDescription] = DOM.getElementAttributeValueCurrent(textareaDescription);
- // jsonCategory[flagAccessLevelRequired] = tdAccessLevel.getAttribute(flagAccessLevelRequired);
- jsonCategory[attrIdAccessLevel] = DOM.getElementAttributeValueCurrent(tdAccessLevel);
- jsonCategory[flagActive] = buttonActive.classList.contains(flagDelete);
- jsonCategory[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(sliderDisplayOrder);
- return jsonCategory;
- }
- }, {
- key: "initialiseRowNew",
- value: function initialiseRowNew(tbody, row) {
- if (row == null) return;
- this.initialiseSliderDisplayOrderRowNew(tbody, row);
- }
- }, {
- key: "hookupTableMain",
- value: function hookupTableMain() {
- product_categories_superPropGet(PageStoreProductCategories, "hookupTableMain", this, 3)([]);
- this.hookupSlidersDisplayOrderTable();
- this.hookupTextareasCodeTable();
- this.hookupTextareasNameTable();
- this.hookupTextareasDescriptionTable();
- this.hookupTdsAccessLevel();
- this.hookupFieldsActive();
- }
-
- /*
- isDirtyRow(row) {
- if (row == null) return false;
- console.log("Product Category isDirtyRow");
- console.log("row: ", row);
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder);
- let inputCode = row.querySelector('td.' + flagCode + ' textarea');
- let inputName = row.querySelector('td.' + flagName + ' textarea');
- let inputDescription = row.querySelector('td.' + flagDescription + ' textarea');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
- let isDirty = sliderDisplayOrder.classList.contains(flagDirty) || inputCode.classList.contains(flagDirty) || inputName.classList.contains(flagDirty) ||
- inputDescription.classList.contains(flagDirty) || tdAccessLevel.classList.contains(flagDirty) || inputActive.classList.contains(flagDirty);
- DOM.handleDirtyElement(row, isDirty);
- return isDirty;
- }
- */
- }, {
- key: "leave",
- value: function leave() {
- product_categories_superPropGet(PageStoreProductCategories, "leave", this, 3)([]);
- }
-
- /*
- getFiltersDefaults() {
- filters = {};
- filters.flagIsNotEmpty = true;
- filters.flagActive = true;
- return filters;
- }
- */
- }]);
-}(TableBasePage);
-product_categories_defineProperty(PageStoreProductCategories, "hash", hashPageStoreProductCategories);
-product_categories_defineProperty(PageStoreProductCategories, "attrIdRowObject", attrIdProductCategory);
-
-;// CONCATENATED MODULE: ./static/js/pages/store/product_permutations.js
-function product_permutations_typeof(o) { "@babel/helpers - typeof"; return product_permutations_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, product_permutations_typeof(o); }
-function product_permutations_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function product_permutations_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, product_permutations_toPropertyKey(o.key), o); } }
-function product_permutations_createClass(e, r, t) { return r && product_permutations_defineProperties(e.prototype, r), t && product_permutations_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function product_permutations_callSuper(t, o, e) { return o = product_permutations_getPrototypeOf(o), product_permutations_possibleConstructorReturn(t, product_permutations_isNativeReflectConstruct() ? Reflect.construct(o, e || [], product_permutations_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function product_permutations_possibleConstructorReturn(t, e) { if (e && ("object" == product_permutations_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return product_permutations_assertThisInitialized(t); }
-function product_permutations_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function product_permutations_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (product_permutations_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function product_permutations_superPropGet(t, e, o, r) { var p = product_permutations_get(product_permutations_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function product_permutations_get() { return product_permutations_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = product_permutations_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, product_permutations_get.apply(null, arguments); }
-function product_permutations_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = product_permutations_getPrototypeOf(t));); return t; }
-function product_permutations_getPrototypeOf(t) { return product_permutations_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, product_permutations_getPrototypeOf(t); }
-function product_permutations_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && product_permutations_setPrototypeOf(t, e); }
-function product_permutations_setPrototypeOf(t, e) { return product_permutations_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, product_permutations_setPrototypeOf(t, e); }
-function product_permutations_defineProperty(e, r, t) { return (r = product_permutations_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function product_permutations_toPropertyKey(t) { var i = product_permutations_toPrimitive(t, "string"); return "symbol" == product_permutations_typeof(i) ? i : i + ""; }
-function product_permutations_toPrimitive(t, r) { if ("object" != product_permutations_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != product_permutations_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-
-
-
-
-
-
-
-var PageStoreProductPermutations = /*#__PURE__*/function (_TableBasePage) {
- function PageStoreProductPermutations(router) {
- var _this;
- product_permutations_classCallCheck(this, PageStoreProductPermutations);
- _this = product_permutations_callSuper(this, PageStoreProductPermutations, [router]);
- product_permutations_defineProperty(_this, "callSaveTableContent", api_API.saveProductPermutations);
- _this.storeMixin = new StoreTableMixinPage(_this);
- return _this;
- }
- product_permutations_inherits(PageStoreProductPermutations, _TableBasePage);
- return product_permutations_createClass(PageStoreProductPermutations, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }, {
- key: "hookupFilters",
- value: function hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterProductCategory();
- this.hookupFilterProduct();
- this.hookupFilterOutOfStock();
- this.hookupFilterMinStock();
- this.hookupFilterMaxStock();
- }
- }, {
- key: "hookupFilterProductCategory",
- value: function hookupFilterProductCategory() {
- this.hookupFilter(flagProductCategory, function (event, filterCategory) {
- // loadPermutations();
- // let wasDirtyFilter = filterCategory.classList.contains(flagDirty);
- PageStoreProductPermutations.isDirtyFilter(filterCategory);
- var isDirtyFilter = filterCategory.classList.contains(flagDirty);
- var idProductCategory = DOM.getElementValueCurrent(filterCategory);
- var products = productCategories[idProductCategory];
- var filterProduct = document.querySelector(idFormFilters + ' .' + flagProduct);
- var idProductPrevious = filterProduct.getAttribute(attrValuePrevious);
- filterProduct.innerHTML = '';
- var optionJson, option;
- option = DOM.createOption(null);
- filterProduct.appendChild(option);
- products.forEach(function (product) {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(product, idProductPrevious);
- option = DOM.createOption(optionJson);
- filterProduct.appendChild(option);
- });
- filterProduct.dispatchEvent(new Event('change'));
- });
- }
- }, {
- key: "hookupFilterProduct",
- value: function hookupFilterProduct() {
- this.hookupFilter(flagProduct);
- }
- }, {
- key: "hookupFilterOutOfStock",
- value: function hookupFilterOutOfStock() {
- this.hookupFilter(flagIsOutOfStock);
- }
- }, {
- key: "hookupFilterMinStock",
- value: function hookupFilterMinStock() {
- this.hookupFilter(flagQuantityMin);
- }
- }, {
- key: "hookupFilterMaxStock",
- value: function hookupFilterMaxStock() {
- this.hookupFilter(flagQuantityMax);
- }
- }, {
- key: "loadRowTable",
- value: function loadRowTable(rowJson) {
- if (rowJson == null) return;
- if (_verbose) {
- console.log("applying data row: ", rowJson);
- }
- /*
- let tableMain = TableBasePage.getTableMain();
- let row = _rowBlank.cloneNode(true);
- row.classList.remove(flagRowNew);
- let dllCategory = row.querySelector('td.' + flagProductCategory + ' select');
- dllCategory.value = rowJson[attrIdProductCategory];
- let ddlProduct = row.querySelector('td.' + flagProduct + ' select');
- let optionJson, option;
- listProducts.forEach(function(product) {
- if (product[attrIdProductCategory] != rowJson[attrIdProductCategory]) return;
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(product);
- option = DOM.createOption(optionJson, rowJson[attrIdProduct]);
- ddlProduct.appendChild(option);
- });
- ddlProduct.value = rowJson[attrIdProduct];
- row.querySelector('td.' + flagProductVariations + ' textarea').value = rowJson[flagProductVariations];
- let tdProductVariations = row.querySelector('td.' + flagProductVariations);
- let textareaProductVariations = tdProductVariations.querySelector('textarea');
- DOM.setElementValuesCurrentAndPrevious(textareaProductVariations, rowJson[flagProductVariations]);
- let thProductVariations = row.querySelector('td.' + flagProductVariations);
- if (!thProductVariations.classList.contains(flagCollapsed)) tdProductVariations.classList.remove(flagCollapsed);
- let inputDescription = row.querySelector('td.' + flagDescription + ' textarea');
- DOM.setElementValuesCurrentAndPrevious(inputDescription, rowJson[flagDescription]);
- let inputCostLocal = row.querySelector('td.' + flagCostLocal + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputCostLocal, rowJson[flagCostLocal]);
- let tdCurrencyCost = row.querySelector('td.' + flagCurrencyCost);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdCurrencyCost, rowJson[flagCurrencyCost]);
- let ddlCurrencyCost = tdCurrencyCost.querySelector('select');
- DOM.setElementValuesCurrentAndPrevious(ddlCurrencyCost, rowJson[flagCurrencyCost]);
- let inputProfitLocalMin = row.querySelector('td.' + flagProfitLocalMin + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputProfitLocalMin, rowJson[flagProfitLocalMin]);
- let inputLatencyManufactureDays = row.querySelector('td.' + flagLatencyManufacture + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputLatencyManufactureDays, rowJson[flagLatencyManufacture]);
- let inputQuantityStock = row.querySelector('td.' + flagQuantityStock + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputQuantityStock, rowJson[flagQuantityStock]);
- let inputQuantityMin = row.querySelector('td.' + flagQuantityMin + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputQuantityMin, rowJson[flagQuantityMin]);
- let inputQuantityMax = row.querySelector('td.' + flagQuantityMax + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputQuantityMax, rowJson[flagQuantityMax]);
- let inputQuantityStep = row.querySelector('td.' + flagCountUnitMeasurementPerQuantityStep + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputQuantityStep, rowJson[flagCountUnitMeasurementPerQuantityStep]);
- row.querySelector('td.' + flagQuantityStock + ' input').value = rowJson[flagQuantityStock];
- row.querySelector('td.' + flagQuantityMin + ' input').value = rowJson[flagQuantityMin];
- row.querySelector('td.' + flagQuantityMax + ' input').value = rowJson[flagQuantityMax];
- row.querySelector('td.' + flagCostLocal).innerHTML = rowJson[flagCostLocal];
- row.setAttribute(attrIdProductCategory, rowJson[flagProductCategory]);
- row.setAttribute(attrIdProduct, rowJson[flagProduct]);
- row.setAttribute(attrIdProductPermutation, rowJson[attrIdProductPermutation]);
- let tbody = tableMain.querySelector('tbody');
- tbody.appendChild(row);
- */
- }
- }, {
- key: "getJsonRow",
- value: function getJsonRow(row) {
- if (row == null) return;
- var tdProductCategory = row.querySelector('td.' + flagProductCategory);
- var tdProduct = row.querySelector('td.' + flagProduct);
- var tdProductVariations = row.querySelector('td.' + flagProductVariations);
- var inputDescription = row.querySelector('td.' + flagDescription + ' textarea');
- // let inputCostLocalVatExcl = row.querySelector('td.' + flagCostUnitLocalVatExcl + ' input');
- // let inputCostLocalVatIncl = row.querySelector('td.' + flagCostUnitLocalVatIncl + ' input');
- var tdCurrencyCost = row.querySelector('td.' + flagCurrencyCost);
- var inputProfitLocalMin = row.querySelector('td.' + flagProfitLocalMin + ' input');
- var inputLatencyManufactureDays = row.querySelector('td.' + flagLatencyManufacture + ' input');
- var inputQuantityStock = row.querySelector('td.' + flagQuantityStock + ' input');
- var inputQuantityMin = row.querySelector('td.' + flagQuantityMin + ' input');
- var inputQuantityMax = row.querySelector('td.' + flagQuantityMax + ' input');
- var inputQuantityStep = row.querySelector('td.' + flagCountUnitMeasurementPerQuantityStep + ' input');
- var tdUnitMeasurementQuantity = row.querySelector('td.' + flagUnitMeasurementQuantity);
- var checkboxIsSubscription = row.querySelector('td.' + flagIsSubscription + ' input');
- var inputCountIntervalRecurrence = row.querySelector('td.' + flagCountUnitMeasurementIntervalRecurrence + ' input');
- var tdUnitMeasurementIntervalRecurrence = row.querySelector('td.' + flagUnitMeasurementIntervalRecurrence);
- var inputIdStripeProduct = row.querySelector('td.' + flagIdStripeProduct + ' input');
- var checkboxDoesExpireFasterOnceUnsealed = row.querySelector('td.' + flagDoesExpireFasterOnceUnsealed + ' input');
- var inputCountIntervalExpirationUnsealed = row.querySelector('td.' + flagCountUnitMeasurementIntervalExpirationUnsealed + ' input');
- var tdUnitMeasurementIntervalExpirationUnsealed = row.querySelector('td.' + flagUnitMeasurementIntervalExpirationUnsealed);
- var buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
- var jsonRow = {};
- jsonRow[attrIdProductPermutation] = row.getAttribute(attrIdProductPermutation);
- jsonRow[attrIdProductCategory] = tdProductCategory.getAttribute(attrValueCurrent);
- jsonRow[attrIdProduct] = tdProduct.getAttribute(attrValueCurrent);
- jsonRow[flagProductVariations] = tdProductVariations.getAttribute(attrValueCurrent);
- jsonRow[flagHasVariations] = jsonRow[flagProductVariations] != '';
- jsonRow[flagDescription] = inputDescription.getAttribute(attrValueCurrent);
- // jsonRow[flagCostUnitLocalVatExcl] = inputCostLocalVatExcl.getAttribute(attrValueCurrent);
- // jsonRow[flagCostUnitLocalVatIncl] = inputCostLocalVatIncl.getAttribute(attrValueCurrent);
- jsonRow[flagCurrencyCost] = tdCurrencyCost.getAttribute(attrValueCurrent);
- jsonRow[flagProfitLocalMin] = inputProfitLocalMin.getAttribute(attrValueCurrent);
- jsonRow[flagLatencyManufacture] = inputLatencyManufactureDays.getAttribute(attrValueCurrent);
- jsonRow[flagQuantityStock] = inputQuantityStock.getAttribute(attrValueCurrent);
- jsonRow[flagQuantityMin] = inputQuantityMin.getAttribute(attrValueCurrent);
- jsonRow[flagQuantityMax] = inputQuantityMax.getAttribute(attrValueCurrent);
- jsonRow[flagCountUnitMeasurementPerQuantityStep] = inputQuantityStep.getAttribute(attrValueCurrent);
- jsonRow[flagUnitMeasurementQuantity] = tdUnitMeasurementQuantity.getAttribute(attrValueCurrent);
- jsonRow[flagIsSubscription] = checkboxIsSubscription.getAttribute(attrValueCurrent);
- jsonRow[flagCountUnitMeasurementIntervalRecurrence] = inputCountIntervalRecurrence.getAttribute(attrValueCurrent);
- jsonRow[flagUnitMeasurementIntervalRecurrence] = tdUnitMeasurementIntervalRecurrence.getAttribute(attrValueCurrent);
- jsonRow[flagIdStripeProduct] = inputIdStripeProduct.getAttribute(attrValueCurrent);
- jsonRow[flagDoesExpireFasterOnceUnsealed] = checkboxDoesExpireFasterOnceUnsealed.getAttribute(attrValueCurrent);
- jsonRow[flagCountUnitMeasurementIntervalExpirationUnsealed] = inputCountIntervalExpirationUnsealed.getAttribute(attrValueCurrent);
- jsonRow[flagUnitMeasurementIntervalExpirationUnsealed] = tdUnitMeasurementIntervalExpirationUnsealed.getAttribute(attrValueCurrent);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- }, {
- key: "initialiseRowNew",
- value: function initialiseRowNew(tbody, row) {
- this.initialiseRowNewDdlsProductCategoryAndProduct(row);
- var checkboxIsSubscription = row.querySelector('td.' + flagIsSubscription + ' input');
- var checkboxDoesExpireFasterOnceUnsealed = row.querySelector('td.' + flagDoesExpireFasterOnceUnsealed + ' input');
- this.handleChangeCheckboxDoesExpireFasterOnceUnsealed(null, checkboxDoesExpireFasterOnceUnsealed);
- this.handleChangeCheckboxIsSubscription(null, checkboxIsSubscription);
- }
- }, {
- key: "initialiseRowNewDdlsProductCategoryAndProduct",
- value: function initialiseRowNewDdlsProductCategoryAndProduct(row) {
- var ddlCategoryFilter = document.querySelector(idFormFilters + ' #' + attrIdProductCategory);
- var idProductCategoryFilter = DOM.getElementValueCurrent(ddlCategoryFilter);
- var hasCategoryFilter = !(validation_Validation.isEmpty(idProductCategoryFilter) || idProductCategoryFilter == '0');
- var ddlProductFilter = document.querySelector(idFormFilters + ' #' + attrIdProduct);
- var idProductFilter = DOM.getElementValueCurrent(ddlProductFilter);
- var hasProductFilter = !(validation_Validation.isEmpty(idProductFilter) || idProductFilter == '0');
- if (_verbose) {
- console.log("initialiseRowNew: ", row);
- console.log({
- ddlCategoryFilter: ddlCategoryFilter,
- idProductCategoryFilter: idProductCategoryFilter,
- hasCategoryFilter: hasCategoryFilter,
- ddlProductFilter: ddlProductFilter,
- idProductFilter: idProductFilter,
- hasProductFilter: hasProductFilter
- });
- }
- if (!hasCategoryFilter && !hasProductFilter) return;
- if (hasCategoryFilter) {
- var ddlCategory = row.querySelector('td.' + flagProductCategory + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlCategory, idProductCategoryFilter);
- this.handleChangeProductCategoryDdl(null, ddlCategory);
- }
- if (hasProductFilter) {
- var ddlProduct = row.querySelector('td.' + flagProduct + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlProduct, idProductFilter);
- }
- }
- }, {
- key: "hookupTableMain",
- value: function hookupTableMain() {
- product_permutations_superPropGet(PageStoreProductPermutations, "hookupTableMain", this, 3)([]);
- this.hookupFieldsProductCategory();
- this.hookupProductFields();
- this.hookupFieldsProductPermutationVariation();
- this.hookupDescriptionTextareas();
- this.hookupCostFields();
- this.hookupProfitFields();
- this.hookupLatencyManufactureInputs();
- this.hookupQuantityFields();
- this.hookupSubscriptionFields();
- this.hookupIdStripeProductInputs();
- this.hookupExpirationFields();
- this.hookupFieldsActive();
- }
- }, {
- key: "hookupFieldsProductCategory",
- value: function hookupFieldsProductCategory() {
- var _this2 = this;
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagProductCategory, Utils.getListFromDict(productCategories), function (cellSelector) {
- _this2.hookupProductCategoryDdls(cellSelector);
- });
- }
- }, {
- key: "hookupProductFields",
- value: function hookupProductFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagProduct, Utils.getListFromDict(products));
- }
- }, {
- key: "hookupDescriptionTextareas",
- value: function hookupDescriptionTextareas() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDescription + ' textarea');
- }
- }, {
- key: "hookupCostFields",
- value: function hookupCostFields() {
- this.hookupCurrencyCostFields();
- this.hookupCostInputs();
- }
- }, {
- key: "hookupCurrencyCostFields",
- value: function hookupCurrencyCostFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagCurrencyCost, Utils.getListFromDict(currencies));
- }
- }, {
- key: "hookupCostInputs",
- value: function hookupCostInputs() {
- /*
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostUnitLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostUnitLocalVatIncl + ' input');
- */
- }
- }, {
- key: "hookupProfitFields",
- value: function hookupProfitFields() {
- // this.hookupCurrencyProfitFields();
- this.hookupProfitInputs();
- }
- /*
- hookupCurrencyProfitFields(){
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagCurrency, Utils.getListFromDict(currencies));
- }
- */
- }, {
- key: "hookupProfitInputs",
- value: function hookupProfitInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProfitLocalMin + ' input');
- }
- }, {
- key: "hookupLatencyManufactureInputs",
- value: function hookupLatencyManufactureInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagLatencyManufacture + ' input');
- }
- }, {
- key: "hookupQuantityFields",
- value: function hookupQuantityFields() {
- this.hookupQuantityMinInputs();
- this.hookupQuantityMaxInputs();
- this.hookupQuantityStockInputs();
- this.hookupCountUnitMeasurementPerQuantityStepInputs();
- this.hookupUnitMeasurementQuantityFields();
- }
- }, {
- key: "hookupQuantityMinInputs",
- value: function hookupQuantityMinInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagQuantityMin + ' input');
- }
- }, {
- key: "hookupQuantityMaxInputs",
- value: function hookupQuantityMaxInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagQuantityMax + ' input');
- }
- }, {
- key: "hookupQuantityStockInputs",
- value: function hookupQuantityStockInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagQuantityStock + ' input');
- }
- }, {
- key: "hookupCountUnitMeasurementPerQuantityStepInputs",
- value: function hookupCountUnitMeasurementPerQuantityStepInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCountUnitMeasurementPerQuantityStep + ' input');
- }
- }, {
- key: "hookupUnitMeasurementQuantityFields",
- value: function hookupUnitMeasurementQuantityFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagUnitMeasurementQuantity, Utils.getListFromDict(unitMeasurements));
- }
- }, {
- key: "hookupSubscriptionFields",
- value: function hookupSubscriptionFields() {
- this.hookupIsSubscriptionFields();
- this.hookupIntervalRecurrenceFields();
- this.hookupCountIntervalRecurrenceInputs();
- }
- }, {
- key: "hookupIsSubscriptionFields",
- value: function hookupIsSubscriptionFields() {
- var _this3 = this;
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagIsSubscription + ' input', function (event, element) {
- _this3.handleChangeCheckboxIsSubscription(event, element);
- });
- }
- }, {
- key: "handleChangeCheckboxIsSubscription",
- value: function handleChangeCheckboxIsSubscription(event, element) {
- this.handleChangeNestedElementCellTable(event, element);
- var isSubscription = DOM.getElementValueCurrent(element);
- var row = DOM.getRowFromElement(element);
- var inputCountIntervalRecurrence = row.querySelector('td.' + flagCountUnitMeasurementIntervalRecurrence + ' input');
- var divOrDdlIntervalRecurrence = row.querySelector('td.' + flagUnitMeasurementIntervalRecurrence + ' .' + flagUnitMeasurementIntervalRecurrence);
- if (isSubscription) {
- inputCountIntervalRecurrence.classList.remove(flagCollapsed);
- divOrDdlIntervalRecurrence.classList.remove(flagCollapsed);
- var tdUnitMeasurementIntervalRecurrence = divOrDdlIntervalRecurrence.closest('td');
- tdUnitMeasurementIntervalRecurrence.dispatchEvent(new Event('click'));
- } else {
- inputCountIntervalRecurrence.classList.add(flagCollapsed);
- divOrDdlIntervalRecurrence.classList.add(flagCollapsed);
- }
- }
- }, {
- key: "hookupIntervalRecurrenceFields",
- value: function hookupIntervalRecurrenceFields() {
- this.hookupTableCellDDlPreviewsWhenNotCollapsed(idTableMain + ' td.' + flagUnitMeasurementIntervalRecurrence, Utils.getListFromDict(unitMeasurementsTime));
- }
- }, {
- key: "hookupCountIntervalRecurrenceInputs",
- value: function hookupCountIntervalRecurrenceInputs() {
- this.hookupChangeHandlerTableCellsWhenNotCollapsed(idTableMain + ' td.' + flagCountUnitMeasurementIntervalRecurrence + ' input');
- }
- }, {
- key: "hookupIdStripeProductInputs",
- value: function hookupIdStripeProductInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagIdStripeProduct + ' input');
- }
- }, {
- key: "hookupExpirationFields",
- value: function hookupExpirationFields() {
- this.hookupDoesExpireFasterOnceUnsealedCheckboxes();
- this.hookupIntervalExpirationUnsealedFields();
- this.hookupCountIntervalExpirationUnsealedInputs();
- }
- }, {
- key: "hookupDoesExpireFasterOnceUnsealedCheckboxes",
- value: function hookupDoesExpireFasterOnceUnsealedCheckboxes() {
- var _this4 = this;
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDoesExpireFasterOnceUnsealed + ' input', function (event, element) {
- _this4.handleChangeCheckboxDoesExpireFasterOnceUnsealed(event, element);
- });
- }
- }, {
- key: "handleChangeCheckboxDoesExpireFasterOnceUnsealed",
- value: function handleChangeCheckboxDoesExpireFasterOnceUnsealed(event, element) {
- this.handleChangeNestedElementCellTable(event, element);
- var doesExpireFasterOnceUnsealed = DOM.getElementValueCurrent(element);
- var row = DOM.getRowFromElement(element);
- var inputCountIntervalExpirationUnsealed = row.querySelector('td.' + flagCountUnitMeasurementIntervalExpirationUnsealed + ' input');
- var divOrDdlIntervalExpirationUnsealed = row.querySelector('td.' + flagUnitMeasurementIntervalExpirationUnsealed + ' .' + flagUnitMeasurementIntervalExpirationUnsealed);
- if (doesExpireFasterOnceUnsealed) {
- inputCountIntervalExpirationUnsealed.classList.remove(flagCollapsed);
- divOrDdlIntervalExpirationUnsealed.classList.remove(flagCollapsed);
- var tdUnitMeasurementIntervalExpirationUnsealed = divOrDdlIntervalExpirationUnsealed.closest('td');
- tdUnitMeasurementIntervalExpirationUnsealed.dispatchEvent(new Event('click'));
- this.hook;
- } else {
- inputCountIntervalExpirationUnsealed.classList.add(flagCollapsed);
- divOrDdlIntervalExpirationUnsealed.classList.add(flagCollapsed);
- }
- }
- }, {
- key: "hookupIntervalExpirationUnsealedFields",
- value: function hookupIntervalExpirationUnsealedFields() {
- this.hookupTableCellDDlPreviewsWhenNotCollapsed(idTableMain + ' td.' + flagUnitMeasurementIntervalExpirationUnsealed, Utils.getListFromDict(unitMeasurementsTime));
- }
- }, {
- key: "hookupCountIntervalExpirationUnsealedInputs",
- value: function hookupCountIntervalExpirationUnsealedInputs() {
- this.hookupChangeHandlerTableCellsWhenNotCollapsed(idTableMain + ' td.' + flagCountUnitMeasurementIntervalExpirationUnsealed + ' input');
- }
- }, {
- key: "leave",
- value: function leave() {
- product_permutations_superPropGet(PageStoreProductPermutations, "leave", this, 3)([]);
- }
- }]);
-}(TableBasePage);
-product_permutations_defineProperty(PageStoreProductPermutations, "hash", hashPageStoreProductPermutations);
-product_permutations_defineProperty(PageStoreProductPermutations, "attrIdRowObject", attrIdProductPermutation);
-
-;// CONCATENATED MODULE: ./static/js/pages/store/products.js
-function products_typeof(o) { "@babel/helpers - typeof"; return products_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, products_typeof(o); }
-function products_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function products_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, products_toPropertyKey(o.key), o); } }
-function products_createClass(e, r, t) { return r && products_defineProperties(e.prototype, r), t && products_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function products_callSuper(t, o, e) { return o = products_getPrototypeOf(o), products_possibleConstructorReturn(t, products_isNativeReflectConstruct() ? Reflect.construct(o, e || [], products_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function products_possibleConstructorReturn(t, e) { if (e && ("object" == products_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return products_assertThisInitialized(t); }
-function products_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function products_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (products_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function products_superPropGet(t, e, o, r) { var p = products_get(products_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function products_get() { return products_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = products_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, products_get.apply(null, arguments); }
-function products_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = products_getPrototypeOf(t));); return t; }
-function products_getPrototypeOf(t) { return products_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, products_getPrototypeOf(t); }
-function products_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && products_setPrototypeOf(t, e); }
-function products_setPrototypeOf(t, e) { return products_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, products_setPrototypeOf(t, e); }
-function products_defineProperty(e, r, t) { return (r = products_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function products_toPropertyKey(t) { var i = products_toPrimitive(t, "string"); return "symbol" == products_typeof(i) ? i : i + ""; }
-function products_toPrimitive(t, r) { if ("object" != products_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != products_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-
-
-
-
-
-var PageStoreProducts = /*#__PURE__*/function (_TableBasePage) {
- function PageStoreProducts(router) {
- var _this;
- products_classCallCheck(this, PageStoreProducts);
- _this = products_callSuper(this, PageStoreProducts, [router]);
- products_defineProperty(_this, "callSaveTableContent", api_API.saveProducts);
- _this.storeMixin = new StoreTableMixinPage(_this);
- return _this;
- }
- products_inherits(PageStoreProducts, _TableBasePage);
- return products_createClass(PageStoreProducts, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }, {
- key: "hookupFilters",
- value: function hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterProductCategory();
- this.hookupFilterIsNotEmpty();
- this.hookupFilterActive();
- }
- }, {
- key: "hookupFilterProductCategory",
- value: function hookupFilterProductCategory() {
- this.hookupFilter(flagProductCategory);
- }
- }, {
- key: "loadRowTable",
- value: function loadRowTable(rowJson) {
- return;
- if (rowJson == null) return;
- var row = _rowBlank.cloneNode(true);
- row.classList.remove(flagRowNew);
- row.classList.remove(flagInitialised);
- row.querySelectorAll('.' + flagInitialised).forEach(function (element) {
- element.classList.remove(flagInitialised);
- });
- var sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- var tdProductCategory = row.querySelector('td.' + flagProductCategory);
- var divProductCategory = tdProductCategory.querySelector('div.' + flagProductCategory);
- var textareaName = row.querySelector('td.' + flagName + ' textarea');
- var tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- var divAccessLevel = tdAccessLevel.querySelector('div.' + flagAccessLevel);
- var inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
- DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, rowJson[flagDisplayOrder]);
- DOM.setElementValuesCurrentAndPrevious(textareaCode, rowJson[flagCode]);
- DOM.setElementValuesCurrentAndPrevious(textareaName, rowJson[flagName]);
- DOM.setElementValuesCurrentAndPrevious(textareaDescription, rowJson[flagDescription]);
- tdAccessLevel.setAttribute(attrIdAccessLevel, rowJson[attrIdAccessLevel]);
- tdAccessLevel.setAttribute(flagAccessLevelRequired, rowJson[flagAccessLevelRequired]);
- divAccessLevel.setAttribute(attrIdAccessLevel, rowJson[attrIdAccessLevel]);
- DOM.setElementValuesCurrentAndPrevious(divAccessLevel, rowJson[attrIdAccessLevel]);
- divAccessLevel.textContent = rowJson[flagAccessLevelRequired];
- DOM.setElementValuesCurrentAndPrevious(inputActive, rowJson[flagActive]);
- row.setAttribute(rowJson[flagKeyPrimary], rowJson[rowJson[flagKeyPrimary]]);
- var table = TableBasePage.getTableMain();
- var bodyTable = table.querySelector('tbody');
- bodyTable.appendChild(row);
- }
- }, {
- key: "getJsonRow",
- value: function getJsonRow(row) {
- if (row == null) return;
- var sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- var tdProductCategory = row.querySelector('td.' + flagProductCategory);
- var textareaName = row.querySelector('td.' + flagName + ' textarea');
- // let tdProductVariations = row.querySelector('td.' + flagProductVariations);
- var inputHasVariations = row.querySelector('td.' + flagHasVariations + ' input[type="checkbox"]');
- var tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- var buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
- var jsonProduct = {};
- jsonProduct[attrIdProduct] = row.getAttribute(attrIdProduct);
- jsonProduct[attrIdProductCategory] = DOM.getElementAttributeValueCurrent(tdProductCategory);
- jsonProduct[flagName] = DOM.getElementAttributeValueCurrent(textareaName);
- // jsonRow[flagProductVariations] = DOM.getElementAttributeValueCurrent(tdProductVariations);
- // jsonRow[flagHasVariations] = jsonRow[flagProductVariations] != '';
- jsonProduct[flagHasVariations] = DOM.getElementAttributeValueCurrent(inputHasVariations);
- // jsonProduct[flagAccessLevelRequired] = tdAccessLevel.getAttribute(flagAccessLevelRequired);
- jsonProduct[attrIdAccessLevel] = DOM.getElementAttributeValueCurrent(tdAccessLevel);
- jsonProduct[flagActive] = buttonActive.classList.contains(flagDelete);
- jsonProduct[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(sliderDisplayOrder);
- return jsonProduct;
- }
- }, {
- key: "initialiseRowNew",
- value: function initialiseRowNew(tbody, row) {
- if (row == null) return;
- this.initialiseSliderDisplayOrderRowNew(tbody, row);
- }
- }, {
- key: "hookupTableMain",
- value: function hookupTableMain() {
- products_superPropGet(PageStoreProducts, "hookupTableMain", this, 3)([]);
- this.hookupSlidersDisplayOrderTable();
- this.hookupTdsProductCategory();
- this.hookupTextareasNameTable();
- this.hookupInputsHasVariationsTable();
- this.hookupTdsAccessLevel();
- this.hookupFieldsActive();
- }
- }, {
- key: "hookupTdsProductCategory",
- value: function hookupTdsProductCategory() {
- var cellSelector = idTableMain + ' tbody td.' + flagProductCategory;
- this.hookupTableCellDdlPreviews(cellSelector, Utils.getListFromDict(productCategories));
- }
- }, {
- key: "hookupInputsHasVariationsTable",
- value: function hookupInputsHasVariationsTable() {
- var cellSelector = idTableMain + ' tbody td.' + flagHasVariations + ' input[type="checkbox"]';
- this.hookupChangeHandlerTableCells(cellSelector);
- }
-
- /*
- isDirtyRow(row) {
- if (row == null) return false;
- console.log("Product Product isDirtyRow");
- console.log("row: ", row);
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder);
- let inputCode = row.querySelector('td.' + flagCode + ' textarea');
- let inputName = row.querySelector('td.' + flagName + ' textarea');
- let inputDescription = row.querySelector('td.' + flagDescription + ' textarea');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
- let isDirty = sliderDisplayOrder.classList.contains(flagDirty) || inputCode.classList.contains(flagDirty) || inputName.classList.contains(flagDirty) ||
- inputDescription.classList.contains(flagDirty) || tdAccessLevel.classList.contains(flagDirty) || inputActive.classList.contains(flagDirty);
- DOM.handleDirtyElement(row, isDirty);
- return isDirty;
- }
- */
- }, {
- key: "leave",
- value: function leave() {
- products_superPropGet(PageStoreProducts, "leave", this, 3)([]);
- }
-
- /*
- getFiltersDefaults() {
- filters = {};
- filters.flagIsNotEmpty = true;
- filters.flagActive = true;
- return filters;
- }
- */
- }]);
-}(TableBasePage);
-products_defineProperty(PageStoreProducts, "hash", hashPageStoreProducts);
-products_defineProperty(PageStoreProducts, "attrIdRowObject", attrIdProduct);
-
-;// CONCATENATED MODULE: ./static/js/pages/store/product_variations.js
-function product_variations_typeof(o) { "@babel/helpers - typeof"; return product_variations_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, product_variations_typeof(o); }
-function product_variations_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function product_variations_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, product_variations_toPropertyKey(o.key), o); } }
-function product_variations_createClass(e, r, t) { return r && product_variations_defineProperties(e.prototype, r), t && product_variations_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function product_variations_callSuper(t, o, e) { return o = product_variations_getPrototypeOf(o), product_variations_possibleConstructorReturn(t, product_variations_isNativeReflectConstruct() ? Reflect.construct(o, e || [], product_variations_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function product_variations_possibleConstructorReturn(t, e) { if (e && ("object" == product_variations_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return product_variations_assertThisInitialized(t); }
-function product_variations_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function product_variations_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (product_variations_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function product_variations_superPropGet(t, e, o, r) { var p = product_variations_get(product_variations_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function product_variations_get() { return product_variations_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = product_variations_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, product_variations_get.apply(null, arguments); }
-function product_variations_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = product_variations_getPrototypeOf(t));); return t; }
-function product_variations_getPrototypeOf(t) { return product_variations_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, product_variations_getPrototypeOf(t); }
-function product_variations_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && product_variations_setPrototypeOf(t, e); }
-function product_variations_setPrototypeOf(t, e) { return product_variations_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, product_variations_setPrototypeOf(t, e); }
-function product_variations_defineProperty(e, r, t) { return (r = product_variations_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function product_variations_toPropertyKey(t) { var i = product_variations_toPrimitive(t, "string"); return "symbol" == product_variations_typeof(i) ? i : i + ""; }
-function product_variations_toPrimitive(t, r) { if ("object" != product_variations_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != product_variations_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-
-
-
-
-
-
-
-var PageStoreProductVariations = /*#__PURE__*/function (_TableBasePage) {
- function PageStoreProductVariations(router) {
- var _this;
- product_variations_classCallCheck(this, PageStoreProductVariations);
- _this = product_variations_callSuper(this, PageStoreProductVariations, [router]);
- product_variations_defineProperty(_this, "callSaveTableContent", api_API.saveProductVariations);
- _this.storeMixin = new StoreTableMixinPage(_this);
- return _this;
- }
- product_variations_inherits(PageStoreProductVariations, _TableBasePage);
- return product_variations_createClass(PageStoreProductVariations, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }, {
- key: "hookupFilters",
- value: function hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterActive();
- this.hookupFilterIsNotEmpty();
- }
- }, {
- key: "loadRowTable",
- value: function loadRowTable(rowJson) {}
- }, {
- key: "getJsonRow",
- value: function getJsonRow(row) {
- var _this2 = this;
- if (row == null) return;
- var inputDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' input');
- var textareaCode = row.querySelector('td.' + flagCode + ' textarea');
- var textareaName = row.querySelector('td.' + flagName + ' textarea');
- var textareaNamePlural = row.querySelector('td.' + flagNamePlural + ' textarea');
- var tdProductVariations = row.querySelector('td.' + flagProductVariations);
- var buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
- var jsonRow = {};
- jsonRow[attrIdProductVariationType] = row.getAttribute(attrIdProductVariationType);
- if (validation_Validation.isEmpty(jsonRow[attrIdProductVariationType])) jsonRow[attrIdProductVariationType] = -1;
- jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
- jsonRow[flagCode] = DOM.getElementAttributeValueCurrent(textareaCode);
- jsonRow[flagName] = DOM.getElementAttributeValueCurrent(textareaName);
- jsonRow[flagNamePlural] = DOM.getElementAttributeValueCurrent(textareaNamePlural);
- var variations = [];
- if (tdProductVariations.classList.contains(flagDirty)) {
- var trsProductVariation = tdProductVariations.querySelectorAll('tr.' + flagProductVariation + '.' + flagDirty);
- if (trsProductVariation != null) {
- trsProductVariation.forEach(function (tr, indexRow) {
- variations.push(_this2.getJsonRowProductVariation(tr, indexRow));
- });
- }
- } else {
- // variations = BusinessObjects.getListObjectsFromIdDictAndCsv(productVariationTypes, DOM.getElementAttributeValueCurrent(tdProductVariations));
- }
- jsonRow[flagProductVariations] = variations;
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- }, {
- key: "getJsonRowProductVariation",
- value: function getJsonRowProductVariation(tr, indexRow) {
- var inputDisplayOrder = tr.querySelector('td.' + flagDisplayOrder + ' input');
- var textareaCode = tr.querySelector('td.' + flagCode + ' textarea');
- var textareaName = tr.querySelector('td.' + flagName + ' textarea');
- // let checkboxActive = tr.querySelector('td.' + flagActive + ' input');
- var buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
- var jsonRow = {};
- jsonRow[attrIdProductVariation] = tr.getAttribute(attrIdProductVariation);
- if (validation_Validation.isEmpty(jsonRow[attrIdProductVariation])) jsonRow[attrIdProductVariation] = -1 - indexRow;
- jsonRow[attrIdProductVariationType] = tr.getAttribute(attrIdProductVariationType);
- jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
- jsonRow[flagCode] = DOM.getElementAttributeValueCurrent(textareaCode);
- jsonRow[flagName] = DOM.getElementAttributeValueCurrent(textareaName);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- }, {
- key: "initialiseRowNew",
- value: function initialiseRowNew(tbody, row) {
- product_variations_superPropGet(PageStoreProductVariations, "initialiseRowNew", this, 3)([tbody, row]);
- this.initialiseSliderDisplayOrderRowNew(tbody, row);
- }
- }, {
- key: "hookupTableMain",
- value: function hookupTableMain() {
- product_variations_superPropGet(PageStoreProductVariations, "hookupTableMain", this, 3)([]);
- this.hookupSlidersDisplayOrderTable();
- this.hookupTextareasCodeTable();
- this.hookupTextareasNameTable();
- this.hookupTextareasNamePluralTable();
- this.hookupFieldsProductVariation();
- this.hookupFieldsActive();
- }
- }, {
- key: "hookupTextareasNamePluralTable",
- value: function hookupTextareasNamePluralTable() {
- this.hookupChangeHandlerTableCells(idTableMain + ' tbody tr td.' + flagNamePlural + ' textarea');
- }
- }, {
- key: "hookupFieldsProductVariation",
- value: function hookupFieldsProductVariation() {
- this.hookupProductVariationsPreviews();
- this.hookupFieldsProductVariationDisplayOrder();
- this.hookupFieldsProductVariationCode();
- this.hookupFieldsProductVariationName();
- this.hookupFieldsProductVariationActive();
- }
- }, {
- key: "hookupProductVariationsPreviews",
- value: function hookupProductVariationsPreviews() {
- var _this3 = this;
- this.hookupEventHandler("click", idTableMain + ' td.' + flagProductVariations + ' div', function (event, element) {
- var td = DOM.getCellFromElement(element);
- if (!td.classList.contains(flagCollapsed)) return;
- _this3.handleClickProductVariationsPreview(event, element);
- });
- }
- }, {
- key: "handleClickProductVariationsPreview",
- value: function handleClickProductVariationsPreview(event, element) {
- var _this4 = this;
- if (_verbose) {
- console.log("click order items preview");
- }
- var row = DOM.getRowFromElement(element);
- var idProductVariationType = row.getAttribute(attrIdProductVariationType);
- var productVariationType = productVariationTypes[idProductVariationType];
- if (productVariationType == null) productVariationType = product_variations_defineProperty({}, flagProductVariations, []);
- var tblProductVariations = document.createElement("table");
- tblProductVariations.classList.add(flagProductVariations);
- var thead = document.createElement("thead");
- var tr = document.createElement("tr");
- var thDisplayOrder = document.createElement("th");
- thDisplayOrder.classList.add(flagDisplayOrder);
- thDisplayOrder.textContent = 'Display Order';
- var thCode = document.createElement("th");
- thCode.classList.add(flagCode);
- thCode.textContent = 'Code';
- var thName = document.createElement("th");
- thName.classList.add(flagName);
- thName.textContent = 'Name';
- var thActive = document.createElement("th");
- thActive.classList.add(flagActive);
- // thActive.textContent = 'Active';
- var buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagActive);
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- thActive.appendChild(buttonAdd);
- tr.appendChild(thDisplayOrder);
- tr.appendChild(thCode);
- tr.appendChild(thName);
- tr.appendChild(thActive);
- thead.appendChild(tr);
- tblProductVariations.appendChild(thead);
- var tbody = document.createElement("tbody");
- productVariationType[flagProductVariations].forEach(function (productVariation, index) {
- _this4.addRowProductVariation(tbody, productVariation);
- });
- tblProductVariations.appendChild(tbody);
- var cell = DOM.getCellFromElement(element);
- var cellNew = cell.cloneNode(false);
- cellNew.appendChild(tblProductVariations);
- cellNew.classList.remove(flagCollapsed);
- row.replaceChild(cellNew, cell);
- if (_verbose) {
- console.log("tblProductVariations: ", tblProductVariations);
- }
- this.toggleColumnHeaderCollapsed(flagProductVariations, false);
- this.hookupFieldsProductVariation();
- }
- }, {
- key: "addRowProductVariation",
- value: function addRowProductVariation(tbody, productVariation) {
- if (_verbose) {
- console.log("addRowProductVariation: ", productVariation);
- }
- var tdDisplayOrder = document.createElement("td");
- tdDisplayOrder.classList.add(flagDisplayOrder);
- var inputDisplayOrder = document.createElement("input");
- inputDisplayOrder.classList.add(flagDisplayOrder);
- inputDisplayOrder.type = 'number';
- inputDisplayOrder.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputDisplayOrder, productVariation[flagDisplayOrder]);
- tdDisplayOrder.appendChild(inputDisplayOrder);
- var tdCode = document.createElement("td");
- tdCode.classList.add(flagCode);
- var textareaCode = document.createElement("textarea");
- textareaCode.classList.add(flagCode);
- DOM.setElementValuesCurrentAndPrevious(textareaCode, productVariation[flagCode]);
- tdCode.appendChild(textareaCode);
- var tdName = document.createElement("td");
- tdName.classList.add(flagName);
- var textareaName = document.createElement("textarea");
- textareaName.classList.add(flagName);
- DOM.setElementValuesCurrentAndPrevious(textareaName, productVariation[flagName]);
- tdName.appendChild(textareaName);
- var tdActive = this.createTdActive(productVariation[flagActive]);
- var tr = document.createElement("tr");
- tr.classList.add(flagProductVariation);
- tr.setAttribute(attrIdProductVariationType, productVariation[attrIdProductVariationType]);
- tr.setAttribute(attrIdProductVariation, productVariation[attrIdProductVariation]);
- tr.appendChild(tdDisplayOrder);
- tr.appendChild(tdCode);
- tr.appendChild(tdName);
- tr.appendChild(tdActive);
- tbody.appendChild(tr);
- }
- }, {
- key: "hookupFieldsProductVariationDisplayOrder",
- value: function hookupFieldsProductVariationDisplayOrder() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProductVariations + ' td.' + flagDisplayOrder + ' input');
- }
- }, {
- key: "hookupFieldsProductVariationCode",
- value: function hookupFieldsProductVariationCode() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProductVariations + ' textarea.' + flagCode);
- }
- }, {
- key: "hookupFieldsProductVariationName",
- value: function hookupFieldsProductVariationName() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProductVariations + ' textarea.' + flagName);
- }
- }, {
- key: "hookupFieldsProductVariationActive",
- value: function hookupFieldsProductVariationActive() {
- var _this5 = this;
- this.hookupFieldsActive(flagProductVariations, function (event, element) {
- _this5.hookupButtonsProductVariationAdd(event, element);
- });
- }
- }, {
- key: "hookupButtonsProductVariationAdd",
- value: function hookupButtonsProductVariationAdd(event, element) {
- var row = element.closest(idTableMain + ' > tbody > tr');
- var idProductVariationType = row.getAttribute(attrIdProductVariationType);
- var idProductVariation = row.getAttribute(attrIdProductVariation);
- var countProductVariations = row.querySelectorAll('td.' + flagProductVariations + ' tr').length;
- var productVariation = product_variations_defineProperty(product_variations_defineProperty(product_variations_defineProperty(product_variations_defineProperty(product_variations_defineProperty(product_variations_defineProperty({}, attrIdProductVariationType, idProductVariationType), attrIdProductVariation, idProductVariation), flagCode, ''), flagName, ''), flagDisplayOrder, countProductVariations), flagActive, true);
- var tbody = row.querySelector('td.' + flagProductVariations + ' table tbody');
- this.addRowProductVariation(tbody, productVariation);
- this.hookupFieldsProductVariation();
- }
- }, {
- key: "leave",
- value: function leave() {
- product_variations_superPropGet(PageStoreProductVariations, "leave", this, 3)([]);
- }
- }]);
-}(TableBasePage);
-product_variations_defineProperty(PageStoreProductVariations, "hash", hashPageStoreProductVariations);
-product_variations_defineProperty(PageStoreProductVariations, "attrIdRowObject", attrIdProductVariationType);
-
-;// CONCATENATED MODULE: ./static/js/pages/store/stock_items.js
-function stock_items_typeof(o) { "@babel/helpers - typeof"; return stock_items_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, stock_items_typeof(o); }
-function stock_items_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function stock_items_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, stock_items_toPropertyKey(o.key), o); } }
-function stock_items_createClass(e, r, t) { return r && stock_items_defineProperties(e.prototype, r), t && stock_items_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function stock_items_callSuper(t, o, e) { return o = stock_items_getPrototypeOf(o), stock_items_possibleConstructorReturn(t, stock_items_isNativeReflectConstruct() ? Reflect.construct(o, e || [], stock_items_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function stock_items_possibleConstructorReturn(t, e) { if (e && ("object" == stock_items_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return stock_items_assertThisInitialized(t); }
-function stock_items_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function stock_items_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (stock_items_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function stock_items_superPropGet(t, e, o, r) { var p = stock_items_get(stock_items_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function stock_items_get() { return stock_items_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = stock_items_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, stock_items_get.apply(null, arguments); }
-function stock_items_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = stock_items_getPrototypeOf(t));); return t; }
-function stock_items_getPrototypeOf(t) { return stock_items_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, stock_items_getPrototypeOf(t); }
-function stock_items_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && stock_items_setPrototypeOf(t, e); }
-function stock_items_setPrototypeOf(t, e) { return stock_items_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, stock_items_setPrototypeOf(t, e); }
-function stock_items_defineProperty(e, r, t) { return (r = stock_items_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function stock_items_toPropertyKey(t) { var i = stock_items_toPrimitive(t, "string"); return "symbol" == stock_items_typeof(i) ? i : i + ""; }
-function stock_items_toPrimitive(t, r) { if ("object" != stock_items_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != stock_items_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-
-
-
-
-
-
-
-var PageStoreStockItems = /*#__PURE__*/function (_TableBasePage) {
- function PageStoreStockItems(router) {
- var _this;
- stock_items_classCallCheck(this, PageStoreStockItems);
- _this = stock_items_callSuper(this, PageStoreStockItems, [router]);
- stock_items_defineProperty(_this, "callSaveTableContent", api_API.saveStockItems);
- _this.storeMixin = new StoreTableMixinPage(_this);
- return _this;
- }
- stock_items_inherits(PageStoreStockItems, _TableBasePage);
- return stock_items_createClass(PageStoreStockItems, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }, {
- key: "hookupFilters",
- value: function hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterProductCategory();
- this.hookupFilterProduct();
- this.hookupFilterOutOfStock();
- this.hookupFilterMinStock();
- this.hookupFilterMaxStock();
- }
- }, {
- key: "hookupFilterProductCategory",
- value: function hookupFilterProductCategory() {
- this.hookupFilter(flagProductCategory, function (event, filterCategory) {
- // loadPermutations();
- // let wasDirtyFilter = filterCategory.classList.contains(flagDirty);
- PageStoreStockItems.isDirtyFilter(filterCategory);
- var isDirtyFilter = filterCategory.classList.contains(flagDirty);
- var idProductCategory = DOM.getElementValueCurrent(filterCategory);
- var products = productCategories[idProductCategory];
- var filterProduct = document.querySelector(idFormFilters + ' .' + flagProduct);
- var idProductPrevious = filterProduct.getAttribute(attrValuePrevious);
- filterProduct.innerHTML = '';
- var optionJson, option;
- option = DOM.createOption(null);
- filterProduct.appendChild(option);
- products.forEach(function (product) {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(product, idProductPrevious);
- option = DOM.createOption(optionJson);
- filterProduct.appendChild(option);
- });
- filterProduct.dispatchEvent(new Event('change'));
- });
- }
- }, {
- key: "hookupFilterProduct",
- value: function hookupFilterProduct() {
- this.hookupFilter(flagProduct);
- }
- }, {
- key: "hookupFilterOutOfStock",
- value: function hookupFilterOutOfStock() {
- this.hookupFilter(flagIsOutOfStock);
- }
- }, {
- key: "hookupFilterMinStock",
- value: function hookupFilterMinStock() {
- this.hookupFilter(flagQuantityMin);
- }
- }, {
- key: "hookupFilterMaxStock",
- value: function hookupFilterMaxStock() {
- this.hookupFilter(flagQuantityMax);
- }
- }, {
- key: "loadRowTable",
- value: function loadRowTable(rowJson) {}
- }, {
- key: "getJsonRow",
- value: function getJsonRow(row) {
- if (row == null) return;
- var tdProductCategory = row.querySelector('td.' + flagProductCategory);
- var tdProduct = row.querySelector('td.' + flagProduct);
- var tdProductVariations = row.querySelector('td.' + flagProductVariations);
- var tdCurrencyCost = row.querySelector('td.' + flagCurrencyCost);
- var inputCostLocalVatExcl = row.querySelector('td.' + flagCostUnitLocalVatExcl + ' input');
- var inputCostLocalVatIncl = row.querySelector('td.' + flagCostUnitLocalVatIncl + ' input');
- var inputDatePurchased = row.querySelector('td.' + flagDatePurchased + ' input');
- var inputDateReceived = row.querySelector('td.' + flagDateReceived + ' input');
- var tdStorageLocation = row.querySelector('td.' + flagStorageLocation);
- var inputIsSealed = row.querySelector('td.' + flagIsSealed + ' input');
- var inputDateUnsealed = row.querySelector('td.' + flagDateUnsealed + ' input');
- var inputDateExpiration = row.querySelector('td.' + flagDateExpiration + ' input');
- var inputIsConsumed = row.querySelector('td.' + flagIsConsumed + ' input');
- var inputDateConsumed = row.querySelector('td.' + flagDateConsumed + ' input');
- var buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
- var jsonRow = {};
- jsonRow[attrIdStockItem] = row.getAttribute(attrIdStockItem);
- jsonRow[attrIdProductPermutation] = tdProductVariations.getAttribute(attrIdProductPermutation);
- jsonRow[attrIdProductCategory] = DOM.getElementAttributeValueCurrent(tdProductCategory);
- jsonRow[attrIdProduct] = DOM.getElementAttributeValueCurrent(tdProduct);
- jsonRow[flagProductVariations] = DOM.getElementAttributeValueCurrent(tdProductVariations);
- jsonRow[flagHasVariations] = jsonRow[flagProductVariations] != '';
- jsonRow[flagCurrencyCost] = DOM.getElementAttributeValueCurrent(tdCurrencyCost);
- jsonRow[flagCostUnitLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostLocalVatExcl);
- jsonRow[flagCostUnitLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostLocalVatIncl);
- jsonRow[flagDatePurchased] = DOM.getElementAttributeValueCurrent(inputDatePurchased);
- jsonRow[flagDateReceived] = DOM.getElementAttributeValueCurrent(inputDateReceived);
- jsonRow[attrIdStorageLocation] = DOM.getElementAttributeValueCurrent(tdStorageLocation);
- jsonRow[flagIsSealed] = DOM.getElementAttributeValueCurrent(inputIsSealed);
- jsonRow[flagDateUnsealed] = DOM.getElementAttributeValueCurrent(inputDateUnsealed);
- jsonRow[flagDateExpiration] = DOM.getElementAttributeValueCurrent(inputDateExpiration);
- jsonRow[flagIsConsumed] = DOM.getElementAttributeValueCurrent(inputIsConsumed);
- jsonRow[flagDateConsumed] = DOM.getElementAttributeValueCurrent(inputDateConsumed);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- }, {
- key: "initialiseRowNew",
- value: function initialiseRowNew(tbody, row) {
- stock_items_superPropGet(PageStoreStockItems, "initialiseRowNew", this, 3)([tbody, row]);
- var ddlCategoryFilter = document.querySelector(idFormFilters + ' #' + attrIdProductCategory);
- var idProductCategoryFilter = DOM.getElementValueCurrent(ddlCategoryFilter);
- var hasCategoryFilter = !(validation_Validation.isEmpty(idProductCategoryFilter) || idProductCategoryFilter == '0');
- var ddlProductFilter = document.querySelector(idFormFilters + ' #' + attrIdProduct);
- var idProductFilter = DOM.getElementValueCurrent(ddlProductFilter);
- var hasProductFilter = !(validation_Validation.isEmpty(idProductFilter) || idProductFilter == '0');
- if (_verbose) {
- console.log("initialiseRowNew: ", row);
- console.log({
- ddlCategoryFilter: ddlCategoryFilter,
- idProductCategoryFilter: idProductCategoryFilter,
- hasCategoryFilter: hasCategoryFilter,
- ddlProductFilter: ddlProductFilter,
- idProductFilter: idProductFilter,
- hasProductFilter: hasProductFilter
- });
- }
- if (!hasCategoryFilter && !hasProductFilter) return;
- if (hasCategoryFilter) {
- var ddlCategory = row.querySelector('td.' + flagProductCategory + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlCategory, idProductCategoryFilter);
- this.handleChangeProductCategoryDdl(null, ddlCategory);
- }
- if (hasProductFilter) {
- var ddlProduct = row.querySelector('td.' + flagProduct + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlProduct, idProductFilter);
- }
- }
- }, {
- key: "hookupTableMain",
- value: function hookupTableMain() {
- stock_items_superPropGet(PageStoreStockItems, "hookupTableMain", this, 3)([]);
- this.hookupProductCategoryFields();
- this.hookupProductFields();
- this.hookupFieldsProductPermutationVariation();
- this.hookupCurrencyCostFields();
- this.hookupCostInputs();
- this.hookupOrderDateInputs();
- this.hookupStorageLocationFields();
- this.hookupSealingInputs();
- this.hookupExpirationDateInputs();
- this.hookupConsumationInputs();
- this.hookupFieldsActive();
- }
- }, {
- key: "hookupProductCategoryFields",
- value: function hookupProductCategoryFields() {
- var _this2 = this;
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagProductCategory, Utils.getListFromDict(productCategories), function (event, element) {
- _this2.hookupProductCategoryDdls(event, element);
- });
- }
- }, {
- key: "hookupProductFields",
- value: function hookupProductFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagProduct, Utils.getListFromDict(products));
- }
-
- /*
- handleClickProductPermutationVariationsPreview(event, element) {
- let row = DOM.getRowFromElement(element);
- let tdProduct = row.querySelector('td.' + flagProduct);
- let idProduct = DOM.getElementValueCurrent(tdProduct);
- let product = products[idProduct];
- if (!product[flagHasVariations]) return;
- super.handleClickProductPermutationVariationsPreview(event, element);
- }
- */
- }, {
- key: "handleClickButtonProductPermutationVariationsAdd",
- value: function handleClickButtonProductPermutationVariationsAdd(event, element) {
- var row = DOM.getRowFromElement(element);
- var tbody = row.querySelector('tbody');
- var permutationVariation = PageStoreStockItems.createOptionUnselectedProductVariation();
- this.addProductPermutationVariationRow(tbody, permutationVariation);
- }
- }, {
- key: "hookupCurrencyCostFields",
- value: function hookupCurrencyCostFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagCurrencyCost, Utils.getListFromDict(currencies));
- }
- }, {
- key: "hookupCostInputs",
- value: function hookupCostInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostUnitLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostUnitLocalVatIncl + ' input');
- }
- }, {
- key: "hookupOrderDateInputs",
- value: function hookupOrderDateInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDatePurchased + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDateReceived + ' input');
- }
- }, {
- key: "hookupStorageLocationFields",
- value: function hookupStorageLocationFields() {
- var _this3 = this;
- this.hookupEventHandler("click", idTableMain + ' td.' + flagStorageLocation + ' div', function (event, element) {
- return _this3.handleClickStorageLocationPreview(event, element);
- });
- }
- }, {
- key: "handleClickStorageLocationPreview",
- value: function handleClickStorageLocationPreview(event, element) {
- var _this4 = this;
- this.toggleColumnCollapsed(flagStorageLocation, false);
- var idPlant = element.getAttribute(attrIdPlant);
- var idStorageLocation = element.getAttribute(attrIdStorageLocation);
- var tblStorageLocation = document.createElement("table");
- tblStorageLocation.classList.add(flagStorageLocation);
- var thead = document.createElement("thead");
- var thPlant = document.createElement("th");
- thPlant.textContent = 'Plant';
- var thLocation = document.createElement("th");
- thLocation.textContent = 'Location';
- var trHead = document.createElement("tr");
- trHead.appendChild(thPlant);
- trHead.appendChild(thLocation);
- thead.appendChild(trHead);
- tblStorageLocation.appendChild(thead);
- var tbody = document.createElement("tbody");
- var plant, optionPlantJson, optionPlant, storageLocation, optionStorageLocationJson, optionStorageLocation;
- var plantKeys = Object.keys(plants);
- var storageLocationKeys = Object.keys(storageLocations);
- debugger;
- var plantJson = idPlant != null ? plants[idPlant] : stock_items_defineProperty({}, attrIdPlant, null);
- var storageLocationJson = idStorageLocation != null ? storageLocations[idStorageLocation] : stock_items_defineProperty({}, attrIdStorageLocation, null);
- var tdPlant = document.createElement("td");
- tdPlant.classList.add(flagPlant);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdPlant, plantJson[attrIdPlant]);
- var ddlPlant = document.createElement("select");
- ddlPlant.classList.add(flagPlant);
- DOM.setElementAttributesValuesCurrentAndPrevious(ddlPlant, plantJson[attrIdPlant]);
- optionPlant = DOM.createOption(null);
- if (_verbose) {
- console.log("optionPlant: ", optionPlant);
- }
- ddlPlant.appendChild(optionPlant);
- plantKeys.forEach(function (plantKey) {
- plant = plants[plantKey];
- optionPlantJson = BusinessObjects.getOptionJsonFromObjectJson(plant,
- // objectJson
- plantJson[attrIdPlant] // valueSelected
- );
- optionPlant = DOM.createOption(optionPlantJson);
- if (_verbose) {
- console.log("optionPlant: ", optionPlant);
- }
- ddlPlant.appendChild(optionPlant);
- });
- var tdStorageLocation = document.createElement("td");
- tdStorageLocation.classList.add(flagStorageLocation);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdStorageLocation, storageLocationJson[attrIdStorageLocation]);
- var ddlStorageLocation = document.createElement("select");
- ddlStorageLocation.classList.add(flagStorageLocation);
- DOM.setElementAttributesValuesCurrentAndPrevious(ddlStorageLocation, storageLocationJson[attrIdStorageLocation]);
- optionStorageLocation = DOM.createOption(null);
- if (_verbose) {
- console.log("optionStorageLocation: ", optionStorageLocation);
- }
- ddlStorageLocation.appendChild(optionStorageLocation);
- storageLocationKeys.forEach(function (StorageLocationKey) {
- storageLocation = storageLocations[StorageLocationKey];
- optionStorageLocationJson = BusinessObjects.getOptionJsonFromObjectJson(storageLocation,
- // objectJson
- storageLocationJson[attrIdStorageLocation] // valueSelected
- );
- optionStorageLocation = DOM.createOption(optionStorageLocationJson);
- if (_verbose) {
- console.log("optionStorageLocation: ", optionStorageLocation);
- }
- ddlStorageLocation.appendChild(optionStorageLocation);
- });
- var trBody = document.createElement("tr");
- tdPlant.appendChild(ddlPlant);
- trBody.appendChild(tdPlant);
- tdStorageLocation.appendChild(ddlStorageLocation);
- trBody.appendChild(tdStorageLocation);
- tbody.appendChild(trBody);
- tblStorageLocation.appendChild(tbody);
- var tdParent = DOM.getCellFromElement(element);
- tdParent.innerHTML = '';
- tdParent.appendChild(tblStorageLocation);
- if (_verbose) {
- console.log("tblStorageLocation: ", tblStorageLocation);
- }
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPlant + ' select', function (event, element) {
- _this4.handleChangeStoragePlantDdl(event, element);
- });
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagStorageLocation + ' select', function (event, element) {
- _this4.handleChangeStorageLocationDdl(event, element);
- });
- }
- }, {
- key: "handleChangeStoragePlantDdl",
- value: function handleChangeStoragePlantDdl(event, ddlPlant) {
- this.handleChangeNestedElementCellTable(event, ddlPlant);
- var row = DOM.getRowFromElement(ddlPlant);
- var ddlStorageLocation = row.querySelector('td.' + flagStorageLocation + ' select');
- ddlStorageLocation.innerHTML = '';
- ddlStorageLocation.appendChild(DOM.createOption(null));
- var idPlant = DOM.getElementValueCurrent(ddlPlant);
- var storageLocations = plants[idPlant][flagStorageLocations];
- var optionJson, option;
- storageLocations.forEach(function (storageLocation) {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(storageLocation);
- option = DOM.createOption(optionJson);
- ddlStorageLocation.appendChild(option);
- });
- this.handleChangeNestedElementCellTable(event, ddlStorageLocation);
- }
- }, {
- key: "handleChangeStorageLocationDdl",
- value: function handleChangeStorageLocationDdl(event, ddlStorageLocation) {
- this.handleChangeNestedElementCellTable(event, ddlStorageLocation);
- }
- }, {
- key: "hookupSealingInputs",
- value: function hookupSealingInputs() {
- this.hookupIsSealedFields();
- this.hookupDateUnsealedInputs();
- }
- }, {
- key: "hookupIsSealedFields",
- value: function hookupIsSealedFields() {
- var _this5 = this;
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagIsSealed + ' input', function (event, element) {
- _this5.handleChangeNestedElementCellTable(event, element);
- var isSealed = DOM.getElementValueCurrent(element);
- var row = DOM.getRowFromElement(element);
- var inputDateUnsealed = row.querySelector('td.' + flagDateUnsealed + ' input');
- if (isSealed) {
- inputDateUnsealed.classList.add(flagCollapsed);
- } else {
- inputDateUnsealed.classList.remove(flagCollapsed);
- }
- });
- }
- }, {
- key: "hookupDateUnsealedInputs",
- value: function hookupDateUnsealedInputs() {
- this.hookupChangeHandlerTableCellsWhenNotCollapsed("change", idTableMain + ' td.' + flagDateUnsealed + ' input');
- }
- }, {
- key: "hookupExpirationDateInputs",
- value: function hookupExpirationDateInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDateExpiration + ' input');
- }
- }, {
- key: "hookupConsumationInputs",
- value: function hookupConsumationInputs() {
- this.hookupIsConsumedFields();
- this.hookupDateConsumedInputs();
- }
- }, {
- key: "hookupIsConsumedFields",
- value: function hookupIsConsumedFields() {
- var _this6 = this;
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagIsConsumed + ' input', function (event, element) {
- _this6.handleChangeNestedElementCellTable(event, element);
- var isConsumed = DOM.getElementValueCurrent(element);
- var row = DOM.getRowFromElement(element);
- var inputDateConsumed = row.querySelector('td.' + flagDateConsumed + ' input');
- if (isConsumed) {
- inputDateConsumed.classList.remove(flagCollapsed);
- } else {
- inputDateConsumed.classList.add(flagCollapsed);
- }
- });
- }
- }, {
- key: "hookupDateConsumedInputs",
- value: function hookupDateConsumedInputs() {
- this.hookupChangeHandlerTableCellsWhenNotCollapsed("change", idTableMain + ' td.' + flagDateConsumed + ' input');
- }
- }, {
- key: "leave",
- value: function leave() {
- stock_items_superPropGet(PageStoreStockItems, "leave", this, 3)([]);
- }
- }]);
-}(TableBasePage);
-stock_items_defineProperty(PageStoreStockItems, "hash", hashPageStoreStockItems);
-stock_items_defineProperty(PageStoreStockItems, "attrIdRowObject", attrIdStockItem);
-
-;// CONCATENATED MODULE: ./static/js/pages/store/suppliers.js
-function suppliers_typeof(o) { "@babel/helpers - typeof"; return suppliers_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, suppliers_typeof(o); }
-function suppliers_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function suppliers_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, suppliers_toPropertyKey(o.key), o); } }
-function suppliers_createClass(e, r, t) { return r && suppliers_defineProperties(e.prototype, r), t && suppliers_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function suppliers_callSuper(t, o, e) { return o = suppliers_getPrototypeOf(o), suppliers_possibleConstructorReturn(t, suppliers_isNativeReflectConstruct() ? Reflect.construct(o, e || [], suppliers_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function suppliers_possibleConstructorReturn(t, e) { if (e && ("object" == suppliers_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return suppliers_assertThisInitialized(t); }
-function suppliers_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function suppliers_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (suppliers_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function suppliers_superPropGet(t, e, o, r) { var p = suppliers_get(suppliers_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function suppliers_get() { return suppliers_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = suppliers_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, suppliers_get.apply(null, arguments); }
-function suppliers_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = suppliers_getPrototypeOf(t));); return t; }
-function suppliers_getPrototypeOf(t) { return suppliers_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, suppliers_getPrototypeOf(t); }
-function suppliers_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && suppliers_setPrototypeOf(t, e); }
-function suppliers_setPrototypeOf(t, e) { return suppliers_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, suppliers_setPrototypeOf(t, e); }
-function suppliers_defineProperty(e, r, t) { return (r = suppliers_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function suppliers_toPropertyKey(t) { var i = suppliers_toPrimitive(t, "string"); return "symbol" == suppliers_typeof(i) ? i : i + ""; }
-function suppliers_toPrimitive(t, r) { if ("object" != suppliers_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != suppliers_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-
-
-
-
-
-
-
-var PageStoreSuppliers = /*#__PURE__*/function (_TableBasePage) {
- function PageStoreSuppliers(router) {
- var _this;
- suppliers_classCallCheck(this, PageStoreSuppliers);
- _this = suppliers_callSuper(this, PageStoreSuppliers, [router]);
- suppliers_defineProperty(_this, "callSaveTableContent", api_API.saveSuppliers);
- _this.storeMixin = new StoreTableMixinPage(_this);
- return _this;
- }
- suppliers_inherits(PageStoreSuppliers, _TableBasePage);
- return suppliers_createClass(PageStoreSuppliers, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }, {
- key: "hookupFilters",
- value: function hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterActive();
- }
- }, {
- key: "loadRowTable",
- value: function loadRowTable(rowJson) {}
- }, {
- key: "getJsonRow",
- value: function getJsonRow(row) {
- if (row == null) return;
- var textareaNameCompany = row.querySelector('td.' + flagNameCompany + ' textarea');
- var textareaNameContact = row.querySelector('td.' + flagNameContact + ' textarea');
- var textareaDepartmentContact = row.querySelector('td.' + flagDepartmentContact + ' textarea');
- var tdAddress = row.querySelector('td.' + flagAddress);
- var textareaPhoneNumber = row.querySelector('td.' + flagPhoneNumber + ' textarea');
- var textareaFax = row.querySelector('td.' + flagFax + ' textarea');
- var textareaEmail = row.querySelector('td.' + flagEmail + ' textarea');
- var textareaWebsite = row.querySelector('td.' + flagWebsite + ' textarea');
- var tdCurrency = row.querySelector('td.' + flagCurrency);
- var buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
- var jsonRow = {};
- jsonRow[attrIdSupplier] = row.getAttribute(attrIdSupplier);
- jsonRow[flagNameCompany] = DOM.getElementAttributeValueCurrent(textareaNameCompany);
- jsonRow[flagNameContact] = DOM.getElementAttributeValueCurrent(textareaNameContact);
- jsonRow[flagDepartmentContact] = DOM.getElementAttributeValueCurrent(textareaDepartmentContact);
- jsonRow[attrIdSupplierAddress] = DOM.getElementAttributeValueCurrent(tdAddress);
- jsonRow[flagSupplierAddress] = this.getSupplierAddressesFromRow(row);
- jsonRow[flagPhoneNumber] = DOM.getElementAttributeValueCurrent(textareaPhoneNumber);
- jsonRow[flagFax] = DOM.getElementAttributeValueCurrent(textareaFax);
- jsonRow[flagEmail] = DOM.getElementAttributeValueCurrent(textareaEmail);
- jsonRow[flagWebsite] = DOM.getElementAttributeValueCurrent(textareaWebsite);
- jsonRow[attrIdCurrency] = DOM.getElementAttributeValueCurrent(tdCurrency);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- }, {
- key: "getSupplierAddressesFromRow",
- value: function getSupplierAddressesFromRow(row) {
- var supplierAddresses = [];
- var trs = row.querySelectorAll('td.' + flagAddress + ' tbody tr');
- var address, inputPostcode, inputAddressLine1, inputAddressLine2, inputCity, inputCounty, ddlRegion, inputActive;
- trs.forEach(function (tr) {
- inputPostcode = tr.querySelector('td.' + flagPostcode + ' textarea');
- inputAddressLine1 = tr.querySelector('td.' + flagAddressLine1 + ' textarea');
- inputAddressLine2 = tr.querySelector('td.' + flagAddressLine2 + ' textarea');
- inputCity = tr.querySelector('td.' + flagCity + ' textarea');
- inputCounty = tr.querySelector('td.' + flagCounty + ' textarea');
- ddlRegion = tr.querySelector('td.' + flagRegion + ' select');
- inputActive = tr.querySelector('td.' + flagActive + ' input');
- address = suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty({}, attrIdSupplierAddress, tr.getAttribute(attrIdSupplierAddress)), attrIdSupplier, row.getAttribute(attrIdSupplier)), flagPostcode, DOM.getElementAttributeValueCurrent(inputPostcode)), flagAddressLine1, DOM.getElementAttributeValueCurrent(inputAddressLine1)), flagAddressLine2, DOM.getElementAttributeValueCurrent(inputAddressLine2)), flagCity, DOM.getElementAttributeValueCurrent(inputCity)), flagCounty, DOM.getElementAttributeValueCurrent(inputCounty)), attrIdRegion, DOM.getElementAttributeValueCurrent(ddlRegion)), flagActive, DOM.getElementAttributeValueCurrent(inputActive));
- supplierAddresses.push(address);
- });
- return supplierAddresses;
- }
- }, {
- key: "initialiseRowNew",
- value: function initialiseRowNew(tbody, row) {
- suppliers_superPropGet(PageStoreSuppliers, "initialiseRowNew", this, 3)([tbody, row]);
- }
- }, {
- key: "hookupTableMain",
- value: function hookupTableMain() {
- suppliers_superPropGet(PageStoreSuppliers, "hookupTableMain", this, 3)([]);
- this.hookupNameCompanyInputs();
- this.hookupNameContactInputs();
- this.hookupDepartmentContactInputs();
- this.hookupAddressFields();
- this.hookupPhoneNumberInputs();
- this.hookupFaxInputs();
- this.hookupEmailInputs();
- this.hookupWebsiteInputs();
- this.hookupCurrencyFields();
- this.hookupFieldsActive();
- }
- }, {
- key: "hookupNameCompanyInputs",
- value: function hookupNameCompanyInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagNameCompany + ' textarea');
- }
- }, {
- key: "hookupNameContactInputs",
- value: function hookupNameContactInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagNameContact + ' textarea');
- }
- }, {
- key: "hookupDepartmentContactInputs",
- value: function hookupDepartmentContactInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDepartmentContact + ' textarea');
- }
- }, {
- key: "hookupAddressFields",
- value: function hookupAddressFields() {
- this.hookupAddressPreviews();
- this.hookupAddressPostcodeInputs();
- this.hookupAddressLine1Inputs();
- this.hookupAddressLine2Inputs();
- this.hookupAddressCityInputs();
- this.hookupAddressCountyInputs();
- this.hookupAddressRegionDdls();
- this.hookupAddressActiveCheckboxes();
- this.hookupAddressDeleteButtons();
- this.hookupAddressUndeleteButtons();
- this.hookupAddressAddButtons();
- }
- }, {
- key: "hookupAddressPreviews",
- value: function hookupAddressPreviews() {
- var _this2 = this;
- this.hookupEventHandler("click", idTableMain + ' td.' + flagAddress, function (event, td) {
- if (!td.classList.contains(flagCollapsed)) return;
- _this2.handleClickAddressPreview(event, td);
- });
- }
- }, {
- key: "handleClickAddressPreview",
- value: function handleClickAddressPreview(event, element) {
- var _this3 = this;
- if (_verbose) {
- console.log("click address preview");
- }
- this.toggleColumnHeaderCollapsed(flagAddress, false);
- element.classList.remove(flagCollapsed);
- var row = DOM.getRowFromElement(element);
- var idSupplier = row.getAttribute(attrIdSupplier);
- var supplierAddressList = idSupplier > 0 ? supplierAddresses[idSupplier] : [];
- var tblAddresses = document.createElement("table");
- tblAddresses.classList.add(flagAddress);
- var thead = document.createElement("thead");
- var tr = document.createElement("tr");
- var thPostcode = document.createElement("th");
- thPostcode.classList.add(flagPostcode);
- thPostcode.textContent = 'Postcode';
- var thAddressLine1 = document.createElement("th");
- thAddressLine1.classList.add(flagAddressLine1);
- thAddressLine1.textContent = 'Address Line 1';
- var thAddressLine2 = document.createElement("th");
- thAddressLine2.classList.add(flagAddressLine2);
- thAddressLine2.textContent = 'Address Line 2';
- var thCity = document.createElement("th");
- thCity.classList.add(flagCity);
- thCity.textContent = 'City';
- var thCounty = document.createElement("th");
- thCounty.classList.add(flagCounty);
- thCounty.textContent = 'County';
- var thRegion = document.createElement("th");
- thRegion.classList.add(flagRegion);
- thRegion.textContent = 'Region';
- var thActive = document.createElement("th");
- thActive.classList.add(flagActive);
- thActive.textContent = 'Active';
- var thAddDelete = document.createElement("th");
- thAddDelete.classList.add(flagAdd);
- var buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- thAddDelete.appendChild(buttonAdd);
- tr.appendChild(thPostcode);
- tr.appendChild(thAddressLine1);
- tr.appendChild(thAddressLine2);
- tr.appendChild(thCity);
- tr.appendChild(thCounty);
- tr.appendChild(thRegion);
- tr.appendChild(thActive);
- tr.appendChild(thAddDelete);
- thead.appendChild(tr);
- tblAddresses.appendChild(thead);
- var tbody = document.createElement("tbody");
- var regionOptions = Utils.getListFromDict(regions);
- supplierAddressList.forEach(function (supplierAddress, index) {
- _this3.addRowSupplierAddress(tbody, supplierAddress, regionOptions);
- });
- tblAddresses.appendChild(tbody);
- var cell = DOM.getCellFromElement(element);
- var cellNew = cell.cloneNode(false);
- cellNew.appendChild(tblAddresses);
- row.replaceChild(cellNew, cell);
- if (_verbose) {
- console.log("tblAddresses: ", tblAddresses);
- }
- this.hookupAddressFields();
- }
- }, {
- key: "addRowSupplierAddress",
- value: function addRowSupplierAddress(tbody, supplierAddress, regionOptions) {
- if (_verbose) {
- console.log("addRowSupplierAddress: ", supplierAddress);
- }
- var tdPostcode = document.createElement("td");
- tdPostcode.classList.add(flagPostcode);
- var textareaPostcode = document.createElement("textarea");
- textareaPostcode.classList.add(flagPostcode);
- DOM.setElementValuesCurrentAndPrevious(textareaPostcode, supplierAddress[flagPostcode]);
- tdPostcode.appendChild(textareaPostcode);
- var tdAddressLine1 = document.createElement("td");
- tdAddressLine1.classList.add(flagAddressLine1);
- var textareaAddressLine1 = document.createElement("textarea");
- textareaAddressLine1.classList.add(flagAddressLine1);
- DOM.setElementValuesCurrentAndPrevious(textareaAddressLine1, supplierAddress[flagAddressLine1]);
- tdAddressLine1.appendChild(textareaAddressLine1);
- var tdAddressLine2 = document.createElement("td");
- tdAddressLine2.classList.add(flagAddressLine2);
- var textareaAddressLine2 = document.createElement("textarea");
- textareaAddressLine2.classList.add(flagAddressLine2);
- DOM.setElementValuesCurrentAndPrevious(textareaAddressLine2, supplierAddress[flagAddressLine2]);
- tdAddressLine2.appendChild(textareaAddressLine2);
- var tdCity = document.createElement("td");
- tdCity.classList.add(flagCity);
- var textareaCity = document.createElement("textarea");
- textareaCity.classList.add(flagCity);
- DOM.setElementValuesCurrentAndPrevious(textareaCity, supplierAddress[flagCity]);
- tdCity.appendChild(textareaCity);
- var tdCounty = document.createElement("td");
- tdCounty.classList.add(flagCounty);
- var textareaCounty = document.createElement("textarea");
- textareaCounty.classList.add(flagCounty);
- DOM.setElementValuesCurrentAndPrevious(textareaCounty, supplierAddress[flagCounty]);
- tdCounty.appendChild(textareaCounty);
- var region = supplierAddress[flagRegion];
- if (!region) region = suppliers_defineProperty({}, attrIdRegion, '');
- var tdRegion = document.createElement("td");
- tdRegion.classList.add(flagRegion);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdRegion, region[attrIdRegion]);
- var ddlRegion = document.createElement("select");
- ddlRegion.classList.add(flagRegion);
- var optionJson, option;
- option = DOM.createOption(null);
- ddlRegion.appendChild(option);
- regionOptions.forEach(function (regionOption) {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(regionOption);
- option = DOM.createOption(optionJson);
- ddlRegion.appendChild(option);
- });
- DOM.setElementValuesCurrentAndPrevious(ddlRegion, region[attrIdRegion]);
- tdRegion.appendChild(ddlRegion);
- var tdActive = this.createTdActive(supplierAddress[flagActive]);
- var tr = document.createElement("tr");
- tr.setAttribute(attrIdSupplierAddress, supplierAddress[attrIdSupplierAddress]);
- tr.setAttribute(attrIdSupplier, supplierAddress[attrIdSupplier]);
- tr.appendChild(tdPostcode);
- tr.appendChild(tdAddressLine1);
- tr.appendChild(tdAddressLine2);
- tr.appendChild(tdCity);
- tr.appendChild(tdCounty);
- tr.appendChild(tdRegion);
- tr.appendChild(tdActive);
- tbody.appendChild(tr);
- }
- }, {
- key: "hookupAddressPostcodeInputs",
- value: function hookupAddressPostcodeInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagPostcode);
- }
- }, {
- key: "hookupAddressLine1Inputs",
- value: function hookupAddressLine1Inputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagAddressLine1);
- }
- }, {
- key: "hookupAddressLine2Inputs",
- value: function hookupAddressLine2Inputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagAddressLine2);
- }
- }, {
- key: "hookupAddressCityInputs",
- value: function hookupAddressCityInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagCity);
- }
- }, {
- key: "hookupAddressCountyInputs",
- value: function hookupAddressCountyInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagCounty);
- }
- }, {
- key: "hookupAddressRegionDdls",
- value: function hookupAddressRegionDdls() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' select.' + flagRegion);
- }
- }, {
- key: "hookupAddressActiveCheckboxes",
- value: function hookupAddressActiveCheckboxes() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' input.' + flagActive, function (event, element) {
- var rowSupplierAddress = element.closest('tr');
- var idAddress = rowSupplierAddress.getAttribute(attrIdSupplierAddress);
- DOM.setElementAttributeValueCurrent(rowSupplierAddress, idAddress);
- var rowSupplier = rowSupplierAddress.closest(idTableMain + ' > tbody > tr');
- var checkboxesActive = rowSupplier.querySelectorAll('td.' + flagAddress + ' input.' + flagActive);
- var isActive = element.checked;
- if (isActive) {
- checkboxesActive.forEach(function (checkbox) {
- if (checkbox == element) return;
- DOM.setElementValueCurrent(checkbox, false);
- });
- }
- /*
- else if (checkboxesActive.length > 0) {
- DOM.setElementValueCurrent(checkboxesActive[0], false);
- }
- */
- });
- }
- }, {
- key: "hookupFieldsAddressAddDelete",
- value: function hookupFieldsAddressAddDelete() {
- var selectorButton = idTableMain + ' td.' + flagAddress + ' button';
- var selectorButtonDelete = selectorButton + '.' + flagDelete;
- var selectorButtonUndelete = selectorButton + '.' + flagAdd;
- this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
- }
- }, {
- key: "hookupAddressDeleteButtons",
- value: function hookupAddressDeleteButtons() {
- var _this4 = this;
- this.hookupEventHandler("click", idTableMain + ' td.' + flagAddress + ' button.' + flagDelete, function (event, element) {
- var row = DOM.getRowFromElement(element);
- row.classList.add(flagDelete);
- var buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- element.replaceWith(buttonAdd);
- _this4.hookupAddressUndeleteButtons();
- });
- }
- }, {
- key: "hookupAddressUndeleteButtons",
- value: function hookupAddressUndeleteButtons() {
- var _this5 = this;
- this.hookupEventHandler("click", idTableMain + ' td.' + flagAddress + ' td button.' + flagAdd, function (event, element) {
- var row = DOM.getRowFromElement(element);
- row.classList.remove(flagDelete);
- var buttonDelete = document.createElement("button");
- buttonDelete.classList.add(flagDelete);
- buttonDelete.textContent = 'x';
- element.replaceWith(buttonDelete);
- _this5.hookupAddressDeleteButtons();
- });
- }
- }, {
- key: "hookupAddressAddButtons",
- value: function hookupAddressAddButtons() {
- var _this6 = this;
- this.hookupEventHandler("click", idTableMain + ' td.' + flagAddress + ' th button.' + flagAdd, function (event, element) {
- var row = element.closest(idTableMain + ' > tbody > tr');
- var idSupplier = row.getAttribute(attrIdSupplier);
- var hasActiveAddress = row.querySelectorAll('td.' + flagAddress + ' input.' + flagActive + ':checked').length > 0;
- var countSupplierAddresses = row.querySelectorAll('td.' + flagAddress + ' td.' + flagAddress).length;
- var supplierAddress = suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty(suppliers_defineProperty({}, attrIdSupplier, idSupplier), attrIdSupplierAddress, -1 - countSupplierAddresses), flagPostcode, ''), flagAddressLine1, ''), flagAddressLine2, ''), flagCity, ''), flagCounty, ''), attrIdRegion, ''), flagActive, !hasActiveAddress);
- var tbody = row.querySelector('td.' + flagAddress + ' table tbody');
- _this6.addRowSupplierAddress(tbody, supplierAddress, Utils.getListFromDict(regions));
- if (!hasActiveAddress) {
- var tdAddress = row.querySelector('td.' + flagAddress);
- // tdAddress.setAttribute(attrIdSupplierAddress, supplierAddress[attrIdSupplierAddress]);
- DOM.setElementAttributeValueCurrent(tdAddress, supplierAddress[attrIdSupplierAddress]);
- }
- _this6.hookupAddressFields();
- });
- }
- }, {
- key: "hookupPhoneNumberInputs",
- value: function hookupPhoneNumberInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPhoneNumber + ' textarea');
- }
- }, {
- key: "hookupFaxInputs",
- value: function hookupFaxInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagFax + ' textarea');
- }
- }, {
- key: "hookupEmailInputs",
- value: function hookupEmailInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagEmail + ' textarea');
- }
- }, {
- key: "hookupWebsiteInputs",
- value: function hookupWebsiteInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagWebsite + ' textarea');
- }
- }, {
- key: "leave",
- value: function leave() {
- suppliers_superPropGet(PageStoreSuppliers, "leave", this, 3)([]);
- }
- }]);
-}(TableBasePage);
-suppliers_defineProperty(PageStoreSuppliers, "hash", hashPageStoreSuppliers);
-suppliers_defineProperty(PageStoreSuppliers, "attrIdRowObject", attrIdSupplier);
-
-;// CONCATENATED MODULE: ./static/js/pages/store/supplier_purchase_orders.js
-function supplier_purchase_orders_typeof(o) { "@babel/helpers - typeof"; return supplier_purchase_orders_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, supplier_purchase_orders_typeof(o); }
-function supplier_purchase_orders_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
-function supplier_purchase_orders_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, supplier_purchase_orders_toPropertyKey(o.key), o); } }
-function supplier_purchase_orders_createClass(e, r, t) { return r && supplier_purchase_orders_defineProperties(e.prototype, r), t && supplier_purchase_orders_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
-function supplier_purchase_orders_callSuper(t, o, e) { return o = supplier_purchase_orders_getPrototypeOf(o), supplier_purchase_orders_possibleConstructorReturn(t, supplier_purchase_orders_isNativeReflectConstruct() ? Reflect.construct(o, e || [], supplier_purchase_orders_getPrototypeOf(t).constructor) : o.apply(t, e)); }
-function supplier_purchase_orders_possibleConstructorReturn(t, e) { if (e && ("object" == supplier_purchase_orders_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return supplier_purchase_orders_assertThisInitialized(t); }
-function supplier_purchase_orders_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
-function supplier_purchase_orders_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (supplier_purchase_orders_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function supplier_purchase_orders_superPropGet(t, e, o, r) { var p = supplier_purchase_orders_get(supplier_purchase_orders_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
-function supplier_purchase_orders_get() { return supplier_purchase_orders_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = supplier_purchase_orders_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, supplier_purchase_orders_get.apply(null, arguments); }
-function supplier_purchase_orders_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = supplier_purchase_orders_getPrototypeOf(t));); return t; }
-function supplier_purchase_orders_getPrototypeOf(t) { return supplier_purchase_orders_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, supplier_purchase_orders_getPrototypeOf(t); }
-function supplier_purchase_orders_inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && supplier_purchase_orders_setPrototypeOf(t, e); }
-function supplier_purchase_orders_setPrototypeOf(t, e) { return supplier_purchase_orders_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, supplier_purchase_orders_setPrototypeOf(t, e); }
-function supplier_purchase_orders_defineProperty(e, r, t) { return (r = supplier_purchase_orders_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
-function supplier_purchase_orders_toPropertyKey(t) { var i = supplier_purchase_orders_toPrimitive(t, "string"); return "symbol" == supplier_purchase_orders_typeof(i) ? i : i + ""; }
-function supplier_purchase_orders_toPrimitive(t, r) { if ("object" != supplier_purchase_orders_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != supplier_purchase_orders_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
-
-
-
-
-
-
-
-
-
-var PageStoreSupplierPurchaseOrders = /*#__PURE__*/function (_TableBasePage) {
- function PageStoreSupplierPurchaseOrders(router) {
- var _this;
- supplier_purchase_orders_classCallCheck(this, PageStoreSupplierPurchaseOrders);
- _this = supplier_purchase_orders_callSuper(this, PageStoreSupplierPurchaseOrders, [router]);
- supplier_purchase_orders_defineProperty(_this, "callSaveTableContent", api_API.saveSupplierPurchaseOrders);
- _this.storeMixin = new StoreTableMixinPage(_this);
- return _this;
- }
- supplier_purchase_orders_inherits(PageStoreSupplierPurchaseOrders, _TableBasePage);
- return supplier_purchase_orders_createClass(PageStoreSupplierPurchaseOrders, [{
- key: "initialize",
- value: function initialize() {
- this.sharedInitialize();
- }
- }, {
- key: "hookupFilters",
- value: function hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterActive();
- }
- }, {
- key: "loadRowTable",
- value: function loadRowTable(rowJson) {}
- }, {
- key: "getJsonRow",
- value: function getJsonRow(row) {
- var _this2 = this;
- if (row == null) return;
- var tdSupplier = row.querySelector('td.' + flagSupplier);
- var tdCurrency = row.querySelector('td.' + flagCurrency);
- var inputCostTotalLocalVatExcl = row.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
- var inputCostTotalLocalVatIncl = row.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
- var trsPurchaseOrderItem = row.querySelectorAll('tr.' + flagOrderItems);
- var buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
- var jsonRow = {};
- jsonRow[attrIdSupplierPurchaseOrder] = row.getAttribute(attrIdSupplierPurchaseOrder);
- jsonRow[attrIdSupplier] = DOM.getElementAttributeValueCurrent(tdSupplier);
- jsonRow[attrIdCurrency] = DOM.getElementAttributeValueCurrent(tdCurrency);
- jsonRow[flagCostTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatExcl);
- jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl);
- // jsonRow[flagOrderItems] = DOM.getElementAttributeValueCurrent(tdItems);
- var orderItems = [];
- if (trsPurchaseOrderItem != null) {
- trsPurchaseOrderItem.forEach(function (tr) {
- orderItems.push(_this2.getJsonRowOrderItem(tr));
- });
- }
- jsonRow[flagOrderItems] = orderItems;
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- }, {
- key: "getJsonRowOrderItem",
- value: function getJsonRowOrderItem(tr) {
- var inputDisplayOrder = tr.querySelector('td.' + flagDisplayOrder + ' input');
- var tdCategory = tr.querySelector('td.' + flagProductCategory);
- var tdProduct = tr.querySelector('td.' + flagProduct);
- var tdVariations = tr.querySelector('td.' + flagProductVariations);
- var tdUnitQuantity = tr.querySelector('td.' + flagUnitMeasurementQuantity);
- var inputQuantityOrdered = tr.querySelector('td.' + flagQuantityOrdered + ' input');
- var inputQuantityReceived = tr.querySelector('td.' + flagQuantityReceived + ' input');
- var inputCostTotalLocalVatExcl = tr.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
- var inputCostTotalLocalVatIncl = tr.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
- var inputLatencyDeliveryDays = tr.querySelector('td.' + flagLatencyDeliveryDays + ' input');
- var buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
- var jsonRow = {};
- jsonRow[attrIdSupplierPurchaseOrder] = tr.getAttribute(attrIdSupplierPurchaseOrder);
- jsonRow[attrIdSupplierPurchaseOrderProductLink] = tr.getAttribute(attrIdSupplierPurchaseOrderProductLink);
- jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
- jsonRow[attrIdProductCategory] = DOM.getElementAttributeValueCurrent(tdCategory);
- jsonRow[attrIdProduct] = DOM.getElementAttributeValueCurrent(tdProduct);
- jsonRow[flagProductVariations] = DOM.getElementAttributeValueCurrent(tdVariations);
- jsonRow[attrIdUnitMeasurementQuantity] = DOM.getElementAttributeValueCurrent(tdUnitQuantity);
- jsonRow[flagQuantityOrdered] = DOM.getElementAttributeValueCurrent(inputQuantityOrdered);
- jsonRow[flagQuantityReceived] = DOM.getElementAttributeValueCurrent(inputQuantityReceived);
- jsonRow[flagCostTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatExcl);
- jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl);
- jsonRow[flagLatencyDeliveryDays] = DOM.getElementAttributeValueCurrent(inputLatencyDeliveryDays);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- }, {
- key: "initialiseRowNew",
- value: function initialiseRowNew(tbody, row) {
- supplier_purchase_orders_superPropGet(PageStoreSupplierPurchaseOrders, "initialiseRowNew", this, 3)([tbody, row]);
- }
- }, {
- key: "hookupTableMain",
- value: function hookupTableMain() {
- supplier_purchase_orders_superPropGet(PageStoreSupplierPurchaseOrders, "hookupTableMain", this, 3)([]);
- this.hookupSupplierFields();
- this.hookupCurrencyFields();
- this.hookupCostInputs();
- this.hookupOrderItemsFields();
- this.hookupFieldsActive();
- }
- }, {
- key: "hookupSupplierFields",
- value: function hookupSupplierFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagSupplier, Utils.getListFromDict(suppliers));
- }
- }, {
- key: "hookupCostInputs",
- value: function hookupCostInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatIncl + ' input');
- }
- }, {
- key: "hookupOrderItemsFields",
- value: function hookupOrderItemsFields() {
- this.hookupOrderItemsPreviews();
- this.hookupFieldsOrderItemDisplayOrder();
- this.hookupFieldsOrderItemProductCategory();
- this.hookupFieldsOrderItemProduct();
- // this.hookupFieldsOrderItemProductVariations();
- this.hookupFieldsProductPermutationVariation();
- this.hookupFieldsOrderItemUnitQuantity();
- this.hookupFieldsOrderItemQuantityOrdered();
- this.hookupFieldsOrderItemQuantityReceived();
- this.hookupFieldsOrderItemCostTotalLocalVatExcl();
- this.hookupFieldsOrderItemCostTotalLocalVatIncl();
- this.hookupFieldsOrderItemLatencyDeliveryDays();
- this.hookupFieldsOrderItemActive();
- this.hookupFieldsOrderItemAddDelete();
- }
- }, {
- key: "hookupOrderItemsPreviews",
- value: function hookupOrderItemsPreviews() {
- var _this3 = this;
- this.hookupEventHandler("click", idTableMain + ' > tbody > tr > td.' + flagOrderItems + ' > div', function (event, div) {
- var td = DOM.getCellFromElement(div);
- if (!td.classList.contains(flagCollapsed)) return;
- _this3.handleClickOrderItemsPreview(event, div);
- });
- }
- }, {
- key: "handleClickOrderItemsPreview",
- value: function handleClickOrderItemsPreview(event, element) {
- var _this4 = this;
- if (_verbose) {
- console.log("click order items preview");
- }
- this.toggleColumnHeaderCollapsed(flagOrderItems, false);
- /*
- let td = DOM.getCellFromElement(element);
- td.classList.remove(flagCollapsed);
- */
-
- var row = DOM.getRowFromElement(element);
- var idSupplierPurchaseOrder = row.getAttribute(attrIdSupplierPurchaseOrder);
- // if (idSupplierPurchaseOrder == null || idSupplierPurchaseOrder < 1) return;
- var supplierPurchaseOrder = supplierPurchaseOrders[idSupplierPurchaseOrder];
- if (supplierPurchaseOrder == null) supplierPurchaseOrder = supplier_purchase_orders_defineProperty({}, flagOrderItems, []);
- var tblOrderItems = document.createElement("table");
- tblOrderItems.classList.add(flagOrderItems);
- var thead = document.createElement("thead");
- var tr = document.createElement("tr");
- var thDisplayOrder = document.createElement("th");
- thDisplayOrder.classList.add(flagDisplayOrder);
- thDisplayOrder.textContent = 'Display Order';
- var thCategory = document.createElement("th");
- thCategory.classList.add(flagProductCategory);
- thCategory.textContent = 'Category';
- var thProduct = document.createElement("th");
- thProduct.classList.add(flagProduct);
- thProduct.textContent = 'Product';
- var thVariations = document.createElement("th");
- thVariations.classList.add(flagProductVariations);
- thVariations.classList.add(flagCollapsed);
- thVariations.textContent = 'Variations';
- var thUnitQuantity = document.createElement("th");
- thUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- thUnitQuantity.textContent = 'Unit Quantity';
- var thQuantityOrdered = document.createElement("th");
- thQuantityOrdered.classList.add(flagQuantityOrdered);
- thQuantityOrdered.textContent = 'Quantity Ordered';
- var thQuantityReceived = document.createElement("th");
- thQuantityReceived.classList.add(flagQuantityReceived);
- thQuantityReceived.textContent = 'Quantity Received';
- var thCostTotalLocalVatExcl = document.createElement("th");
- thCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- thCostTotalLocalVatExcl.textContent = 'Cost Total Local VAT Excl';
- var thCostTotalLocalVatIncl = document.createElement("th");
- thCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- thCostTotalLocalVatIncl.textContent = 'Cost Total Local VAT Incl';
- var thCostUnitLocalVatExcl = document.createElement("th");
- thCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- thCostUnitLocalVatExcl.textContent = 'Cost Unit Local VAT Excl';
- var thCostUnitLocalVatIncl = document.createElement("th");
- thCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- thCostUnitLocalVatIncl.textContent = 'Cost Unit Local VAT Incl';
- var thLatencyDeliveryDays = document.createElement("th");
- thLatencyDeliveryDays.classList.add(flagLatencyDeliveryDays);
- thLatencyDeliveryDays.textContent = 'Latency Delivery (Days)';
- var thActive = document.createElement("th");
- thActive.classList.add(flagActive);
- thActive.textContent = 'Active';
- var thAddDelete = document.createElement("th");
- thAddDelete.classList.add(flagAdd);
- var buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- thAddDelete.appendChild(buttonAdd);
- tr.appendChild(thDisplayOrder);
- tr.appendChild(thCategory);
- tr.appendChild(thProduct);
- tr.appendChild(thVariations);
- tr.appendChild(thUnitQuantity);
- tr.appendChild(thQuantityOrdered);
- tr.appendChild(thQuantityReceived);
- tr.appendChild(thCostTotalLocalVatExcl);
- tr.appendChild(thCostTotalLocalVatIncl);
- tr.appendChild(thCostUnitLocalVatExcl);
- tr.appendChild(thCostUnitLocalVatIncl);
- tr.appendChild(thLatencyDeliveryDays);
- tr.appendChild(thActive);
- tr.appendChild(thAddDelete);
- thead.appendChild(tr);
- tblOrderItems.appendChild(thead);
- var tbody = document.createElement("tbody");
- supplierPurchaseOrder[flagOrderItems].forEach(function (orderItem, index) {
- _this4.addRowSupplierPurchaseOrderItem(tbody, orderItem);
- });
- tblOrderItems.appendChild(tbody);
- var cell = DOM.getCellFromElement(element);
- var cellNew = cell.cloneNode(false);
- cellNew.appendChild(tblOrderItems);
- cellNew.classList.remove(flagCollapsed);
- row.replaceChild(cellNew, cell);
- if (_verbose) {
- console.log("tblOrderItems: ", tblOrderItems);
- }
- this.hookupOrderItemsFields();
- }
- }, {
- key: "addRowSupplierPurchaseOrderItem",
- value: function addRowSupplierPurchaseOrderItem(tbody, orderItem) {
- // productVariationTypeOptions, productVariationOptions, productCategoryOptions, productOptions, unitMeasurementOptions,
- if (_verbose) {
- console.log("addRowSupplierPurchaseOrderItem: ", orderItem);
- }
- var tdDisplayOrder = document.createElement("td");
- tdDisplayOrder.classList.add(flagDisplayOrder);
- var inputDisplayOrder = document.createElement("input");
- inputDisplayOrder.classList.add(flagDisplayOrder);
- inputDisplayOrder.type = 'number';
- inputDisplayOrder.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputDisplayOrder, orderItem[flagDisplayOrder]);
- tdDisplayOrder.appendChild(inputDisplayOrder);
- var tdCategory = document.createElement("td");
- tdCategory.classList.add(flagProductCategory);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdCategory, orderItem[attrIdProductCategory]);
- var divCategory = document.createElement("div");
- divCategory.classList.add(flagProductCategory);
- DOM.setElementAttributesValuesCurrentAndPrevious(divCategory, orderItem[attrIdProductCategory]);
- // divCategory.textContent = orderItem[flagProductCategory];
- var productCategory = productCategories[orderItem[attrIdProductCategory]];
- divCategory.textContent = BusinessObjects.getObjectText(productCategory);
- tdCategory.appendChild(divCategory);
- var tdProduct = document.createElement("td");
- tdProduct.classList.add(flagProduct);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdProduct, orderItem[attrIdProduct]);
- var divProduct = document.createElement("div");
- divProduct.classList.add(flagProduct);
- DOM.setElementAttributesValuesCurrentAndPrevious(divProduct, orderItem[attrIdProduct]);
- // divProduct.textContent = orderItem[flagProduct];
- var product = products[orderItem[attrIdProduct]];
- divProduct.textContent = BusinessObjects.getObjectText(product);
- tdProduct.appendChild(divProduct);
- var tdVariations = document.createElement("td");
- tdVariations.classList.add(flagProductVariations);
- tdVariations.classList.add(flagCollapsed);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdVariations, orderItem[flagProductVariations]);
- var divVariations = document.createElement("div");
- divVariations.classList.add(flagProductVariations);
- DOM.setElementAttributesValuesCurrentAndPrevious(divVariations, orderItem[flagProductVariations]);
- // divVariations.textContent = orderItem[flagProductVariations];
- var variationsText = ProductPermutation.getProductVariationsPreviewFromIdCsv(orderItem[flagProductVariations]);
- divVariations.textContent = variationsText;
- tdVariations.appendChild(divVariations);
- var tdUnitQuantity = document.createElement("td");
- tdUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdUnitQuantity, orderItem[attrIdUnitMeasurementQuantity]);
- var divUnitQuantity = document.createElement("div");
- divUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- DOM.setElementAttributesValuesCurrentAndPrevious(divUnitQuantity, orderItem[attrIdUnitMeasurementQuantity]);
- var unitQuantity = unitMeasurements[orderItem[attrIdUnitMeasurementQuantity]];
- divUnitQuantity.textContent = BusinessObjects.getObjectText(unitQuantity);
- tdUnitQuantity.appendChild(divUnitQuantity);
- var tdQuantityOrdered = document.createElement("td");
- tdQuantityOrdered.classList.add(flagQuantityOrdered);
- var inputQuantityOrdered = document.createElement("input");
- inputQuantityOrdered.classList.add(flagQuantityOrdered);
- inputQuantityOrdered.type = 'number';
- DOM.setElementValuesCurrentAndPrevious(inputQuantityOrdered, orderItem[flagQuantityOrdered]);
- tdQuantityOrdered.appendChild(inputQuantityOrdered);
- var tdQuantityReceived = document.createElement("td");
- tdQuantityReceived.classList.add(flagQuantityReceived);
- var inputQuantityReceived = document.createElement("input");
- inputQuantityReceived.classList.add(flagQuantityReceived);
- inputQuantityReceived.type = 'number';
- DOM.setElementValuesCurrentAndPrevious(inputQuantityReceived, orderItem[flagQuantityReceived]);
- tdQuantityReceived.appendChild(inputQuantityReceived);
- var tdCostTotalLocalVatExcl = document.createElement("td");
- tdCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- var inputCostTotalLocalVatExcl = document.createElement("input");
- inputCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- inputCostTotalLocalVatExcl.type = 'number';
- inputCostTotalLocalVatExcl.step = 0.01;
- DOM.setElementValuesCurrentAndPrevious(inputCostTotalLocalVatExcl, orderItem[flagCostTotalLocalVatExcl]);
- tdCostTotalLocalVatExcl.appendChild(inputCostTotalLocalVatExcl);
- var tdCostTotalLocalVatIncl = document.createElement("td");
- tdCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- var inputCostTotalLocalVatIncl = document.createElement("input");
- inputCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- inputCostTotalLocalVatIncl.type = 'number';
- inputCostTotalLocalVatIncl.step = 0.01;
- DOM.setElementValuesCurrentAndPrevious(inputCostTotalLocalVatIncl, orderItem[flagCostTotalLocalVatIncl]);
- tdCostTotalLocalVatIncl.appendChild(inputCostTotalLocalVatIncl);
- var tdCostUnitLocalVatExcl = document.createElement("td");
- tdCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- var divCostUnitLocalVatExcl = document.createElement("div");
- divCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, validation_Validation.toFixedOrDefault(orderItem[flagCostUnitLocalVatExcl], 3, null));
- tdCostUnitLocalVatExcl.appendChild(divCostUnitLocalVatExcl);
- var tdCostUnitLocalVatIncl = document.createElement("td");
- tdCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- var divCostUnitLocalVatIncl = document.createElement("div");
- divCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, validation_Validation.toFixedOrDefault(orderItem[flagCostUnitLocalVatIncl], 3, null));
- tdCostUnitLocalVatIncl.appendChild(divCostUnitLocalVatIncl);
- var tdLatencyDeliveryDays = document.createElement("td");
- tdLatencyDeliveryDays.classList.add(flagLatencyDeliveryDays);
- var inputLatencyDeliveryDays = document.createElement("input");
- inputLatencyDeliveryDays.classList.add(flagLatencyDeliveryDays);
- inputLatencyDeliveryDays.type = 'number';
- inputLatencyDeliveryDays.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputLatencyDeliveryDays, orderItem[flagLatencyDeliveryDays]);
- tdLatencyDeliveryDays.appendChild(inputLatencyDeliveryDays);
- var tdActive = this.createTdActive(orderItem[flagActive]);
- var tr = document.createElement("tr");
- tr.classList.add(flagOrderItems);
- tr.setAttribute(attrIdSupplierPurchaseOrder, orderItem[attrIdSupplierPurchaseOrder]);
- tr.setAttribute(attrIdSupplierPurchaseOrderProductLink, orderItem[attrIdSupplierPurchaseOrderProductLink]);
- tr.appendChild(tdDisplayOrder);
- tr.appendChild(tdCategory);
- tr.appendChild(tdProduct);
- tr.appendChild(tdVariations);
- tr.appendChild(tdUnitQuantity);
- tr.appendChild(tdQuantityOrdered);
- tr.appendChild(tdQuantityReceived);
- tr.appendChild(tdCostTotalLocalVatExcl);
- tr.appendChild(tdCostTotalLocalVatIncl);
- tr.appendChild(tdCostUnitLocalVatExcl);
- tr.appendChild(tdCostUnitLocalVatIncl);
- tr.appendChild(tdLatencyDeliveryDays);
- tr.appendChild(tdActive);
- tbody.appendChild(tr);
- }
- }, {
- key: "hookupFieldsOrderItemDisplayOrder",
- value: function hookupFieldsOrderItemDisplayOrder() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagDisplayOrder + ' input');
- }
- }, {
- key: "hookupFieldsOrderItemProductCategory",
- value: function hookupFieldsOrderItemProductCategory() {
- var _this5 = this;
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductCategory, Utils.getListFromDict(productCategories), function (cellSelector) {
- _this5.hookupProductCategoryDdls(cellSelector);
- });
- }
- }, {
- key: "hookupFieldsOrderItemProduct",
- value: function hookupFieldsOrderItemProduct() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagProduct, Utils.getListFromDict(products));
- }
- /*
- hookupFieldsOrderItemProductVariations() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductVariations, (event, element) => this.handleClickProductPermutationVariationsPreview(event, element));
- }
- hookupDdlsProductPermutationVariation() {
- this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation);
- }
- hookupDdlsProductPermutationVariationType() {
- this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariationType);
- }
- */
- }, {
- key: "hookupFieldsOrderItemUnitQuantity",
- value: function hookupFieldsOrderItemUnitQuantity() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagUnitMeasurementQuantity, Utils.getListFromDict(unitMeasurements));
- }
- }, {
- key: "hookupFieldsOrderItemQuantityOrdered",
- value: function hookupFieldsOrderItemQuantityOrdered() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityOrdered + ' input');
- }
- }, {
- key: "hookupFieldsOrderItemQuantityReceived",
- value: function hookupFieldsOrderItemQuantityReceived() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityReceived + ' input');
- }
- }, {
- key: "hookupFieldsOrderItemCostTotalLocalVatExcl",
- value: function hookupFieldsOrderItemCostTotalLocalVatExcl() {
- var _this6 = this;
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatExcl + ' input', function (event, element) {
- _this6.handleChangeNestedElementCellTable(event, element); // flagCostTotalLocalVatExcl);
- _this6.updateFieldsCostUnitLocalVatExcl(element);
- });
- }
- }, {
- key: "hookupFieldsOrderItemCostTotalLocalVatIncl",
- value: function hookupFieldsOrderItemCostTotalLocalVatIncl() {
- var _this7 = this;
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatIncl + ' input', function (event, element) {
- _this7.handleChangeNestedElementCellTable(event, element); // flagCostTotalLocalVatIncl);
- _this7.updateFieldsCostUnitLocalVatIncl(element);
- });
- }
- }, {
- key: "updateFieldsCostUnitLocalVatExcl",
- value: function updateFieldsCostUnitLocalVatExcl(elementChanged) {
- var row = elementChanged.closest('tr.' + flagOrderItems);
- var inputCostTotalLocalVatExcl = row.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
- var costTotalLocalVatExcl = DOM.getElementValueCurrent(inputCostTotalLocalVatExcl);
- var inputQuantityOrdered = row.querySelector('td.' + flagQuantityOrdered + ' input');
- var quantityOrdered = DOM.getElementValueCurrent(inputQuantityOrdered);
- var divCostUnitLocalVatExcl = row.querySelector('td.' + flagCostUnitLocalVatExcl + ' div');
- var costUnitLocalVatExcl = quantityOrdered == 0 ? 0 : costTotalLocalVatExcl / quantityOrdered;
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, costUnitLocalVatExcl.toFixed(3));
- var rowSupplierPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
- var divCostGrandTotalLocalVatExcl = rowSupplierPurchaseOrder.querySelector('td.' + flagCostTotalLocalVatExcl + ' div');
- var inputsCostTotalLocalVatExcl = rowSupplierPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatExcl + ' input');
- var costGrandTotalLocalVatExcl = Array.from(inputsCostTotalLocalVatExcl).reduce(function (acc, input) {
- return acc + Number(DOM.getElementValueCurrent(input));
- }, 0);
- DOM.setElementValueCurrent(divCostGrandTotalLocalVatExcl, costGrandTotalLocalVatExcl);
- }
- }, {
- key: "updateFieldsCostUnitLocalVatIncl",
- value: function updateFieldsCostUnitLocalVatIncl(elementChanged) {
- var row = elementChanged.closest('tr.' + flagOrderItems);
- var inputCostTotalLocalVatIncl = row.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
- var costTotalLocalVatIncl = DOM.getElementValueCurrent(inputCostTotalLocalVatIncl);
- var inputQuantityOrdered = row.querySelector('td.' + flagQuantityOrdered + ' input');
- var quantityOrdered = DOM.getElementValueCurrent(inputQuantityOrdered);
- var divCostUnitLocalVatIncl = row.querySelector('td.' + flagCostUnitLocalVatIncl + ' div');
- var costUnitLocalVatIncl = quantityOrdered == 0 ? 0 : costTotalLocalVatIncl / quantityOrdered;
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, costUnitLocalVatIncl.toFixed(3));
- var rowSupplierPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
- var divCostGrandTotalLocalVatIncl = rowSupplierPurchaseOrder.querySelector('td.' + flagCostTotalLocalVatIncl + ' div');
- var inputsCostTotalLocalVatIncl = rowSupplierPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatIncl + ' input');
- var costGrandTotalLocalVatIncl = Array.from(inputsCostTotalLocalVatIncl).reduce(function (acc, input) {
- return acc + Number(DOM.getElementValueCurrent(input));
- }, 0);
- DOM.setElementValueCurrent(divCostGrandTotalLocalVatIncl, costGrandTotalLocalVatIncl);
- }
- }, {
- key: "hookupFieldsOrderItemLatencyDeliveryDays",
- value: function hookupFieldsOrderItemLatencyDeliveryDays() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagLatencyDeliveryDays + ' input');
- }
- }, {
- key: "hookupFieldsOrderItemActive",
- value: function hookupFieldsOrderItemActive() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' input.' + flagActive);
- }
- }, {
- key: "hookupFieldsOrderItemAddDelete",
- value: function hookupFieldsOrderItemAddDelete() {
- var selectorButton = idTableMain + ' td.' + flagOrderItems + ' td.' + flagOrderItems + ' button';
- var selectorButtonDelete = selectorButton + '.' + flagDelete;
- var selectorButtonUndelete = selectorButton + '.' + flagAdd;
- this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsOrderItemAdd();
- }
- }, {
- key: "hookupButtonsOrderItemAdd",
- value: function hookupButtonsOrderItemAdd() {
- var _this8 = this;
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' th button.' + flagAdd, function (event, element) {
- var _supplierOrderItem;
- var row = element.closest(idTableMain + ' > tbody > tr');
- var idSupplierPurchaseOrder = row.getAttribute(attrIdSupplierPurchaseOrder);
- // let hasActiveOrderItem = row.querySelectorAll('td.' + flagOrderItems + ' input.' + flagActive + ':checked').length > 0;
- var countSupplierOrderItems = row.querySelectorAll('td.' + flagOrderItems + ' td.' + flagSupplierPurchaseOrder).length;
- var supplierOrderItem = (_supplierOrderItem = {}, supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(_supplierOrderItem, attrIdSupplierPurchaseOrder, idSupplierPurchaseOrder), attrIdSupplierPurchaseOrderProductLink, -1 - countSupplierOrderItems), attrIdProductCategory, 0), attrIdProduct, 0), flagProductVariations, ''), attrIdUnitMeasurementQuantity, 0), flagQuantityOrdered, ''), flagQuantityReceived, ''), flagCostTotalLocalVatExcl, ''), flagCostTotalLocalVatIncl, ''), supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(supplier_purchase_orders_defineProperty(_supplierOrderItem, flagCostUnitLocalVatExcl, ''), flagCostUnitLocalVatIncl, ''), flagLatencyDeliveryDays, ''), flagDisplayOrder, countSupplierOrderItems + 1), flagActive, true));
- var tbody = row.querySelector('td.' + flagOrderItems + ' table tbody');
- _this8.addRowSupplierPurchaseOrderItem(tbody, supplierOrderItem);
- /*
- if (!hasActiveOrderItem) {
- let tdOrderItem = row.querySelector('td.' + flagOrderItems);
- // tdOrderItem.setAttribute(attrIdSupplierOrderItem, supplierOrderItem[attrIdSupplierOrderItem]);
- DOM.setElementAttributeValueCurrent(tdOrderItem, supplierOrderItem[attrIdSupplierPurchaseOrderProductLink]);
- }
- */
- _this8.hookupOrderItemsFields();
- });
- }
- }, {
- key: "leave",
- value: function leave() {
- supplier_purchase_orders_superPropGet(PageStoreSupplierPurchaseOrders, "leave", this, 3)([]);
- }
- }]);
-}(TableBasePage);
-supplier_purchase_orders_defineProperty(PageStoreSupplierPurchaseOrders, "hash", hashPageStoreSupplierPurchaseOrders);
-supplier_purchase_orders_defineProperty(PageStoreSupplierPurchaseOrders, "attrIdRowObject", attrIdSupplierPurchaseOrder);
-
-;// CONCATENATED MODULE: ./static/js/pages/legal/privacy_policy.js
+;// ./static/js/pages/legal/privacy_policy.js
function privacy_policy_typeof(o) { "@babel/helpers - typeof"; return privacy_policy_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, privacy_policy_typeof(o); }
function privacy_policy_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function privacy_policy_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, privacy_policy_toPropertyKey(o.key), o); } }
@@ -6823,7 +1956,7 @@ function privacy_policy_callSuper(t, o, e) { return o = privacy_policy_getProtot
function privacy_policy_possibleConstructorReturn(t, e) { if (e && ("object" == privacy_policy_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return privacy_policy_assertThisInitialized(t); }
function privacy_policy_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
function privacy_policy_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (privacy_policy_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function privacy_policy_superPropGet(t, e, o, r) { var p = privacy_policy_get(privacy_policy_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
+function privacy_policy_superPropGet(t, o, e, r) { var p = privacy_policy_get(privacy_policy_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
function privacy_policy_get() { return privacy_policy_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = privacy_policy_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, privacy_policy_get.apply(null, arguments); }
function privacy_policy_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = privacy_policy_getPrototypeOf(t));); return t; }
function privacy_policy_getPrototypeOf(t) { return privacy_policy_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, privacy_policy_getPrototypeOf(t); }
@@ -6853,7 +1986,7 @@ var PagePrivacyPolicy = /*#__PURE__*/function (_BasePage) {
}(BasePage);
privacy_policy_defineProperty(PagePrivacyPolicy, "hash", hashPagePrivacyPolicy);
-;// CONCATENATED MODULE: ./static/js/pages/legal/retention_schedule.js
+;// ./static/js/pages/legal/retention_schedule.js
function retention_schedule_typeof(o) { "@babel/helpers - typeof"; return retention_schedule_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, retention_schedule_typeof(o); }
function retention_schedule_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function retention_schedule_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, retention_schedule_toPropertyKey(o.key), o); } }
@@ -6862,7 +1995,7 @@ function retention_schedule_callSuper(t, o, e) { return o = retention_schedule_g
function retention_schedule_possibleConstructorReturn(t, e) { if (e && ("object" == retention_schedule_typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return retention_schedule_assertThisInitialized(t); }
function retention_schedule_assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
function retention_schedule_isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (retention_schedule_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
-function retention_schedule_superPropGet(t, e, o, r) { var p = retention_schedule_get(retention_schedule_getPrototypeOf(1 & r ? t.prototype : t), e, o); return 2 & r && "function" == typeof p ? function (t) { return p.apply(o, t); } : p; }
+function retention_schedule_superPropGet(t, o, e, r) { var p = retention_schedule_get(retention_schedule_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
function retention_schedule_get() { return retention_schedule_get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = retention_schedule_superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, retention_schedule_get.apply(null, arguments); }
function retention_schedule_superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = retention_schedule_getPrototypeOf(t));); return t; }
function retention_schedule_getPrototypeOf(t) { return retention_schedule_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, retention_schedule_getPrototypeOf(t); }
@@ -6892,7 +2025,7 @@ var PageRetentionSchedule = /*#__PURE__*/function (_BasePage) {
}(BasePage);
retention_schedule_defineProperty(PageRetentionSchedule, "hash", hashPageDataRetentionSchedule);
-;// CONCATENATED MODULE: ./static/js/router.js
+;// ./static/js/router.js
function router_typeof(o) { "@babel/helpers - typeof"; return router_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, router_typeof(o); }
function router_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function router_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, router_toPropertyKey(o.key), o); } }
@@ -6903,40 +2036,15 @@ function router_toPrimitive(t, r) { if ("object" != router_typeof(t) || !t) retu
// Core
-
-
// Legal
-// Store
-
-
-
-
-
-// import PageStoreProductPrices from './pages/store/product_prices.js';
-
-
-
-
-
// User
// import PageUserLogin from './pages/user/login.js';
// import PageUserLogout from './pages/user/logout.js';
// import PageUserAccount from './pages/user/account.js';
-/*
-import "./lib/common.js";
-import "./lib/constants.js";
-import "./lib/events.js";
-import "./lib/extras.js";
-// import "./DEPRECATED/init.js";
-import "./lib/local_storage.js";
-import "./lib/utils.js";
-import "./lib/validation.js";
-*/
-
@@ -6955,10 +2063,6 @@ const pageModules = {
// Legal
[hashPageAccessibilityStatement]: () => import('./pages/legal/accessibility_statement.js'),
[hashPageLicense]: () => import('./pages/legal/license.js'),
- // Store
- [hashPageStoreProductCategories]: () => import('./pages/store/product_categories.js'),
- [hashPageStoreProductPermutations]: () => import('./pages/store/product_permutations.js'),
- // [hashPageStoreProducts]: () => import('./pages/store/products.js'),
// User
// Add other pages here...
};
@@ -6972,20 +2076,12 @@ var Router = /*#__PURE__*/function () {
// Core
this.pages[hashPageHome] = {
name: 'PageHome',
- module: PageAdminHome
+ module: PageHome
}; // importModule: () => import(/* webpackChunkName: "page_core_home" */ './pages/core/home.js') , pathModule: './pages/core/home.js'
this.pages[hashPageContact] = {
name: 'PageContact',
module: PageContact
}; // pathModule: './pages/core/contact.js' };
- this.pages[hashPageServices] = {
- name: 'PageServices',
- module: PageServices
- }; // pathModule: './pages/core/services.js' };
- this.pages[hashPageAdminHome] = {
- name: 'PageAdminHome',
- module: PageAdminHome
- }; // pathModule: './pages/core/admin_home.js' };
// Legal
this.pages[hashPageAccessibilityStatement] = {
name: 'PageAccessibilityStatement',
@@ -7003,40 +2099,6 @@ var Router = /*#__PURE__*/function () {
name: 'PagePrivacyPolicy',
module: PagePrivacyPolicy
}; // pathModule: './pages/legal/privacy_policy.js' }; // importModule: () => {return import(/* webpackChunkName: "page_privacy_policy" */ './pages/legal/privacy_policy.js'); }
- // Store
- this.pages[hashPageStoreManufacturingPurchaseOrders] = {
- name: 'PageManufacturingPurchaseOrders',
- module: PageStoreManufacturingPurchaseOrders
- }; // pathModule
- this.pages[hashPageStoreProductCategories] = {
- name: 'PageStoreProductCategories',
- module: PageStoreProductCategories
- }; // pathModule: './pages/store/product_categories.js' };
- this.pages[hashPageStoreProductPermutations] = {
- name: 'PageStoreProductPermutations',
- module: PageStoreProductPermutations
- }; // pathModule: './pages/store/product_permutations.js' };
- // this.pages[hashPageStoreProductPrices] = { name: 'PageStoreProductPrices', module: PageStoreProductPrices }; // pathModule: './pages/store/product_prices.js' };
- this.pages[hashPageStoreProducts] = {
- name: 'PageStoreProducts',
- module: PageStoreProducts
- }; // pathModule: './pages/store/products.js' };
- this.pages[hashPageStoreProductVariations] = {
- name: 'PageStoreProductVariations',
- module: PageStoreProductVariations
- }; // pathModule: './pages/store/product_variations.js' };
- this.pages[hashPageStoreStockItems] = {
- name: 'PageStoreStockItems',
- module: PageStoreStockItems
- };
- this.pages[hashPageStoreSuppliers] = {
- name: 'PageStoreSuppliers',
- module: PageStoreSuppliers
- };
- this.pages[hashPageStoreSupplierPurchaseOrders] = {
- name: 'PageSupplierPurchaseOrders',
- module: PageStoreSupplierPurchaseOrders
- };
// User
// this.pages[hashPageUserLogin] = { name: 'PageUserLogin', module: PageUserLogin }; // pathModule: './pages/user/login.js' };
// this.pages[hashPageUserLogout] = { name: 'PageUserLogout', module: PageUserLogout }; // pathModule: './pages/user/logout.js' };
@@ -7053,14 +2115,6 @@ var Router = /*#__PURE__*/function () {
var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
return _this.navigateToHash(hashPageContact, isPopState);
};
- this.routes[hashPageServices] = function () {
- var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- return _this.navigateToHash(hashPageServices, isPopState);
- };
- this.routes[hashPageAdminHome] = function () {
- var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- return _this.navigateToHash(hashPageAdminHome, isPopState);
- };
// Legal
this.routes[hashPageAccessibilityStatement] = function () {
var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
@@ -7078,40 +2132,6 @@ var Router = /*#__PURE__*/function () {
var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
return _this.navigateToHash(hashPagePrivacyPolicy, isPopState);
};
- // Store
- this.routes[hashPageStoreManufacturingPurchaseOrders] = function () {
- var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- return _this.navigateToHash(hashPageStoreManufacturingPurchaseOrders, isPopState);
- };
- this.routes[hashPageStoreProductCategories] = function () {
- var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- return _this.navigateToHash(hashPageStoreProductCategories, isPopState);
- };
- this.routes[hashPageStoreProductPermutations] = function () {
- var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- return _this.navigateToHash(hashPageStoreProductPermutations, isPopState);
- };
- // this.routes[hashPageStoreProductPrices] = (isPopState = false) => this.navigateToHash(hashPageStoreProductPrices, isPopState);
- this.routes[hashPageStoreProducts] = function () {
- var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- return _this.navigateToHash(hashPageStoreProducts, isPopState);
- };
- this.routes[hashPageStoreProductVariations] = function () {
- var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- return _this.navigateToHash(hashPageStoreProductVariations, isPopState);
- };
- this.routes[hashPageStoreStockItems] = function () {
- var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- return _this.navigateToHash(hashPageStoreStockItems, isPopState);
- };
- this.routes[hashPageStoreSuppliers] = function () {
- var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- return _this.navigateToHash(hashPageStoreSuppliers, isPopState);
- };
- this.routes[hashPageStoreSupplierPurchaseOrders] = function () {
- var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
- return _this.navigateToHash(hashPageStoreSupplierPurchaseOrders, isPopState);
- };
// User
// this.routes[hashPageUserLogin] = (isPopState = false) => this.navigateToHash(hashPageUserLogin, isPopState);
// this.routes[hashPageUserLogout] = (isPopState = false) => this.navigateToHash(hashPageUserLogout, isPopState);
@@ -7190,13 +2210,13 @@ var Router = /*#__PURE__*/function () {
console.error(`Hash ${hash} not found`);
}
*/
- var url = api_API.getUrlFromHash(hash, params);
+ var url = API.getUrlFromHash(hash, params);
// if (!isPopState)
history.pushState({
data: data,
params: params
}, '', hash);
- api_API.goToUrl(url, data);
+ API.goToUrl(url, data);
}
/* beforeunload listener
async beforeLeave() {
@@ -7212,129 +2232,9 @@ var Router = /*#__PURE__*/function () {
var appendHistory = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
// this.beforeLeave();
if (appendHistory) history.pushState(data, '', url);
- url = api_API.parameteriseUrl(url, data);
- api_API.goToUrl(url);
+ url = API.parameteriseUrl(url, data);
+ API.goToUrl(url);
}
-
- /*
- static getPages() {
- let pages = {};
- pages[hashPageAccessibilityStatement] = PageAccessibilityStatement;
- pages[hashPageAdminHome] = PageAdminHome;
- pages[hashPageHome] = PageHome;
- pages[hashPageContact] = PageContact;
- pages[hashPageLicense] = PageLicense;
- pages[hashPageServices] = PageServices;
- pages[hashPageStoreBasket] = PageStoreBasket;
- pages[hashPageStoreHome] = PageStoreHome;
- pages[hashPageStoreProductCategories] = PageStoreProductCategories;
- pages[hashPageStoreProductPermutations] = PageStoreProductPermutations;
- // pages[hashPageStoreProductPrices] = PageStoreProductPrices;
- // pages[hashPageStoreProducts] = PageStoreProducts;
- // pages[hashPageStoreProductVariations] = PageStoreProductVariations;
- pages[hashPageStoreStockItems] = PageStoreStockItems;
- console.log("pages: ", pages);
- return pages;
- }
- addRoute(path, handler) {
- this.routes[path] = handler;
- }
- handlePopState(event) {
- /*
- let url = window.location.pathname;
- url = url.split('?')[0];
- let hash = url.replace(_pathHost, '');
- console.log("handlePopState: " + hash);
- this.handleRouteHash(hash);
- *
- let pageCurrent = Router.getPageCurrent();
- pageCurrent.initialize(true);
- }
- navigateToHash(hash, data = null) {
- const url = API.getUrlFromHash(hash);
- this.navigateToUrl(url, data);
- }
- leavePageCurrent() {
- const pageCurrent = Router.getPageCurrent();
- if (pageCurrent) pageCurrent.leave();
- }
-
- static getPageCurrent() {
- if (_pageCurrent) return _pageCurrent;
- const hashPageCurrent = DOM.getHashPageCurrent();
- console.log("hashPageCurrent: " + hashPageCurrent);
- const pages = Router.getPages();
- let page;
- for (const key of Object.keys(pages)) {
- page = pages[key];
- console.log("page hashL ", page.hash);
- if (page.hash == hashPageCurrent) return new page();
- }
- throw new Error('Page not found: ' + hashPageCurrent);
- }
- static parameteriseUrl(url, parameters) {
- if (!Validation.isEmpty(parameters)) {
- url += '%3F'; // '?';
- let firstParameter = true;
- for (var p in parameters) {
- if (!firstParameter) {
- url += '&';
- } else {
- firstParameter = false;
- }
- url += parameters[p];
- }
- }
- return url;
- }
- */
-
- /*
- handleRouteUrl(url) {
- const path = url.split('?')[0]; // Remove query parameters
- if (this.routes[path]) {
- this.routes[path]();
- } else if (url.includes('auth0.com')) {
- Router.goToUrl(url);
- } else {
- console.warn('No handler found for path:', path);
- // Optionally, handle 404 or redirect to a default route
- }
- }
- handleRouteHash(hash) {
- if (this.routes[hash]) {
- this.routes[hash]();
- } else {
- console.warn('No handler found for hash:', hash);
- }
- }
- */
-
- /*
- static htmlEncode(value) {
- return document.createElement('').text(value).innerHTML;
- }
-
- static htmlDecode(value) {
- if (_domParser == null) _domParser = DOMParser(); // https://www.w3docs.com/snippets/javascript/how-to-html-encode-a-string.html
- return _domParser.parseFromString(value, 'text/html').documentElement.textContent;
- }
- */
-
- // Additional utility methods
- /*
- static getQueryParams() {
- return Object.fromEntries(new URLSearchParams(window.location.search));
- }
- static updateQueryParams(params) {
- const searchParams = new URLSearchParams(window.location.search);
- for (const [key, value] of Object.entries(params)) {
- searchParams.set(key, value);
- }
- const newUrl = `${window.location.pathname}?${searchParams.toString()}`;
- history.replaceState(null, '', newUrl);
- }
- */
}], [{
key: "loadPageBodyFromResponse",
value: function loadPageBodyFromResponse(response) {
@@ -7369,29 +2269,7 @@ export function setupNavigationEvents() {
});
}
*/
-;// CONCATENATED MODULE: ./static/js/app.js
-/*
-// Bundle css imports
-import '../css/lib/reset.css';
-import '../css/lib/typography.css';
-import '../css/lib/variables.css';
-import '../css/lib/utils.css';
-
-import '../css/layouts/header.css';
-import '../css/layouts/footer.css';
-import '../css/layouts/table-main.css'
-
-import '../css/components/button.css';
-import '../css/components/card.css';
-import '../css/components/dialog.css';
-import '../css/components/form.css';
-import '../css/components/modal.css';
-import '../css/components/navigation.css';
-import '../css/components/overlay.css';
-
-import '../css/sections/store.css';
-*/
-
+;// ./static/js/app.js
// Main entry point for the application
@@ -7468,116 +2346,65 @@ window.app = app;
/* harmony default export */ const js_app = ((/* unused pure expression or super */ null && (app)));
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
+"use strict";
// extracted by mini-css-extract-plugin
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
+"use strict";
// extracted by mini-css-extract-plugin
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
+"use strict";
// extracted by mini-css-extract-plugin
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
+"use strict";
// extracted by mini-css-extract-plugin
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
+"use strict";
// extracted by mini-css-extract-plugin
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
+"use strict";
// extracted by mini-css-extract-plugin
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
+"use strict";
// extracted by mini-css-extract-plugin
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
+"use strict";
// extracted by mini-css-extract-plugin
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
-(() => {
-// extracted by mini-css-extract-plugin
-
-})();
-
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
-(() => {
-// extracted by mini-css-extract-plugin
-
-})();
-
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
-(() => {
-// extracted by mini-css-extract-plugin
-
-})();
-
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
-(() => {
-// extracted by mini-css-extract-plugin
-
-})();
-
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
-(() => {
-// extracted by mini-css-extract-plugin
-
-})();
-
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
-(() => {
-// extracted by mini-css-extract-plugin
-
-})();
-
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
-(() => {
-// extracted by mini-css-extract-plugin
-
-})();
-
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
-(() => {
-// extracted by mini-css-extract-plugin
-
-})();
-
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
-(() => {
-// extracted by mini-css-extract-plugin
-
-})();
-
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
-(() => {
-// extracted by mini-css-extract-plugin
-
-})();
-
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be in strict mode.
(() => {
+"use strict";
// extracted by mini-css-extract-plugin
})();
diff --git a/static/dist/js/store_home.bundle.js b/static/dist/js/store_home.bundle.js
index 90c101bb..60b8fa20 100644
--- a/static/dist/js/store_home.bundle.js
+++ b/static/dist/js/store_home.bundle.js
@@ -1,12 +1,12 @@
/******/ (() => { // webpackBootstrap
/******/ "use strict";
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules.
(() => {
// extracted by mini-css-extract-plugin
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules.
(() => {
// extracted by mini-css-extract-plugin
diff --git a/static/dist/js/store_product_categories.bundle.js b/static/dist/js/store_product_categories.bundle.js
index fb29e69e..5e8b027d 100644
--- a/static/dist/js/store_product_categories.bundle.js
+++ b/static/dist/js/store_product_categories.bundle.js
@@ -1,12 +1,12 @@
/******/ (() => { // webpackBootstrap
/******/ "use strict";
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules.
(() => {
// extracted by mini-css-extract-plugin
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules.
(() => {
// extracted by mini-css-extract-plugin
diff --git a/static/dist/js/store_product_permutations.bundle.js b/static/dist/js/store_product_permutations.bundle.js
index adb5e672..c2f66aa1 100644
--- a/static/dist/js/store_product_permutations.bundle.js
+++ b/static/dist/js/store_product_permutations.bundle.js
@@ -1,12 +1,12 @@
/******/ (() => { // webpackBootstrap
/******/ "use strict";
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules.
(() => {
// extracted by mini-css-extract-plugin
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules.
(() => {
// extracted by mini-css-extract-plugin
diff --git a/static/dist/js/store_stock_items.bundle.js b/static/dist/js/store_stock_items.bundle.js
index d5fce4f1..49e7c1b3 100644
--- a/static/dist/js/store_stock_items.bundle.js
+++ b/static/dist/js/store_stock_items.bundle.js
@@ -1,12 +1,12 @@
/******/ (() => { // webpackBootstrap
/******/ "use strict";
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules.
(() => {
// extracted by mini-css-extract-plugin
})();
-// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+// This entry needs to be wrapped in an IIFE because it needs to be isolated against other entry modules.
(() => {
// extracted by mini-css-extract-plugin
diff --git a/static/js/DEPRECATED/init.js b/static/js/DEPRECATED/init.js
deleted file mode 100644
index f4dbf1eb..00000000
--- a/static/js/DEPRECATED/init.js
+++ /dev/null
@@ -1,3 +0,0 @@
-// Shared JS file names: routing, main, shared, localStorage, appDialogs
-
-
diff --git a/static/js/DEPRECATED/main.js b/static/js/DEPRECATED/main.js
deleted file mode 100644
index d4970fa0..00000000
--- a/static/js/DEPRECATED/main.js
+++ /dev/null
@@ -1,65 +0,0 @@
-// main.js
-
-import { initializeAPI } from './shared/api.js';
-import { setupEventListeners } from './shared/events.js';
-import { initializeComponents } from './components/componentInitializer.js';
-import { router } from './shared/router.js';
-import { CONFIG } from './config/config.js';
-
-// DOM ready function
-function domReady(fn) {
- if (document.readyState !== 'loading') {
- fn();
- } else {
- document.addEventListener('DOMContentLoaded', fn);
- }
-}
-
-// Main initialization function
-function initializeApp() {
- console.log('Initializing application...');
-
- // Initialize API with base URL
- initializeAPI(CONFIG.API_BASE_URL);
-
- // Setup global event listeners
- setupEventListeners();
-
- // Initialize reusable components
- initializeComponents();
-
- // Initialize router
- router.init();
-
- // Page-specific initialization
- const currentPage = document.body.dataset.page;
- switch (currentPage) {
- case 'home':
- import('./pages/home.js').then(module => module.initHomePage());
- break;
- case 'about':
- import('./pages/about.js').then(module => module.initAboutPage());
- break;
- case 'contact':
- import('./pages/contact.js').then(module => module.initContactPage());
- break;
- default:
- console.log('No specific initialization for this page');
- }
-
- console.log('Application initialized');
-}
-
-// Run the initialization when the DOM is ready
-domReady(initializeApp);
-
-// Expose a global app object if needed
-window.app = {
- // Add methods or properties that need to be globally accessible
- reloadPage: () => {
- window.location.reload();
- },
- navigateTo: (url) => {
- router.navigateTo(url);
- }
-};
\ No newline at end of file
diff --git a/static/js/DEPRECATED/routing.js b/static/js/DEPRECATED/routing.js
deleted file mode 100644
index a3313330..00000000
--- a/static/js/DEPRECATED/routing.js
+++ /dev/null
@@ -1,111 +0,0 @@
-
-import Validation from "./lib/validation.js";
-
-function mapHashToController(hash) {
- if (hash == null) return mapHashToController(hashPageHome);
-
- url = _pathHost; // + '/';
- console.log("url: " + url + "\nhash: " + hash);
- return url + hash;
-
- switch (hash) {
- case hashPageErrorNoPermission:
- url += 'error';
- break;
- case hashPageStoreHome:
- url += 'store/home';
- break;
- case hashPageStoreProduct:
- url += 'store/product';
- break;
- case hashStoreBasketLoad:
- url += 'store/basket_load';
- break;
- case hashStoreBasketAdd:
- url += 'store/product';
- break;
- default:
- url += '';
- }
-
- return url;
-}
-
-/*
-function goToPage(pageHash, parameters) {
- window.location.href = "{{ url_for(" + pageHash + (parameters == '' ? '' : ',' + parameters) + ") }}"; // getPageRoute(pageHash, parameters);
-}
-*/
-function goToPage(pageHash, parametersJSON) {
- // window.location.href = "{{ url_for(" + pageHash + (parameters == '' ? '' : ',' + parameters) + ") }}"; // getPageRoute(pageHash, parameters);
- // ajaxJSONData(pageHash, mapHashToController(pageHash), parameters, null, false);
- url = mapHashToController(pageHash);
-
-
- if (!Validation.isEmpty(parametersJSON)) {
- url += '%3F'; // '?';
- let firstParameter = true;
- for (var p in parametersJSON) {
- // url += p + '=' + parametersJSON[p];
- if (!firstParameter) {
- url += '&';
- } else {
- firstParameter = false;
- }
- url += parametersJSON[p];
- }
- }
-
- leavePage();
-
- window.location.href = url;
- // ajaxJSONData(pageHash, url, parametersJSON, loadPageBody, false);
-}
-function leavePage() {}
-
-function goToUrl(parameterisedUrl) {
-
- leavePage();
-
- window.location.href = parameterisedUrl;
-}
-
-function htmlEncode(value) {
- return document.createElement('').text(value).innerHTML;
-}
-
-var _domParser = null;
-function htmlDecode(value) {
- if (_domParser == null) _domParser = DOMParser(); // https://www.w3docs.com/snippets/javascript/how-to-html-encode-a-string.html
- return _domParser.parseFromString(value, 'text/html').documentElement.textContent;
-}
-
-function convertForm2JSON(elemForm) {
-
- formData = {}
-
- formDataTmp = elemForm.serializeArray();
-
- $.each(formDataTmp, function(index, field) {
- formData[field.name] = field.value;
- /*
- console.log('field name: ' + field.name);
- console.log('field value: ' + field.value);
- console.log('field currentval: ' + getElementValueCurrent(field));
- */
- });
-
- return formData;
-}
-
-function loadPageBody(response) {
-
- let pageBody = document.querySelectorAll(idPageBody);
-
- console.log('ajax:');
- console.log(response.data);
-
- pageBody.innerHTML = response.data['html_block'];
-}
-
-
diff --git a/static/js/app.js b/static/js/app.js
index d766ef45..b42630f0 100644
--- a/static/js/app.js
+++ b/static/js/app.js
@@ -1,25 +1,3 @@
-/*
-// Bundle css imports
-import '../css/lib/reset.css';
-import '../css/lib/typography.css';
-import '../css/lib/variables.css';
-import '../css/lib/utils.css';
-
-import '../css/layouts/header.css';
-import '../css/layouts/footer.css';
-import '../css/layouts/table-main.css'
-
-import '../css/components/button.css';
-import '../css/components/card.css';
-import '../css/components/dialog.css';
-import '../css/components/form.css';
-import '../css/components/modal.css';
-import '../css/components/navigation.css';
-import '../css/components/overlay.css';
-
-import '../css/sections/store.css';
-*/
-
// Main entry point for the application
'use strict';
diff --git a/static/js/dom.js b/static/js/dom.js
index 37f30ec9..15c78097 100644
--- a/static/js/dom.js
+++ b/static/js/dom.js
@@ -136,6 +136,7 @@ export default class DOM {
return returnVal;
}
static getElementAttributeValueCurrent(element) {
+ debugger;
if (Validation.isEmpty(element)) return null;
return element.getAttribute(attrValueCurrent);
if (!Validation.isEmpty(value) && element.type === "checkbox") {
diff --git a/static/js/pages/base.js b/static/js/pages/base.js
index c8b6097f..e5bc4985 100644
--- a/static/js/pages/base.js
+++ b/static/js/pages/base.js
@@ -43,46 +43,10 @@ export default class BasePage {
hookupCommonElements() {
// hookupVideos();
- this.hookupNavigation();
- this.hookupImagesLogo();
+ this.hookupLogos();
this.hookupOverlays();
}
- hookupNavigation() {
- /* Can be removed: */
- let overlayHamburger = document.querySelector(idOverlayHamburger);
- let hamburgerOptions = overlayHamburger.querySelectorAll('div.' + flagRow);
- let countOptions = hamburgerOptions.length;
- // console.log('count nav options: ', countOptions);
- // overlayHamburger.css('height', (countOptions * 27) + 'px');
- /* end of can be removed */
-
- this.hookupEventHandler("click", idButtonHamburger, (event, element) => {
- let overlayHamburger = document.querySelector(idOverlayHamburger);
- if (overlayHamburger.classList.contains(flagCollapsed)) {
- overlayHamburger.classList.remove(flagCollapsed);
- overlayHamburger.classList.add(flagExpanded);
- } else {
- overlayHamburger.classList.remove(flagExpanded);
- overlayHamburger.classList.add(flagCollapsed);
- }
- // overlayHamburger.classList.add(flagInitialised);
- });
-
- this.hookupButtonsNavHome();
- this.hookupButtonsNavServices();
- this.hookupButtonsNavContact();
- this.hookupButtonsNavUserAccount();
- this.hookupButtonsNavUserLogout();
- this.hookupButtonsNavUserLogin();
- this.hookupButtonsNavStoreHome();
- this.hookupButtonsNavStoreManufacturingPurchaseOrders();
- this.hookupButtonsNavStoreProductPermutations();
- this.hookupButtonsNavStoreStockItems();
- this.hookupButtonsNavStoreSuppliers();
- this.hookupButtonsNavStoreSupplierPurchaseOrders();
- this.hookupButtonsNavAdminHome();
- }
hookupEventHandler(eventType, selector, callback) {
Events.initialiseEventHandler(selector, flagInitialised, (element) => {
element.addEventListener(eventType, (event) => {
@@ -91,77 +55,12 @@ export default class BasePage {
});
});
}
- hookupButtonsNavHome() {
- this.hookupButtonsNav('.' + flagNavHome, hashPageHome);
- }
- hookupButtonsNav(buttonSelector, hashPageNav) {
- this.hookupEventHandler("click", buttonSelector, (event, button) => {
- this.router.navigateToHash(hashPageNav);
- });
- }
- hookupButtonsNavServices() {
- this.hookupButtonsNav('.' + flagNavServices, hashPageServices);
- }
- hookupButtonsNavContact() {
- this.hookupButtonsNav('.' + flagNavContact, hashPageContact);
- }
- hookupButtonsNavUserAccount() {
- this.hookupButtonsNav('.' + flagNavUserAccount, hashPageUserAccount);
- }
- hookupButtonsNavUserLogout() {
- this.hookupButtonsNav('.' + flagNavUserLogout, hashPageUserLogout);
- }
- hookupButtonsNavUserLogin() {
- this.hookupEventHandler("click", '.' + flagNavUserLogin, (event, navigator) => {
- event.stopPropagation();
- this.leave();
- API.loginUser()
- .then((response) => {
- if (response.Success) {
- // this.router.navigateToUrl(response[flagCallback], null, false); // window.app.
- window.location.href = response[flagCallback];
- } else {
- DOM.alertError("Error", response.Message);
- }
- });
- });
- }
- hookupButtonsNavStoreHome() {
- this.hookupButtonsNav('.' + flagNavStoreHome, hashPageStoreHome);
- }
- hookupButtonsNavStoreManufacturingPurchaseOrders() {
- this.hookupButtonsNav('.' + flagNavStoreManufacturingPurchaseOrders, hashPageStoreManufacturingPurchaseOrders);
- }
- hookupButtonsNavStoreProductCategories() {
- this.hookupButtonsNav('.' + flagNavStoreProductCategories, hashPageStoreProductCategories);
- }
- hookupButtonsNavStoreProducts() {
- this.hookupButtonsNav('.' + flagNavStoreProducts, hashPageStoreProducts);
- }
- hookupButtonsNavStoreProductPermutations() {
- this.hookupButtonsNav('.' + flagNavStoreProductPermutations, hashPageStoreProductPermutations);
- }
- hookupButtonsNavStoreProductPrices() {
- this.hookupButtonsNav('.' + flagNavStoreProductPrices, hashPageStoreProductPrices);
- }
- hookupButtonsNavStoreProductVariations() {
- this.hookupButtonsNav('.' + flagNavStoreProductVariations, hashPageStoreProductVariations);
- }
- hookupButtonsNavStoreStockItems() {
- this.hookupButtonsNav('.' + flagNavStoreStockItems, hashPageStoreStockItems);
- }
- hookupButtonsNavAdminHome() {
- this.hookupButtonsNav('.' + flagNavAdminHome, hashPageAdminHome);
- }
- hookupButtonsNavStoreSuppliers() {
- this.hookupButtonsNav('.' + flagNavStoreSuppliers, hashPageStoreSuppliers);
- }
- hookupButtonsNavStoreSupplierPurchaseOrders() {
- this.hookupButtonsNav('.' + flagNavStoreSupplierPurchaseOrders, hashPageStoreSupplierPurchaseOrders);
- }
- hookupImagesLogo() {
- this.hookupButtonsNav("img." + flagImageLogo, hashPageHome);
+ hookupLogos() {
+ this.hookupEventHandler("click", "." + flagImageLogo + "," + "." + flagLogo, (event, element) => {
+ if (_verbose) { console.log('clicking logo'); }
+ this.router.navigateToHash(hashPageHome);
+ });
}
hookupOverlays() {
@@ -178,7 +77,6 @@ export default class BasePage {
});
}
-
hookupButtonSave() {
Events.initialiseEventHandler('form.' + flagFilter + ' button.' + flagSave, flagInitialised, (button) => {
button.addEventListener("click", (event) => {
@@ -190,13 +88,6 @@ export default class BasePage {
});
}
- hookupVideos() {
- Events.initialiseEventHandler('video', flagInitialised, (video) => {
- video.addEventListener("mouseover", videoPlay(video));
- video.addEventListener("mouseout", videoPause(video));
- });
- }
-
leave() {
if (_verbose) { console.log('Leaving ' + this.title + ' page'); }
if (this.constructor === BasePage) {
diff --git a/static/js/pages/core/admin_home.js b/static/js/pages/core/admin_home.js
deleted file mode 100644
index a517abd6..00000000
--- a/static/js/pages/core/admin_home.js
+++ /dev/null
@@ -1,46 +0,0 @@
-
-import Events from "../../lib/events.js";
-import BasePage from "../base.js";
-
-export default class PageAdminHome extends BasePage {
- static hash = hashPageAdminHome;
-
- constructor(router) {
- super(router);
- }
-
- initialize() {
- this.sharedInitialize();
- this.hookupAdminStore();
- }
-
- hookupAdminStore() {
- this.hookupButtonsNavStoreProductCategories();
- this.hookupButtonsNavStoreProducts();
- this.hookupButtonsNavStoreProductPermutations();
- this.hookupButtonsNavStoreProductPrices();
- this.hookupButtonsNavStoreStockItems();
- this.hookupButtonsNavStoreProductVariations();
-
- this.hookupButtonsNavAdminStoreStripeProducts();
- this.hookupButtonsNavAdminStoreStripePrices();
- }
- hookupButtonsNavAdminStoreStripeProducts() {
- Events.initialiseEventHandler('.' + flagNavAdminStoreStripeProducts, flagInitialised, function(navigator) {
- navigator.addEventListener("click", function(event) {
- this.router.navigateToHash(hashPageAdminStoreStripeProducts);
- });
- });
- }
- hookupButtonsNavAdminStoreStripePrices() {
- Events.initialiseEventHandler('.' + flagNavAdminStoreStripePrices, flagInitialised, function(navigator) {
- navigator.addEventListener("click", function(event) {
- this.router.navigateToHash(hashPageAdminStoreStripePrices);
- });
- });
- }
-
- leave() {
- super.leave();
- }
-}
diff --git a/static/js/pages/core/contact.js b/static/js/pages/core/contact.js
index 022b3f4b..8924a0ba 100644
--- a/static/js/pages/core/contact.js
+++ b/static/js/pages/core/contact.js
@@ -10,5 +10,12 @@ export default class PageContact extends BasePage {
initialize() {
this.sharedInitialize();
+ this.hookupButtonSubmitFormContactUs();
+ }
+
+ hookupButtonSubmitFormContactUs() {
+ const button = document.querySelector('form input[type="submit"]');
+ button.classList.add(flagButton);
+ button.classList.add(flagButtonPrimary);
}
}
diff --git a/static/js/pages/core/home.js b/static/js/pages/core/home.js
index 35f0227d..ecd48415 100644
--- a/static/js/pages/core/home.js
+++ b/static/js/pages/core/home.js
@@ -1,5 +1,9 @@
+// internal
import BasePage from "../base.js";
+// external
+import AOS from 'aos';
+
export default class PageHome extends BasePage {
static hash = hashPageHome;
@@ -11,8 +15,45 @@ export default class PageHome extends BasePage {
initialize() {
this.sharedInitialize();
this.hookupButtonsNavContact();
+ // this.initialiseAOS();
+ this.initialiseAnimations();
}
+ /* AOS */
+ initialiseAOS() {
+ AOS.init({
+ duration: 1000,
+ once: true,
+ });
+ }
+ /* Manual animations *
+ initialiseAnimations() {
+ // Check if IntersectionObserver is supported
+ if ('IntersectionObserver' in window) {
+ const observer = new IntersectionObserver((entries) => {
+ entries.forEach(entry => {
+ if (entry.isIntersecting) {
+ entry.target.classList.add('active');
+ }
+ });
+ }, {
+ threshold: 0.1,
+ rootMargin: '50px'
+ });
+
+ // Observe all elements with 'reveal' class
+ document.querySelectorAll('.reveal').forEach((element) => {
+ observer.observe(element);
+ });
+ } else {
+ // If IntersectionObserver is not supported, make all elements visible
+ document.querySelectorAll('.reveal').forEach((element) => {
+ element.style.opacity = 1;
+ });
+ }
+ }
+ */
+
leave() {
super.leave();
}
diff --git a/static/js/pages/core/services.js b/static/js/pages/core/services.js
deleted file mode 100644
index 602c38bc..00000000
--- a/static/js/pages/core/services.js
+++ /dev/null
@@ -1,19 +0,0 @@
-
-import BasePage from "../base.js";
-
-export default class PageServices extends BasePage {
- static hash = hashPageServices;
-
- constructor(router) {
- super(router);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- leave() {
- super.leave();
- }
-}
-
diff --git a/static/js/pages/store/basket.js b/static/js/pages/store/basket.js
deleted file mode 100644
index ff7da1cc..00000000
--- a/static/js/pages/store/basket.js
+++ /dev/null
@@ -1,198 +0,0 @@
-
-import Events from "../../lib/events.js";
-import LocalStorage from "../../lib/local_storage.js";
-import BasePage from "../base.js";
-
-export default class PageStoreBasket extends BasePage {
- static hash = hashPageStoreBasket;
-
- constructor(router) {
- super(router);
- }
-
- initialize() {
- this.sharedInitialize();
- this.hookupStoreCardsInfo();
- this.hookupOverlaysStoreBasketInfo();
- this.hookupButtonCheckoutSession();
- }
-
-
- hookupStoreCardsInfo() {
-
- document.querySelectorAll(idContainerInfoDelivery).addEventListener("click", function(event) {
- if (_verbose) { console.log("delivery modal display method"); }
- document.querySelectorAll(idOverlayInfoDelivery).css('display', 'block');
- });
-
- document.querySelectorAll(idContainerInfoBilling).addEventListener("click", function(event) {
- if (_verbose) { console.log("billing modal display method"); }
- document.querySelectorAll(idOverlayInfoBilling).css('display', 'block');
- });
- }
-
- hookupOverlaysStoreBasketInfo() {
-
- let elOverlay, elForm;
-
- // Delivery
- elOverlay = document.querySelectorAll(idOverlayInfoDelivery);
- elForm = elOverlay.querySelector('form');
-
- hookupOverlay(elOverlay);
- Events.initialiseEventHandler(elForm, flagInitialised, function() {
- elForm.submit(function(event) {
- elForm = document.querySelectorAll(elForm);
- event.preventDefault();
- if (_verbose) { console.log("delivery submit method"); }
-
- ajaxData = {};
- ajaxData[keyInfoType] = keyInfoDelivery;
- ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoDelivery);
-
- ajaxJSONData('info delivery', mapHashToController(hashStoreBasketInfo), ajaxData, loadInfoAddress, false);
- // document.querySelectorAll(idOverlayInfoDelivery).css('display', 'none');
- });
- });
-
- // Billing
- elOverlay = document.querySelectorAll(idOverlayInfoBilling);
- elForm = elOverlay.querySelector('form');
-
- hookupOverlay(elOverlay);
- Events.initialiseEventHandler(elForm, flagInitialised, function() {
- elForm.submit(function(event) {
- event.preventDefault();
- if (_verbose) { console.log("billing submit method"); }
-
- ajaxData = {};
- ajaxData[keyInfoType] = keyInfoBilling;
- ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoBilling); // formData; // form.serialize();
-
- ajaxJSONData('info billing', mapHashToController(hashStoreBasketInfo), ajaxData, loadInfoAddress, false);
- // document.querySelectorAll(idOverlayInfoBilling).css('display', 'none');
- });
- });
- let keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyCity, keyCounty];
- for (var k in keys) {
- elForm.querySelector('#' + keys[k]).removeAttr('required');
- }
- }
-
- loadInfoAddress(response) {
-
- if (_verbose) { console.log('response:'); console.log(response.data); }
- let infoType = response.data[keyInfoType];
- let infoAddress = response.data[infoType];
- LocalStorage.setLocalStorage(infoType, infoAddress);
-
- // update webpage elements in background
- if (infoType == keyInfoBilling) {
-
- let container = document.querySelectorAll(idContainerInfoBilling);
- if (infoAddress[keyInfoIdentical]) {
- container.querySelector('div').innerHTML = "Same as delivery address";
- } else {
- container.querySelector('div').innerHTML = "" + infoAddress[keyNameFull] + ' at ' + infoAddress[keyPostcode] + "";
- }
-
- document.querySelectorAll(idOverlayInfoBilling).css('display', 'none');
-
- document.querySelectorAll(idOverlayInfoBilling).querySelector('form').classList.add(flagSubmitted);
- } else {
-
- let container = document.querySelectorAll(idContainerInfoDelivery);
- container.querySelector('div').innerHTML = "" + infoAddress[keyNameFull] + ' at ' + infoAddress[keyPostcode] + "";
-
- document.querySelectorAll(idOverlayInfoDelivery).css('display', 'none');
-
- document.querySelectorAll(idOverlayInfoDelivery).querySelector('form').classList.add(flagSubmitted);
- }
- }
-
- convertFormBilling2JSON(ajaxData, idOverlayInfo) {
-
- let elOverlay, elForm, elOverlayDelivery, elFormDelivery;
-
- elOverlay = document.querySelectorAll(idOverlayInfo);
- elForm = elOverlay.querySelector('form');
- elOverlay = document.querySelectorAll(idOverlayInfoDelivery);
- elForm = elOverlay.querySelector('form');
-
- ajaxData[flagForm] = convertForm2JSON(elForm); // formData; // form.serialize();
- let keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyAddress2, keyCity, keyCounty];
- if (_verbose) {
- console.log('converting billing form to json\nform ID: ' + elForm.id);
- console.log('ajaxData:');
- console.log(ajaxData);
- }
- ajaxData[flagForm][keyInfoIdentical] = getElementValueCurrent(elForm.querySelector('#' + keyInfoIdentical));
- for (var k in keys) {
- if (idOverlayInfo == idOverlayInfoBilling && ajaxData[flagForm][keyInfoIdentical]) {
- ajaxData[flagForm][keys[k]] = getElementValueCurrent(elFormDelivery.querySelector('#' + keys[k]));
- } else {
- ajaxData[flagForm][keys[k]] = getElementValueCurrent(elForm.querySelector('#' + keys[k]));
- }
- }
- if (_verbose) {
- console.log('ajaxData:');
- console.log(ajaxData);
- }
- return ajaxData;
- }
-
- hookupButtonCheckoutSession() {
- let btnCheckout = document.querySelectorAll(idButtonCheckout);
- btnCheckout.classList.remove(flagInitialised);
- Events.initialiseEventHandler(idButtonCheckout, flagInitialised, function() {
-
- btnCheckout.removeEventListener("click");
- btnCheckout.addEventListener("click", function(event) {
-
-
- //setupPageLocalStorageNext(hashPageStoreBasket);
- let basket = LocalStorage.getLocalStorage(keyBasket);
- // goToPage(hashPageStoreBasket);
- let ajaxData = {};
- ajaxData[keyBasket] = basket;
- ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoDelivery);
- ajaxData = convertFormBilling2JSON(ajaxData, idOverlayInfoBilling);
- ajaxData[key_code_currency] = getCurrencySelected();
- // ajaxData[keyIsSubscription] = false; // only checkout one-time payment items for now
-
- ajaxJSONData('checkout session', mapHashToController(hashPageStoreCheckout), ajaxData, handleResponseCheckout, false);
- });
- });
- }
-
- handleResponseCheckout(response) {
- // let tmpData = {};
- // tmpData[keyIdCheckout] = response.data[keyIdCheckout]
- // goToPage(hashPageStoreCheckoutSession, tmpData);
- window.location.href = response.data[keyUrlCheckout]
- }
-
- hookupButtonFormBillingCopy() {
-
- // let elButton = document.querySelectorAll(idButtonFormBillingCopy);
-
- Events.initialiseEventHandler(idButtonFormBillingCopy, flagInitialised, function() {
- document.querySelectorAll(idButtonFormBillingCopy).addEventListener("click", function (event) {
-
- let keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyAddress2, keyCity, keyCounty];
-
- let elFormBilling = document.querySelectorAll(idOverlayInfoBilling).querySelector('form');
- let elFormDelivery = document.querySelectorAll(idOverlayInfoDelivery).querySelector('form');
-
- for (var k in keys) {
- elFormBilling.querySelector('#' + keys[k]).value = getElementValueCurrent(elFormDelivery.querySelector('#' + keys[k]));
- }
- });
- });
- }
-
-
- leave() {
- super.leave();
- }
-}
diff --git a/static/js/pages/store/home.js b/static/js/pages/store/home.js
deleted file mode 100644
index 26882200..00000000
--- a/static/js/pages/store/home.js
+++ /dev/null
@@ -1,20 +0,0 @@
-
-import BasePage from "../base.js";
-
-export default class PageStoreHome extends BasePage {
- static hash = hashPageStoreHome;
-
- constructor(router) {
- super(router);
- }
-
- initialize() {
- this.sharedInitialize();
- this.hookupFiltersStore();
- this.hookupStoreHome();
- }
-
- leave() {
- super.leave();
- }
-}
diff --git a/static/js/pages/store/manufacturing_purchase_orders.js b/static/js/pages/store/manufacturing_purchase_orders.js
deleted file mode 100644
index 09113a9a..00000000
--- a/static/js/pages/store/manufacturing_purchase_orders.js
+++ /dev/null
@@ -1,509 +0,0 @@
-
-import API from "../../api.js";
-import BusinessObjects from "../../lib/business_objects/business_objects.js";
-import DOM from "../../dom.js";
-import Events from "../../lib/events.js";
-import ProductPermutation from "../../lib/business_objects/store/product_permutation.js";
-import TableBasePage from "../base_table.js";
-import Utils from "../../lib/utils.js";
-import Validation from "../../lib/validation.js";
-import StoreTableMixinPage from "./mixin_table.js";
-
-export default class PageStoreManufacturingPurchaseOrders extends TableBasePage {
- static hash = hashPageStoreManufacturingPurchaseOrders;
- static attrIdRowObject = attrIdManufacturingPurchaseOrder;
- callSaveTableContent = API.saveManufacturingPurchaseOrders;
-
- constructor(router) {
- super(router);
- this.storeMixin = new StoreTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterActive();
- }
-
- loadRowTable(rowJson) {
- }
- getJsonRow(row) {
- if (row == null) return;
- let tdCurrency = row.querySelector('td.' + flagCurrency);
- let inputCostTotalLocalVatExcl = row.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
- let inputCostTotalLocalVatIncl = row.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
- let inputPriceTotalLocalVatExcl = row.querySelector('td.' + flagPriceTotalLocalVatExcl + ' input');
- let inputPriceTotalLocalVatIncl = row.querySelector('td.' + flagPriceTotalLocalVatIncl + ' input');
- let trsPurchaseOrderItem = row.querySelectorAll('tr.' + flagOrderItems);
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdManufacturingPurchaseOrder] = row.getAttribute(attrIdManufacturingPurchaseOrder);
- jsonRow[attrIdCurrency] = DOM.getElementAttributeValueCurrent(tdCurrency);
- jsonRow[flagCostTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatExcl);
- jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl);
- jsonRow[flagPriceTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputPriceTotalLocalVatExcl);
- jsonRow[flagPriceTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputPriceTotalLocalVatIncl);
- let orderItems = [];
- if (trsPurchaseOrderItem != null) {
- trsPurchaseOrderItem.forEach((tr) => {
- orderItems.push(this.getJsonRowOrderItem(tr));
- });
- }
- jsonRow[flagOrderItems] = orderItems;
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- getJsonRowOrderItem(tr) {
- let inputDisplayOrder = tr.querySelector('td.' + flagDisplayOrder + ' input');
- let tdCategory = tr.querySelector('td.' + flagProductCategory);
- let tdProduct = tr.querySelector('td.' + flagProduct);
- let tdVariations = tr.querySelector('td.' + flagProductVariations);
- let tdUnitQuantity = tr.querySelector('td.' + flagUnitMeasurementQuantity);
- let inputQuantityUsed = tr.querySelector('td.' + flagQuantityUsed + ' input');
- let inputQuantityProduced = tr.querySelector('td.' + flagQuantityProduced + ' input');
- let tdUnitMeasurementLatencyManufacture = tr.querySelector('td.' + flagUnitMeasurementLatencyManufacture);
- let inputLatencyManufacture = tr.querySelector('td.' + flagLatencyManufacture + ' input');
- let buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdManufacturingPurchaseOrder] = tr.getAttribute(attrIdManufacturingPurchaseOrder);
- jsonRow[attrIdManufacturingPurchaseOrderProductLink] = tr.getAttribute(attrIdManufacturingPurchaseOrderProductLink);
- jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
- jsonRow[attrIdProductCategory] = DOM.getElementAttributeValueCurrent(tdCategory);
- jsonRow[attrIdProduct] = DOM.getElementAttributeValueCurrent(tdProduct);
- jsonRow[flagProductVariations] = DOM.getElementAttributeValueCurrent(tdVariations);
- jsonRow[attrIdUnitMeasurementQuantity] = DOM.getElementAttributeValueCurrent(tdUnitQuantity);
- jsonRow[flagQuantityUsed] = DOM.getElementAttributeValueCurrent(inputQuantityUsed);
- jsonRow[flagQuantityProduced] = DOM.getElementAttributeValueCurrent(inputQuantityProduced);
- jsonRow[attrIdUnitMeasurementLatencyManufacture] = DOM.getElementAttributeValueCurrent(tdUnitMeasurementLatencyManufacture);
- jsonRow[flagLatencyManufacture] = DOM.getElementAttributeValueCurrent(inputLatencyManufacture);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
-
- return jsonRow;
- }
- initialiseRowNew(tbody, row) {
- super.initialiseRowNew(tbody, row);
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupCurrencyFields();
- this.hookupCostAndPriceInputs();
- this.hookupOrderItemsFields();
- this.hookupFieldsActive();
- }
- hookupCostAndPriceInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatIncl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPriceTotalLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPriceTotalLocalVatIncl + ' input');
- }
- hookupOrderItemsFields() {
- this.hookupOrderItemsPreviews();
- this.hookupFieldsOrderItemDisplayOrder();
- this.hookupFieldsOrderItemProductCategory();
- this.hookupFieldsOrderItemProduct();
- this.hookupFieldsOrderItemProductVariations();
- this.hookupFieldsOrderItemUnitQuantity();
- this.hookupFieldsOrderItemQuantityUsed();
- this.hookupFieldsOrderItemQuantityProduced();
- this.hookupFieldsOrderItemUnitMeasurementLatencyManufacture();
- this.hookupFieldsOrderItemLatencyManufacture();
- this.hookupFieldsOrderItemActive();
- this.hookupFieldsOrderItemAddDelete();
- this.hookupButtonsOrderItemAdd();
- }
- hookupOrderItemsPreviews() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems, (event, td) => {
- if (!td.classList.contains(flagCollapsed)) return;
- this.handleClickOrderItemsPreview(event, td);
- });
- }
- handleClickOrderItemsPreview(event, element) {
- if (_verbose) { console.log("click order items preview"); }
- this.toggleColumnHeaderCollapsed(flagOrderItems, false);
- element.classList.remove(flagCollapsed);
- let row = DOM.getRowFromElement(element);
- let idManufacturingPurchaseOrder = row.getAttribute(attrIdManufacturingPurchaseOrder);
- let manufacturingPurchaseOrder = idManufacturingPurchaseOrder > 0 ? manufacturingPurchaseOrders[idManufacturingPurchaseOrder] : {
- [flagOrderItems]: [],
- };
- let tblOrderItems = document.createElement("table");
- tblOrderItems.classList.add(flagOrderItems);
- let thead = document.createElement("thead");
- let tr = document.createElement("tr");
-
- let thDisplayOrder = document.createElement("th");
- thDisplayOrder.classList.add(flagDisplayOrder);
- thDisplayOrder.textContent = 'Display Order';
- let thCategory = document.createElement("th");
- thCategory.classList.add(flagProductCategory);
- thCategory.textContent = 'Category';
- let thProduct = document.createElement("th");
- thProduct.classList.add(flagProduct);
- thProduct.textContent = 'Product';
- let thVariations = document.createElement("th");
- thVariations.classList.add(flagProductVariations);
- thVariations.classList.add(flagCollapsed);
- thVariations.textContent = 'Variations';
- let thUnitQuantity = document.createElement("th");
- thUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- thUnitQuantity.textContent = 'Unit Quantity';
- let thQuantityUsed = document.createElement("th");
- thQuantityUsed.classList.add(flagQuantityUsed);
- thQuantityUsed.textContent = 'Quantity Used';
- let thQuantityProduced = document.createElement("th");
- thQuantityProduced.classList.add(flagQuantityProduced);
- thQuantityProduced.textContent = 'Quantity Produced';
- /*
- let thCostTotalLocalVatExcl = document.createElement("th");
- thCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- thCostTotalLocalVatExcl.textContent = 'Cost Total Local VAT Excl';
- let thCostTotalLocalVatIncl = document.createElement("th");
- thCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- thCostTotalLocalVatIncl.textContent = 'Cost Total Local VAT Incl';
- let thCostUnitLocalVatExcl = document.createElement("th");
- thCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- thCostUnitLocalVatExcl.textContent = 'Cost Unit Local VAT Excl';
- let thCostUnitLocalVatIncl = document.createElement("th");
- thCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- thCostUnitLocalVatIncl.textContent = 'Cost Unit Local VAT Incl';
- */
- let thUnitMeasurementLatencyManufacture = document.createElement("th");
- thUnitMeasurementLatencyManufacture.classList.add(flagUnitMeasurementLatencyManufacture);
- thUnitMeasurementLatencyManufacture.textContent = 'Unit Measurement Latency Manufacture';
- let thLatencyManufacture = document.createElement("th");
- thLatencyManufacture.classList.add(flagLatencyManufacture);
- thLatencyManufacture.textContent = 'Latency Manufacture';
- let thActive = document.createElement("th");
- thActive.classList.add(flagActive);
- thActive.textContent = 'Active';
- let thAddDelete = document.createElement("th");
- thAddDelete.classList.add(flagAdd);
- let buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- thAddDelete.appendChild(buttonAdd);
-
- tr.appendChild(thDisplayOrder);
- tr.appendChild(thCategory);
- tr.appendChild(thProduct);
- tr.appendChild(thVariations);
- tr.appendChild(thUnitQuantity);
- tr.appendChild(thQuantityUsed);
- tr.appendChild(thQuantityProduced);
- /*
- tr.appendChild(thCostTotalLocalVatExcl);
- tr.appendChild(thCostTotalLocalVatIncl);
- tr.appendChild(thCostUnitLocalVatExcl);
- tr.appendChild(thCostUnitLocalVatIncl);
- */
- tr.appendChild(thUnitMeasurementLatencyManufacture);
- tr.appendChild(thLatencyManufacture);
- tr.appendChild(thActive);
- tr.appendChild(thAddDelete);
- thead.appendChild(tr);
- tblOrderItems.appendChild(thead);
-
- let tbody = document.createElement("tbody");
- manufacturingPurchaseOrder[flagOrderItems].forEach((orderItem, index) => {
- this.addRowManufacturingPurchaseOrderItem(tbody, orderItem);
- });
- tblOrderItems.appendChild(tbody);
-
- let cell = DOM.getCellFromElement(element);
- let cellNew = cell.cloneNode(false);
- cellNew.appendChild(tblOrderItems);
- row.replaceChild(cellNew, cell);
- if (_verbose) { console.log("tblOrderItems: ", tblOrderItems); }
- this.hookupOrderItemsFields();
- }
- addRowManufacturingPurchaseOrderItem(tbody, orderItem) { // productVariationTypeOptions, productVariationOptions, productCategoryOptions, productOptions, unitMeasurementOptions,
- if (_verbose) { console.log("addRowManufacturingPurchaseOrderItem: ", orderItem); }
- let tdDisplayOrder = document.createElement("td");
- tdDisplayOrder.classList.add(flagDisplayOrder);
- let inputDisplayOrder = document.createElement("input");
- inputDisplayOrder.classList.add(flagDisplayOrder);
- inputDisplayOrder.type = 'number';
- inputDisplayOrder.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputDisplayOrder, orderItem[flagDisplayOrder]);
- tdDisplayOrder.appendChild(inputDisplayOrder);
-
- let tdCategory = document.createElement("td");
- tdCategory.classList.add(flagProductCategory);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdCategory, orderItem[attrIdProductCategory]);
- let divCategory = document.createElement("div");
- divCategory.classList.add(flagProductCategory);
- // DOM.setElementAttributesValuesCurrentAndPrevious(divCategory, orderItem[attrIdProductCategory]);
- let productCategory = productCategories[orderItem[attrIdProductCategory]];
- divCategory.textContent = BusinessObjects.getObjectText(productCategory);
- tdCategory.appendChild(divCategory);
-
- let tdProduct = document.createElement("td");
- tdProduct.classList.add(flagProduct);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdProduct, orderItem[attrIdProductCategory]);
- let divProduct = document.createElement("div");
- divProduct.classList.add(flagProduct);
- // DOM.setElementAttributesValuesCurrentAndPrevious(divProduct, orderItem[attrIdProduct]);
- let product = products[orderItem[attrIdProduct]];
- divProduct.textContent = BusinessObjects.getObjectText(product);
- tdProduct.appendChild(divProduct);
-
- let tdVariations = document.createElement("td");
- tdVariations.classList.add(flagProductVariations);
- tdVariations.classList.add(flagCollapsed);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdVariations, orderItem[attrIdProductCategory]);
- let divVariations = document.createElement("div");
- divVariations.classList.add(flagProductVariations);
- // DOM.setElementAttributesValuesCurrentAndPrevious(divVariations, orderItem[attrIdProductVariation]);
- let variationsText = ProductPermutation.getProductVariationsPreviewFromIdCsv(orderItem[flagProductVariations]);
- divVariations.textContent = variationsText;
- tdVariations.appendChild(divVariations);
-
- let tdUnitQuantity = document.createElement("td");
- tdUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdUnitQuantity, orderItem[attrIdProductCategory]);
- let divUnitQuantity = document.createElement("div");
- divUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- // DOM.setElementValuesCurrentAndPrevious(divUnitQuantity, orderItem[flagUnitMeasurementQuantity]);
- let unitQuantity = unitMeasurements[orderItem[attrIdUnitMeasurementQuantity]];
- divUnitQuantity.textContent = BusinessObjects.getObjectText(unitQuantity);
- tdUnitQuantity.appendChild(divUnitQuantity);
-
- let tdQuantityUsed = document.createElement("td");
- tdQuantityUsed.classList.add(flagQuantityUsed);
- let inputQuantityUsed = document.createElement("input");
- inputQuantityUsed.classList.add(flagQuantityUsed);
- inputQuantityUsed.type = 'number';
- DOM.setElementValuesCurrentAndPrevious(inputQuantityUsed, orderItem[flagQuantityUsed]);
- tdQuantityUsed.appendChild(inputQuantityUsed);
-
- let tdQuantityProduced = document.createElement("td");
- tdQuantityProduced.classList.add(flagQuantityProduced);
- let inputQuantityProduced = document.createElement("input");
- inputQuantityProduced.classList.add(flagQuantityProduced);
- inputQuantityProduced.type = 'number';
- DOM.setElementValuesCurrentAndPrevious(inputQuantityProduced, orderItem[flagQuantityProduced]);
- tdQuantityProduced.appendChild(inputQuantityProduced);
-
- /*
- let tdCostTotalLocalVatExcl = document.createElement("td");
- tdCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- let inputCostTotalLocalVatExcl = document.createElement("input");
- inputCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- inputCostTotalLocalVatExcl.type = 'number';
- inputCostTotalLocalVatExcl.step = 0.01;
- DOM.setElementAttributesValuesCurrentAndPrevious(inputCostTotalLocalVatExcl, orderItem[flagCostTotalLocalVatExcl]);
- tdCostTotalLocalVatExcl.appendChild(inputCostTotalLocalVatExcl);
-
- let tdCostTotalLocalVatIncl = document.createElement("td");
- tdCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- let inputCostTotalLocalVatIncl = document.createElement("input");
- inputCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- inputCostTotalLocalVatIncl.type = 'number';
- inputCostTotalLocalVatIncl.step = 0.01;
- DOM.setElementAttributesValuesCurrentAndPrevious(inputCostTotalLocalVatIncl, orderItem[flagCostTotalLocalVatIncl]);
- tdCostTotalLocalVatIncl.appendChild(inputCostTotalLocalVatIncl);
-
- let tdCostUnitLocalVatExcl = document.createElement("td");
- tdCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- let divCostUnitLocalVatExcl = document.createElement("div");
- divCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, orderItem[flagCostUnitLocalVatExcl]);
- tdCostUnitLocalVatExcl.appendChild(divCostUnitLocalVatExcl);
-
- let tdCostUnitLocalVatIncl = document.createElement("td");
- tdCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- let divCostUnitLocalVatIncl = document.createElement("div");
- divCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, orderItem[flagCostUnitLocalVatIncl]);
- tdCostUnitLocalVatIncl.appendChild(divCostUnitLocalVatIncl);
- */
-
- let tdUnitMeasurementLatencyManufacture = document.createElement("td");
- tdUnitMeasurementLatencyManufacture.classList.add(flagUnitMeasurementLatencyManufacture);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdUnitMeasurementLatencyManufacture, orderItem[attrIdUnitMeasurementLatencyManufacture]);
- let divUnitMeasurementLatencyManufacture = document.createElement("div");
- divUnitMeasurementLatencyManufacture.classList.add(flagUnitMeasurementLatencyManufacture);
- // DOM.setElementValuesCurrentAndPrevious(divUnitMeasurementLatencyManufacture, orderItem[flagUnitMeasurementLatencyManufacture]);
- let unitMeasurementLatencyManufacture = unitMeasurementsTime[orderItem[attrIdUnitMeasurementLatencyManufacture]];
- divUnitMeasurementLatencyManufacture.textContent = BusinessObjects.getObjectText(unitMeasurementLatencyManufacture);
- tdUnitMeasurementLatencyManufacture.appendChild(divUnitMeasurementLatencyManufacture);
-
- let tdLatencyManufacture = document.createElement("td");
- tdLatencyManufacture.classList.add(flagLatencyManufacture);
- let inputLatencyManufacture = document.createElement("input");
- inputLatencyManufacture.classList.add(flagLatencyManufacture);
- inputLatencyManufacture.type = 'number';
- inputLatencyManufacture.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputLatencyManufacture, orderItem[flagLatencyManufacture]);
- tdLatencyManufacture.appendChild(inputLatencyManufacture);
-
- let tdActive = this.createTdActive(orderItem[flagActive]);
-
- let tr = document.createElement("tr");
- tr.classList.add(flagOrderItems);
- tr.setAttribute(attrIdManufacturingPurchaseOrder, orderItem[attrIdManufacturingPurchaseOrder]);
- tr.setAttribute(attrIdManufacturingPurchaseOrderProductLink, orderItem[attrIdManufacturingPurchaseOrderProductLink]);
- tr.appendChild(tdDisplayOrder);
- tr.appendChild(tdCategory);
- tr.appendChild(tdProduct);
- tr.appendChild(tdVariations);
- tr.appendChild(tdUnitQuantity);
- tr.appendChild(tdQuantityUsed);
- tr.appendChild(tdQuantityProduced);
- /*
- tr.appendChild(tdCostTotalLocalVatExcl);
- tr.appendChild(tdCostTotalLocalVatIncl);
- tr.appendChild(tdCostUnitLocalVatExcl);
- tr.appendChild(tdCostUnitLocalVatIncl);
- */
- tr.appendChild(tdUnitMeasurementLatencyManufacture);
- tr.appendChild(tdLatencyManufacture);
- tr.appendChild(tdActive);
- tbody.appendChild(tr);
- }
- hookupFieldsOrderItemDisplayOrder() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagDisplayOrder + ' input');
- }
- hookupFieldsOrderItemProductCategory() {
- this.hookupTableCellDdlPreviews(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductCategory
- , Utils.getListFromDict(productCategories)
- , (cellSelector) => { this.hookupProductCategoryDdls(cellSelector); }
- );
- }
- hookupFieldsOrderItemProduct() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagProduct, Utils.getListFromDict(products));
- }
- hookupFieldsOrderItemProductVariations() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductVariations, (event, element) => this.handleClickProductPermutationVariationsPreview(event, element));
- }
- hookupFieldsOrderItemUnitQuantity() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagUnitMeasurementQuantity, Utils.getListFromDict(unitMeasurements));
- }
- hookupFieldsOrderItemQuantityUsed() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityUsed + ' input');
- }
- hookupFieldsOrderItemQuantityProduced() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityProduced + ' input');
- }
- /*
- hookupFieldsOrderItemPriceTotalLocalVatExcl() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatExcl + ' input'
- , (event, element) => {
- this.handleChangeNestedElementCellTable(event, element);
- this.updateFieldsPriceUnitLocalVatExcl(element);
- }
- );
- }
- hookupFieldsOrderItemPriceTotalLocalVatIncl() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatIncl + ' input'
- , (event, element) => {
- this.handleChangeNestedElementCellTable(event, element);
- this.updateFieldsPriceUnitLocalVatIncl(element);
- }
- );
- }
- updateFieldsPriceUnitLocalVatExcl(elementChanged) {
- let row = elementChanged.closest('tr.' + flagOrderItems);
- let inputPriceTotalLocalVatExcl = row.querySelector('td.' + flagPriceTotalLocalVatExcl + ' input');
- let priceTotalLocalVatExcl = DOM.getElementValueCurrent(inputPriceTotalLocalVatExcl);
- let inputQuantityUsed = row.querySelector('td.' + flagQuantityUsed + ' input');
- let quantityUsed = DOM.getElementValueCurrent(inputQuantityUsed);
-
- let divPriceUnitLocalVatExcl = row.querySelector('td.' + flagPriceUnitLocalVatExcl + ' div');
- let priceUnitLocalVatExcl = quantityUsed == 0 ? 0 : priceTotalLocalVatExcl / quantityUsed;
- DOM.setElementValuesCurrentAndPrevious(divPriceUnitLocalVatExcl, priceUnitLocalVatExcl);
-
- let rowManufacturingPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
- let divPriceGrandTotalLocalVatExcl = rowManufacturingPurchaseOrder.querySelector('td.' + flagPriceTotalLocalVatExcl + ' div');
- let inputsPriceTotalLocalVatExcl = rowManufacturingPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatExcl + ' input');
- let priceGrandTotalLocalVatExcl = Array.from(inputsPriceTotalLocalVatExcl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0);
- DOM.setElementValueCurrent(divPriceGrandTotalLocalVatExcl, priceGrandTotalLocalVatExcl);
- }
- updateFieldsPriceUnitLocalVatIncl(elementChanged) {
- let row = elementChanged.closest('tr.' + flagOrderItems);
- let inputPriceTotalLocalVatIncl = row.querySelector('td.' + flagPriceTotalLocalVatIncl + ' input');
- let priceTotalLocalVatIncl = DOM.getElementValueCurrent(inputPriceTotalLocalVatIncl);
- let inputQuantityUsed = row.querySelector('td.' + flagQuantityUsed + ' input');
- let quantityUsed = DOM.getElementValueCurrent(inputQuantityUsed);
-
- let divPriceUnitLocalVatIncl = row.querySelector('td.' + flagPriceUnitLocalVatIncl + ' div');
- let priceUnitLocalVatIncl = quantityUsed == 0 ? 0 : priceTotalLocalVatIncl / quantityUsed;
- DOM.setElementValuesCurrentAndPrevious(divPriceUnitLocalVatIncl, priceUnitLocalVatIncl);
-
- let rowManufacturingPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
- let divPriceGrandTotalLocalVatIncl = rowManufacturingPurchaseOrder.querySelector('td.' + flagPriceTotalLocalVatIncl + ' div');
- let inputsPriceTotalLocalVatIncl = rowManufacturingPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatIncl + ' input');
- let priceGrandTotalLocalVatIncl = Array.from(inputsPriceTotalLocalVatIncl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0);
- DOM.setElementValueCurrent(divPriceGrandTotalLocalVatIncl, priceGrandTotalLocalVatIncl);
- }
- hookupFieldsOrderItemPriceUnitLocalVatExcl() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceUnitLocalVatExcl + ' input');
- }
- hookupFieldsOrderItemPriceUnitLocalVatIncl() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceUnitLocalVatIncl + ' input');
- }
- */
- hookupFieldsOrderItemUnitMeasurementLatencyManufacture() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagUnitMeasurementLatencyManufacture, Utils.getListFromDict(unitMeasurementsTime));
- }
- hookupFieldsOrderItemLatencyManufacture() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagLatencyManufacture + ' input');
- }
- hookupFieldsOrderItemActive() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' input.' + flagActive);
- }
- hookupFieldsOrderItemAddDelete() {
- let selectorButton = idTableMain + ' td.' + flagOrderItems + ' td.' + flagOrderItems + ' button';
- let selectorButtonDelete = selectorButton + '.' + flagDelete;
- let selectorButtonUndelete = selectorButton + '.' + flagAdd;
- this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsOrderItemAdd();
- }
- hookupButtonsOrderItemAdd() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' th button.' + flagAdd, (event, element) => {
- let row = element.closest(idTableMain + ' > tbody > tr');
- let idManufacturingPurchaseOrder = row.getAttribute(attrIdManufacturingPurchaseOrder);
- // let hasActiveOrderItem = row.querySelectorAll('td.' + flagOrderItems + ' input.' + flagActive + ':checked').length > 0;
- let countManufacturingOrderItems = row.querySelectorAll('td.' + flagOrderItems + ' td.' + flagManufacturingPurchaseOrder).length;
- let manufacturingPurchaseOrderItem = {
- [attrIdManufacturingPurchaseOrder]: idManufacturingPurchaseOrder,
- [attrIdManufacturingPurchaseOrderProductLink]: -1 - countManufacturingOrderItems,
- [attrIdProductCategory]: 0,
- [attrIdProduct]: 0,
- [flagProductVariations]: '',
- [attrIdUnitMeasurementQuantity]: 0,
- [flagQuantityUsed]: '',
- [flagQuantityProduced]: '',
- [attrIdUnitMeasurementLatencyManufacture]: 0,
- [flagLatencyManufacture]: '',
- [flagDisplayOrder]: countManufacturingOrderItems + 1,
- [flagActive]: true, // !hasActiveOrderItem,
- };
- let tbody = row.querySelector('td.' + flagOrderItems + ' table tbody');
- this.addRowManufacturingPurchaseOrderItem(tbody, manufacturingPurchaseOrderItem);
- /*
- if (!hasActiveOrderItem) {
- let tdOrderItem = row.querySelector('td.' + flagOrderItems);
- // tdOrderItem.setAttribute(attrIdManufacturingOrderItem, manufacturingPurchaseOrderItem[attrIdManufacturingOrderItem]);
- DOM.setElementAttributeValueCurrent(tdOrderItem, manufacturingPurchaseOrderItem[attrIdManufacturingOrderItem]);
- }
- */
- this.hookupOrderItemsFields();
- });
- }
-
- leave() {
- super.leave();
- }
-}
-
diff --git a/static/js/pages/store/mixin.js b/static/js/pages/store/mixin.js
deleted file mode 100644
index 1496389c..00000000
--- a/static/js/pages/store/mixin.js
+++ /dev/null
@@ -1,452 +0,0 @@
-
-import Events from "../../lib/events.js";
-import LocalStorage from "../../lib/local_storage.js";
-import Validation from "../../lib/validation.js";
-// import BasePage from "../base.js";
-import DOM from "../../dom.js";
-import { isEmpty } from "../../lib/utils.js";
-
-export default class StoreMixinPage {
- constructor(pageCurrent) {
- this.page = pageCurrent;
- }
-
- initialize() {
- console.log('hookup store start for ', this.page.hash);
- this.hookupFilters();
- this.hookupLocalStorageStore();
- this.hookupBasket();
- this.hookupButtonsAddToBasket();
- }
- hookupFilters() {
- this.hookupFilterCurrency();
- this.hookupFilterDeliveryRegion();
- this.hookupFilterIsIncludedVAT();
- }
- hookupFilterCurrency() {
- /*
- let elForm = document.querySelectorAll(idFormCurrency);
- let elSelector = document.querySelectorAll(elForm.querySelector('select')[0]);
- Events.initialiseEventHandler(elSelector, flagInitialised, function(){
- elForm = document.querySelectorAll(idFormCurrency);
- elSelector.addEventListener("change", function(event) {
- ajaxData = {};
- ajaxData[flagForm] = convertForm2JSON(elForm);
- console.log('sending data to currency selector controller: '); console.log(ajaxData);
- ajaxJSONData('select currency', mapHashToController(hashStoreSelectCurrency), ajaxData, function() { window.location.reload() }, false);
-
- let optionSelected = elSelector.options[elSelector.selectedIndex]
- let textSelected = optionSelected.getAttribute(attrDataShort)
-
- });
- });
- console.log("form currency initialised")
- */
-
- let dropdownCurrency = document.querySelectorAll(idCurrency)[0];
- // dropdownCurrency.options.map(function(option) {
- let option, indexHyphen, textOption;
- for (let indexOption = 0; indexOption < dropdownCurrency.options.length; indexOption++) {
- option = document.querySelectorAll(dropdownCurrency.options[indexOption]);
- textOption = option.text();
- indexHyphen = textOption.indexOf('-');
- option.setAttribute(attrTextExpanded, textOption);
- option.setAttribute(attrTextCollapsed, textOption.substring(0, indexHyphen - 1));
- option.classList.add(flagCollapsed);
- }
- handleSelectCollapse(dropdownCurrency);
- Events.initialiseEventHandler(dropdownCurrency, flagInitialised, function() {
- dropdownCurrency = document.querySelectorAll(dropdownCurrency);
- dropdownCurrency.addEventListener("focus", function() {
- handleSelectExpand(dropdownCurrency);
- });
- dropdownCurrency.addEventListener("blur", function() {
- handleSelectCollapse(dropdownCurrency);
- });
- dropdownCurrency.addEventListener("change", function() {
- let selectedCurrency = dropdownCurrency.val();
- if (_verbose) { console.log("selected currency: ", selectedCurrency); }
- let basket = LocalStorage.getLocalStorage(keyBasket);
- basket[keyIdCurrency] = selectedCurrency;
- // LocalStorage.setLocalStorage(keyIdCurrency, selectedCurrency);
- LocalStorage.setLocalStorage(keyBasket, basket);
- let ajaxData = {};
- ajaxData[keyBasket] = basket;
- ajaxJSONData('update currency', mapHashToController(hashPageCurrent), ajaxData, loadPageBody, false);
- });
- });
- }
- hookupFilterDeliveryRegion() {
- /*
- let elForm = document.querySelectorAll(idFormDeliveryRegion);
- let elSelector = document.querySelectorAll(elForm.querySelector('select')[0]);
- Events.initialiseEventHandler(elSelector, flagInitialised, function(){
- elForm = document.querySelectorAll(idFormDeliveryRegion);
- elSelector.addEventListener("change", function(event) {
- ajaxData = {};
- ajaxData[flagForm] = convertForm2JSON(elForm);
- console.log('sending data to delivery region selector controller: '); console.log(ajaxData);
- ajaxJSONData('select delivery region', mapHashToController(hashStoreSelectDeliveryRegion), ajaxData, function() { window.location.reload() }, false);
- });
- console.log("form delivery region initialised")
- });
- */
-
- let dropdownRegion = document.querySelectorAll(idRegionDelivery)[0];
-
- let option, indexHyphen, textOption;
- for (let indexOption = 0; indexOption < dropdownRegion.options.length; indexOption++) {
- option = document.querySelectorAll(dropdownRegion.options[indexOption]);
- textOption = option.text();
- indexHyphen = textOption.indexOf('-');
- option.setAttribute(attrTextExpanded, textOption);
- option.setAttribute(attrTextCollapsed, textOption.substring(0, indexHyphen - 1));
- option.classList.add(flagCollapsed);
- }
-
- handleSelectCollapse(dropdownRegion);
-
- Events.initialiseEventHandler(dropdownRegion, flagInitialised, function() {
- dropdownRegion = document.querySelectorAll(dropdownRegion);
- dropdownRegion.addEventListener("focus", function() {
- if (_verbose) { console.log("dropdown region focused"); }
- handleSelectExpand(dropdownRegion);
- });
- dropdownRegion.addEventListener("blur", function() {
- if (_verbose) { console.log("dropdown region blurred"); }
- handleSelectCollapse(dropdownRegion);
- });
- dropdownRegion.addEventListener("change", function() {
- handleSelectCollapse(dropdownRegion);
- let selectedRegion = dropdownRegion.val();
- if (_verbose) { console.log("selected region: ", selectedRegion); }
- let basket = LocalStorage.getLocalStorage(keyBasket);
- basket[keyIdRegionDelivery] = selectedRegion;
- // LocalStorage.setLocalStorage(keyIdRegionDelivery, selectedRegion);
- LocalStorage.setLocalStorage(keyBasket, basket);
- let ajaxData = {};
- ajaxData[keyIdRegionDelivery] = selectedRegion;
- ajaxJSONData('update region', mapHashToController(hashStoreSetRegion), ajaxData, null, false);
- });
- });
- }
- hookupFilterIsIncludedVAT() {
- let elForm = document.querySelectorAll(idFormIsIncludedVAT);
- let elSelector = document.querySelectorAll(elForm.querySelector('input[type="checkbox"]')[0]);
- Events.initialiseEventHandler(elSelector, flagInitialised, function(){
- elForm = document.querySelectorAll(idFormIsIncludedVAT);
- elSelector.addEventListener("change", function(event) {
- ajaxData = {};
- ajaxData[flagForm] = convertForm2JSON(elForm);
- if (_verbose) {
- console.log('sending data to include VAT controller: ');
- console.log(ajaxData);
- }
- ajaxJSONData('set include VAT', mapHashToController(hashStoreSetIsIncludedVAT), ajaxData, function() { window.location.reload() }, false);
- });
- if (_verbose) { console.log("form is included VAT initialised"); }
- });
- }
- hookupLocalStorage() {
-
- // setupPageLocalStorage(hashPageCurrent);
- // let lsPage = getPageLocalStorage(hashPageCurrent);
- // let d = {}
- // d[keyBasket] = LocalStorage.getLocalStorage(keyBasket); // (keyBasket in lsPage) ? lsPage[keyBasket] : {'items': []};
- // console.log('d:'); console.log(d);
- let basketLocalStorage = LocalStorage.getLocalStorage(keyBasket);
- if (!StoreMixinPage.validateBasket(basketLocalStorage)) {
- if (_verbose) { console.log('locally-stored basket not valid'); }
- basketLocalStorage = StoreMixinPage.makeNewBasket();
- }
- let basketServer = StoreMixinPage.validateBasket(userBasket) ? userBasket : basketLocalStorage;
- let basket = StoreMixinPage.areEqualBaskets(basketLocalStorage, basketServer) ? basketServer : StoreMixinPage.mergeBaskets(basketLocalStorage, basketServer);
- if (!StoreMixinPage.areEqualBaskets(basketLocalStorage, basket)) {
- LocalStorage.setLocalStorage(keyBasket, basket);
- }
- if (!StoreMixinPage.areEqualBaskets(basketServer, basket)) {
- /*
- let ajaxData = {}
- ajaxData[keyBasket] = basket;
- // console.log("hookupLocalStorageStore\nhashStoreBasketLoad: " + hashStoreBasketLoad + "\n");
- // ajaxData[keyIsIncludedVAT] = LocalStorage.getLocalStorage(keyIsIncludedVAT);
- console.log('ajax:' + ajaxData);
- ajaxJSONData(keyBasket, mapHashToController(hashStoreBasketLoad), ajaxData, loadBasket, false);
- */
- API.saveStoreBasket(basket);
- }
- userBasket = basket;
- }
- static validateBasket(basket) {
- return (
- Validation.isEmpty(basket) &&
- Validation.dictHasKey(basket, keyItems) &&
- Validation.dictHasKey(basket, keyIsIncludedVAT) &&
- Validation.dictHasKey(basket, keyIdCurrency) &&
- Validation.dictHasKey(basket, keyIdRegionDelivery)
- );
- }
- static makeNewBasket() {
- return {
- [keyItems]: [],
- [keyIsIncludedVAT]: true,
- [keyIdCurrency]: 1,
- [keyIdRegionDelivery]: 1
- };
- }
- static areEqualBaskets(basket1, basket2) {
- return JSON.stringify(basket1) === JSON.stringify(basket2);
- }
- static mergeBaskets(basketPrimary, basketSecondary) {
- let basket = {...basketSecondary, ...basketPrimary};
- let items = {};
- for (let item of basketSecondary[keyItems]) {
- items[item[keyIdPermutation]] = item.Quantity;
- }
- for (let item of basketPrimary[keyItems]) {
- items[item[keyIdPermutation]] = items[item[keyIdPermutation]] ? items[item[keyIdPermutation]] + item.Quantity : item.Quantity;
- }
- basket[keyItems] = Object.values(items);
- return basket;
- }
- hookupBasket() {
- // const containerBasket = document.querySelectorAll(idContainerBasket);
- this.toggleShowButtonCheckout(); // containerBasket
- this.hookupButtonCheckout();
- this.hookupBasketItemPlusAndMinusButtons();
- this.hookupBasketAddInputs();
- this.hookupBasketEditInputs();
- this.hookupDeleteBasketItemButtons();
- }
- toggleShowButtonCheckout() {
- if (_verbose) { console.log("toggling checkout button"); }
- const buttonCheckout = document.querySelectorAll(idButtonCheckout);
- const labelBasketEmpty = document.querySelectorAll(idLabelBasketEmpty);
- if (userBasket['items'].length == 0) {
- buttonCheckout.style.display = "none";
- labelBasketEmpty.style.display = "";
- } else {
- buttonCheckout.style.display = "";
- labelBasketEmpty.style.display = "none";
- }
- }
- hookupButtonCheckout() {
- if (_verbose) { console.log("hooking up checkout button"); }
- const buttonCheckout = document.querySelectorAll(idButtonCheckout);
- // let lsPage = getPageLocalStorage(hashPageCurrent);
- Events.initialiseEventHandler(buttonCheckout, flagInitialised, function() {
- buttonCheckout.addEventListener("click", function() {
- /*
- //setupPageLocalStorageNext(hashPageStoreBasket);
- let basket = LocalStorage.getLocalStorage(keyBasket);
- // goToPage(hashPageStoreBasket);
- let ajaxData = {};
- ajaxData[keyBasket] = basket;
-
- ajaxJSONData('checkout', mapHashToController(hashPageStoreBasket), ajaxData, null, false);
- */
- this.router.navigateToHash(hashPageStoreBasket);
- });
- });
- }
- hookupBasketItemPlusAndMinusButtons() {
- const minVal = 1;
- const basket = document.querySelector(idFormBasket);
- // Basket Add
- // Increment
- basket.querySelectorAll('div.btn-increment[' + attrFormType + '=' + typeFormBasketAdd + ']').each(function() {
- let elButton = this;
- Events.initialiseEventHandler(elButton, flagInitialised, function(){
- elButton.addEventListener("click", function(event) {
- event.preventDefault();
- event.stopPropagation();
- let elInput = document.querySelectorAll(getFormProductSelector(typeFormBasketAdd, elButton)).querySelector('input[type="number"]');
- // console.log('input selector ='); console.log('form[' + attrFormType + '=' + elButton.getAttribute(attrFormType) + '][' + attrIdProduct + '=' + elButton.getAttribute(attrIdProduct) + ']');
- let newVal = parseInt(DOM.getElementValueCurrent(elInput));
- if (isNaN(newVal)) newVal = minVal;
- newVal += 1;
- elInput.val(newVal);
- });
- });
- });
- // Decrement
- basket.querySelectorAll('div.btn-decrement[' + attrFormType + '=' + typeFormBasketAdd + ']').each(function() {
- let elButton = this;
- Events.initialiseEventHandler(elButton, flagInitialised, function(){
- elButton.addEventListener("click", function(event) {
- event.preventDefault();
- event.stopPropagation();
- // let product = document.querySelectorAll('.card.subcard[' + attrIdProduct +'=' + elButton.getAttribute(attrIdProduct) + ']');
- let elInput= document.querySelectorAll(getFormProductSelector(typeFormBasketAdd, elButton)).querySelector('input[type="number"]');
- let newVal = parseInt(DOM.getElementValueCurrent(elInput));
- if (isNaN(newVal)) newVal = minVal;
- newVal = Math.max(minVal, newVal - 1);
- elInput.val(newVal);
- });
- });
- });
-
- // Basket Edit
- // Increment
- basket.querySelectorAll('div.btn-increment[' + attrFormType + '=' + typeFormBasketEdit + ']').each(function() {
- let elButton = this;
- Events.initialiseEventHandler(elButton, flagInitialised, function(){
- elButton.addEventListener("click", function(event) {
- event.stopPropagation();
- // basketItem = document.querySelectorAll('.card.subcard[' + attrIdProduct +'=' + elButton.getAttribute(attrIdProduct) + ']');
- let elInput = document.querySelectorAll(getFormProductSelector(typeFormBasketEdit, elButton)).querySelector('input[type="number"]');
- // console.log('input selector ='); console.log('form[' + attrFormType + '=' + elButton.getAttribute(attrFormType) + '][' + attrIdProduct + '=' + elButton.getAttribute(attrIdProduct) + ']');
- let newVal = parseInt(DOM.getElementValueCurrent(elInput));
- if (isNaN(newVal)) newVal = minVal;
- newVal += 1;
- elInput.val(newVal);
- elInput.trigger("change");
- });
- });
- });
- // Decrement
- basket.querySelectorAll('div.btn-decrement[' + attrFormType + '=' + typeFormBasketEdit + ']').each(function() {
- let elButton = this;
- Events.initialiseEventHandler(elButton, flagInitialised, function(){
- elButton.addEventListener("click", function(event) {
- event.stopPropagation();
- let elInput= document.querySelectorAll(getFormProductSelector(typeFormBasketEdit, elButton)).querySelector('input[type="number"]');
- let newVal = parseInt(DOM.getElementValueCurrent(elInput));
- if (isNaN(newVal)) newVal = minVal;
- newVal = Math.max(minVal, newVal - 1);
- elInput.val(newVal);
- elInput.trigger("change");
- });
- });
- });
- }
- hookupBasketAddForms() {
- let basketAddFormSelector = 'form[' + attrFormType + '=' + typeFormBasketAdd + ']';
- Events.initialiseEventHandler(basketAddFormSelector, flagInitialised, (basketAddForm) => {
- let quantityInput = basketAddForm.querySelector('input[type="number"]');
- quantityInput.addEventListener("change", function(event) {
- let newVal = parseInt(quantityInput.value);
- if (isNaN(newVal) || newVal < 0) {
- quantityInput.value = 0;
- }
- });
- let buttonSubmit = basketAddForm.querySelector('button'); // [type="submit"]
- buttonSubmit.addEventListener("click", (event) => {
- event.preventDefault();
- event.stopPropagation();
- let newBasketItem = {};
- newBasketItem[keyIdProductPermutation] = basketAddForm.getAttribute(attrIdPermutation);
- newBasketItem[keyQuantity] = quantityInput.value;
- API.storeAddToBasket(newBasketItem);
- });
- });
- }
- hookupBasketEditForms() {
- let basketEditFormSelector = 'form[' + attrFormType + '=' + typeFormBasketEdit + ']';
- Events.initialiseEventHandler(basketEditFormSelector, flagInitialised, (basketEditForm) => {
- let quantityInput = basketEditForm.querySelector('input[type="number"]');
- quantityInput.addEventListener("change", function(event) {
- let newVal = parseInt(quantityInput.value);
- if (isNaN(newVal) || newVal < 0) {
- quantityInput.value = 0;
- }
- if (quantityInput.value != basketEditForm.getAttribute(attrQuantity)) {
- let newBasketItem = {};
- newBasketItem[keyIdProductPermutation] = basketEditForm.getAttribute(attrIdPermutation);
- newBasketItem[keyQuantity] = quantityInput.value;
- API.storeSaveBasket(newBasketItem);
- }
- });
- let deleteButton = basketEditForm.querySelector('button'); // [type="button"]
- deleteButton.addEventListener("click", (event) => {
- event.preventDefault();
- event.stopPropagation();
- API.storeDeleteBasketItem(basketEditForm.getAttribute(attrIdPermutation));
- });
- });
- }
-
- loadBasket(response) {
- userBasket = response.data[keyBasket];
- let basketForm = document.querySelectorAll(idFormBasket);
- /*
- basketForm.replaceChildren();
- let items = userBasket[keyItems];
- let basketItem;
- items.forEach(item => {
- basketItem = document.createElement('div');
- basketForm.appendChild(basketItem);
- });
- */
- let htmlBlock = response.data[keyHtmlBlock];
- basketForm.innerHTML = htmlBlock;
- this.hookupBasket();
- }
-
- getCurrencySelected() {
- let elementSelectorCurrency = document.querySelectorAll(idSelectorCurrency);
- let selectedCurrency = elementSelectorCurrency.val();
- if (_verbose) { console.log("selected currency: ", selectedCurrency); }
- return selectedCurrency;
- }
-
- hookupStoreCardsProduct() {
-
- let d; // , lsShared;
- let selectorCardProduct = '.card.subcard';
- Events.initialiseEventHandler(selectorCardProduct, flagInitialised, function(cardProduct) {
- if (_verbose) { console.log("initialising product card: ", cardProduct); }
- cardProduct.addEventListener("click", function(event) {
- // d = { keyIdProduct: product.getAttribute(attrIdProduct) }
- var elemClicked = event.target;
- if (elemClicked.id != 'submit') { // disable for submit buttons
- if (_verbose) {
- console.log("product click: " + cardProduct.getAttribute(attrIdProduct));
- console.log("permutation click: " + cardProduct.getAttribute(attrIdPermutation));
- }
- var d = {}
- d[keyIdProduct] = cardProduct.getAttribute(attrIdProduct)
- d[keyIdPermutation] = cardProduct.getAttribute(attrIdPermutation)
- // send quantity requested
- goToPage(hashPageStoreProduct, d);
- }
- });
- if (_verbose) { console.log("click method added for product ID: " + cardProduct.getAttribute(attrIdProduct) + ', permutation ID: ', cardProduct.getAttribute(attrIdPermutation)); }
- });
- }
-
- leave() {}
-
- /*
- getFormProductSelector(typeForm, elementInForm) {
- idPermutation = elementInForm.getAttribute(attrIdPermutation);
- console.log('idPermutation: ', idPermutation);
- hasPermutation = !Validation.isEmpty(idPermutation);
- console.log('has permutation: ', hasPermutation);
- selectorIdPermutation = hasPermutation ? '[' + attrIdPermutation + '=' + idPermutation + ']' : '';
- return 'form[' + attrFormType + '="' + typeForm + '"][' + attrIdProduct + '=' + elementInForm.getAttribute(attrIdProduct) + ']' + selectorIdPermutation;
- }
-
- addMetadataBasketToJSON(jsonData) {
- jsonData[keyIdCurrency] = LocalStorage.getLocalStorage(keyIdCurrency);
- jsonData[keyIdRegionDelivery] = LocalStorage.getLocalStorage(keyIdRegionDelivery);
- jsonData[keyIsIncludedVAT] = LocalStorage.getLocalStorage(keyIsIncludedVAT);
- return jsonData;
- }
- */
-
- /*
- loadFiltersFromLocalStorage(pageHash, parameters_dict) {
-
- let lsOld = getPageLocalStorage(pageHashCurrent);
- pageHashCurrent = pageHash;
- clearPageLocalStorage(pageHashCurrent);
- setupPageLocalStorage(pageHashCurrent);
- let lsNew = getPageLocalStorage(pageHashCurrent);
- lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};
- setPageLocalStorage(pageHashCurrent, lsNew);
-
- goToPage(pageHash, parameters_dict);
- }
- */
-}
diff --git a/static/js/pages/store/mixin_table.js b/static/js/pages/store/mixin_table.js
deleted file mode 100644
index 5fe392d6..00000000
--- a/static/js/pages/store/mixin_table.js
+++ /dev/null
@@ -1,25 +0,0 @@
-
-import Events from "../../lib/events.js";
-import LocalStorage from "../../lib/local_storage.js";
-import Validation from "../../lib/validation.js";
-// import BasePage from "../base.js";
-import DOM from "../../dom.js";
-import { isEmpty } from "../../lib/utils.js";
-import StoreMixinPage from "./mixin.js";
-
-export default class StoreTableMixinPage extends StoreMixinPage {
- constructor(pageCurrent) {
- super(pageCurrent);
- }
- initialize() {
- super.initialize();
- this.hookupFilters();
- this.hookupTable();
- }
- hookupFilters() {
- // Implement filter-specific functionality here
- }
- hookupTable() {
- // Implement table-specific functionality here
- }
-}
\ No newline at end of file
diff --git a/static/js/pages/store/product_categories.js b/static/js/pages/store/product_categories.js
deleted file mode 100644
index fba6d1d4..00000000
--- a/static/js/pages/store/product_categories.js
+++ /dev/null
@@ -1,132 +0,0 @@
-
-import Events from "../../lib/events.js";
-import TableBasePage from "../base_table.js";
-import API from "../../api.js";
-import DOM from "../../dom.js";
-import StoreTableMixinPage from "./mixin_table.js";
-
-export default class PageStoreProductCategories extends TableBasePage {
- static hash = hashPageStoreProductCategories;
- static attrIdRowObject = attrIdProductCategory;
- callSaveTableContent = API.saveCategories;
-
- constructor(router) {
- super(router);
- this.storeMixin = new StoreTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterIsNotEmpty();
- this.hookupFilterActive();
- }
- hookupFilterIsNotEmpty() {
- this.hookupEventHandler("change", idFormFilters + ' .' + flagIsNotEmpty, (event, filter) => {
- PageStoreProductCategories.isDirtyFilter(filter);
- });
- }
-
- loadRowTable(rowJson) {
- if (rowJson == null) return;
- if (_verbose) { console.log("applying data row: ", rowJson); }
- let row = _rowBlank.cloneNode(true);
- row.classList.remove(flagRowNew);
- row.classList.remove(flagInitialised);
- row.querySelectorAll('.' + flagInitialised).forEach(function(element) {
- element.classList.remove(flagInitialised);
- });
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- let textareaCode = row.querySelector('td.' + flagCode + ' textarea');
- let textareaName = row.querySelector('td.' + flagName + ' textarea');
- let textareaDescription = row.querySelector('td.' + flagDescription + ' textarea');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let divAccessLevel = tdAccessLevel.querySelector('div.' + flagAccessLevel);
- let inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
-
- DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, rowJson[flagDisplayOrder]);
- DOM.setElementValuesCurrentAndPrevious(textareaCode, rowJson[flagCode]);
- DOM.setElementValuesCurrentAndPrevious(textareaName, rowJson[flagName]);
- DOM.setElementValuesCurrentAndPrevious(textareaDescription, rowJson[flagDescription]);
- tdAccessLevel.setAttribute(attrIdAccessLevel, rowJson[attrIdAccessLevel]);
- tdAccessLevel.setAttribute(flagAccessLevelRequired, rowJson[flagAccessLevelRequired]);
- divAccessLevel.setAttribute(attrIdAccessLevel, rowJson[attrIdAccessLevel]);
- DOM.setElementValuesCurrentAndPrevious(divAccessLevel, rowJson[attrIdAccessLevel]);
- divAccessLevel.textContent = rowJson[flagAccessLevelRequired];
- DOM.setElementValuesCurrentAndPrevious(inputActive, rowJson[flagActive]);
- row.setAttribute(rowJson[flagKeyPrimary], rowJson[rowJson[flagKeyPrimary]]);
-
- let table = TableBasePage.getTableMain();
- let bodyTable = table.querySelector('tbody');
- bodyTable.appendChild(row);
- }
- getJsonRow(row) {
- if (row == null) return;
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- let textareaCode = row.querySelector('td.' + flagCode + ' textarea');
- let textareaName = row.querySelector('td.' + flagName + ' textarea');
- let textareaDescription = row.querySelector('td.' + flagDescription + ' textarea');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonCategory = {};
- jsonCategory[attrIdProductCategory] = row.getAttribute(attrIdProductCategory);
- jsonCategory[flagCode] = DOM.getElementAttributeValueCurrent(textareaCode);
- jsonCategory[flagName] = DOM.getElementAttributeValueCurrent(textareaName);
- jsonCategory[flagDescription] = DOM.getElementAttributeValueCurrent(textareaDescription);
- // jsonCategory[flagAccessLevelRequired] = tdAccessLevel.getAttribute(flagAccessLevelRequired);
- jsonCategory[attrIdAccessLevel] = DOM.getElementAttributeValueCurrent(tdAccessLevel);
- jsonCategory[flagActive] = buttonActive.classList.contains(flagDelete);
- jsonCategory[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(sliderDisplayOrder);
- return jsonCategory;
- }
- initialiseRowNew(tbody, row) {
- if (row == null) return;
- this.initialiseSliderDisplayOrderRowNew(tbody, row);
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupSlidersDisplayOrderTable();
- this.hookupTextareasCodeTable();
- this.hookupTextareasNameTable();
- this.hookupTextareasDescriptionTable();
- this.hookupTdsAccessLevel();
- this.hookupFieldsActive();
- }
-
- /*
- isDirtyRow(row) {
- if (row == null) return false;
- console.log("Product Category isDirtyRow");
- console.log("row: ", row);
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder);
- let inputCode = row.querySelector('td.' + flagCode + ' textarea');
- let inputName = row.querySelector('td.' + flagName + ' textarea');
- let inputDescription = row.querySelector('td.' + flagDescription + ' textarea');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
- let isDirty = sliderDisplayOrder.classList.contains(flagDirty) || inputCode.classList.contains(flagDirty) || inputName.classList.contains(flagDirty) ||
- inputDescription.classList.contains(flagDirty) || tdAccessLevel.classList.contains(flagDirty) || inputActive.classList.contains(flagDirty);
- DOM.handleDirtyElement(row, isDirty);
- return isDirty;
- }
- */
-
- leave() {
- super.leave();
- }
-
- /*
- getFiltersDefaults() {
- filters = {};
- filters.flagIsNotEmpty = true;
- filters.flagActive = true;
- return filters;
- }
- */
-}
-
diff --git a/static/js/pages/store/product_permutations.js b/static/js/pages/store/product_permutations.js
deleted file mode 100644
index 6a64c4e6..00000000
--- a/static/js/pages/store/product_permutations.js
+++ /dev/null
@@ -1,361 +0,0 @@
-
-import API from "../../api.js";
-import BusinessObjects from "../../lib/business_objects/business_objects.js";
-import DOM from "../../dom.js";
-import Events from "../../lib/events.js";
-import TableBasePage from "../base_table.js";
-import Utils from "../../lib/utils.js";
-import Validation from "../../lib/validation.js";
-import StoreTableMixinPage from "./mixin_table.js";
-
-export default class PageStoreProductPermutations extends TableBasePage {
- static hash = hashPageStoreProductPermutations;
- static attrIdRowObject = attrIdProductPermutation;
- callSaveTableContent = API.saveProductPermutations;
-
- constructor(router) {
- super(router);
- this.storeMixin = new StoreTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterProductCategory();
- this.hookupFilterProduct();
- this.hookupFilterOutOfStock();
- this.hookupFilterMinStock();
- this.hookupFilterMaxStock();
- }
- hookupFilterProductCategory() {
- this.hookupFilter(flagProductCategory, (event, filterCategory) => {
- // loadPermutations();
- // let wasDirtyFilter = filterCategory.classList.contains(flagDirty);
- PageStoreProductPermutations.isDirtyFilter(filterCategory);
- let isDirtyFilter = filterCategory.classList.contains(flagDirty);
- let idProductCategory = DOM.getElementValueCurrent(filterCategory);
- let products = productCategories[idProductCategory];
- let filterProduct = document.querySelector(idFormFilters + ' .' + flagProduct);
- let idProductPrevious = filterProduct.getAttribute(attrValuePrevious);
- filterProduct.innerHTML = '';
- let optionJson, option;
- option = DOM.createOption(null);
- filterProduct.appendChild(option);
- products.forEach((product) => {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(product, idProductPrevious);
- option = DOM.createOption(optionJson);
- filterProduct.appendChild(option);
- });
- filterProduct.dispatchEvent(new Event('change'));
- });
- }
- hookupFilterProduct() {
- this.hookupFilter(flagProduct);
- }
- hookupFilterOutOfStock() {
- this.hookupFilter(flagIsOutOfStock);
- }
- hookupFilterMinStock() {
- this.hookupFilter(flagQuantityMin);
- }
- hookupFilterMaxStock() {
- this.hookupFilter(flagQuantityMax);
- }
-
- loadRowTable(rowJson) {
- if (rowJson == null) return;
- if (_verbose) { console.log("applying data row: ", rowJson); }
- /*
- let tableMain = TableBasePage.getTableMain();
- let row = _rowBlank.cloneNode(true);
- row.classList.remove(flagRowNew);
- let dllCategory = row.querySelector('td.' + flagProductCategory + ' select');
- dllCategory.value = rowJson[attrIdProductCategory];
- let ddlProduct = row.querySelector('td.' + flagProduct + ' select');
- let optionJson, option;
- listProducts.forEach(function(product) {
- if (product[attrIdProductCategory] != rowJson[attrIdProductCategory]) return;
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(product);
- option = DOM.createOption(optionJson, rowJson[attrIdProduct]);
- ddlProduct.appendChild(option);
- });
- ddlProduct.value = rowJson[attrIdProduct];
- row.querySelector('td.' + flagProductVariations + ' textarea').value = rowJson[flagProductVariations];
- let tdProductVariations = row.querySelector('td.' + flagProductVariations);
- let textareaProductVariations = tdProductVariations.querySelector('textarea');
- DOM.setElementValuesCurrentAndPrevious(textareaProductVariations, rowJson[flagProductVariations]);
- let thProductVariations = row.querySelector('td.' + flagProductVariations);
- if (!thProductVariations.classList.contains(flagCollapsed)) tdProductVariations.classList.remove(flagCollapsed);
- let inputDescription = row.querySelector('td.' + flagDescription + ' textarea');
- DOM.setElementValuesCurrentAndPrevious(inputDescription, rowJson[flagDescription]);
- let inputCostLocal = row.querySelector('td.' + flagCostLocal + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputCostLocal, rowJson[flagCostLocal]);
- let tdCurrencyCost = row.querySelector('td.' + flagCurrencyCost);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdCurrencyCost, rowJson[flagCurrencyCost]);
- let ddlCurrencyCost = tdCurrencyCost.querySelector('select');
- DOM.setElementValuesCurrentAndPrevious(ddlCurrencyCost, rowJson[flagCurrencyCost]);
- let inputProfitLocalMin = row.querySelector('td.' + flagProfitLocalMin + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputProfitLocalMin, rowJson[flagProfitLocalMin]);
- let inputLatencyManufactureDays = row.querySelector('td.' + flagLatencyManufacture + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputLatencyManufactureDays, rowJson[flagLatencyManufacture]);
- let inputQuantityStock = row.querySelector('td.' + flagQuantityStock + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputQuantityStock, rowJson[flagQuantityStock]);
- let inputQuantityMin = row.querySelector('td.' + flagQuantityMin + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputQuantityMin, rowJson[flagQuantityMin]);
- let inputQuantityMax = row.querySelector('td.' + flagQuantityMax + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputQuantityMax, rowJson[flagQuantityMax]);
- let inputQuantityStep = row.querySelector('td.' + flagCountUnitMeasurementPerQuantityStep + ' input');
- DOM.setElementValuesCurrentAndPrevious(inputQuantityStep, rowJson[flagCountUnitMeasurementPerQuantityStep]);
-
-
-
- row.querySelector('td.' + flagQuantityStock + ' input').value = rowJson[flagQuantityStock];
- row.querySelector('td.' + flagQuantityMin + ' input').value = rowJson[flagQuantityMin];
- row.querySelector('td.' + flagQuantityMax + ' input').value = rowJson[flagQuantityMax];
- row.querySelector('td.' + flagCostLocal).innerHTML = rowJson[flagCostLocal];
- row.setAttribute(attrIdProductCategory, rowJson[flagProductCategory]);
- row.setAttribute(attrIdProduct, rowJson[flagProduct]);
- row.setAttribute(attrIdProductPermutation, rowJson[attrIdProductPermutation]);
- let tbody = tableMain.querySelector('tbody');
- tbody.appendChild(row);
- */
- }
- getJsonRow(row) {
- if (row == null) return;
- let tdProductCategory = row.querySelector('td.' + flagProductCategory);
- let tdProduct = row.querySelector('td.' + flagProduct);
- let tdProductVariations = row.querySelector('td.' + flagProductVariations);
- let inputDescription = row.querySelector('td.' + flagDescription + ' textarea');
- // let inputCostLocalVatExcl = row.querySelector('td.' + flagCostUnitLocalVatExcl + ' input');
- // let inputCostLocalVatIncl = row.querySelector('td.' + flagCostUnitLocalVatIncl + ' input');
- let tdCurrencyCost = row.querySelector('td.' + flagCurrencyCost);
- let inputProfitLocalMin = row.querySelector('td.' + flagProfitLocalMin + ' input');
- let inputLatencyManufactureDays = row.querySelector('td.' + flagLatencyManufacture + ' input');
- let inputQuantityStock = row.querySelector('td.' + flagQuantityStock + ' input');
- let inputQuantityMin = row.querySelector('td.' + flagQuantityMin + ' input');
- let inputQuantityMax = row.querySelector('td.' + flagQuantityMax + ' input');
- let inputQuantityStep = row.querySelector('td.' + flagCountUnitMeasurementPerQuantityStep + ' input');
- let tdUnitMeasurementQuantity = row.querySelector('td.' + flagUnitMeasurementQuantity);
- let checkboxIsSubscription = row.querySelector('td.' + flagIsSubscription + ' input');
- let inputCountIntervalRecurrence = row.querySelector('td.' + flagCountUnitMeasurementIntervalRecurrence + ' input');
- let tdUnitMeasurementIntervalRecurrence = row.querySelector('td.' + flagUnitMeasurementIntervalRecurrence);
- let inputIdStripeProduct = row.querySelector('td.' + flagIdStripeProduct + ' input');
- let checkboxDoesExpireFasterOnceUnsealed = row.querySelector('td.' + flagDoesExpireFasterOnceUnsealed + ' input');
- let inputCountIntervalExpirationUnsealed = row.querySelector('td.' + flagCountUnitMeasurementIntervalExpirationUnsealed + ' input');
- let tdUnitMeasurementIntervalExpirationUnsealed = row.querySelector('td.' + flagUnitMeasurementIntervalExpirationUnsealed);
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdProductPermutation] = row.getAttribute(attrIdProductPermutation);
- jsonRow[attrIdProductCategory] = tdProductCategory.getAttribute(attrValueCurrent);
- jsonRow[attrIdProduct] = tdProduct.getAttribute(attrValueCurrent);
- jsonRow[flagProductVariations] = tdProductVariations.getAttribute(attrValueCurrent);
- jsonRow[flagHasVariations] = jsonRow[flagProductVariations] != '';
- jsonRow[flagDescription] = inputDescription.getAttribute(attrValueCurrent);
- // jsonRow[flagCostUnitLocalVatExcl] = inputCostLocalVatExcl.getAttribute(attrValueCurrent);
- // jsonRow[flagCostUnitLocalVatIncl] = inputCostLocalVatIncl.getAttribute(attrValueCurrent);
- jsonRow[flagCurrencyCost] = tdCurrencyCost.getAttribute(attrValueCurrent);
- jsonRow[flagProfitLocalMin] = inputProfitLocalMin.getAttribute(attrValueCurrent);
- jsonRow[flagLatencyManufacture] = inputLatencyManufactureDays.getAttribute(attrValueCurrent);
- jsonRow[flagQuantityStock] = inputQuantityStock.getAttribute(attrValueCurrent);
- jsonRow[flagQuantityMin] = inputQuantityMin.getAttribute(attrValueCurrent);
- jsonRow[flagQuantityMax] = inputQuantityMax.getAttribute(attrValueCurrent);
- jsonRow[flagCountUnitMeasurementPerQuantityStep] = inputQuantityStep.getAttribute(attrValueCurrent);
- jsonRow[flagUnitMeasurementQuantity] = tdUnitMeasurementQuantity.getAttribute(attrValueCurrent);
- jsonRow[flagIsSubscription] = checkboxIsSubscription.getAttribute(attrValueCurrent);
- jsonRow[flagCountUnitMeasurementIntervalRecurrence] = inputCountIntervalRecurrence.getAttribute(attrValueCurrent);
- jsonRow[flagUnitMeasurementIntervalRecurrence] = tdUnitMeasurementIntervalRecurrence.getAttribute(attrValueCurrent);
- jsonRow[flagIdStripeProduct] = inputIdStripeProduct.getAttribute(attrValueCurrent);
- jsonRow[flagDoesExpireFasterOnceUnsealed] = checkboxDoesExpireFasterOnceUnsealed.getAttribute(attrValueCurrent);
- jsonRow[flagCountUnitMeasurementIntervalExpirationUnsealed] = inputCountIntervalExpirationUnsealed.getAttribute(attrValueCurrent);
- jsonRow[flagUnitMeasurementIntervalExpirationUnsealed] = tdUnitMeasurementIntervalExpirationUnsealed.getAttribute(attrValueCurrent);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- initialiseRowNew(tbody, row) {
- this.initialiseRowNewDdlsProductCategoryAndProduct(row);
-
- let checkboxIsSubscription = row.querySelector('td.' + flagIsSubscription + ' input');
- let checkboxDoesExpireFasterOnceUnsealed = row.querySelector('td.' + flagDoesExpireFasterOnceUnsealed + ' input');
- this.handleChangeCheckboxDoesExpireFasterOnceUnsealed(null, checkboxDoesExpireFasterOnceUnsealed);
- this.handleChangeCheckboxIsSubscription(null, checkboxIsSubscription);
- }
- initialiseRowNewDdlsProductCategoryAndProduct(row) {
- let ddlCategoryFilter = document.querySelector(idFormFilters + ' #' + attrIdProductCategory);
- let idProductCategoryFilter = DOM.getElementValueCurrent(ddlCategoryFilter);
- let hasCategoryFilter = !(Validation.isEmpty(idProductCategoryFilter) || idProductCategoryFilter == '0');
- let ddlProductFilter = document.querySelector(idFormFilters + ' #' + attrIdProduct);
- let idProductFilter = DOM.getElementValueCurrent(ddlProductFilter);
- let hasProductFilter = !(Validation.isEmpty(idProductFilter) || idProductFilter == '0');
- if (_verbose) {
- console.log("initialiseRowNew: ", row);
- console.log({ddlCategoryFilter, idProductCategoryFilter, hasCategoryFilter, ddlProductFilter, idProductFilter, hasProductFilter});
- }
- if (!hasCategoryFilter && !hasProductFilter) return;
- if (hasCategoryFilter) {
- let ddlCategory = row.querySelector('td.' + flagProductCategory + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlCategory, idProductCategoryFilter);
- this.handleChangeProductCategoryDdl(null, ddlCategory);
- }
- if (hasProductFilter) {
- let ddlProduct = row.querySelector('td.' + flagProduct + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlProduct, idProductFilter);
- }
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupFieldsProductCategory();
- this.hookupProductFields();
- this.hookupFieldsProductPermutationVariation();
- this.hookupDescriptionTextareas();
- this.hookupCostFields();
- this.hookupProfitFields();
- this.hookupLatencyManufactureInputs();
- this.hookupQuantityFields();
- this.hookupSubscriptionFields();
- this.hookupIdStripeProductInputs();
- this.hookupExpirationFields();
- this.hookupFieldsActive();
- }
- hookupFieldsProductCategory() {
- this.hookupTableCellDdlPreviews(
- idTableMain + ' td.' + flagProductCategory
- , Utils.getListFromDict(productCategories)
- , (cellSelector) => { this.hookupProductCategoryDdls(cellSelector); }
- );
- }
- hookupProductFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagProduct, Utils.getListFromDict(products));
- }
-
- hookupDescriptionTextareas() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDescription + ' textarea');
- }
- hookupCostFields(){
- this.hookupCurrencyCostFields();
- this.hookupCostInputs();
- }
- hookupCurrencyCostFields(){
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagCurrencyCost, Utils.getListFromDict(currencies));
- }
- hookupCostInputs(){
- /*
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostUnitLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostUnitLocalVatIncl + ' input');
- */
- }
- hookupProfitFields(){
- // this.hookupCurrencyProfitFields();
- this.hookupProfitInputs();
- }
- /*
- hookupCurrencyProfitFields(){
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagCurrency, Utils.getListFromDict(currencies));
- }
- */
- hookupProfitInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProfitLocalMin + ' input');
- }
- hookupLatencyManufactureInputs(){
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagLatencyManufacture + ' input');
- }
- hookupQuantityFields(){
- this.hookupQuantityMinInputs();
- this.hookupQuantityMaxInputs();
- this.hookupQuantityStockInputs();
- this.hookupCountUnitMeasurementPerQuantityStepInputs();
- this.hookupUnitMeasurementQuantityFields();
- }
- hookupQuantityMinInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagQuantityMin + ' input');
- }
- hookupQuantityMaxInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagQuantityMax + ' input');
- }
- hookupQuantityStockInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagQuantityStock + ' input');
- }
- hookupCountUnitMeasurementPerQuantityStepInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCountUnitMeasurementPerQuantityStep + ' input');
- }
- hookupUnitMeasurementQuantityFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagUnitMeasurementQuantity, Utils.getListFromDict(unitMeasurements));
- }
- hookupSubscriptionFields() {
- this.hookupIsSubscriptionFields();
- this.hookupIntervalRecurrenceFields();
- this.hookupCountIntervalRecurrenceInputs();
- }
- hookupIsSubscriptionFields(){
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagIsSubscription + ' input', (event, element) => {
- this.handleChangeCheckboxIsSubscription(event, element);
- });
- }
- handleChangeCheckboxIsSubscription(event, element) {
- this.handleChangeNestedElementCellTable(event, element);
- let isSubscription = DOM.getElementValueCurrent(element);
- let row = DOM.getRowFromElement(element);
- let inputCountIntervalRecurrence = row.querySelector('td.' + flagCountUnitMeasurementIntervalRecurrence + ' input');
- let divOrDdlIntervalRecurrence = row.querySelector('td.' + flagUnitMeasurementIntervalRecurrence + ' .' + flagUnitMeasurementIntervalRecurrence);
- if (isSubscription) {
- inputCountIntervalRecurrence.classList.remove(flagCollapsed);
- divOrDdlIntervalRecurrence.classList.remove(flagCollapsed);
- let tdUnitMeasurementIntervalRecurrence = divOrDdlIntervalRecurrence.closest('td');
- tdUnitMeasurementIntervalRecurrence.dispatchEvent(new Event('click'));
- } else {
- inputCountIntervalRecurrence.classList.add(flagCollapsed);
- divOrDdlIntervalRecurrence.classList.add(flagCollapsed);
- }
- }
- hookupIntervalRecurrenceFields(){
- this.hookupTableCellDDlPreviewsWhenNotCollapsed(idTableMain + ' td.' + flagUnitMeasurementIntervalRecurrence, Utils.getListFromDict(unitMeasurementsTime));
- }
- hookupCountIntervalRecurrenceInputs(){
- this.hookupChangeHandlerTableCellsWhenNotCollapsed(idTableMain + ' td.' + flagCountUnitMeasurementIntervalRecurrence + ' input');
- }
- hookupIdStripeProductInputs(){
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagIdStripeProduct + ' input');
- }
- hookupExpirationFields(){
- this.hookupDoesExpireFasterOnceUnsealedCheckboxes();
- this.hookupIntervalExpirationUnsealedFields();
- this.hookupCountIntervalExpirationUnsealedInputs();
- }
- hookupDoesExpireFasterOnceUnsealedCheckboxes(){
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDoesExpireFasterOnceUnsealed + ' input', (event, element) => {
- this.handleChangeCheckboxDoesExpireFasterOnceUnsealed(event, element);
- });
- }
- handleChangeCheckboxDoesExpireFasterOnceUnsealed(event, element) {
- this.handleChangeNestedElementCellTable(event, element);
- let doesExpireFasterOnceUnsealed = DOM.getElementValueCurrent(element);
- let row = DOM.getRowFromElement(element);
- let inputCountIntervalExpirationUnsealed = row.querySelector('td.' + flagCountUnitMeasurementIntervalExpirationUnsealed + ' input');
- let divOrDdlIntervalExpirationUnsealed = row.querySelector('td.' + flagUnitMeasurementIntervalExpirationUnsealed + ' .' + flagUnitMeasurementIntervalExpirationUnsealed);
- if (doesExpireFasterOnceUnsealed) {
- inputCountIntervalExpirationUnsealed.classList.remove(flagCollapsed);
- divOrDdlIntervalExpirationUnsealed.classList.remove(flagCollapsed);
- let tdUnitMeasurementIntervalExpirationUnsealed = divOrDdlIntervalExpirationUnsealed.closest('td');
- tdUnitMeasurementIntervalExpirationUnsealed.dispatchEvent(new Event('click'));
- this.hook
- } else {
- inputCountIntervalExpirationUnsealed.classList.add(flagCollapsed);
- divOrDdlIntervalExpirationUnsealed.classList.add(flagCollapsed);
- }
- }
- hookupIntervalExpirationUnsealedFields(){
- this.hookupTableCellDDlPreviewsWhenNotCollapsed(idTableMain + ' td.' + flagUnitMeasurementIntervalExpirationUnsealed, Utils.getListFromDict(unitMeasurementsTime));
- }
- hookupCountIntervalExpirationUnsealedInputs(){
- this.hookupChangeHandlerTableCellsWhenNotCollapsed(idTableMain + ' td.' + flagCountUnitMeasurementIntervalExpirationUnsealed + ' input');
- }
-
- leave() {
- super.leave();
- }
-}
-
diff --git a/static/js/pages/store/product_variations.js b/static/js/pages/store/product_variations.js
deleted file mode 100644
index 27b734f8..00000000
--- a/static/js/pages/store/product_variations.js
+++ /dev/null
@@ -1,240 +0,0 @@
-
-import API from "../../api.js";
-import BusinessObjects from "../../lib/business_objects/business_objects.js";
-import DOM from "../../dom.js";
-import Events from "../../lib/events.js";
-import TableBasePage from "../base_table.js";
-import Utils from "../../lib/utils.js";
-import Validation from "../../lib/validation.js";
-import StoreTableMixinPage from "./mixin_table.js";
-
-export default class PageStoreProductVariations extends TableBasePage {
- static hash = hashPageStoreProductVariations;
- static attrIdRowObject = attrIdProductVariationType;
- callSaveTableContent = API.saveProductVariations;
-
- constructor(router) {
- super(router);
- this.storeMixin = new StoreTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterActive();
- this.hookupFilterIsNotEmpty();
- }
-
- loadRowTable(rowJson) {
- }
- getJsonRow(row) {
- if (row == null) return;
- let inputDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' input');
- let textareaCode = row.querySelector('td.' + flagCode + ' textarea');
- let textareaName = row.querySelector('td.' + flagName + ' textarea');
- let textareaNamePlural = row.querySelector('td.' + flagNamePlural + ' textarea');
- let tdProductVariations = row.querySelector('td.' + flagProductVariations);
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdProductVariationType] = row.getAttribute(attrIdProductVariationType);
- if (Validation.isEmpty(jsonRow[attrIdProductVariationType])) jsonRow[attrIdProductVariationType] = -1;
- jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
- jsonRow[flagCode] = DOM.getElementAttributeValueCurrent(textareaCode);
- jsonRow[flagName] = DOM.getElementAttributeValueCurrent(textareaName);
- jsonRow[flagNamePlural] = DOM.getElementAttributeValueCurrent(textareaNamePlural);
-
- let variations = [];
- if (tdProductVariations.classList.contains(flagDirty)) {
- let trsProductVariation = tdProductVariations.querySelectorAll('tr.' + flagProductVariation + '.' + flagDirty);
- if (trsProductVariation != null) {
- trsProductVariation.forEach((tr, indexRow) => {
- variations.push(this.getJsonRowProductVariation(tr, indexRow));
- });
- }
- }
- else {
- // variations = BusinessObjects.getListObjectsFromIdDictAndCsv(productVariationTypes, DOM.getElementAttributeValueCurrent(tdProductVariations));
- }
- jsonRow[flagProductVariations] = variations;
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- getJsonRowProductVariation(tr, indexRow) {
- let inputDisplayOrder = tr.querySelector('td.' + flagDisplayOrder + ' input');
- let textareaCode = tr.querySelector('td.' + flagCode + ' textarea');
- let textareaName = tr.querySelector('td.' + flagName + ' textarea');
- // let checkboxActive = tr.querySelector('td.' + flagActive + ' input');
- let buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdProductVariation] = tr.getAttribute(attrIdProductVariation);
- if (Validation.isEmpty(jsonRow[attrIdProductVariation])) jsonRow[attrIdProductVariation] = -1 - indexRow;
- jsonRow[attrIdProductVariationType] = tr.getAttribute(attrIdProductVariationType);
- jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
- jsonRow[flagCode] = DOM.getElementAttributeValueCurrent(textareaCode);
- jsonRow[flagName] = DOM.getElementAttributeValueCurrent(textareaName);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
-
- return jsonRow;
- }
- initialiseRowNew(tbody, row) {
- super.initialiseRowNew(tbody, row);
- this.initialiseSliderDisplayOrderRowNew(tbody, row);
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupSlidersDisplayOrderTable();
- this.hookupTextareasCodeTable();
- this.hookupTextareasNameTable();
- this.hookupTextareasNamePluralTable();
- this.hookupFieldsProductVariation();
- this.hookupFieldsActive();
- }
- hookupTextareasNamePluralTable() {
- this.hookupChangeHandlerTableCells(idTableMain + ' tbody tr td.' + flagNamePlural + ' textarea');
- }
- hookupFieldsProductVariation() {
- this.hookupProductVariationsPreviews();
- this.hookupFieldsProductVariationDisplayOrder();
- this.hookupFieldsProductVariationCode();
- this.hookupFieldsProductVariationName();
- this.hookupFieldsProductVariationActive();
- }
- hookupProductVariationsPreviews() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagProductVariations + ' div', (event, element) => {
- let td = DOM.getCellFromElement(element);
- if (!td.classList.contains(flagCollapsed)) return;
- this.handleClickProductVariationsPreview(event, element);
- });
- }
- handleClickProductVariationsPreview(event, element) {
- if (_verbose) { console.log("click order items preview"); }
- let row = DOM.getRowFromElement(element);
- let idProductVariationType = row.getAttribute(attrIdProductVariationType);
- let productVariationType = productVariationTypes[idProductVariationType];
- if (productVariationType == null) productVariationType = {
- [flagProductVariations]: [],
- };
- let tblProductVariations = document.createElement("table");
- tblProductVariations.classList.add(flagProductVariations);
- let thead = document.createElement("thead");
- let tr = document.createElement("tr");
-
- let thDisplayOrder = document.createElement("th");
- thDisplayOrder.classList.add(flagDisplayOrder);
- thDisplayOrder.textContent = 'Display Order';
- let thCode = document.createElement("th");
- thCode.classList.add(flagCode);
- thCode.textContent = 'Code';
- let thName = document.createElement("th");
- thName.classList.add(flagName);
- thName.textContent = 'Name';
- let thActive = document.createElement("th");
- thActive.classList.add(flagActive);
- // thActive.textContent = 'Active';
- let buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagActive);
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- thActive.appendChild(buttonAdd);
-
- tr.appendChild(thDisplayOrder);
- tr.appendChild(thCode);
- tr.appendChild(thName);
- tr.appendChild(thActive);
- thead.appendChild(tr);
- tblProductVariations.appendChild(thead);
-
- let tbody = document.createElement("tbody");
- productVariationType[flagProductVariations].forEach((productVariation, index) => {
- this.addRowProductVariation(tbody, productVariation);
- });
- tblProductVariations.appendChild(tbody);
-
- let cell = DOM.getCellFromElement(element);
- let cellNew = cell.cloneNode(false);
- cellNew.appendChild(tblProductVariations);
- cellNew.classList.remove(flagCollapsed);
- row.replaceChild(cellNew, cell);
- if (_verbose) { console.log("tblProductVariations: ", tblProductVariations); }
- this.toggleColumnHeaderCollapsed(flagProductVariations, false);
- this.hookupFieldsProductVariation();
- }
- addRowProductVariation(tbody, productVariation) {
- if (_verbose) { console.log("addRowProductVariation: ", productVariation); }
-
- let tdDisplayOrder = document.createElement("td");
- tdDisplayOrder.classList.add(flagDisplayOrder);
- let inputDisplayOrder = document.createElement("input");
- inputDisplayOrder.classList.add(flagDisplayOrder);
- inputDisplayOrder.type = 'number';
- inputDisplayOrder.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputDisplayOrder, productVariation[flagDisplayOrder]);
- tdDisplayOrder.appendChild(inputDisplayOrder);
-
- let tdCode = document.createElement("td");
- tdCode.classList.add(flagCode);
- let textareaCode = document.createElement("textarea");
- textareaCode.classList.add(flagCode);
- DOM.setElementValuesCurrentAndPrevious(textareaCode, productVariation[flagCode]);
- tdCode.appendChild(textareaCode);
-
- let tdName = document.createElement("td");
- tdName.classList.add(flagName);
- let textareaName = document.createElement("textarea");
- textareaName.classList.add(flagName);
- DOM.setElementValuesCurrentAndPrevious(textareaName, productVariation[flagName]);
- tdName.appendChild(textareaName);
-
- let tdActive = this.createTdActive(productVariation[flagActive]);
-
- let tr = document.createElement("tr");
- tr.classList.add(flagProductVariation);
- tr.setAttribute(attrIdProductVariationType, productVariation[attrIdProductVariationType]);
- tr.setAttribute(attrIdProductVariation, productVariation[attrIdProductVariation]);
- tr.appendChild(tdDisplayOrder);
- tr.appendChild(tdCode);
- tr.appendChild(tdName);
- tr.appendChild(tdActive);
- tbody.appendChild(tr);
- }
- hookupFieldsProductVariationDisplayOrder() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProductVariations + ' td.' + flagDisplayOrder + ' input');
- }
- hookupFieldsProductVariationCode() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProductVariations + ' textarea.' + flagCode);
- }
- hookupFieldsProductVariationName() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagProductVariations + ' textarea.' + flagName);
- }
- hookupFieldsProductVariationActive() {
- this.hookupFieldsActive(flagProductVariations, (event, element) => { this.hookupButtonsProductVariationAdd(event, element); });
- }
- hookupButtonsProductVariationAdd(event, element) {
- let row = element.closest(idTableMain + ' > tbody > tr');
- let idProductVariationType = row.getAttribute(attrIdProductVariationType);
- let idProductVariation = row.getAttribute(attrIdProductVariation);
- let countProductVariations = row.querySelectorAll('td.' + flagProductVariations + ' tr').length;
- let productVariation = {
- [attrIdProductVariationType]: idProductVariationType,
- [attrIdProductVariation]: idProductVariation,
- [flagCode]: '',
- [flagName]: '',
- [flagDisplayOrder]: countProductVariations,
- [flagActive]: true,
- };
- let tbody = row.querySelector('td.' + flagProductVariations + ' table tbody');
- this.addRowProductVariation(tbody, productVariation);
- this.hookupFieldsProductVariation();
- }
-
- leave() {
- super.leave();
- }
-}
-
diff --git a/static/js/pages/store/products.js b/static/js/pages/store/products.js
deleted file mode 100644
index 38087527..00000000
--- a/static/js/pages/store/products.js
+++ /dev/null
@@ -1,143 +0,0 @@
-
-import Events from "../../lib/events.js";
-import TableBasePage from "../base_table.js";
-import API from "../../api.js";
-import DOM from "../../dom.js";
-import StoreTableMixinPage from "./mixin_table.js";
-import Utils from "../../lib/utils.js";
-
-export default class PageStoreProducts extends TableBasePage {
- static hash = hashPageStoreProducts;
- static attrIdRowObject = attrIdProduct;
- callSaveTableContent = API.saveProducts;
-
- constructor(router) {
- super(router);
- this.storeMixin = new StoreTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterProductCategory();
- this.hookupFilterIsNotEmpty();
- this.hookupFilterActive();
- }
- hookupFilterProductCategory() {
- this.hookupFilter(flagProductCategory);
- }
-
- loadRowTable(rowJson) {
- return;
- if (rowJson == null) return;
- let row = _rowBlank.cloneNode(true);
- row.classList.remove(flagRowNew);
- row.classList.remove(flagInitialised);
- row.querySelectorAll('.' + flagInitialised).forEach(function(element) {
- element.classList.remove(flagInitialised);
- });
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- let tdProductCategory = row.querySelector('td.' + flagProductCategory);
- let divProductCategory = tdProductCategory.querySelector('div.' + flagProductCategory);
- let textareaName = row.querySelector('td.' + flagName + ' textarea');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let divAccessLevel = tdAccessLevel.querySelector('div.' + flagAccessLevel);
- let inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
-
- DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, rowJson[flagDisplayOrder]);
- DOM.setElementValuesCurrentAndPrevious(textareaCode, rowJson[flagCode]);
- DOM.setElementValuesCurrentAndPrevious(textareaName, rowJson[flagName]);
- DOM.setElementValuesCurrentAndPrevious(textareaDescription, rowJson[flagDescription]);
- tdAccessLevel.setAttribute(attrIdAccessLevel, rowJson[attrIdAccessLevel]);
- tdAccessLevel.setAttribute(flagAccessLevelRequired, rowJson[flagAccessLevelRequired]);
- divAccessLevel.setAttribute(attrIdAccessLevel, rowJson[attrIdAccessLevel]);
- DOM.setElementValuesCurrentAndPrevious(divAccessLevel, rowJson[attrIdAccessLevel]);
- divAccessLevel.textContent = rowJson[flagAccessLevelRequired];
- DOM.setElementValuesCurrentAndPrevious(inputActive, rowJson[flagActive]);
- row.setAttribute(rowJson[flagKeyPrimary], rowJson[rowJson[flagKeyPrimary]]);
-
- let table = TableBasePage.getTableMain();
- let bodyTable = table.querySelector('tbody');
- bodyTable.appendChild(row);
- }
- getJsonRow(row) {
- if (row == null) return;
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- let tdProductCategory = row.querySelector('td.' + flagProductCategory);
- let textareaName = row.querySelector('td.' + flagName + ' textarea');
- // let tdProductVariations = row.querySelector('td.' + flagProductVariations);
- let inputHasVariations = row.querySelector('td.' + flagHasVariations + ' input[type="checkbox"]');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonProduct = {};
- jsonProduct[attrIdProduct] = row.getAttribute(attrIdProduct);
- jsonProduct[attrIdProductCategory] = DOM.getElementAttributeValueCurrent(tdProductCategory);
- jsonProduct[flagName] = DOM.getElementAttributeValueCurrent(textareaName);
- // jsonRow[flagProductVariations] = DOM.getElementAttributeValueCurrent(tdProductVariations);
- // jsonRow[flagHasVariations] = jsonRow[flagProductVariations] != '';
- jsonProduct[flagHasVariations] = DOM.getElementAttributeValueCurrent(inputHasVariations);
- // jsonProduct[flagAccessLevelRequired] = tdAccessLevel.getAttribute(flagAccessLevelRequired);
- jsonProduct[attrIdAccessLevel] = DOM.getElementAttributeValueCurrent(tdAccessLevel);
- jsonProduct[flagActive] = buttonActive.classList.contains(flagDelete);
- jsonProduct[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(sliderDisplayOrder);
- return jsonProduct;
- }
- initialiseRowNew(tbody, row) {
- if (row == null) return;
- this.initialiseSliderDisplayOrderRowNew(tbody, row);
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupSlidersDisplayOrderTable();
- this.hookupTdsProductCategory();
- this.hookupTextareasNameTable();
- this.hookupInputsHasVariationsTable();
- this.hookupTdsAccessLevel();
- this.hookupFieldsActive();
- }
- hookupTdsProductCategory() {
- let cellSelector = idTableMain + ' tbody td.' + flagProductCategory;
- this.hookupTableCellDdlPreviews(cellSelector, Utils.getListFromDict(productCategories));
- }
- hookupInputsHasVariationsTable() {
- let cellSelector = idTableMain + ' tbody td.' + flagHasVariations + ' input[type="checkbox"]';
- this.hookupChangeHandlerTableCells(cellSelector);
- }
-
- /*
- isDirtyRow(row) {
- if (row == null) return false;
- console.log("Product Product isDirtyRow");
- console.log("row: ", row);
- let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder);
- let inputCode = row.querySelector('td.' + flagCode + ' textarea');
- let inputName = row.querySelector('td.' + flagName + ' textarea');
- let inputDescription = row.querySelector('td.' + flagDescription + ' textarea');
- let tdAccessLevel = row.querySelector('td.' + flagAccessLevel);
- let inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
- let isDirty = sliderDisplayOrder.classList.contains(flagDirty) || inputCode.classList.contains(flagDirty) || inputName.classList.contains(flagDirty) ||
- inputDescription.classList.contains(flagDirty) || tdAccessLevel.classList.contains(flagDirty) || inputActive.classList.contains(flagDirty);
- DOM.handleDirtyElement(row, isDirty);
- return isDirty;
- }
- */
-
- leave() {
- super.leave();
- }
-
- /*
- getFiltersDefaults() {
- filters = {};
- filters.flagIsNotEmpty = true;
- filters.flagActive = true;
- return filters;
- }
- */
-}
-
diff --git a/static/js/pages/store/stock_items.js b/static/js/pages/store/stock_items.js
deleted file mode 100644
index 3555bd9e..00000000
--- a/static/js/pages/store/stock_items.js
+++ /dev/null
@@ -1,355 +0,0 @@
-
-import API from "../../api.js";
-import BusinessObjects from "../../lib/business_objects/business_objects.js";
-import DOM from "../../dom.js";
-import Events from "../../lib/events.js";
-import TableBasePage from "../base_table.js";
-import Utils from "../../lib/utils.js";
-import Validation from "../../lib/validation.js";
-import StoreTableMixinPage from "./mixin_table.js";
-
-export default class PageStoreStockItems extends TableBasePage {
- static hash = hashPageStoreStockItems;
- static attrIdRowObject = attrIdStockItem;
- callSaveTableContent = API.saveStockItems;
-
- constructor(router) {
- super(router);
- this.storeMixin = new StoreTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterProductCategory();
- this.hookupFilterProduct();
- this.hookupFilterOutOfStock();
- this.hookupFilterMinStock();
- this.hookupFilterMaxStock();
- }
- hookupFilterProductCategory() {
- this.hookupFilter(flagProductCategory, (event, filterCategory) => {
- // loadPermutations();
- // let wasDirtyFilter = filterCategory.classList.contains(flagDirty);
- PageStoreStockItems.isDirtyFilter(filterCategory);
- let isDirtyFilter = filterCategory.classList.contains(flagDirty);
- let idProductCategory = DOM.getElementValueCurrent(filterCategory);
- let products = productCategories[idProductCategory];
- let filterProduct = document.querySelector(idFormFilters + ' .' + flagProduct);
- let idProductPrevious = filterProduct.getAttribute(attrValuePrevious);
- filterProduct.innerHTML = '';
- let optionJson, option;
- option = DOM.createOption(null);
- filterProduct.appendChild(option);
- products.forEach((product) => {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(product, idProductPrevious);
- option = DOM.createOption(optionJson);
- filterProduct.appendChild(option);
- });
- filterProduct.dispatchEvent(new Event('change'));
- });
- }
- hookupFilterProduct() {
- this.hookupFilter(flagProduct);
- }
- hookupFilterOutOfStock() {
- this.hookupFilter(flagIsOutOfStock);
- }
- hookupFilterMinStock() {
- this.hookupFilter(flagQuantityMin);
- }
- hookupFilterMaxStock() {
- this.hookupFilter(flagQuantityMax);
- }
-
- loadRowTable(rowJson) {
- }
- getJsonRow(row) {
- if (row == null) return;
- let tdProductCategory = row.querySelector('td.' + flagProductCategory);
- let tdProduct = row.querySelector('td.' + flagProduct);
- let tdProductVariations = row.querySelector('td.' + flagProductVariations);
- let tdCurrencyCost = row.querySelector('td.' + flagCurrencyCost);
- let inputCostLocalVatExcl = row.querySelector('td.' + flagCostUnitLocalVatExcl + ' input');
- let inputCostLocalVatIncl = row.querySelector('td.' + flagCostUnitLocalVatIncl + ' input');
- let inputDatePurchased = row.querySelector('td.' + flagDatePurchased + ' input');
- let inputDateReceived = row.querySelector('td.' + flagDateReceived + ' input');
- let tdStorageLocation = row.querySelector('td.' + flagStorageLocation);
- let inputIsSealed = row.querySelector('td.' + flagIsSealed + ' input');
- let inputDateUnsealed = row.querySelector('td.' + flagDateUnsealed + ' input');
- let inputDateExpiration = row.querySelector('td.' + flagDateExpiration + ' input');
- let inputIsConsumed = row.querySelector('td.' + flagIsConsumed + ' input');
- let inputDateConsumed = row.querySelector('td.' + flagDateConsumed + ' input');
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdStockItem] = row.getAttribute(attrIdStockItem);
- jsonRow[attrIdProductPermutation] = tdProductVariations.getAttribute(attrIdProductPermutation);
- jsonRow[attrIdProductCategory] = DOM.getElementAttributeValueCurrent(tdProductCategory);
- jsonRow[attrIdProduct] = DOM.getElementAttributeValueCurrent(tdProduct);
- jsonRow[flagProductVariations] = DOM.getElementAttributeValueCurrent(tdProductVariations);
- jsonRow[flagHasVariations] = jsonRow[flagProductVariations] != '';
- jsonRow[flagCurrencyCost] = DOM.getElementAttributeValueCurrent(tdCurrencyCost);
- jsonRow[flagCostUnitLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostLocalVatExcl);
- jsonRow[flagCostUnitLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostLocalVatIncl);
- jsonRow[flagDatePurchased] = DOM.getElementAttributeValueCurrent(inputDatePurchased);
- jsonRow[flagDateReceived] = DOM.getElementAttributeValueCurrent(inputDateReceived);
- jsonRow[attrIdStorageLocation] = DOM.getElementAttributeValueCurrent(tdStorageLocation);
- jsonRow[flagIsSealed] = DOM.getElementAttributeValueCurrent(inputIsSealed);
- jsonRow[flagDateUnsealed] = DOM.getElementAttributeValueCurrent(inputDateUnsealed);
- jsonRow[flagDateExpiration] = DOM.getElementAttributeValueCurrent(inputDateExpiration);
- jsonRow[flagIsConsumed] = DOM.getElementAttributeValueCurrent(inputIsConsumed);
- jsonRow[flagDateConsumed] = DOM.getElementAttributeValueCurrent(inputDateConsumed);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- initialiseRowNew(tbody, row) {
- super.initialiseRowNew(tbody, row);
- let ddlCategoryFilter = document.querySelector(idFormFilters + ' #' + attrIdProductCategory);
- let idProductCategoryFilter = DOM.getElementValueCurrent(ddlCategoryFilter);
- let hasCategoryFilter = !(Validation.isEmpty(idProductCategoryFilter) || idProductCategoryFilter == '0');
- let ddlProductFilter = document.querySelector(idFormFilters + ' #' + attrIdProduct);
- let idProductFilter = DOM.getElementValueCurrent(ddlProductFilter);
- let hasProductFilter = !(Validation.isEmpty(idProductFilter) || idProductFilter == '0');
- if (_verbose) {
- console.log("initialiseRowNew: ", row);
- console.log({ddlCategoryFilter, idProductCategoryFilter, hasCategoryFilter, ddlProductFilter, idProductFilter, hasProductFilter});
- }
- if (!hasCategoryFilter && !hasProductFilter) return;
- if (hasCategoryFilter) {
- let ddlCategory = row.querySelector('td.' + flagProductCategory + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlCategory, idProductCategoryFilter);
- this.handleChangeProductCategoryDdl(null, ddlCategory);
- }
- if (hasProductFilter) {
- let ddlProduct = row.querySelector('td.' + flagProduct + ' select');
- DOM.setElementValuesCurrentAndPrevious(ddlProduct, idProductFilter);
- }
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupProductCategoryFields();
- this.hookupProductFields();
- this.hookupFieldsProductPermutationVariation();
- this.hookupCurrencyCostFields();
- this.hookupCostInputs();
- this.hookupOrderDateInputs();
- this.hookupStorageLocationFields();
- this.hookupSealingInputs();
- this.hookupExpirationDateInputs();
- this.hookupConsumationInputs();
- this.hookupFieldsActive();
- }
- hookupProductCategoryFields() {
- this.hookupTableCellDdlPreviews(
- idTableMain + ' td.' + flagProductCategory
- , Utils.getListFromDict(productCategories)
- , (event, element) => { this.hookupProductCategoryDdls(event, element); }
- );
- }
- hookupProductFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagProduct, Utils.getListFromDict(products));
- }
-
- /*
- handleClickProductPermutationVariationsPreview(event, element) {
- let row = DOM.getRowFromElement(element);
- let tdProduct = row.querySelector('td.' + flagProduct);
- let idProduct = DOM.getElementValueCurrent(tdProduct);
- let product = products[idProduct];
- if (!product[flagHasVariations]) return;
- super.handleClickProductPermutationVariationsPreview(event, element);
- }
- */
- handleClickButtonProductPermutationVariationsAdd(event, element) {
- let row = DOM.getRowFromElement(element);
- let tbody = row.querySelector('tbody');
- let permutationVariation = PageStoreStockItems.createOptionUnselectedProductVariation();
- this.addProductPermutationVariationRow(tbody, permutationVariation);
- }
-
- hookupCurrencyCostFields(){
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagCurrencyCost, Utils.getListFromDict(currencies));
- }
- hookupCostInputs(){
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostUnitLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostUnitLocalVatIncl + ' input');
- }
- hookupOrderDateInputs(){
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDatePurchased + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDateReceived + ' input');
- }
-
- hookupStorageLocationFields(){
- this.hookupEventHandler(
- "click",
- idTableMain + ' td.' + flagStorageLocation + ' div',
- (event, element) => this.handleClickStorageLocationPreview(event, element)
- );
- }
- handleClickStorageLocationPreview(event, element) {
- this.toggleColumnCollapsed(flagStorageLocation, false);
- let idPlant = element.getAttribute(attrIdPlant);
- let idStorageLocation = element.getAttribute(attrIdStorageLocation);
- let tblStorageLocation = document.createElement("table");
- tblStorageLocation.classList.add(flagStorageLocation);
- let thead = document.createElement("thead");
- let thPlant = document.createElement("th");
- thPlant.textContent = 'Plant';
- let thLocation = document.createElement("th");
- thLocation.textContent = 'Location';
- let trHead = document.createElement("tr");
- trHead.appendChild(thPlant);
- trHead.appendChild(thLocation);
- thead.appendChild(trHead);
- tblStorageLocation.appendChild(thead);
- let tbody = document.createElement("tbody");
-
- let plant, optionPlantJson, optionPlant, storageLocation, optionStorageLocationJson, optionStorageLocation;
- let plantKeys = Object.keys(plants);
- let storageLocationKeys = Object.keys(storageLocations);
-
- debugger;
- let plantJson = idPlant != null ? plants[idPlant] : {
- [attrIdPlant]: null,
- };
- let storageLocationJson = idStorageLocation != null ? storageLocations[idStorageLocation] : {
- [attrIdStorageLocation]: null,
- };
-
- let tdPlant = document.createElement("td");
- tdPlant.classList.add(flagPlant);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdPlant, plantJson[attrIdPlant]);
-
- let ddlPlant = document.createElement("select");
- ddlPlant.classList.add(flagPlant);
- DOM.setElementAttributesValuesCurrentAndPrevious(ddlPlant, plantJson[attrIdPlant]);
-
- optionPlant = DOM.createOption(null);
- if (_verbose) { console.log("optionPlant: ", optionPlant); }
- ddlPlant.appendChild(optionPlant);
-
- plantKeys.forEach((plantKey) => {
- plant = plants[plantKey];
- optionPlantJson = BusinessObjects.getOptionJsonFromObjectJson(
- plant, // objectJson
- plantJson[attrIdPlant] // valueSelected
- );
- optionPlant = DOM.createOption(optionPlantJson);
- if (_verbose) { console.log("optionPlant: ", optionPlant); }
- ddlPlant.appendChild(optionPlant);
- });
-
- let tdStorageLocation = document.createElement("td");
- tdStorageLocation.classList.add(flagStorageLocation);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdStorageLocation, storageLocationJson[attrIdStorageLocation]);
-
- let ddlStorageLocation = document.createElement("select");
- ddlStorageLocation.classList.add(flagStorageLocation);
- DOM.setElementAttributesValuesCurrentAndPrevious(ddlStorageLocation, storageLocationJson[attrIdStorageLocation]);
-
- optionStorageLocation = DOM.createOption(null);
- if (_verbose) { console.log("optionStorageLocation: ", optionStorageLocation); }
- ddlStorageLocation.appendChild(optionStorageLocation);
-
- storageLocationKeys.forEach((StorageLocationKey) => {
- storageLocation = storageLocations[StorageLocationKey];
- optionStorageLocationJson = BusinessObjects.getOptionJsonFromObjectJson(
- storageLocation, // objectJson
- storageLocationJson[attrIdStorageLocation] // valueSelected
- );
- optionStorageLocation = DOM.createOption(optionStorageLocationJson);
- if (_verbose) { console.log("optionStorageLocation: ", optionStorageLocation); }
- ddlStorageLocation.appendChild(optionStorageLocation);
- });
-
- let trBody = document.createElement("tr");
- tdPlant.appendChild(ddlPlant);
- trBody.appendChild(tdPlant);
- tdStorageLocation.appendChild(ddlStorageLocation);
- trBody.appendChild(tdStorageLocation);
- tbody.appendChild(trBody);
-
- tblStorageLocation.appendChild(tbody);
- let tdParent = DOM.getCellFromElement(element);
- tdParent.innerHTML = '';
- tdParent.appendChild(tblStorageLocation);
- if (_verbose) { console.log("tblStorageLocation: ", tblStorageLocation); }
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPlant + ' select', (event, element) => { this.handleChangeStoragePlantDdl(event, element); });
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagStorageLocation + ' select', (event, element) => { this.handleChangeStorageLocationDdl(event, element); });
- }
- handleChangeStoragePlantDdl(event, ddlPlant) {
- this.handleChangeNestedElementCellTable(event, ddlPlant);
- let row = DOM.getRowFromElement(ddlPlant);
- let ddlStorageLocation = row.querySelector('td.' + flagStorageLocation + ' select');
- ddlStorageLocation.innerHTML = '';
- ddlStorageLocation.appendChild(DOM.createOption(null));
- let idPlant = DOM.getElementValueCurrent(ddlPlant);
- let storageLocations = plants[idPlant][flagStorageLocations];
- let optionJson, option;
- storageLocations.forEach((storageLocation) => {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(storageLocation);
- option = DOM.createOption(optionJson);
- ddlStorageLocation.appendChild(option);
- });
- this.handleChangeNestedElementCellTable(event, ddlStorageLocation);
- }
- handleChangeStorageLocationDdl(event, ddlStorageLocation) {
- this.handleChangeNestedElementCellTable(event, ddlStorageLocation);
- }
-
- hookupSealingInputs() {
- this.hookupIsSealedFields();
- this.hookupDateUnsealedInputs();
- }
- hookupIsSealedFields(){
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagIsSealed + ' input', (event, element) => {
- this.handleChangeNestedElementCellTable(event, element);
- let isSealed = DOM.getElementValueCurrent(element);
- let row = DOM.getRowFromElement(element);
- let inputDateUnsealed = row.querySelector('td.' + flagDateUnsealed + ' input');
- if (isSealed) {
- inputDateUnsealed.classList.add(flagCollapsed);
- } else {
- inputDateUnsealed.classList.remove(flagCollapsed);
- }
- });
- }
- hookupDateUnsealedInputs(){
- this.hookupChangeHandlerTableCellsWhenNotCollapsed("change", idTableMain + ' td.' + flagDateUnsealed + ' input');
- }
-
- hookupExpirationDateInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDateExpiration + ' input');
- }
-
- hookupConsumationInputs() {
- this.hookupIsConsumedFields();
- this.hookupDateConsumedInputs();
- }
- hookupIsConsumedFields(){
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagIsConsumed + ' input', (event, element) => {
- this.handleChangeNestedElementCellTable(event, element);
- let isConsumed = DOM.getElementValueCurrent(element);
- let row = DOM.getRowFromElement(element);
- let inputDateConsumed = row.querySelector('td.' + flagDateConsumed + ' input');
- if (isConsumed) {
- inputDateConsumed.classList.remove(flagCollapsed);
- } else {
- inputDateConsumed.classList.add(flagCollapsed);
- }
- });
- }
- hookupDateConsumedInputs(){
- this.hookupChangeHandlerTableCellsWhenNotCollapsed("change", idTableMain + ' td.' + flagDateConsumed + ' input');
- }
-
- leave() {
- super.leave();
- }
-}
-
diff --git a/static/js/pages/store/supplier_purchase_orders.js b/static/js/pages/store/supplier_purchase_orders.js
deleted file mode 100644
index fc8b8575..00000000
--- a/static/js/pages/store/supplier_purchase_orders.js
+++ /dev/null
@@ -1,509 +0,0 @@
-
-import API from "../../api.js";
-import BusinessObjects from "../../lib/business_objects/business_objects.js";
-import DOM from "../../dom.js";
-import Events from "../../lib/events.js";
-import ProductPermutation from "../../lib/business_objects/store/product_permutation.js";
-import TableBasePage from "../base_table.js";
-import Utils from "../../lib/utils.js";
-import Validation from "../../lib/validation.js";
-import StoreTableMixinPage from "./mixin_table.js";
-
-export default class PageStoreSupplierPurchaseOrders extends TableBasePage {
- static hash = hashPageStoreSupplierPurchaseOrders;
- static attrIdRowObject = attrIdSupplierPurchaseOrder;
- callSaveTableContent = API.saveSupplierPurchaseOrders;
-
- constructor(router) {
- super(router);
- this.storeMixin = new StoreTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterActive();
- }
-
- loadRowTable(rowJson) {
- }
- getJsonRow(row) {
- if (row == null) return;
- let tdSupplier = row.querySelector('td.' + flagSupplier);
- let tdCurrency = row.querySelector('td.' + flagCurrency);
- let inputCostTotalLocalVatExcl = row.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
- let inputCostTotalLocalVatIncl = row.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
- let trsPurchaseOrderItem = row.querySelectorAll('tr.' + flagOrderItems);
- let buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdSupplierPurchaseOrder] = row.getAttribute(attrIdSupplierPurchaseOrder);
- jsonRow[attrIdSupplier] = DOM.getElementAttributeValueCurrent(tdSupplier);
- jsonRow[attrIdCurrency] = DOM.getElementAttributeValueCurrent(tdCurrency);
- jsonRow[flagCostTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatExcl);
- jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl);
- // jsonRow[flagOrderItems] = DOM.getElementAttributeValueCurrent(tdItems);
- let orderItems = [];
- if (trsPurchaseOrderItem != null) {
- trsPurchaseOrderItem.forEach((tr) => {
- orderItems.push(this.getJsonRowOrderItem(tr));
- });
- }
- jsonRow[flagOrderItems] = orderItems;
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- getJsonRowOrderItem(tr) {
- let inputDisplayOrder = tr.querySelector('td.' + flagDisplayOrder + ' input');
- let tdCategory = tr.querySelector('td.' + flagProductCategory);
- let tdProduct = tr.querySelector('td.' + flagProduct);
- let tdVariations = tr.querySelector('td.' + flagProductVariations);
- let tdUnitQuantity = tr.querySelector('td.' + flagUnitMeasurementQuantity);
- let inputQuantityOrdered = tr.querySelector('td.' + flagQuantityOrdered + ' input');
- let inputQuantityReceived = tr.querySelector('td.' + flagQuantityReceived + ' input');
- let inputCostTotalLocalVatExcl = tr.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
- let inputCostTotalLocalVatIncl = tr.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
- let inputLatencyDeliveryDays = tr.querySelector('td.' + flagLatencyDeliveryDays + ' input');
- let buttonActive = tr.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdSupplierPurchaseOrder] = tr.getAttribute(attrIdSupplierPurchaseOrder);
- jsonRow[attrIdSupplierPurchaseOrderProductLink] = tr.getAttribute(attrIdSupplierPurchaseOrderProductLink);
- jsonRow[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(inputDisplayOrder);
- jsonRow[attrIdProductCategory] = DOM.getElementAttributeValueCurrent(tdCategory);
- jsonRow[attrIdProduct] = DOM.getElementAttributeValueCurrent(tdProduct);
- jsonRow[flagProductVariations] = DOM.getElementAttributeValueCurrent(tdVariations);
- jsonRow[attrIdUnitMeasurementQuantity] = DOM.getElementAttributeValueCurrent(tdUnitQuantity);
- jsonRow[flagQuantityOrdered] = DOM.getElementAttributeValueCurrent(inputQuantityOrdered);
- jsonRow[flagQuantityReceived] = DOM.getElementAttributeValueCurrent(inputQuantityReceived);
- jsonRow[flagCostTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatExcl);
- jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl);
- jsonRow[flagLatencyDeliveryDays] = DOM.getElementAttributeValueCurrent(inputLatencyDeliveryDays);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
-
- return jsonRow;
- }
- initialiseRowNew(tbody, row) {
- super.initialiseRowNew(tbody, row);
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupSupplierFields();
- this.hookupCurrencyFields();
- this.hookupCostInputs();
- this.hookupOrderItemsFields();
- this.hookupFieldsActive();
- }
- hookupSupplierFields() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagSupplier, Utils.getListFromDict(suppliers));
- }
- hookupCostInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatExcl + ' input');
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatIncl + ' input');
- }
- hookupOrderItemsFields() {
- this.hookupOrderItemsPreviews();
- this.hookupFieldsOrderItemDisplayOrder();
- this.hookupFieldsOrderItemProductCategory();
- this.hookupFieldsOrderItemProduct();
- // this.hookupFieldsOrderItemProductVariations();
- this.hookupFieldsProductPermutationVariation();
- this.hookupFieldsOrderItemUnitQuantity();
- this.hookupFieldsOrderItemQuantityOrdered();
- this.hookupFieldsOrderItemQuantityReceived();
- this.hookupFieldsOrderItemCostTotalLocalVatExcl();
- this.hookupFieldsOrderItemCostTotalLocalVatIncl();
- this.hookupFieldsOrderItemLatencyDeliveryDays();
- this.hookupFieldsOrderItemActive();
- this.hookupFieldsOrderItemAddDelete();
- }
- hookupOrderItemsPreviews() {
- this.hookupEventHandler("click", idTableMain + ' > tbody > tr > td.' + flagOrderItems + ' > div', (event, div) => {
- let td = DOM.getCellFromElement(div);
- if (!td.classList.contains(flagCollapsed)) return;
- this.handleClickOrderItemsPreview(event, div);
- });
- }
- handleClickOrderItemsPreview(event, element) {
- if (_verbose) { console.log("click order items preview"); }
- this.toggleColumnHeaderCollapsed(flagOrderItems, false);
- /*
- let td = DOM.getCellFromElement(element);
- td.classList.remove(flagCollapsed);
- */
-
- let row = DOM.getRowFromElement(element);
- let idSupplierPurchaseOrder = row.getAttribute(attrIdSupplierPurchaseOrder);
- // if (idSupplierPurchaseOrder == null || idSupplierPurchaseOrder < 1) return;
- let supplierPurchaseOrder = supplierPurchaseOrders[idSupplierPurchaseOrder];
- if (supplierPurchaseOrder == null) supplierPurchaseOrder = {
- [flagOrderItems]: [],
- };
- let tblOrderItems = document.createElement("table");
- tblOrderItems.classList.add(flagOrderItems);
- let thead = document.createElement("thead");
- let tr = document.createElement("tr");
-
- let thDisplayOrder = document.createElement("th");
- thDisplayOrder.classList.add(flagDisplayOrder);
- thDisplayOrder.textContent = 'Display Order';
- let thCategory = document.createElement("th");
- thCategory.classList.add(flagProductCategory);
- thCategory.textContent = 'Category';
- let thProduct = document.createElement("th");
- thProduct.classList.add(flagProduct);
- thProduct.textContent = 'Product';
- let thVariations = document.createElement("th");
- thVariations.classList.add(flagProductVariations);
- thVariations.classList.add(flagCollapsed);
- thVariations.textContent = 'Variations';
- let thUnitQuantity = document.createElement("th");
- thUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- thUnitQuantity.textContent = 'Unit Quantity';
- let thQuantityOrdered = document.createElement("th");
- thQuantityOrdered.classList.add(flagQuantityOrdered);
- thQuantityOrdered.textContent = 'Quantity Ordered';
- let thQuantityReceived = document.createElement("th");
- thQuantityReceived.classList.add(flagQuantityReceived);
- thQuantityReceived.textContent = 'Quantity Received';
- let thCostTotalLocalVatExcl = document.createElement("th");
- thCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- thCostTotalLocalVatExcl.textContent = 'Cost Total Local VAT Excl';
- let thCostTotalLocalVatIncl = document.createElement("th");
- thCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- thCostTotalLocalVatIncl.textContent = 'Cost Total Local VAT Incl';
- let thCostUnitLocalVatExcl = document.createElement("th");
- thCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- thCostUnitLocalVatExcl.textContent = 'Cost Unit Local VAT Excl';
- let thCostUnitLocalVatIncl = document.createElement("th");
- thCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- thCostUnitLocalVatIncl.textContent = 'Cost Unit Local VAT Incl';
- let thLatencyDeliveryDays = document.createElement("th");
- thLatencyDeliveryDays.classList.add(flagLatencyDeliveryDays);
- thLatencyDeliveryDays.textContent = 'Latency Delivery (Days)';
- let thActive = document.createElement("th");
- thActive.classList.add(flagActive);
- thActive.textContent = 'Active';
- let thAddDelete = document.createElement("th");
- thAddDelete.classList.add(flagAdd);
- let buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- thAddDelete.appendChild(buttonAdd);
-
- tr.appendChild(thDisplayOrder);
- tr.appendChild(thCategory);
- tr.appendChild(thProduct);
- tr.appendChild(thVariations);
- tr.appendChild(thUnitQuantity);
- tr.appendChild(thQuantityOrdered);
- tr.appendChild(thQuantityReceived);
- tr.appendChild(thCostTotalLocalVatExcl);
- tr.appendChild(thCostTotalLocalVatIncl);
- tr.appendChild(thCostUnitLocalVatExcl);
- tr.appendChild(thCostUnitLocalVatIncl);
- tr.appendChild(thLatencyDeliveryDays);
- tr.appendChild(thActive);
- tr.appendChild(thAddDelete);
- thead.appendChild(tr);
- tblOrderItems.appendChild(thead);
-
- let tbody = document.createElement("tbody");
- supplierPurchaseOrder[flagOrderItems].forEach((orderItem, index) => {
- this.addRowSupplierPurchaseOrderItem(tbody, orderItem);
- });
- tblOrderItems.appendChild(tbody);
-
- let cell = DOM.getCellFromElement(element);
- let cellNew = cell.cloneNode(false);
- cellNew.appendChild(tblOrderItems);
- cellNew.classList.remove(flagCollapsed);
- row.replaceChild(cellNew, cell);
- if (_verbose) { console.log("tblOrderItems: ", tblOrderItems); }
- this.hookupOrderItemsFields();
- }
- addRowSupplierPurchaseOrderItem(tbody, orderItem) { // productVariationTypeOptions, productVariationOptions, productCategoryOptions, productOptions, unitMeasurementOptions,
- if (_verbose) { console.log("addRowSupplierPurchaseOrderItem: ", orderItem); }
-
- let tdDisplayOrder = document.createElement("td");
- tdDisplayOrder.classList.add(flagDisplayOrder);
- let inputDisplayOrder = document.createElement("input");
- inputDisplayOrder.classList.add(flagDisplayOrder);
- inputDisplayOrder.type = 'number';
- inputDisplayOrder.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputDisplayOrder, orderItem[flagDisplayOrder]);
- tdDisplayOrder.appendChild(inputDisplayOrder);
-
- let tdCategory = document.createElement("td");
- tdCategory.classList.add(flagProductCategory);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdCategory, orderItem[attrIdProductCategory]);
- let divCategory = document.createElement("div");
- divCategory.classList.add(flagProductCategory);
- DOM.setElementAttributesValuesCurrentAndPrevious(divCategory, orderItem[attrIdProductCategory]);
- // divCategory.textContent = orderItem[flagProductCategory];
- let productCategory = productCategories[orderItem[attrIdProductCategory]];
- divCategory.textContent = BusinessObjects.getObjectText(productCategory);
- tdCategory.appendChild(divCategory);
-
- let tdProduct = document.createElement("td");
- tdProduct.classList.add(flagProduct);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdProduct, orderItem[attrIdProduct]);
- let divProduct = document.createElement("div");
- divProduct.classList.add(flagProduct);
- DOM.setElementAttributesValuesCurrentAndPrevious(divProduct, orderItem[attrIdProduct]);
- // divProduct.textContent = orderItem[flagProduct];
- let product = products[orderItem[attrIdProduct]];
- divProduct.textContent = BusinessObjects.getObjectText(product);
- tdProduct.appendChild(divProduct);
-
- let tdVariations = document.createElement("td");
- tdVariations.classList.add(flagProductVariations);
- tdVariations.classList.add(flagCollapsed);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdVariations, orderItem[flagProductVariations]);
- let divVariations = document.createElement("div");
- divVariations.classList.add(flagProductVariations);
- DOM.setElementAttributesValuesCurrentAndPrevious(divVariations, orderItem[flagProductVariations]);
- // divVariations.textContent = orderItem[flagProductVariations];
- let variationsText = ProductPermutation.getProductVariationsPreviewFromIdCsv(orderItem[flagProductVariations]);
- divVariations.textContent = variationsText;
- tdVariations.appendChild(divVariations);
-
- let tdUnitQuantity = document.createElement("td");
- tdUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdUnitQuantity, orderItem[attrIdUnitMeasurementQuantity]);
- let divUnitQuantity = document.createElement("div");
- divUnitQuantity.classList.add(flagUnitMeasurementQuantity);
- DOM.setElementAttributesValuesCurrentAndPrevious(divUnitQuantity, orderItem[attrIdUnitMeasurementQuantity]);
- let unitQuantity = unitMeasurements[orderItem[attrIdUnitMeasurementQuantity]];
- divUnitQuantity.textContent = BusinessObjects.getObjectText(unitQuantity);
- tdUnitQuantity.appendChild(divUnitQuantity);
-
- let tdQuantityOrdered = document.createElement("td");
- tdQuantityOrdered.classList.add(flagQuantityOrdered);
- let inputQuantityOrdered = document.createElement("input");
- inputQuantityOrdered.classList.add(flagQuantityOrdered);
- inputQuantityOrdered.type = 'number';
- DOM.setElementValuesCurrentAndPrevious(inputQuantityOrdered, orderItem[flagQuantityOrdered]);
- tdQuantityOrdered.appendChild(inputQuantityOrdered);
-
- let tdQuantityReceived = document.createElement("td");
- tdQuantityReceived.classList.add(flagQuantityReceived);
- let inputQuantityReceived = document.createElement("input");
- inputQuantityReceived.classList.add(flagQuantityReceived);
- inputQuantityReceived.type = 'number';
- DOM.setElementValuesCurrentAndPrevious(inputQuantityReceived, orderItem[flagQuantityReceived]);
- tdQuantityReceived.appendChild(inputQuantityReceived);
-
- let tdCostTotalLocalVatExcl = document.createElement("td");
- tdCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- let inputCostTotalLocalVatExcl = document.createElement("input");
- inputCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl);
- inputCostTotalLocalVatExcl.type = 'number';
- inputCostTotalLocalVatExcl.step = 0.01;
- DOM.setElementValuesCurrentAndPrevious(inputCostTotalLocalVatExcl, orderItem[flagCostTotalLocalVatExcl]);
- tdCostTotalLocalVatExcl.appendChild(inputCostTotalLocalVatExcl);
-
- let tdCostTotalLocalVatIncl = document.createElement("td");
- tdCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- let inputCostTotalLocalVatIncl = document.createElement("input");
- inputCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl);
- inputCostTotalLocalVatIncl.type = 'number';
- inputCostTotalLocalVatIncl.step = 0.01;
- DOM.setElementValuesCurrentAndPrevious(inputCostTotalLocalVatIncl, orderItem[flagCostTotalLocalVatIncl]);
- tdCostTotalLocalVatIncl.appendChild(inputCostTotalLocalVatIncl);
-
- let tdCostUnitLocalVatExcl = document.createElement("td");
- tdCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- let divCostUnitLocalVatExcl = document.createElement("div");
- divCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl);
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, Validation.toFixedOrDefault(orderItem[flagCostUnitLocalVatExcl], 3, null));
- tdCostUnitLocalVatExcl.appendChild(divCostUnitLocalVatExcl);
-
- let tdCostUnitLocalVatIncl = document.createElement("td");
- tdCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- let divCostUnitLocalVatIncl = document.createElement("div");
- divCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, Validation.toFixedOrDefault(orderItem[flagCostUnitLocalVatIncl], 3, null));
- tdCostUnitLocalVatIncl.appendChild(divCostUnitLocalVatIncl);
-
- let tdLatencyDeliveryDays = document.createElement("td");
- tdLatencyDeliveryDays.classList.add(flagLatencyDeliveryDays);
- let inputLatencyDeliveryDays = document.createElement("input");
- inputLatencyDeliveryDays.classList.add(flagLatencyDeliveryDays);
- inputLatencyDeliveryDays.type = 'number';
- inputLatencyDeliveryDays.step = 1;
- DOM.setElementValuesCurrentAndPrevious(inputLatencyDeliveryDays, orderItem[flagLatencyDeliveryDays]);
- tdLatencyDeliveryDays.appendChild(inputLatencyDeliveryDays);
-
- let tdActive = this.createTdActive(orderItem[flagActive]);
-
- let tr = document.createElement("tr");
- tr.classList.add(flagOrderItems);
- tr.setAttribute(attrIdSupplierPurchaseOrder, orderItem[attrIdSupplierPurchaseOrder]);
- tr.setAttribute(attrIdSupplierPurchaseOrderProductLink, orderItem[attrIdSupplierPurchaseOrderProductLink]);
- tr.appendChild(tdDisplayOrder);
- tr.appendChild(tdCategory);
- tr.appendChild(tdProduct);
- tr.appendChild(tdVariations);
- tr.appendChild(tdUnitQuantity);
- tr.appendChild(tdQuantityOrdered);
- tr.appendChild(tdQuantityReceived);
- tr.appendChild(tdCostTotalLocalVatExcl);
- tr.appendChild(tdCostTotalLocalVatIncl);
- tr.appendChild(tdCostUnitLocalVatExcl);
- tr.appendChild(tdCostUnitLocalVatIncl);
- tr.appendChild(tdLatencyDeliveryDays);
- tr.appendChild(tdActive);
- tbody.appendChild(tr);
- }
- hookupFieldsOrderItemDisplayOrder() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagDisplayOrder + ' input');
- }
- hookupFieldsOrderItemProductCategory() {
- this.hookupTableCellDdlPreviews(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductCategory
- , Utils.getListFromDict(productCategories)
- , (cellSelector) => { this.hookupProductCategoryDdls(cellSelector); }
- );
- }
- hookupFieldsOrderItemProduct() {
- this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagProduct, Utils.getListFromDict(products));
- }
- /*
- hookupFieldsOrderItemProductVariations() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductVariations, (event, element) => this.handleClickProductPermutationVariationsPreview(event, element));
- }
- hookupDdlsProductPermutationVariation() {
- this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation);
- }
- hookupDdlsProductPermutationVariationType() {
- this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariationType);
- }
- */
- hookupFieldsOrderItemUnitQuantity() {
- this.hookupTableCellDdlPreviews(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagUnitMeasurementQuantity
- , Utils.getListFromDict(unitMeasurements)
- );
- }
- hookupFieldsOrderItemQuantityOrdered() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityOrdered + ' input'
- );
- }
- hookupFieldsOrderItemQuantityReceived() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityReceived + ' input'
- );
- }
- hookupFieldsOrderItemCostTotalLocalVatExcl() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatExcl + ' input'
- , (event, element) => {
- this.handleChangeNestedElementCellTable(event, element); // flagCostTotalLocalVatExcl);
- this.updateFieldsCostUnitLocalVatExcl(element);
- }
- );
- }
- hookupFieldsOrderItemCostTotalLocalVatIncl() {
- this.hookupChangeHandlerTableCells(
- idTableMain + ' td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatIncl + ' input'
- , (event, element) => {
- this.handleChangeNestedElementCellTable(event, element); // flagCostTotalLocalVatIncl);
- this.updateFieldsCostUnitLocalVatIncl(element);
- }
- );
- }
- updateFieldsCostUnitLocalVatExcl(elementChanged) {
- let row = elementChanged.closest('tr.' + flagOrderItems);
- let inputCostTotalLocalVatExcl = row.querySelector('td.' + flagCostTotalLocalVatExcl + ' input');
- let costTotalLocalVatExcl = DOM.getElementValueCurrent(inputCostTotalLocalVatExcl);
- let inputQuantityOrdered = row.querySelector('td.' + flagQuantityOrdered + ' input');
- let quantityOrdered = DOM.getElementValueCurrent(inputQuantityOrdered);
-
- let divCostUnitLocalVatExcl = row.querySelector('td.' + flagCostUnitLocalVatExcl + ' div');
- let costUnitLocalVatExcl = quantityOrdered == 0 ? 0 : costTotalLocalVatExcl / quantityOrdered;
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, costUnitLocalVatExcl.toFixed(3));
-
- let rowSupplierPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
- let divCostGrandTotalLocalVatExcl = rowSupplierPurchaseOrder.querySelector('td.' + flagCostTotalLocalVatExcl + ' div');
- let inputsCostTotalLocalVatExcl = rowSupplierPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatExcl + ' input');
- let costGrandTotalLocalVatExcl = Array.from(inputsCostTotalLocalVatExcl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0);
- DOM.setElementValueCurrent(divCostGrandTotalLocalVatExcl, costGrandTotalLocalVatExcl);
- }
- updateFieldsCostUnitLocalVatIncl(elementChanged) {
- let row = elementChanged.closest('tr.' + flagOrderItems);
- let inputCostTotalLocalVatIncl = row.querySelector('td.' + flagCostTotalLocalVatIncl + ' input');
- let costTotalLocalVatIncl = DOM.getElementValueCurrent(inputCostTotalLocalVatIncl);
- let inputQuantityOrdered = row.querySelector('td.' + flagQuantityOrdered + ' input');
- let quantityOrdered = DOM.getElementValueCurrent(inputQuantityOrdered);
-
- let divCostUnitLocalVatIncl = row.querySelector('td.' + flagCostUnitLocalVatIncl + ' div');
- let costUnitLocalVatIncl = quantityOrdered == 0 ? 0 : costTotalLocalVatIncl / quantityOrdered;
- DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, costUnitLocalVatIncl.toFixed(3));
-
- let rowSupplierPurchaseOrder = row.closest(idTableMain + ' > tbody > tr');
- let divCostGrandTotalLocalVatIncl = rowSupplierPurchaseOrder.querySelector('td.' + flagCostTotalLocalVatIncl + ' div');
- let inputsCostTotalLocalVatIncl = rowSupplierPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagCostTotalLocalVatIncl + ' input');
- let costGrandTotalLocalVatIncl = Array.from(inputsCostTotalLocalVatIncl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0);
- DOM.setElementValueCurrent(divCostGrandTotalLocalVatIncl, costGrandTotalLocalVatIncl);
- }
- hookupFieldsOrderItemLatencyDeliveryDays() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagLatencyDeliveryDays + ' input');
- }
- hookupFieldsOrderItemActive() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' input.' + flagActive);
- }
- hookupFieldsOrderItemAddDelete() {
- let selectorButton = idTableMain + ' td.' + flagOrderItems + ' td.' + flagOrderItems + ' button';
- let selectorButtonDelete = selectorButton + '.' + flagDelete;
- let selectorButtonUndelete = selectorButton + '.' + flagAdd;
- this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsOrderItemAdd();
- }
- hookupButtonsOrderItemAdd() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' th button.' + flagAdd, (event, element) => {
- let row = element.closest(idTableMain + ' > tbody > tr');
- let idSupplierPurchaseOrder = row.getAttribute(attrIdSupplierPurchaseOrder);
- // let hasActiveOrderItem = row.querySelectorAll('td.' + flagOrderItems + ' input.' + flagActive + ':checked').length > 0;
- let countSupplierOrderItems = row.querySelectorAll('td.' + flagOrderItems + ' td.' + flagSupplierPurchaseOrder).length;
- let supplierOrderItem = {
- [attrIdSupplierPurchaseOrder]: idSupplierPurchaseOrder,
- [attrIdSupplierPurchaseOrderProductLink]: -1 - countSupplierOrderItems,
- [attrIdProductCategory]: 0,
- [attrIdProduct]: 0,
- [flagProductVariations]: '',
- [attrIdUnitMeasurementQuantity]: 0,
- [flagQuantityOrdered]: '',
- [flagQuantityReceived]: '',
- [flagCostTotalLocalVatExcl]: '',
- [flagCostTotalLocalVatIncl]: '',
- [flagCostUnitLocalVatExcl]: '',
- [flagCostUnitLocalVatIncl]: '',
- [flagLatencyDeliveryDays]: '',
- [flagDisplayOrder]: countSupplierOrderItems + 1,
- [flagActive]: true, // !hasActiveOrderItem,
- };
- let tbody = row.querySelector('td.' + flagOrderItems + ' table tbody');
- this.addRowSupplierPurchaseOrderItem(tbody, supplierOrderItem);
- /*
- if (!hasActiveOrderItem) {
- let tdOrderItem = row.querySelector('td.' + flagOrderItems);
- // tdOrderItem.setAttribute(attrIdSupplierOrderItem, supplierOrderItem[attrIdSupplierOrderItem]);
- DOM.setElementAttributeValueCurrent(tdOrderItem, supplierOrderItem[attrIdSupplierPurchaseOrderProductLink]);
- }
- */
- this.hookupOrderItemsFields();
- });
- }
-
- leave() {
- super.leave();
- }
-}
-
diff --git a/static/js/pages/store/suppliers.js b/static/js/pages/store/suppliers.js
deleted file mode 100644
index 45d0faf5..00000000
--- a/static/js/pages/store/suppliers.js
+++ /dev/null
@@ -1,381 +0,0 @@
-
-import API from "../../api.js";
-import BusinessObjects from "../../lib/business_objects/business_objects.js";
-import DOM from "../../dom.js";
-import Events from "../../lib/events.js";
-import TableBasePage from "../base_table.js";
-import Utils from "../../lib/utils.js";
-import Validation from "../../lib/validation.js";
-import StoreTableMixinPage from "./mixin_table.js";
-
-export default class PageStoreSuppliers extends TableBasePage {
- static hash = hashPageStoreSuppliers;
- static attrIdRowObject = attrIdSupplier;
- callSaveTableContent = API.saveSuppliers;
-
- constructor(router) {
- super(router);
- this.storeMixin = new StoreTableMixinPage(this);
- }
-
- initialize() {
- this.sharedInitialize();
- }
-
- hookupFilters() {
- this.sharedHookupFilters();
- this.hookupFilterActive();
- }
-
- loadRowTable(rowJson) {
- }
- getJsonRow(row) {
- if (row == null) return;
- let textareaNameCompany = row.querySelector('td.' + flagNameCompany + ' textarea');
- let textareaNameContact = row.querySelector('td.' + flagNameContact + ' textarea');
- let textareaDepartmentContact = row.querySelector('td.' + flagDepartmentContact + ' textarea');
- let tdAddress = row.querySelector('td.' + flagAddress);
- let textareaPhoneNumber = row.querySelector('td.' + flagPhoneNumber + ' textarea');
- let textareaFax = row.querySelector('td.' + flagFax + ' textarea');
- let textareaEmail = row.querySelector('td.' + flagEmail + ' textarea');
- let textareaWebsite = row.querySelector('td.' + flagWebsite + ' textarea');
- let tdCurrency = row.querySelector('td.' + flagCurrency);
- let buttonActive = row.querySelector(':scope > td.' + flagActive + ' button');
-
- let jsonRow = {};
- jsonRow[attrIdSupplier] = row.getAttribute(attrIdSupplier);
- jsonRow[flagNameCompany] = DOM.getElementAttributeValueCurrent(textareaNameCompany);
- jsonRow[flagNameContact] = DOM.getElementAttributeValueCurrent(textareaNameContact);
- jsonRow[flagDepartmentContact] = DOM.getElementAttributeValueCurrent(textareaDepartmentContact);
- jsonRow[attrIdSupplierAddress] = DOM.getElementAttributeValueCurrent(tdAddress);
- jsonRow[flagSupplierAddress] = this.getSupplierAddressesFromRow(row);
- jsonRow[flagPhoneNumber] = DOM.getElementAttributeValueCurrent(textareaPhoneNumber);
- jsonRow[flagFax] = DOM.getElementAttributeValueCurrent(textareaFax);
- jsonRow[flagEmail] = DOM.getElementAttributeValueCurrent(textareaEmail);
- jsonRow[flagWebsite] = DOM.getElementAttributeValueCurrent(textareaWebsite);
- jsonRow[attrIdCurrency] = DOM.getElementAttributeValueCurrent(tdCurrency);
- jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
- return jsonRow;
- }
- getSupplierAddressesFromRow(row) {
- let supplierAddresses = [];
- let trs = row.querySelectorAll('td.' + flagAddress + ' tbody tr');
- let address, inputPostcode, inputAddressLine1, inputAddressLine2, inputCity, inputCounty, ddlRegion, inputActive;
- trs.forEach((tr) => {
- inputPostcode = tr.querySelector('td.' + flagPostcode + ' textarea');
- inputAddressLine1 = tr.querySelector('td.' + flagAddressLine1 + ' textarea');
- inputAddressLine2 = tr.querySelector('td.' + flagAddressLine2 + ' textarea');
- inputCity = tr.querySelector('td.' + flagCity + ' textarea');
- inputCounty = tr.querySelector('td.' + flagCounty + ' textarea');
- ddlRegion = tr.querySelector('td.' + flagRegion + ' select');
- inputActive = tr.querySelector('td.' + flagActive + ' input');
- address = {
- [attrIdSupplierAddress]: tr.getAttribute(attrIdSupplierAddress),
- [attrIdSupplier]: row.getAttribute(attrIdSupplier),
- [flagPostcode]: DOM.getElementAttributeValueCurrent(inputPostcode),
- [flagAddressLine1]: DOM.getElementAttributeValueCurrent(inputAddressLine1),
- [flagAddressLine2]: DOM.getElementAttributeValueCurrent(inputAddressLine2),
- [flagCity]: DOM.getElementAttributeValueCurrent(inputCity),
- [flagCounty]: DOM.getElementAttributeValueCurrent(inputCounty),
- [attrIdRegion]: DOM.getElementAttributeValueCurrent(ddlRegion),
- [flagActive]: DOM.getElementAttributeValueCurrent(inputActive),
- };
- supplierAddresses.push(address);
- });
- return supplierAddresses;
- }
- initialiseRowNew(tbody, row) {
- super.initialiseRowNew(tbody, row);
- }
-
- hookupTableMain() {
- super.hookupTableMain();
- this.hookupNameCompanyInputs();
- this.hookupNameContactInputs();
- this.hookupDepartmentContactInputs();
- this.hookupAddressFields();
- this.hookupPhoneNumberInputs();
- this.hookupFaxInputs();
- this.hookupEmailInputs();
- this.hookupWebsiteInputs();
- this.hookupCurrencyFields();
- this.hookupFieldsActive();
- }
- hookupNameCompanyInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagNameCompany + ' textarea');
- }
- hookupNameContactInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagNameContact + ' textarea');
- }
- hookupDepartmentContactInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagDepartmentContact + ' textarea');
- }
-
- hookupAddressFields() {
- this.hookupAddressPreviews();
- this.hookupAddressPostcodeInputs();
- this.hookupAddressLine1Inputs();
- this.hookupAddressLine2Inputs();
- this.hookupAddressCityInputs();
- this.hookupAddressCountyInputs();
- this.hookupAddressRegionDdls();
- this.hookupAddressActiveCheckboxes();
- this.hookupAddressDeleteButtons();
- this.hookupAddressUndeleteButtons();
- this.hookupAddressAddButtons();
- }
- hookupAddressPreviews() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagAddress, (event, td) => {
- if (!td.classList.contains(flagCollapsed)) return;
- this.handleClickAddressPreview(event, td);
- });
- }
- handleClickAddressPreview(event, element) {
- if (_verbose) { console.log("click address preview"); }
- this.toggleColumnHeaderCollapsed(flagAddress, false);
- element.classList.remove(flagCollapsed);
- let row = DOM.getRowFromElement(element);
- let idSupplier = row.getAttribute(attrIdSupplier);
- let supplierAddressList = idSupplier > 0 ? supplierAddresses[idSupplier] : [];
- let tblAddresses = document.createElement("table");
- tblAddresses.classList.add(flagAddress);
- let thead = document.createElement("thead");
- let tr = document.createElement("tr");
- let thPostcode = document.createElement("th");
- thPostcode.classList.add(flagPostcode);
- thPostcode.textContent = 'Postcode';
- let thAddressLine1 = document.createElement("th");
- thAddressLine1.classList.add(flagAddressLine1);
- thAddressLine1.textContent = 'Address Line 1';
- let thAddressLine2 = document.createElement("th");
- thAddressLine2.classList.add(flagAddressLine2);
- thAddressLine2.textContent = 'Address Line 2';
- let thCity = document.createElement("th");
- thCity.classList.add(flagCity);
- thCity.textContent = 'City';
- let thCounty = document.createElement("th");
- thCounty.classList.add(flagCounty);
- thCounty.textContent = 'County';
- let thRegion = document.createElement("th");
- thRegion.classList.add(flagRegion);
- thRegion.textContent = 'Region';
- let thActive = document.createElement("th");
- thActive.classList.add(flagActive);
- thActive.textContent = 'Active';
- let thAddDelete = document.createElement("th");
- thAddDelete.classList.add(flagAdd);
- let buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- thAddDelete.appendChild(buttonAdd);
-
- tr.appendChild(thPostcode);
- tr.appendChild(thAddressLine1);
- tr.appendChild(thAddressLine2);
- tr.appendChild(thCity);
- tr.appendChild(thCounty);
- tr.appendChild(thRegion);
- tr.appendChild(thActive);
- tr.appendChild(thAddDelete);
- thead.appendChild(tr);
- tblAddresses.appendChild(thead);
-
- let tbody = document.createElement("tbody");
- let regionOptions = Utils.getListFromDict(regions);
- supplierAddressList.forEach((supplierAddress, index) => {
- this.addRowSupplierAddress(tbody, supplierAddress, regionOptions);
- });
- tblAddresses.appendChild(tbody);
-
- let cell = DOM.getCellFromElement(element);
- let cellNew = cell.cloneNode(false);
- cellNew.appendChild(tblAddresses);
- row.replaceChild(cellNew, cell);
- if (_verbose) { console.log("tblAddresses: ", tblAddresses); }
- this.hookupAddressFields();
- }
- addRowSupplierAddress(tbody, supplierAddress, regionOptions) {
- if (_verbose) { console.log("addRowSupplierAddress: ", supplierAddress); }
- let tdPostcode = document.createElement("td");
- tdPostcode.classList.add(flagPostcode);
- let textareaPostcode = document.createElement("textarea");
- textareaPostcode.classList.add(flagPostcode);
- DOM.setElementValuesCurrentAndPrevious(textareaPostcode, supplierAddress[flagPostcode]);
- tdPostcode.appendChild(textareaPostcode);
-
- let tdAddressLine1 = document.createElement("td");
- tdAddressLine1.classList.add(flagAddressLine1);
- let textareaAddressLine1 = document.createElement("textarea");
- textareaAddressLine1.classList.add(flagAddressLine1);
- DOM.setElementValuesCurrentAndPrevious(textareaAddressLine1, supplierAddress[flagAddressLine1]);
- tdAddressLine1.appendChild(textareaAddressLine1);
-
- let tdAddressLine2 = document.createElement("td");
- tdAddressLine2.classList.add(flagAddressLine2);
- let textareaAddressLine2 = document.createElement("textarea");
- textareaAddressLine2.classList.add(flagAddressLine2);
- DOM.setElementValuesCurrentAndPrevious(textareaAddressLine2, supplierAddress[flagAddressLine2]);
- tdAddressLine2.appendChild(textareaAddressLine2);
-
- let tdCity = document.createElement("td");
- tdCity.classList.add(flagCity);
- let textareaCity = document.createElement("textarea");
- textareaCity.classList.add(flagCity);
- DOM.setElementValuesCurrentAndPrevious(textareaCity, supplierAddress[flagCity]);
- tdCity.appendChild(textareaCity);
-
- let tdCounty = document.createElement("td");
- tdCounty.classList.add(flagCounty);
- let textareaCounty = document.createElement("textarea");
- textareaCounty.classList.add(flagCounty);
- DOM.setElementValuesCurrentAndPrevious(textareaCounty, supplierAddress[flagCounty]);
- tdCounty.appendChild(textareaCounty);
-
- let region = supplierAddress[flagRegion];
- if (!region) region = {[attrIdRegion]: ''};
- let tdRegion = document.createElement("td");
- tdRegion.classList.add(flagRegion);
- DOM.setElementAttributesValuesCurrentAndPrevious(tdRegion, region[attrIdRegion]);
- let ddlRegion = document.createElement("select");
- ddlRegion.classList.add(flagRegion);
- let optionJson, option;
- option = DOM.createOption(null);
- ddlRegion.appendChild(option);
- regionOptions.forEach((regionOption) => {
- optionJson = BusinessObjects.getOptionJsonFromObjectJson(regionOption);
- option = DOM.createOption(optionJson);
- ddlRegion.appendChild(option);
- });
- DOM.setElementValuesCurrentAndPrevious(ddlRegion, region[attrIdRegion]);
- tdRegion.appendChild(ddlRegion);
-
- let tdActive = this.createTdActive(supplierAddress[flagActive]);
-
- let tr = document.createElement("tr");
- tr.setAttribute(attrIdSupplierAddress, supplierAddress[attrIdSupplierAddress]);
- tr.setAttribute(attrIdSupplier, supplierAddress[attrIdSupplier]);
- tr.appendChild(tdPostcode);
- tr.appendChild(tdAddressLine1);
- tr.appendChild(tdAddressLine2);
- tr.appendChild(tdCity);
- tr.appendChild(tdCounty);
- tr.appendChild(tdRegion);
- tr.appendChild(tdActive);
- tbody.appendChild(tr);
- }
- hookupAddressPostcodeInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagPostcode);
- }
- hookupAddressLine1Inputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagAddressLine1);
- }
- hookupAddressLine2Inputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagAddressLine2);
- }
- hookupAddressCityInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagCity);
- }
- hookupAddressCountyInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagCounty);
- }
- hookupAddressRegionDdls() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' select.' + flagRegion);
- }
- hookupAddressActiveCheckboxes() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' input.' + flagActive, (event, element) => {
- let rowSupplierAddress = element.closest('tr');
- let idAddress = rowSupplierAddress.getAttribute(attrIdSupplierAddress);
- DOM.setElementAttributeValueCurrent(rowSupplierAddress, idAddress);
- let rowSupplier = rowSupplierAddress.closest(idTableMain + ' > tbody > tr');
- let checkboxesActive = rowSupplier.querySelectorAll('td.' + flagAddress + ' input.' + flagActive);
- let isActive = element.checked;
- if (isActive) {
- checkboxesActive.forEach((checkbox) => {
- if (checkbox == element) return;
- DOM.setElementValueCurrent(checkbox, false);
- });
- }
- /*
- else if (checkboxesActive.length > 0) {
- DOM.setElementValueCurrent(checkboxesActive[0], false);
- }
- */
- });
- }
- hookupFieldsAddressAddDelete() {
- let selectorButton = idTableMain + ' td.' + flagAddress + ' button';
- let selectorButtonDelete = selectorButton + '.' + flagDelete;
- let selectorButtonUndelete = selectorButton + '.' + flagAdd;
- this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
- this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
- }
- hookupAddressDeleteButtons() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagAddress + ' button.' + flagDelete, (event, element) => {
- let row = DOM.getRowFromElement(element);
- row.classList.add(flagDelete);
-
- let buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- element.replaceWith(buttonAdd);
- this.hookupAddressUndeleteButtons();
- });
- }
- hookupAddressUndeleteButtons() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagAddress + ' td button.' + flagAdd, (event, element) => {
- let row = DOM.getRowFromElement(element);
- row.classList.remove(flagDelete);
-
- let buttonDelete = document.createElement("button");
- buttonDelete.classList.add(flagDelete);
- buttonDelete.textContent = 'x';
- element.replaceWith(buttonDelete);
- this.hookupAddressDeleteButtons();
- });
- }
- hookupAddressAddButtons() {
- this.hookupEventHandler("click", idTableMain + ' td.' + flagAddress + ' th button.' + flagAdd, (event, element) => {
- let row = element.closest(idTableMain + ' > tbody > tr');
- let idSupplier = row.getAttribute(attrIdSupplier);
- let hasActiveAddress = row.querySelectorAll('td.' + flagAddress + ' input.' + flagActive + ':checked').length > 0;
- let countSupplierAddresses = row.querySelectorAll('td.' + flagAddress + ' td.' + flagAddress).length;
- let supplierAddress = {
- [attrIdSupplier]: idSupplier,
- [attrIdSupplierAddress]: -1 - countSupplierAddresses,
- [flagPostcode]: '',
- [flagAddressLine1]: '',
- [flagAddressLine2]: '',
- [flagCity]: '',
- [flagCounty]: '',
- [attrIdRegion]: '',
- [flagActive]: !hasActiveAddress,
- };
- let tbody = row.querySelector('td.' + flagAddress + ' table tbody');
- this.addRowSupplierAddress(tbody, supplierAddress, Utils.getListFromDict(regions));
- if (!hasActiveAddress) {
- let tdAddress = row.querySelector('td.' + flagAddress);
- // tdAddress.setAttribute(attrIdSupplierAddress, supplierAddress[attrIdSupplierAddress]);
- DOM.setElementAttributeValueCurrent(tdAddress, supplierAddress[attrIdSupplierAddress]);
- }
- this.hookupAddressFields();
- });
- }
-
- hookupPhoneNumberInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPhoneNumber + ' textarea');
- }
- hookupFaxInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagFax + ' textarea');
- }
- hookupEmailInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagEmail + ' textarea');
- }
- hookupWebsiteInputs() {
- this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagWebsite + ' textarea');
- }
-
- leave() {
- super.leave();
- }
-}
-
diff --git a/static/js/router.js b/static/js/router.js
index bbda72a8..ae01d0a0 100644
--- a/static/js/router.js
+++ b/static/js/router.js
@@ -1,42 +1,18 @@
// Pages
// Core
-import PageAdminHome from './pages/core/admin_home.js';
import PageHome from './pages/core/home.js';
import PageContact from './pages/core/contact.js';
-import PageServices from './pages/core/services.js';
// Legal
import PageAccessibilityReport from './pages/legal/accessibility_report.js';
import PageAccessibilityStatement from './pages/legal/accessibility_statement.js';
import PageLicense from './pages/legal/license.js';
-// Store
-import PageStoreBasket from './pages/store/basket.js';
-import PageStoreHome from './pages/store/home.js';
-import PageStoreManufacturingPurchaseOrders from './pages/store/manufacturing_purchase_orders.js';
-import PageStoreProductCategories from './pages/store/product_categories.js';
-import PageStoreProductPermutations from './pages/store/product_permutations.js';
-// import PageStoreProductPrices from './pages/store/product_prices.js';
-import PageStoreProducts from './pages/store/products.js';
-import PageStoreProductVariations from './pages/store/product_variations.js';
-import PageStoreStockItems from './pages/store/stock_items.js';
-import PageStoreSuppliers from './pages/store/suppliers.js';
-import PageStoreSupplierPurchaseOrders from './pages/store/supplier_purchase_orders.js';
// User
// import PageUserLogin from './pages/user/login.js';
// import PageUserLogout from './pages/user/logout.js';
// import PageUserAccount from './pages/user/account.js';
-/*
-import "./lib/common.js";
-import "./lib/constants.js";
-import "./lib/events.js";
-import "./lib/extras.js";
-// import "./DEPRECATED/init.js";
-import "./lib/local_storage.js";
-import "./lib/utils.js";
-import "./lib/validation.js";
-*/
import API from './api.js';
import DOM from './dom.js';
@@ -56,10 +32,6 @@ const pageModules = {
// Legal
[hashPageAccessibilityStatement]: () => import('./pages/legal/accessibility_statement.js'),
[hashPageLicense]: () => import('./pages/legal/license.js'),
- // Store
- [hashPageStoreProductCategories]: () => import('./pages/store/product_categories.js'),
- [hashPageStoreProductPermutations]: () => import('./pages/store/product_permutations.js'),
- // [hashPageStoreProducts]: () => import('./pages/store/products.js'),
// User
// Add other pages here...
};
@@ -70,25 +42,13 @@ export default class Router {
// Pages
this.pages = {};
// Core
- this.pages[hashPageHome] = { name: 'PageHome', module: PageAdminHome }; // importModule: () => import(/* webpackChunkName: "page_core_home" */ './pages/core/home.js') , pathModule: './pages/core/home.js'
+ this.pages[hashPageHome] = { name: 'PageHome', module: PageHome }; // importModule: () => import(/* webpackChunkName: "page_core_home" */ './pages/core/home.js') , pathModule: './pages/core/home.js'
this.pages[hashPageContact] = { name: 'PageContact', module: PageContact }; // pathModule: './pages/core/contact.js' };
- this.pages[hashPageServices] = { name: 'PageServices', module: PageServices }; // pathModule: './pages/core/services.js' };
- this.pages[hashPageAdminHome] = { name: 'PageAdminHome', module: PageAdminHome }; // pathModule: './pages/core/admin_home.js' };
// Legal
this.pages[hashPageAccessibilityStatement] = { name: 'PageAccessibilityStatement', module: PageAccessibilityStatement }; // pathModule: '../../static/js/pages/legal/accessibility_statement.js' }; // , page: PageAccessibilityStatement
this.pages[hashPageDataRetentionSchedule] = { name: 'PageDataRetentionSchedule', module: PageRetentionSchedule }; // pathModule: './pages/legal/data_retention_schedule.js' };
this.pages[hashPageLicense] = { name: 'PageLicense', module: PageLicense }; // pathModule: './pages/legal/license.js' };
this.pages[hashPagePrivacyPolicy] = { name: 'PagePrivacyPolicy', module: PagePrivacyPolicy }; // pathModule: './pages/legal/privacy_policy.js' }; // importModule: () => {return import(/* webpackChunkName: "page_privacy_policy" */ './pages/legal/privacy_policy.js'); }
- // Store
- this.pages[hashPageStoreManufacturingPurchaseOrders] = { name: 'PageManufacturingPurchaseOrders', module: PageStoreManufacturingPurchaseOrders }; // pathModule
- this.pages[hashPageStoreProductCategories] = { name: 'PageStoreProductCategories', module: PageStoreProductCategories }; // pathModule: './pages/store/product_categories.js' };
- this.pages[hashPageStoreProductPermutations] = { name: 'PageStoreProductPermutations', module: PageStoreProductPermutations }; // pathModule: './pages/store/product_permutations.js' };
- // this.pages[hashPageStoreProductPrices] = { name: 'PageStoreProductPrices', module: PageStoreProductPrices }; // pathModule: './pages/store/product_prices.js' };
- this.pages[hashPageStoreProducts] = { name: 'PageStoreProducts', module: PageStoreProducts }; // pathModule: './pages/store/products.js' };
- this.pages[hashPageStoreProductVariations] = { name: 'PageStoreProductVariations', module: PageStoreProductVariations }; // pathModule: './pages/store/product_variations.js' };
- this.pages[hashPageStoreStockItems] = { name: 'PageStoreStockItems', module: PageStoreStockItems };
- this.pages[hashPageStoreSuppliers] = { name: 'PageStoreSuppliers', module: PageStoreSuppliers };
- this.pages[hashPageStoreSupplierPurchaseOrders] = { name: 'PageSupplierPurchaseOrders', module: PageStoreSupplierPurchaseOrders };
// User
// this.pages[hashPageUserLogin] = { name: 'PageUserLogin', module: PageUserLogin }; // pathModule: './pages/user/login.js' };
// this.pages[hashPageUserLogout] = { name: 'PageUserLogout', module: PageUserLogout }; // pathModule: './pages/user/logout.js' };
@@ -99,23 +59,11 @@ export default class Router {
// Core
this.routes[hashPageHome] = (isPopState = false) => this.navigateToHash(hashPageHome, isPopState);
this.routes[hashPageContact] = (isPopState = false) => this.navigateToHash(hashPageContact, isPopState);
- this.routes[hashPageServices] = (isPopState = false) => this.navigateToHash(hashPageServices, isPopState);
- this.routes[hashPageAdminHome] = (isPopState = false) => this.navigateToHash(hashPageAdminHome, isPopState);
// Legal
this.routes[hashPageAccessibilityStatement] = (isPopState = false) => this.navigateToHash(hashPageAccessibilityStatement, isPopState);
this.routes[hashPageDataRetentionSchedule] = (isPopState = false) => this.navigateToHash(hashPageDataRetentionSchedule, isPopState);
this.routes[hashPageLicense] = (isPopState = false) => this.navigateToHash(hashPageLicense, isPopState);
this.routes[hashPagePrivacyPolicy] = (isPopState = false) => this.navigateToHash(hashPagePrivacyPolicy, isPopState);
- // Store
- this.routes[hashPageStoreManufacturingPurchaseOrders] = (isPopState = false) => this.navigateToHash(hashPageStoreManufacturingPurchaseOrders, isPopState);
- this.routes[hashPageStoreProductCategories] = (isPopState = false) => this.navigateToHash(hashPageStoreProductCategories, isPopState);
- this.routes[hashPageStoreProductPermutations] = (isPopState = false) => this.navigateToHash(hashPageStoreProductPermutations, isPopState);
- // this.routes[hashPageStoreProductPrices] = (isPopState = false) => this.navigateToHash(hashPageStoreProductPrices, isPopState);
- this.routes[hashPageStoreProducts] = (isPopState = false) => this.navigateToHash(hashPageStoreProducts, isPopState);
- this.routes[hashPageStoreProductVariations] = (isPopState = false) => this.navigateToHash(hashPageStoreProductVariations, isPopState);
- this.routes[hashPageStoreStockItems] = (isPopState = false) => this.navigateToHash(hashPageStoreStockItems, isPopState);
- this.routes[hashPageStoreSuppliers] = (isPopState = false) => this.navigateToHash(hashPageStoreSuppliers, isPopState);
- this.routes[hashPageStoreSupplierPurchaseOrders] = (isPopState = false) => this.navigateToHash(hashPageStoreSupplierPurchaseOrders, isPopState);
// User
// this.routes[hashPageUserLogin] = (isPopState = false) => this.navigateToHash(hashPageUserLogin, isPopState);
// this.routes[hashPageUserLogout] = (isPopState = false) => this.navigateToHash(hashPageUserLogout, isPopState);
@@ -193,134 +141,6 @@ export default class Router {
API.goToUrl(url);
}
- /*
- static getPages() {
- let pages = {};
- pages[hashPageAccessibilityStatement] = PageAccessibilityStatement;
- pages[hashPageAdminHome] = PageAdminHome;
- pages[hashPageHome] = PageHome;
- pages[hashPageContact] = PageContact;
- pages[hashPageLicense] = PageLicense;
- pages[hashPageServices] = PageServices;
- pages[hashPageStoreBasket] = PageStoreBasket;
- pages[hashPageStoreHome] = PageStoreHome;
- pages[hashPageStoreProductCategories] = PageStoreProductCategories;
- pages[hashPageStoreProductPermutations] = PageStoreProductPermutations;
- // pages[hashPageStoreProductPrices] = PageStoreProductPrices;
- // pages[hashPageStoreProducts] = PageStoreProducts;
- // pages[hashPageStoreProductVariations] = PageStoreProductVariations;
- pages[hashPageStoreStockItems] = PageStoreStockItems;
- console.log("pages: ", pages);
- return pages;
- }
-
- addRoute(path, handler) {
- this.routes[path] = handler;
- }
-
- handlePopState(event) {
- /*
- let url = window.location.pathname;
- url = url.split('?')[0];
- let hash = url.replace(_pathHost, '');
- console.log("handlePopState: " + hash);
- this.handleRouteHash(hash);
- *
- let pageCurrent = Router.getPageCurrent();
- pageCurrent.initialize(true);
- }
-
- navigateToHash(hash, data = null) {
- const url = API.getUrlFromHash(hash);
- this.navigateToUrl(url, data);
- }
-
-
- leavePageCurrent() {
- const pageCurrent = Router.getPageCurrent();
- if (pageCurrent) pageCurrent.leave();
- }
-
- static getPageCurrent() {
- if (_pageCurrent) return _pageCurrent;
- const hashPageCurrent = DOM.getHashPageCurrent();
- console.log("hashPageCurrent: " + hashPageCurrent);
- const pages = Router.getPages();
- let page;
- for (const key of Object.keys(pages)) {
- page = pages[key];
- console.log("page hashL ", page.hash);
- if (page.hash == hashPageCurrent) return new page();
- }
- throw new Error('Page not found: ' + hashPageCurrent);
- }
-
- static parameteriseUrl(url, parameters) {
- if (!Validation.isEmpty(parameters)) {
- url += '%3F'; // '?';
- let firstParameter = true;
- for (var p in parameters) {
- if (!firstParameter) {
- url += '&';
- } else {
- firstParameter = false;
- }
- url += parameters[p];
- }
- }
- return url;
- }
- */
-
- /*
- handleRouteUrl(url) {
- const path = url.split('?')[0]; // Remove query parameters
- if (this.routes[path]) {
- this.routes[path]();
- } else if (url.includes('auth0.com')) {
- Router.goToUrl(url);
- } else {
- console.warn('No handler found for path:', path);
- // Optionally, handle 404 or redirect to a default route
- }
- }
-
- handleRouteHash(hash) {
- if (this.routes[hash]) {
- this.routes[hash]();
- } else {
- console.warn('No handler found for hash:', hash);
- }
- }
- */
-
- /*
- static htmlEncode(value) {
- return document.createElement('').text(value).innerHTML;
- }
-
- static htmlDecode(value) {
- if (_domParser == null) _domParser = DOMParser(); // https://www.w3docs.com/snippets/javascript/how-to-html-encode-a-string.html
- return _domParser.parseFromString(value, 'text/html').documentElement.textContent;
- }
- */
-
- // Additional utility methods
- /*
- static getQueryParams() {
- return Object.fromEntries(new URLSearchParams(window.location.search));
- }
-
- static updateQueryParams(params) {
- const searchParams = new URLSearchParams(window.location.search);
- for (const [key, value] of Object.entries(params)) {
- searchParams.set(key, value);
- }
- const newUrl = `${window.location.pathname}?${searchParams.toString()}`;
- history.replaceState(null, '', newUrl);
- }
- */
-
static loadPageBodyFromResponse(response) {
DOM.loadPageBody(response.data);
}
diff --git a/static/js/sections/store.js b/static/js/sections/store.js
deleted file mode 100644
index e69de29b..00000000
diff --git a/templates/DEPRECATED/DEPRECATED_block_store_product.html b/templates/DEPRECATED/DEPRECATED_block_store_product.html
deleted file mode 100644
index 8b58a82f..00000000
--- a/templates/DEPRECATED/DEPRECATED_block_store_product.html
+++ /dev/null
@@ -1,24 +0,0 @@
-
-{% if product.has_permutations() %}
- {% set permutation = product.get_permutation_selected() %}
-
-
-
.url }})
-
- {% if permutation.is_available() %}
- {% set form = product.form_basket_add %}
-
- {% endif %}
-
-
-{% endif %}
\ No newline at end of file
diff --git a/templates/DEPRECATED/DEPRECATED_block_store_product_price.html b/templates/DEPRECATED/DEPRECATED_block_store_product_price.html
deleted file mode 100644
index aaa58302..00000000
--- a/templates/DEPRECATED/DEPRECATED_block_store_product_price.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
{{ product.output_price() }}
- {% set form = product.form_basket_add %}
-
-
-
\ No newline at end of file
diff --git a/templates/DEPRECATED/DEPRECATED_page_home.html b/templates/DEPRECATED/DEPRECATED_page_home.html
deleted file mode 100644
index 2fbe2f12..00000000
--- a/templates/DEPRECATED/DEPRECATED_page_home.html
+++ /dev/null
@@ -1,26 +0,0 @@
-{% extends 'layouts/layout.html' %}
-
-{% block title %}{{ model.title }}{% endblock %}
-
-{% block page_body %}
-
-
-
-
-
-
-
Offering a full suite of software engineering services.
-
-
-
-
-
-
-
-{% endblock %}
\ No newline at end of file
diff --git a/templates/DEPRECATED/DEPRECATEDlayout_store.html b/templates/DEPRECATED/DEPRECATEDlayout_store.html
deleted file mode 100644
index 1c3fefc6..00000000
--- a/templates/DEPRECATED/DEPRECATEDlayout_store.html
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
-
-
- {% block title %}{% endblock %} - PARTS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {% block page_body %}{% endblock %}
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/templates/DEPRECATED/_block_select_access_level.html b/templates/DEPRECATED/_block_select_access_level.html
deleted file mode 100644
index da831bc9..00000000
--- a/templates/DEPRECATED/_block_select_access_level.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{% if id_access_level is defined %}
-
-{% else %}
-
-{% endif %}
\ No newline at end of file
diff --git a/templates/DEPRECATED/_block_slider.html b/templates/DEPRECATED/_block_slider.html
deleted file mode 100644
index 047dca0f..00000000
--- a/templates/DEPRECATED/_block_slider.html
+++ /dev/null
@@ -1 +0,0 @@
-☰
\ No newline at end of file
diff --git a/templates/DEPRECATED/_block_store_product_category_card.html b/templates/DEPRECATED/_block_store_product_category_card.html
deleted file mode 100644
index cba6e922..00000000
--- a/templates/DEPRECATED/_block_store_product_category_card.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
{{ cat.name }}
-
- {% for product in cat.products %}
- {% include 'components/store/_product.html' %}
- {% endfor %}
-
-
diff --git a/templates/DEPRECATED/layout - stripe.html b/templates/DEPRECATED/layout - stripe.html
deleted file mode 100644
index 323d4edb..00000000
--- a/templates/DEPRECATED/layout - stripe.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
- {% block title %}{% endblock %} - PARTS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {% block content %}{% endblock %}
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/templates/layouts/layout.html b/templates/layouts/layout.html
index 57c2647b..381b3146 100644
--- a/templates/layouts/layout.html
+++ b/templates/layouts/layout.html
@@ -3,75 +3,45 @@
- {{ model.title }} - {{ model.NAME_COMPANY }}
+ {{ model.title }} - {{ model.NAME_COMPANY_SHORT }}
-
-
--->
-
+
+
+
+
+
+