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 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' %} + + + {# + + #} + + + +{% 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' %} + + + {# + + #} + + + +{% 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 %} + + +
+ {{ model.form_filters.hidden_tag() }} +
+
+ {{ model.form_filters.is_not_empty.label }} + {{ model.form_filters.is_not_empty() }} + {% for error in model.form_filters.is_not_empty.errors %} +

{{ error }}

+ {% endfor %} +
+
+
+
+ {{ model.form_filters.active.label }} + {{ model.form_filters.active() }} + {% for error in model.form_filters.active.errors %} +

{{ error }}

+ {% endfor %} +
+
+
+
+ {% set block_id = 'button_apply_filters' %} + {% include 'components/common/buttons/_buttons_save_cancel.html' %} +
+
+ {% set block_id = 'buttons_table_default' %} + {% include 'components/common/buttons/_buttons_save_cancel.html' %} +
+ + + + + + + + + + + + + + + {% 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' %} + +
Display OrderCodeNameName PluralVariations + +
+ + {% 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