diff --git a/app.log.1 b/app.log.1
index 5f12f1da..0bd63758 100644
--- a/app.log.1
+++ b/app.log.1
@@ -1,15 +1,12 @@
-Server Error: (MySQLdb.OperationalError) (1054, "Unknown column 'cost_local' in 'field list'")
-[SQL: CALL p_shop_get_many_product(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)]
-[parameters: (1, True, False, '', True, False, '', True, False, '', False, False, '', False, 0)]
-(Background on this error at: https://sqlalche.me/e/20/e3q8)
-Request: 127.0.0.1 GET http /store/permutations? Host: 127.0.0.1:5000
+Server Error: name 'Parameters_Product' is not defined
+Request: 127.0.0.1 GET http /store/categories? Host: 127.0.0.1:5000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate, br, zstd
-Referer: http://127.0.0.1:5000/store/permutations
Dnt: 1
Connection: keep-alive
+Referer: http://127.0.0.1:5000/store/categories
Cookie: session=.eJytVlnzokgS_yoTRsw8tTY3-I_omPUCRUFB5HohCgqkuOUQcba_-xba090PM3tErKFYVZlk_rLy_GMCujYua9SE8NKE9eTjj0kACg_AHBVe05Z1OPlo6y789NNx92J8n4Y5QNnkYxLCHtRwliMIs7AtiyZHbfyP60idBWU--TSJUN20BcixwIkRQjjgMwS9oKvrsAgGD4YR6LJ28lF0WfYi1eEVlcVfEN4AyO9rbzSCwHJf___kWIHy52wgzFlIzAFP-IAkojAaFTbeC7F3D2sUoRBOPiKQNeGLgoog62AIPXNh_ND6thOTm67Cqn42vunqbwYpf9o9PY-GT77i-2rqyGvLNCwwXRB4GvoszUOf8Sma4aM5iCDPBYAGfsBAjgwYBkQjxO6bG0AQhE3zXUI4yLEvBeiI5BTYO3RYyZmfK-N-qSQXSidUdYd6BGz1uUtKBLY6EWwV7jDMU9d2Wr-AMXjuejVxMzdxy6OUMT5iyWBgY2jrpbJiE58i7ruCmM2yYR07BymE20hQltPHzAY9BQ5hOOzkRxAuTpDfXPcBf1k5WqwkR7Pzbmia7hQa3oZpxisnehCEqiwqLNObAzdvJG9nZ-fl9rjyjuyFcKfF5tjXTqG5BwJJ0cUs_eXtcSMYLQMFeZUOmmYe2cUmhsxG7rWkCfa5LW7OMbewDZgF5Wmf7kuFAVAMH1YfXwGFhFt89_VrMqUV0hC0Y5prvM3Ep6FYnWMPLabZahk3tkPvXdJJ85vqhY7DlGtIOf0wn9bLpa4_uav0kM3W8LeOH9JFGCy1WFRvuju9IQSyA9_4oi2ea49doPVD3YBeXhUaH2e6mapphD8VEDtVX9erjXNMTnpJ80fBuSnlNmF4Mr1uzQXTi8fDvCr4mamrZsoB1ScEw7rtnXK7aOMrDoPwUaE6bDyAQ5DkaYKlBZ4hfpwjHBQCxxDEKwv-IkrOl-eOVNGu2RU6G6x23C6tbHOF93lbueO-MO-h7V70lGH8RL672ytppuJBEWNSH-T5DAvrgKXWfi627hm_kJsppMTBXbEtsPTUl0zCp9inb2UEeAlmY9-6jMozdwvjINc6TEtd6ZFBad4FFFlBKV64FBkDq-8cat6OIRtIWQK35vDWERNwu3wekXDHoVkEuUg5th4H6B2eju3GUBKHw_PydNdqriQaoaxhqhrYWMphVMkZVEqNlXXAqE8duWuHONHKXF1fe7nYzQMpyN01WcKt3gfD5amdL4OO8C9XU5wOP6dCpqRYVy4Sji0_ZUOWXEvrAoktRszQXqYYV-aK8xiOl5nseoylVYxNq6zFi7JOOcXYcUqy6NRkR1ijI3KzdaysGdPTtXQay00POVm5kt64tn73C7UFWL8mwRffIVfv_vnHezbtZkGe5cAy011S5Y71eLrn_0PKY3sce5SJcRHwFtr6w0hJW6NiA9jxw3jim8pEzkxjW7PE7JxW3CVPxxJUObaGjsmGVp4LAvvgqa43I15mDDjFCJ7KWmOOa4VQMM6ANtGoA-siwHopqMmFUfIdq1oKczTMVFlnsfpcIsfY9G5u5q_YoLIXLjiQB42a67CQGWDLJyeraJcUKD3TCTNnVZDN-3Mi5gYOfoyrw3GZvOIpc4twuzyqWUUGhTzArfwEKXwopk6PpY5Y0ftSbp4N78ie3YpSRjuNtKF2REzu-ao-S_paR5vBH7RtqnJSdMYu4pfirlxCkzUXIHxKp1ogqelq6kVRcjuTlFzsiUQPs3XkWNJpfbBbfi8AckvkLmE0XlFFmtXpzVEn6bO5BzVdbC3y0TgU0THzm8F14uZeMqIBVHqeeO5GmhtHK6UYQyCHRcI30y6trekuue0HizkfdG5FMEkxZzyRmMY6cuim5S7DihrurFwXSb8ZiL1U-CIuyYfFpRZYjznQvtCtuRNvIunsOewRy3oKnV4fUL9cZXsqOxfafNke79Hl_mgAjFJyoWngXq7tYR-ZnPpQROoiOMF0X516m1tSJojP7F0HvGSO9asJymrsjPhZIPhLVZcRysJf3vPCp8mrYHnt8OJZhqDGTe_d-1ARla_-1-HmPLlKydDeVMVaxWf0uB15Stee5tbCFy_LOL8n_8sI8jetH5fUd41lBIFmxrHiz6LLsNT7oGmwgrhtq-bj82cY3qdFD1KK4Lgw4mIBPYpZ18xe08eo6jPW9W0w-M-gChSk_455ZCmLYKSb10elci6emOq2bhLpRho9JlcoaLtxUPuOsJlda3AHLahfcN7LzywN6YhiGIKHLMXykcBEFB8AgsedxYcc83vzhRGI3-ov1fU3-OUl61d68Ssl4m8Aix_24f1bZINXIZxVxcvjaHRYP92vSu1eP1B99N3-6nGi0ZqFkniVTEaHF2Pn_zezWldB0OJpbHTGhCIoZkqSU4I0iPkHSX1QxIyjGHfy9evXfwErYp4O.ZySbdA.IOzQ4B0k8HNh-01pbYKqF3sN8jI
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
@@ -22,83 +19,62 @@ Priority: u=0, i
Request data: b''
Traceback: Traceback (most recent call last):
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context
- self.dialect.do_execute(
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\default.py", line 924, in do_execute
- cursor.execute(statement, parameters)
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
- res = self._query(mogrified_query)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
- db.query(q)
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\MySQLdb\connections.py", line 261, in query
- _mysql.connection.query(self, query)
-MySQLdb.OperationalError: (1054, "Unknown column 'cost_local' in 'field list'")
-
-The above exception was the direct cause of the following exception:
-
-Traceback (most recent call last):
File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\controllers\store\product_permutation.py", line 98, in permutations
- model = Model_View_Store_Product_Permutation(form_filters)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\models\model_view_store_product_permutation.py", line 53, in __init__
- self.category_list, errors = datastore_store.get_many_product(filters_product)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\datastores\datastore_store_base.py", line 76, in get_many_product
- result = cls.db_procedure_execute('p_shop_get_many_product', argument_dict)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\datastores\datastore_base.py", line 96, in db_procedure_execute
- result = db.session.execute(proc_string, argument_dict_list)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\orm\scoping.py", line 778, in execute
- return self._proxied.execute(
- ^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\orm\session.py", line 2351, in execute
- return self._execute_internal(
- ^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\orm\session.py", line 2245, in _execute_internal
- result = conn.execute(
- ^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute
- return meth(
- ^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection
- return connection._execute_clauseelement(
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement
- ret = self._execute_context(
- ^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context
- return self._exec_single_context(
- ^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context
- self._handle_dbapi_exception(
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 2353, in _handle_dbapi_exception
- raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context
- self.dialect.do_execute(
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\default.py", line 924, in do_execute
- cursor.execute(statement, parameters)
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
- res = self._query(mogrified_query)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
- db.query(q)
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\MySQLdb\connections.py", line 261, in query
- _mysql.connection.query(self, query)
-sqlalchemy.exc.OperationalError: (MySQLdb.OperationalError) (1054, "Unknown column 'cost_local' in 'field list'")
-[SQL: CALL p_shop_get_many_product(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)]
-[parameters: (1, True, False, '', True, False, '', True, False, '', False, False, '', False, 0)]
-(Background on this error at: https://sqlalche.me/e/20/e3q8)
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\controllers\store\product_category.py", line 56, in categories
+ model = Model_View_Store_Product_Category(form_filters)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\models\model_view_store_product_category.py", line 48, in __init__
+ filters_product = Parameters_Product.from_filters_product_category(self.form_filters)
+ ^^^^^^^^^^^^^^^^^^
+NameError: name 'Parameters_Product' is not defined
-config_env: development
-Server Error: (MySQLdb.OperationalError) (1054, "Unknown column 'cost_local' in 'field list'")
-[SQL: CALL p_shop_get_many_product(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)]
-[parameters: (1, True, False, '', True, False, '', True, False, '', False, False, '', False, 0)]
-(Background on this error at: https://sqlalche.me/e/20/e3q8)
+Server Error: 1
+Request: 127.0.0.1 GET http /store/stock_items? Host: 127.0.0.1:5000
+User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0
+Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
+Accept-Language: en-GB,en;q=0.5
+Accept-Encoding: gzip, deflate, br, zstd
+Dnt: 1
+Connection: keep-alive
+Referer: http://127.0.0.1:5000/store/stock_items
+Cookie: session=.eJytVlnzokgS_yoTRsw8tTY3-I_omPUCRUFB5HohCgqkuOUQcba_-xba090PM3tErKFYVZlk_rLy_GMCujYua9SE8NKE9eTjj0kACg_AHBVe05Z1OPlo6y789NNx92J8n4Y5QNnkYxLCHtRwliMIs7AtiyZHbfyP60idBWU--TSJUN20BcixwIkRQjjgMwS9oKvrsAgGD4YR6LJ28lF0WfYi1eEVlcVfEN4AyO9rbzSCwHJf___kWIHy52wgzFlIzAFP-IAkojAaFTbeC7F3D2sUoRBOPiKQNeGLgoog62AIPXNh_ND6thOTm67Cqn42vunqbwYpf9o9PY-GT77i-2rqyGvLNCwwXRB4GvoszUOf8Sma4aM5iCDPBYAGfsBAjgwYBkQjxO6bG0AQhE3zXUI4yLEvBeiI5BTYO3RYyZmfK-N-qSQXSidUdYd6BGz1uUtKBLY6EWwV7jDMU9d2Wr-AMXjuejVxMzdxy6OUMT5iyWBgY2jrpbJiE58i7ruCmM2yYR07BymE20hQltPHzAY9BQ5hOOzkRxAuTpDfXPcBf1k5WqwkR7Pzbmia7hQa3oZpxisnehCEqiwqLNObAzdvJG9nZ-fl9rjyjuyFcKfF5tjXTqG5BwJJ0cUs_eXtcSMYLQMFeZUOmmYe2cUmhsxG7rWkCfa5LW7OMbewDZgF5Wmf7kuFAVAMH1YfXwGFhFt89_VrMqUV0hC0Y5prvM3Ep6FYnWMPLabZahk3tkPvXdJJ85vqhY7DlGtIOf0wn9bLpa4_uav0kM3W8LeOH9JFGCy1WFRvuju9IQSyA9_4oi2ea49doPVD3YBeXhUaH2e6mapphD8VEDtVX9erjXNMTnpJ80fBuSnlNmF4Mr1uzQXTi8fDvCr4mamrZsoB1ScEw7rtnXK7aOMrDoPwUaE6bDyAQ5DkaYKlBZ4hfpwjHBQCxxDEKwv-IkrOl-eOVNGu2RU6G6x23C6tbHOF93lbueO-MO-h7V70lGH8RL672ytppuJBEWNSH-T5DAvrgKXWfi627hm_kJsppMTBXbEtsPTUl0zCp9inb2UEeAlmY9-6jMozdwvjINc6TEtd6ZFBad4FFFlBKV64FBkDq-8cat6OIRtIWQK35vDWERNwu3wekXDHoVkEuUg5th4H6B2eju3GUBKHw_PydNdqriQaoaxhqhrYWMphVMkZVEqNlXXAqE8duWuHONHKXF1fe7nYzQMpyN01WcKt3gfD5amdL4OO8C9XU5wOP6dCpqRYVy4Sji0_ZUOWXEvrAoktRszQXqYYV-aK8xiOl5nseoylVYxNq6zFi7JOOcXYcUqy6NRkR1ijI3KzdaysGdPTtXQay00POVm5kt64tn73C7UFWL8mwRffIVfv_vnHezbtZkGe5cAy011S5Y71eLrn_0PKY3sce5SJcRHwFtr6w0hJW6NiA9jxw3jim8pEzkxjW7PE7JxW3CVPxxJUObaGjsmGVp4LAvvgqa43I15mDDjFCJ7KWmOOa4VQMM6ANtGoA-siwHopqMmFUfIdq1oKczTMVFlnsfpcIsfY9G5u5q_YoLIXLjiQB42a67CQGWDLJyeraJcUKD3TCTNnVZDN-3Mi5gYOfoyrw3GZvOIpc4twuzyqWUUGhTzArfwEKXwopk6PpY5Y0ftSbp4N78ie3YpSRjuNtKF2REzu-ao-S_paR5vBH7RtqnJSdMYu4pfirlxCkzUXIHxKp1ogqelq6kVRcjuTlFzsiUQPs3XkWNJpfbBbfi8AckvkLmE0XlFFmtXpzVEn6bO5BzVdbC3y0TgU0THzm8F14uZeMqIBVHqeeO5GmhtHK6UYQyCHRcI30y6trekuue0HizkfdG5FMEkxZzyRmMY6cuim5S7DihrurFwXSb8ZiL1U-CIuyYfFpRZYjznQvtCtuRNvIunsOewRy3oKnV4fUL9cZXsqOxfafNke79Hl_mgAjFJyoWngXq7tYR-ZnPpQROoiOMF0X516m1tSJojP7F0HvGSO9asJymrsjPhZIPhLVZcRysJf3vPCp8mrYHnt8OJZhqDGTe_d-1ARla_-1-HmPLlKydDeVMVaxWf0uB15Stee5tbCFy_LOL8n_8sI8jetH5fUd41lBIFmxrHiz6LLsNT7oGmwgrhtq-bj82cY3qdFD1KK4Lgw4mIBPYpZ18xe08eo6jPW9W0w-M-gChSk_455ZCmLYKSb10elci6emOq2bhLpRho9JlcoaLtxUPuOsJlda3AHLahfcN7LzywN6YhiGIKHLMXykcBEFB8AgsedxYcc83vzhRGI3-ov1fU3-OUl61d68Ssl4m8Aix_24f1bZINXIZxVxcvjaHRYP92vSu1eP1B99N3-6nGi0ZqFkniVTEaHF2Pn_zezWldB0OJpbHTGhCIoZkqSU4I0iPkHSX1QxIyjGHfy9evXfwErYp4O.ZySbdA.IOzQ4B0k8HNh-01pbYKqF3sN8jI
+Upgrade-Insecure-Requests: 1
+Sec-Fetch-Dest: document
+Sec-Fetch-Mode: navigate
+Sec-Fetch-Site: same-origin
+Sec-Fetch-User: ?1
+Sec-Gpc: 1
+Priority: u=0, i
+
+
+Request data: b''
+Traceback: Traceback (most recent call last):
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 880, in full_dispatch_request
+ rv = self.dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 865, in dispatch_request
+ return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\controllers\store\stock_item.py", line 40, in stock_items
+ model = Model_View_Store_Stock_Item(form_filters)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\models\model_view_store_stock_item.py", line 54, in __init__
+ self.category_list_filters, errors_filters = datastore_store.get_many_product(Parameters_Product.get_default())
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\datastores\datastore_store_base.py", line 133, in get_many_product
+ category_list.add_product_image(new_image)
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\business_objects\store\product_category.py", line 366, in add_product_image
+ self.categories[index_category].add_product_image(image)
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\business_objects\store\product_category.py", line 129, in add_product_image
+ self.products[index_product].add_product_image(image)
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\business_objects\store\product.py", line 286, in add_product_image
+ index_permutation = self.permutation_index[image.id_permutation] # self.get_index_permutation_from_id(image.id_permutation)
+ ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
+KeyError: 1
+
+Server Error: 1
diff --git a/app.log.2 b/app.log.2
index 24f46c69..f5c479ad 100644
--- a/app.log.2
+++ b/app.log.2
@@ -1,26 +1,51 @@
-config_env: production
-config_env: production
-config_env: production
-config_env: production
+Traceback: Traceback (most recent call last):
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 880, in full_dispatch_request
+ rv = self.dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 865, in dispatch_request
+ return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\controllers\store\product_variation.py", line 45, in product_variations
+ return render_template('pages/store/_product_variations.html', model = model)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\templating.py", line 150, in render_template
+ return _render(app, template, context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\templating.py", line 131, in _render
+ rv = template.render(context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\jinja2\environment.py", line 1304, in render
+ self.environment.handle_exception()
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\jinja2\environment.py", line 939, in handle_exception
+ raise rewrite_traceback_stack(source=source)
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\pages\store\_product_variations.html", line 1, in top-level template code
+ {% extends 'layouts/layout.html' %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\layouts\layout.html", line 353, in top-level template code
+ {% block page_body %}{% endblock %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\pages\store\_product_variations.html", line 51, in block 'page_body'
+ {% include 'components/store/_row_product_variation_type.html' %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\components\store\_row_product_variation_type.html", line 50, in top-level template code
+
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\jinja2\environment.py", line 487, in getattr
+ return getattr(obj, attribute)
+ ^^^^^^^^^^^^^^^^^^^^^^^
+jinja2.exceptions.UndefinedError: 'product' is undefined
+
config_env: development
-config_env: development
-config_env: development
-config_env: development
-config_env: production
-config_env: production
-Server Error: (MySQLdb.OperationalError) (1054, "Unknown column 'MPO.id_currency_cost' in 'on clause'")
-[SQL: CALL p_shop_get_many_manufacturing_purchase_order(%s, %s, %s, %s, %s, %s, %s, %s)]
-[parameters: (1, True, True, '', '', None, None, 0)]
-(Background on this error at: https://sqlalche.me/e/20/e3q8)
-Request: 127.0.0.1 GET http /store/manufacturing_purchase_orders? Host: 127.0.0.1:5000
+Server Error: 'models.model_view_store_product_variation.Model_View_Store_Product_Variation object' has no attribute 'category_list_filters'
+Request: 127.0.0.1 GET http /store/variations? Host: 127.0.0.1:5000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate, br, zstd
+Referer: http://127.0.0.1:5000/store/variations
Dnt: 1
Connection: keep-alive
-Referer: http://127.0.0.1:5000/store/manufacturing_purchase_orders
-Cookie: session=.eJytVlmzosgS_isTRsw8tTar6InomKsii0dQkP2FgCqQYhNZRJjb__0Wnp7ufpi5S8Q1RKsqi8wvK7_KzD9mQdcmtxo1ETSbqJ69_TEDQekHsECl37S3Opq9tXUXffppuXtt_FiNigDls7dZBPughosCQZhH7a1sCtQm_7hO0gW4FbNPsxjVTVsGBVY4MyIIB7yGoA-6uo5KMPgwioMub2dvZZfnL1EdXdGt_AvBBwDy-9ifnCCw3tf_P5fsigrXLFitWUisA44IA5KIo3gy2PgvxP4jqlGMIjh7i4O8iV4SVIK8gxH0rY3xw-qHn1jcdBU29bPzTVd_c0j50-_5ZXJ89hWfV1PHfnvLohLLaQgYADhI0gwIlxyAkI5JdhUBFkBiSdFhwC3DAJAYYvctDAEAUdN81xANhyQUATqhQxY4MjruDnlYKNN8q6QmpROqKqMeBY46yukNBZJOAElZHod15jluG5YwCUa5V1Mv91LvdhJzJkQsCQY2gY5-U3ZsGlLEQy6JxUJ9VvvHSerASU7KOBEX96wvIg6U1umUpOlpdVK79-ecKk_vbQ7huA0dwPq2_ORFR7sYq4YmkuMm2xM2s2Ri65CJG-UugQ7dbJ3qUqY4lLG_7ynNSXib70Y6We_E-rwlaupUDaUIaSUzem57eq-9OaEfC7sTev0drBP9YUSmaLUWJDh10x_YMNV6OtQyxbz7l8C78QfRua_JwQf0bkkaV4y_YC0aXMUoK1Qi0z15n-RnDjM17zmpMHcXcptlISsTg-AasSmKNk_dOUiIjiu1xN0m6T2f2rEGiHp_JE-qz3Kspjz9HEdGWVeseTbO7xdHj7Z5P6eS-1kNNnuOvdjclWODqlAftanwY9MyiWU9-oK9ibJ1IVJ1b1MLj48GWsto2G8EJj85jOZJ9x7TIHpWqI4aP8AUJDmaoInVckn-WEeYFKslQxCvW_AXLLmYo0yqSG7kUmfBTl7KWeVYOzwv2sqb5qX1iBzP1DOGCdPDw5OupJUJR0VISH04rBdYWRfYah0WQutd8AuFlUFKGLwd2wa2noWiRYQUO4Z2TgQvxWwS2uZkPPckmIBC67As88RnDsV1ByiygmKy8SgyCey-c6l1O1EWiHkKJWv4sJEQUNqOJ7R6YGqWoBAo19ETgD7o6TpeAkVhOI7m6PFqoaQaofAwUw3sLOUyqugOKqUmCg8YddSRx7vEmVbWKn_tD6W8BiIoPJ68QUnvwWCO2sUcdISfQs3wdfj5KuRKhm0VAuE6h_FgHETP1jogsuWEGTrbDOPKPWGdwOkwU7nHWFrF2LRKmpuKAZbTo_JKh9ee9hSIwmpdO2-m6-nZOo31ZseCrDxRbzxHf4Sl2gbYvibC174jpk54-fGeQ3s5KPIisK1MTqvCtZ-jd_k_XHnsj-tMOjEuAt4jR38aGeloVGIETvI0RnxSubC0ssTRbCG_ZNXSLLIpBVWuo6FTuqeVcTMoqTyoqTLhZSbCYf9HhZfJEy9TyoDjTFtosoFtEQG_XampySiFzKq2wpwMK1P4PFHHLXKNfe8VVvHiBpW_cGmIvFliT-upR6vmIQNm65hUZV9yC11MsrtIlWaXSW4L7oSrw7xMX3zKdcYscsGUAOPSnmTtoeBZ1hnmSTmlOnaUvWMabHhSYTrTIx6m8hhD350fmLq8r6E31-_0eBZj2erqHSrXPH8nWaFCg_1Y7QuqZTUhfmpw5w0mOwc-a60EdDZ5fhXpz0cWjdzqfjk_3rnQVWnhcBdcldRipga2fyr3yupd4g3NlBK36EjG6N4FgScG05uf7VTVyKIXom7HuJK2LZ7EOnH8S3xGrbZeVvFduad1bLpDEt6HXZtRYTunC3J_3L_7ZXkMDet4r8eaPK1vfiyfQ1y8pfe9ilFpEaFQZ7G2Cn1XrQ2p7dX5ZguHExqrNg2u0PGXqSbYa6k195LXa6W6vYg7DegujflHioq-SqzO5mWPD9n-cO8iJFDwHsRFNCeCg3rF-asBt2qqjPi3RPCXqr7FKI9--egXPs1eCctvh9eebRTUuOh91D5UxrdX_etwcZ5dxXRo76pi75ILet5PHKVroyXZmyA6HPD9nv0vLcjflH6cUj9yLIUbhyWNE-qfSZfCn9dC02ADSdtWzdvnzzB6zMs-yChiuYziZbJCz3LRNYtX9zGZ-oxtfWsM_jOoEoHs322ettxK8Gqbnjran_sVeIiGuI_M08OZjrpCoO2mRu07wmZxrYNH0Ab1C87H8DNL466DYhiCgyzFcvGKiSkOBAS34pgQLpnfmy_Mivit_lJdf4NfXrp-pTe_UgL-Alj-8A_PP1Q2eBTBRVW-Io6mgG3niZFzwrJnt_D-bl9S62CGslJK49l7Ro41bezC_6ZX6yoYtLgbm4IxowiKmZPEnFobJIdj88bQC5IgvdnXr1__BS2JoCE.ZyEYtg._bov1p8fFpH43ZXX3SGhLOxkpGQ
+Cookie: session=.eJytVlnzokgS_yoTRsw8tTY3-I_omPUCRUFB5HohCgqkuOUQcba_-xba090PM3tErKFYVZlk_rLy_GMCujYua9SE8NKE9eTjj0kACg_AHBVe05Z1OPlo6y789NNx92J8n4Y5QNnkYxLCHtRwliMIs7AtiyZHbfyP60idBWU--TSJUN20BcixwIkRQjjgMwS9oKvrsAgGD4YR6LJ28lF0WfYi1eEVlcVfEN4AyO9rbzSCwHJf___kWIHy52wgzFlIzAFP-IAkojAaFTbeC7F3D2sUoRBOPiKQNeGLgoog62AIPXNh_ND6thOTm67Cqn42vunqbwYpf9o9PY-GT77i-2rqyGvLNCwwXRB4GvoszUOf8Sma4aM5iCDPBYAGfsBAjgwYBkQjxO6bG0AQhE3zXUI4yLEvBeiI5BTYO3RYyZmfK-N-qSQXSidUdYd6BGz1uUtKBLY6EWwV7jDMU9d2Wr-AMXjuejVxMzdxy6OUMT5iyWBgY2jrpbJiE58i7ruCmM2yYR07BymE20hQltPHzAY9BQ5hOOzkRxAuTpDfXPcBf1k5WqwkR7Pzbmia7hQa3oZpxisnehCEqiwqLNObAzdvJG9nZ-fl9rjyjuyFcKfF5tjXTqG5BwJJ0cUs_eXtcSMYLQMFeZUOmmYe2cUmhsxG7rWkCfa5LW7OMbewDZgF5Wmf7kuFAVAMH1YfXwGFhFt89_VrMqUV0hC0Y5prvM3Ep6FYnWMPLabZahk3tkPvXdJJ85vqhY7DlGtIOf0wn9bLpa4_uav0kM3W8LeOH9JFGCy1WFRvuju9IQSyA9_4oi2ea49doPVD3YBeXhUaH2e6mapphD8VEDtVX9erjXNMTnpJ80fBuSnlNmF4Mr1uzQXTi8fDvCr4mamrZsoB1ScEw7rtnXK7aOMrDoPwUaE6bDyAQ5DkaYKlBZ4hfpwjHBQCxxDEKwv-IkrOl-eOVNGu2RU6G6x23C6tbHOF93lbueO-MO-h7V70lGH8RL672ytppuJBEWNSH-T5DAvrgKXWfi627hm_kJsppMTBXbEtsPTUl0zCp9inb2UEeAlmY9-6jMozdwvjINc6TEtd6ZFBad4FFFlBKV64FBkDq-8cat6OIRtIWQK35vDWERNwu3wekXDHoVkEuUg5th4H6B2eju3GUBKHw_PydNdqriQaoaxhqhrYWMphVMkZVEqNlXXAqE8duWuHONHKXF1fe7nYzQMpyN01WcKt3gfD5amdL4OO8C9XU5wOP6dCpqRYVy4Sji0_ZUOWXEvrAoktRszQXqYYV-aK8xiOl5nseoylVYxNq6zFi7JOOcXYcUqy6NRkR1ijI3KzdaysGdPTtXQay00POVm5kt64tn73C7UFWL8mwRffIVfv_vnHezbtZkGe5cAy011S5Y71eLrn_0PKY3sce5SJcRHwFtr6w0hJW6NiA9jxw3jim8pEzkxjW7PE7JxW3CVPxxJUObaGjsmGVp4LAvvgqa43I15mDDjFCJ7KWmOOa4VQMM6ANtGoA-siwHopqMmFUfIdq1oKczTMVFlnsfpcIsfY9G5u5q_YoLIXLjiQB42a67CQGWDLJyeraJcUKD3TCTNnVZDN-3Mi5gYOfoyrw3GZvOIpc4twuzyqWUUGhTzArfwEKXwopk6PpY5Y0ftSbp4N78ie3YpSRjuNtKF2REzu-ao-S_paR5vBH7RtqnJSdMYu4pfirlxCkzUXIHxKp1ogqelq6kVRcjuTlFzsiUQPs3XkWNJpfbBbfi8AckvkLmE0XlFFmtXpzVEn6bO5BzVdbC3y0TgU0THzm8F14uZeMqIBVHqeeO5GmhtHK6UYQyCHRcI30y6trekuue0HizkfdG5FMEkxZzyRmMY6cuim5S7DihrurFwXSb8ZiL1U-CIuyYfFpRZYjznQvtCtuRNvIunsOewRy3oKnV4fUL9cZXsqOxfafNke79Hl_mgAjFJyoWngXq7tYR-ZnPpQROoiOMF0X516m1tSJojP7F0HvGSO9asJymrsjPhZIPhLVZcRysJf3vPCp8mrYHnt8OJZhqDGTe_d-1ARla_-1-HmPLlKydDeVMVaxWf0uB15Stee5tbCFy_LOL8n_8sI8jetH5fUd41lBIFmxrHiz6LLsNT7oGmwgrhtq-bj82cY3qdFD1KK4Lgw4mIBPYpZ18xe08eo6jPW9W0w-M-gChSk_455ZCmLYKSb10elci6emOq2bhLpRho9JlcoaLtxUPuOsJlda3AHLahfcN7LzywN6YhiGIKHLMXykcBEFB8AgsedxYcc83vzhRGI3-ov1fU3-OUl61d68Ssl4m8Aix_24f1bZINXIZxVxcvjaHRYP92vSu1eP1B99N3-6nGi0ZqFkniVTEaHF2Pn_zezWldB0OJpbHTGhCIoZkqSU4I0iPkHSX1QxIyjGHfy9evXfwErYp4O.ZySbdA.IOzQ4B0k8HNh-01pbYKqF3sN8jI
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
@@ -32,111 +57,107 @@ Priority: u=0, i
Request data: b''
Traceback: Traceback (most recent call last):
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context
- self.dialect.do_execute(
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\default.py", line 924, in do_execute
- cursor.execute(statement, parameters)
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
- res = self._query(mogrified_query)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
- db.query(q)
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\MySQLdb\connections.py", line 261, in query
- _mysql.connection.query(self, query)
-MySQLdb.OperationalError: (1054, "Unknown column 'MPO.id_currency_cost' in 'on clause'")
-
-The above exception was the direct cause of the following exception:
-
-Traceback (most recent call last):
File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\controllers\store\manufacturing_purchase_order.py", line 40, in manufacturing_purchase_orders
- model = Model_View_Store_Manufacturing_Purchase_Order(form_filters)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\models\model_view_store_manufacturing_purchase_order.py", line 50, in __init__
- self.manufacturing_purchase_orders, errors = datastore_manufacturing_purchase_order.get_many_manufacturing_purchase_order(parameters_manufacturing_purchase_order)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\datastores\datastore_store_manufacturing_purchase_order.py", line 51, in get_many_manufacturing_purchase_order
- result = self.db_procedure_execute('p_shop_get_many_manufacturing_purchase_order', argument_dict)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\datastores\datastore_base.py", line 96, in db_procedure_execute
- result = db.session.execute(proc_string, argument_dict_list)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\orm\scoping.py", line 778, in execute
- return self._proxied.execute(
- ^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\orm\session.py", line 2351, in execute
- return self._execute_internal(
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\controllers\store\product_variation.py", line 45, in product_variations
+ return render_template('pages/store/_product_variations.html', model = model)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\templating.py", line 150, in render_template
+ return _render(app, template, context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\templating.py", line 131, in _render
+ rv = template.render(context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\jinja2\environment.py", line 1304, in render
+ self.environment.handle_exception()
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\jinja2\environment.py", line 939, in handle_exception
+ raise rewrite_traceback_stack(source=source)
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\pages\store\_product_variations.html", line 1, in top-level template code
+ {% extends 'layouts/layout.html' %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\layouts\layout.html", line 353, in top-level template code
+ {% block page_body %}{% endblock %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\pages\store\_product_variations.html", line 69, in block 'page_body'
+ var productCategories = {{ model.convert_list_objects_to_dict_json_by_attribute_key_default(model.category_list_filters.categories) | tojson | safe }};
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\jinja2\environment.py", line 487, in getattr
+ return getattr(obj, attribute)
^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\orm\session.py", line 2245, in _execute_internal
- result = conn.execute(
- ^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1418, in execute
- return meth(
- ^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\sql\elements.py", line 515, in _execute_on_connection
- return connection._execute_clauseelement(
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1640, in _execute_clauseelement
- ret = self._execute_context(
- ^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1846, in _execute_context
- return self._exec_single_context(
- ^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1986, in _exec_single_context
- self._handle_dbapi_exception(
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 2353, in _handle_dbapi_exception
- raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\base.py", line 1967, in _exec_single_context
- self.dialect.do_execute(
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\sqlalchemy\engine\default.py", line 924, in do_execute
- cursor.execute(statement, parameters)
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
- res = self._query(mogrified_query)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
- db.query(q)
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\MySQLdb\connections.py", line 261, in query
- _mysql.connection.query(self, query)
-sqlalchemy.exc.OperationalError: (MySQLdb.OperationalError) (1054, "Unknown column 'MPO.id_currency_cost' in 'on clause'")
-[SQL: CALL p_shop_get_many_manufacturing_purchase_order(%s, %s, %s, %s, %s, %s, %s, %s)]
-[parameters: (1, True, True, '', '', None, None, 0)]
-(Background on this error at: https://sqlalche.me/e/20/e3q8)
+jinja2.exceptions.UndefinedError: 'models.model_view_store_product_variation.Model_View_Store_Product_Variation object' has no attribute 'category_list_filters'
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
-config_env: production
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
+config_env: development
config_env: development
config_env: development
config_env: development
diff --git a/app.log.3 b/app.log.3
index a4f829e9..dcb68d7c 100644
--- a/app.log.3
+++ b/app.log.3
@@ -1,97 +1,80 @@
-Traceback: Traceback (most recent call last):
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 1473, in wsgi_app
- response = self.full_dispatch_request()
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 882, in full_dispatch_request
- rv = self.handle_user_exception(e)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask_cors\extension.py", line 178, in wrapped_function
- return cors_after_request(app.make_response(f(*args, **kwargs)))
- ^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 880, in full_dispatch_request
- rv = self.dispatch_request()
- ^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 865, in dispatch_request
- return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\controllers\store\supplier_purchase_order.py", line 43, in supplier_purchase_orders
- return render_template('pages/store/_supplier_purchase_orders.html', model = model, datetime = datetime)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\templating.py", line 150, in render_template
- return _render(app, template, context)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\templating.py", line 131, in _render
- rv = template.render(context)
- ^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\jinja2\environment.py", line 1304, in render
- self.environment.handle_exception()
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\jinja2\environment.py", line 939, in handle_exception
- raise rewrite_traceback_stack(source=source)
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\pages\store\_supplier_purchase_orders.html", line 1, in top-level template code
- {% extends 'layouts/layout.html' %}
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\layouts\layout.html", line 329, in top-level template code
- {% block page_body %}{% endblock %}
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\pages\store\_supplier_purchase_orders.html", line 55, in block 'page_body'
- {% include 'components/store/_row_supplier_purchase_order.html' %}
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\components\store\_row_supplier_purchase_order.html", line 62, in top-level template code
- {% include 'components/store/_preview_order_items.html' %}
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\components\store\_preview_order_items.html", line 4, in top-level template code
- {% set str_items = model.convert_list_objects_to_preview_str(order_items) %}
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\models\model_view_base.py", line 366, in convert_list_objects_to_preview_str
- preview_str += obj_json[obj_json[Base.FLAG_NAME_ATTR_OPTION_TEXT]]
-TypeError: can only concatenate str (not "NoneType") to str
-
-Exception on /store/supplier_purchase_orders [GET]
-Traceback (most recent call last):
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 1473, in wsgi_app
- response = self.full_dispatch_request()
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 882, in full_dispatch_request
- rv = self.handle_user_exception(e)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask_cors\extension.py", line 178, in wrapped_function
- return cors_after_request(app.make_response(f(*args, **kwargs)))
- ^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 880, in full_dispatch_request
- rv = self.dispatch_request()
- ^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 865, in dispatch_request
- return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\controllers\store\supplier_purchase_order.py", line 43, in supplier_purchase_orders
- return render_template('pages/store/_supplier_purchase_orders.html', model = model, datetime = datetime)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\templating.py", line 150, in render_template
- return _render(app, template, context)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\templating.py", line 131, in _render
- rv = template.render(context)
- ^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\jinja2\environment.py", line 1304, in render
- self.environment.handle_exception()
- File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\jinja2\environment.py", line 939, in handle_exception
- raise rewrite_traceback_stack(source=source)
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\pages\store\_supplier_purchase_orders.html", line 1, in top-level template code
- {% extends 'layouts/layout.html' %}
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\layouts\layout.html", line 329, in top-level template code
- {% block page_body %}{% endblock %}
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\pages\store\_supplier_purchase_orders.html", line 55, in block 'page_body'
- {% include 'components/store/_row_supplier_purchase_order.html' %}
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\components\store\_row_supplier_purchase_order.html", line 62, in top-level template code
- {% include 'components/store/_preview_order_items.html' %}
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\components\store\_preview_order_items.html", line 4, in top-level template code
- {% set str_items = model.convert_list_objects_to_preview_str(order_items) %}
- ^^^^^^^^^^^^^^^^^^^^^^^^^
- File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\models\model_view_base.py", line 367, in convert_list_objects_to_preview_str
- preview_str += obj_json[obj_json[Base.FLAG_NAME_ATTR_OPTION_TEXT]]
-TypeError: can only concatenate str (not "NoneType") to str
-Server Error: 500 Internal Server Error: The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
+Request: 127.0.0.1 GET http /store/variations? Host: 127.0.0.1:5000
+User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0
+Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
+Accept-Language: en-GB,en;q=0.5
+Accept-Encoding: gzip, deflate, br, zstd
+Referer: http://127.0.0.1:5000/store/variations
+Dnt: 1
+Connection: keep-alive
+Cookie: session=.eJytVlnzokgS_yoTRsw8tTY3-I_omPUCRUFB5HohCgqkuOUQcba_-xba090PM3tErKFYVZlk_rLy_GMCujYua9SE8NKE9eTjj0kACg_AHBVe05Z1OPlo6y789NNx92J8n4Y5QNnkYxLCHtRwliMIs7AtiyZHbfyP60idBWU--TSJUN20BcixwIkRQjjgMwS9oKvrsAgGD4YR6LJ28lF0WfYi1eEVlcVfEN4AyO9rbzSCwHJf___kWIHy52wgzFlIzAFP-IAkojAaFTbeC7F3D2sUoRBOPiKQNeGLgoog62AIPXNh_ND6thOTm67Cqn42vunqbwYpf9o9PY-GT77i-2rqyGvLNCwwXRB4GvoszUOf8Sma4aM5iCDPBYAGfsBAjgwYBkQjxO6bG0AQhE3zXUI4yLEvBeiI5BTYO3RYyZmfK-N-qSQXSidUdYd6BGz1uUtKBLY6EWwV7jDMU9d2Wr-AMXjuejVxMzdxy6OUMT5iyWBgY2jrpbJiE58i7ruCmM2yYR07BymE20hQltPHzAY9BQ5hOOzkRxAuTpDfXPcBf1k5WqwkR7Pzbmia7hQa3oZpxisnehCEqiwqLNObAzdvJG9nZ-fl9rjyjuyFcKfF5tjXTqG5BwJJ0cUs_eXtcSMYLQMFeZUOmmYe2cUmhsxG7rWkCfa5LW7OMbewDZgF5Wmf7kuFAVAMH1YfXwGFhFt89_VrMqUV0hC0Y5prvM3Ep6FYnWMPLabZahk3tkPvXdJJ85vqhY7DlGtIOf0wn9bLpa4_uav0kM3W8LeOH9JFGCy1WFRvuju9IQSyA9_4oi2ea49doPVD3YBeXhUaH2e6mapphD8VEDtVX9erjXNMTnpJ80fBuSnlNmF4Mr1uzQXTi8fDvCr4mamrZsoB1ScEw7rtnXK7aOMrDoPwUaE6bDyAQ5DkaYKlBZ4hfpwjHBQCxxDEKwv-IkrOl-eOVNGu2RU6G6x23C6tbHOF93lbueO-MO-h7V70lGH8RL672ytppuJBEWNSH-T5DAvrgKXWfi627hm_kJsppMTBXbEtsPTUl0zCp9inb2UEeAlmY9-6jMozdwvjINc6TEtd6ZFBad4FFFlBKV64FBkDq-8cat6OIRtIWQK35vDWERNwu3wekXDHoVkEuUg5th4H6B2eju3GUBKHw_PydNdqriQaoaxhqhrYWMphVMkZVEqNlXXAqE8duWuHONHKXF1fe7nYzQMpyN01WcKt3gfD5amdL4OO8C9XU5wOP6dCpqRYVy4Sji0_ZUOWXEvrAoktRszQXqYYV-aK8xiOl5nseoylVYxNq6zFi7JOOcXYcUqy6NRkR1ijI3KzdaysGdPTtXQay00POVm5kt64tn73C7UFWL8mwRffIVfv_vnHezbtZkGe5cAy011S5Y71eLrn_0PKY3sce5SJcRHwFtr6w0hJW6NiA9jxw3jim8pEzkxjW7PE7JxW3CVPxxJUObaGjsmGVp4LAvvgqa43I15mDDjFCJ7KWmOOa4VQMM6ANtGoA-siwHopqMmFUfIdq1oKczTMVFlnsfpcIsfY9G5u5q_YoLIXLjiQB42a67CQGWDLJyeraJcUKD3TCTNnVZDN-3Mi5gYOfoyrw3GZvOIpc4twuzyqWUUGhTzArfwEKXwopk6PpY5Y0ftSbp4N78ie3YpSRjuNtKF2REzu-ao-S_paR5vBH7RtqnJSdMYu4pfirlxCkzUXIHxKp1ogqelq6kVRcjuTlFzsiUQPs3XkWNJpfbBbfi8AckvkLmE0XlFFmtXpzVEn6bO5BzVdbC3y0TgU0THzm8F14uZeMqIBVHqeeO5GmhtHK6UYQyCHRcI30y6trekuue0HizkfdG5FMEkxZzyRmMY6cuim5S7DihrurFwXSb8ZiL1U-CIuyYfFpRZYjznQvtCtuRNvIunsOewRy3oKnV4fUL9cZXsqOxfafNke79Hl_mgAjFJyoWngXq7tYR-ZnPpQROoiOMF0X516m1tSJojP7F0HvGSO9asJymrsjPhZIPhLVZcRysJf3vPCp8mrYHnt8OJZhqDGTe_d-1ARla_-1-HmPLlKydDeVMVaxWf0uB15Stee5tbCFy_LOL8n_8sI8jetH5fUd41lBIFmxrHiz6LLsNT7oGmwgrhtq-bj82cY3qdFD1KK4Lgw4mIBPYpZ18xe08eo6jPW9W0w-M-gChSk_455ZCmLYKSb10elci6emOq2bhLpRho9JlcoaLtxUPuOsJlda3AHLahfcN7LzywN6YhiGIKHLMXykcBEFB8AgsedxYcc83vzhRGI3-ov1fU3-OUl61d68Ssl4m8Aix_24f1bZINXIZxVxcvjaHRYP92vSu1eP1B99N3-6nGi0ZqFkniVTEaHF2Pn_zezWldB0OJpbHTGhCIoZkqSU4I0iPkHSX1QxIyjGHfy9evXfwErYp4O.ZySbdA.IOzQ4B0k8HNh-01pbYKqF3sN8jI
+Upgrade-Insecure-Requests: 1
+Sec-Fetch-Dest: document
+Sec-Fetch-Mode: navigate
+Sec-Fetch-Site: same-origin
+Sec-Fetch-User: ?1
+Sec-Gpc: 1
+Priority: u=0, i
+
+
+Request data: b''
+Traceback: Traceback (most recent call last):
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 880, in full_dispatch_request
+ rv = self.dispatch_request()
+ ^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\app.py", line 865, in dispatch_request
+ return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\controllers\store\product_variation.py", line 45, in product_variations
+ return render_template('pages/store/_product_variations.html', model = model)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\templating.py", line 150, in render_template
+ return _render(app, template, context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\flask\templating.py", line 131, in _render
+ rv = template.render(context)
+ ^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\jinja2\environment.py", line 1304, in render
+ self.environment.handle_exception()
+ File "C:\Users\edwar\AppData\Local\Programs\Python\Python312\Lib\site-packages\jinja2\environment.py", line 939, in handle_exception
+ raise rewrite_traceback_stack(source=source)
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\pages\store\_product_variations.html", line 1, in top-level template code
+ {% extends 'layouts/layout.html' %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\layouts\layout.html", line 353, in top-level template code
+ {% block page_body %}{% endblock %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\pages\store\_product_variations.html", line 51, in block 'page_body'
+ {% include 'components/store/_row_product_variation_type.html' %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\components\store\_row_product_variation_type.html", line 47, in top-level template code
+ {% include 'components/store/_preview_product_variation_type_variations.html' %}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\templates\components\store\_preview_product_variation_type_variations.html", line 5, in top-level template code
+ {{ variation_type.get_preview_variations() }}
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
+ File "C:\Users\edwar\OneDrive\Documents\Programming\Visual Studio 2022\PARTS_Web\app\business_objects\store\product_variation_type.py", line 112, in get_preview_variations
+ preview = '\n'.join([variation.name_singular for variation in self.variations])
+ ^^^^^^^^^^^^^^^^^^^^^^^
+AttributeError: 'Product_Variation' object has no attribute 'name_singular'
+
+config_env: development
+Server Error: 'product' is undefined
+Request: 127.0.0.1 GET http /store/variations? Host: 127.0.0.1:5000
+User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0
+Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
+Accept-Language: en-GB,en;q=0.5
+Accept-Encoding: gzip, deflate, br, zstd
+Referer: http://127.0.0.1:5000/store/variations
+Dnt: 1
+Connection: keep-alive
+Cookie: session=.eJytVlnzokgS_yoTRsw8tTY3-I_omPUCRUFB5HohCgqkuOUQcba_-xba090PM3tErKFYVZlk_rLy_GMCujYua9SE8NKE9eTjj0kACg_AHBVe05Z1OPlo6y789NNx92J8n4Y5QNnkYxLCHtRwliMIs7AtiyZHbfyP60idBWU--TSJUN20BcixwIkRQjjgMwS9oKvrsAgGD4YR6LJ28lF0WfYi1eEVlcVfEN4AyO9rbzSCwHJf___kWIHy52wgzFlIzAFP-IAkojAaFTbeC7F3D2sUoRBOPiKQNeGLgoog62AIPXNh_ND6thOTm67Cqn42vunqbwYpf9o9PY-GT77i-2rqyGvLNCwwXRB4GvoszUOf8Sma4aM5iCDPBYAGfsBAjgwYBkQjxO6bG0AQhE3zXUI4yLEvBeiI5BTYO3RYyZmfK-N-qSQXSidUdYd6BGz1uUtKBLY6EWwV7jDMU9d2Wr-AMXjuejVxMzdxy6OUMT5iyWBgY2jrpbJiE58i7ruCmM2yYR07BymE20hQltPHzAY9BQ5hOOzkRxAuTpDfXPcBf1k5WqwkR7Pzbmia7hQa3oZpxisnehCEqiwqLNObAzdvJG9nZ-fl9rjyjuyFcKfF5tjXTqG5BwJJ0cUs_eXtcSMYLQMFeZUOmmYe2cUmhsxG7rWkCfa5LW7OMbewDZgF5Wmf7kuFAVAMH1YfXwGFhFt89_VrMqUV0hC0Y5prvM3Ep6FYnWMPLabZahk3tkPvXdJJ85vqhY7DlGtIOf0wn9bLpa4_uav0kM3W8LeOH9JFGCy1WFRvuju9IQSyA9_4oi2ea49doPVD3YBeXhUaH2e6mapphD8VEDtVX9erjXNMTnpJ80fBuSnlNmF4Mr1uzQXTi8fDvCr4mamrZsoB1ScEw7rtnXK7aOMrDoPwUaE6bDyAQ5DkaYKlBZ4hfpwjHBQCxxDEKwv-IkrOl-eOVNGu2RU6G6x23C6tbHOF93lbueO-MO-h7V70lGH8RL672ytppuJBEWNSH-T5DAvrgKXWfi627hm_kJsppMTBXbEtsPTUl0zCp9inb2UEeAlmY9-6jMozdwvjINc6TEtd6ZFBad4FFFlBKV64FBkDq-8cat6OIRtIWQK35vDWERNwu3wekXDHoVkEuUg5th4H6B2eju3GUBKHw_PydNdqriQaoaxhqhrYWMphVMkZVEqNlXXAqE8duWuHONHKXF1fe7nYzQMpyN01WcKt3gfD5amdL4OO8C9XU5wOP6dCpqRYVy4Sji0_ZUOWXEvrAoktRszQXqYYV-aK8xiOl5nseoylVYxNq6zFi7JOOcXYcUqy6NRkR1ijI3KzdaysGdPTtXQay00POVm5kt64tn73C7UFWL8mwRffIVfv_vnHezbtZkGe5cAy011S5Y71eLrn_0PKY3sce5SJcRHwFtr6w0hJW6NiA9jxw3jim8pEzkxjW7PE7JxW3CVPxxJUObaGjsmGVp4LAvvgqa43I15mDDjFCJ7KWmOOa4VQMM6ANtGoA-siwHopqMmFUfIdq1oKczTMVFlnsfpcIsfY9G5u5q_YoLIXLjiQB42a67CQGWDLJyeraJcUKD3TCTNnVZDN-3Mi5gYOfoyrw3GZvOIpc4twuzyqWUUGhTzArfwEKXwopk6PpY5Y0ftSbp4N78ie3YpSRjuNtKF2REzu-ao-S_paR5vBH7RtqnJSdMYu4pfirlxCkzUXIHxKp1ogqelq6kVRcjuTlFzsiUQPs3XkWNJpfbBbfi8AckvkLmE0XlFFmtXpzVEn6bO5BzVdbC3y0TgU0THzm8F14uZeMqIBVHqeeO5GmhtHK6UYQyCHRcI30y6trekuue0HizkfdG5FMEkxZzyRmMY6cuim5S7DihrurFwXSb8ZiL1U-CIuyYfFpRZYjznQvtCtuRNvIunsOewRy3oKnV4fUL9cZXsqOxfafNke79Hl_mgAjFJyoWngXq7tYR-ZnPpQROoiOMF0X516m1tSJojP7F0HvGSO9asJymrsjPhZIPhLVZcRysJf3vPCp8mrYHnt8OJZhqDGTe_d-1ARla_-1-HmPLlKydDeVMVaxWf0uB15Stee5tbCFy_LOL8n_8sI8jetH5fUd41lBIFmxrHiz6LLsNT7oGmwgrhtq-bj82cY3qdFD1KK4Lgw4mIBPYpZ18xe08eo6jPW9W0w-M-gChSk_455ZCmLYKSb10elci6emOq2bhLpRho9JlcoaLtxUPuOsJlda3AHLahfcN7LzywN6YhiGIKHLMXykcBEFB8AgsedxYcc83vzhRGI3-ov1fU3-OUl61d68Ssl4m8Aix_24f1bZINXIZxVxcvjaHRYP92vSu1eP1B99N3-6nGi0ZqFkniVTEaHF2Pn_zezWldB0OJpbHTGhCIoZkqSU4I0iPkHSX1QxIyjGHfy9evXfwErYp4O.ZySbdA.IOzQ4B0k8HNh-01pbYKqF3sN8jI
+Upgrade-Insecure-Requests: 1
+Sec-Fetch-Dest: document
+Sec-Fetch-Mode: navigate
+Sec-Fetch-Site: same-origin
+Sec-Fetch-User: ?1
+Sec-Gpc: 1
+Priority: u=0, i
+
+
+Request data: b''
diff --git a/app.py b/app.py
index 7ab66779..59175e18 100644
--- a/app.py
+++ b/app.py
@@ -43,6 +43,7 @@ from controllers.store.manufacturing_purchase_order import routes_store_manufact
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
@@ -137,6 +138,7 @@ 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)
diff --git a/business_objects/__pycache__/base.cpython-312.pyc b/business_objects/__pycache__/base.cpython-312.pyc
index b5a355f1..93eae6b9 100644
Binary files a/business_objects/__pycache__/base.cpython-312.pyc and b/business_objects/__pycache__/base.cpython-312.pyc differ
diff --git a/business_objects/base.py b/business_objects/base.py
index 5959d11c..6afec217 100644
--- a/business_objects/base.py
+++ b/business_objects/base.py
@@ -69,6 +69,9 @@ class Base():
NAME_ATTR_OPTION_TEXT: ClassVar[str] = 'name-attribute-option-text'
NAME_ATTR_OPTION_VALUE: ClassVar[str] = 'name-attribute-option-value'
"""
+ 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)>'
@classmethod
def output_bool(cls, value):
diff --git a/business_objects/store/__pycache__/product_permutation.cpython-312.pyc b/business_objects/store/__pycache__/product_permutation.cpython-312.pyc
index 3ec8a4d1..cf3c42de 100644
Binary files a/business_objects/store/__pycache__/product_permutation.cpython-312.pyc and b/business_objects/store/__pycache__/product_permutation.cpython-312.pyc differ
diff --git a/business_objects/store/__pycache__/product_variation.cpython-312.pyc b/business_objects/store/__pycache__/product_variation.cpython-312.pyc
index 87211531..860f529a 100644
Binary files a/business_objects/store/__pycache__/product_variation.cpython-312.pyc and b/business_objects/store/__pycache__/product_variation.cpython-312.pyc 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
index a71bfcfd..9181d1ab 100644
Binary files a/business_objects/store/__pycache__/product_variation_tree.cpython-312.pyc and b/business_objects/store/__pycache__/product_variation_tree.cpython-312.pyc 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
index e2236a27..9826dda2 100644
Binary files a/business_objects/store/__pycache__/product_variation_type.cpython-312.pyc and b/business_objects/store/__pycache__/product_variation_type.cpython-312.pyc differ
diff --git a/business_objects/store/product_permutation.py b/business_objects/store/product_permutation.py
index 8adb4091..b0ad66fe 100644
--- a/business_objects/store/product_permutation.py
+++ b/business_objects/store/product_permutation.py
@@ -119,8 +119,6 @@ class Product_Permutation(db.Model, Store_Base):
# variation_tree
def __init__(self):
- self.variations = []
- self.variation_index = {}
self.prices = []
self.price_index = {}
self.images = []
@@ -139,6 +137,7 @@ class Product_Permutation(db.Model, Store_Base):
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'
@@ -303,7 +302,7 @@ class Product_Permutation(db.Model, Store_Base):
self.FLAG_CAN_VIEW: self.can_view,
self.FLAG_CAN_EDIT: self.can_edit,
self.FLAG_CAN_ADMIN: self.can_admin,
- self.FLAG_PRODUCT_VARIATION: [variation.to_json() for variation in self.variations],
+ self.FLAG_PRODUCT_VARIATIONS: [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],
@@ -341,13 +340,13 @@ class Product_Permutation(db.Model, Store_Base):
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
@@ -387,7 +386,7 @@ class Product_Permutation(db.Model, Store_Base):
can_view: {self.can_view}
can_edit: {self.can_edit}
can_admin: {self.can_admin}
- variations: {self.variations}
+ variation tree: {self.variation_tree}
images: {self.images}
delivery_options: {self.delivery_options}
prices: {self.prices}
diff --git a/business_objects/store/product_variation.py b/business_objects/store/product_variation.py
index 3d92f5c2..20dacee0 100644
--- a/business_objects/store/product_variation.py
+++ b/business_objects/store/product_variation.py
@@ -18,8 +18,9 @@ Business object for product variation
# 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 business_objects.store.product_variation_type import Product_Variation_Type
from extensions import db
from helpers.helper_app import Helper_App
# external
@@ -55,7 +56,7 @@ class Product_Variation(db.Model, Store_Base):
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)
+ # variation.variation_type = Product_Variation_Type.from_DB_get_many_product_catalogue(query_row)
return variation
@classmethod
@@ -73,13 +74,14 @@ class Product_Variation(db.Model, Store_Base):
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 = json[cls.FLAG_ACTIVE]
- variation.id_permutation = json[cls.ATTR_ID_PRODUCT_PERMUTATION]
- variation.id_product = json[cls.ATTR_ID_PRODUCT]
- variation.id_category = json[cls.ATTR_ID_PRODUCT_CATEGORY]
+ 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):
@@ -116,7 +118,7 @@ class Product_Variation(db.Model, Store_Base):
'text': self.name
}
-
+"""
@dataclass
class Product_Variation_Filters():
get_all_variation_type: bool
@@ -140,7 +142,7 @@ class Product_Variation_Filters():
'a_ids_variation': self.ids_variation,
}
- """
+ ""
@staticmethod
def from_form(form):
av.val_instance(form, 'form', 'User_Filters.from_form', Filters_Product_Variation)
@@ -164,7 +166,7 @@ class Product_Variation_Filters():
ids_user = user.id_user,
ids_user_auth0 = user.id_user_auth0,
)
- """
+ ""
@staticmethod
def get_default():
@@ -178,8 +180,35 @@ class Product_Variation_Filters():
# get_first_variation = False,
ids_variation = ''
)
+"""
+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 = []
@@ -209,4 +238,43 @@ class Product_Variation_Container(BaseModel):
for variation_type in self.variation_types:
list_variation_types.append(variation_type.to_json_option())
return list_variation_types
-
\ No newline at end of file
+"""
+
+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
index cc340ccc..3f18a3a1 100644
--- a/business_objects/store/product_variation_tree.py
+++ b/business_objects/store/product_variation_tree.py
@@ -11,21 +11,21 @@ Business object for product
"""
# internal
-from business_objects.store.product_variation import Product_Variation
+from business_objects.store.product_variation_type import Product_Variation_Type
from extensions import db
from helpers.helper_app import Helper_App
# external
class Product_Variation_Tree_Node():
- variation: Product_Variation
+ variation_type: Product_Variation_Type
node_parent: None
nodes_child: list
def __init__(self):
self.nodes_child = []
- def from_variation_and_node_parent(variation, node_parent):
+ def from_variation_type_and_node_parent(variation_type, node_parent):
node = Product_Variation_Tree_Node()
- node.variation = variation
+ node.variation_type = variation_type
node.node_parent = node_parent
return node
def from_node_parent(node_parent):
@@ -45,8 +45,8 @@ class Product_Variation_Tree():
tree.node_root = node_root
return tree
@classmethod
- def from_variation_root(cls, variation_root):
- node_root = Product_Variation_Tree_Node.from_variation_and_node_parent(variation_root, None)
+ def from_variation_type_root(cls, variation_type_root):
+ node_root = Product_Variation_Tree_Node.from_variation_type_and_node_parent(variation_type_root, None)
return cls.from_node_root(node_root)
def is_equal(self, tree):
my_type_list = self.get_product_variations()
@@ -56,53 +56,51 @@ class Product_Variation_Tree():
is_equal = (sz_me == sz_other)
if is_equal:
for index_type in range(sz_me):
- if my_type_list[index_type] != other_type_list[index_type]:
+ my_variation_type = my_type_list[index_type]
+ other_variation_type = other_type_list[index_type]
+ if my_variation_type.id_type != other_variation_type.id_type:
+ is_equal = False
+ break
+ my_variation = my_variation_type.variations[0]
+ other_variation = other_variation_type.variations[0]
+ if my_variation.id_variation != other_variation.id_variation:
is_equal = False
break
return is_equal
@classmethod
def from_product_permutation(cls, product_permutation):
- depth_max = len(product_permutation.variations)
- node_root = Product_Variation_Tree_Node.from_variation_and_node_parent(product_permutation.variations[0], None)
+ depth_max = len(product_permutation.variation_types)
+ node_root = Product_Variation_Tree_Node.from_variation_type_and_node_parent(product_permutation.variation_types[0], None)
node = node_root
for depth in range(depth_max - 1):
- node = Product_Variation_Tree_Node.from_variation_and_node_parent(product_permutation.variations[depth + 1], node)
+ node = Product_Variation_Tree_Node.from_variation_type_and_node_parent(product_permutation.variation_types[depth + 1], node)
return cls.from_node_root(node_root)
@classmethod
- def from_product_variation(cls, product_variation):
- node_root = Product_Variation_Tree_Node.from_variation_and_node_parent(product_variation, None)
+ def from_product_variation_type(cls, product_variation_type):
+ node_root = Product_Variation_Tree_Node.from_variation_type_and_node_parent(product_variation_type, None)
return cls.from_node_root(node_root)
@classmethod
- def from_product_variations(cls, product_variations):
- node_root = Product_Variation_Tree_Node.from_variation_and_node_parent(product_variations[0], None)
+ def from_product_variation_types(cls, product_variation_types):
+ node_root = Product_Variation_Tree_Node.from_variation_type_and_node_parent(product_variation_types[0], None)
tree = cls.from_node_root(node_root)
- if len(product_variations) > 1:
- for variation in product_variations[1:]:
- tree.add_product_variation(variation)
+ if len(product_variation_types) > 1:
+ for variation_type in product_variation_types[1:]:
+ tree.add_product_variation_type(variation_type)
return tree
@classmethod
def from_json_str(cls, json_str):
- variations = []
+ variation_types = []
if json_str is None or json_str == '': return None
- for json_variation in json_str.split(','):
- parts = json_variation.split(':')
+ for json_variation_type in json_str.split(','):
+ parts = json_variation_type.split(':')
if len(parts) != 2: continue
+ variation_type = Product_Variation_Type()
+ variation_type.id_type = parts[0]
variation = Product_Variation()
- variation.id_type = parts[0]
- variation.id_variation = parts[1]
- variations.append(variation)
- return cls.from_product_variations(variations)
- """
- def get_name_variations(self):
- node = self.node_root
- name = node.variation.name_variation_type
- at_leaf_node = node.is_leaf()
- while not at_leaf_node:
- node = node.nodes_child[0]
- name += f', {node.variation.name_variation_type}'
- at_leaf_node = node.is_leaf()
- return name
- """
+ variation_type.id_variation = parts[1]
+ variation_type.variations = [variation]
+ variation_types.append(variation_type)
+ return cls.from_product_variation_types(variation_types)
def get_node_leaf(self):
node = self.node_root
at_leaf_node = node.is_leaf()
@@ -110,19 +108,20 @@ class Product_Variation_Tree():
node = node.nodes_child[0]
at_leaf_node = node.is_leaf()
return node
- def add_product_variation(self, variation):
+ def add_product_variation_type(self, variation_type):
node_leaf = self.get_node_leaf()
- node_new = Product_Variation_Tree_Node.from_variation_and_node_parent(variation, node_leaf)
+ node_new = Product_Variation_Tree_Node.from_variation_type_and_node_parent(variation_type, node_leaf)
node_leaf.add_child(node_new)
def get_product_variation_types(self):
types = []
node = self.node_root
at_leaf_node = node.is_leaf()
while not at_leaf_node:
- types.append(node.variation.name_variation_type)
+ types.append(node.variation_type)
node = node.nodes_child[0]
at_leaf_node = node.is_leaf()
return types
+ """
def get_product_variations(self):
variations = []
node = self.node_root
@@ -133,58 +132,28 @@ class Product_Variation_Tree():
at_leaf_node = node.is_leaf()
variations.append(node.variation)
return variations
+ """
def to_preview_str(self):
Helper_App.console_log(f'Product_Variation_Tree.to_preview_str')
- variations = self.get_product_variations()
- Helper_App.console_log(f'variations: {variations}')
+ variation_types = self.get_product_variation_types()
+ Helper_App.console_log(f'variation_types: {variation_types}')
preview_str = ''
- for variation in variations:
+ for variation_type in variation_types:
is_first = (preview_str == '')
- preview_str += f'{variation.variation_type.name_singular}: {variation.name}'
+ preview_str += f'{variation_type.name}: {variation_type.variations[0].name}'
if is_first:
preview_str += '\n'
Helper_App.console_log(f'preview_str: {preview_str}')
return preview_str
def to_json(self):
- variations = self.get_product_variations()
- json_variations = []
- for variation in variations:
- json_variations.append(variation.to_json())
- return json_variations
+ variation_types = self.get_product_variation_types()
+ json_variation_types = []
+ for variation_type in variation_types:
+ json_variation_types.append(variation_type.to_json())
+ return json_variation_types
def to_variation_id_pairs_str(self):
- variations = self.get_product_variations()
+ variation_types = self.get_product_variation_types()
pairs_str = ''
- for variation in variations:
- pairs_str += f'{variation.id_type}:{variation.id_variation},'
- return pairs_str
-"""
-class Product_Variation_Container(BaseModel):
- variation_types: list = []
- variations: list = []
-
- def add_product_variation_type(self, variation_type):
- av.val_instance(variation_type, 'variation_type', 'Product_Variation_Container.add_product_variation_type', Product_Variation_Type)
- self.variations.append(variation_type)
- def add_product_variation(self, variation):
- av.val_instance(variation, 'variation', 'Product_Variation_Container.add_product_variation', Product_Variation)
- if variation.variation_type is None:
- variation_type = next(filterfalse(lambda x: x.id_type != variation.id_type, self.variation_types), None)
- if variation_type is not None:
- variation.variation_type = variation_type
- self.variations.append(variation)
-
- def __repr__(self):
- return f'Product_Variation_Container:\nvariations_types: {self.variation_types}\nvariations: {self.variations}'
-
- def to_list_variation_options(self):
- list_variations = []
- for variation in self.variations:
- list_variations.append(variation.to_json_option())
- Helper_App.console_log(f'list_variations: {list_variations}')
- return list_variations
- def to_list_variation_type_options(self):
- list_variation_types = []
- for variation_type in self.variation_types:
- list_variation_types.append(variation_type.to_json_option())
- return list_variation_types
-"""
\ No newline at end of file
+ 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
index 2b77562e..d07a6199 100644
--- a/business_objects/store/product_variation_type.py
+++ b/business_objects/store/product_variation_type.py
@@ -18,6 +18,7 @@ Business object for product variation
# 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
@@ -40,7 +41,8 @@ class Product_Variation_Type(db.Model, Store_Base):
def __init__(self):
super().__init__()
-
+ self.variations = []
+
@classmethod
def from_DB_get_many_product_catalogue(cls, query_row):
variation_type = cls()
@@ -50,6 +52,7 @@ class Product_Variation_Type(db.Model, Store_Base):
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
@@ -68,10 +71,13 @@ class Product_Variation_Type(db.Model, Store_Base):
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[cls.FLAG_NAME_SINGULAR]
+ 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):
@@ -90,14 +96,74 @@ class Product_Variation_Type(db.Model, Store_Base):
**self.get_shared_json_attributes(self),
self.ATTR_ID_PRODUCT_VARIATION_TYPE: self.id_type,
self.FLAG_CODE: self.code,
- self.FLAG_NAME_SINGULAR: self.name_singular,
+ 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/controllers/store/__pycache__/product.cpython-312.pyc b/controllers/store/__pycache__/product.cpython-312.pyc
index 91790748..982af07b 100644
Binary files a/controllers/store/__pycache__/product.cpython-312.pyc and b/controllers/store/__pycache__/product.cpython-312.pyc differ
diff --git a/controllers/store/__pycache__/product_category.cpython-312.pyc b/controllers/store/__pycache__/product_category.cpython-312.pyc
index e6c48d09..f1473424 100644
Binary files a/controllers/store/__pycache__/product_category.cpython-312.pyc and b/controllers/store/__pycache__/product_category.cpython-312.pyc differ
diff --git a/controllers/store/__pycache__/product_permutation.cpython-312.pyc b/controllers/store/__pycache__/product_permutation.cpython-312.pyc
index d0073f6c..d1c7ed14 100644
Binary files a/controllers/store/__pycache__/product_permutation.cpython-312.pyc and b/controllers/store/__pycache__/product_permutation.cpython-312.pyc differ
diff --git a/controllers/store/product.py b/controllers/store/product.py
index be96ecdf..2c831e36 100644
--- a/controllers/store/product.py
+++ b/controllers/store/product.py
@@ -126,7 +126,7 @@ def filter_product():
Model_View_Store_Product.FLAG_STATUS: Model_View_Store_Product.FLAG_FAILURE,
Model_View_Store_Product.FLAG_MESSAGE: f'Form invalid.\n{form_filters.errors}'
})
- model = Model_View_Store_Product(form_filters = form_filters)
+ model = Model_View_Store_Product(form_filters_old = form_filters)
if not model.is_user_logged_in:
raise Exception('User not logged in')
return jsonify({
@@ -165,7 +165,7 @@ def save_product():
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=form_filters)
+ 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')
diff --git a/controllers/store/product_category.py b/controllers/store/product_category.py
index 9f071102..70859e84 100644
--- a/controllers/store/product_category.py
+++ b/controllers/store/product_category.py
@@ -72,7 +72,7 @@ def filter_category():
})
# ToDo: manually validate category, product
# filters_form = Filters_Product_Category.from_form(form_filters)
- model = Model_View_Store_Product_Category(form_filters = form_filters)
+ model = Model_View_Store_Product_Category(form_filters_old = form_filters)
if not model.is_user_logged_in:
raise Exception('User not logged in')
return jsonify({
@@ -110,7 +110,7 @@ def save_category():
Helper_App.console_log(f'objsCategory={objsCategory}')
Model_View_Store_Product_Category.save_categories(data.get('comment', 'No comment'), objsCategory)
- model_return = Model_View_Store_Product_Category(form_filters=form_filters)
+ 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')
return jsonify({
diff --git a/controllers/store/product_permutation.py b/controllers/store/product_permutation.py
index 87e70084..d4baef8c 100644
--- a/controllers/store/product_permutation.py
+++ b/controllers/store/product_permutation.py
@@ -29,68 +29,13 @@ from urllib.parse import quote, urlparse, parse_qs
routes_store_product_permutation = Blueprint('routes_store_product_permutation', __name__)
-"""
-
-@routes_store_product_permutation.route('/store/permutations', methods=['GET'])
-def permutation():
- filters = Parameters_Product.get_default()
- model = Model_View_Store_Product_Permutation(filters_product=filters)
- return render_template('pages/store/_product_permutations.html', model = model)
-
-@routes_store_product_permutation.route('/store/permutation_filter', methods=['POST'])
-def permutation_filter():
- data = Helper_App.get_request_data(request)
- form_filters = None
- try:
- form_filters = get_Form_Filters_Permutation(data)
- if not form_filters.validate_on_submit():
- return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_FAILURE, Model_View_Base.FLAG_MESSAGE: f'Form invalid.\n{form_filters.errors}'})
- # ToDo: manually validate category, product
- filters_form = Parameters_Product.from_form(form_filters)
- model = Model_View_Store_Product_Permutation(filters_product=filters_form)
- return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_SUCCESS, 'Success': True, Model_View_Base.FLAG_DATA: model.category_list.to_permutation_row_list()})
- except Exception as e:
- return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_FAILURE, Model_View_Base.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'})
-
-def get_Form_Filters_Permutation(data_request):
- data_form = data_request[Model_View_Store_Product_Permutation.FLAG_FORM]
- form_filters = Filters_Product_Permutation(**data_form)
- form_filters.is_out_of_stock.data = av.input_bool(data_form['is_out_of_stock'], 'is_out_of_stock', 'permutations_post')
- return form_filters
-
-@routes_store_product_permutation.route('/store/permutation_save', methods=['POST'])
-def permutation_save():
- data = Helper_App.get_request_data(request)
- form_filters = None
- try:
- form_filters = get_Form_Filters_Permutation(data)
- if not form_filters.validate_on_submit():
- return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_FAILURE, Model_View_Base.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}'})
-
- permutations = data[Model_View_Store_Product_Permutation.FLAG_PRODUCT_PERMUTATION]
- if len(permutations) == 0:
- return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_FAILURE, Model_View_Base.FLAG_MESSAGE: f'No permutations.'})
- objsPermutation = []
- for permutation in permutations:
- objsPermutation.append(Product_Permutation.from_json(permutation))
-
- # ToDo: manually validate category, product
- filters_form = Parameters_Product.from_form(form_filters)
- model_save = Model_View_Store_Product_Permutation(filters_product=filters_form)
- model_save.save_permutations(data.comment, objsPermutation)
-
- model_return = Model_View_Store_Product_Permutation(filters_product=filters_form)
- return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_SUCCESS, 'Success': True, Model_View_Base.FLAG_DATA: model_return.category_list.to_permutation_row_list()})
- except Exception as e:
- return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_FAILURE, Model_View_Base.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'})
-"""
-
@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 = Helper_App.get_request_data(request)
try:
- form_filters = Filters_Product_Permutation.from_json(request.args)
+ form_filters = Filters_Product_Permutation.from_json(data)
except Exception as e:
Helper_App.console_log(f'Error: {e}')
form_filters = Filters_Product_Permutation()
@@ -111,7 +56,7 @@ def filter_permutation():
Model_View_Store_Product_Permutation.FLAG_STATUS: Model_View_Store_Product_Permutation.FLAG_FAILURE,
Model_View_Store_Product_Permutation.FLAG_MESSAGE: f'Form invalid.\n{form_filters.errors}'
})
- model = Model_View_Store_Product_Permutation(form_filters = form_filters)
+ model = Model_View_Store_Product_Permutation(form_filters_old = form_filters)
if not model.is_user_logged_in:
raise Exception('User not logged in')
return jsonify({
@@ -150,7 +95,7 @@ def save_permutation():
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=form_filters)
+ 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')
diff --git a/controllers/store/product_variation.py b/controllers/store/product_variation.py
new file mode 100644
index 00000000..f1b99325
--- /dev/null
+++ b/controllers/store/product_variation.py
@@ -0,0 +1,109 @@
+"""
+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_GET_STORE_PRODUCT_VARIATION, methods=['POST'])
+def filter_product_variation():
+ data = Helper_App.get_request_data(request)
+ try:
+ form_filters = Filters_Product_Variation.from_json(data)
+ 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'Form invalid.\n{form_filters.errors}'
+ })
+ model = Model_View_Store_Product_Variation(form_filters_old = form_filters)
+ if not model.is_user_logged_in:
+ raise Exception('User not logged in')
+ return jsonify({
+ Model_View_Store_Product_Variation.FLAG_STATUS: Model_View_Store_Product_Variation.FLAG_SUCCESS,
+ Model_View_Store_Product_Variation.FLAG_DATA: model.convert_list_objects_to_json(model.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}'
+ })
+
+@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/datastores/__pycache__/datastore_base.cpython-312.pyc b/datastores/__pycache__/datastore_base.cpython-312.pyc
index ba38235c..c9eb0f7e 100644
Binary files a/datastores/__pycache__/datastore_base.cpython-312.pyc and b/datastores/__pycache__/datastore_base.cpython-312.pyc differ
diff --git a/datastores/__pycache__/datastore_store_base.cpython-312.pyc b/datastores/__pycache__/datastore_store_base.cpython-312.pyc
index ee74182a..00118c7b 100644
Binary files a/datastores/__pycache__/datastore_store_base.cpython-312.pyc and b/datastores/__pycache__/datastore_store_base.cpython-312.pyc differ
diff --git a/datastores/__pycache__/datastore_store_basket.cpython-312.pyc b/datastores/__pycache__/datastore_store_basket.cpython-312.pyc
index d5c5b561..42ac518c 100644
Binary files a/datastores/__pycache__/datastore_store_basket.cpython-312.pyc and b/datastores/__pycache__/datastore_store_basket.cpython-312.pyc differ
diff --git a/datastores/__pycache__/datastore_store_product_category.cpython-312.pyc b/datastores/__pycache__/datastore_store_product_category.cpython-312.pyc
index 3f5ea886..ac70acbc 100644
Binary files a/datastores/__pycache__/datastore_store_product_category.cpython-312.pyc and b/datastores/__pycache__/datastore_store_product_category.cpython-312.pyc differ
diff --git a/datastores/datastore_base.py b/datastores/datastore_base.py
index fad8f9e4..bf8deff9 100644
--- a/datastores/datastore_base.py
+++ b/datastores/datastore_base.py
@@ -29,7 +29,6 @@ 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, User_Filters, User_Permission_Evaluation
-# from business_objects.store.product_variation import Product_Variation, Product_Variation_Filters, Product_Variation_Container
# 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
@@ -189,7 +188,6 @@ class DataStore_Base(BaseModel):
else:
expected_columns = set(column.name for column in db.inspect(table_object).columns)
Helper_App.console_log(f'expected_columns: {expected_columns}')
-
try:
for i in range(0, len(records), batch_size):
batch = records[i:i+batch_size]
diff --git a/datastores/datastore_store_base.py b/datastores/datastore_store_base.py
index e7802e6d..576d2975 100644
--- a/datastores/datastore_store_base.py
+++ b/datastores/datastore_store_base.py
@@ -24,7 +24,8 @@ from business_objects.store.product import Product, Product_Permutation, Paramet
from business_objects.sql_error import SQL_Error
from business_objects.store.stock_item import Stock_Item
from business_objects.user import User, User_Filters, User_Permission_Evaluation
-from business_objects.store.product_variation import Product_Variation_Type, Product_Variation, Product_Variation_Filters, Product_Variation_Container
+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_base import DataStore_Base
from extensions import db
from helpers.helper_app import Helper_App
@@ -255,7 +256,7 @@ class DataStore_Store_Base(DataStore_Base):
def get_many_product_variation(cls, variation_filters):
_m = 'DataStore_Store_Base.get_many_product_variation'
Helper_App.console_log(_m)
- av.val_instance(variation_filters, 'variation_filters', _m, Product_Variation_Filters)
+ av.val_instance(variation_filters, 'variation_filters', _m, Parameters_Product_Variation)
guid = Helper_DB_MySQL.create_guid()
# now = datetime.now()
@@ -284,14 +285,14 @@ class DataStore_Store_Base(DataStore_Base):
# Product_Variation Types
# variation_container = Product_Variation_Container()
variation_types = []
- variation_types_dict = {}
+ index_variation_type = {}
for row in result_set_vt:
new_variation_type = Product_Variation_Type.from_DB_get_many_product_variation(row)
# variation_container.add_product_variation_type(new_variation_type)
+ index_variation_type[new_variation_type.id_type] = len(variation_types)
variation_types.append(new_variation_type)
- variation_types_dict[new_variation_type.id_type] = new_variation_type
- Helper_App.console_log(f'variation_types_dict: {variation_types_dict}')
+ Helper_App.console_log(f'index_variation_type: {index_variation_type}')
# Product_Variations
cursor.nextset()
@@ -300,8 +301,9 @@ class DataStore_Store_Base(DataStore_Base):
variations = []
for row in result_set_v:
new_variation = Product_Variation.from_DB_get_many_product_variation(row)
- new_variation.variation_type = variation_types_dict[new_variation.id_type]
+ # new_variation.variation_type = variation_types_dict[new_variation.id_type]
# variation_container.add_product_variation(new_variation)
+ variation_types[index_variation_type[new_variation.id_type]].variations.append(new_variation)
variations.append(new_variation)
errors = []
diff --git a/datastores/datastore_store_basket.py b/datastores/datastore_store_basket.py
index 1b07a576..e7731cbb 100644
--- a/datastores/datastore_store_basket.py
+++ b/datastores/datastore_store_basket.py
@@ -14,18 +14,7 @@ Datastore for Store Baskets
# from routes import bp_home
import lib.argument_validation as av
from business_objects.store.basket import Basket, Basket_Item
-from business_objects.store.product_category import Product_Category_Container, Product_Category
-from business_objects.currency import Currency
-from business_objects.store.image import Image
-from business_objects.store.delivery_option import Delivery_Option
-from business_objects.region import Region
-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
from business_objects.sql_error import SQL_Error
-from business_objects.store.stock_item import Stock_Item
-from business_objects.user import User, User_Filters, User_Permission_Evaluation
-from business_objects.store.product_variation import Product_Variation, Product_Variation_Filters, Product_Variation_Container
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
diff --git a/datastores/datastore_store_product_category.py b/datastores/datastore_store_product_category.py
index 14107b5d..b7cd2f50 100644
--- a/datastores/datastore_store_product_category.py
+++ b/datastores/datastore_store_product_category.py
@@ -12,19 +12,8 @@ Datastore for Store Product Categories
# internal
import lib.argument_validation as av
-from business_objects.store.basket import Basket, Basket_Item
from business_objects.store.product_category import Product_Category_Container, Product_Category, Product_Category_Temp
-from business_objects.currency import Currency
-from business_objects.store.image import Image
-from business_objects.store.delivery_option import Delivery_Option
-from business_objects.region import Region
-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
from business_objects.sql_error import SQL_Error
-from business_objects.store.stock_item import Stock_Item
-from business_objects.user import User, User_Filters, User_Permission_Evaluation
-from business_objects.store.product_variation import Product_Variation, Product_Variation_Filters, Product_Variation_Container
# 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
diff --git a/datastores/datastore_store_product_variation.py b/datastores/datastore_store_product_variation.py
index 2e3171e6..5265df82 100644
--- a/datastores/datastore_store_product_variation.py
+++ b/datastores/datastore_store_product_variation.py
@@ -13,20 +13,10 @@ Datastore for Store Product Variations
# internal
# from routes import bp_home
import lib.argument_validation as av
-from business_objects.store.basket import Basket, Basket_Item
-from business_objects.store.product_category import Product_Category_Container, Product_Category
-from business_objects.currency import Currency
-from business_objects.store.image import Image
-from business_objects.store.delivery_option import Delivery_Option
-from business_objects.region import Region
-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
-from business_objects.sql_error import SQL_Error
-from business_objects.store.stock_item import Stock_Item
-from business_objects.user import User, User_Filters, User_Permission_Evaluation
-from business_objects.store.product_variation import Product_Variation, Product_Variation_Filters, Product_Variation_Container
+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
@@ -46,4 +36,42 @@ from datetime import datetime
class DataStore_Store_Product_Variation(DataStore_Store_Base):
def __init__(self, **kwargs):
- super().__init__(**kwargs)
\ No newline at end of file
+ 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_stripe.py b/datastores/datastore_store_stripe.py
index c86b3b16..93da1d13 100644
--- a/datastores/datastore_store_stripe.py
+++ b/datastores/datastore_store_stripe.py
@@ -14,18 +14,8 @@ Datastore for Store Stripe service
# from routes import bp_home
import lib.argument_validation as av
from business_objects.store.basket import Basket, Basket_Item
-from business_objects.store.product_category import Product_Category_Container, Product_Category
-from business_objects.currency import Currency
-from business_objects.store.image import Image
-from business_objects.store.delivery_option import Delivery_Option
-from business_objects.region import Region
-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
from business_objects.sql_error import SQL_Error
-from business_objects.store.stock_item import Stock_Item
-from business_objects.user import User, User_Filters, User_Permission_Evaluation
-from business_objects.store.product_variation import Product_Variation, Product_Variation_Filters, Product_Variation_Container
from datastores.datastore_store_base import DataStore_Store_Base
# from helpers.helper_db_mysql import Helper_DB_MySQL
# from models.model_view_store_checkout import Model_View_Store_Checkout # circular!
diff --git a/forms/store/product_variation.py b/forms/store/product_variation.py
new file mode 100644
index 00000000..33efd993
--- /dev/null
+++ b/forms/store/product_variation.py
@@ -0,0 +1,38 @@
+"""
+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/lib/__pycache__/argument_validation.cpython-312.pyc b/lib/__pycache__/argument_validation.cpython-312.pyc
index dd476cef..a2b110fc 100644
Binary files a/lib/__pycache__/argument_validation.cpython-312.pyc and b/lib/__pycache__/argument_validation.cpython-312.pyc differ
diff --git a/lib/argument_validation.py b/lib/argument_validation.py
index dc1746ba..ba9e4e56 100644
--- a/lib/argument_validation.py
+++ b/lib/argument_validation.py
@@ -447,13 +447,13 @@ def input_bool(v_input, v_name, method, suppress_errors = False, suppress_consol
# v_arg_type
if not val_str(v_arg_type, 'v_arg_type', my_f, 1, -1, suppress_errors, suppress_console_outputs): return None
# METHODS
- if not val_bool(v_input, v_name, my_f, True, suppress_console_outputs):
- if not val_int(v_input, v_name, my_f, 0, 1, True, suppress_console_outputs):
+ if not val_bool(v_input, v_name, my_f, True, True):
+ if not val_int(v_input, v_name, my_f, 0, 1, True, True):
# if str(type(v_input)) == "":
# return bool(v_input)
v_input = str(v_input)
error_msg = error_msg_str(v_input, v_name, method, "", suppress_errors, suppress_console_outputs, v_arg_type)
- if not val_str(v_input, v_name, my_f, suppress_errors=True, suppress_console_outputs=suppress_console_outputs):
+ if not val_str(v_input, v_name, my_f, suppress_errors=True, suppress_console_outputs=True):
if suppress_errors:
if not suppress_console_outputs:
print(error_msg)
diff --git a/models/__pycache__/model_view_base.cpython-312.pyc b/models/__pycache__/model_view_base.cpython-312.pyc
index 3b0071b4..698e530d 100644
Binary files a/models/__pycache__/model_view_base.cpython-312.pyc and b/models/__pycache__/model_view_base.cpython-312.pyc differ
diff --git a/models/__pycache__/model_view_store.cpython-312.pyc b/models/__pycache__/model_view_store.cpython-312.pyc
index f9cb0397..6ae5e9ec 100644
Binary files a/models/__pycache__/model_view_store.cpython-312.pyc and b/models/__pycache__/model_view_store.cpython-312.pyc differ
diff --git a/models/__pycache__/model_view_store_product.cpython-312.pyc b/models/__pycache__/model_view_store_product.cpython-312.pyc
index 81c1885d..168e8132 100644
Binary files a/models/__pycache__/model_view_store_product.cpython-312.pyc and b/models/__pycache__/model_view_store_product.cpython-312.pyc differ
diff --git a/models/__pycache__/model_view_store_product_category.cpython-312.pyc b/models/__pycache__/model_view_store_product_category.cpython-312.pyc
index 365fc9e8..d4ae81d7 100644
Binary files a/models/__pycache__/model_view_store_product_category.cpython-312.pyc and b/models/__pycache__/model_view_store_product_category.cpython-312.pyc differ
diff --git a/models/__pycache__/model_view_store_product_permutation.cpython-312.pyc b/models/__pycache__/model_view_store_product_permutation.cpython-312.pyc
index e04f3cd9..75588924 100644
Binary files a/models/__pycache__/model_view_store_product_permutation.cpython-312.pyc and b/models/__pycache__/model_view_store_product_permutation.cpython-312.pyc differ
diff --git a/models/model_view_base.py b/models/model_view_base.py
index 7fd72e6f..e87b5904 100644
--- a/models/model_view_base.py
+++ b/models/model_view_base.py
@@ -99,6 +99,7 @@ class Model_View_Base(BaseModel, ABC):
FLAG_NAME: ClassVar[str] = Base.FLAG_NAME
FLAG_NAME_ATTR_OPTION_TEXT: ClassVar[str] = Base.FLAG_NAME_ATTR_OPTION_TEXT
FLAG_NAME_ATTR_OPTION_VALUE: ClassVar[str] = Base.FLAG_NAME_ATTR_OPTION_VALUE
+ FLAG_NAME_PLURAL: ClassVar[str] = Base.FLAG_NAME_PLURAL
FLAG_NAV_ADMIN_HOME: ClassVar[str] = 'navAdminHome'
FLAG_NAV_ADMIN_STORE_STRIPE_PRICES: ClassVar[str] = 'navAdminStoreStripePrices'
FLAG_NAV_ADMIN_STORE_STRIPE_PRODUCTS: ClassVar[str] = 'navAdminStoreStripeProducts'
diff --git a/models/model_view_store.py b/models/model_view_store.py
index 73436342..73229dab 100644
--- a/models/model_view_store.py
+++ b/models/model_view_store.py
@@ -23,7 +23,7 @@ from business_objects.store.product import Product, Parameters_Product, Product_
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_Filters, Product_Variation
+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
@@ -148,6 +148,7 @@ class Model_View_Store(Model_View_Base):
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'
@@ -157,6 +158,7 @@ class Model_View_Store(Model_View_Base):
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'
@@ -502,6 +504,6 @@ class Model_View_Store(Model_View_Base):
def get_many_product_variation(self, variation_filters = None):
if variation_filters is None:
- variation_filters = Product_Variation_Filters.get_default()
+ 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_product.py b/models/model_view_store_product.py
index 7f61251e..4a0d37df 100644
--- a/models/model_view_store_product.py
+++ b/models/model_view_store_product.py
@@ -79,7 +79,6 @@ class Model_View_Store_Product(Model_View_Store):
# product_blank: Product = None
units_measurement: list = None
units_measurement_time: list = None
- # variation_container: Product_Variation_Container = None
variations: list = None
variation_types: list = None
diff --git a/models/model_view_store_product_category.py b/models/model_view_store_product_category.py
index 92a78ac8..74af47ef 100644
--- a/models/model_view_store_product_category.py
+++ b/models/model_view_store_product_category.py
@@ -14,13 +14,12 @@ Data model for store permutations view
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 business_objects.store.product import Product, Parameters_Product, Product_Permutation
-from business_objects.store.product_variation import Product_Variation_Container
from helpers.helper_app import Helper_App
import lib.argument_validation as av
diff --git a/models/model_view_store_product_permutation.py b/models/model_view_store_product_permutation.py
index d43724a4..979fc5fe 100644
--- a/models/model_view_store_product_permutation.py
+++ b/models/model_view_store_product_permutation.py
@@ -17,7 +17,6 @@ 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 business_objects.store.product_variation import Product_Variation_Container
from helpers.helper_app import Helper_App
import lib.argument_validation as av
@@ -35,7 +34,6 @@ class Model_View_Store_Product_Permutation(Model_View_Store):
list_options_product: list = None
units_measurement: list = None
units_measurement_time: list = None
- # variation_container: Product_Variation_Container = None
variations: list = None
variation_types: list = None
diff --git a/models/model_view_store_product_variation.py b/models/model_view_store_product_variation.py
new file mode 100644
index 00000000..cf4de7f0
--- /dev/null
+++ b/models/model_view_store_product_variation.py
@@ -0,0 +1,54 @@
+"""
+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/static/MySQL/0000_combine.sql b/static/MySQL/0000_combine.sql
index 3548934a..6f9ae521 100644
--- a/static/MySQL/0000_combine.sql
+++ b/static/MySQL/0000_combine.sql
@@ -168,11 +168,13 @@ DROP TABLE IF EXISTS Shop_Product_Variation_Link;
DROP TABLE IF EXISTS Shop_Product_Permutation_Variation_Link_Audit;
DROP TABLE IF EXISTS Shop_Product_Permutation_Variation_Link;
+DROP TABLE IF EXISTS Shop_Variation_Temp;
DROP TABLE IF EXISTS Shop_Variation_Audit;
DROP TABLE IF EXISTS Shop_Variation;
DROP TABLE IF EXISTS Shop_Product_Variation_Type_Link_Audit;
DROP TABLE IF EXISTS Shop_Product_Variation_Type_Link;
+DROP TABLE IF EXISTS Shop_Variation_Type_Temp;
DROP TABLE IF EXISTS Shop_Variation_Type_Audit;
DROP TABLE IF EXISTS Shop_Variation_Type;
@@ -294,6 +296,8 @@ DROP PROCEDURE IF EXISTS p_shop_get_many_stripe_product_new;
DROP PROCEDURE IF EXISTS p_shop_save_permutation;
DROP PROCEDURE IF EXISTS p_shop_save_product_permutation;
DROP PROCEDURE IF EXISTS p_shop_save_product_permutation_test;
+DROP PROCEDURE IF EXISTS p_shop_save_product_variation;
+DROP PROCEDURE IF EXISTS p_shop_save_product_variation_test;
DROP PROCEDURE IF EXISTS p_shop_get_many_product_variation;
DROP FUNCTION IF EXISTS fn_shop_get_id_product_permutation_from_variation_csv_list;
DROP PROCEDURE IF EXISTS p_shop_save_stock_item;
@@ -1403,8 +1407,8 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Temp (
, latency_manufacture INT NOT NULL
, id_unit_measurement_quantity INT NOT NULL
, count_unit_measurement_per_quantity_step FLOAT NOT NULL
- , quantity_min FLOAT NOT NULL
- , quantity_max FLOAT NOT NULL
+ , quantity_min FLOAT NULL
+ , quantity_max FLOAT NULL
, quantity_stock FLOAT NULL
, is_subscription BIT NOT NULL
, id_unit_measurement_interval_recurrence INT
@@ -1428,16 +1432,17 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Temp (
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Variation_Type';
CREATE TABLE IF NOT EXISTS Shop_Variation_Type (
- id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
- code VARCHAR(50),
- name VARCHAR(255),
- name_plural VARCHAR(256),
- active BIT NOT NULL DEFAULT 1,
- display_order INT NOT NULL,
- created_on DATETIME,
- created_by INT,
- id_change_set INT,
- CONSTRAINT FK_Shop_Variation_Type_id_change_set
+ id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY
+ , id_type_temp INT NULL
+ , code VARCHAR(50)
+ , name VARCHAR(255)
+ , name_plural VARCHAR(256)
+ , active BIT NOT NULL DEFAULT 1
+ , display_order INT NOT NULL
+ , created_on DATETIME
+ , created_by INT
+ , id_change_set INT
+ , CONSTRAINT FK_Shop_Variation_Type_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_Product_Change_Set(id_change_set)
);
@@ -1463,6 +1468,25 @@ CREATE TABLE IF NOT EXISTS Shop_Variation_Type_Audit (
REFERENCES Shop_Product_Change_Set(id_change_set)
);
+# Variation Types Temp
+
+-- DROP TABLE partsltd_prod.Shop_Variation_Type_Temp;
+
+SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Variation_Type_Temp';
+
+CREATE TABLE IF NOT EXISTS Shop_Variation_Type_Temp (
+ id_temp INT NOT NULL PRIMARY KEY
+ , id_type INT NOT NULL
+ , id_type_temp INT NOT NULL
+ , code VARCHAR(50)
+ , name VARCHAR(255)
+ , name_plural VARCHAR(256)
+ , active BIT NULL
+ , display_order INT NOT NULL
+ , created_on DATETIME
+ , created_by INT
+ , guid BINARY(36) NOT NULL
+);
# Variations
@@ -1510,6 +1534,23 @@ CREATE TABLE IF NOT EXISTS Shop_Variation_Audit (
REFERENCES Shop_Product_Change_Set(id_change_set)
);
+# Variations Temp
+
+SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Variation_Temp';
+
+CREATE TABLE Shop_Variation_Temp (
+ id_temp INT NOT NULL PRIMARY KEY
+ , id_variation INT NOT NULL
+ , id_type INT NOT NULL
+ , code VARCHAR(50)
+ , name VARCHAR(255)
+ , active BIT
+ , display_order INT NOT NULL
+ , created_on DATETIME
+ , created_by INT
+ , guid BINARY(36)
+);
+
# Product Permutation Variation Link
@@ -6660,8 +6701,8 @@ BEGIN
ELSE '' END
)
FROM Shop_Product_Permutation PP
- INNER JOIN Shop_Product P ON PP.id_product = P.id_product
- INNER JOIN Shop_Product_Category PC ON P.id_category = PC.id_category
+ LEFT JOIN Shop_Product P ON PP.id_product = P.id_product
+ LEFT JOIN Shop_Product_Category PC ON P.id_category = PC.id_category
LEFT JOIN Shop_Product_Permutation_Variation_Link PPVL ON PP.id_permutation = PPVL.id_permutation
LEFT JOIN Shop_Variation V ON PPVL.id_variation = V.id_variation
LEFT JOIN Shop_Variation_Type VT ON V.id_type = VT.id_type
@@ -9108,7 +9149,8 @@ BEGIN
id_permutation
, id_product
, description
- , cost_local
+ , cost_local_VAT_excl
+ , cost_local_VAT_incl
, id_currency_cost
, profit_local_min
, latency_manufacture
@@ -9134,7 +9176,8 @@ BEGIN
t_PP.id_permutation
, PP.id_product
, PP.description
- , PP.cost_local
+ , PP.cost_local_VAT_excl
+ , PP.cost_local_VAT_incl
, PP.id_currency_cost
, PP.profit_local_min
, PP.latency_manufacture
@@ -9608,7 +9651,8 @@ BEGIN
PP.id_product,
P.id_category,
PP.description,
- PP.cost_local,
+ PP.cost_local_VAT_excl,
+ PP.cost_local_VAT_incl,
PP.id_currency_cost,
C.code AS code_currency_cost,
C.symbol AS symbol_currency_cost,
@@ -10272,7 +10316,7 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
- , CONCAT('The following product permutation(s) do not have a product: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg
+ , CONCAT('The following product permutation(s) do not have a product: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
FROM tmp_Permutation t_P
WHERE ISNULL(t_P.id_product)
;
@@ -10287,7 +10331,7 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
- , CONCAT('The following product permutation(s) do not have a valid local cost excluding VAT: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg
+ , CONCAT('The following product permutation(s) do not have a valid local cost excluding VAT: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
FROM tmp_Permutation t_P
WHERE NOT ISNULL(t_P.cost_local_VAT_excl) AND t_P.cost_local_VAT_excl < 0
;
@@ -10302,7 +10346,7 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
- , CONCAT('The following product permutation(s) do not have a valid local cost including VAT: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg
+ , CONCAT('The following product permutation(s) do not have a valid local cost including VAT: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
FROM tmp_Permutation t_P
WHERE NOT ISNULL(t_P.cost_local_VAT_incl) AND t_P.cost_local_VAT_incl < 0
;
@@ -10317,7 +10361,7 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
- , CONCAT('The following product permutation(s) do not have a local minimum profit: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg
+ , CONCAT('The following product permutation(s) do not have a local minimum profit: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
FROM tmp_Permutation t_P
WHERE NOT ISNULL(t_P.profit_local_min) AND t_P.profit_local_min < 0
;
@@ -10335,7 +10379,7 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
- , CONCAT('The following product permutation(s) do not have a manufacturing latency: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg
+ , CONCAT('The following product permutation(s) do not have a manufacturing latency: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
FROM tmp_Permutation t_P
WHERE ISNULL(t_P.latency_manufacture)
;
@@ -10350,7 +10394,7 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
- , CONCAT('The following product permutation(s) do not have a unit measurement for stock quantities: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg
+ , CONCAT('The following product permutation(s) do not have a unit measurement for stock quantities: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
FROM tmp_Permutation t_P
WHERE ISNULL(t_P.id_unit_measurement_quantity)
;
@@ -10365,7 +10409,7 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
- , CONCAT('The following product permutation(s) do not have a count unit measurement per quantity step: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg
+ , CONCAT('The following product permutation(s) do not have a count unit measurement per quantity step: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
FROM tmp_Permutation t_P
WHERE ISNULL(t_P.count_unit_measurement_per_quantity_step)
;
@@ -10380,7 +10424,7 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
- , CONCAT('The following product permutation(s) do not have a minimum quantity: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg
+ , CONCAT('The following product permutation(s) do not have a minimum quantity: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
FROM tmp_Permutation t_P
WHERE ISNULL(t_P.quantity_min)
;
@@ -10395,7 +10439,7 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
- , CONCAT('The following product permutation(s) do not have a maximum quantity: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg
+ , CONCAT('The following product permutation(s) do not have a maximum quantity: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
FROM tmp_Permutation t_P
WHERE ISNULL(t_P.quantity_max)
;
@@ -10410,7 +10454,7 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
- , CONCAT('The following product permutation(s) do not have an is subscription?: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg
+ , CONCAT('The following product permutation(s) do not have an is subscription?: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
FROM tmp_Permutation t_P
WHERE ISNULL(t_P.is_subscription)
;
@@ -10425,56 +10469,76 @@ BEGIN
SELECT
v_id_type_error_bad_data
, v_code_type_error_bad_data
- , CONCAT('The following product permutation(s) do not have a does expire faster once unsealed: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg
+ , CONCAT('The following product permutation(s) do not have a does expire faster once unsealed: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
FROM tmp_Permutation t_P
WHERE ISNULL(t_P.does_expire_faster_once_unsealed)
;
END IF;
-- Permissions
- IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN -- (SELECT * FROM tmp_Product WHERE is_new = 0 LIMIT 1) THEN
- SET v_ids_product_permission := (
- SELECT GROUP_CONCAT(P.id_product SEPARATOR ',')
- FROM Shop_Product P
- INNER JOIN tmp_Permutation t_P
- ON P.id_product = t_P.id_product
- -- AND t_P.is_new = 0
- );
- IF NOT ISNULL(v_ids_product_permission) THEN
- SET v_id_permission_product = (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_PRODUCT' LIMIT 1);
-
- CALL p_shop_calc_user(a_guid, a_id_user, FALSE, v_id_permission_product, v_id_access_level_edit, v_ids_product_permission);
-
- UPDATE tmp_Permutation t_P
- INNER JOIN Shop_Product P ON t_P.id_product = P.id_product
- INNER JOIN Shop_Calc_User_Temp UE_T
- ON P.id_product = UE_T.id_product
- AND UE_T.GUID = a_guid
- SET
- t_P.can_view = UE_T.can_view
- , t_P.can_edit = UE_T.can_edit
- , t_P.can_admin = UE_T.can_admin
- ;
-
- CALL p_shop_clear_calc_user(a_guid);
-
- IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.can_edit) LIMIT 1) THEN
- INSERT INTO tmp_Msg_Error (
- id_type
- , code
- , msg
- )
- SELECT
- v_id_type_error_bad_data
- , v_code_type_error_bad_data
- , CONCAT('The following product permutation(s) do not have product edit permission: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg
- FROM tmp_Permutation t_P
- WHERE ISNULL(t_P.can_edit)
- ;
- END IF;
- END IF;
+ SET v_ids_product_permission := (
+ SELECT GROUP_CONCAT(P.id_product SEPARATOR ',')
+ FROM Shop_Product P
+ INNER JOIN tmp_Permutation t_P
+ ON P.id_product = t_P.id_product
+ -- AND t_P.is_new = 0
+ );
+
+ SET v_id_permission_product = (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_PRODUCT' LIMIT 1);
+
+ IF a_debug = 1 THEN
+ SELECT
+ a_guid
+ , a_id_user
+ , FALSE AS a_get_inactive_user
+ , v_id_permission_product
+ , v_id_access_level_edit
+ , v_ids_product_permission
+ , 0 AS a_debug
+ ;
END IF;
+ CALL p_shop_calc_user(
+ a_guid
+ , a_id_user
+ , FALSE -- a_get_inactive_user
+ , v_id_permission_product
+ , v_id_access_level_edit
+ , v_ids_product_permission
+ , 0 -- a_debug
+ );
+
+ UPDATE tmp_Permutation t_P
+ INNER JOIN Shop_Product P ON t_P.id_product = P.id_product
+ INNER JOIN Shop_Calc_User_Temp UE_T
+ ON P.id_product = UE_T.id_product
+ AND UE_T.GUID = a_guid
+ SET
+ t_P.can_view = UE_T.can_view
+ , t_P.can_edit = UE_T.can_edit
+ , t_P.can_admin = UE_T.can_admin
+ ;
+
+ CALL p_shop_clear_calc_user(
+ a_guid
+ , 0 -- a_debug
+ );
+
+ IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.can_edit) LIMIT 1) THEN
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT('The following product permutation(s) do not have product edit permission: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg
+ FROM tmp_Permutation t_P
+ WHERE ISNULL(t_P.can_edit)
+ ;
+ END IF;
+
IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN
START TRANSACTION;
@@ -10724,7 +10788,7 @@ BEGIN
/* Test 1 - Insert */
(
-1 -- id_permutation
- , 8 -- id_product
+ , 5 -- id_product
, 'Hair clip' -- description
, NULL -- cost_local_VAT_excl
, NULL -- cost_local_VAT_incl
@@ -10785,7 +10849,6 @@ BEGIN
END //
DELIMITER ;;
-/*
CALL partsltd_prod.p_shop_save_product_permutation_test ();
DELETE FROM partsltd_prod.Shop_Product_Permutation_Temp;
@@ -10793,7 +10856,9 @@ DELETE FROM partsltd_prod.Shop_Product_Permutation_Temp;
DROP TABLE IF EXISTS tmp_Msg_Error;
+/*
SELECT * FROM partsltd_prod.Shop_Product
+Cannot add or update a child row: a foreign key constraint fails (`partsltd_prod`.`shop_product_permutation`, CONSTRAINT `FK_Shop_Product_Permutation_id_product` FOREIGN KEY (`id_product`) REFERENCES `shop_product` (`id_product`) ON UPDATE RESTRICT)
*/
DROP PROCEDURE IF EXISTS p_shop_get_many_product_variation;
@@ -11149,7 +11214,6 @@ BEGIN
END //
DELIMITER ;;
-
/*
CALL p_shop_get_many_product_variation (
@@ -11160,9 +11224,10 @@ CALL p_shop_get_many_product_variation (
, 1 # a_get_all_variation
, 0 # a_get_inactive_variation
, '' # a_ids_variation
- , 1 # a_debug
+ , 0 # a_debug
);
+
select * from TMP_MSG_ERROR;
DROP TABLE TMP_MSG_ERROR;
@@ -11212,6 +11277,695 @@ insert into shop_product_change_set (comment)
END IF;
*/
+-- Clear previous proc
+DROP PROCEDURE IF EXISTS p_shop_save_product_variation;
+
+DROP TABLE IF EXISTS tmp_Variation_Type;
+DROP TABLE IF EXISTS tmp_Variation;
+DROP TABLE IF EXISTS tmp_Msg_Error;
+
+DELIMITER //
+CREATE PROCEDURE p_shop_save_product_variation (
+ IN a_comment VARCHAR(500)
+ , IN a_guid BINARY(36)
+ , IN a_id_user INT
+ , IN a_debug BIT
+)
+BEGIN
+ DECLARE v_code_type_error_bad_data VARCHAR(50);
+ DECLARE v_code_type_error_no_permission VARCHAR(50);
+ DECLARE v_code_type_error_warning VARCHAR(50);
+ DECLARE v_id_access_level_edit INT;
+ DECLARE v_id_change_set INT;
+ DECLARE v_ids_permission_product_variation VARCHAR(100);
+ DECLARE v_id_type_error_bad_data INT;
+ DECLARE v_id_type_error_no_permission INT;
+ DECLARE v_id_type_error_warning INT;
+ DECLARE v_ids_product_permission TEXT;
+ DECLARE v_time_start TIMESTAMP(6);
+
+ DECLARE exit handler for SQLEXCEPTION
+ BEGIN
+ GET DIAGNOSTICS CONDITION 1
+ @sqlstate = RETURNED_SQLSTATE
+ , @errno = MYSQL_ERRNO
+ , @text = MESSAGE_TEXT
+ ;
+
+ ROLLBACK;
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
+ display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
+ , id_type INT NULL
+ , code VARCHAR(50) NOT NULL
+ , msg VARCHAR(4000) NOT NULL
+ );
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ MET.id_type
+ , @errno
+ , @text
+ FROM partsltd_prod.Shop_Msg_Error_Type MET
+ WHERE code = 'MYSQL_ERROR'
+ LIMIT 1
+ ;
+ SELECT *
+ FROM tmp_Msg_Error;
+ DROP TABLE IF EXISTS tmp_Msg_Error;
+ END;
+
+ SET v_time_start := CURRENT_TIMESTAMP(6);
+ SET v_code_type_error_bad_data := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'BAD_DATA' LIMIT 1);
+ SET v_id_type_error_bad_data := (SELECT id_type FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
+ SET v_code_type_error_no_permission := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'NO_PERMISSION' LIMIT 1);
+ SET v_id_type_error_no_permission := (SELECT id_type FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = v_code_type_error_no_permission LIMIT 1);
+ SET v_code_type_error_warning := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'WARNING' LIMIT 1);
+ SET v_id_type_error_warning := (SELECT id_type FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = v_code_type_error_warning LIMIT 1);
+ SET v_ids_permission_product_variation := (SELECT GROUP_CONCAT(id_permission SEPARATOR ',') FROM partsltd_prod.Shop_Permission WHERE code IN ('STORE_PRODUCT'));
+ SET v_id_access_level_edit := (SELECT id_access_level FROM partsltd_prod.Shop_Access_Level WHERE code = 'EDIT' LIMIT 1);
+
+ CALL p_validate_guid ( a_guid );
+ SET a_comment := TRIM(IFNULL(a_comment, ''));
+
+ DROP TEMPORARY TABLE IF EXISTS tmp_Variation_Type;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Variation;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
+
+ -- Temporary tables
+ CREATE TEMPORARY TABLE tmp_Variation_Type (
+ id_type INT NOT NULL PRIMARY KEY
+ , id_type_temp INT NOT NULL
+ , code VARCHAR(50)
+ , name VARCHAR(255)
+ , name_plural VARCHAR(256)
+ , active BIT NULL
+ , display_order INT NOT NULL
+ , created_on DATETIME
+ , created_by INT
+ , is_new BIT NOT NULL
+ , name_error VARCHAR(1000) NOT NULL
+ );
+ -- CREATE TEMPORARY TABLE tmp_Variation_Type_Count
+
+ CREATE TEMPORARY TABLE tmp_Variation (
+ id_variation INT NOT NULL PRIMARY KEY
+ , id_type INT NOT NULL
+ , code VARCHAR(50)
+ , name VARCHAR(255)
+ , active BIT
+ , display_order INT NOT NULL
+ , created_on DATETIME
+ , created_by INT
+ , has_type BIT NULL
+ , is_new BIT NOT NULL
+ , name_error VARCHAR(1000) NOT NULL
+ );
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
+ display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
+ , id_type INT NOT NULL
+ , code VARCHAR(50) NOT NULL
+ , msg VARCHAR(4000) NOT NULL
+ );
+
+ INSERT INTO tmp_Variation_Type (
+ id_type
+ , id_type_temp
+ , code
+ , name
+ , name_plural
+ , active
+ , display_order
+ , created_on
+ , created_by
+ , is_new
+ , name_error
+ )
+ SELECT
+ VT_T.id_type
+ , VT_T.id_type
+ , VT_T.code
+ , VT_T.name
+ , VT_T.name_plural
+ , VT_T.active
+ , VT_T.display_order
+ , IFNULL(VT_T.created_on, VT.created_on) AS created_on
+ , IFNULL(VT_T.created_by, VT.created_by) AS created_by
+ , IFNULL(VT_T.id_type, 0) < 1 AS is_new
+ , CASE WHEN IFNULL(VT_T.id_type, 0) < 1 THEN
+ CONCAT(
+ 'New Variation Type: '
+ , VT_T.display_order
+ , ' - '
+ , IFNULL(VT_T.code, '(No Code)')
+ , ' - '
+ , IFNULL(VT_T.name, '(No Name)')
+ )
+ ELSE
+ CONCAT(
+ VT_T.display_order
+ , ' - '
+ , IFNULL(VT_T.code, '(No Code)')
+ , ' - '
+ , IFNULL(VT_T.name, '(No Name)')
+ )
+ END AS name_error
+ FROM partsltd_prod.Shop_Variation_Type_Temp VT_T
+ LEFT JOIN partsltd_prod.Shop_Variation_Type VT ON VT_T.id_type = VT.id_type
+ WHERE VT_T.GUID = a_guid
+ ;
+
+ INSERT INTO tmp_Variation (
+ id_variation
+ , id_type
+ , code
+ , name
+ , active
+ , display_order
+ , created_on
+ , created_by
+ , has_type
+ , is_new
+ , name_error
+ )
+ SELECT
+ V_T.id_variation
+ , IFNULL(V_T.id_type, V.id_type) AS id_type
+ , V_T.code
+ , V_T.name
+ , V_T.active
+ , V_T.display_order
+ , IFNULL(V_T.created_on, V.created_on) AS created_on
+ , IFNULL(V_T.created_by, V.created_by) AS created_by
+ , NOT ISNULL(t_VT.id_type) AS has_type
+ , IFNULL(V_T.id_variation, 0) < 1 AS is_new
+ , CASE WHEN IFNULL(V_T.id_variation, 0) < 1 THEN
+ CONCAT(
+ 'New Variation: '
+ , V_T.display_order
+ , ' - '
+ , IFNULL(V_T.code, '(No Code)')
+ , ' - '
+ , IFNULL(V_T.name, '(No Name)')
+ )
+ ELSE
+ CONCAT(
+ V_T.display_order
+ , ' - '
+ , IFNULL(V_T.code, '(No Code)')
+ , ' - '
+ , IFNULL(V_T.name, '(No Name)')
+ )
+ END AS name_error
+ FROM partsltd_prod.Shop_Variation_Temp V_T
+ LEFT JOIN partsltd_prod.Shop_Variation V ON V_T.id_variation = V.id_variation
+ -- LEFT JOIN partsltd_prod.Shop_Variation_Type VT ON V_T.id_type = VT.id_type
+ LEFT JOIN tmp_Variation_Type t_VT ON V_T.id_type = t_VT.id_type
+ WHERE V_T.GUID = a_guid
+ ;
+
+ -- Insert missing order records
+ INSERT INTO tmp_Variation_Type (
+ id_type
+ , id_type_temp
+ , code
+ , name
+ , name_plural
+ , active
+ , display_order
+ , created_on
+ , created_by
+ , is_new
+ , name_error
+ )
+ SELECT
+ VT.id_type
+ , VT.id_type
+ , VT.code
+ , VT.name
+ , VT.name_plural
+ , VT.active
+ , VT.display_order
+ , VT.created_on
+ , VT.created_by
+ , 0 AS is_new
+ , CONCAT(
+ VT.display_order
+ , ' - '
+ , IFNULL(VT.code, '(No Code)')
+ , ' - '
+ , IFNULL(VT.name, '(No Name)')
+ ) AS name_error
+ FROM partsltd_prod.Shop_Variation_Type VT
+ INNER JOIN tmp_Variation t_V
+ ON VT.id_type = t_V.id_type
+ AND t_V.has_type = 0
+ AND NOT ISNULL(t_V.id_type)
+ ;
+
+ UPDATE tmp_Variation t_V
+ INNER JOIN tmp_Variation_Type t_VT ON t_V.id_type = t_V.id_type
+ SET t_V.has_type = 1
+ WHERE t_V.has_type = 0
+ ;
+
+ -- Validation
+ -- Variation Type
+ # id_type
+ IF EXISTS (
+ SELECT *
+ FROM tmp_Variation_Type t_VT
+ INNER JOIN partsltd_prod.Shop_Variation_Type VT ON t_VT.id_type = VT.id_type
+ WHERE 1=1
+ AND t_VT.id_type > 0
+ AND ISNULL(VT.id_type)
+ LIMIT 1
+ ) THEN
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT(
+ 'A valid ID is required for the following Product Variation Type(s): '
+ , GROUP_CONCAT(t_VT.name_error SEPARATOR ', ')
+ ) AS msg
+ FROM tmp_Variation_Type t_VT
+ INNER JOIN partsltd_prod.Shop_Variation_Type VT ON t_VT.id_type = VT.id_type
+ WHERE 1=1
+ AND t_VT.id_type > 0
+ AND ISNULL(VT.id_type)
+ ;
+ END IF;
+ -- Variation
+ # id_variation
+ IF EXISTS (
+ SELECT *
+ FROM tmp_Variation t_V
+ INNER JOIN partsltd_prod.Shop_Variation V ON t_V.id_variation = V.id_variation
+ WHERE 1=1
+ AND t_V.id_variation > 0
+ AND ISNULL(V.id_variation)
+ LIMIT 1
+ ) THEN
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT(
+ 'A valid ID is required for the following Product Variation(s): '
+ , GROUP_CONCAT(t_V.name_error SEPARATOR ', ')
+ ) AS msg
+ FROM tmp_Variation t_V
+ INNER JOIN partsltd_prod.Shop_Variation V ON t_V.id_variation = V.id_variation
+ WHERE 1=1
+ AND t_V.id_variation > 0
+ AND ISNULL(V.id_variation)
+ ;
+ END IF;
+ # id_type
+ IF EXISTS ( SELECT * FROM tmp_Variation t_V WHERE t_V.has_type = 0 LIMIT 1 ) THEN
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT(
+ 'A valid ID is required for the following Product Variation(s): '
+ , GROUP_CONCAT(t_V.name_error SEPARATOR ', ')
+ ) AS msg
+ FROM tmp_Variation t_V
+ WHERE t_V.has_type = 0
+ ;
+ END IF;
+
+ -- Duplicate Variation Type Codes
+ -- Duplicate Variation Codes
+
+ -- Permissions
+ IF a_debug = 1 THEN
+ SELECT
+ a_guid
+ , a_id_user
+ , FALSE -- get inactive users
+ , v_ids_permission_product_variation
+ , v_id_access_level_edit
+ , NULL -- ids_product
+ , 0 -- a_debug
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Calc_User_Temp
+ WHERE GUID = a_guid
+ ;
+ END IF;
+
+ CALL p_shop_calc_user(
+ a_guid
+ , a_id_user
+ , FALSE -- get inactive users
+ , v_ids_permission_product_variation
+ , v_id_access_level_edit
+ , NULL -- ids_product
+ , 0 -- a_debug
+ );
+
+ IF a_debug = 1 THEN
+ SELECT * from partsltd_prod.Shop_Calc_User_Temp WHERE GUID = a_guid;
+ END IF;
+
+ IF EXISTS (SELECT * FROM partsltd_prod.Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = a_guid AND IFNULL(UE_T.can_view, 0) = 0) THEN
+ DELETE FROM tmp_Msg_Error;
+
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ v_id_type_error_no_permission
+ , v_code_type_error_no_permission
+ , CONCAT(
+ 'You do not have edit permissions for '
+ , GROUP_CONCAT(name SEPARATOR ', ')
+ )
+ FROM partsltd_prod.Shop_Permission PERM
+ INNER JOIN partsltd_prod.Shop_Calc_User_Temp UE_T
+ ON PERM.id_permission = UE_T.id_permission
+ AND UE_T.GUID = a_guid
+ AND IFNULL(UE_T.can_view, 0) = 0
+ ;
+ END IF;
+
+ CALL partsltd_prod.p_shop_clear_calc_user(
+ a_guid
+ , 0 -- a_debug
+ );
+
+ IF EXISTS ( SELECT * FROM tmp_Msg_Error WHERE id_type <> v_id_type_error_warning LIMIT 1 ) THEN
+ DELETE FROM tmp_Variation_Type;
+ DELETE FROM tmp_Variation;
+ END IF;
+
+ -- Transaction
+ IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN
+ START TRANSACTION;
+ INSERT INTO Shop_Sales_And_Purchasing_Change_Set (
+ comment
+ , updated_last_by
+ , updated_last_on
+ )
+ VALUES (
+ a_comment
+ , a_id_user
+ , v_time_start
+ );
+
+ SET v_id_change_set := LAST_INSERT_ID();
+
+ INSERT INTO partsltd_prod.Shop_Variation_Type (
+ id_type_temp
+ , code
+ , name
+ , name_plural
+ , active
+ , display_order
+ , created_on
+ , created_by
+ )
+ SELECT
+ t_VT.id_type
+ , t_VT.code
+ , t_VT.name
+ , t_VT.name_plural
+ , t_VT.active
+ , t_VT.display_order
+ , t_VT.created_on
+ , t_VT.created_by
+ FROM tmp_Variation_Type t_VT
+ WHERE t_VT.is_new = 1
+ ;
+
+ UPDATE tmp_Variation_Type t_VT
+ INNER JOIN partsltd_prod.Shop_Variation_Type VT ON t_VT.id_type_temp = VT.id_type_temp
+ SET
+ t_VT.id_type = VT.id_type
+ WHERE t_VT.is_new = 1
+ ;
+
+ UPDATE tmp_Variation t_V
+ INNER JOIN tmp_Variation_Type t_VT
+ ON t_V.id_type = t_VT.id_type_temp
+ AND t_VT.is_new = 1
+ SET
+ t_V.id_type = t_VT.id_type
+ ;
+
+ INSERT INTO partsltd_prod.Shop_Variation (
+ id_type
+ , code
+ , name
+ , active
+ , display_order
+ , created_on
+ , created_by
+ )
+ SELECT
+ t_V.id_type
+ , t_V.code
+ , t_V.name
+ , t_V.active
+ , t_V.display_order
+ , t_V.created_on
+ , t_V.created_by
+ FROM tmp_Variation t_V
+ WHERE t_V.is_new = 1
+ ;
+
+ UPDATE partsltd_prod.Shop_Variation_Type VT
+ INNER JOIN tmp_Variation_Type t_VT
+ ON VT.id_type = t_VT.id_type
+ AND t_VT.is_new = 0
+ INNER JOIN tmp_Variation t_V ON t_VT.id_type = t_V.id_type
+ SET
+ VT.code = t_VT.code
+ , VT.name = t_VT.name
+ , VT.name_plural = t_VT.name_plural
+ , VT.active = t_VT.active
+ , VT.display_order = t_VT.display_order
+ , VT.created_on = t_VT.created_on
+ , VT.created_by = t_VT.created_by
+ ;
+
+ UPDATE partsltd_prod.Shop_Variation V
+ INNER JOIN tmp_Variation t_V
+ ON V.id_variation = t_V.id_variation
+ AND t_V.is_new = 0
+ SET
+ V.code = t_V.code
+ , V.name = t_V.name
+ , V.active = t_V.active
+ , V.display_order = t_V.display_order
+ , V.created_on = t_V.created_on
+ , V.created_by = t_V.created_by
+ ;
+
+ DELETE VT_T
+ FROM partsltd_prod.Shop_Variation_Type_Temp VT_T
+ WHERE VT_T.GUID = a_guid
+ ;
+ DELETE V_T
+ FROM partsltd_prod.Shop_Variation_Temp V_T
+ WHERE V_T.GUID = a_guid
+ ;
+
+ COMMIT;
+ END IF;
+
+ # Errors
+ SELECT *
+ FROM tmp_Msg_Error t_ME
+ INNER JOIN partsltd_prod.Shop_Msg_Error_Type MET ON t_ME.id_type = MET.id_type
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT * from tmp_Variation_Type;
+ SELECT * from tmp_Variation;
+ END IF;
+
+ DROP TEMPORARY TABLE tmp_Variation_Type;
+ DROP TEMPORARY TABLE tmp_Variation;
+ DROP TEMPORARY TABLE tmp_Msg_Error;
+
+ IF a_debug = 1 THEN
+ CALL partsltd_prod.p_debug_timing_reporting ( v_time_start );
+ END IF;
+END //
+DELIMITER ;;
+
+
+
+
+-- Clear previous proc
+DROP PROCEDURE IF EXISTS partsltd_prod.p_shop_save_product_variation_test;
+
+
+DELIMITER //
+CREATE PROCEDURE p_shop_save_product_variation_test ()
+BEGIN
+
+ DECLARE v_guid BINARY(36);
+ DECLARE v_time_start TIMESTAMP(6);
+
+ SET v_time_start := CURRENT_TIMESTAMP(6);
+ SET v_guid := 'nips';
+
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Type
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Type_Temp
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Variation
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Temp
+ ;
+
+ START TRANSACTION;
+
+ DELETE FROM partsltd_prod.Shop_Variation_Type_Temp;
+ DELETE FROM partsltd_prod.Shop_Variation_Temp;
+
+ INSERT INTO partsltd_prod.Shop_Variation_Type_Temp (
+ id_type
+ , id_type_temp
+ , code
+ , name
+ , name_plural
+ , display_order
+ , active
+ , GUID
+ )
+ /* Test 1 - Insert */
+ VALUES (
+ -1
+ , -1
+ , 'SIZE'
+ , 'Size'
+ , 'Sizes'
+ , 2
+ , 1
+ , v_guid
+ )
+ /* Test 2: Alter
+ SELECT
+ FROM partsltd_prod.Shop_Variation_Type
+ WHERE id_order = 6
+ */
+ ;
+
+ INSERT INTO partsltd_prod.Shop_Variation_Temp (
+ id_variation
+ , id_type
+ , code
+ , name
+ , display_order
+ , active
+ , GUID
+ )
+ /* Test 1 - Insert */
+ VALUES (
+ -1 -- id_variation
+ , -1 -- id_type
+ , '300 mL' -- code
+ , '300 millilitres' -- name
+ , 1 -- display_order
+ , 1 -- active
+ , v_guid --
+ )
+ /* Test 2: Alter
+ SELECT
+ FROM partsltd_prod.Shop_Variation
+ WHERE id_order = 6
+ */
+ ;
+
+ COMMIT;
+
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Type_Temp
+ WHERE GUID = v_guid
+ ;
+
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Temp
+ WHERE GUID = v_guid
+ ;
+
+ CALL partsltd_prod.p_shop_save_product_variation (
+ 'Test save Variations' -- comment
+ , v_guid -- guid
+ , 1 -- id_user
+ , 1 -- debug
+ );
+
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Type_Temp
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Temp
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Type
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Variation
+ ;
+
+ CALL partsltd_prod.p_debug_timing_reporting ( v_time_start );
+END //
+DELIMITER ;;
+
+/*
+CALL partsltd_prod.p_shop_save_product_variation_test ();
+
+DELETE FROM partsltd_prod.Shop_Variation_Type_Temp;
+DELETE FROM partsltd_prod.Shop_Variation_Temp;
+
+DROP TABLE IF EXISTS tmp_Msg_Error;
+
+
+delete from shop_variation_audit
+where id_variation = 3
+;
+delete from shop_variation_audit
+where id_variation = 3
+;
+delete from shop_variation_type_audit
+where id_type = -1
+;
+delete
+-- select *
+ from shop_variation_type
+where id_type = -1
+;
+*/
+
-- Clear previous proc
DROP PROCEDURE IF EXISTS p_shop_get_many_stock_item;
@@ -18778,7 +19532,7 @@ BEGIN
v_id_type_error_no_permission
, v_code_type_error_no_permission
, CONCAT(
- 'You do not have view permissions for '
+ 'You do not have edit permissions for '
, GROUP_CONCAT(name SEPARATOR ', ')
)
FROM partsltd_prod.Shop_Permission PERM
@@ -22616,33 +23370,3 @@ SELECT * FROM Shop_Customer_Sales_Order_Audit;
SELECT * FROM Shop_Customer_Sales_Order_Product_Link;
SELECT * FROM Shop_Customer_Sales_Order_Product_Link_Audit;
-
-
-/*
-
-SELECT TABLE_NAME
-FROM INFORMATION_SCHEMA.TABLES
-WHERE TABLE_NAME LIKE '%SHOP%'
- OR TABLE_NAME LIKE '%FILE_TYPE%';
-
-
-SELECT FOUND_ROWS();
-
-
-
-SELECT
- CONSTRAINT_NAME,
- CONSTRAINT_TYPE,
- TABLE_NAME,
- COLUMN_NAME,
- REFERENCED_TABLE_NAME,
- REFERENCED_COLUMN_NAME
-FROM
- INFORMATION_SCHEMA.TABLES
-WHERE
- TABLE_SCHEMA = 'PARTS'
- -- AND TABLE_NAME = 'your_table_name'
-;
-
-*/
-
diff --git a/static/MySQL/0001_destroy.sql b/static/MySQL/0001_destroy.sql
index da06cb9b..6f137d65 100644
--- a/static/MySQL/0001_destroy.sql
+++ b/static/MySQL/0001_destroy.sql
@@ -168,13 +168,19 @@ DROP TABLE IF EXISTS Shop_Product_Variation_Link;
DROP TABLE IF EXISTS Shop_Product_Permutation_Variation_Link_Audit;
DROP TABLE IF EXISTS Shop_Product_Permutation_Variation_Link;
+DROP TABLE IF EXISTS Shop_Variation_Temp;
DROP TABLE IF EXISTS Shop_Variation_Audit;
DROP TABLE IF EXISTS Shop_Variation;
DROP TABLE IF EXISTS Shop_Product_Variation_Type_Link_Audit;
DROP TABLE IF EXISTS Shop_Product_Variation_Type_Link;
+DROP TABLE IF EXISTS Shop_Product_Variation_Temp;
+DROP TABLE IF EXISTS Shop_Product_Variation;
+DROP TABLE IF EXISTS Shop_Variation_Type_Temp;
DROP TABLE IF EXISTS Shop_Variation_Type_Audit;
DROP TABLE IF EXISTS Shop_Variation_Type;
+DROP TABLE IF EXISTS Shop_Product_Variation_Type_Temp;
+DROP TABLE IF EXISTS Shop_Product_Variation_Type;
DROP TABLE IF EXISTS Shop_Product_Permutation_Temp;
DROP TABLE IF EXISTS Shop_Product_Permutation_Audit;
@@ -294,6 +300,8 @@ DROP PROCEDURE IF EXISTS p_shop_get_many_stripe_product_new;
DROP PROCEDURE IF EXISTS p_shop_save_permutation;
DROP PROCEDURE IF EXISTS p_shop_save_product_permutation;
DROP PROCEDURE IF EXISTS p_shop_save_product_permutation_test;
+DROP PROCEDURE IF EXISTS p_shop_save_product_variation;
+DROP PROCEDURE IF EXISTS p_shop_save_product_variation_test;
DROP PROCEDURE IF EXISTS p_shop_get_many_product_variation;
DROP FUNCTION IF EXISTS fn_shop_get_id_product_permutation_from_variation_csv_list;
DROP PROCEDURE IF EXISTS p_shop_save_stock_item;
diff --git a/static/MySQL/1208_tbl_Shop_Product_Permutation_Temp.sql b/static/MySQL/1208_tbl_Shop_Product_Permutation_Temp.sql
index a792ea0e..cc2df0eb 100644
--- a/static/MySQL/1208_tbl_Shop_Product_Permutation_Temp.sql
+++ b/static/MySQL/1208_tbl_Shop_Product_Permutation_Temp.sql
@@ -16,8 +16,8 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Temp (
, latency_manufacture INT NOT NULL
, id_unit_measurement_quantity INT NOT NULL
, count_unit_measurement_per_quantity_step FLOAT NOT NULL
- , quantity_min FLOAT NOT NULL
- , quantity_max FLOAT NOT NULL
+ , quantity_min FLOAT NULL
+ , quantity_max FLOAT NULL
, quantity_stock FLOAT NULL
, is_subscription BIT NOT NULL
, id_unit_measurement_interval_recurrence INT
diff --git a/static/MySQL/1209_tbl_Shop_Variation_Type.sql b/static/MySQL/1209_tbl_Shop_Variation_Type.sql
index 6624b7e2..290f3bc6 100644
--- a/static/MySQL/1209_tbl_Shop_Variation_Type.sql
+++ b/static/MySQL/1209_tbl_Shop_Variation_Type.sql
@@ -6,16 +6,17 @@
SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Variation_Type';
CREATE TABLE IF NOT EXISTS Shop_Variation_Type (
- id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
- code VARCHAR(50),
- name VARCHAR(255),
- name_plural VARCHAR(256),
- active BIT NOT NULL DEFAULT 1,
- display_order INT NOT NULL,
- created_on DATETIME,
- created_by INT,
- id_change_set INT,
- CONSTRAINT FK_Shop_Variation_Type_id_change_set
+ id_type INT NOT NULL AUTO_INCREMENT PRIMARY KEY
+ , id_type_temp INT NULL
+ , code VARCHAR(50)
+ , name VARCHAR(255)
+ , name_plural VARCHAR(256)
+ , active BIT NOT NULL DEFAULT 1
+ , display_order INT NOT NULL
+ , created_on DATETIME
+ , created_by INT
+ , id_change_set INT
+ , CONSTRAINT FK_Shop_Variation_Type_id_change_set
FOREIGN KEY (id_change_set)
REFERENCES Shop_Product_Change_Set(id_change_set)
);
\ No newline at end of file
diff --git a/static/MySQL/1211_tbl_Shop_Variation_Type_Temp.sql b/static/MySQL/1211_tbl_Shop_Variation_Type_Temp.sql
new file mode 100644
index 00000000..e6d4c4a1
--- /dev/null
+++ b/static/MySQL/1211_tbl_Shop_Variation_Type_Temp.sql
@@ -0,0 +1,20 @@
+
+# Variation Types Temp
+
+-- DROP TABLE partsltd_prod.Shop_Variation_Type_Temp;
+
+SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Variation_Type_Temp';
+
+CREATE TABLE IF NOT EXISTS Shop_Variation_Type_Temp (
+ id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT
+ , id_type INT NOT NULL
+ -- , id_type_temp INT NOT NULL
+ , code VARCHAR(50)
+ , name VARCHAR(255)
+ , name_plural VARCHAR(256)
+ , active BIT NULL
+ , display_order INT NOT NULL
+ , created_on DATETIME
+ , created_by INT
+ , guid BINARY(36) NOT NULL
+);
\ No newline at end of file
diff --git a/static/MySQL/1214_tbl_Shop_Variation_Temp.sql b/static/MySQL/1214_tbl_Shop_Variation_Temp.sql
new file mode 100644
index 00000000..1491e9c1
--- /dev/null
+++ b/static/MySQL/1214_tbl_Shop_Variation_Temp.sql
@@ -0,0 +1,19 @@
+
+# Variations Temp
+
+-- DROP TABLE partsltd_prod.Shop_Variation_Temp;
+
+SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Variation_Temp';
+
+CREATE TABLE Shop_Variation_Temp (
+ id_temp INT NOT NULL PRIMARY KEY AUTO_INCREMENT
+ , id_variation INT NOT NULL
+ , id_type INT NOT NULL
+ , code VARCHAR(50)
+ , name VARCHAR(255)
+ , active BIT
+ , display_order INT NOT NULL
+ , created_on DATETIME
+ , created_by INT
+ , guid BINARY(36)
+);
diff --git a/static/MySQL/6206_fn_shop_get_product_permutation_name.sql b/static/MySQL/6206_fn_shop_get_product_permutation_name.sql
index cd6ee9b8..f02187a2 100644
--- a/static/MySQL/6206_fn_shop_get_product_permutation_name.sql
+++ b/static/MySQL/6206_fn_shop_get_product_permutation_name.sql
@@ -20,8 +20,8 @@ BEGIN
ELSE '' END
)
FROM Shop_Product_Permutation PP
- INNER JOIN Shop_Product P ON PP.id_product = P.id_product
- INNER JOIN Shop_Product_Category PC ON P.id_category = PC.id_category
+ LEFT JOIN Shop_Product P ON PP.id_product = P.id_product
+ LEFT JOIN Shop_Product_Category PC ON P.id_category = PC.id_category
LEFT JOIN Shop_Product_Permutation_Variation_Link PPVL ON PP.id_permutation = PPVL.id_permutation
LEFT JOIN Shop_Variation V ON PPVL.id_variation = V.id_variation
LEFT JOIN Shop_Variation_Type VT ON V.id_type = VT.id_type
diff --git a/static/MySQL/7204_p_shop_get_many_product.sql b/static/MySQL/7204_p_shop_get_many_product.sql
index 3edba3cd..684e1da1 100644
--- a/static/MySQL/7204_p_shop_get_many_product.sql
+++ b/static/MySQL/7204_p_shop_get_many_product.sql
@@ -337,7 +337,8 @@ BEGIN
PP.id_product,
P.id_category,
PP.description,
- PP.cost_local,
+ PP.cost_local_VAT_excl,
+ PP.cost_local_VAT_incl,
PP.id_currency_cost,
C.code AS code_currency_cost,
C.symbol AS symbol_currency_cost,
diff --git a/static/MySQL/7206_p_shop_save_product_permutation_test.sql b/static/MySQL/7206_p_shop_save_product_permutation_test.sql
index c70d21fd..b9468e10 100644
--- a/static/MySQL/7206_p_shop_save_product_permutation_test.sql
+++ b/static/MySQL/7206_p_shop_save_product_permutation_test.sql
@@ -51,7 +51,7 @@ BEGIN
/* Test 1 - Insert */
(
-1 -- id_permutation
- , 8 -- id_product
+ , 5 -- id_product
, 'Hair clip' -- description
, NULL -- cost_local_VAT_excl
, NULL -- cost_local_VAT_incl
@@ -112,7 +112,6 @@ BEGIN
END //
DELIMITER ;;
-/*
CALL partsltd_prod.p_shop_save_product_permutation_test ();
DELETE FROM partsltd_prod.Shop_Product_Permutation_Temp;
@@ -120,5 +119,7 @@ DELETE FROM partsltd_prod.Shop_Product_Permutation_Temp;
DROP TABLE IF EXISTS tmp_Msg_Error;
+/*
SELECT * FROM partsltd_prod.Shop_Product
+Cannot add or update a child row: a foreign key constraint fails (`partsltd_prod`.`shop_product_permutation`, CONSTRAINT `FK_Shop_Product_Permutation_id_product` FOREIGN KEY (`id_product`) REFERENCES `shop_product` (`id_product`) ON UPDATE RESTRICT)
*/
\ No newline at end of file
diff --git a/static/MySQL/7210_p_shop_get_many_product_variation.sql b/static/MySQL/7210_p_shop_get_many_product_variation.sql
index 0cfcb40d..73f75288 100644
--- a/static/MySQL/7210_p_shop_get_many_product_variation.sql
+++ b/static/MySQL/7210_p_shop_get_many_product_variation.sql
@@ -353,20 +353,20 @@ BEGIN
END //
DELIMITER ;;
-
/*
CALL p_shop_get_many_product_variation (
1 # 'auth0|6582b95c895d09a70ba10fef', # a_id_user
, 1 # a_get_all_variation_type
- , 0 # a_get_inactive_variation_type
+ , 1 # a_get_inactive_variation_type
, '' # a_ids_variation_type
, 1 # a_get_all_variation
- , 0 # a_get_inactive_variation
+ , 1 # a_get_inactive_variation
, '' # a_ids_variation
- , 1 # a_debug
+ , 0 # a_debug
);
+
select * from TMP_MSG_ERROR;
DROP TABLE TMP_MSG_ERROR;
diff --git a/static/MySQL/7212_p_shop_save_product_variation.sql b/static/MySQL/7212_p_shop_save_product_variation.sql
new file mode 100644
index 00000000..b8a81f6a
--- /dev/null
+++ b/static/MySQL/7212_p_shop_save_product_variation.sql
@@ -0,0 +1,546 @@
+
+
+-- Clear previous proc
+DROP PROCEDURE IF EXISTS p_shop_save_product_variation;
+
+DROP TABLE IF EXISTS tmp_Variation_Type;
+DROP TABLE IF EXISTS tmp_Variation;
+DROP TABLE IF EXISTS tmp_Msg_Error;
+
+DELIMITER //
+CREATE PROCEDURE p_shop_save_product_variation (
+ IN a_comment VARCHAR(500)
+ , IN a_guid BINARY(36)
+ , IN a_id_user INT
+ , IN a_debug BIT
+)
+BEGIN
+ DECLARE v_code_type_error_bad_data VARCHAR(50);
+ DECLARE v_code_type_error_no_permission VARCHAR(50);
+ DECLARE v_code_type_error_warning VARCHAR(50);
+ DECLARE v_id_access_level_edit INT;
+ DECLARE v_id_change_set INT;
+ DECLARE v_ids_permission_product_variation VARCHAR(100);
+ DECLARE v_id_type_error_bad_data INT;
+ DECLARE v_id_type_error_no_permission INT;
+ DECLARE v_id_type_error_warning INT;
+ DECLARE v_ids_product_permission TEXT;
+ DECLARE v_time_start TIMESTAMP(6);
+
+ DECLARE exit handler for SQLEXCEPTION
+ BEGIN
+ GET DIAGNOSTICS CONDITION 1
+ @sqlstate = RETURNED_SQLSTATE
+ , @errno = MYSQL_ERRNO
+ , @text = MESSAGE_TEXT
+ ;
+
+ ROLLBACK;
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
+ display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
+ , id_type INT NULL
+ , code VARCHAR(50) NOT NULL
+ , msg VARCHAR(4000) NOT NULL
+ );
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ MET.id_type
+ , @errno
+ , @text
+ FROM partsltd_prod.Shop_Msg_Error_Type MET
+ WHERE code = 'MYSQL_ERROR'
+ LIMIT 1
+ ;
+ SELECT *
+ FROM tmp_Msg_Error;
+ DROP TABLE IF EXISTS tmp_Msg_Error;
+ END;
+
+ SET v_time_start := CURRENT_TIMESTAMP(6);
+ SET v_code_type_error_bad_data := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'BAD_DATA' LIMIT 1);
+ SET v_id_type_error_bad_data := (SELECT id_type FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1);
+ SET v_code_type_error_no_permission := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'NO_PERMISSION' LIMIT 1);
+ SET v_id_type_error_no_permission := (SELECT id_type FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = v_code_type_error_no_permission LIMIT 1);
+ SET v_code_type_error_warning := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'WARNING' LIMIT 1);
+ SET v_id_type_error_warning := (SELECT id_type FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = v_code_type_error_warning LIMIT 1);
+ SET v_ids_permission_product_variation := (SELECT GROUP_CONCAT(id_permission SEPARATOR ',') FROM partsltd_prod.Shop_Permission WHERE code IN ('STORE_PRODUCT'));
+ SET v_id_access_level_edit := (SELECT id_access_level FROM partsltd_prod.Shop_Access_Level WHERE code = 'EDIT' LIMIT 1);
+
+ CALL p_validate_guid ( a_guid );
+ SET a_comment := TRIM(IFNULL(a_comment, ''));
+
+ DROP TEMPORARY TABLE IF EXISTS tmp_Variation_Type;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Variation;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
+
+ -- Temporary tables
+ CREATE TEMPORARY TABLE tmp_Variation_Type (
+ id_type INT NOT NULL PRIMARY KEY
+ , id_type_temp INT NOT NULL
+ , code VARCHAR(50)
+ , name VARCHAR(255)
+ , name_plural VARCHAR(256)
+ , active BIT NULL
+ , display_order INT NOT NULL
+ , created_on DATETIME
+ , created_by INT
+ , is_new BIT NOT NULL
+ , name_error VARCHAR(1000) NOT NULL
+ );
+ -- CREATE TEMPORARY TABLE tmp_Variation_Type_Count
+
+ CREATE TEMPORARY TABLE tmp_Variation (
+ id_variation INT NOT NULL PRIMARY KEY
+ , id_type INT NOT NULL
+ , code VARCHAR(50)
+ , name VARCHAR(255)
+ , active BIT
+ , display_order INT NOT NULL
+ , created_on DATETIME
+ , created_by INT
+ , has_type BIT NULL
+ , is_new BIT NOT NULL
+ , name_error VARCHAR(1000) NOT NULL
+ );
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
+ display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT
+ , id_type INT NOT NULL
+ , code VARCHAR(50) NOT NULL
+ , msg VARCHAR(4000) NOT NULL
+ );
+
+ INSERT INTO tmp_Variation_Type (
+ id_type
+ , id_type_temp
+ , code
+ , name
+ , name_plural
+ , active
+ , display_order
+ , created_on
+ , created_by
+ , is_new
+ , name_error
+ )
+ SELECT
+ VT_T.id_type
+ , VT_T.id_type
+ , VT_T.code
+ , VT_T.name
+ , VT_T.name_plural
+ , VT_T.active
+ , VT_T.display_order
+ , IFNULL(VT_T.created_on, VT.created_on) AS created_on
+ , IFNULL(VT_T.created_by, VT.created_by) AS created_by
+ , IFNULL(VT_T.id_type, 0) < 1 AS is_new
+ , CASE WHEN IFNULL(VT_T.id_type, 0) < 1 THEN
+ CONCAT(
+ 'New Variation Type: '
+ , VT_T.display_order
+ , ' - '
+ , IFNULL(VT_T.code, '(No Code)')
+ , ' - '
+ , IFNULL(VT_T.name, '(No Name)')
+ )
+ ELSE
+ CONCAT(
+ VT_T.display_order
+ , ' - '
+ , IFNULL(VT_T.code, '(No Code)')
+ , ' - '
+ , IFNULL(VT_T.name, '(No Name)')
+ )
+ END AS name_error
+ FROM partsltd_prod.Shop_Variation_Type_Temp VT_T
+ LEFT JOIN partsltd_prod.Shop_Variation_Type VT ON VT_T.id_type = VT.id_type
+ WHERE VT_T.GUID = a_guid
+ ;
+
+ INSERT INTO tmp_Variation (
+ id_variation
+ , id_type
+ , code
+ , name
+ , active
+ , display_order
+ , created_on
+ , created_by
+ , has_type
+ , is_new
+ , name_error
+ )
+ SELECT
+ V_T.id_variation
+ , IFNULL(V_T.id_type, V.id_type) AS id_type
+ , V_T.code
+ , V_T.name
+ , V_T.active
+ , V_T.display_order
+ , IFNULL(V_T.created_on, V.created_on) AS created_on
+ , IFNULL(V_T.created_by, V.created_by) AS created_by
+ , NOT ISNULL(t_VT.id_type) AS has_type
+ , IFNULL(V_T.id_variation, 0) < 1 AS is_new
+ , CASE WHEN IFNULL(V_T.id_variation, 0) < 1 THEN
+ CONCAT(
+ 'New Variation: '
+ , V_T.display_order
+ , ' - '
+ , IFNULL(V_T.code, '(No Code)')
+ , ' - '
+ , IFNULL(V_T.name, '(No Name)')
+ )
+ ELSE
+ CONCAT(
+ V_T.display_order
+ , ' - '
+ , IFNULL(V_T.code, '(No Code)')
+ , ' - '
+ , IFNULL(V_T.name, '(No Name)')
+ )
+ END AS name_error
+ FROM partsltd_prod.Shop_Variation_Temp V_T
+ LEFT JOIN partsltd_prod.Shop_Variation V ON V_T.id_variation = V.id_variation
+ -- LEFT JOIN partsltd_prod.Shop_Variation_Type VT ON V_T.id_type = VT.id_type
+ LEFT JOIN tmp_Variation_Type t_VT ON V_T.id_type = t_VT.id_type
+ WHERE V_T.GUID = a_guid
+ ;
+
+ -- Insert missing order records
+ INSERT INTO tmp_Variation_Type (
+ id_type
+ , id_type_temp
+ , code
+ , name
+ , name_plural
+ , active
+ , display_order
+ , created_on
+ , created_by
+ , is_new
+ , name_error
+ )
+ SELECT
+ VT.id_type
+ , VT.id_type
+ , VT.code
+ , VT.name
+ , VT.name_plural
+ , VT.active
+ , VT.display_order
+ , VT.created_on
+ , VT.created_by
+ , 0 AS is_new
+ , CONCAT(
+ VT.display_order
+ , ' - '
+ , IFNULL(VT.code, '(No Code)')
+ , ' - '
+ , IFNULL(VT.name, '(No Name)')
+ ) AS name_error
+ FROM partsltd_prod.Shop_Variation_Type VT
+ INNER JOIN tmp_Variation t_V
+ ON VT.id_type = t_V.id_type
+ AND t_V.has_type = 0
+ AND NOT ISNULL(t_V.id_type)
+ ;
+
+ UPDATE tmp_Variation t_V
+ INNER JOIN tmp_Variation_Type t_VT ON t_V.id_type = t_V.id_type
+ SET t_V.has_type = 1
+ WHERE t_V.has_type = 0
+ ;
+
+ -- Validation
+ -- Variation Type
+ # id_type
+ IF EXISTS (
+ SELECT *
+ FROM tmp_Variation_Type t_VT
+ INNER JOIN partsltd_prod.Shop_Variation_Type VT ON t_VT.id_type = VT.id_type
+ WHERE 1=1
+ AND t_VT.id_type > 0
+ AND ISNULL(VT.id_type)
+ LIMIT 1
+ ) THEN
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT(
+ 'A valid ID is required for the following Product Variation Type(s): '
+ , GROUP_CONCAT(t_VT.name_error SEPARATOR ', ')
+ ) AS msg
+ FROM tmp_Variation_Type t_VT
+ INNER JOIN partsltd_prod.Shop_Variation_Type VT ON t_VT.id_type = VT.id_type
+ WHERE 1=1
+ AND t_VT.id_type > 0
+ AND ISNULL(VT.id_type)
+ ;
+ END IF;
+ -- Variation
+ # id_variation
+ IF EXISTS (
+ SELECT *
+ FROM tmp_Variation t_V
+ INNER JOIN partsltd_prod.Shop_Variation V ON t_V.id_variation = V.id_variation
+ WHERE 1=1
+ AND t_V.id_variation > 0
+ AND ISNULL(V.id_variation)
+ LIMIT 1
+ ) THEN
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT(
+ 'A valid ID is required for the following Product Variation(s): '
+ , GROUP_CONCAT(t_V.name_error SEPARATOR ', ')
+ ) AS msg
+ FROM tmp_Variation t_V
+ INNER JOIN partsltd_prod.Shop_Variation V ON t_V.id_variation = V.id_variation
+ WHERE 1=1
+ AND t_V.id_variation > 0
+ AND ISNULL(V.id_variation)
+ ;
+ END IF;
+ # id_type
+ IF EXISTS ( SELECT * FROM tmp_Variation t_V WHERE t_V.has_type = 0 LIMIT 1 ) THEN
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT(
+ 'A valid ID is required for the following Product Variation(s): '
+ , GROUP_CONCAT(t_V.name_error SEPARATOR ', ')
+ ) AS msg
+ FROM tmp_Variation t_V
+ WHERE t_V.has_type = 0
+ ;
+ END IF;
+
+ -- Duplicate Variation Type Ids
+ -- Duplicate Variation Ids
+ -- Duplicate Variation Type Codes
+ -- Duplicate Variation Codes
+
+ -- Permissions
+ IF a_debug = 1 THEN
+ SELECT
+ a_guid
+ , a_id_user
+ , FALSE -- get inactive users
+ , v_ids_permission_product_variation
+ , v_id_access_level_edit
+ , NULL -- ids_product
+ , 0 -- a_debug
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Calc_User_Temp
+ WHERE GUID = a_guid
+ ;
+ END IF;
+
+ CALL p_shop_calc_user(
+ a_guid
+ , a_id_user
+ , FALSE -- get inactive users
+ , v_ids_permission_product_variation
+ , v_id_access_level_edit
+ , NULL -- ids_product
+ , 0 -- a_debug
+ );
+
+ IF a_debug = 1 THEN
+ SELECT * from partsltd_prod.Shop_Calc_User_Temp WHERE GUID = a_guid;
+ END IF;
+
+ IF EXISTS (SELECT * FROM partsltd_prod.Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = a_guid AND IFNULL(UE_T.can_view, 0) = 0) THEN
+ DELETE FROM tmp_Msg_Error;
+
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ v_id_type_error_no_permission
+ , v_code_type_error_no_permission
+ , CONCAT(
+ 'You do not have edit permissions for '
+ , GROUP_CONCAT(name SEPARATOR ', ')
+ )
+ FROM partsltd_prod.Shop_Permission PERM
+ INNER JOIN partsltd_prod.Shop_Calc_User_Temp UE_T
+ ON PERM.id_permission = UE_T.id_permission
+ AND UE_T.GUID = a_guid
+ AND IFNULL(UE_T.can_view, 0) = 0
+ ;
+ END IF;
+
+ CALL partsltd_prod.p_shop_clear_calc_user(
+ a_guid
+ , 0 -- a_debug
+ );
+
+ IF EXISTS ( SELECT * FROM tmp_Msg_Error WHERE id_type <> v_id_type_error_warning LIMIT 1 ) THEN
+ DELETE FROM tmp_Variation_Type;
+ DELETE FROM tmp_Variation;
+ END IF;
+
+ -- Transaction
+ IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN
+ START TRANSACTION;
+ INSERT INTO Shop_Product_Change_Set (
+ comment
+ , updated_last_by
+ , updated_last_on
+ )
+ VALUES (
+ a_comment
+ , a_id_user
+ , v_time_start
+ );
+
+ SET v_id_change_set := LAST_INSERT_ID();
+
+ INSERT INTO partsltd_prod.Shop_Variation_Type (
+ id_type_temp
+ , code
+ , name
+ , name_plural
+ , active
+ , display_order
+ , created_on
+ , created_by
+ )
+ SELECT
+ t_VT.id_type
+ , t_VT.code
+ , t_VT.name
+ , t_VT.name_plural
+ , t_VT.active
+ , t_VT.display_order
+ , t_VT.created_on
+ , t_VT.created_by
+ FROM tmp_Variation_Type t_VT
+ WHERE t_VT.is_new = 1
+ ;
+
+ UPDATE tmp_Variation_Type t_VT
+ INNER JOIN partsltd_prod.Shop_Variation_Type VT ON t_VT.id_type_temp = VT.id_type_temp
+ SET
+ t_VT.id_type = VT.id_type
+ WHERE t_VT.is_new = 1
+ ;
+
+ UPDATE tmp_Variation t_V
+ INNER JOIN tmp_Variation_Type t_VT
+ ON t_V.id_type = t_VT.id_type_temp
+ AND t_VT.is_new = 1
+ SET
+ t_V.id_type = t_VT.id_type
+ ;
+
+ INSERT INTO partsltd_prod.Shop_Variation (
+ id_type
+ , code
+ , name
+ , active
+ , display_order
+ , created_on
+ , created_by
+ )
+ SELECT
+ t_V.id_type
+ , t_V.code
+ , t_V.name
+ , t_V.active
+ , t_V.display_order
+ , t_V.created_on
+ , t_V.created_by
+ FROM tmp_Variation t_V
+ WHERE t_V.is_new = 1
+ ;
+
+ UPDATE partsltd_prod.Shop_Variation_Type VT
+ INNER JOIN tmp_Variation_Type t_VT
+ ON VT.id_type = t_VT.id_type
+ AND t_VT.is_new = 0
+ INNER JOIN tmp_Variation t_V ON t_VT.id_type = t_V.id_type
+ SET
+ VT.code = t_VT.code
+ , VT.name = t_VT.name
+ , VT.name_plural = t_VT.name_plural
+ , VT.active = t_VT.active
+ , VT.display_order = t_VT.display_order
+ , VT.created_on = t_VT.created_on
+ , VT.created_by = t_VT.created_by
+ , VT.id_change_set = v_id_change_set
+ ;
+
+ UPDATE partsltd_prod.Shop_Variation V
+ INNER JOIN tmp_Variation t_V
+ ON V.id_variation = t_V.id_variation
+ AND t_V.is_new = 0
+ SET
+ V.code = t_V.code
+ , V.name = t_V.name
+ , V.active = t_V.active
+ , V.display_order = t_V.display_order
+ , V.created_on = t_V.created_on
+ , V.created_by = t_V.created_by
+ , V.id_change_set = v_id_change_set
+ ;
+
+ DELETE VT_T
+ FROM partsltd_prod.Shop_Variation_Type_Temp VT_T
+ WHERE VT_T.GUID = a_guid
+ ;
+ DELETE V_T
+ FROM partsltd_prod.Shop_Variation_Temp V_T
+ WHERE V_T.GUID = a_guid
+ ;
+
+ COMMIT;
+ END IF;
+
+ # Errors
+ SELECT *
+ FROM tmp_Msg_Error t_ME
+ INNER JOIN partsltd_prod.Shop_Msg_Error_Type MET ON t_ME.id_type = MET.id_type
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT * from tmp_Variation_Type;
+ SELECT * from tmp_Variation;
+ END IF;
+
+ DROP TEMPORARY TABLE tmp_Variation_Type;
+ DROP TEMPORARY TABLE tmp_Variation;
+ DROP TEMPORARY TABLE tmp_Msg_Error;
+
+ IF a_debug = 1 THEN
+ CALL partsltd_prod.p_debug_timing_reporting ( v_time_start );
+ END IF;
+END //
+DELIMITER ;;
+
+
diff --git a/static/MySQL/7212_p_shop_save_product_variation_test.sql b/static/MySQL/7212_p_shop_save_product_variation_test.sql
new file mode 100644
index 00000000..d211e8bb
--- /dev/null
+++ b/static/MySQL/7212_p_shop_save_product_variation_test.sql
@@ -0,0 +1,186 @@
+
+
+-- Clear previous proc
+DROP PROCEDURE IF EXISTS partsltd_prod.p_shop_save_product_variation_test;
+
+
+DELIMITER //
+CREATE PROCEDURE p_shop_save_product_variation_test ()
+BEGIN
+
+ DECLARE v_guid BINARY(36);
+ DECLARE v_time_start TIMESTAMP(6);
+
+ SET v_time_start := CURRENT_TIMESTAMP(6);
+ SET v_guid := 'nips';
+
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Type
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Type_Temp
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Variation
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Temp
+ ;
+
+ START TRANSACTION;
+
+ DELETE FROM partsltd_prod.Shop_Variation_Type_Temp;
+ DELETE FROM partsltd_prod.Shop_Variation_Temp;
+
+ INSERT INTO partsltd_prod.Shop_Variation_Type_Temp (
+ id_type
+ -- , id_type_temp
+ , code
+ , name
+ , name_plural
+ , display_order
+ , active
+ , GUID
+ )
+ /* Test 1 - Insert
+ VALUES (
+ -1
+ -- , -1
+ , 'SIZE'
+ , 'Size'
+ , 'Sizes'
+ , 2
+ , 1
+ , v_guid
+ )
+ */
+ /* Test 2: Alter */
+ SELECT
+ id_type
+ -- , id_type AS id_type_temp
+ , code
+ , name
+ , name_plural
+ , display_order
+ , active
+ , v_guid AS GUID
+ FROM partsltd_prod.Shop_Variation_Type
+ WHERE id_type = 1
+ ;
+
+ INSERT INTO partsltd_prod.Shop_Variation_Temp (
+ id_variation
+ , id_type
+ , code
+ , name
+ , display_order
+ , active
+ , GUID
+ )
+ /* Test 1 - Insert
+ VALUES (
+ -1 -- id_variation
+ , -1 -- id_type
+ , '300 mL' -- code
+ , '300 millilitres' -- name
+ , 1 -- display_order
+ , 1 -- active
+ , v_guid --
+ )
+ */
+ /* Test 3 - Insert
+ VALUES (
+ -1 -- id_variation
+ , 1 -- id_type
+ , 'SILVER' -- code
+ , 'Silver' -- name
+ , 10 -- display_order
+ , 1 -- active
+ , 'NIPS' -- v_guid --
+ );
+ */
+ /* Test 2: Alter */
+ SELECT
+ id_variation
+ , id_type
+ , code
+ , name
+ , display_order
+ , active
+ , v_guid AS GUID
+ FROM partsltd_prod.Shop_Variation
+ WHERE id_variation = 2
+ UNION
+ SELECT
+ -1 -- id_variation
+ , 1 -- id_type
+ , 'GREEN' -- code
+ , 'Green' -- name
+ , 3 -- display_order
+ , 1 -- active
+ , v_guid --
+ ;
+
+ COMMIT;
+
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Type_Temp
+ WHERE GUID = v_guid
+ ;
+
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Temp
+ WHERE GUID = v_guid
+ ;
+
+ CALL partsltd_prod.p_shop_save_product_variation (
+ 'Test save Variations - add + edit' -- comment
+ , v_guid -- guid
+ , 1 -- id_user
+ , 1 -- debug
+ );
+
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Type_Temp
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Temp
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Variation_Type
+ ;
+ SELECT *
+ FROM partsltd_prod.Shop_Variation
+ ;
+
+ CALL partsltd_prod.p_debug_timing_reporting ( v_time_start );
+END //
+DELIMITER ;;
+
+CALL partsltd_prod.p_shop_save_product_variation_test ();
+
+DELETE FROM partsltd_prod.Shop_Variation_Type_Temp;
+DELETE FROM partsltd_prod.Shop_Variation_Temp;
+
+DROP TABLE IF EXISTS tmp_Msg_Error;
+
+/*
+
+delete from shop_variation_audit
+where id_variation = 3
+;
+delete from shop_variation_audit
+where id_variation = 3
+;
+delete from shop_variation_type_audit
+where id_type = -1
+;
+delete
+-- select *
+ from shop_variation_type
+where id_type = -1
+;
+
+Cannot add or update a child row: a foreign key constraint fails (`partsltd_prod`.`shop_variation_type`, CONSTRAINT `FK_Shop_Variation_Type_id_change_set` FOREIGN KEY (`id_change_set`) REFERENCES `shop_product_change_set` (`id_change_set`))
+
+*/
\ No newline at end of file
diff --git a/static/MySQL/7415_p_shop_save_manufacturing_purchase_order.sql b/static/MySQL/7415_p_shop_save_manufacturing_purchase_order.sql
index c67228dd..18693b23 100644
--- a/static/MySQL/7415_p_shop_save_manufacturing_purchase_order.sql
+++ b/static/MySQL/7415_p_shop_save_manufacturing_purchase_order.sql
@@ -699,7 +699,7 @@ BEGIN
v_id_type_error_no_permission
, v_code_type_error_no_permission
, CONCAT(
- 'You do not have view permissions for '
+ 'You do not have edit permissions for '
, GROUP_CONCAT(name SEPARATOR ', ')
)
FROM partsltd_prod.Shop_Permission PERM
diff --git a/static/MySQL/temp.txt b/static/MySQL/temp.txt
index c8177d9d..76548723 100644
--- a/static/MySQL/temp.txt
+++ b/static/MySQL/temp.txt
@@ -51,8 +51,10 @@
1208_tbl_Shop_Product_Permutation_Temp.sql
1209_tbl_Shop_Variation_Type.sql
1210_tbl_Shop_Variation_Type_Audit.sql
+1211_tbl_Shop_Variation_Type_Temp.sql
1212_tbl_Shop_Variation.sql
1213_tbl_Shop_Variation_Audit.sql
+1214_tbl_Shop_Variation_Temp.sql
1215_tbl_Shop_Product_Permutation_Variation_Link.sql
1216_tbl_Shop_Product_Permutation_Variation_Link_Audit.sql
1218_tbl_Shop_Stock_Item.sql
@@ -189,6 +191,8 @@
7206_p_shop_save_product_permutation.sql
7206_p_shop_save_product_permutation_test.sql
7210_p_shop_get_many_product_variation.sql
+7212_p_shop_save_product_variation.sql
+7212_p_shop_save_product_variation_test.sql
7219_p_shop_get_many_stock_item.sql
7220_p_shop_save_stock_item.sql
7220_p_shop_save_stock_item_test.sql
diff --git a/static/css/components/table.css b/static/css/components/table.css
index 86c30eef..4ff26064 100644
--- a/static/css/components/table.css
+++ b/static/css/components/table.css
@@ -48,16 +48,11 @@ tr {
}
*/
-table textarea {
- width: 95% !important;
-}
-
-table select {
- width: 100% !important;
-}
-
+table textarea,
+table select,
table input {
- width: 90% !important;
+ width: 100%;
+ box-sizing: border-box;
}
table button {
@@ -65,6 +60,10 @@ table button {
padding: 0.5vh 1vh;
}
-tr.delete {
+table button.active {
+ background-color: var(--c_purple_pastel);
+}
+
+tr.delete, tr.delete > td {
background-color: red;
-}
\ No newline at end of file
+}
diff --git a/static/css/layouts/header.css b/static/css/layouts/header.css
index 42687196..e493af6a 100644
--- a/static/css/layouts/header.css
+++ b/static/css/layouts/header.css
@@ -16,4 +16,7 @@ form.filter button.save, form.filter button.button-cancel {
#formFilters .container-input.filter.active {
width: 8vh;
+}
+#formFilters .container-input.filter.is_not_empty {
+ width: 12vh;
}
\ No newline at end of file
diff --git a/static/css/layouts/table-main.css b/static/css/layouts/table-main.css
index 498786a7..097dfb26 100644
--- a/static/css/layouts/table-main.css
+++ b/static/css/layouts/table-main.css
@@ -1,7 +1,7 @@
#tableMain {
overflow-x: auto;
- padding: 1vh 2vh;
+ padding: 1vh;
max-width: 95vw; /* min(calc(1vh * 80), calc(1vw * 90)); */
width: fit-content;
margin: 1vh 2vh;
diff --git a/static/css/pages/store/product_variations.css b/static/css/pages/store/product_variations.css
new file mode 100644
index 00000000..ff9c3cbd
--- /dev/null
+++ b/static/css/pages/store/product_variations.css
@@ -0,0 +1,46 @@
+
+/*
+#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/dist/css/core_admin_home.bundle.css b/static/dist/css/core_admin_home.bundle.css
index fc71cd32..42c7bbca 100644
--- a/static/dist/css/core_admin_home.bundle.css
+++ b/static/dist/css/core_admin_home.bundle.css
@@ -5,3 +5,5 @@
.container.row {
width: auto;
}
+
+/*# sourceMappingURL=core_admin_home.bundle.css.map*/
\ 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 b026545b..b5738403 100644
--- a/static/dist/css/core_contact.bundle.css
+++ b/static/dist/css/core_contact.bundle.css
@@ -32,3 +32,5 @@
*/
+
+/*# 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 b80d8192..d0514284 100644
--- a/static/dist/css/core_home.bundle.css
+++ b/static/dist/css/core_home.bundle.css
@@ -34,3 +34,5 @@ img {
width: fit-content;
}
+
+/*# sourceMappingURL=core_home.bundle.css.map*/
\ No newline at end of file
diff --git a/static/dist/css/core_services.bundle.css b/static/dist/css/core_services.bundle.css
index db07e8eb..0816c040 100644
--- a/static/dist/css/core_services.bundle.css
+++ b/static/dist/css/core_services.bundle.css
@@ -44,3 +44,5 @@ img {
max-width: 10vw;
}
*/
+
+/*# sourceMappingURL=core_services.bundle.css.map*/
\ No newline at end of file
diff --git a/static/dist/css/legal_license.bundle.css b/static/dist/css/legal_license.bundle.css
index a3773060..23a81fd9 100644
--- a/static/dist/css/legal_license.bundle.css
+++ b/static/dist/css/legal_license.bundle.css
@@ -6,3 +6,5 @@
#pageBody > * :last-child {
}
+
+/*# sourceMappingURL=legal_license.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 ac912d15..94f9e664 100644
--- a/static/dist/css/main.bundle.css
+++ b/static/dist/css/main.bundle.css
@@ -654,16 +654,11 @@ tr {
}
*/
-table textarea {
- width: 95% !important;
-}
-
-table select {
- width: 100% !important;
-}
-
+table textarea,
+table select,
table input {
- width: 90% !important;
+ width: 100%;
+ box-sizing: border-box;
}
table button {
@@ -671,11 +666,16 @@ table button {
padding: 0.5vh 1vh;
}
-tr.delete {
+table button.active {
+ background-color: var(--c_purple_pastel);
+}
+
+tr.delete, tr.delete > td {
background-color: red;
}
+
button.collapsed {
display: block;
opacity: 0;
@@ -693,11 +693,14 @@ form.filter button.save, form.filter button.button-cancel {
#formFilters .container-input.filter.active {
width: 8vh;
}
+#formFilters .container-input.filter.is_not_empty {
+ width: 12vh;
+}
#tableMain {
overflow-x: auto;
- padding: 1vh 2vh;
+ padding: 1vh;
max-width: 95vw; /* min(calc(1vh * 80), calc(1vw * 90)); */
width: fit-content;
margin: 1vh 2vh;
@@ -767,3 +770,5 @@ form.filter button.save, form.filter button.button-cancel {
--card-border: #dee2e6;
--card-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
}
+
+/*# sourceMappingURL=main.bundle.css.map*/
\ No newline at end of file
diff --git a/static/dist/css/store_home.bundle.css b/static/dist/css/store_home.bundle.css
index 558c2c35..8c7baf61 100644
--- a/static/dist/css/store_home.bundle.css
+++ b/static/dist/css/store_home.bundle.css
@@ -56,3 +56,5 @@
+
+/*# sourceMappingURL=store_home.bundle.css.map*/
\ No newline at end of file
diff --git a/static/dist/css/store_product_categories.bundle.css b/static/dist/css/store_product_categories.bundle.css
index c8b01ed1..de1b2157 100644
--- a/static/dist/css/store_product_categories.bundle.css
+++ b/static/dist/css/store_product_categories.bundle.css
@@ -152,3 +152,5 @@ select.id_variation, select.id_variation_type {
}
*/
+
+/*# sourceMappingURL=store_product_categories.bundle.css.map*/
\ No newline at end of file
diff --git a/static/dist/css/store_product_permutations.bundle.css b/static/dist/css/store_product_permutations.bundle.css
index bf3399aa..6eeae342 100644
--- a/static/dist/css/store_product_permutations.bundle.css
+++ b/static/dist/css/store_product_permutations.bundle.css
@@ -188,3 +188,5 @@ select.id_variation, select.id_variation_type {
}
*/
+
+/*# sourceMappingURL=store_product_permutations.bundle.css.map*/
\ No newline at end of file
diff --git a/static/dist/css/store_stock_items.bundle.css b/static/dist/css/store_stock_items.bundle.css
index b54bc339..0fb18fe6 100644
--- a/static/dist/css/store_stock_items.bundle.css
+++ b/static/dist/css/store_stock_items.bundle.css
@@ -138,3 +138,5 @@ th, td {
width: 15vh;
min-width: 15vh;
}
+
+/*# sourceMappingURL=store_stock_items.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 00f64005..b7f572da 100644
--- a/static/dist/js/core_admin_home.bundle.js
+++ b/static/dist/js/core_admin_home.bundle.js
@@ -1 +1,153 @@
-(()=>{"use strict";var r,e={497:()=>{},647:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={780:0,564:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(647)));var a=t.O(void 0,[564],(()=>t(497)));a=t.O(a)})();
\ No newline at end of file
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ 497:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ }),
+
+/***/ 647:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // 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](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = __webpack_modules__;
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/chunk loaded */
+/******/ (() => {
+/******/ var deferred = [];
+/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
+/******/ if(chunkIds) {
+/******/ priority = priority || 0;
+/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
+/******/ deferred[i] = [chunkIds, fn, priority];
+/******/ return;
+/******/ }
+/******/ var notFulfilled = Infinity;
+/******/ for (var i = 0; i < deferred.length; i++) {
+/******/ var [chunkIds, fn, priority] = deferred[i];
+/******/ var fulfilled = true;
+/******/ for (var j = 0; j < chunkIds.length; j++) {
+/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
+/******/ chunkIds.splice(j--, 1);
+/******/ } else {
+/******/ fulfilled = false;
+/******/ if(priority < notFulfilled) notFulfilled = priority;
+/******/ }
+/******/ }
+/******/ if(fulfilled) {
+/******/ deferred.splice(i--, 1)
+/******/ var r = fn();
+/******/ if (r !== undefined) result = r;
+/******/ }
+/******/ }
+/******/ return result;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/jsonp chunk loading */
+/******/ (() => {
+/******/ // no baseURI
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ 780: 0,
+/******/ 564: 0
+/******/ };
+/******/
+/******/ // no chunk on demand loading
+/******/
+/******/ // no prefetching
+/******/
+/******/ // no preloaded
+/******/
+/******/ // no HMR
+/******/
+/******/ // no HMR manifest
+/******/
+/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
+/******/
+/******/ // install a JSONP callback for chunk loading
+/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
+/******/ var [chunkIds, moreModules, runtime] = data;
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0;
+/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
+/******/ for(moduleId in moreModules) {
+/******/ if(__webpack_require__.o(moreModules, moduleId)) {
+/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(runtime) var result = runtime(__webpack_require__);
+/******/ }
+/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
+/******/ installedChunks[chunkId][0]();
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ return __webpack_require__.O(result);
+/******/ }
+/******/
+/******/ var chunkLoadingGlobal = self["webpackChunkapp"] = self["webpackChunkapp"] || [];
+/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
+/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
+/******/ })();
+/******/
+/************************************************************************/
+/******/
+/******/ // 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_exports__ = __webpack_require__.O(__webpack_exports__);
+/******/
+/******/ })()
+;
+//# sourceMappingURL=core_admin_home.bundle.js.map
\ No newline at end of file
diff --git a/static/dist/js/core_contact.bundle.js b/static/dist/js/core_contact.bundle.js
index f21b4165..f171a7ec 100644
--- a/static/dist/js/core_contact.bundle.js
+++ b/static/dist/js/core_contact.bundle.js
@@ -1 +1,153 @@
-(()=>{"use strict";var r,e={206:()=>{},647:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={775:0,564:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(647)));var a=t.O(void 0,[564],(()=>t(206)));a=t.O(a)})();
\ No newline at end of file
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ 206:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ }),
+
+/***/ 647:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // 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](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = __webpack_modules__;
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/chunk loaded */
+/******/ (() => {
+/******/ var deferred = [];
+/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
+/******/ if(chunkIds) {
+/******/ priority = priority || 0;
+/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
+/******/ deferred[i] = [chunkIds, fn, priority];
+/******/ return;
+/******/ }
+/******/ var notFulfilled = Infinity;
+/******/ for (var i = 0; i < deferred.length; i++) {
+/******/ var [chunkIds, fn, priority] = deferred[i];
+/******/ var fulfilled = true;
+/******/ for (var j = 0; j < chunkIds.length; j++) {
+/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
+/******/ chunkIds.splice(j--, 1);
+/******/ } else {
+/******/ fulfilled = false;
+/******/ if(priority < notFulfilled) notFulfilled = priority;
+/******/ }
+/******/ }
+/******/ if(fulfilled) {
+/******/ deferred.splice(i--, 1)
+/******/ var r = fn();
+/******/ if (r !== undefined) result = r;
+/******/ }
+/******/ }
+/******/ return result;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/jsonp chunk loading */
+/******/ (() => {
+/******/ // no baseURI
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ 775: 0,
+/******/ 564: 0
+/******/ };
+/******/
+/******/ // no chunk on demand loading
+/******/
+/******/ // no prefetching
+/******/
+/******/ // no preloaded
+/******/
+/******/ // no HMR
+/******/
+/******/ // no HMR manifest
+/******/
+/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
+/******/
+/******/ // install a JSONP callback for chunk loading
+/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
+/******/ var [chunkIds, moreModules, runtime] = data;
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0;
+/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
+/******/ for(moduleId in moreModules) {
+/******/ if(__webpack_require__.o(moreModules, moduleId)) {
+/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(runtime) var result = runtime(__webpack_require__);
+/******/ }
+/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
+/******/ installedChunks[chunkId][0]();
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ return __webpack_require__.O(result);
+/******/ }
+/******/
+/******/ var chunkLoadingGlobal = self["webpackChunkapp"] = self["webpackChunkapp"] || [];
+/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
+/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
+/******/ })();
+/******/
+/************************************************************************/
+/******/
+/******/ // 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_exports__ = __webpack_require__.O(__webpack_exports__);
+/******/
+/******/ })()
+;
+//# sourceMappingURL=core_contact.bundle.js.map
\ No newline at end of file
diff --git a/static/dist/js/core_home.bundle.js b/static/dist/js/core_home.bundle.js
index d8e2bb30..81cafc5f 100644
--- a/static/dist/js/core_home.bundle.js
+++ b/static/dist/js/core_home.bundle.js
@@ -1 +1,153 @@
-(()=>{"use strict";var r,e={469:()=>{},647:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={664:0,564:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(647)));var a=t.O(void 0,[564],(()=>t(469)));a=t.O(a)})();
\ No newline at end of file
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ 469:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ }),
+
+/***/ 647:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // 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](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = __webpack_modules__;
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/chunk loaded */
+/******/ (() => {
+/******/ var deferred = [];
+/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
+/******/ if(chunkIds) {
+/******/ priority = priority || 0;
+/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
+/******/ deferred[i] = [chunkIds, fn, priority];
+/******/ return;
+/******/ }
+/******/ var notFulfilled = Infinity;
+/******/ for (var i = 0; i < deferred.length; i++) {
+/******/ var [chunkIds, fn, priority] = deferred[i];
+/******/ var fulfilled = true;
+/******/ for (var j = 0; j < chunkIds.length; j++) {
+/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
+/******/ chunkIds.splice(j--, 1);
+/******/ } else {
+/******/ fulfilled = false;
+/******/ if(priority < notFulfilled) notFulfilled = priority;
+/******/ }
+/******/ }
+/******/ if(fulfilled) {
+/******/ deferred.splice(i--, 1)
+/******/ var r = fn();
+/******/ if (r !== undefined) result = r;
+/******/ }
+/******/ }
+/******/ return result;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/jsonp chunk loading */
+/******/ (() => {
+/******/ // no baseURI
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ 664: 0,
+/******/ 564: 0
+/******/ };
+/******/
+/******/ // no chunk on demand loading
+/******/
+/******/ // no prefetching
+/******/
+/******/ // no preloaded
+/******/
+/******/ // no HMR
+/******/
+/******/ // no HMR manifest
+/******/
+/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
+/******/
+/******/ // install a JSONP callback for chunk loading
+/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
+/******/ var [chunkIds, moreModules, runtime] = data;
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0;
+/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
+/******/ for(moduleId in moreModules) {
+/******/ if(__webpack_require__.o(moreModules, moduleId)) {
+/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(runtime) var result = runtime(__webpack_require__);
+/******/ }
+/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
+/******/ installedChunks[chunkId][0]();
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ return __webpack_require__.O(result);
+/******/ }
+/******/
+/******/ var chunkLoadingGlobal = self["webpackChunkapp"] = self["webpackChunkapp"] || [];
+/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
+/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
+/******/ })();
+/******/
+/************************************************************************/
+/******/
+/******/ // 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_exports__ = __webpack_require__.O(__webpack_exports__);
+/******/
+/******/ })()
+;
+//# sourceMappingURL=core_home.bundle.js.map
\ No newline at end of file
diff --git a/static/dist/js/core_services.bundle.js b/static/dist/js/core_services.bundle.js
index 392a8ef6..b26c5ab7 100644
--- a/static/dist/js/core_services.bundle.js
+++ b/static/dist/js/core_services.bundle.js
@@ -1 +1,153 @@
-(()=>{"use strict";var r,e={396:()=>{},647:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={405:0,564:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(647)));var a=t.O(void 0,[564],(()=>t(396)));a=t.O(a)})();
\ No newline at end of file
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ 396:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ }),
+
+/***/ 647:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // 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](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = __webpack_modules__;
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/chunk loaded */
+/******/ (() => {
+/******/ var deferred = [];
+/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
+/******/ if(chunkIds) {
+/******/ priority = priority || 0;
+/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
+/******/ deferred[i] = [chunkIds, fn, priority];
+/******/ return;
+/******/ }
+/******/ var notFulfilled = Infinity;
+/******/ for (var i = 0; i < deferred.length; i++) {
+/******/ var [chunkIds, fn, priority] = deferred[i];
+/******/ var fulfilled = true;
+/******/ for (var j = 0; j < chunkIds.length; j++) {
+/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
+/******/ chunkIds.splice(j--, 1);
+/******/ } else {
+/******/ fulfilled = false;
+/******/ if(priority < notFulfilled) notFulfilled = priority;
+/******/ }
+/******/ }
+/******/ if(fulfilled) {
+/******/ deferred.splice(i--, 1)
+/******/ var r = fn();
+/******/ if (r !== undefined) result = r;
+/******/ }
+/******/ }
+/******/ return result;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/jsonp chunk loading */
+/******/ (() => {
+/******/ // no baseURI
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ 405: 0,
+/******/ 564: 0
+/******/ };
+/******/
+/******/ // no chunk on demand loading
+/******/
+/******/ // no prefetching
+/******/
+/******/ // no preloaded
+/******/
+/******/ // no HMR
+/******/
+/******/ // no HMR manifest
+/******/
+/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
+/******/
+/******/ // install a JSONP callback for chunk loading
+/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
+/******/ var [chunkIds, moreModules, runtime] = data;
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0;
+/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
+/******/ for(moduleId in moreModules) {
+/******/ if(__webpack_require__.o(moreModules, moduleId)) {
+/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(runtime) var result = runtime(__webpack_require__);
+/******/ }
+/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
+/******/ installedChunks[chunkId][0]();
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ return __webpack_require__.O(result);
+/******/ }
+/******/
+/******/ var chunkLoadingGlobal = self["webpackChunkapp"] = self["webpackChunkapp"] || [];
+/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
+/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
+/******/ })();
+/******/
+/************************************************************************/
+/******/
+/******/ // 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_exports__ = __webpack_require__.O(__webpack_exports__);
+/******/
+/******/ })()
+;
+//# sourceMappingURL=core_services.bundle.js.map
\ No newline at end of file
diff --git a/static/dist/js/legal_accessibility_statement.bundle.js b/static/dist/js/legal_accessibility_statement.bundle.js
index e053da60..6a4f7c11 100644
--- a/static/dist/js/legal_accessibility_statement.bundle.js
+++ b/static/dist/js/legal_accessibility_statement.bundle.js
@@ -1 +1,153 @@
-(()=>{"use strict";var r,e={132:()=>{},807:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={841:0,830:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(807)));var a=t.O(void 0,[830],(()=>t(132)));a=t.O(a)})();
\ No newline at end of file
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ 132:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ }),
+
+/***/ 807:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // 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](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = __webpack_modules__;
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/chunk loaded */
+/******/ (() => {
+/******/ var deferred = [];
+/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
+/******/ if(chunkIds) {
+/******/ priority = priority || 0;
+/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
+/******/ deferred[i] = [chunkIds, fn, priority];
+/******/ return;
+/******/ }
+/******/ var notFulfilled = Infinity;
+/******/ for (var i = 0; i < deferred.length; i++) {
+/******/ var [chunkIds, fn, priority] = deferred[i];
+/******/ var fulfilled = true;
+/******/ for (var j = 0; j < chunkIds.length; j++) {
+/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
+/******/ chunkIds.splice(j--, 1);
+/******/ } else {
+/******/ fulfilled = false;
+/******/ if(priority < notFulfilled) notFulfilled = priority;
+/******/ }
+/******/ }
+/******/ if(fulfilled) {
+/******/ deferred.splice(i--, 1)
+/******/ var r = fn();
+/******/ if (r !== undefined) result = r;
+/******/ }
+/******/ }
+/******/ return result;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/jsonp chunk loading */
+/******/ (() => {
+/******/ // no baseURI
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ 841: 0,
+/******/ 830: 0
+/******/ };
+/******/
+/******/ // no chunk on demand loading
+/******/
+/******/ // no prefetching
+/******/
+/******/ // no preloaded
+/******/
+/******/ // no HMR
+/******/
+/******/ // no HMR manifest
+/******/
+/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
+/******/
+/******/ // install a JSONP callback for chunk loading
+/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
+/******/ var [chunkIds, moreModules, runtime] = data;
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0;
+/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
+/******/ for(moduleId in moreModules) {
+/******/ if(__webpack_require__.o(moreModules, moduleId)) {
+/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(runtime) var result = runtime(__webpack_require__);
+/******/ }
+/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
+/******/ installedChunks[chunkId][0]();
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ return __webpack_require__.O(result);
+/******/ }
+/******/
+/******/ var chunkLoadingGlobal = self["webpackChunkapp"] = self["webpackChunkapp"] || [];
+/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
+/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
+/******/ })();
+/******/
+/************************************************************************/
+/******/
+/******/ // 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_exports__ = __webpack_require__.O(__webpack_exports__);
+/******/
+/******/ })()
+;
+//# sourceMappingURL=legal_accessibility_statement.bundle.js.map
\ No newline at end of file
diff --git a/static/dist/js/legal_license.bundle.js b/static/dist/js/legal_license.bundle.js
index db4b3bc8..2c4f3a66 100644
--- a/static/dist/js/legal_license.bundle.js
+++ b/static/dist/js/legal_license.bundle.js
@@ -1 +1,153 @@
-(()=>{"use strict";var r,e={527:()=>{},807:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={690:0,830:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(807)));var a=t.O(void 0,[830],(()=>t(527)));a=t.O(a)})();
\ No newline at end of file
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ 527:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ }),
+
+/***/ 807:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // 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](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = __webpack_modules__;
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/chunk loaded */
+/******/ (() => {
+/******/ var deferred = [];
+/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
+/******/ if(chunkIds) {
+/******/ priority = priority || 0;
+/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
+/******/ deferred[i] = [chunkIds, fn, priority];
+/******/ return;
+/******/ }
+/******/ var notFulfilled = Infinity;
+/******/ for (var i = 0; i < deferred.length; i++) {
+/******/ var [chunkIds, fn, priority] = deferred[i];
+/******/ var fulfilled = true;
+/******/ for (var j = 0; j < chunkIds.length; j++) {
+/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
+/******/ chunkIds.splice(j--, 1);
+/******/ } else {
+/******/ fulfilled = false;
+/******/ if(priority < notFulfilled) notFulfilled = priority;
+/******/ }
+/******/ }
+/******/ if(fulfilled) {
+/******/ deferred.splice(i--, 1)
+/******/ var r = fn();
+/******/ if (r !== undefined) result = r;
+/******/ }
+/******/ }
+/******/ return result;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/jsonp chunk loading */
+/******/ (() => {
+/******/ // no baseURI
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ 690: 0,
+/******/ 830: 0
+/******/ };
+/******/
+/******/ // no chunk on demand loading
+/******/
+/******/ // no prefetching
+/******/
+/******/ // no preloaded
+/******/
+/******/ // no HMR
+/******/
+/******/ // no HMR manifest
+/******/
+/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
+/******/
+/******/ // install a JSONP callback for chunk loading
+/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
+/******/ var [chunkIds, moreModules, runtime] = data;
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0;
+/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
+/******/ for(moduleId in moreModules) {
+/******/ if(__webpack_require__.o(moreModules, moduleId)) {
+/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(runtime) var result = runtime(__webpack_require__);
+/******/ }
+/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
+/******/ installedChunks[chunkId][0]();
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ return __webpack_require__.O(result);
+/******/ }
+/******/
+/******/ var chunkLoadingGlobal = self["webpackChunkapp"] = self["webpackChunkapp"] || [];
+/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
+/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
+/******/ })();
+/******/
+/************************************************************************/
+/******/
+/******/ // 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_exports__ = __webpack_require__.O(__webpack_exports__);
+/******/
+/******/ })()
+;
+//# sourceMappingURL=legal_license.bundle.js.map
\ No newline at end of file
diff --git a/static/dist/js/legal_privacy_policy.bundle.js b/static/dist/js/legal_privacy_policy.bundle.js
index f57bdd1c..260c6aeb 100644
--- a/static/dist/js/legal_privacy_policy.bundle.js
+++ b/static/dist/js/legal_privacy_policy.bundle.js
@@ -1 +1,153 @@
-(()=>{"use strict";var r,e={649:()=>{},807:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={364:0,830:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(807)));var a=t.O(void 0,[830],(()=>t(649)));a=t.O(a)})();
\ No newline at end of file
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ 649:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ }),
+
+/***/ 807:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // 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](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = __webpack_modules__;
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/chunk loaded */
+/******/ (() => {
+/******/ var deferred = [];
+/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
+/******/ if(chunkIds) {
+/******/ priority = priority || 0;
+/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
+/******/ deferred[i] = [chunkIds, fn, priority];
+/******/ return;
+/******/ }
+/******/ var notFulfilled = Infinity;
+/******/ for (var i = 0; i < deferred.length; i++) {
+/******/ var [chunkIds, fn, priority] = deferred[i];
+/******/ var fulfilled = true;
+/******/ for (var j = 0; j < chunkIds.length; j++) {
+/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
+/******/ chunkIds.splice(j--, 1);
+/******/ } else {
+/******/ fulfilled = false;
+/******/ if(priority < notFulfilled) notFulfilled = priority;
+/******/ }
+/******/ }
+/******/ if(fulfilled) {
+/******/ deferred.splice(i--, 1)
+/******/ var r = fn();
+/******/ if (r !== undefined) result = r;
+/******/ }
+/******/ }
+/******/ return result;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/jsonp chunk loading */
+/******/ (() => {
+/******/ // no baseURI
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ 364: 0,
+/******/ 830: 0
+/******/ };
+/******/
+/******/ // no chunk on demand loading
+/******/
+/******/ // no prefetching
+/******/
+/******/ // no preloaded
+/******/
+/******/ // no HMR
+/******/
+/******/ // no HMR manifest
+/******/
+/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
+/******/
+/******/ // install a JSONP callback for chunk loading
+/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
+/******/ var [chunkIds, moreModules, runtime] = data;
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0;
+/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
+/******/ for(moduleId in moreModules) {
+/******/ if(__webpack_require__.o(moreModules, moduleId)) {
+/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(runtime) var result = runtime(__webpack_require__);
+/******/ }
+/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
+/******/ installedChunks[chunkId][0]();
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ return __webpack_require__.O(result);
+/******/ }
+/******/
+/******/ var chunkLoadingGlobal = self["webpackChunkapp"] = self["webpackChunkapp"] || [];
+/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
+/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
+/******/ })();
+/******/
+/************************************************************************/
+/******/
+/******/ // 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_exports__ = __webpack_require__.O(__webpack_exports__);
+/******/
+/******/ })()
+;
+//# sourceMappingURL=legal_privacy_policy.bundle.js.map
\ No newline at end of file
diff --git a/static/dist/js/legal_retention_schedule.bundle.js b/static/dist/js/legal_retention_schedule.bundle.js
index 2aece662..6faac6c5 100644
--- a/static/dist/js/legal_retention_schedule.bundle.js
+++ b/static/dist/js/legal_retention_schedule.bundle.js
@@ -1 +1,153 @@
-(()=>{"use strict";var r,e={954:()=>{},807:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={607:0,830:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(807)));var a=t.O(void 0,[830],(()=>t(954)));a=t.O(a)})();
\ No newline at end of file
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ 954:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ }),
+
+/***/ 807:
+/***/ (() => {
+
+// extracted by mini-css-extract-plugin
+
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // 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](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = __webpack_modules__;
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/chunk loaded */
+/******/ (() => {
+/******/ var deferred = [];
+/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => {
+/******/ if(chunkIds) {
+/******/ priority = priority || 0;
+/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
+/******/ deferred[i] = [chunkIds, fn, priority];
+/******/ return;
+/******/ }
+/******/ var notFulfilled = Infinity;
+/******/ for (var i = 0; i < deferred.length; i++) {
+/******/ var [chunkIds, fn, priority] = deferred[i];
+/******/ var fulfilled = true;
+/******/ for (var j = 0; j < chunkIds.length; j++) {
+/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
+/******/ chunkIds.splice(j--, 1);
+/******/ } else {
+/******/ fulfilled = false;
+/******/ if(priority < notFulfilled) notFulfilled = priority;
+/******/ }
+/******/ }
+/******/ if(fulfilled) {
+/******/ deferred.splice(i--, 1)
+/******/ var r = fn();
+/******/ if (r !== undefined) result = r;
+/******/ }
+/******/ }
+/******/ return result;
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/jsonp chunk loading */
+/******/ (() => {
+/******/ // no baseURI
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ 607: 0,
+/******/ 830: 0
+/******/ };
+/******/
+/******/ // no chunk on demand loading
+/******/
+/******/ // no prefetching
+/******/
+/******/ // no preloaded
+/******/
+/******/ // no HMR
+/******/
+/******/ // no HMR manifest
+/******/
+/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
+/******/
+/******/ // install a JSONP callback for chunk loading
+/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
+/******/ var [chunkIds, moreModules, runtime] = data;
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0;
+/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
+/******/ for(moduleId in moreModules) {
+/******/ if(__webpack_require__.o(moreModules, moduleId)) {
+/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(runtime) var result = runtime(__webpack_require__);
+/******/ }
+/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
+/******/ installedChunks[chunkId][0]();
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ return __webpack_require__.O(result);
+/******/ }
+/******/
+/******/ var chunkLoadingGlobal = self["webpackChunkapp"] = self["webpackChunkapp"] || [];
+/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
+/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
+/******/ })();
+/******/
+/************************************************************************/
+/******/
+/******/ // 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_exports__ = __webpack_require__.O(__webpack_exports__);
+/******/
+/******/ })()
+;
+//# sourceMappingURL=legal_retention_schedule.bundle.js.map
\ No newline at end of file
diff --git a/static/dist/js/main.bundle.js b/static/dist/js/main.bundle.js
index 7ce8541d..62315d28 100644
--- a/static/dist/js/main.bundle.js
+++ b/static/dist/js/main.bundle.js
@@ -1,2 +1,7862 @@
-/*! For license information please see main.bundle.js.LICENSE.txt */
-(()=>{"use strict";(()=>{function e(t){return e="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},e(t)}function t(e,t){for(var n=0;n0)if(r)t=!1;else if("string"!=typeof e[0])t=!1;else for(var n=0;n0)}},{key:"getDataContentType",value:function(t){var r=null,n="";return e.isEmpty(t)||("string"==typeof t?(r=t,n="application/x-www-form-urlencoded; charset=UTF-8"):(r=JSON.stringify(t),n="application/json; charset=UTF-8")),{Data:r,ContentType:n}}},{key:"arrayContainsItem",value:function(t,r){var n=!1;if(!e.isEmpty(t)&&!e.isEmpty(r))if(t[0]instanceof jQuery){for(var o=0;o=0;--a){var i=this.tryEntries[a],l=i.completion;if("root"===i.tryLoc)return o("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),V(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;V(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:j(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function b(e,t,r,n,o,a,i){try{var l=e[a](i),u=l.value}catch(e){return void r(e)}l.done?t(u):Promise.resolve(u).then(n,o)}function k(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var a=e.apply(t,r);function i(e){b(a,n,o,i,l,"next",e)}function l(e){b(a,n,o,i,l,"throw",e)}i(void 0)}))}}function C(e,t){for(var r=0;r1&&void 0!==c[1]?c[1]:"GET",o=c.length>2&&void 0!==c[2]?c[2]:null,a=c.length>3&&void 0!==c[3]?c[3]:null,i=e.getUrlFromHash(r,a),l={method:n,headers:{"Content-Type":"application/json","X-CSRFToken":e.getCsrfToken()}},!o||"POST"!==n&&"PUT"!==n&&"PATCH"!==n||(l.body=JSON.stringify(o)),t.prev=6,t.next=9,fetch(i,l);case 9:if((u=t.sent).ok){t.next=12;break}throw new Error("HTTP error! status: ".concat(u.status));case 12:return t.next=14,u.json();case 14:return t.abrupt("return",t.sent);case 17:throw t.prev=17,t.t0=t.catch(6),console.error("API request failed:",t.t0),t.t0;case 21:case"end":return t.stop()}}),t,null,[[6,17]])}))),function(e){return I.apply(this,arguments)})},{key:"getUrlFromHash",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return null==t&&(t=hashPageHome),e.parameteriseUrl(_pathHost+t,r)}},{key:"parameteriseUrl",value:function(e,t){return t&&(e+="?"+new URLSearchParams(t).toString()),e}},{key:"goToUrl",value:function(e){window.location.href=e}},{key:"goToHash",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=e.getUrlFromHash(t,r);e.goToUrl(n)}},{key:"loginUser",value:(A=k(m().mark((function t(){var r;return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(r={})[flagCallback]=u.getHashPageCurrent(),t.next=4,e.request(hashPageUserLogin,"POST",r);case 4:return t.abrupt("return",t.sent);case 5:case"end":return t.stop()}}),t)}))),function(){return A.apply(this,arguments)})},{key:"getCategories",value:(T=k(m().mark((function t(){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request(hashGetStoreProductCategory);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)}))),function(){return T.apply(this,arguments)})},{key:"getCategoriesByFilters",value:(w=k(m().mark((function t(r){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e.goToHash(hashPageStoreProductCategories,r);case 1:case"end":return t.stop()}}),t)}))),function(e){return w.apply(this,arguments)})},{key:"saveCategories",value:(E=k(m().mark((function t(r,n,o){var a;return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(a={})[flagFormFilters]=u.convertForm2JSON(n),a[flagProductCategory]=r,a[flagComment]=o,t.next=6,e.request(hashSaveStoreProductCategory,"POST",a);case 6:return t.abrupt("return",t.sent);case 7:case"end":return t.stop()}}),t)}))),function(e,t,r){return E.apply(this,arguments)})},{key:"getProducts",value:(O=k(m().mark((function t(){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request(hashGetStoreProduct);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)}))),function(){return O.apply(this,arguments)})},{key:"getProductsByFilters",value:(S=k(m().mark((function t(r){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e.goToHash(hashPageStoreProducts,r);case 1:case"end":return t.stop()}}),t)}))),function(e){return S.apply(this,arguments)})},{key:"saveProducts",value:(P=k(m().mark((function t(r,n,o){var a;return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(a={})[flagFormFilters]=u.convertForm2JSON(n),a[flagProduct]=r,a[flagComment]=o,t.next=6,e.request(hashSaveStoreProduct,"POST",a);case 6:return t.abrupt("return",t.sent);case 7:case"end":return t.stop()}}),t)}))),function(e,t,r){return P.apply(this,arguments)})},{key:"getProductPermutations",value:(b=k(m().mark((function t(){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request(hashGetStoreProductPermutation);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)}))),function(){return b.apply(this,arguments)})},{key:"getProductPermutationsByFilters",value:(g=k(m().mark((function t(r){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e.goToHash(hashPageStoreProductPermutations,r);case 1:case"end":return t.stop()}}),t)}))),function(e){return g.apply(this,arguments)})},{key:"saveProductPermutations",value:(v=k(m().mark((function t(r,n,o){var a;return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(a={})[flagFormFilters]=u.convertForm2JSON(n),a[flagProductPermutation]=r,a[flagComment]=o,t.next=6,e.request(hashSaveStoreProductPermutation,"POST",a);case 6:return t.abrupt("return",t.sent);case 7:case"end":return t.stop()}}),t)}))),function(e,t,r){return v.apply(this,arguments)})},{key:"getStockItems",value:(h=k(m().mark((function t(){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request(hashGetStoreStockItem);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)}))),function(){return h.apply(this,arguments)})},{key:"getStockItemsByFilters",value:(y=k(m().mark((function t(r){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e.goToHash(hashPageStoreStockItems,r);case 1:case"end":return t.stop()}}),t)}))),function(e){return y.apply(this,arguments)})},{key:"saveStockItems",value:(p=k(m().mark((function t(r,n,o){var a;return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(a={})[flagFormFilters]=u.convertForm2JSON(n),a[flagStockItem]=r,a[flagComment]=o,t.next=6,e.request(hashSaveStoreStockItem,"POST",a);case 6:return t.abrupt("return",t.sent);case 7:case"end":return t.stop()}}),t)}))),function(e,t,r){return p.apply(this,arguments)})},{key:"getSuppliers",value:(f=k(m().mark((function t(){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request(hashGetStoreSupplier);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)}))),function(){return f.apply(this,arguments)})},{key:"getSuppliersByFilters",value:(d=k(m().mark((function t(r){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e.goToHash(hashPageStoreSuppliers,r);case 1:case"end":return t.stop()}}),t)}))),function(e){return d.apply(this,arguments)})},{key:"saveSuppliers",value:(s=k(m().mark((function t(r,n,o){var a;return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(a={})[flagFormFilters]=u.convertForm2JSON(n),a[flagSupplier]=r,a[flagComment]=o,t.next=6,e.request(hashSaveStoreSupplier,"POST",a);case 6:return t.abrupt("return",t.sent);case 7:case"end":return t.stop()}}),t)}))),function(e,t,r){return s.apply(this,arguments)})},{key:"getSupplierPurchaseOrders",value:(c=k(m().mark((function t(){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request(hashGetStoreSupplierPurchaseOrder);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)}))),function(){return c.apply(this,arguments)})},{key:"getSupplierPurchaseOrdersByFilters",value:(l=k(m().mark((function t(r){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e.goToHash(hashPageStoreSupplierPurchaseOrders,r);case 1:case"end":return t.stop()}}),t)}))),function(e){return l.apply(this,arguments)})},{key:"saveSupplierPurchaseOrders",value:(i=k(m().mark((function t(r,n,o){var a;return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(a={})[flagFormFilters]=u.convertForm2JSON(n),a[flagSupplierPurchaseOrder]=r,a[flagComment]=o,t.next=6,e.request(hashSaveStoreSupplierPurchaseOrder,"POST",a);case 6:return t.abrupt("return",t.sent);case 7:case"end":return t.stop()}}),t)}))),function(e,t,r){return i.apply(this,arguments)})},{key:"getManufacturingPurchaseOrders",value:(a=k(m().mark((function t(){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,e.request(hashGetStoreManufacturingPurchaseOrder);case 2:return t.abrupt("return",t.sent);case 3:case"end":return t.stop()}}),t)}))),function(){return a.apply(this,arguments)})},{key:"getManufacturingPurchaseOrdersByFilters",value:(o=k(m().mark((function t(r){return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e.goToHash(hashPageStoreManufacturingPurchaseOrders,r);case 1:case"end":return t.stop()}}),t)}))),function(e){return o.apply(this,arguments)})},{key:"saveManufacturingPurchaseOrders",value:(n=k(m().mark((function t(r,n,o){var a;return m().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(a={})[flagFormFilters]=u.convertForm2JSON(n),a[flagManufacturingPurchaseOrder]=r,a[flagComment]=o,t.next=6,e.request(hashSaveStoreManufacturingPurchaseOrder,"POST",a);case 6:return t.abrupt("return",t.sent);case 7:case"end":return t.stop()}}),t)}))),function(e,t,r){return n.apply(this,arguments)})}],r&&C(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r,n,o,a,i,l,c,s,d,f,p,y,h,v,g,b,P,S,O,E,w,T,A,I}();function O(e){return O="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},O(e)}function E(e,t){for(var r=0;r"+r[keyNameFull]+" at "+r[keyPostcode]+" ",document.querySelectorAll(idOverlayInfoBilling).css("display","none"),document.querySelectorAll(idOverlayInfoBilling).querySelector("form").classList.add(flagSubmitted)}else document.querySelectorAll(idContainerInfoDelivery).querySelector("div").innerHTML=""+r[keyNameFull]+" at "+r[keyPostcode]+" ",document.querySelectorAll(idOverlayInfoDelivery).css("display","none"),document.querySelectorAll(idOverlayInfoDelivery).querySelector("form").classList.add(flagSubmitted)}},{key:"convertFormBilling2JSON",value:function(e,t){var r;r=document.querySelectorAll(t).querySelector("form"),r=document.querySelectorAll(idOverlayInfoDelivery).querySelector("form"),e[flagForm]=convertForm2JSON(r);var n=[keyNameFull,keyPhoneNumber,keyPostcode,keyAddress1,keyAddress2,keyCity,keyCounty];for(var o in _verbose&&(console.log("converting billing form to json\nform ID: "+r.id),console.log("ajaxData:"),console.log(e)),e[flagForm][keyInfoIdentical]=getElementValueCurrent(r.querySelector("#"+keyInfoIdentical)),n)t==idOverlayInfoBilling&&e[flagForm][keyInfoIdentical]?e[flagForm][n[o]]=getElementValueCurrent((void 0).querySelector("#"+n[o])):e[flagForm][n[o]]=getElementValueCurrent(r.querySelector("#"+n[o]));return _verbose&&(console.log("ajaxData:"),console.log(e)),e}},{key:"hookupButtonCheckoutSession",value:function(){var e=document.querySelectorAll(idButtonCheckout);e.classList.remove(flagInitialised),f.initialiseEventHandler(idButtonCheckout,flagInitialised,(function(){e.removeEventListener("click"),e.addEventListener("click",(function(e){var t=v.getLocalStorage(keyBasket),r={};r[keyBasket]=t,r=convertFormBilling2JSON(r,idOverlayInfoDelivery),(r=convertFormBilling2JSON(r,idOverlayInfoBilling))[key_code_currency]=getCurrencySelected(),ajaxJSONData("checkout session",mapHashToController(hashPageStoreCheckout),r,handleResponseCheckout,!1)}))}))}},{key:"handleResponseCheckout",value:function(e){window.location.href=e.data[keyUrlCheckout]}},{key:"hookupButtonFormBillingCopy",value:function(){f.initialiseEventHandler(idButtonFormBillingCopy,flagInitialised,(function(){document.querySelectorAll(idButtonFormBillingCopy).addEventListener("click",(function(e){var t=[keyNameFull,keyPhoneNumber,keyPostcode,keyAddress1,keyAddress2,keyCity,keyCounty],r=document.querySelectorAll(idOverlayInfoBilling).querySelector("form"),n=document.querySelectorAll(idOverlayInfoDelivery).querySelector("form");for(var o in t)r.querySelector("#"+t[o]).value=getElementValueCurrent(n.querySelector("#"+t[o]))}))}))}},{key:"leave",value:function(){!function(e,t,r){var n=Ge(We(e.prototype),"leave",r);return"function"==typeof n?function(e){return n.apply(r,e)}:n}(t,0,this)([])}}])}(V);function $e(e){return $e="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},$e(e)}function Ze(e,t){for(var r=0;r3&&void 0!==arguments[3]?arguments[3]:null;return{text:e[t],value:e[r],selected:e[r]==n}}},{key:"getOptionJsonFromObjectJson",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=t[flagNameAttrOptionText],o=t[flagNameAttrOptionValue];return _verbose&&console.log({objectJson:t,keyText:n,keyValue:o}),e.getOptionJsonFromObjectJsonAndKeys(t,n,o,r)}},{key:"getObjectText",value:function(e){return e[e[flagNameAttrOptionText]]}}])}();function dt(e){return dt="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},dt(e)}function ft(e,t){for(var r=0;r1&&void 0!==arguments[1]&&arguments[1];if(arguments.length>0&&void 0!==arguments[0]&&arguments[0]){var o=this.getLocalStoragePage()[flagFormFilters],a=this.getFormFilters(),i=u.convertForm2JSON(a);n.areEqualDicts(o,i)||this.callFilterTableContent(o)}else Et(t,"sharedInitialize",this,3)([]),this.hookupFilters(),this.hookupButtonsAddSaveCancel(),this.hookupTableMain(),T.hookup((function(){r?e.saveRecordsTableDirtySinglePageApp():e.saveRecordsTableDirty()}))}},{key:"hookupFilters",value:function(){if(this.constructor===t)throw new Error("Subclass of TableBasePage must implement method hookupFilters().")}},{key:"sharedHookupFilters",value:function(){this.hookupButtonApplyFilters()}},{key:"hookupFilterActive",value:function(){this.hookupFilter(flagActive)}},{key:"hookupFilter",value:function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(e,r){return t.isDirtyFilter(r)},n=idFormFilters+" ."+e;this.hookupEventHandler("change",n,r)}},{key:"hookupFilterIsNotEmpty",value:function(){this.hookupFilter(flagIsNotEmpty)}},{key:"hookupButtonApplyFilters",value:function(){var e=this;this.hookupEventHandler("click",idButtonApplyFilters,(function(t,r){t.stopPropagation(),e.getAndLoadFilteredTableContent()}))}},{key:"getAndLoadFilteredTableContent",value:function(){var e=this.getFormFilters(),t=u.convertForm2JSON(e);this.leave(),this.callFilterTableContent(t).catch((function(e){return console.error("Error:",e)}))}},{key:"getFormFilters",value:function(){return document.querySelector(idFormFilters)}},{key:"callbackLoadTableContent",value:function(e){t.getTableMain().querySelector("tbody").querySelectorAll("tr").forEach((function(e){e.remove()}));var r=e.data[flagRows];!n.isEmpty(r)&&r.every((function(e){return e.hasOwnProperty("display_order")}))&&(r=r.sort((function(e,t){return e.display_order-t.display_order}))),r.forEach(this.loadRowTable.bind(this)),this.hookupTableMain()}},{key:"loadRowTable",value:function(e){throw new Error("Subclass of TableBasePage must implement method loadRowTable().")}},{key:"getAndLoadFilteredTableContentSinglePageApp",value:function(){var e=this,t=this.getFormFilters(),r=u.convertForm2JSON(t);this.callFilterTableContent(r).then((function(t){_verbose&&console.log("Table data received:",t),e.callbackLoadTableContent(t)})).catch((function(e){return console.error("Error:",e)}))}},{key:"hookupButtonsAddSaveCancel",value:function(){this.hookupButtonAddRowTable(),this.hookupButtonSave(),this.hookupButtonCancel(),this.toggleShowButtonsSaveCancel(!1)}},{key:"saveRecordsTableDirty",value:function(){var e=this,t=this.getTableRecords(!0);if(0!=t.length){var r=this.getFormFilters(),n=u.getElementValueCurrent(document.querySelector(idTextareaConfirm));this.callSaveTableContent(t,r,n).then((function(t){t[flagStatus]==flagSuccess?(_verbose&&(console.log("Records saved!"),console.log("Data received:",t)),e.getAndLoadFilteredTableContent()):(_verbose&&console.log("error: ",t[flagMessage]),mt.show(t[flagMessage]))})).catch((function(e){return console.error("Error:",e)}))}else mt.show("No records to save")}},{key:"getTableRecords",value:function(){var e,t=this,r=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=[];return document.querySelectorAll(idTableMain+" > tbody > tr").forEach((function(o){r&&!o.classList.contains(flagDirty)||(e=t.getJsonRow(o),n.push(e))})),n}},{key:"getJsonRow",value:function(e){throw new Error("Subclass of TableBasePage must implement method getJsonRow().")}},{key:"saveRecordsTableDirtySinglePageApp",value:function(){var e=this,t=this.getTableRecords(!0);if(0!=t.length){var r=this.getFormFilters(),n=u.getElementValueCurrent(document.querySelector(idTextareaConfirm));this.callSaveTableContent(t,r,n).then((function(t){t[flagStatus]==flagSuccess?(_verbose&&(console.log("Records saved!"),console.log("Data received:",t)),e.callbackLoadTableContent(t)):(_verbose&&console.log("error: ",t[flagMessage]),mt.show(t[flagMessage]))})).catch((function(e){return console.error("Error:",e)}))}else mt.show("No records to save")}},{key:"hookupButtonCancel",value:function(){f.initialiseEventHandler(idFormFilters+" button."+flagCancel,flagInitialised,(function(e){e.addEventListener("click",(function(e){e.stopPropagation(),this.getAndLoadFilteredTableContent()})),e.classList.add(flagCollapsed)}))}},{key:"hookupButtonAddRowTable",value:function(){var e=this;this.hookupEventHandler("click",idFormFilters+" button."+flagAdd,(function(t,r){t.stopPropagation();var n=document.querySelector(idTableMain+" tbody"),o=_rowBlank.cloneNode(!0);o.classList.remove(flagInitialised),o.querySelectorAll("."+flagInitialised).forEach((function(e){e.classList.remove(flagInitialised)}));var a=document.querySelectorAll(idTableMain+" > tbody > tr").length;o.setAttribute(e.constructor.attrIdRowObject,-1-a),e.initialiseRowNew(o),n.appendChild(o),e.hookupTableMain()}))}},{key:"initialiseRowNew",value:function(e){if(this.constructor===t)throw new Error("Subclass of TableBasePage must implement method initialiseRowNew().");e.classList.remove(flagRowNew)}},{key:"hookupTableMain",value:function(){var e=this;if(this.constructor===t)throw new Error("Must implement hookupTableMain() method.");f.initialiseEventHandler(idTableMain,flagInitialised,(function(t){e.cacheRowBlank()}))}},{key:"cacheRowBlank",value:function(){var e=idTableMain+" tbody tr."+flagRowNew,t=document.querySelector(e);_verbose&&console.log("row blank temp: ",t),_rowBlank=t.cloneNode(!0),document.querySelectorAll(e).forEach((function(e){e.remove()}))}},{key:"hookupSlidersDisplayOrderTable",value:function(){var e=idTableMain+" tbody tr td."+flagDisplayOrder+" input."+flagSlider+"."+flagDisplayOrder;this.hookupChangeHandlerTableCells(e)}},{key:"hookupChangeHandlerTableCells",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(e,r){t.handleChangeNestedElementCellTable(e,r)};f.initialiseEventHandler(e,flagInitialised,(function(e){e.addEventListener("change",(function(t){r(t,e)})),r(null,e)}))}},{key:"handleChangeNestedElementCellTable",value:function(e,t){var r=this.getAllIsDirtyRowsInParentTree(t),n=t.classList.contains(flagDirty),o=u.updateAndCheckIsElementDirty(t);if(_verbose&&console.log({isDirtyElement:o,wasDirtyElement:n,wasDirtyParentRows:r}),o!=n){var a=u.getCellFromElement(t);u.setElementAttributeValueCurrent(a,u.getElementAttributeValueCurrent(t)),this.toggleShowButtonsSaveCancel(o),this.cascadeChangedIsDirtyNestedElementCellTable(t,o,r)}}},{key:"getAllIsDirtyRowsInParentTree",value:function(e){for(var t,r=[],n=e;n;)n.matches("tr")&&(t=n.classList.contains(flagDirty),r.push(t)),n=n.parentElement;return r}},{key:"cascadeChangedIsDirtyNestedElementCellTable",value:function(e,t,r){if(!n.isEmpty(r)){var o=u.getCellFromElement(e),a=t||u.hasDirtyChildrenNotDeletedContainer(i);u.handleDirtyElement(o,a);var i=u.getRowFromElement(o),l=a||u.hasDirtyChildrenNotDeletedContainer(i),c=r.pop();_verbose&&console.log({isDirtyRow:l,wasDirtyRow:c}),l!=c&&(u.handleDirtyElement(i,l),this.toggleShowButtonsSaveCancel(l),this.cascadeChangedIsDirtyNestedElementCellTable(i.parentElement,l,r))}}},{key:"hookupChangeHandlerTableCellsWhenNotCollapsed",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(e,r){r.classList.contains(flagCollapsed)||t.handleChangeNestedElementCellTable(e,r)};this.hookupEventHandler("change",e,r)}},{key:"hookupTextareasCodeTable",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" tbody tr td."+flagCode+" textarea")}},{key:"hookupTextareasNameTable",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" tbody tr td."+flagName+" textarea")}},{key:"hookupTextareasDescriptionTable",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" tbody tr td."+flagDescription+" textarea")}},{key:"hookupInputsActiveTable",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" > tbody > tr > td."+flagActive+' input[type="checkbox"]')}},{key:"hookupButtonsRowDelete",value:function(e,t){var r=this;this.hookupEventHandler("click",e,(function(n,o){r.handleClickButtonRowDelete(n,o,e,t)}))}},{key:"handleClickButtonRowDelete",value:function(e,t,r,n){u.getRowFromElement(t).classList.add(flagDelete);var o=document.createElement("button");o.classList.add(flagAdd),o.textContent="+",t.replaceWith(o),this.hookupButtonsRowUndelete(r,n)}},{key:"hookupButtonsRowUndelete",value:function(e,t){var r=this;this.hookupEventHandler("click",t,(function(n,o){r.handleClickButtonRowUndelete(n,o,e,t)}))}},{key:"handleClickButtonRowUndelete",value:function(e,t,r,n){u.getRowFromElement(t).classList.add(flagDelete);var o=document.createElement("button");o.classList.add(flagAdd),o.textContent="+",t.replaceWith(o),this.hookupButtonsRowDelete(r,n)}},{key:"hookupTdsAccessLevel",value:function(){var e=idTableMain+" tbody td."+flagAccessLevel;this.hookupTableCellDdlPreviews(e,yt.getListFromDict(accessLevels))}},{key:"hookupTableCellDdlPreviews",value:function(e,t){var r=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(e){r.hookupTableCellDdls(e)},o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(e,t){r.handleChangeNestedElementCellTable(e,t)};this.hookupEventHandler("click",e,(function(a,i){r.handleClickTableCellDdlPreview(a,i,t,e,(function(e){n(e,(function(e,t){o(e,t)}))}))})),n(e+" select")}},{key:"hookupTableCellDdls",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(e,r){t.handleChangeNestedElementCellTable(e,r)};this.hookupEventHandler("change",e,(function(e,t){r(e,t)}))}},{key:"handleClickTableCellDdlPreview",value:function(e,t,r,n){var o=this,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(e){o.hookupTableCellDdls(e)};if(!t.querySelector("select")){var i=t.cloneNode(!0);t.parentNode.replaceChild(i,t);var l=u.getElementAttributeValueCurrent(i);i.innerHTML="";var c,s,d=document.createElement("select");u.setElementValuesCurrentAndPrevious(d,l),_verbose&&(console.log("click table cell ddl preview"),console.log({optionObjectList:r,cellSelector:n})),s=u.createOption(null),d.appendChild(s),r.forEach((function(e){c=st.getOptionJsonFromObjectJson(e,l),s=u.createOption(c),d.appendChild(s)})),i.appendChild(d),a(n+" select")}}},{key:"hookupTableCellDDlPreviewsWhenNotCollapsed",value:function(e,t){var r=this,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(e,t){r.hookupTableCellDdls(e,t)};this.hookupEventHandler("click",e,(function(o,a){var i=a.querySelector("div");i&&!i.classList.contains(flagCollapsed)&&r.handleClickTableCellDdlPreview(o,a,t,e,(function(e,t){n(e,t)}))}))}},{key:"hookupProductCategoryDdls",value:function(e){var t=this;this.hookupChangeHandlerTableCells(e,(function(e,r){t.handleChangeProductCategoryDdl(e,r)}))}},{key:"handleChangeProductCategoryDdl",value:function(e,t){this.handleChangeNestedElementCellTable(e,t);var r=u.getElementValueCurrent(t),n=u.getRowFromElement(t);n.querySelector("td."+flagProduct).dispatchEvent(new Event("click"));var o,a,i=n.querySelector("td."+flagProduct+" select");i.innerHTML="",i.appendChild(u.createOption(null)),yt.getListFromDict(products).forEach((function(e){"0"!=r&&e[attrIdProductCategory]!=r||(o=st.getOptionJsonFromObjectJson(e),a=u.createOption(o),i.appendChild(a))})),this.handleChangeNestedElementCellTable(e,i)}},{key:"hookupFieldsProductPermutationVariation",value:function(){this.hookupPreviewsProductPermutationVariation(),this.hookupDdlsProductPermutationVariation(),this.hookupDdlsProductPermutationVariationType(),this.hookupButtonsProductPermutationVariationAddDelete()}},{key:"hookupPreviewsProductPermutationVariation",value:function(){var e=this;this.hookupEventHandler("click",idTableMain+" td."+flagProductVariations,(function(t,r){return e.handleClickProductPermutationVariationsPreview(t,r)}))}},{key:"handleClickProductPermutationVariationsPreview",value:function(e,t){var r=this,o=t.querySelector("table."+flagProductVariations);if(n.isEmpty(o)){this.toggleColumnCollapsed(flagProductVariations,!1);var a=this.getElementProductVariations(t);(o=document.createElement("table")).classList.add(flagProductVariations);var i=document.createElement("thead"),l=document.createElement("tr"),u=document.createElement("th");u.classList.add(flagProductVariationType),u.textContent="Type";var c=document.createElement("th");c.classList.add(flagProductVariation),c.textContent="Name";var s=document.createElement("button");s.classList.add(flagAdd),s.textContent="+";var d=document.createElement("th");d.classList.add(flagAdd),d.appendChild(s),l.appendChild(u),l.appendChild(c),l.appendChild(d),i.appendChild(l),o.appendChild(i);var f=document.createElement("tbody");n.isEmpty(a)||a.forEach((function(e,t){r.addProductPermutationVariationRow(f,e)})),o.appendChild(f),_verbose&&(console.log("click product permutation variations preview"),console.log("variations:",a),console.log("tblVariations: ",o));var p=t.closest(idTableMain+" tbody tr td."+flagProductVariations);p.innerHTML="",p.appendChild(o),this.hookupFieldsProductPermutationVariation()}}},{key:"toggleColumnCollapsed",value:function(e,t){this.toggleColumnHasClassnameFlag(e,t,flagCollapsed)}},{key:"toggleColumnHeaderCollapsed",value:function(e,t){this.toggleColumnHasClassnameFlag(e,t,flagCollapsed)}},{key:"getElementProductVariations",value:function(e){var t,r,o,a=e.getAttribute(attrValueCurrent),i=[];return n.isEmpty(a)||(a=a.split(",")).forEach((function(e){2==(t=e.split(":")).length?(_verbose&&console.log("parts: ",t),o=productVariationTypes[t[0].trim()],r=productVariations[t[1].trim()],i.push(kt(kt({},flagProductVariationType,o),flagProductVariation,r))):_verbose&&console.log("error: invalid variation: ",e)})),i}},{key:"addProductPermutationVariationRow",value:function(e,t){var r,n,o,a,i,l;_verbose&&console.log("permutationVariation: ",t);var c,s=Object.keys(productVariations),d=Object.keys(productVariationTypes),f=e.querySelectorAll("select."+flagProductVariationType),p=new Set,y=0!=t[attrIdProductVariationType];if(f.forEach((function(e){c=u.getElementValueCurrent(e),p.add(c)})),0!=(d=d.filter((function(e){return!p.has(e)}))).length){y&&(s=s.filter((function(e){return!p.has(productVariations[e][attrIdProductVariationType])})));var h=t[flagProductVariation],v=t[flagProductVariationType],g=document.createElement("td");g.classList.add(flagProductVariationType),u.setElementAttributesValuesCurrentAndPrevious(g,v[attrIdProductVariationType]);var m=document.createElement("select");m.classList.add(flagProductVariationType),u.setElementAttributesValuesCurrentAndPrevious(m,v[attrIdProductVariationType]),o=u.createOption(null),_verbose&&console.log("optionProductVariationType: ",o),m.appendChild(o),d.forEach((function(e){r=productVariationTypes[e],n=st.getOptionJsonFromObjectJson(r,v[attrIdProductVariationType]),o=u.createOption(n),_verbose&&console.log("optionProductVariationType: ",o),m.appendChild(o)}));var b=document.createElement("td");b.classList.add(flagProductVariation),u.setElementAttributesValuesCurrentAndPrevious(b,h[attrIdProductVariation]);var k=document.createElement("select");k.classList.add(flagProductVariation),u.setElementAttributesValuesCurrentAndPrevious(k,h[attrIdProductVariation]),l=u.createOption(null),_verbose&&console.log("optionProductVariation: ",l),k.appendChild(l),s.forEach((function(e){a=productVariations[e],i=st.getOptionJsonFromObjectJson(a,h[attrIdProductVariation]),l=u.createOption(i),_verbose&&console.log("optionProductVariation: ",l),k.appendChild(l)}));var C=document.createElement("td");C.classList.add(flagDelete);var P=document.createElement("button");P.classList.add(flagDelete),P.textContent="x";var S=document.createElement("tr");S.classList.add(flagProductVariation),g.appendChild(m),S.appendChild(g),b.appendChild(k),S.appendChild(b),C.appendChild(P),S.appendChild(C),e.appendChild(S)}}},{key:"hookupDdlsProductPermutationVariation",value:function(){this.hookupTableCellDdls(idTableMain+" td."+flagProductVariations+" td."+flagProductVariation)}},{key:"hookupDdlsProductPermutationVariationType",value:function(){this.hookupTableCellDdls(idTableMain+" td."+flagProductVariations+" td."+flagProductVariationType)}},{key:"hookupButtonsProductPermutationVariationAddDelete",value:function(){var e=this,t=idTableMain+" td."+flagProductVariations+" tr."+flagProductVariation+" button",r=t+"."+flagDelete,n=t+"."+flagAdd;this.hookupButtonsRowDelete(r,n,(function(t,r){e.handleClickButtonRowDelete(t,r),e.updateProductPermutationVariations(r)})),this.hookupButtonsRowUndelete(r,n),this.hookupButtonsProductPermutationVariationAdd()}},{key:"hookupButtonsProductPermutationVariationAdd",value:function(){var e=this;this.hookupEventHandler("click",idTableMain+" td."+flagProductVariations+" button."+flagAdd,(function(t,r){e.handleClickButtonProductPermutationVariationAdd(t,r)}))}},{key:"handleClickButtonProductPermutationVariationAdd",value:function(e,r){var n=r.closest("td."+flagProductVariations).querySelector("tbody"),o=t.createOptionUnselectedProductVariation();this.addProductPermutationVariationRow(n,o),this.hookupFieldsProductPermutationVariation()}},{key:"updateProductPermutationVariations",value:function(e){var t=e.closest("td."+flagProductVariations),r=this.getProductPermutationVariationsText(t);t.setAttribute(attrValueCurrent,r),u.isElementDirty(t)}},{key:"getProductPermutationVariationsText",value:function(e){var t,r,n,o,a=e.querySelectorAll("tr"),i="";return a.forEach((function(e,a){t=e.querySelector("td select."+flagProductVariationType),r=e.querySelector("td select."+flagProductVariation),n=t.getAttribute(attrValueCurrent),o=r.getAttribute(attrValueCurrent),i+=n+":"+o+","})),i}},{key:"hookupCurrencyFields",value:function(){this.hookupTableCellDdlPreviews(idTableMain+" td."+flagCurrency,yt.getListFromDict(currencies))}},{key:"leave",value:function(){if(this.constructor===t)throw new Error("Must implement leave() method.");Et(t,"leave",this,3)([]);var e=this.getFormFilters(),r={};r[flagFormFilters]=u.convertForm2JSON(e),this.setLocalStoragePage(r)}},{key:"toggleColumnHasClassnameFlag",value:function(e,r,n){var o=t.getTableMain(),a=o.querySelector("th."+e),i=a.classList.contains(n);r!=i&&(u.toggleElementHasClassnameFlag(a,r,n),o.querySelectorAll("td."+e).forEach((function(e){u.toggleElementHasClassnameFlag(e,r,n)})))}},{key:"toggleColumnHeaderHasClassnameFlag",value:function(e,r,n){var o=t.getTableMain().querySelector("th."+e);u.toggleElementHasClassnameFlag(o,r,n)}}],[{key:"isDirtyFilter",value:function(e){var t=u.updateAndCheckIsElementDirty(e);if(t){var r=document.querySelector(idTableMain+" tbody");r.querySelectorAll("tr").remove(),r.appendChild(document.createElement('Press "Apply Filters" to refresh the table.
'))}return t}},{key:"getTableMain",value:function(){return document.querySelector(idTableMain)}},{key:"createOptionUnselectedProductVariation",value:function(){return kt(kt({},flagProductVariationType,kt(kt(kt(kt({},flagNameAttrOptionText,[flagName]),flagNameAttrOptionValue,[attrIdProductVariationType]),flagName,"Select Variation Type"),attrIdProductVariationType,0)),flagProductVariation,kt(kt(kt(kt({},flagNameAttrOptionText,[flagName]),flagNameAttrOptionValue,[attrIdProductVariation]),flagName,"Select Variation"),attrIdProductVariation,0))}}])}(V);function Lt(e){return Lt="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},Lt(e)}function Vt(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return Ft(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Ft(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 a,i=!0,l=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){l=!0,a=e},f:function(){try{i||null==r.return||r.return()}finally{if(l)throw a}}}}function Ft(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0?manufacturingPurchaseOrderProductLinks[o]:[],i=document.createElement("table");i.classList.add(flagOrderItems);var l=document.createElement("thead"),c=document.createElement("tr"),s=document.createElement("th");s.classList.add(flagDisplayOrder),s.textContent="Display Order";var d=document.createElement("th");d.classList.add(flagProductCategory),d.textContent="Category";var f=document.createElement("th");f.classList.add(flagProduct),f.textContent="Product";var p=document.createElement("th");p.classList.add(flagProductVariations),p.classList.add(flagCollapsed),p.textContent="Variations";var y=document.createElement("th");y.classList.add(flagUnitMeasurementQuantity),y.textContent="Unit Quantity";var h=document.createElement("th");h.classList.add(flagQuantityUsed),h.textContent="Quantity Used";var v=document.createElement("th");v.classList.add(flagQuantityProduced),v.textContent="Quantity Produced";var g=document.createElement("th");g.classList.add(flagUnitMeasurementLatencyManufacture),g.textContent="Unit Measurement Latency Manufacture";var m=document.createElement("th");m.classList.add(flagLatencyManufacture),m.textContent="Latency Manufacture";var b=document.createElement("th");b.classList.add(flagActive),b.textContent="Active";var k=document.createElement("th");k.classList.add(flagAdd);var C=document.createElement("button");C.classList.add(flagAdd),C.textContent="+",k.appendChild(C),c.appendChild(s),c.appendChild(d),c.appendChild(f),c.appendChild(p),c.appendChild(y),c.appendChild(h),c.appendChild(v),c.appendChild(g),c.appendChild(m),c.appendChild(b),c.appendChild(k),l.appendChild(c),i.appendChild(l);var P=document.createElement("tbody");a.forEach((function(e,t){r.addRowManufacturingPurchaseOrderItem(P,e)})),i.appendChild(P);var S=u.getCellFromElement(t),O=S.cloneNode(!1);O.appendChild(i),n.replaceChild(O,S),_verbose&&console.log("tblOrderItems: ",i),this.hookupOrderItemsFields()}},{key:"addRowManufacturingPurchaseOrderItem",value:function(e,t){_verbose&&console.log("addRowManufacturingPurchaseOrderItem: ",t);var r=document.createElement("td");r.classList.add(flagDisplayOrder);var n=document.createElement("input");n.classList.add(flagDisplayOrder),n.type="number",n.step=1,u.setElementValuesCurrentAndPrevious(n,t[flagDisplayOrder]),r.appendChild(n);var o=document.createElement("td");o.classList.add(flagProductCategory),u.setElementAttributesValuesCurrentAndPrevious(o,t[attrIdProductCategory]);var a=document.createElement("div");a.classList.add(flagProductCategory),a.textContent=t[flagProductCategory],o.appendChild(a);var i=document.createElement("td");i.classList.add(flagProduct),u.setElementAttributesValuesCurrentAndPrevious(i,t[attrIdProductCategory]);var l=document.createElement("div");l.classList.add(flagProduct),l.textContent=t[flagProduct],i.appendChild(l);var c=document.createElement("td");c.classList.add(flagProductVariations),c.classList.add(flagCollapsed),u.setElementAttributesValuesCurrentAndPrevious(c,t[attrIdProductCategory]);var s=document.createElement("div");s.classList.add(flagProductVariations),s.textContent=t[flagProductVariations],c.appendChild(s);var d=document.createElement("td");d.classList.add(flagUnitMeasurementQuantity),u.setElementAttributesValuesCurrentAndPrevious(d,t[attrIdProductCategory]);var f=document.createElement("div");f.classList.add(flagUnitMeasurementQuantity),d.appendChild(f);var p=document.createElement("td");p.classList.add(flagQuantityUsed);var y=document.createElement("input");y.classList.add(flagQuantityUsed),y.type="number",u.setElementAttributesValuesCurrentAndPrevious(y,t[flagQuantityUsed]),p.appendChild(y);var h=document.createElement("td");h.classList.add(flagQuantityProduced);var v=document.createElement("input");v.classList.add(flagQuantityProduced),v.type="number",u.setElementAttributesValuesCurrentAndPrevious(v,t[flagQuantityProduced]),h.appendChild(v);var g=document.createElement("td");g.classList.add(flagUnitMeasurementLatencyManufacture),u.setElementAttributesValuesCurrentAndPrevious(g,t[attrIdUnitMeasurementLatencyManufacture]);var m=document.createElement("div");m.classList.add(flagUnitMeasurementLatencyManufacture),g.appendChild(m);var b=document.createElement("td");b.classList.add(flagLatencyManufacture);var k=document.createElement("input");k.classList.add(flagLatencyManufacture),k.type="number",k.step=1,u.setElementAttributesValuesCurrentAndPrevious(k,t[flagLatencyManufacture]),b.appendChild(k);var C=document.createElement("td");C.classList.add(flagActive);var P=document.createElement("input");P.classList.add(flagActive),P.type="checkbox",u.setElementValuesCurrentAndPrevious(P,t[flagActive]),C.appendChild(P);var S=document.createElement("td");S.classList.add(flagDelete);var O=document.createElement("button");O.classList.add(flagDelete),O.textContent="x",S.appendChild(O);var E=document.createElement("tr");E.classList.add(flagOrderItems),E.setAttribute(attrIdManufacturingPurchaseOrder,t[attrIdManufacturingPurchaseOrder]),E.setAttribute(attrIdManufacturingPurchaseOrderProductLink,t[attrIdManufacturingPurchaseOrderProductLink]),E.appendChild(r),E.appendChild(o),E.appendChild(i),E.appendChild(c),E.appendChild(d),E.appendChild(p),E.appendChild(h),E.appendChild(g),E.appendChild(b),E.appendChild(C),E.appendChild(S),e.appendChild(E)}},{key:"hookupFieldsOrderItemDisplayOrder",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagOrderItems+" td."+flagDisplayOrder+" input")}},{key:"hookupFieldsOrderItemProductCategory",value:function(){var e=this;this.hookupTableCellDdlPreviews(idTableMain+" td."+flagOrderItems+" td."+flagProductCategory,yt.getListFromDict(productCategories),(function(t){e.hookupProductCategoryDdls(t)}))}},{key:"hookupFieldsOrderItemProduct",value:function(){this.hookupTableCellDdlPreviews(idTableMain+" td."+flagOrderItems+" td."+flagProduct,yt.getListFromDict(products))}},{key:"hookupFieldsOrderItemProductVariations",value:function(){var e=this;this.hookupEventHandler("click",idTableMain+" td."+flagOrderItems+" td."+flagProductVariations,(function(t,r){return e.handleClickProductPermutationVariationsPreview(t,r)}))}},{key:"hookupFieldsOrderItemUnitQuantity",value:function(){this.hookupTableCellDdlPreviews(idTableMain+" td."+flagOrderItems+" td."+flagUnitMeasurementQuantity,yt.getListFromDict(unitMeasurements))}},{key:"hookupFieldsOrderItemQuantityUsed",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagOrderItems+" td."+flagQuantityUsed+" input")}},{key:"hookupFieldsOrderItemQuantityProduced",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagOrderItems+" td."+flagQuantityProduced+" input")}},{key:"hookupFieldsOrderItemUnitMeasurementLatencyManufacture",value:function(){this.hookupTableCellDdlPreviews(idTableMain+" td."+flagOrderItems+" td."+flagUnitMeasurementLatencyManufacture,yt.getListFromDict(unitMeasurementsTime))}},{key:"hookupFieldsOrderItemLatencyManufacture",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagOrderItems+" td."+flagLatencyManufacture+" input")}},{key:"hookupFieldsOrderItemActive",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagOrderItems+" input."+flagActive)}},{key:"hookupFieldsOrderItemAddDelete",value:function(){var e=idTableMain+" td."+flagOrderItems+" td."+flagOrderItems+" button",t=e+"."+flagDelete,r=e+"."+flagAdd;this.hookupButtonsRowDelete(t,r),this.hookupButtonsRowUndelete(t,r),this.hookupButtonsOrderItemAdd()}},{key:"hookupButtonsOrderItemAdd",value:function(){var e=this;this.hookupEventHandler("click",idTableMain+" td."+flagOrderItems+" th button."+flagAdd,(function(t,r){var n,o=r.closest(idTableMain+" > tbody > tr"),a=o.getAttribute(attrIdManufacturingPurchaseOrder),i=o.querySelectorAll("td."+flagOrderItems+" td."+flagManufacturingPurchaseOrder).length,l=(rr(rr(rr(rr(rr(rr(rr(rr(rr(rr(n={},attrIdManufacturingPurchaseOrder,a),attrIdManufacturingPurchaseOrderProductLink,-1-i),attrIdProductCategory,0),attrIdProduct,0),flagProductVariations,""),attrIdUnitMeasurementQuantity,0),flagQuantityUsed,""),flagQuantityProduced,""),attrIdUnitMeasurementLatencyManufacture,0),flagLatencyManufacture,""),rr(rr(n,flagDisplayOrder,i+1),flagActive,!0)),u=o.querySelector("td."+flagOrderItems+" table tbody");e.addRowManufacturingPurchaseOrderItem(u,l),e.hookupOrderItemsFields()}))}},{key:"leave",value:function(){$t(t,"leave",this,3)([])}}])}(It);function ar(e){return ar="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},ar(e)}function ir(e,t){for(var r=0;r0?supplierAddresses[o]:[],i=document.createElement("table");i.classList.add(flagAddress);var l=document.createElement("thead"),c=document.createElement("tr"),s=document.createElement("th");s.classList.add(flagPostcode),s.textContent="Postcode";var d=document.createElement("th");d.classList.add(flagAddressLine1),d.textContent="Address Line 1";var f=document.createElement("th");f.classList.add(flagAddressLine2),f.textContent="Address Line 2";var p=document.createElement("th");p.classList.add(flagCity),p.textContent="City";var y=document.createElement("th");y.classList.add(flagCounty),y.textContent="County";var h=document.createElement("th");h.classList.add(flagRegion),h.textContent="Region";var v=document.createElement("th");v.classList.add(flagActive),v.textContent="Active";var g=document.createElement("th");g.classList.add(flagAdd);var m=document.createElement("button");m.classList.add(flagAdd),m.textContent="+",g.appendChild(m),c.appendChild(s),c.appendChild(d),c.appendChild(f),c.appendChild(p),c.appendChild(y),c.appendChild(h),c.appendChild(v),c.appendChild(g),l.appendChild(c),i.appendChild(l);var b=document.createElement("tbody"),k=yt.getListFromDict(regions);a.forEach((function(e,t){r.addRowSupplierAddress(b,e,k)})),i.appendChild(b);var C=u.getCellFromElement(t),P=C.cloneNode(!1);P.appendChild(i),n.replaceChild(P,C),_verbose&&console.log("tblAddresses: ",i),this.hookupAddressFields()}},{key:"addRowSupplierAddress",value:function(e,t,r){_verbose&&console.log("addRowSupplierAddress: ",t);var n=document.createElement("td");n.classList.add(flagPostcode);var o=document.createElement("textarea");o.classList.add(flagPostcode),u.setElementValuesCurrentAndPrevious(o,t[flagPostcode]),n.appendChild(o);var a=document.createElement("td");a.classList.add(flagAddressLine1);var i=document.createElement("textarea");i.classList.add(flagAddressLine1),u.setElementValuesCurrentAndPrevious(i,t[flagAddressLine1]),a.appendChild(i);var l=document.createElement("td");l.classList.add(flagAddressLine2);var c=document.createElement("textarea");c.classList.add(flagAddressLine2),u.setElementValuesCurrentAndPrevious(c,t[flagAddressLine2]),l.appendChild(c);var s=document.createElement("td");s.classList.add(flagCity);var d=document.createElement("textarea");d.classList.add(flagCity),u.setElementValuesCurrentAndPrevious(d,t[flagCity]),s.appendChild(d);var f=document.createElement("td");f.classList.add(flagCounty);var p=document.createElement("textarea");p.classList.add(flagCounty),u.setElementValuesCurrentAndPrevious(p,t[flagCounty]),f.appendChild(p);var y=t[flagRegion];y||(y=nn({},attrIdRegion,""));var h=document.createElement("td");h.classList.add(flagRegion),u.setElementAttributesValuesCurrentAndPrevious(h,y[attrIdRegion]);var v,g,m=document.createElement("select");m.classList.add(flagRegion),g=u.createOption(null),m.appendChild(g),r.forEach((function(e){v=st.getOptionJsonFromObjectJson(e),g=u.createOption(v),m.appendChild(g)})),u.setElementValuesCurrentAndPrevious(m,y[attrIdRegion]),h.appendChild(m);var b=document.createElement("td");b.classList.add(flagActive);var k=document.createElement("input");k.classList.add(flagActive),k.type="checkbox",u.setElementValuesCurrentAndPrevious(k,t[flagActive]),b.appendChild(k);var C=document.createElement("td");C.classList.add(flagDelete);var P=document.createElement("button");P.classList.add(flagDelete),P.textContent="x",C.appendChild(P);var S=document.createElement("tr");S.setAttribute(attrIdSupplierAddress,t[attrIdSupplierAddress]),S.setAttribute(attrIdSupplier,t[attrIdSupplier]),S.appendChild(n),S.appendChild(a),S.appendChild(l),S.appendChild(s),S.appendChild(f),S.appendChild(h),S.appendChild(b),S.appendChild(C),e.appendChild(S)}},{key:"hookupAddressPostcodeInputs",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagAddress+" textarea."+flagPostcode)}},{key:"hookupAddressLine1Inputs",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagAddress+" textarea."+flagAddressLine1)}},{key:"hookupAddressLine2Inputs",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagAddress+" textarea."+flagAddressLine2)}},{key:"hookupAddressCityInputs",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagAddress+" textarea."+flagCity)}},{key:"hookupAddressCountyInputs",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagAddress+" textarea."+flagCounty)}},{key:"hookupAddressRegionDdls",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagAddress+" select."+flagRegion)}},{key:"hookupAddressActiveCheckboxes",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagAddress+" input."+flagActive,(function(e,t){var r=t.closest("tr"),n=r.getAttribute(attrIdSupplierAddress);u.setElementAttributeValueCurrent(r,n);var o=r.closest(idTableMain+" > tbody > tr").querySelectorAll("td."+flagAddress+" input."+flagActive);t.checked&&o.forEach((function(e){e!=t&&u.setElementValueCurrent(e,!1)}))}))}},{key:"hookupFieldsAddressAddDelete",value:function(){var e=idTableMain+" td."+flagAddress+" button",t=e+"."+flagDelete,r=e+"."+flagAdd;this.hookupButtonsRowDelete(t,r),this.hookupButtonsRowUndelete(t,r)}},{key:"hookupAddressDeleteButtons",value:function(){var e=this;this.hookupEventHandler("click",idTableMain+" td."+flagAddress+" button."+flagDelete,(function(t,r){u.getRowFromElement(r).classList.add(flagDelete);var n=document.createElement("button");n.classList.add(flagAdd),n.textContent="+",r.replaceWith(n),e.hookupAddressUndeleteButtons()}))}},{key:"hookupAddressUndeleteButtons",value:function(){var e=this;this.hookupEventHandler("click",idTableMain+" td."+flagAddress+" td button."+flagAdd,(function(t,r){u.getRowFromElement(r).classList.remove(flagDelete);var n=document.createElement("button");n.classList.add(flagDelete),n.textContent="x",r.replaceWith(n),e.hookupAddressDeleteButtons()}))}},{key:"hookupAddressAddButtons",value:function(){var e=this;this.hookupEventHandler("click",idTableMain+" td."+flagAddress+" th button."+flagAdd,(function(t,r){var n=r.closest(idTableMain+" > tbody > tr"),o=n.getAttribute(attrIdSupplier),a=n.querySelectorAll("td."+flagAddress+" input."+flagActive+":checked").length>0,i=n.querySelectorAll("td."+flagAddress+" td."+flagAddress).length,l=nn(nn(nn(nn(nn(nn(nn(nn(nn({},attrIdSupplier,o),attrIdSupplierAddress,-1-i),flagPostcode,""),flagAddressLine1,""),flagAddressLine2,""),flagCity,""),flagCounty,""),attrIdRegion,""),flagActive,!a),c=n.querySelector("td."+flagAddress+" table tbody");if(e.addRowSupplierAddress(c,l,yt.getListFromDict(regions)),!a){var s=n.querySelector("td."+flagAddress);u.setElementAttributeValueCurrent(s,l[attrIdSupplierAddress])}e.hookupAddressFields()}))}},{key:"hookupPhoneNumberInputs",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagPhoneNumber+" textarea")}},{key:"hookupFaxInputs",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagFax+" textarea")}},{key:"hookupEmailInputs",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagEmail+" textarea")}},{key:"hookupWebsiteInputs",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagWebsite+" textarea")}},{key:"leave",value:function(){Zr(t,"leave",this,3)([])}}])}(It);function ln(e){return ln="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},ln(e)}function un(e,t){for(var r=0;r0&&(n+="\n"),n+=e[0]+": "+e[1]+", "})),n}}])}();function dn(e){return dn="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},dn(e)}function fn(e,t){for(var r=0;r tbody > tr"),s=c.querySelector("td."+flagCostTotalLocalVatExcl+" div"),d=c.querySelectorAll("td."+flagOrderItems+" td."+flagCostTotalLocalVatExcl+" input"),f=Array.from(d).reduce((function(e,t){return e+Number(u.getElementValueCurrent(t))}),0);u.setElementValueCurrent(s,f)}},{key:"updateFieldsCostUnitLocalVatIncl",value:function(e){var t=e.closest("tr."+flagOrderItems),r=t.querySelector("td."+flagCostTotalLocalVatIncl+" input"),n=u.getElementValueCurrent(r),o=t.querySelector("td."+flagQuantityOrdered+" input"),a=u.getElementValueCurrent(o),i=t.querySelector("td."+flagCostUnitLocalVatIncl+" div"),l=0==a?0:n/a;u.setElementValuesCurrentAndPrevious(i,l.toFixed(3));var c=t.closest(idTableMain+" > tbody > tr"),s=c.querySelector("td."+flagCostTotalLocalVatIncl+" div"),d=c.querySelectorAll("td."+flagOrderItems+" td."+flagCostTotalLocalVatIncl+" input"),f=Array.from(d).reduce((function(e,t){return e+Number(u.getElementValueCurrent(t))}),0);u.setElementValueCurrent(s,f)}},{key:"hookupFieldsOrderItemLatencyDeliveryDays",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagOrderItems+" td."+flagLatencyDeliveryDays+" input")}},{key:"hookupFieldsOrderItemActive",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagOrderItems+" input."+flagActive)}},{key:"hookupFieldsOrderItemAddDelete",value:function(){var e=idTableMain+" td."+flagOrderItems+" td."+flagOrderItems+" button",t=e+"."+flagDelete,r=e+"."+flagAdd;this.hookupButtonsRowDelete(t,r),this.hookupButtonsRowUndelete(t,r),this.hookupButtonsOrderItemAdd()}},{key:"hookupButtonsOrderItemAdd",value:function(){var e=this;this.hookupEventHandler("click",idTableMain+" td."+flagOrderItems+" th button."+flagAdd,(function(t,r){var n,o=r.closest(idTableMain+" > tbody > tr"),a=o.getAttribute(attrIdSupplierPurchaseOrder),i=o.querySelectorAll("td."+flagOrderItems+" td."+flagSupplierPurchaseOrder).length,l=(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(n={},attrIdSupplierPurchaseOrder,a),attrIdSupplierPurchaseOrderProductLink,-1-i),attrIdProductCategory,0),attrIdProduct,0),flagProductVariations,""),attrIdUnitMeasurementQuantity,0),flagQuantityOrdered,""),flagQuantityReceived,""),flagCostTotalLocalVatExcl,""),flagCostTotalLocalVatIncl,""),bn(bn(bn(bn(bn(n,flagCostUnitLocalVatExcl,""),flagCostUnitLocalVatIncl,""),flagLatencyDeliveryDays,""),flagDisplayOrder,i+1),flagActive,!0)),u=o.querySelector("td."+flagOrderItems+" table tbody");e.addRowSupplierPurchaseOrderItem(u,l),e.hookupOrderItemsFields()}))}},{key:"leave",value:function(){hn(t,"leave",this,3)([])}}])}(It);function Pn(e){return Pn="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},Pn(e)}function Sn(e,t){for(var r=0;r0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageHome,e)},this.routes[hashPageContact]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageContact,e)},this.routes[hashPageServices]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageServices,e)},this.routes[hashPageAdminHome]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageAdminHome,e)},this.routes[hashPageAccessibilityStatement]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageAccessibilityStatement,e)},this.routes[hashPageDataRetentionSchedule]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageDataRetentionSchedule,e)},this.routes[hashPageLicense]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageLicense,e)},this.routes[hashPagePrivacyPolicy]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPagePrivacyPolicy,e)},this.routes[hashPageStoreManufacturingPurchaseOrders]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageStoreManufacturingPurchaseOrders,e)},this.routes[hashPageStoreProductCategories]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageStoreProductCategories,e)},this.routes[hashPageStoreProductPermutations]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageStoreProductPermutations,e)},this.routes[hashPageStoreProducts]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageStoreProducts,e)},this.routes[hashPageStoreStockItems]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageStoreStockItems,e)},this.routes[hashPageStoreSuppliers]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageStoreSuppliers,e)},this.routes[hashPageStoreSupplierPurchaseOrders]=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return t.navigateToHash(hashPageStoreSupplierPurchaseOrders,e)},this.initialize()}),[{key:"loadPage",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.getClassPageFromHash(e);this.currentPage=new n(this),this.currentPage.initialize(r),window.addEventListener("beforeunload",(function(){return t.currentPage.leave()}))}},{key:"getClassPageFromHash",value:function(e){var t=this.pages[e];try{return t.module}catch(t){throw _verbose&&console.log("this.pages: ",this.pages),console.error("Page not found:",e),t}}},{key:"initialize",value:function(){window.addEventListener("popstate",this.handlePopState.bind(this))}},{key:"handlePopState",value:function(e){this.loadPageCurrent()}},{key:"loadPageCurrent",value:function(){var e=u.getHashPageCurrent();this.loadPage(e)}},{key:"navigateToHash",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=S.getUrlFromHash(e,r);history.pushState({data:t,params:r},"",e),S.goToUrl(n,t)}},{key:"navigateToUrl",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;(!(arguments.length>2&&void 0!==arguments[2])||arguments[2])&&history.pushState(t,"",e),e=S.parameteriseUrl(e,t),S.goToUrl(e)}}],[{key:"loadPageBodyFromResponse",value:function(e){u.loadPageBody(e.data)}}])}();function Qn(e){return Qn="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},Qn(e)}function Jn(e,t){for(var r=0;r { // webpackBootstrap
+/******/ "use strict";
+// This entry need to be wrapped in an IIFE because it need to be isolated against other entry modules.
+(() => {
+
+// UNUSED EXPORTS: default
+
+;// CONCATENATED MODULE: ./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 = /*#__PURE__*/function () {
+ function Validation() {
+ _classCallCheck(this, Validation);
+ }
+ return _createClass(Validation, null, [{
+ key: "isEmpty",
+ value:
+ /*
+ isNullOrWhitespace(v) {
+ let txt = JSON.stringify(v).replace('/\s\g', '');
+ return (txt == '' || 'null');
+ }
+ */
+
+ function isEmpty(object) {
+ var isEmpty = true;
+ if (object !== null && object !== "null" && object !== undefined && object !== "undefined") {
+ if (object.length == undefined) {
+ isEmpty = false; // object exists but isn't a collection
+ } else if (typeof object === "function") {
+ isEmpty = false; // object is reference
+ } else {
+ // string or collection
+
+ var isString = typeof object == "string";
+ if (isString) object = object.trim();
+ if (object.length > 0) {
+ if (isString) {
+ isEmpty = false; // String greater than length 0
+ } else {
+ if (typeof object[0] != "string") {
+ isEmpty = false;
+ } else {
+ for (var i = 0; i < object.length; i++) {
+ if (object[i] != "") {
+ isEmpty = false;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return isEmpty;
+ }
+ }, {
+ key: "isValidNumber",
+ value: function isValidNumber(value, positiveOnly) {
+ return !Validation.isEmpty(value) && !isNaN(value) && (!positiveOnly || parseFloat(value) > 0);
+ }
+ }, {
+ key: "getDataContentType",
+ value: function getDataContentType(params) {
+ var data = null;
+ var contentType = '';
+ if (!Validation.isEmpty(params)) {
+ if (typeof params === "string") {
+ data = params;
+ contentType = "application/x-www-form-urlencoded; charset=UTF-8";
+ } else {
+ data = JSON.stringify(params);
+ contentType = "application/json; charset=UTF-8";
+ }
+ }
+ return {
+ Data: data,
+ ContentType: contentType
+ };
+ }
+ }, {
+ key: "arrayContainsItem",
+ value: function arrayContainsItem(array, itemValue) {
+ var hasItem = false;
+ if (!Validation.isEmpty(array) && !Validation.isEmpty(itemValue)) {
+ var isJQueryElementArray = array[0] instanceof jQuery;
+ if (isJQueryElementArray) {
+ for (var i = 0; i < array.length; i++) {
+ if (document.querySelectorAll(array[i]).is(itemValue)) {
+ hasItem = true;
+ break;
+ }
+ }
+ } else {
+ var isDate = array[0] instanceof Date;
+ if (isDate) {
+ for (var _i = 0; _i < array.length; _i++) {
+ if (array[_i].getTime() === itemValue.getTime()) {
+ hasItem = true;
+ break;
+ }
+ }
+ } else {
+ for (var _i2 = 0; _i2 < array.length; _i2++) {
+ if (array[_i2] == itemValue) {
+ hasItem = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+ return hasItem;
+ }
+ }, {
+ key: "dictHasKey",
+ value: function dictHasKey(d, k) {
+ return k in d;
+ }
+ }, {
+ key: "areEqualDicts",
+ value: function areEqualDicts(dict1, dict2) {
+ var keys1 = Object.keys(dict1);
+ var keys2 = Object.keys(dict2);
+ if (keys1.length !== keys2.length) {
+ return false;
+ }
+ for (var _i3 = 0, _keys = keys1; _i3 < _keys.length; _i3++) {
+ var key = _keys[_i3];
+ if (dict1[key] !== dict2[key]) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }, {
+ key: "imageExists",
+ value: function imageExists(url, callback) {
+ var img = new Image();
+ img.onload = function () {
+ callback(true);
+ };
+ img.onerror = function () {
+ callback(false);
+ };
+ img.src = url;
+ }
+ }]);
+}();
+
+;// CONCATENATED MODULE: ./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"); }
+function dom_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, dom_toPropertyKey(o.key), o); } }
+function dom_createClass(e, r, t) { return r && dom_defineProperties(e.prototype, r), t && dom_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function dom_toPropertyKey(t) { var i = dom_toPrimitive(t, "string"); return "symbol" == dom_typeof(i) ? i : i + ""; }
+function dom_toPrimitive(t, r) { if ("object" != dom_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != dom_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+// Module for DOM manipulation
+var DOM = /*#__PURE__*/function () {
+ function DOM() {
+ dom_classCallCheck(this, DOM);
+ }
+ return dom_createClass(DOM, null, [{
+ key: "setElementAttributesValuesCurrentAndPrevious",
+ value: function setElementAttributesValuesCurrentAndPrevious(element, data) {
+ DOM.setElementAttributeValueCurrent(element, data);
+ DOM.setElementAttributeValuePrevious(element, data);
+ }
+ }, {
+ key: "setElementAttributeValueCurrent",
+ value: function setElementAttributeValueCurrent(element, data) {
+ element.setAttribute(attrValueCurrent, data);
+ }
+ }, {
+ key: "setElementAttributeValuePrevious",
+ value: function setElementAttributeValuePrevious(element, data) {
+ element.setAttribute(attrValuePrevious, data);
+ }
+ }, {
+ key: "setElementValuesCurrentAndPrevious",
+ value: function setElementValuesCurrentAndPrevious(element, data) {
+ DOM.setElementValueCurrent(element, data);
+ DOM.setElementAttributeValuePrevious(element, data);
+ }
+ }, {
+ key: "setElementValueCurrent",
+ value: function setElementValueCurrent(element, data) {
+ DOM.setElementAttributeValueCurrent(element, data);
+ if (element.type === "checkbox") {
+ element.checked = data;
+ } else if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT') {
+ element.value = data;
+ } else {
+ element.textContent = data;
+ }
+ }
+ }, {
+ key: "setElementValueCurrentIfEmpty",
+ value: function setElementValueCurrentIfEmpty(element, data) {
+ if (Validation.isEmpty(DOM.getElementValueCurrent(element))) {
+ DOM.setElementValueCurrent(element, data);
+ }
+ }
+ }, {
+ key: "getCellFromElement",
+ value: function getCellFromElement(element) {
+ return element.closest('td');
+ }
+ }, {
+ key: "getRowFromElement",
+ value: function getRowFromElement(element, flagRow) {
+ var selector = Validation.isEmpty(flagRow) ? 'tr' : 'tr.' + flagRow;
+ return element.closest(selector);
+ }
+ }, {
+ key: "getClosestParent",
+ value: function getClosestParent(element, selector) {
+ var parent = element.parentElement;
+ while (parent) {
+ if (parent.matches(selector)) {
+ return parent;
+ }
+ parent = parent.parentElement;
+ }
+ return null;
+ }
+ }, {
+ key: "convertForm2JSON",
+ value: function convertForm2JSON(elementForm) {
+ var dataForm = {};
+ if (Validation.isEmpty(elementForm)) {
+ return dataForm;
+ }
+ var containersFilter = elementForm.querySelectorAll('.' + flagContainerInput + '.' + flagFilter);
+ var containerFilter, labelFilter, keyFilter, filter;
+ for (var indexFilter = 0; indexFilter < containersFilter.length; indexFilter++) {
+ containerFilter = containersFilter[indexFilter];
+ labelFilter = containerFilter.querySelector('label');
+ keyFilter = labelFilter.getAttribute('for');
+ filter = containerFilter.querySelector("#".concat(keyFilter));
+ dataForm[keyFilter] = DOM.getElementValueCurrent(filter);
+ }
+ return dataForm;
+ }
+ }, {
+ key: "loadPageBody",
+ value: function loadPageBody(contentNew) {
+ var pageBody = document.querySelector(idPageBody);
+ pageBody.innerHTML = contentNew;
+ }
+ }, {
+ key: "getHashPageCurrent",
+ value: function getHashPageCurrent() {
+ var hashPageCurrent = document.body.dataset.page;
+ return hashPageCurrent;
+ }
+ }, {
+ key: "updateAndCheckIsElementDirty",
+ value: function updateAndCheckIsElementDirty(element) {
+ element.setAttribute(attrValueCurrent, DOM.getElementValueCurrent(element));
+ return DOM.isElementDirty(element);
+ }
+ }, {
+ key: "isElementDirty",
+ value: function isElementDirty(element) {
+ var isDirty = element.getAttribute(attrValuePrevious) != element.getAttribute(attrValueCurrent);
+ DOM.handleDirtyElement(element, isDirty);
+ return isDirty;
+ }
+ }, {
+ key: "handleDirtyElement",
+ value: function handleDirtyElement(element, isDirty) {
+ DOM.toggleElementHasClassnameFlag(element, isDirty, flagDirty);
+ }
+ }, {
+ key: "toggleElementHasClassnameFlag",
+ value: function toggleElementHasClassnameFlag(element, elementHasFlag, flag) {
+ var elementAlreadyHasFlag = element.classList.contains(flag);
+ if (elementHasFlag == elementAlreadyHasFlag) return;
+ if (elementHasFlag) {
+ element.classList.add(flag);
+ } else {
+ element.classList.remove(flag);
+ }
+ }
+ }, {
+ key: "hasDirtyChildrenContainer",
+ value: function hasDirtyChildrenContainer(container) {
+ if (container == null) return false;
+ return container.querySelector('.' + flagDirty) != null;
+ }
+ }, {
+ key: "hasDirtyChildrenNotDeletedContainer",
+ value: function hasDirtyChildrenNotDeletedContainer(container) {
+ if (container == null || container.classList.contains(flagDelete)) return false;
+ return container.querySelector('.' + flagDirty + ':not(.' + flagDelete + ', .' + flagDelete + ' *)') != null;
+ }
+ }, {
+ key: "getElementValueCurrent",
+ value: function getElementValueCurrent(element) {
+ var returnVal = '';
+ if (!Validation.isEmpty(element)) {
+ if (element.type === "checkbox") {
+ returnVal = element.checked;
+ }
+ /*
+ else if (element.classList.contains(flagIsDatePicker)) {
+ returnVal = getDatePickerDate(element, adjust4DayLightSavings);
+ }
+ */else if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT') {
+ returnVal = element.value;
+ } else if (element.tagName === 'BUTTON' && element.classList.contains(flagActive)) {
+ returnVal = element.classList.contains(flagDelete);
+ } else {
+ returnVal = element.textContent;
+ }
+ }
+ if (Validation.isEmpty(returnVal)) returnVal = '';
+ return returnVal;
+ }
+ }, {
+ key: "getElementAttributeValueCurrent",
+ value: function getElementAttributeValueCurrent(element) {
+ if (Validation.isEmpty(element)) return null;
+ return element.getAttribute(attrValueCurrent);
+ if (!Validation.isEmpty(value) && element.type === "checkbox") {
+ value = value === 'true';
+ }
+ return value;
+ }
+ }, {
+ key: "getElementAttributeValuePrevious",
+ value: function getElementAttributeValuePrevious(element) {
+ if (Validation.isEmpty(element)) return null;
+ return element.getAttribute(attrValuePrevious);
+ if (!Validation.isEmpty(value) && element.type === "checkbox") {
+ value = value === 'true';
+ }
+ return value;
+ }
+ /* base_table.handleChangeElementCellTable
+ static updateAndCheckIsTableElementDirty(element) {
+ let wasDirty = DOM.isElementDirty(element);
+ let row = DOM.getRowFromElement(element);
+ let wasDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);
+ let isDirty = DOM.updateAndCheckIsElementDirty(element);
+ let cell = DOM.getCellFromElement(element);
+ console.log({element, row, cell, isDirty, wasDirty});
+ if (isDirty != wasDirty) {
+ DOM.handleDirtyElement(cell, isDirty);
+ let isDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);
+ console.log({isDirtyRow, wasDirtyRow});
+ if (isDirtyRow != wasDirtyRow) {
+ DOM.handleDirtyElement(row, isDirtyRow);
+ }
+ }
+ }
+ */
+ /*
+ static updateElement(id, data) {
+ const element = document.getElementById(id);
+ if (element) {
+ element.textContent = data;
+ }
+ }
+ */
+ /* non-static method on page object to use
+ static handleChangeElement(element) {}
+ */
+ }, {
+ key: "scrollToElement",
+ value: function scrollToElement(parent, element) {
+ // REQUIRED: parent has scroll-bar
+ parent.scrollTop(parent.scrollTop() + (element.offset().top - parent.offset().top));
+ }
+ }, {
+ key: "isElementInContainer",
+ value: function isElementInContainer(container, element) {
+ if (typeof jQuery === 'function') {
+ if (container instanceof jQuery) container = container[0];
+ if (element instanceof jQuery) element = element[0];
+ }
+ var containerBounds = container.getBoundingClientRect();
+ var elementBounds = element.getBoundingClientRect();
+ return containerBounds.top <= elementBounds.top && containerBounds.left <= elementBounds.left && elementBounds.top + elementBounds.height <= containerBounds.top + containerBounds.height && elementBounds.left + elementBounds.width <= containerBounds.left + containerBounds.width;
+ }
+ }, {
+ key: "alertError",
+ value: function alertError(errorType, errorText) {
+ alert(errorType + '\n' + errorText);
+ }
+ }, {
+ key: "createOptionUnselectedProductVariation",
+ value: function createOptionUnselectedProductVariation() {
+ return _defineProperty(_defineProperty({}, flagProductVariationType, _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, flagNameAttrOptionText, [flagName]), flagNameAttrOptionValue, [attrIdProductVariationType]), flagName, 'Select Variation Type'), attrIdProductVariationType, 0)), flagProductVariation, _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, flagNameAttrOptionText, [flagName]), flagNameAttrOptionValue, [attrIdProductVariation]), flagName, 'Select Variation'), attrIdProductVariation, 0));
+ }
+ }, {
+ key: "createOption",
+ value: function createOption(optionJson) {
+ if (Validation.isEmpty(optionJson)) optionJson = {
+ text: 'Select',
+ value: 0
+ };
+ var option = document.createElement('option');
+ option.value = optionJson.value;
+ option.textContent = optionJson.text;
+ option.selected = optionJson.selected;
+ return option;
+ }
+ }]);
+}();
+
+;// CONCATENATED MODULE: ./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); } }
+function events_createClass(e, r, t) { return r && events_defineProperties(e.prototype, r), t && events_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function events_toPropertyKey(t) { var i = events_toPrimitive(t, "string"); return "symbol" == events_typeof(i) ? i : i + ""; }
+function events_toPrimitive(t, r) { if ("object" != events_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != events_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+var Events = /*#__PURE__*/function () {
+ function Events() {
+ events_classCallCheck(this, Events);
+ }
+ return events_createClass(Events, null, [{
+ key: "initialiseEventHandler",
+ value: function initialiseEventHandler(selectorElement, classInitialised, eventHandler) {
+ document.querySelectorAll(selectorElement).forEach(function (element) {
+ if (element.classList.contains(classInitialised)) return;
+ element.classList.add(classInitialised);
+ eventHandler(element);
+ });
+ }
+ }]);
+}();
+
+;// CONCATENATED MODULE: ./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); } }
+function local_storage_createClass(e, r, t) { return r && local_storage_defineProperties(e.prototype, r), t && local_storage_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function local_storage_toPropertyKey(t) { var i = local_storage_toPrimitive(t, "string"); return "symbol" == local_storage_typeof(i) ? i : i + ""; }
+function local_storage_toPrimitive(t, r) { if ("object" != local_storage_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != local_storage_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var LocalStorage = /*#__PURE__*/function () {
+ function LocalStorage() {
+ local_storage_classCallCheck(this, LocalStorage);
+ }
+ return local_storage_createClass(LocalStorage, null, [{
+ key: "getLocalStorage",
+ value:
+ /*
+ function getPageLocalStorage(pageHash) {
+
+ let ls;
+ try {
+ ls = JSON.parse(localStorage.getItem(pageHash));
+ } catch {
+
+ }
+
+ if (Validation.isEmpty(ls)) return {}
+
+ return ls;
+ }
+ function getPageLocalStorageCurrent() {
+
+ return JSON.parse(localStorage.getItem(hashPageCurrent));
+ }
+
+ function setPageLocalStorage(pageHash, newLS) {
+
+ localStorage.setItem(pageHash, JSON.stringify(newLS));
+ }
+
+ function clearPageLocalStorage(pageHash) {
+ localStorage.removeItem(pageHash);
+ }
+
+ function setupPageLocalStorage(pageHash) {
+
+ let ls = getPageLocalStorage(pageHash);
+
+ if (Validation.isEmpty(ls)) ls = {};
+
+ setPageLocalStorage(pageHash, ls);
+ }
+ */
+
+ function getLocalStorage(key) {
+ return JSON.parse(localStorage.getItem(key));
+ }
+ }, {
+ key: "setLocalStorage",
+ value: function setLocalStorage(key, newLS) {
+ localStorage.setItem(key, JSON.stringify(newLS));
+ }
+
+ /*
+ function setupPageLocalStorageNext(pageHashNext) {
+ let lsOld = getPageLocalStorage(hashPageCurrent);
+ hashPageCurrent = pageHashNext;
+ clearPageLocalStorage(hashPageCurrent);
+ setupPageLocalStorage(hashPageCurrent);
+ let lsNew = getPageLocalStorage(hashPageCurrent);
+ lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};
+ setPageLocalStorage(hashPageCurrent, lsNew);
+ }
+ */
+ }]);
+}();
+
+;// CONCATENATED MODULE: ./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 asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
+function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
+function api_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function api_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, api_toPropertyKey(o.key), o); } }
+function api_createClass(e, r, t) { return r && api_defineProperties(e.prototype, r), t && api_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function api_toPropertyKey(t) { var i = api_toPrimitive(t, "string"); return "symbol" == api_typeof(i) ? i : i + ""; }
+function api_toPrimitive(t, r) { if ("object" != api_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != api_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+// Module for API calls
+var api_API = /*#__PURE__*/function () {
+ function API() {
+ api_classCallCheck(this, API);
+ }
+ return api_createClass(API, null, [{
+ key: "getCsrfToken",
+ value: function getCsrfToken() {
+ // return document.querySelectorAll('meta[name=' + nameCSRFToken + ']').getAttribute('content');
+ return document.querySelector(idCSRFToken).getAttribute('content');
+ }
+ }, {
+ key: "request",
+ value: function () {
+ var _request = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(hashEndpoint) {
+ var method,
+ data,
+ params,
+ url,
+ options,
+ response,
+ _args = arguments;
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
+ while (1) switch (_context.prev = _context.next) {
+ case 0:
+ method = _args.length > 1 && _args[1] !== undefined ? _args[1] : 'GET';
+ data = _args.length > 2 && _args[2] !== undefined ? _args[2] : null;
+ params = _args.length > 3 && _args[3] !== undefined ? _args[3] : null;
+ url = API.getUrlFromHash(hashEndpoint, params);
+ options = {
+ method: method,
+ headers: {
+ 'Content-Type': 'application/json',
+ 'X-CSRFToken': API.getCsrfToken()
+ }
+ };
+ if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {
+ options.body = JSON.stringify(data);
+ }
+ _context.prev = 6;
+ _context.next = 9;
+ return fetch(url, options);
+ case 9:
+ response = _context.sent;
+ if (response.ok) {
+ _context.next = 12;
+ break;
+ }
+ throw new Error("HTTP error! status: ".concat(response.status));
+ case 12:
+ _context.next = 14;
+ return response.json();
+ case 14:
+ return _context.abrupt("return", _context.sent);
+ case 17:
+ _context.prev = 17;
+ _context.t0 = _context["catch"](6);
+ console.error('API request failed:', _context.t0);
+ throw _context.t0;
+ case 21:
+ case "end":
+ return _context.stop();
+ }
+ }, _callee, null, [[6, 17]]);
+ }));
+ function request(_x) {
+ return _request.apply(this, arguments);
+ }
+ return request;
+ }()
+ }, {
+ key: "getUrlFromHash",
+ value: function getUrlFromHash(hash) {
+ var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+ if (hash == null) hash = hashPageHome;
+ var url = API.parameteriseUrl(_pathHost + hash, params);
+ return url;
+ }
+ }, {
+ key: "parameteriseUrl",
+ value: function parameteriseUrl(url, params) {
+ if (params) {
+ url += '?' + new URLSearchParams(params).toString();
+ }
+ return url;
+ }
+ }, {
+ key: "goToUrl",
+ value: function goToUrl(url) {
+ window.location.href = url;
+ }
+ }, {
+ key: "goToHash",
+ value: function goToHash(hash) {
+ var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+ var url = API.getUrlFromHash(hash, params);
+ API.goToUrl(url);
+ }
+
+ // specific api calls
+ /* Example:
+ getUsers: () => request('/users'),
+ getUserById: (id) => request(`/users/${id}`),
+ createUser: (userData) => request('/users', 'POST', userData),
+ updateUser: (id, userData) => request(`/users/${id}`, 'PUT', userData),
+ deleteUser: (id) => request(`/users/${id}`, 'DELETE'),
+ */
+ }, {
+ key: "loginUser",
+ value: function () {
+ var _loginUser = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
+ var callback;
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
+ while (1) switch (_context2.prev = _context2.next) {
+ case 0:
+ callback = {};
+ callback[flagCallback] = DOM.getHashPageCurrent();
+ _context2.next = 4;
+ return API.request(hashPageUserLogin, 'POST', callback);
+ case 4:
+ return _context2.abrupt("return", _context2.sent);
+ case 5:
+ case "end":
+ return _context2.stop();
+ }
+ }, _callee2);
+ }));
+ function loginUser() {
+ return _loginUser.apply(this, arguments);
+ }
+ return loginUser;
+ }() // store
+ // product categories
+ }, {
+ key: "getCategories",
+ value: function () {
+ var _getCategories = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
+ while (1) switch (_context3.prev = _context3.next) {
+ case 0:
+ _context3.next = 2;
+ return API.request(hashGetStoreProductCategory);
+ case 2:
+ return _context3.abrupt("return", _context3.sent);
+ case 3:
+ case "end":
+ return _context3.stop();
+ }
+ }, _callee3);
+ }));
+ function getCategories() {
+ return _getCategories.apply(this, arguments);
+ }
+ return getCategories;
+ }()
+ }, {
+ key: "getCategoriesByFilters",
+ value: function () {
+ var _getCategoriesByFilters = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(filtersJson) {
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
+ while (1) switch (_context4.prev = _context4.next) {
+ case 0:
+ /*
+ let dataRequest = {};
+ dataRequest[flagForm] = filtersJson;
+ return await API.request(hashGetStoreProductCategory, 'POST', dataRequest);
+ */
+ // return await API.request(hashPageStoreProductCategories, 'GET', filtersJson);
+ API.goToHash(hashPageStoreProductCategories, filtersJson);
+ case 1:
+ case "end":
+ return _context4.stop();
+ }
+ }, _callee4);
+ }));
+ function getCategoriesByFilters(_x2) {
+ return _getCategoriesByFilters.apply(this, arguments);
+ }
+ return getCategoriesByFilters;
+ }()
+ }, {
+ key: "saveCategories",
+ value: function () {
+ var _saveCategories = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(categories, formFilters, comment) {
+ var dataRequest;
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
+ while (1) switch (_context5.prev = _context5.next) {
+ case 0:
+ dataRequest = {};
+ dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
+ dataRequest[flagProductCategory] = categories;
+ dataRequest[flagComment] = comment;
+ _context5.next = 6;
+ return API.request(hashSaveStoreProductCategory, 'POST', dataRequest);
+ case 6:
+ return _context5.abrupt("return", _context5.sent);
+ case 7:
+ case "end":
+ return _context5.stop();
+ }
+ }, _callee5);
+ }));
+ function saveCategories(_x3, _x4, _x5) {
+ return _saveCategories.apply(this, arguments);
+ }
+ return saveCategories;
+ }() // products
+ }, {
+ key: "getProducts",
+ value: function () {
+ var _getProducts = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
+ while (1) switch (_context6.prev = _context6.next) {
+ case 0:
+ _context6.next = 2;
+ return API.request(hashGetStoreProduct);
+ case 2:
+ return _context6.abrupt("return", _context6.sent);
+ case 3:
+ case "end":
+ return _context6.stop();
+ }
+ }, _callee6);
+ }));
+ function getProducts() {
+ return _getProducts.apply(this, arguments);
+ }
+ return getProducts;
+ }()
+ }, {
+ key: "getProductsByFilters",
+ value: function () {
+ var _getProductsByFilters = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee7(filtersJson) {
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
+ while (1) switch (_context7.prev = _context7.next) {
+ case 0:
+ API.goToHash(hashPageStoreProducts, filtersJson);
+ case 1:
+ case "end":
+ return _context7.stop();
+ }
+ }, _callee7);
+ }));
+ function getProductsByFilters(_x6) {
+ return _getProductsByFilters.apply(this, arguments);
+ }
+ return getProductsByFilters;
+ }()
+ }, {
+ key: "saveProducts",
+ value: function () {
+ var _saveProducts = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee8(products, formFilters, comment) {
+ var dataRequest;
+ return _regeneratorRuntime().wrap(function _callee8$(_context8) {
+ while (1) switch (_context8.prev = _context8.next) {
+ case 0:
+ dataRequest = {};
+ dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
+ dataRequest[flagProduct] = products;
+ dataRequest[flagComment] = comment;
+ _context8.next = 6;
+ return API.request(hashSaveStoreProduct, 'POST', dataRequest);
+ case 6:
+ return _context8.abrupt("return", _context8.sent);
+ case 7:
+ case "end":
+ return _context8.stop();
+ }
+ }, _callee8);
+ }));
+ function saveProducts(_x7, _x8, _x9) {
+ return _saveProducts.apply(this, arguments);
+ }
+ return saveProducts;
+ }() // product permutations
+ }, {
+ key: "getProductPermutations",
+ value: function () {
+ var _getProductPermutations = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
+ return _regeneratorRuntime().wrap(function _callee9$(_context9) {
+ while (1) switch (_context9.prev = _context9.next) {
+ case 0:
+ _context9.next = 2;
+ return API.request(hashGetStoreProductPermutation);
+ case 2:
+ return _context9.abrupt("return", _context9.sent);
+ case 3:
+ case "end":
+ return _context9.stop();
+ }
+ }, _callee9);
+ }));
+ function getProductPermutations() {
+ return _getProductPermutations.apply(this, arguments);
+ }
+ return getProductPermutations;
+ }()
+ }, {
+ key: "getProductPermutationsByFilters",
+ value: function () {
+ var _getProductPermutationsByFilters = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee10(filtersJson) {
+ return _regeneratorRuntime().wrap(function _callee10$(_context10) {
+ while (1) switch (_context10.prev = _context10.next) {
+ case 0:
+ API.goToHash(hashPageStoreProductPermutations, filtersJson);
+ case 1:
+ case "end":
+ return _context10.stop();
+ }
+ }, _callee10);
+ }));
+ function getProductPermutationsByFilters(_x10) {
+ return _getProductPermutationsByFilters.apply(this, arguments);
+ }
+ return getProductPermutationsByFilters;
+ }()
+ }, {
+ key: "saveProductPermutations",
+ value: function () {
+ var _saveProductPermutations = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee11(permutations, formFilters, comment) {
+ var dataRequest;
+ return _regeneratorRuntime().wrap(function _callee11$(_context11) {
+ while (1) switch (_context11.prev = _context11.next) {
+ case 0:
+ dataRequest = {};
+ dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
+ dataRequest[flagProductPermutation] = permutations;
+ dataRequest[flagComment] = comment;
+ _context11.next = 6;
+ return API.request(hashSaveStoreProductPermutation, 'POST', dataRequest);
+ case 6:
+ return _context11.abrupt("return", _context11.sent);
+ case 7:
+ case "end":
+ return _context11.stop();
+ }
+ }, _callee11);
+ }));
+ function saveProductPermutations(_x11, _x12, _x13) {
+ return _saveProductPermutations.apply(this, arguments);
+ }
+ return saveProductPermutations;
+ }() // product variations
+ }, {
+ key: "getProductVariations",
+ value: function () {
+ var _getProductVariations = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee12() {
+ return _regeneratorRuntime().wrap(function _callee12$(_context12) {
+ while (1) switch (_context12.prev = _context12.next) {
+ case 0:
+ _context12.next = 2;
+ return API.request(hashGetStoreProductVariation);
+ case 2:
+ return _context12.abrupt("return", _context12.sent);
+ case 3:
+ case "end":
+ return _context12.stop();
+ }
+ }, _callee12);
+ }));
+ function getProductVariations() {
+ return _getProductVariations.apply(this, arguments);
+ }
+ return getProductVariations;
+ }()
+ }, {
+ key: "getProductVariationsByFilters",
+ value: function () {
+ var _getProductVariationsByFilters = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee13(filtersJson) {
+ return _regeneratorRuntime().wrap(function _callee13$(_context13) {
+ while (1) switch (_context13.prev = _context13.next) {
+ case 0:
+ API.goToHash(hashPageStoreProductVariations, filtersJson);
+ case 1:
+ case "end":
+ return _context13.stop();
+ }
+ }, _callee13);
+ }));
+ function getProductVariationsByFilters(_x14) {
+ return _getProductVariationsByFilters.apply(this, arguments);
+ }
+ return getProductVariationsByFilters;
+ }()
+ }, {
+ key: "saveProductVariations",
+ value: function () {
+ var _saveProductVariations = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee14(variationTypes, formFilters, comment) {
+ var dataRequest;
+ return _regeneratorRuntime().wrap(function _callee14$(_context14) {
+ while (1) switch (_context14.prev = _context14.next) {
+ case 0:
+ dataRequest = {};
+ dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
+ dataRequest[flagProductVariationType] = variationTypes;
+ dataRequest[flagComment] = comment;
+ _context14.next = 6;
+ return API.request(hashSaveStoreProductVariation, 'POST', dataRequest);
+ case 6:
+ return _context14.abrupt("return", _context14.sent);
+ case 7:
+ case "end":
+ return _context14.stop();
+ }
+ }, _callee14);
+ }));
+ function saveProductVariations(_x15, _x16, _x17) {
+ return _saveProductVariations.apply(this, arguments);
+ }
+ return saveProductVariations;
+ }() // stock items
+ }, {
+ key: "getStockItems",
+ value: function () {
+ var _getStockItems = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee15() {
+ return _regeneratorRuntime().wrap(function _callee15$(_context15) {
+ while (1) switch (_context15.prev = _context15.next) {
+ case 0:
+ _context15.next = 2;
+ return API.request(hashGetStoreStockItem);
+ case 2:
+ return _context15.abrupt("return", _context15.sent);
+ case 3:
+ case "end":
+ return _context15.stop();
+ }
+ }, _callee15);
+ }));
+ function getStockItems() {
+ return _getStockItems.apply(this, arguments);
+ }
+ return getStockItems;
+ }()
+ }, {
+ key: "getStockItemsByFilters",
+ value: function () {
+ var _getStockItemsByFilters = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee16(filtersJson) {
+ return _regeneratorRuntime().wrap(function _callee16$(_context16) {
+ while (1) switch (_context16.prev = _context16.next) {
+ case 0:
+ API.goToHash(hashPageStoreStockItems, filtersJson);
+ case 1:
+ case "end":
+ return _context16.stop();
+ }
+ }, _callee16);
+ }));
+ function getStockItemsByFilters(_x18) {
+ return _getStockItemsByFilters.apply(this, arguments);
+ }
+ return getStockItemsByFilters;
+ }()
+ }, {
+ key: "saveStockItems",
+ value: function () {
+ var _saveStockItems = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee17(stockItems, formFilters, comment) {
+ var dataRequest;
+ return _regeneratorRuntime().wrap(function _callee17$(_context17) {
+ while (1) switch (_context17.prev = _context17.next) {
+ case 0:
+ dataRequest = {};
+ dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
+ dataRequest[flagStockItem] = stockItems;
+ dataRequest[flagComment] = comment;
+ _context17.next = 6;
+ return API.request(hashSaveStoreStockItem, 'POST', dataRequest);
+ case 6:
+ return _context17.abrupt("return", _context17.sent);
+ case 7:
+ case "end":
+ return _context17.stop();
+ }
+ }, _callee17);
+ }));
+ function saveStockItems(_x19, _x20, _x21) {
+ return _saveStockItems.apply(this, arguments);
+ }
+ return saveStockItems;
+ }() // suppliers
+ }, {
+ key: "getSuppliers",
+ value: function () {
+ var _getSuppliers = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee18() {
+ return _regeneratorRuntime().wrap(function _callee18$(_context18) {
+ while (1) switch (_context18.prev = _context18.next) {
+ case 0:
+ _context18.next = 2;
+ return API.request(hashGetStoreSupplier);
+ case 2:
+ return _context18.abrupt("return", _context18.sent);
+ case 3:
+ case "end":
+ return _context18.stop();
+ }
+ }, _callee18);
+ }));
+ function getSuppliers() {
+ return _getSuppliers.apply(this, arguments);
+ }
+ return getSuppliers;
+ }()
+ }, {
+ key: "getSuppliersByFilters",
+ value: function () {
+ var _getSuppliersByFilters = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee19(filtersJson) {
+ return _regeneratorRuntime().wrap(function _callee19$(_context19) {
+ while (1) switch (_context19.prev = _context19.next) {
+ case 0:
+ API.goToHash(hashPageStoreSuppliers, filtersJson);
+ case 1:
+ case "end":
+ return _context19.stop();
+ }
+ }, _callee19);
+ }));
+ function getSuppliersByFilters(_x22) {
+ return _getSuppliersByFilters.apply(this, arguments);
+ }
+ return getSuppliersByFilters;
+ }()
+ }, {
+ key: "saveSuppliers",
+ value: function () {
+ var _saveSuppliers = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee20(suppliers, formFilters, comment) {
+ var dataRequest;
+ return _regeneratorRuntime().wrap(function _callee20$(_context20) {
+ while (1) switch (_context20.prev = _context20.next) {
+ case 0:
+ dataRequest = {};
+ dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
+ dataRequest[flagSupplier] = suppliers;
+ dataRequest[flagComment] = comment;
+ _context20.next = 6;
+ return API.request(hashSaveStoreSupplier, 'POST', dataRequest);
+ case 6:
+ return _context20.abrupt("return", _context20.sent);
+ case 7:
+ case "end":
+ return _context20.stop();
+ }
+ }, _callee20);
+ }));
+ function saveSuppliers(_x23, _x24, _x25) {
+ return _saveSuppliers.apply(this, arguments);
+ }
+ return saveSuppliers;
+ }() // supplier purchase orders
+ }, {
+ key: "getSupplierPurchaseOrders",
+ value: function () {
+ var _getSupplierPurchaseOrders = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee21() {
+ return _regeneratorRuntime().wrap(function _callee21$(_context21) {
+ while (1) switch (_context21.prev = _context21.next) {
+ case 0:
+ _context21.next = 2;
+ return API.request(hashGetStoreSupplierPurchaseOrder);
+ case 2:
+ return _context21.abrupt("return", _context21.sent);
+ case 3:
+ case "end":
+ return _context21.stop();
+ }
+ }, _callee21);
+ }));
+ function getSupplierPurchaseOrders() {
+ return _getSupplierPurchaseOrders.apply(this, arguments);
+ }
+ return getSupplierPurchaseOrders;
+ }()
+ }, {
+ key: "getSupplierPurchaseOrdersByFilters",
+ value: function () {
+ var _getSupplierPurchaseOrdersByFilters = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee22(filtersJson) {
+ return _regeneratorRuntime().wrap(function _callee22$(_context22) {
+ while (1) switch (_context22.prev = _context22.next) {
+ case 0:
+ API.goToHash(hashPageStoreSupplierPurchaseOrders, filtersJson);
+ case 1:
+ case "end":
+ return _context22.stop();
+ }
+ }, _callee22);
+ }));
+ function getSupplierPurchaseOrdersByFilters(_x26) {
+ return _getSupplierPurchaseOrdersByFilters.apply(this, arguments);
+ }
+ return getSupplierPurchaseOrdersByFilters;
+ }()
+ }, {
+ key: "saveSupplierPurchaseOrders",
+ value: function () {
+ var _saveSupplierPurchaseOrders = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee23(supplierPurchaseOrders, formFilters, comment) {
+ var dataRequest;
+ return _regeneratorRuntime().wrap(function _callee23$(_context23) {
+ while (1) switch (_context23.prev = _context23.next) {
+ case 0:
+ dataRequest = {};
+ dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
+ dataRequest[flagSupplierPurchaseOrder] = supplierPurchaseOrders;
+ dataRequest[flagComment] = comment;
+ _context23.next = 6;
+ return API.request(hashSaveStoreSupplierPurchaseOrder, 'POST', dataRequest);
+ case 6:
+ return _context23.abrupt("return", _context23.sent);
+ case 7:
+ case "end":
+ return _context23.stop();
+ }
+ }, _callee23);
+ }));
+ function saveSupplierPurchaseOrders(_x27, _x28, _x29) {
+ return _saveSupplierPurchaseOrders.apply(this, arguments);
+ }
+ return saveSupplierPurchaseOrders;
+ }() // manufacturing purchase orders
+ }, {
+ key: "getManufacturingPurchaseOrders",
+ value: function () {
+ var _getManufacturingPurchaseOrders = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee24() {
+ return _regeneratorRuntime().wrap(function _callee24$(_context24) {
+ while (1) switch (_context24.prev = _context24.next) {
+ case 0:
+ _context24.next = 2;
+ return API.request(hashGetStoreManufacturingPurchaseOrder);
+ case 2:
+ return _context24.abrupt("return", _context24.sent);
+ case 3:
+ case "end":
+ return _context24.stop();
+ }
+ }, _callee24);
+ }));
+ function getManufacturingPurchaseOrders() {
+ return _getManufacturingPurchaseOrders.apply(this, arguments);
+ }
+ return getManufacturingPurchaseOrders;
+ }()
+ }, {
+ key: "getManufacturingPurchaseOrdersByFilters",
+ value: function () {
+ var _getManufacturingPurchaseOrdersByFilters = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee25(filtersJson) {
+ return _regeneratorRuntime().wrap(function _callee25$(_context25) {
+ while (1) switch (_context25.prev = _context25.next) {
+ case 0:
+ API.goToHash(hashPageStoreManufacturingPurchaseOrders, filtersJson);
+ case 1:
+ case "end":
+ return _context25.stop();
+ }
+ }, _callee25);
+ }));
+ function getManufacturingPurchaseOrdersByFilters(_x30) {
+ return _getManufacturingPurchaseOrdersByFilters.apply(this, arguments);
+ }
+ return getManufacturingPurchaseOrdersByFilters;
+ }()
+ }, {
+ key: "saveManufacturingPurchaseOrders",
+ value: function () {
+ var _saveManufacturingPurchaseOrders = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee26(manufacturingPurchaseOrders, formFilters, comment) {
+ var dataRequest;
+ return _regeneratorRuntime().wrap(function _callee26$(_context26) {
+ while (1) switch (_context26.prev = _context26.next) {
+ case 0:
+ dataRequest = {};
+ dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
+ dataRequest[flagManufacturingPurchaseOrder] = manufacturingPurchaseOrders;
+ dataRequest[flagComment] = comment;
+ _context26.next = 6;
+ return API.request(hashSaveStoreManufacturingPurchaseOrder, 'POST', dataRequest);
+ case 6:
+ return _context26.abrupt("return", _context26.sent);
+ case 7:
+ case "end":
+ return _context26.stop();
+ }
+ }, _callee26);
+ }));
+ function saveManufacturingPurchaseOrders(_x31, _x32, _x33) {
+ return _saveManufacturingPurchaseOrders.apply(this, arguments);
+ }
+ return saveManufacturingPurchaseOrders;
+ }()
+ }]);
+}();
+/*
+
+const api = new API();
+export default api;
+
+Example of using the API
+document.addEventListener('DOMContentLoaded', () => {
+ initializeApp();
+ setupEventListeners();
+ initializeComponents();
+
+ // Example of using the API
+ API.getData('/some-endpoint')
+ .then(data => console.log('Data received:', data))
+ .catch(error => console.error('Error:', error));
+});
+*/
+
+;// 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();
+ // this.router.navigateToHash(hashPageUserLogin);
+ /*
+ let dataRequest = {};
+ dataRequest[flagCallback] = hashPageCurrent;
+ console.log('sending data to user login controller: ');
+ console.log(dataRequest);
+ */
+ // let page = this;
+ api_API.loginUser().then(function (response) {
+ if (response.Success) {
+ _this2.router.navigateToUrl(response[flagCallback], null, false); // window.app.
+ } 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[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/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) {
+ // callFilterTableContent
+ // callSaveTableContent
+
+ function TableBasePage(router) {
+ var _this;
+ base_table_classCallCheck(this, TableBasePage);
+ _this = base_table_callSuper(this, TableBasePage, [router]);
+ /*
+ if (!this.constructor.callFilterTableContent) {
+ throw new Error(`Class ${this.constructor.name} must have a static callFilterTableContent method attribute that takes a single argument - the filters as json.`);
+ }
+ if (!this.constructor.callSaveTableContent) {
+ throw new Error(`Class ${this.constructor.name} must have a static callSaveTableContent method attribute that takes 3 arguments - a list of records, the filters as json, and a comment for saving.`);
+ }
+ this.initialize();
+ // this.hookupFilters();
+ this.loadRowTable(null);
+ this.getJsonRow(null);
+ // this.hookupTableMain();
+ this.getTableRecords();
+ this.leave();
+ */
+ // this.cursorXInitial = null;
+ _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.hookupButtonsAddSaveCancel();
+ 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.areEqualDicts(filters, filtersDefault)) {
+ this.callFilterTableContent(filters);
+ }
+ }
+ }
+ }, {
+ 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.getAndLoadFilteredTableContent();
+ });
+ }
+ }, {
+ key: "getAndLoadFilteredTableContent",
+ value: function getAndLoadFilteredTableContent() {
+ var formFilters = this.getFormFilters();
+ var filtersJson = DOM.convertForm2JSON(formFilters);
+ this.leave();
+ this.callFilterTableContent(filtersJson)["catch"](function (error) {
+ return console.error('Error:', error);
+ });
+ }
+ }, {
+ key: "getFormFilters",
+ value: function getFormFilters() {
+ return document.querySelector(idFormFilters);
+ }
+ }, {
+ 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.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;
+ var formFilters = this.getFormFilters();
+ var filtersJson = DOM.convertForm2JSON(formFilters);
+ this.callFilterTableContent(filtersJson).then(function (data) {
+ if (_verbose) {
+ console.log('Table data received:', data);
+ }
+ _this4.callbackLoadTableContent(data);
+ })["catch"](function (error) {
+ return console.error('Error:', error);
+ });
+ }
+ }, {
+ key: "hookupButtonsAddSaveCancel",
+ value: function hookupButtonsAddSaveCancel() {
+ this.hookupButtonAddRowTable();
+ 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.getAndLoadFilteredTableContent();
+ } 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;
+ // let table = TableBasePage.getTableMain();
+ 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() {
+ Events.initialiseEventHandler(idFormFilters + ' button.' + flagCancel, flagInitialised, function (button) {
+ button.addEventListener("click", function (event) {
+ event.stopPropagation();
+ this.getAndLoadFilteredTableContent();
+ });
+ button.classList.add(flagCollapsed);
+ });
+ }
+ }, {
+ key: "hookupButtonAddRowTable",
+ value: function hookupButtonAddRowTable() {
+ var _this8 = this;
+ this.hookupEventHandler("click", idFormFilters + ' button.' + flagAdd, function (event, button) {
+ _this8.handleClickAddRowTable(event, button);
+ });
+ }
+ }, {
+ 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(row);
+ tbody.appendChild(row);
+ this.hookupTableMain();
+ }
+ }, {
+ key: "initialiseRowNew",
+ value: function initialiseRowNew(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: "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 = DOM.isElementDirty(element);
+ var isDirtyElement = DOM.updateAndCheckIsElementDirty(element);
+ if (_verbose) {
+ console.log({
+ isDirtyElement: isDirtyElement,
+ wasDirtyElement: wasDirtyElement,
+ wasDirtyParentRows: wasDirtyParentRows
+ });
+ }
+ if (isDirtyElement != wasDirtyElement) {
+ var td = DOM.getCellFromElement(element);
+ DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element));
+ 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.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.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.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > thead > tr > th.' + flagActive + ' button', function (event, button) {
+ handleClickRowNew(event, button);
+ });
+ }
+ }, {
+ key: "hookupButtonsRowDelete",
+ value: function hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete) {
+ var _this13 = this;
+ this.hookupEventHandler("click", selectorButtonDelete, function (event, element) {
+ _this13.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete);
+ });
+ }
+ }, {
+ key: "handleClickButtonRowDelete",
+ value: function handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete) {
+ // let row = DOM.getRowFromElement(element);
+ // row.classList.add(flagDelete);
+ var buttonAdd = element.cloneNode(false); // document.createElement("button");
+ buttonAdd.classList.remove(flagInitialised);
+ buttonAdd.classList.remove(flagDelete);
+ buttonAdd.classList.add(flagAdd);
+ buttonAdd.textContent = '+';
+ // DOM.setElementAttributeValueCurrent(buttonAdd, false);
+ element.replaceWith(buttonAdd);
+ this.handleChangeNestedElementCellTable(null, buttonAdd);
+ this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
+ this.updateAndToggleShowButtonsSaveCancel();
+ }
+ }, {
+ key: "hookupButtonsRowUndelete",
+ value: function hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete) {
+ var _this14 = this;
+ this.hookupEventHandler("click", selectorButtonUndelete, function (event, element) {
+ _this14.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete);
+ });
+ }
+ }, {
+ key: "handleClickButtonRowUndelete",
+ value: function handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete) {
+ // let row = DOM.getRowFromElement(element);
+ // row.classList.remove(flagDelete);
+ var buttonDelete = element.cloneNode(false); // document.createElement("button");
+ buttonDelete.classList.remove(flagInitialised);
+ buttonDelete.classList.remove(flagAdd);
+ buttonDelete.classList.add(flagDelete);
+ buttonDelete.textContent = 'x';
+ // DOM.setElementAttributeValueCurrent(buttonDelete, true);
+ element.replaceWith(buttonDelete);
+ this.handleChangeNestedElementCellTable(null, buttonDelete);
+ this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
+ 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 _this15 = this;
+ var ddlHookup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (cellSelector) {
+ _this15.hookupTableCellDdls(cellSelector);
+ };
+ var changeHandler = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function (event, element) {
+ _this15.handleChangeNestedElementCellTable(event, element);
+ };
+ this.hookupEventHandler("click", cellSelector, function (event, td) {
+ _this15.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 _this16 = this;
+ var changeHandler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, element) {
+ _this16.handleChangeNestedElementCellTable(event, element);
+ };
+ this.hookupEventHandler("change", ddlSelector, function (event, element) {
+ changeHandler(event, element);
+ });
+ }
+ }, {
+ key: "handleClickTableCellDdlPreview",
+ value: function handleClickTableCellDdlPreview(event, td, optionObjectList, cellSelector) {
+ var _this17 = this;
+ var ddlHookup = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (cellSelector) {
+ _this17.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';
+ debugger;
+ 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 _this18 = this;
+ var ddlHookup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (event, element) {
+ _this18.hookupTableCellDdls(event, element);
+ };
+ this.hookupEventHandler("click", cellSelector, function (event, td) {
+ var div = td.querySelector('div');
+ if (!div || div.classList.contains(flagCollapsed)) return;
+ _this18.handleClickTableCellDdlPreview(event, td, optionList, cellSelector, function (event, element) {
+ ddlHookup(event, element);
+ });
+ });
+ }
+ }, {
+ key: "hookupProductCategoryDdls",
+ value: function hookupProductCategoryDdls(ddlSelector) {
+ var _this19 = this;
+ this.hookupChangeHandlerTableCells(ddlSelector, function (event, element) {
+ _this19.handleChangeProductCategoryDdl(event, element);
+ });
+ }
+ }, {
+ key: "handleChangeProductCategoryDdl",
+ value: function handleChangeProductCategoryDdl(event, ddlCategory) {
+ this.handleChangeNestedElementCellTable(event, ddlCategory);
+ var idProductCategorySelected = DOM.getElementValueCurrent(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.hookupDdlsProductPermutationVariation();
+ this.hookupDdlsProductPermutationVariationType();
+ this.hookupButtonsProductPermutationVariationAddDelete();
+ }
+ }, {
+ key: "hookupPreviewsProductPermutationVariation",
+ value: function hookupPreviewsProductPermutationVariation() {
+ var _this20 = this;
+ this.hookupEventHandler("click", idTableMain + ' td.' + flagProductVariations, function (event, element) {
+ return _this20.handleClickProductPermutationVariationsPreview(event, element);
+ });
+ }
+ }, {
+ key: "handleClickProductPermutationVariationsPreview",
+ value: function handleClickProductPermutationVariationsPreview(event, element) {
+ var _this21 = this;
+ var tblVariations = element.querySelector('table.' + flagProductVariations);
+ if (!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.isEmpty(permutationVariations)) {
+ permutationVariations.forEach(function (permutationVariation, index) {
+ _this21.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.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(flagDelete);
+ buttonDelete.textContent = 'x';
+ 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: "hookupDdlsProductPermutationVariation",
+ value: function hookupDdlsProductPermutationVariation() {
+ this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation);
+ }
+ }, {
+ key: "hookupDdlsProductPermutationVariationType",
+ value: function hookupDdlsProductPermutationVariationType() {
+ this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariationType);
+ }
+ }, {
+ key: "hookupButtonsProductPermutationVariationAddDelete",
+ value: function hookupButtonsProductPermutationVariationAddDelete() {
+ var _this22 = this;
+ var selectorButton = idTableMain + ' td.' + flagProductVariations + ' tr.' + flagProductVariation + ' button';
+ var selectorButtonDelete = selectorButton + '.' + flagDelete;
+ var selectorButtonUndelete = selectorButton + '.' + flagAdd;
+ this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, function (event, element) {
+ _this22.handleClickButtonRowDelete(event, element);
+ _this22.updateProductPermutationVariations(element);
+ });
+ this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
+ this.hookupButtonsProductPermutationVariationAdd();
+ }
+ }, {
+ key: "hookupButtonsProductPermutationVariationAdd",
+ value: function hookupButtonsProductPermutationVariationAdd() {
+ var _this23 = this;
+ this.hookupEventHandler("click", idTableMain + ' td.' + flagProductVariations + ' button.' + flagAdd, function (event, element) {
+ _this23.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);
+ variationsCell.setAttribute(attrValueCurrent, variationPairsString);
+ DOM.isElementDirty(variationsCell);
+ }
+ }, {
+ key: "getProductPermutationVariationsText",
+ value: function getProductPermutationVariationsText(variationsTd) {
+ var rows = variationsTd.querySelectorAll('tr');
+ var variationPairsString = '';
+ var ddlVariationType, ddlVariation, idVariationType, idVariation;
+ rows.forEach(function (row, index) {
+ ddlVariationType = row.querySelector('td select.' + flagProductVariationType);
+ ddlVariation = row.querySelector('td select.' + flagProductVariation);
+ idVariationType = ddlVariationType.getAttribute(attrValueCurrent);
+ idVariation = ddlVariation.getAttribute(attrValueCurrent);
+ variationPairsString += idVariationType + ':' + idVariation + ',';
+ });
+ return variationPairsString;
+ }
+ }, {
+ key: "hookupCurrencyFields",
+ value: function hookupCurrencyFields() {
+ this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagCurrency, Utils.getListFromDict(currencies));
+ }
+ }, {
+ 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;
+ callFilterTableContent = API.getCategoriesByFilters;
+ callSaveTableContent = API.saveCategories;
+
+ constructor() {}
+ initialize() {}
+ hookupFilters() {}
+ loadRowTable(rowJson) {}
+ getJsonRow(row) {}
+ initialiseRowNew(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 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 _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { mixin_defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : 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.isEmpty(basket) && Validation.dictHasKey(basket, keyItems) && Validation.dictHasKey(basket, keyIsIncludedVAT) && Validation.dictHasKey(basket, keyIdCurrency) && 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 = _objectSpread(_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, "callFilterTableContent", api_API.getManufacturingPurchaseOrdersByFilters);
+ 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 checkboxActive = row.querySelector('td.' + flagActive + ' textarea');
+ 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] = DOM.getElementAttributeValueCurrent(checkboxActive);
+ 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 inputLatencyManufacture = tr.querySelector('td.' + flagLatencyManufacture + ' input');
+ var checkboxActive = tr.querySelector('td.' + flagActive + ' input');
+ 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[flagLatencyManufacture] = DOM.getElementAttributeValueCurrent(inputLatencyManufacture);
+ jsonRow[flagActive] = DOM.getElementAttributeValueCurrent(checkboxActive);
+ return jsonRow;
+ }
+ }, {
+ key: "initialiseRowNew",
+ value: function initialiseRowNew(row) {
+ manufacturing_purchase_orders_superPropGet(PageStoreManufacturingPurchaseOrders, "initialiseRowNew", this, 3)([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 manufacturingPurchaseOrderProductLinksList = idManufacturingPurchaseOrder > 0 ? manufacturingPurchaseOrderProductLinks[idManufacturingPurchaseOrder] : [];
+ 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");
+ manufacturingPurchaseOrderProductLinksList.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]);
+ divCategory.textContent = orderItem[flagProductCategory];
+ 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]);
+ divProduct.textContent = orderItem[flagProduct];
+ 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]);
+ divVariations.textContent = orderItem[flagProductVariations];
+ 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]);
+ 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.setElementAttributesValuesCurrentAndPrevious(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.setElementAttributesValuesCurrentAndPrevious(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]);
+ 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.setElementAttributesValuesCurrentAndPrevious(inputLatencyManufacture, orderItem[flagLatencyManufacture]);
+ tdLatencyManufacture.appendChild(inputLatencyManufacture);
+ var tdActive = document.createElement("td");
+ tdActive.classList.add(flagActive);
+ var checkboxActive = document.createElement("input");
+ checkboxActive.classList.add(flagActive);
+ checkboxActive.type = 'checkbox';
+ DOM.setElementValuesCurrentAndPrevious(checkboxActive, orderItem[flagActive]);
+ tdActive.appendChild(checkboxActive);
+ var tdDelete = document.createElement("td");
+ tdDelete.classList.add(flagDelete);
+ var buttonDelete = document.createElement("button");
+ buttonDelete.classList.add(flagDelete);
+ buttonDelete.textContent = 'x';
+ tdDelete.appendChild(buttonDelete);
+ 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);
+ tr.appendChild(tdDelete);
+ 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, "callFilterTableContent", api_API.getCategoriesByFilters);
+ 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 inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
+ 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] = DOM.getElementAttributeValueCurrent(inputActive);
+ jsonCategory[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(sliderDisplayOrder);
+ return jsonCategory;
+ }
+ }, {
+ key: "initialiseRowNew",
+ value: function initialiseRowNew(row) {
+ if (row == null) return;
+ var slidersDisplayOrder = document.querySelectorAll('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: "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, "callFilterTableContent", api_API.getProductPermutationsByFilters);
+ 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');
+ var inputCostLocalVatExcl = row.querySelector('td.' + flagCostUnitLocalVatExcl + ' input');
+ var 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 checkboxActive = row.querySelector('td.' + flagActive + ' input');
+ 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] = checkboxActive.getAttribute(attrValueCurrent);
+ return jsonRow;
+ }
+ }, {
+ key: "initialiseRowNew",
+ value: function initialiseRowNew(row) {
+ var ddlCategoryFilter = document.querySelector(idFormFilters + ' #' + attrIdProductCategory);
+ var idProductCategoryFilter = DOM.getElementValueCurrent(ddlCategoryFilter);
+ var hasCategoryFilter = !(Validation.isEmpty(idProductCategoryFilter) || idProductCategoryFilter == '0');
+ var ddlProductFilter = document.querySelector(idFormFilters + ' #' + attrIdProduct);
+ var idProductFilter = DOM.getElementValueCurrent(ddlProductFilter);
+ var hasProductFilter = !(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.hookupLatencyManufactureInputs();
+ this.hookupQuantityFields();
+ this.hookupSubscriptionFields();
+ this.hookupIdStripeProductInputs();
+ this.hookupExpirationFields();
+ this.hookupActiveCheckboxes();
+ }
+ }, {
+ 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.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("change", 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.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'));
+ } 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("change", idTableMain + ' td.' + flagCountUnitMeasurementIntervalExpirationUnsealed + ' input');
+ }
+ }, {
+ key: "hookupActiveCheckboxes",
+ value: function hookupActiveCheckboxes() {
+ this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagActive + ' 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, "callFilterTableContent", api_API.getProductsByFilters);
+ 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 inputActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
+ 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] = DOM.getElementAttributeValueCurrent(inputActive);
+ jsonProduct[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(sliderDisplayOrder);
+ return jsonProduct;
+ }
+ }, {
+ key: "initialiseRowNew",
+ value: function initialiseRowNew(row) {
+ if (row == null) return;
+ var slidersDisplayOrder = document.querySelectorAll('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: "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, "callFilterTableContent", api_API.getProductVariationsByFilters);
+ 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('td.' + flagActive + ' button');
+ var 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);
+ 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('td.' + flagActive + ' button');
+ var 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;
+ }
+ }, {
+ key: "initialiseRowNew",
+ value: function initialiseRowNew(row) {
+ product_variations_superPropGet(PageStoreProductVariations, "initialiseRowNew", this, 3)([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, function (event, td) {
+ if (!td.classList.contains(flagCollapsed)) return;
+ _this3.handleClickProductVariationsPreview(event, td);
+ });
+ }
+ }, {
+ key: "handleClickProductVariationsPreview",
+ value: function handleClickProductVariationsPreview(event, element) {
+ var _this4 = this;
+ if (_verbose) {
+ console.log("click order items preview");
+ }
+ this.toggleColumnHeaderCollapsed(flagProductVariations, false);
+ element.classList.remove(flagCollapsed);
+ var row = DOM.getRowFromElement(element);
+ var idProductVariationType = row.getAttribute(attrIdProductVariationType);
+ if (idProductVariationType == null || idProductVariationType < 1) return;
+ var productVariationType = productVariationTypes[idProductVariationType];
+ 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);
+ row.replaceChild(cellNew, cell);
+ if (_verbose) {
+ console.log("tblProductVariations: ", tblProductVariations);
+ }
+ 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 = document.createElement("td");
+ tdActive.classList.add(flagActive);
+ var buttonActive = document.createElement("button");
+ buttonActive.classList.add(flagActive);
+ buttonActive.classList.add(productVariation[flagActive] ? flagDelete : flagAdd);
+ buttonActive.textContent = productVariation[flagActive] ? 'x' : '+';
+ DOM.setElementAttributesValuesCurrentAndPrevious(buttonActive, productVariation[flagActive]);
+ tdActive.appendChild(buttonActive);
+ 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", attrIdProductVariation);
+
+;// 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, "callFilterTableContent", api_API.getStockItemsByFilters);
+ 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 checkboxActive = row.querySelector('td.' + flagActive + ' input');
+ 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] = checkboxActive.getAttribute(attrValueCurrent);
+ return jsonRow;
+ }
+ }, {
+ key: "initialiseRowNew",
+ value: function initialiseRowNew(row) {
+ stock_items_superPropGet(PageStoreStockItems, "initialiseRowNew", this, 3)([row]);
+ var ddlCategoryFilter = document.querySelector(idFormFilters + ' #' + attrIdProductCategory);
+ var idProductCategoryFilter = DOM.getElementValueCurrent(ddlCategoryFilter);
+ var hasCategoryFilter = !(Validation.isEmpty(idProductCategoryFilter) || idProductCategoryFilter == '0');
+ var ddlProductFilter = document.querySelector(idFormFilters + ' #' + attrIdProduct);
+ var idProductFilter = DOM.getElementValueCurrent(ddlProductFilter);
+ var hasProductFilter = !(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.hookupActiveCheckboxes();
+ }
+ }, {
+ 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));
+ }
+ }, {
+ key: "handleClickProductPermutationVariationsPreview",
+ value: function handleClickProductPermutationVariationsPreview(event, element) {
+ var row = DOM.getRowFromElement(element);
+ var tdProduct = row.querySelector('td.' + flagProduct);
+ var idProduct = DOM.getElementValueCurrent(tdProduct);
+ var product = products[idProduct];
+ if (!product[flagHasVariations]) return;
+ stock_items_superPropGet(PageStoreStockItems, "handleClickProductPermutationVariationsPreview", this, 3)([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, 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(flagProductVariations);
+ 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);
+ var plantJson = plants[idPlant];
+ var storageLocationJson = storageLocations[idStorageLocation];
+ 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(objectJson = plant, valueSelected = plantJson[attrIdPlant]);
+ 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(objectJson = storageLocation, valueSelected = storageLocationJson[attrIdStorageLocation]);
+ 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 parent = element.parentElement;
+ parent.innerHTML = '';
+ parent.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: "hookupActiveCheckboxes",
+ value: function hookupActiveCheckboxes() {
+ this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagActive + ' 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, "callFilterTableContent", api_API.getSuppliersByFilters);
+ 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 checkboxActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
+ 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] = DOM.getElementAttributeValueCurrent(checkboxActive);
+ 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(row) {
+ suppliers_superPropGet(PageStoreSuppliers, "initialiseRowNew", this, 3)([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 = document.createElement("td");
+ tdActive.classList.add(flagActive);
+ var checkboxActive = document.createElement("input");
+ checkboxActive.classList.add(flagActive);
+ checkboxActive.type = 'checkbox';
+ DOM.setElementValuesCurrentAndPrevious(checkboxActive, supplierAddress[flagActive]);
+ tdActive.appendChild(checkboxActive);
+ var tdDelete = document.createElement("td");
+ tdDelete.classList.add(flagDelete);
+ var buttonDelete = document.createElement("button");
+ buttonDelete.classList.add(flagDelete);
+ buttonDelete.textContent = 'x';
+ tdDelete.appendChild(buttonDelete);
+ 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);
+ tr.appendChild(tdDelete);
+ 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/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]];
+ var productVariation = productVariations[parts[1]];
+ if (productVariationType && productVariation) {
+ productVariations.push([productVariationType, productVariation]);
+ }
+ }
+ });
+ return productVariations;
+ }
+ }, {
+ key: "getProductVariationsPreviewFromIdCsv",
+ value: function getProductVariationsPreviewFromIdCsv(csvVariations) {
+ var variations = ProductPermutation.getProductVariationsFromIdCsv(csvVariations);
+ var preview = '';
+ if (variations.length == 0) return preview;
+ variations.forEach(function (variation) {
+ if (preview.length > 0) {
+ preview += '\n';
+ }
+ preview += variation[0] + ': ' + variation[1] + ', ';
+ });
+ return preview;
+ }
+ }]);
+}();
+
+;// 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, "callFilterTableContent", api_API.getSupplierPurchaseOrdersByFilters);
+ 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 checkboxActive = row.querySelector('td.' + flagActive + ' input[type="checkbox"]');
+ 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] = DOM.getElementAttributeValueCurrent(checkboxActive);
+ 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 checkboxActive = tr.querySelector('td.' + flagActive + ' input');
+ 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] = DOM.getElementAttributeValueCurrent(checkboxActive);
+ return jsonRow;
+ }
+ }, {
+ key: "initialiseRowNew",
+ value: function initialiseRowNew(row) {
+ supplier_purchase_orders_superPropGet(PageStoreSupplierPurchaseOrders, "initialiseRowNew", this, 3)([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 + ' 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 idSupplierPurchaseOrder = row.getAttribute(attrIdSupplierPurchaseOrder);
+ if (idSupplierPurchaseOrder == null || idSupplierPurchaseOrder < 1) return;
+ var supplierPurchaseOrder = supplierPurchaseOrders[idSupplierPurchaseOrder];
+ 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);
+ 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[attrIdProductVariation]);
+ var divVariations = document.createElement("div");
+ divVariations.classList.add(flagProductVariations);
+ DOM.setElementAttributesValuesCurrentAndPrevious(divVariations, orderItem[attrIdProductVariation]);
+ // 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, orderItem[flagCostUnitLocalVatExcl].toFixed(3));
+ tdCostUnitLocalVatExcl.appendChild(divCostUnitLocalVatExcl);
+ var tdCostUnitLocalVatIncl = document.createElement("td");
+ tdCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
+ var divCostUnitLocalVatIncl = document.createElement("div");
+ divCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl);
+ DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, orderItem[flagCostUnitLocalVatIncl].toFixed(3));
+ 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 = document.createElement("td");
+ tdActive.classList.add(flagActive);
+ var checkboxActive = document.createElement("input");
+ checkboxActive.classList.add(flagActive);
+ checkboxActive.type = 'checkbox';
+ DOM.setElementValuesCurrentAndPrevious(checkboxActive, orderItem[flagActive]);
+ tdActive.appendChild(checkboxActive);
+ var tdDelete = document.createElement("td");
+ tdDelete.classList.add(flagDelete);
+ var buttonDelete = document.createElement("button");
+ buttonDelete.classList.add(flagDelete);
+ buttonDelete.textContent = 'x';
+ tdDelete.appendChild(buttonDelete);
+ 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);
+ tr.appendChild(tdDelete);
+ 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));
+ }
+ */
+ }, {
+ key: "hookupDdlsProductPermutationVariation",
+ value: function hookupDdlsProductPermutationVariation() {
+ this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation);
+ }
+ }, {
+ key: "hookupDdlsProductPermutationVariationType",
+ value: function 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
+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); } }
+function privacy_policy_createClass(e, r, t) { return r && privacy_policy_defineProperties(e.prototype, r), t && privacy_policy_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function privacy_policy_callSuper(t, o, e) { return o = privacy_policy_getPrototypeOf(o), privacy_policy_possibleConstructorReturn(t, privacy_policy_isNativeReflectConstruct() ? Reflect.construct(o, e || [], privacy_policy_getPrototypeOf(t).constructor) : o.apply(t, e)); }
+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_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); }
+function privacy_policy_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 && privacy_policy_setPrototypeOf(t, e); }
+function privacy_policy_setPrototypeOf(t, e) { return privacy_policy_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, privacy_policy_setPrototypeOf(t, e); }
+function privacy_policy_defineProperty(e, r, t) { return (r = privacy_policy_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function privacy_policy_toPropertyKey(t) { var i = privacy_policy_toPrimitive(t, "string"); return "symbol" == privacy_policy_typeof(i) ? i : i + ""; }
+function privacy_policy_toPrimitive(t, r) { if ("object" != privacy_policy_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != privacy_policy_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var PagePrivacyPolicy = /*#__PURE__*/function (_BasePage) {
+ function PagePrivacyPolicy(router) {
+ privacy_policy_classCallCheck(this, PagePrivacyPolicy);
+ return privacy_policy_callSuper(this, PagePrivacyPolicy, [router]);
+ }
+ privacy_policy_inherits(PagePrivacyPolicy, _BasePage);
+ return privacy_policy_createClass(PagePrivacyPolicy, [{
+ key: "initialize",
+ value: function initialize() {
+ this.sharedInitialize();
+ }
+ }, {
+ key: "leave",
+ value: function leave() {
+ privacy_policy_superPropGet(PagePrivacyPolicy, "leave", this, 3)([]);
+ }
+ }]);
+}(BasePage);
+privacy_policy_defineProperty(PagePrivacyPolicy, "hash", hashPagePrivacyPolicy);
+
+;// CONCATENATED MODULE: ./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); } }
+function retention_schedule_createClass(e, r, t) { return r && retention_schedule_defineProperties(e.prototype, r), t && retention_schedule_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function retention_schedule_callSuper(t, o, e) { return o = retention_schedule_getPrototypeOf(o), retention_schedule_possibleConstructorReturn(t, retention_schedule_isNativeReflectConstruct() ? Reflect.construct(o, e || [], retention_schedule_getPrototypeOf(t).constructor) : o.apply(t, e)); }
+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_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); }
+function retention_schedule_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 && retention_schedule_setPrototypeOf(t, e); }
+function retention_schedule_setPrototypeOf(t, e) { return retention_schedule_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, retention_schedule_setPrototypeOf(t, e); }
+function retention_schedule_defineProperty(e, r, t) { return (r = retention_schedule_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
+function retention_schedule_toPropertyKey(t) { var i = retention_schedule_toPrimitive(t, "string"); return "symbol" == retention_schedule_typeof(i) ? i : i + ""; }
+function retention_schedule_toPrimitive(t, r) { if ("object" != retention_schedule_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != retention_schedule_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+var PageRetentionSchedule = /*#__PURE__*/function (_BasePage) {
+ function PageRetentionSchedule(router) {
+ retention_schedule_classCallCheck(this, PageRetentionSchedule);
+ return retention_schedule_callSuper(this, PageRetentionSchedule, [router]);
+ }
+ retention_schedule_inherits(PageRetentionSchedule, _BasePage);
+ return retention_schedule_createClass(PageRetentionSchedule, [{
+ key: "initialize",
+ value: function initialize() {
+ this.sharedInitialize();
+ }
+ }, {
+ key: "leave",
+ value: function leave() {
+ retention_schedule_superPropGet(PageRetentionSchedule, "leave", this, 3)([]);
+ }
+ }]);
+}(BasePage);
+retention_schedule_defineProperty(PageRetentionSchedule, "hash", hashPageDataRetentionSchedule);
+
+;// CONCATENATED MODULE: ./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); } }
+function router_createClass(e, r, t) { return r && router_defineProperties(e.prototype, r), t && router_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function router_toPropertyKey(t) { var i = router_toPrimitive(t, "string"); return "symbol" == router_typeof(i) ? i : i + ""; }
+function router_toPrimitive(t, r) { if ("object" != router_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != router_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+// Pages
+// 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";
+*/
+
+
+
+
+
+
+// Create a context for the pages
+// const pagesContext = require.context('./pages', true, /\.js$/);
+
+/*
+const pageModules = {
+ // Core
+ [hashPageHome]: () => import('./pages/core/home.js'),
+ [hashPageContact]: () => import('./pages/core/contact.js'),
+ [hashPageServices]: () => import('./pages/core/services.js'),
+ [hashPageAdminHome]: () => import('./pages/core/admin_home.js'),
+ // 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...
+};
+*/
+var Router = /*#__PURE__*/function () {
+ function Router() {
+ var _this = this;
+ router_classCallCheck(this, 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[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' };
+ // this.pages[hashPageUserAccount] = { name: 'PageUserAccount', module: PageUserAccount }; // pathModule: './pages/user/account.js' };
+
+ // Routes
+ this.routes = {};
+ // Core
+ this.routes[hashPageHome] = function () {
+ var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+ return _this.navigateToHash(hashPageHome, isPopState);
+ };
+ this.routes[hashPageContact] = 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;
+ return _this.navigateToHash(hashPageAccessibilityStatement, isPopState);
+ };
+ this.routes[hashPageDataRetentionSchedule] = function () {
+ var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+ return _this.navigateToHash(hashPageDataRetentionSchedule, isPopState);
+ };
+ this.routes[hashPageLicense] = function () {
+ var isPopState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
+ return _this.navigateToHash(hashPageLicense, isPopState);
+ };
+ this.routes[hashPagePrivacyPolicy] = 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);
+ // this.routes[hashPageUserAccount] = (isPopState = false) => this.navigateToHash(hashPageUserAccount, isPopState);
+ this.initialize();
+ }
+ return router_createClass(Router, [{
+ key: "loadPage",
+ value: function loadPage(hashPage) {
+ var _this2 = this;
+ var isPopState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
+ var PageClass = this.getClassPageFromHash(hashPage);
+ this.currentPage = new PageClass(this);
+ this.currentPage.initialize(isPopState);
+ window.addEventListener('beforeunload', function () {
+ return _this2.currentPage.leave();
+ });
+ }
+ }, {
+ key: "getClassPageFromHash",
+ value: function getClassPageFromHash(hashPage) {
+ var pageJson = this.pages[hashPage];
+ try {
+ /*
+ const module = await pagesContext(pageJson.pathModule);
+ console.log("module: ", module);
+ return module[pageJson.name];
+ */
+ // const module = await import(pageJson.pathModule); // pageJson.page;
+ // const module = () => import(pageJson.pathModule);
+ var module = pageJson.module; // importModule;
+ return module; // [pageJson.name];
+ } catch (error) {
+ if (_verbose) {
+ console.log("this.pages: ", this.pages);
+ }
+ ;
+ console.error('Page not found:', hashPage);
+ throw error;
+ }
+ }
+ }, {
+ key: "initialize",
+ value: function initialize() {
+ /*
+ let pages = Router.getPages();
+ for (const key of Object.keys(pages)) {
+ let page = pages[key];
+ this.addRoute(page.hash, page.initialize);
+ }
+ */
+ window.addEventListener('popstate', this.handlePopState.bind(this)); // page accessed by history navigation
+ }
+ }, {
+ key: "handlePopState",
+ value: function handlePopState(event) {
+ this.loadPageCurrent();
+ }
+ }, {
+ key: "loadPageCurrent",
+ value: function loadPageCurrent() {
+ var hashPageCurrent = DOM.getHashPageCurrent();
+ this.loadPage(hashPageCurrent);
+ }
+ }, {
+ key: "navigateToHash",
+ value: function navigateToHash(hash) {
+ var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+ var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
+ var isPopState = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+ // this.beforeLeave();
+ /*
+ if (this.routes[hash]) {
+ this.routes[hash](isPopState);
+ } else {
+ console.error(`Hash ${hash} not found`);
+ }
+ */
+ var url = api_API.getUrlFromHash(hash, params);
+ // if (!isPopState)
+ history.pushState({
+ data: data,
+ params: params
+ }, '', hash);
+ api_API.goToUrl(url, data);
+ }
+ /* beforeunload listener
+ async beforeLeave() {
+ const ClassPageCurrent = await this.getClassPageFromHash(DOM.getHashPageCurrent());
+ const pageCurrent = new ClassPageCurrent(this);
+ pageCurrent.leave();
+ }
+ */
+ }, {
+ key: "navigateToUrl",
+ value: function navigateToUrl(url) {
+ var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+ 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);
+ }
+
+ /*
+ 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) {
+ DOM.loadPageBody(response.data);
+ }
+ }]);
+}(); // Create and export a singleton instance
+
+var router = new Router();
+// import this for navigation
+
+// Usage example (you can put this in your main.js or app.js)
+/*
+router.addRoute('/', () => {
+ console.log('Home page');
+ // Load home page content
+});
+
+router.addRoute('/about', () => {
+ console.log('About page');
+ // Load about page content
+});
+
+// Example of how to use the router in other parts of your application
+export function setupNavigationEvents() {
+ document.querySelectorAll('a[data-nav]').forEach(link => {
+ link.addEventListener('click', (e) => {
+ e.preventDefault();
+ const url = e.target.getAttribute('href');
+ router.navigateToUrl(url);
+ });
+ });
+}
+*/
+;// 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';
+*/
+
+// Main entry point for the application
+
+
+// import API from './api.js';
+function app_typeof(o) { "@babel/helpers - typeof"; return app_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; }, app_typeof(o); }
+function app_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
+function app_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, app_toPropertyKey(o.key), o); } }
+function app_createClass(e, r, t) { return r && app_defineProperties(e.prototype, r), t && app_defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
+function app_toPropertyKey(t) { var i = app_toPrimitive(t, "string"); return "symbol" == app_typeof(i) ? i : i + ""; }
+function app_toPrimitive(t, r) { if ("object" != app_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != app_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+
+
+var App = /*#__PURE__*/function () {
+ function App() {
+ app_classCallCheck(this, App);
+ this.dom = new DOM();
+ this.router = new Router();
+ }
+ return app_createClass(App, [{
+ key: "initialize",
+ value: function initialize() {
+ this.setupEventListeners();
+ this.start();
+ }
+ }, {
+ key: "setupEventListeners",
+ value: function setupEventListeners() {
+ // Global event listeners
+ // document.addEventListener('click', this.handleGlobalClick.bind(this));
+ // Add more global event listeners as needed
+ }
+ }, {
+ key: "handleGlobalClick",
+ value: function handleGlobalClick(event) {
+ // Handle global click events
+ }
+ }, {
+ key: "start",
+ value: function start() {
+ // Additional startup logic
+ this.initPageCurrent();
+ }
+ }, {
+ key: "initPageCurrent",
+ value: function initPageCurrent() {
+ /*
+ _pageCurrent = Router.getPageCurrent();
+ _pageCurrent.initialize();
+ */
+ this.router.loadPageCurrent();
+ }
+ }]);
+}(); // Application instance
+var app = new App();
+
+// DOM ready handler
+function domReady(fn) {
+ if (document.readyState !== 'loading') {
+ fn();
+ } else {
+ document.addEventListener('DOMContentLoaded', fn);
+ }
+}
+
+// Initialize and start the app when DOM is ready
+domReady(function () {
+ app.initialize();
+});
+
+// Expose app to window for debugging (optional)
+window.app = app;
+
+// Export app if using modules
+/* 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.
+(() => {
+// 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.
+(() => {
+// 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
+
+})();
+
+/******/ })()
+;
+//# sourceMappingURL=main.bundle.js.map
\ No newline at end of file
diff --git a/static/dist/js/store_home.bundle.js b/static/dist/js/store_home.bundle.js
index e69de29b..90c101bb 100644
--- a/static/dist/js/store_home.bundle.js
+++ b/static/dist/js/store_home.bundle.js
@@ -0,0 +1,17 @@
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+// 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
+
+})();
+
+/******/ })()
+;
+//# sourceMappingURL=store_home.bundle.js.map
\ No newline at end of file
diff --git a/static/dist/js/store_product_categories.bundle.js b/static/dist/js/store_product_categories.bundle.js
index e69de29b..fb29e69e 100644
--- a/static/dist/js/store_product_categories.bundle.js
+++ b/static/dist/js/store_product_categories.bundle.js
@@ -0,0 +1,17 @@
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+// 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
+
+})();
+
+/******/ })()
+;
+//# sourceMappingURL=store_product_categories.bundle.js.map
\ No newline at end of file
diff --git a/static/dist/js/store_product_permutations.bundle.js b/static/dist/js/store_product_permutations.bundle.js
index e69de29b..adb5e672 100644
--- a/static/dist/js/store_product_permutations.bundle.js
+++ b/static/dist/js/store_product_permutations.bundle.js
@@ -0,0 +1,17 @@
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+// 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
+
+})();
+
+/******/ })()
+;
+//# sourceMappingURL=store_product_permutations.bundle.js.map
\ No newline at end of file
diff --git a/static/dist/js/store_stock_items.bundle.js b/static/dist/js/store_stock_items.bundle.js
index e69de29b..d5fce4f1 100644
--- a/static/dist/js/store_stock_items.bundle.js
+++ b/static/dist/js/store_stock_items.bundle.js
@@ -0,0 +1,17 @@
+/******/ (() => { // webpackBootstrap
+/******/ "use strict";
+// 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
+
+})();
+
+/******/ })()
+;
+//# sourceMappingURL=store_stock_items.bundle.js.map
\ No newline at end of file
diff --git a/static/js/api.js b/static/js/api.js
index 25f75343..d0103433 100644
--- a/static/js/api.js
+++ b/static/js/api.js
@@ -120,6 +120,21 @@ export default class API {
return await API.request(hashSaveStoreProductPermutation, 'POST', dataRequest);
}
+ // product variations
+ static async getProductVariations() {
+ return await API.request(hashGetStoreProductVariation);
+ }
+ static async getProductVariationsByFilters(filtersJson) {
+ API.goToHash(hashPageStoreProductVariations, filtersJson);
+ }
+ static async saveProductVariations(variationTypes, formFilters, comment) {
+ let dataRequest = {};
+ dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
+ dataRequest[flagProductVariationType] = variationTypes;
+ dataRequest[flagComment] = comment;
+ return await API.request(hashSaveStoreProductVariation, 'POST', dataRequest);
+ }
+
// stock items
static async getStockItems() {
return await API.request(hashGetStoreStockItem);
diff --git a/static/js/dom.js b/static/js/dom.js
index 6dca15ff..1c11a58d 100644
--- a/static/js/dom.js
+++ b/static/js/dom.js
@@ -101,8 +101,8 @@ export default class DOM {
return container.querySelector('.' + flagDirty) != null;
}
static hasDirtyChildrenNotDeletedContainer(container) {
- if (container == null) return false;
- return container.querySelector('.' + flagDirty + ':not(.' + flagDelete + ')') != null;
+ if (container == null || container.classList.contains(flagDelete)) return false;
+ return container.querySelector('.' + flagDirty + ':not(.' + flagDelete + ', .' + flagDelete + ' *)') != null;
}
static getElementValueCurrent(element) {
let returnVal = '';
@@ -120,6 +120,9 @@ export default class DOM {
else if (element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT') {
returnVal = element.value;
}
+ else if (element.tagName === 'BUTTON' && element.classList.contains(flagActive)) {
+ returnVal = element.classList.contains(flagDelete);
+ }
else {
returnVal = element.textContent;
}
diff --git a/static/js/lib/business_objects/business_objects.js b/static/js/lib/business_objects/business_objects.js
index 987cb0cb..40fcdc90 100644
--- a/static/js/lib/business_objects/business_objects.js
+++ b/static/js/lib/business_objects/business_objects.js
@@ -24,4 +24,12 @@ export default class BusinessObjects {
static getObjectText(objectJson) {
return objectJson[objectJson[flagNameAttrOptionText]];
}
+ static getListObjectsFromIdDictAndCsv(idDict, idCsv) {
+ let listObjects = [];
+ let ids = idCsv.split(',');
+ for (let id of ids) {
+ listObjects.push(idDict[id]);
+ }
+ return listObjects;
+ }
}
\ No newline at end of file
diff --git a/static/js/pages/base_table.js b/static/js/pages/base_table.js
index 9e79bad5..01f89518 100644
--- a/static/js/pages/base_table.js
+++ b/static/js/pages/base_table.js
@@ -174,7 +174,7 @@ export default class TableBasePage extends BasePage {
let records = [];
let record;
document.querySelectorAll(idTableMain + ' > tbody > tr').forEach((row) => {
- if (dirtyOnly && !row.classList.contains(flagDirty)) return;
+ if (dirtyOnly && !DOM.hasDirtyChildrenContainer(row)) return;
record = this.getJsonRow(row);
records.push(record);
});
@@ -217,28 +217,22 @@ export default class TableBasePage extends BasePage {
});
}
hookupButtonAddRowTable() {
- this.hookupEventHandler("click", idFormFilters + ' button.' + flagAdd, (event, button) => {
- event.stopPropagation();
- let tbody = document.querySelector(idTableMain + ' tbody');
- let row = _rowBlank.cloneNode(true);
- row.classList.remove(flagInitialised);
- row.querySelectorAll('.' + flagInitialised).forEach(function(element) {
- element.classList.remove(flagInitialised);
- });
- let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;
- row.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);
- /* Shared nethods
- let newDisplayOrder = parseInt(tbody.querySelector('tr:last-child').querySelector('td.' + flagDisplayOrder + ' .' + flagSlider).getAttribute(attrValueCurrent)) + 1;
- let slider = tbody.querySelector('tr:last-child').querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);
- if (slider) {
- slider.setAttribute(attrValueCurrent, newDisplayOrder);
- slider.setAttribute(attrValuePrevious, newDisplayOrder);
- }
- */
- this.initialiseRowNew(row);
- tbody.appendChild(row);
- this.hookupTableMain();
+ this.hookupEventHandler("click", idFormFilters + ' button.' + flagAdd, (event, button) => { this.handleClickAddRowTable(event, button); });
+ }
+ handleClickAddRowTable(event, button) {
+ event.stopPropagation();
+ _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - _rowBlank.getAttribute(this.constructor.attrIdRowObject));
+ let tbody = document.querySelector(idTableMain + ' tbody');
+ let row = _rowBlank.cloneNode(true);
+ row.classList.remove(flagInitialised);
+ row.querySelectorAll('.' + flagInitialised).forEach(function(element) {
+ element.classList.remove(flagInitialised);
});
+ let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;
+ row.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);
+ this.initialiseRowNew(row);
+ tbody.appendChild(row);
+ this.hookupTableMain();
}
initialiseRowNew(row) {
if (this.constructor === TableBasePage) {
@@ -260,10 +254,12 @@ export default class TableBasePage extends BasePage {
let selectorRowNew = idTableMain + ' tbody tr.' + flagRowNew;
let rowBlankTemp = document.querySelector(selectorRowNew);
if (_verbose) { console.log("row blank temp: ", rowBlankTemp); }
+ let 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);
}
hookupSlidersDisplayOrderTable() {
let selectorDisplayOrder = idTableMain + ' tbody tr td.' + flagDisplayOrder + ' input.' + flagSlider + '.' + flagDisplayOrder;
@@ -299,12 +295,12 @@ export default class TableBasePage extends BasePage {
handleChangeElementCellTable(event, element) {
let row = DOM.getRowFromElement(element);
let td = DOM.getCellFromElement(element);
- let wasDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);
+ 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.hasDirtyChildrenNotDeletedContainer(row);
+ let isNowDirtyRow = DOM.hasDirtyChildrenContainer(row);
if (isNowDirtyRow != wasDirtyRow) {
DOM.handleDirtyElement(row, isNowDirtyRow);
let rows = this.getTableRecords(true);
@@ -326,12 +322,12 @@ export default class TableBasePage extends BasePage {
}
let row = DOM.getRowFromElement(element);
let td = DOM.getCellFromElement(element);
- let wasDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);
+ 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.hasDirtyChildrenNotDeletedContainer(row);
+ let isNowDirtyRow = DOM.hasDirtyChildrenContainer(row);
if (isNowDirtyRow != wasDirtyRow) {
DOM.handleDirtyElement(row, isNowDirtyRow);
let rows = this.getTableRecords(true);
@@ -345,18 +341,18 @@ export default class TableBasePage extends BasePage {
let rowTable = rowSubtable.closest(idTableMain + ' > tbody > tr');
let td = DOM.getCellFromElement(element);
// let tdSubtable = td.closest('td.' + flagFieldSubtable);
- let wasDirtyRowSubtable = DOM.hasDirtyChildrenNotDeletedContainer(rowSubtable);
- let wasDirtyRowTable = DOM.hasDirtyChildrenNotDeletedContainer(rowTable);
+ 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.hasDirtyChildrenNotDeletedContainer(rowSubtable);
+ let isNowDirtyRowSubtable = DOM.hasDirtyChildrenContainer(rowSubtable);
console.log({isNowDirtyRowSubtable, wasDirtyRowSubtable});
if (isNowDirtyRowSubtable != wasDirtyRowSubtable) {
DOM.handleDirtyElement(rowSubtable, isNowDirtyRowSubtable);
- let isNowDirtyRowTable = DOM.hasDirtyChildrenNotDeletedContainer(rowTable);
+ let isNowDirtyRowTable = DOM.hasDirtyChildrenContainer(rowTable);
console.log({isNowDirtyRowTable, wasDirtyRowTable});
if (isNowDirtyRowTable != wasDirtyRowTable) {
DOM.handleDirtyElement(rowTable, isNowDirtyRowTable);
@@ -370,13 +366,14 @@ export default class TableBasePage extends BasePage {
*/
handleChangeNestedElementCellTable(event, element) {
let wasDirtyParentRows = this.getAllIsDirtyRowsInParentTree(element);
- let wasDirtyElement = element.classList.contains(flagDirty);
+ let wasDirtyElement = DOM.isElementDirty(element);
let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);
if (_verbose) { console.log({isDirtyElement, wasDirtyElement, wasDirtyParentRows}); }
if (isDirtyElement != wasDirtyElement) {
let td = DOM.getCellFromElement(element);
DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element));
- this.toggleShowButtonsSaveCancel(isDirtyElement);
+ DOM.handleDirtyElement(td, isDirtyElement);
+ this.updateAndToggleShowButtonsSaveCancel();
this.cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows);
}
}
@@ -396,15 +393,15 @@ export default class TableBasePage extends BasePage {
cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows) {
if (Validation.isEmpty(wasDirtyParentRows)) return;
let td = DOM.getCellFromElement(element);
- let isDirtyTd = isDirtyElement || DOM.hasDirtyChildrenNotDeletedContainer(tr);
+ let isDirtyTd = isDirtyElement || DOM.hasDirtyChildrenContainer(tr);
DOM.handleDirtyElement(td, isDirtyTd);
let tr = DOM.getRowFromElement(td);
- let isDirtyRow = isDirtyTd || DOM.hasDirtyChildrenNotDeletedContainer(tr);
- let wasDirtyRow = wasDirtyParentRows.pop();
+ let isDirtyRow = isDirtyTd || DOM.hasDirtyChildrenContainer(tr);
+ let wasDirtyRow = wasDirtyParentRows.shift();
if (_verbose) { console.log({isDirtyRow, wasDirtyRow}); }
if (isDirtyRow != wasDirtyRow) {
DOM.handleDirtyElement(tr, isDirtyRow);
- this.toggleShowButtonsSaveCancel(isDirtyRow);
+ this.updateAndToggleShowButtonsSaveCancel();
this.cascadeChangedIsDirtyNestedElementCellTable(tr.parentElement, isDirtyRow, wasDirtyParentRows);
}
}
@@ -480,8 +477,18 @@ export default class TableBasePage extends BasePage {
hookupTextareasDescriptionTable() {
this.hookupChangeHandlerTableCells(idTableMain + ' tbody tr td.' + flagDescription + ' textarea');
}
- hookupInputsActiveTable() {
- this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagActive + ' input[type="checkbox"]');
+ hookupFieldsActive(flagTable = '', handleClickRowNew = (event, element) => { this.handleClickAddRowTable(event, element); }) {
+ let selectorButton = 'table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody > tr > td.' + flagActive + ' button';
+ let selectorButtonDelete = selectorButton + '.' + flagDelete;
+ let selectorButtonUndelete = selectorButton + ':not(.' + flagDelete + ')';
+ console.log("hookupFieldsActive: ", selectorButtonDelete, selectorButtonUndelete);
+ this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
+ this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
+ this.hookupEventHandler(
+ "click"
+ , 'table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > thead > tr > th.' + flagActive + ' button'
+ , (event, button) => { handleClickRowNew(event, button); }
+ );
}
hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete) {
this.hookupEventHandler("click", selectorButtonDelete, (event, element) => {
@@ -489,14 +496,18 @@ export default class TableBasePage extends BasePage {
});
}
handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete) {
- let row = DOM.getRowFromElement(element);
- row.classList.add(flagDelete);
-
- let buttonAdd = document.createElement("button");
+ // let row = DOM.getRowFromElement(element);
+ // row.classList.add(flagDelete);
+ let buttonAdd = element.cloneNode(false); // document.createElement("button");
+ buttonAdd.classList.remove(flagInitialised);
+ buttonAdd.classList.remove(flagDelete);
buttonAdd.classList.add(flagAdd);
buttonAdd.textContent = '+';
+ // DOM.setElementAttributeValueCurrent(buttonAdd, false);
element.replaceWith(buttonAdd);
+ this.handleChangeNestedElementCellTable(null, buttonAdd);
this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);
+ this.updateAndToggleShowButtonsSaveCancel();
}
hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete) {
this.hookupEventHandler("click", selectorButtonUndelete, (event, element) => {
@@ -504,14 +515,18 @@ export default class TableBasePage extends BasePage {
});
}
handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete) {
- let row = DOM.getRowFromElement(element);
- row.classList.add(flagDelete);
-
- let buttonAdd = document.createElement("button");
- buttonAdd.classList.add(flagAdd);
- buttonAdd.textContent = '+';
- element.replaceWith(buttonAdd);
+ // let row = DOM.getRowFromElement(element);
+ // row.classList.remove(flagDelete);
+ let buttonDelete = element.cloneNode(false); // document.createElement("button");
+ buttonDelete.classList.remove(flagInitialised);
+ buttonDelete.classList.remove(flagAdd);
+ buttonDelete.classList.add(flagDelete);
+ buttonDelete.textContent = 'x';
+ // DOM.setElementAttributeValueCurrent(buttonDelete, true);
+ element.replaceWith(buttonDelete);
+ this.handleChangeNestedElementCellTable(null, buttonDelete);
this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);
+ this.updateAndToggleShowButtonsSaveCancel();
}
hookupTdsAccessLevel() {
let cellSelector = idTableMain + ' tbody td.' + flagAccessLevel;
@@ -571,7 +586,7 @@ export default class TableBasePage extends BasePage {
let row = DOM.getRowFromElement(ddl);
let td = DOM.getCellFromElement(ddl);
console.log("td: ", td);
- let wasDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);
+ let wasDirtyRow = DOM.hasDirtyChildrenContainer(row);
let wasDirtyElement = ddl.classList.contains(flagDirty);
let isDirtyElement = DOM.updateAndCheckIsElementDirty(ddl);
console.log("isDirtyElement: ", isDirtyElement);
@@ -580,7 +595,7 @@ export default class TableBasePage extends BasePage {
DOM.handleDirtyElement(td, isDirtyElement);
let optionSelected = ddl.options[ddl.selectedIndex];
DOM.setElementAttributeValueCurrent(td, optionSelected.value);
- let isNowDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);
+ let isNowDirtyRow = DOM.hasDirtyChildrenContainer(row);
console.log("isNowDirtyRow: ", isNowDirtyRow);
console.log("wasDirtyRow: ", wasDirtyRow);
if (isNowDirtyRow != wasDirtyRow) {
@@ -885,16 +900,24 @@ export default class TableBasePage extends BasePage {
let 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);
});
+ */
}
toggleColumnHeaderHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {
let table = TableBasePage.getTableMain();
let columnTh = table.querySelector('th.' + columnFlag);
DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);
}
+
+ updateAndToggleShowButtonsSaveCancel() {
+ let records = this.getTableRecords(true);
+ let existsDirtyRecord = records.length > 0;
+ this.toggleShowButtonsSaveCancel(existsDirtyRecord);
+ }
}
diff --git a/static/js/pages/store/manufacturing_purchase_orders.js b/static/js/pages/store/manufacturing_purchase_orders.js
index 20e6d912..fac796f2 100644
--- a/static/js/pages/store/manufacturing_purchase_orders.js
+++ b/static/js/pages/store/manufacturing_purchase_orders.js
@@ -92,7 +92,7 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage
this.hookupCurrencyFields();
this.hookupCostAndPriceInputs();
this.hookupOrderItemsFields();
- this.hookupInputsActiveTable();
+ this.hookupFieldsActive();
}
hookupCostAndPriceInputs() {
this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatExcl + ' input');
diff --git a/static/js/pages/store/product_categories.js b/static/js/pages/store/product_categories.js
index 3717054c..8035287c 100644
--- a/static/js/pages/store/product_categories.js
+++ b/static/js/pages/store/product_categories.js
@@ -102,7 +102,7 @@ export default class PageStoreProductCategories extends TableBasePage {
this.hookupTextareasNameTable();
this.hookupTextareasDescriptionTable();
this.hookupTdsAccessLevel();
- this.hookupInputsActiveTable();
+ this.hookupFieldsActive();
}
/*
diff --git a/static/js/pages/store/product_variations.js b/static/js/pages/store/product_variations.js
new file mode 100644
index 00000000..1eecad3e
--- /dev/null
+++ b/static/js/pages/store/product_variations.js
@@ -0,0 +1,245 @@
+
+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 = attrIdProductVariation;
+ callFilterTableContent = API.getProductVariationsByFilters;
+ 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('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('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(row) {
+ super.initialiseRowNew(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, (event, td) => {
+ if (!td.classList.contains(flagCollapsed)) return;
+ this.handleClickProductVariationsPreview(event, td);
+ });
+ }
+ handleClickProductVariationsPreview(event, element) {
+ if (_verbose) { console.log("click order items preview"); }
+ this.toggleColumnHeaderCollapsed(flagProductVariations, false);
+ element.classList.remove(flagCollapsed);
+
+ let row = DOM.getRowFromElement(element);
+ let idProductVariationType = row.getAttribute(attrIdProductVariationType);
+ if (idProductVariationType == null || idProductVariationType < 1) return;
+ let productVariationType = productVariationTypes[idProductVariationType];
+ 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);
+ row.replaceChild(cellNew, cell);
+ if (_verbose) { console.log("tblProductVariations: ", tblProductVariations); }
+ 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 = document.createElement("td");
+ tdActive.classList.add(flagActive);
+ let buttonActive = document.createElement("button");
+ buttonActive.classList.add(flagActive);
+ buttonActive.classList.add(productVariation[flagActive] ? flagDelete : flagAdd);
+ buttonActive.textContent = productVariation[flagActive] ? 'x' : '+';
+ DOM.setElementAttributesValuesCurrentAndPrevious(buttonActive, productVariation[flagActive]);
+ tdActive.appendChild(buttonActive);
+
+ 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
index 92d436c8..f04e7fe9 100644
--- a/static/js/pages/store/products.js
+++ b/static/js/pages/store/products.js
@@ -105,7 +105,7 @@ export default class PageStoreProducts extends TableBasePage {
this.hookupTextareasNameTable();
this.hookupInputsHasVariationsTable();
this.hookupTdsAccessLevel();
- this.hookupInputsActiveTable();
+ this.hookupFieldsActive();
}
hookupTdsProductCategory() {
let cellSelector = idTableMain + ' tbody td.' + flagProductCategory;
diff --git a/static/js/pages/store/supplier_purchase_orders.js b/static/js/pages/store/supplier_purchase_orders.js
index a72d8880..e76a3303 100644
--- a/static/js/pages/store/supplier_purchase_orders.js
+++ b/static/js/pages/store/supplier_purchase_orders.js
@@ -97,7 +97,7 @@ export default class PageStoreSupplierPurchaseOrders extends TableBasePage {
this.hookupCurrencyFields();
this.hookupCostInputs();
this.hookupOrderItemsFields();
- this.hookupInputsActiveTable();
+ this.hookupFieldsActive();
}
hookupSupplierFields() {
this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagSupplier, Utils.getListFromDict(suppliers));
diff --git a/static/js/pages/store/suppliers.js b/static/js/pages/store/suppliers.js
index 87c9531d..97c3248e 100644
--- a/static/js/pages/store/suppliers.js
+++ b/static/js/pages/store/suppliers.js
@@ -100,7 +100,7 @@ export default class PageStoreSuppliers extends TableBasePage {
this.hookupEmailInputs();
this.hookupWebsiteInputs();
this.hookupCurrencyFields();
- this.hookupInputsActiveTable();
+ this.hookupFieldsActive();
}
hookupNameCompanyInputs() {
this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagNameCompany + ' textarea');
diff --git a/static/js/router.js b/static/js/router.js
index bc4690f9..bbda72a8 100644
--- a/static/js/router.js
+++ b/static/js/router.js
@@ -17,7 +17,7 @@ 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 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';
@@ -85,7 +85,7 @@ export default class Router {
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[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 };
@@ -112,7 +112,7 @@ export default class Router {
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[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);
diff --git a/templates/components/store/_preview_product_variation_type_variations.html b/templates/components/store/_preview_product_variation_type_variations.html
new file mode 100644
index 00000000..fce5fdcd
--- /dev/null
+++ b/templates/components/store/_preview_product_variation_type_variations.html
@@ -0,0 +1,21 @@
+
+{% with _is_blank_row = (is_blank_row or variation_type is not defined or variation_type.variations is none or variation_type.variations == [] or is_blank_row is not defined) %}
+ {% if not _is_blank_row %}
+ {# {% set ids_variation = variation_type.get_str_list_ids_variation() %} #}
+
+ {#
+ {{ variation_type.get_preview_variations() }}
+ #}
+ {% for variation in variation_type.variations %}
+ {{ variation.name }}
+ {% endfor %}
+
+ {% else %}
+
+ {% endif %}
+{% endwith %}
\ No newline at end of file
diff --git a/templates/components/store/_preview_product_variation_types.html b/templates/components/store/_preview_product_variation_types.html
index 879de518..c24e8489 100644
--- a/templates/components/store/_preview_product_variation_types.html
+++ b/templates/components/store/_preview_product_variation_types.html
@@ -1,6 +1,6 @@
{% with _is_blank_row = (is_blank_row or variation_tree is not defined or is_blank_row is not defined) %}
- {% if not is_blank_row %}
+ {% if not _is_blank_row %}
{# % set json_str_variation_types = product.get_json_str_types_variation_trees() % #}
{% set names_variation_type = product.get_variation_types_unique() %}
{% set json_str_variation_types = jsonify(names_variation_type) %}
diff --git a/templates/components/store/_row_product.html b/templates/components/store/_row_product.html
index 32c69613..5778b449 100644
--- a/templates/components/store/_row_product.html
+++ b/templates/components/store/_row_product.html
@@ -1,5 +1,5 @@
{% if is_blank_row %}
-
+
{% include 'components/common/buttons/_slider_display_order.html' %}
diff --git a/templates/components/store/_row_product_variation_type.html b/templates/components/store/_row_product_variation_type.html
new file mode 100644
index 00000000..e946844b
--- /dev/null
+++ b/templates/components/store/_row_product_variation_type.html
@@ -0,0 +1,65 @@
+{% if is_blank_row %}
+
+
+ {% include 'components/common/buttons/_slider_display_order.html' %}
+
+
+
+
+
+
+
+
+
+
+
+ {% include 'components/store/_preview_product_variation_type_variations.html' %}
+
+
+ {#
+
+ #}
+ x
+
+
+{% else %}
+
+
+ {% set display_order = variation_type.display_order %}
+ {% include 'components/common/buttons/_slider_display_order.html' %}
+
+
+
+
+
+
+
+
+
+
+
+ {% include 'components/store/_preview_product_variation_type_variations.html' %}
+
+
+ {#
+
+ #}
+ {% if variation_type.active %}x{% else %}+{% endif %}
+
+
+{% endif %}
diff --git a/templates/js/sections/store.js b/templates/js/sections/store.js
index 01f80f0a..1aed253a 100644
--- a/templates/js/sections/store.js
+++ b/templates/js/sections/store.js
@@ -108,6 +108,7 @@ var hashGetStoreManufacturingPurchaseOrder = "{{ model.HASH_GET_STORE_MANUFACTUR
var hashGetStoreProduct = "{{ model.HASH_GET_STORE_PRODUCT }}";
var hashGetStoreProductCategory = "{{ model.HASH_GET_STORE_PRODUCT_CATEGORY }}";
var hashGetStoreProductPermutation = "{{ model.HASH_GET_STORE_PRODUCT_PERMUTATION }}";
+var hashGetStoreProductVariation = "{{ model.HASH_GET_STORE_PRODUCT_VARIATION }}";
var hashGetStoreStockItem = "{{ model.HASH_GET_STORE_STOCK_ITEM }}";
var hashGetStoreSupplier = "{{ model.HASH_GET_STORE_SUPPLIER }}";
var hashGetStoreSupplierPurchaseOrder = "{{ model.HASH_GET_STORE_SUPPLIER_PURCHASE_ORDER }}";
@@ -116,6 +117,7 @@ var hashSaveStoreManufacturingPurchaseOrder = "{{ model.HASH_SAVE_STORE_MANUFACT
var hashSaveStoreProduct = "{{ model.HASH_SAVE_STORE_PRODUCT }}";
var hashSaveStoreProductCategory = "{{ model.HASH_SAVE_STORE_PRODUCT_CATEGORY }}";
var hashSaveStoreProductPermutation = "{{ model.HASH_SAVE_STORE_PRODUCT_PERMUTATION }}";
+var hashSaveStoreProductVariation = "{{ model.HASH_SAVE_STORE_PRODUCT_VARIATION }}";
var hashSaveStoreStockItem = "{{ model.HASH_SAVE_STORE_STOCK_ITEM }}";
var hashSaveStoreSupplier = "{{ model.HASH_SAVE_STORE_SUPPLIER }}";
var hashSaveStoreSupplierPurchaseOrder = "{{ model.HASH_SAVE_STORE_SUPPLIER_PURCHASE_ORDER }}";
diff --git a/templates/layouts/layout.html b/templates/layouts/layout.html
index f011031f..d3a21e70 100644
--- a/templates/layouts/layout.html
+++ b/templates/layouts/layout.html
@@ -126,6 +126,7 @@
var flagName = "{{ model.FLAG_NAME }}";
var flagNameAttrOptionText = "{{ model.FLAG_NAME_ATTR_OPTION_TEXT}}";
var flagNameAttrOptionValue = "{{ model.FLAG_NAME_ATTR_OPTION_VALUE }}";
+ var flagNamePlural = "{{ model.FLAG_NAME_PLURAL }}";
var flagNavAdminHome = "{{ model.FLAG_NAV_ADMIN_HOME }}";
var flagNavAdminStoreStripePrices = "{{ model.FLAG_NAV_ADMIN_STORE_STRIPE_PRICES }}";
var flagNavAdminStoreStripeProducts = "{{ model.FLAG_NAV_ADMIN_STORE_STRIPE_PRODUCTS }}";
diff --git a/templates/pages/store/_product_variations.html b/templates/pages/store/_product_variations.html
new file mode 100644
index 00000000..40c1df15
--- /dev/null
+++ b/templates/pages/store/_product_variations.html
@@ -0,0 +1,70 @@
+{% extends 'layouts/layout.html' %}
+
+{% block page_body %}
+
+
+
+
+
+
+
+
+ Display Order
+ Code
+ Name
+ Name Plural
+ Variations
+
+ +
+
+
+
+
+ {% set is_blank_row = False %}
+ {% for variation_type in model.variation_types %}
+ {% include 'components/store/_row_product_variation_type.html' %}
+ {% endfor %}
+
+ {% set is_blank_row = True %}
+ {% include 'components/store/_row_product_variation_type.html' %}
+
+
+
+ {% include 'components/common/temporary/_overlay_confirm.html' %}
+ {% include 'components/common/temporary/_overlay_error.html' %}
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/webpack.config.js b/webpack.config.js
index 96385f44..dc9ed24b 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -83,6 +83,10 @@ module.exports = {
path.resolve(__dirname, 'static/css/sections/store.css'),
path.resolve(__dirname, 'static/css/pages/store/product_permutations.css')
],
+ store_product_variations: [
+ path.resolve(__dirname, 'static/css/sections/store.css'),
+ path.resolve(__dirname, 'static/css/pages/store/product_variations.css')
+ ],
store_stock_items: [
path.resolve(__dirname, 'static/css/sections/store.css'),
path.resolve(__dirname, 'static/css/pages/store/stock_items.css')
@@ -134,6 +138,9 @@ module.exports = {
optimization: {
splitChunks: {
chunks: 'all'
- }
- }
+ },
+ minimize: false,
+ },
+ mode: 'development',
+ devtool: 'source-map',
};
\ No newline at end of file