From 60431062f00aa9a39ba9e4f840eaf723e0395bfe Mon Sep 17 00:00:00 2001 From: teddy Date: Sat, 9 Nov 2024 13:41:08 +0000 Subject: [PATCH] Feat: Product Variations page get, filter, and save. \n Fix: Active column changed to Add / Delete / Undelete column - this change has only been applied to Product Variations page --- app.log.1 | 134 +- app.log.2 | 247 +- app.log.3 | 177 +- app.py | 2 + .../__pycache__/base.cpython-312.pyc | Bin 4945 -> 5538 bytes business_objects/base.py | 3 + .../product_permutation.cpython-312.pyc | Bin 41667 -> 40787 bytes .../product_variation.cpython-312.pyc | Bin 10570 -> 11531 bytes .../product_variation_tree.cpython-312.pyc | Bin 8935 -> 8990 bytes .../product_variation_type.cpython-312.pyc | Bin 5793 -> 10054 bytes business_objects/store/product_permutation.py | 9 +- business_objects/store/product_variation.py | 90 +- .../store/product_variation_tree.py | 133 +- .../store/product_variation_type.py | 72 +- .../store/__pycache__/product.cpython-312.pyc | Bin 6553 -> 6566 bytes .../product_category.cpython-312.pyc | Bin 6420 -> 6433 bytes .../product_permutation.cpython-312.pyc | Bin 6811 -> 6853 bytes controllers/store/product.py | 4 +- controllers/store/product_category.py | 4 +- controllers/store/product_permutation.py | 63 +- controllers/store/product_variation.py | 109 + .../datastore_base.cpython-312.pyc | Bin 12100 -> 12100 bytes .../datastore_store_base.cpython-312.pyc | Bin 14259 -> 14352 bytes .../datastore_store_basket.cpython-312.pyc | Bin 7678 -> 6692 bytes ...ore_store_product_category.cpython-312.pyc | Bin 4530 -> 3579 bytes datastores/datastore_base.py | 2 - datastores/datastore_store_base.py | 14 +- datastores/datastore_store_basket.py | 11 - .../datastore_store_product_category.py | 11 - .../datastore_store_product_variation.py | 56 +- datastores/datastore_store_stripe.py | 10 - forms/store/product_variation.py | 38 + .../argument_validation.cpython-312.pyc | Bin 36735 -> 36733 bytes lib/argument_validation.py | 6 +- .../model_view_base.cpython-312.pyc | Bin 20352 -> 20438 bytes .../model_view_store.cpython-312.pyc | Bin 26617 -> 26830 bytes .../model_view_store_product.cpython-312.pyc | Bin 5694 -> 5694 bytes ...iew_store_product_category.cpython-312.pyc | Bin 3150 -> 3006 bytes ..._store_product_permutation.cpython-312.pyc | Bin 5811 -> 5718 bytes models/model_view_base.py | 1 + models/model_view_store.py | 6 +- models/model_view_store_product.py | 1 - models/model_view_store_product_category.py | 3 +- .../model_view_store_product_permutation.py | 2 - models/model_view_store_product_variation.py | 54 + static/MySQL/0000_combine.sql | 932 +- static/MySQL/0001_destroy.sql | 8 + ...1208_tbl_Shop_Product_Permutation_Temp.sql | 4 +- static/MySQL/1209_tbl_Shop_Variation_Type.sql | 21 +- .../1211_tbl_Shop_Variation_Type_Temp.sql | 20 + static/MySQL/1214_tbl_Shop_Variation_Temp.sql | 19 + ...6_fn_shop_get_product_permutation_name.sql | 4 +- static/MySQL/7204_p_shop_get_many_product.sql | 3 +- ...6_p_shop_save_product_permutation_test.sql | 5 +- ...7210_p_shop_get_many_product_variation.sql | 8 +- .../7212_p_shop_save_product_variation.sql | 546 ++ ...212_p_shop_save_product_variation_test.sql | 186 + ...shop_save_manufacturing_purchase_order.sql | 2 +- static/MySQL/temp.txt | 4 + static/css/components/table.css | 21 +- static/css/layouts/header.css | 3 + static/css/layouts/table-main.css | 2 +- static/css/pages/store/product_variations.css | 46 + static/dist/css/core_admin_home.bundle.css | 2 + static/dist/css/core_contact.bundle.css | 2 + static/dist/css/core_home.bundle.css | 2 + static/dist/css/core_services.bundle.css | 2 + static/dist/css/legal_license.bundle.css | 2 + static/dist/css/main.bundle.css | 27 +- static/dist/css/store_home.bundle.css | 2 + .../css/store_product_categories.bundle.css | 2 + .../css/store_product_permutations.bundle.css | 2 + static/dist/css/store_stock_items.bundle.css | 2 + static/dist/js/core_admin_home.bundle.js | 154 +- static/dist/js/core_contact.bundle.js | 154 +- static/dist/js/core_home.bundle.js | 154 +- static/dist/js/core_services.bundle.js | 154 +- .../legal_accessibility_statement.bundle.js | 154 +- static/dist/js/legal_license.bundle.js | 154 +- static/dist/js/legal_privacy_policy.bundle.js | 154 +- .../js/legal_retention_schedule.bundle.js | 154 +- static/dist/js/main.bundle.js | 7864 ++++++++++++++++- static/dist/js/store_home.bundle.js | 17 + .../js/store_product_categories.bundle.js | 17 + .../js/store_product_permutations.bundle.js | 17 + static/dist/js/store_stock_items.bundle.js | 17 + static/js/api.js | 15 + static/js/dom.js | 7 +- .../lib/business_objects/business_objects.js | 8 + static/js/pages/base_table.js | 125 +- .../store/manufacturing_purchase_orders.js | 2 +- static/js/pages/store/product_categories.js | 2 +- static/js/pages/store/product_variations.js | 245 + static/js/pages/store/products.js | 2 +- .../pages/store/supplier_purchase_orders.js | 2 +- static/js/pages/store/suppliers.js | 2 +- static/js/router.js | 6 +- ...iew_product_variation_type_variations.html | 21 + .../_preview_product_variation_types.html | 2 +- templates/components/store/_row_product.html | 2 +- .../store/_row_product_variation_type.html | 65 + templates/js/sections/store.js | 2 + templates/layouts/layout.html | 1 + .../pages/store/_product_variations.html | 70 + webpack.config.js | 11 +- 105 files changed, 12154 insertions(+), 741 deletions(-) create mode 100644 controllers/store/product_variation.py create mode 100644 forms/store/product_variation.py create mode 100644 models/model_view_store_product_variation.py create mode 100644 static/MySQL/1211_tbl_Shop_Variation_Type_Temp.sql create mode 100644 static/MySQL/1214_tbl_Shop_Variation_Temp.sql create mode 100644 static/MySQL/7212_p_shop_save_product_variation.sql create mode 100644 static/MySQL/7212_p_shop_save_product_variation_test.sql create mode 100644 static/css/pages/store/product_variations.css create mode 100644 static/js/pages/store/product_variations.js create mode 100644 templates/components/store/_preview_product_variation_type_variations.html create mode 100644 templates/components/store/_row_product_variation_type.html create mode 100644 templates/pages/store/_product_variations.html 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 b5a355f17a655cb9548452da06bb1843f4a7e595..93eae6b926f1ebbeb7d1eb19ed3848b2d88677b4 100644 GIT binary patch delta 917 zcmY*VOH30%7@pbfVqaUJG$@UM8WZD!Hkj52we%o{(4aL6UI@6Z-L>{bakj0{6pN%W z9!!Kxv?M?zp4xy3*n?N@UZ|Kr*2H-9rhyCgqO+wT%Ow9d|Lgnbo4<1ILzm?X%NhYW zZ!8x>gO&};1cX1zIas1S;#eMxxTVYDgFIMOTgVx?B3%`EO?-{iA8O*BDS>-b9%Z_i z+whQ5LxvztY=4PB0f;c7t=3uq5UD)Kf(TU)HCKeegJ%1wn@2iU>-1?T(piA#Sz9im z*AVLNA`o?1NRU}(h5*+Ps6t~<`?8KSx`^#}6Bq=LXv=~z3jm`;#Wb9zYHX0D7O7?W z9V|cyUN`B$6#Pg(gB(?by@3+oXoYgJ-3p8jvIn3 zIe8vQ6Nu-X-dG|i#AKiIsKZZaayx-v;9v%PZS$Ah#Y;tD;qF4;!qb)J6=vx|rOp3W zRu#|MT45D>Gt_xwhBk6Oj!|@xM0i}$^Sl@iCV5_A!pWQzmlXrg2V;UPlN2eA3vr3( zIZDyVQtYw92+1UpWp&{W2a1wQZ90^gVUH;uAVs;4zzo=JvK0*T2BK!&{keCecgNLV zarJMz2EMiVx10R0nB8XUoV(y_pZD#wbXHnAx2#=7S20x#tq*TCdbaeQeKH5&m&Q*W z2oaCyp@T75VbVe@C28g0O;ZQFg@2md6iVY(^II6jYvy5i2Sc_5pW{{b^vMjFfL;*L z5*0iC$J+4$dj{Uac1w>TO&S862chz)r5y%Pio}Ykwwkzu~;>#13i zLU|QJDyTDRTS5)0r-F@`{Jp%{_?|kkr>B_ffAm>}_Q2~$u8>paAlsQ>ez=6?!a-4uAXEspWPt&p}ZSw*FIYzfz+{rnK#l^X) zB^miCMOi?}TRg=ji6xoIP@zJQVZ}gVB|{NNZ&4' @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 3ec8a4d1ab610370b5bb87e7e1ba35e6ef3a6b88..cf3c42de5bce9fb773095c5d82da7a8e65b75032 100644 GIT binary patch delta 4553 zcmcJTdvw&r6~}+G+1&(^kc0&CeiCDr2sm%{yel zM+7CJTw9=rhl+2JN4M6htw&4kkYUN9I{pEV{4s_ifNG+ zNnJIO-uJ=|GPZ&|5tQVP!YlY~V?)a5B1L)1*HxI}j-~d2Bx;)*mKZuIRNRSEttq`B zh0e^6qV02|(p$t7>f9-X7DeIt_b_A2=x|g<;4U%v)n>(eI;t^< z6?#`B*6PdJgp9WX4gr%v3utb4X|uYz?Yv**&R$KYcJO*Jqy=}{c}KU~=5BR5Tm~UY z!H<{G8>uQA^ccM)Irswwyxby;( zvleAkvY*o(8HHlfmovV#O`ni|AMYdsb$}IEDPRinv$O!x0bmf2>LX~S0oV?Ii>aAr z_6pfEIWv3T&HPtTSOv7O22C;5awmP9lN#NHZdhqkQ-f+PSL+&T%U7G5IH$ziq<9y` z!YisuE7fvKqq)Ia*JQ1&k?SQ-ZoJWQy}62aQ*Ul2>!Am7qgWw5ldG~mnwOUq+z(?z zz$RLim&=A}I4_%d=t$nGqRp5%LQY)2y0oUr+O$TkF1?;_fjn}$ys@d)yox7bBHzlX zV9843t`p4mf0k{fbNR)=+n{w9 za5oh%tzg?}WNA4YrB|1l!|#DO4%h+QOGyPe*~Ox1()0VoL({jpoDQFpFY_<-9~Kx$ z6d@8tb(sbObbs&NS1_&@E_W`EWfR_Q%PoPrwg+jBC5}#*3)w^TVQgf8()KW=lvmSj z<&kuvd_MiKypTOPIdX_TEg#CcPK(=McdM?AHg0cGF|lfMyLs#SZnxdV_rW+E$@c>| zl(fZ?>^X>DkAOB;?x}foLxZKpyhb(GHa77>3fq39CpbvN)@bf6T zPXNQflYj?6P;-PhKcpxgg>OdlX#lR}hXLuzBWTIHUqqs_UfS6W_et>KP^nDG|?j*u1)4|Z~AOLwzd?XmGznR!%qf2Z9=^_BB# zbD$L^XDPQ-S+BJ;tWj%yA(w|CpA#oTRD`P4Y~fdn0h583V0_N>N$F^1YH*nt;Kv09 z;^n!Vs0=g)F_9lsGmiep{QGQi2MOM{kiQ%ucD{8;iuDlUXSBx-sA~(7|J?4${=z3Ga z*!<}F#VO-K(e-(>qpF>C(Kl7`Atge~CB8&K%3V-hz?RYt)eA+Wj8vyZz9i&NDEy?q z&I{F9;mh&q1|i+7yc;x!`_gk*O<@{dFzMt*^EX9%+NTOGbQ=XBww7!M-Y7pXExWqfXeOh%;)NEwTpA=?7T*pp!=BTfbzGNv!Y zWOT{Ek})O2Nk)>4p}V0cBS!{JhEgEm{sAAv3yvFrg z^{I&yR%QwhpIFJ1q_k6s+2e`XV+lDEt0sjkm!7`4O>9}rhWA-9o!hW1y+ll`&APZr zG9$YJgi!1smuLRGLe(1=u^lwHah1-jc;lS+Fxuad8raEOo9+Ar4Y#GS0eY}4nq|{- zZQr};yu63GB=gcATBK&&+5@dc)t)EPTUdhHPD>>?j@VdPW#p!%s861qH#-Qs7^}Ol!%< zfWL{*@0t)QS{z+)#gW&Y&7Pw_xgXH!8Eu&tL;JfAExNR@U`!?s+2o8mpF6_Ej4qv! z%DY-`PXRklM|u!ZANAatD|6^|56L_RNEd>aE%^m1<$J=MFA z{f6G@J-qBCArvnmD`=t3&KA4c+|9Y&(cC}fo@guyhvL$CfN}y&^d*qim&;zK(Ec28 z=PK@x(}f=pW84Mo2ROA3Cgo`n&Te;Sw_h1>`PD{II=@pnAEZNrajD%Hi2ynUrq;%6 z7gt1|3>LFD>B^zsU4vfiG@mFnbX;Bw>f+nDjxF7lcWbiiT`Jo6gKXKq05rw zGTe`};O2Il%hh3bZ*;csA3$w4@FU=1;5hIWa0-y6?R~WV0DJ_9s;%(zKmbl=AP@}9 z0V05TKn##1poOX`?3!H7_V#vF6}7EYye^Azi7$IbV>(~~22#Cco3|MZa}5h7GHL9N zb%uF{ptFmqcw~t<G2w?)-n=WLb9PjR_`wS2?-o7oRoli^3+a ziufdv67C~)XND0aM~k5scgE1cop~(8durz&*<_I)yZ^L~?WGrXEeQV@rvD6l0(?rJ z?W!pI3!0~aa{>dpWhwlx==}}&JMbCsIWPg70nP$n0ADK9yF14t?rD>M1V}&lxc~z* ztz0@;2J8R22Yy??mtjv&Dp8XMXtMm`P!6QxzXkNccEjw&BGuSCxvFM(Z`|`MU7A@8 z*O(T{?8K8XLkds;%)|Es`EWL}!#E z`SkpOA~xXt>OiJ0S!zsw>wM61Uy@$I*HQ69jX48G7O^|+K<1vz2UdQmpf@oP8qV}z Xrr*q1&~AR9Z%^Ojapx5Dr15_PM$TUY delta 5225 zcmcgvdsLLi75`>g)$* zJ~AXi2a&2>FLQidG^?tw9z&vo!=~v6-oZ;Dd+Ip zJ9qBfJ2Usrz4yELy6UYns?a}#hEA6F-&#w0mBgsMq)HGof3<`hlSl_QC4Uit`p}CUu z>@b5!?gV!GW&>Ls5zd?u(`9$si0Ft2R}?wIYv9Y}sL>IOOdT0@N+wmsQd6`td6Shk zS=~)ehfC3o(sGld!QSC{CE_H}6!0}&2Ap78mdq!b+_K!sd9J59e6v-$5@+aF@6=sM zO6gZ$(i%LEM%8Lbq32UWr8>QZi%4+SJOv8?*r5V9_8Rtb4ccY zw3vO8R!UxD+3ERQX>0m-)|(a5WmuC0r~xbolyNX={Vb(|+XL7F5aRuyjDUk2{4Ksa zy@>pdh0mbeVvkGjd3?r4THPIx#5oknR7p3oz1b--E(~?%y1E+KQY=^1R2Hu&s-tdp zHaju49dltz%gm*6aY=1ajisv2QdvPavG1}|$!3;1XGU}fRB9j>w4OR!{3EElAMgNk<`$BE_FQhhW&lcNv$Z(}R+SsY66f}j z2iX&I7X|+qk~;wpvCrl%)$D@cLN+_c$OVH~R&wMdx*NO&!;1wknx7nK@}vQ^tQ3wK%fy{W!Nn9`V_gfWT!7=T9bz$1;CV&3zJIpbxpEm8AXR;WZOB z7#-=UEto!uJzA7cj$+8p7foe1_~>UC1xU?Lvs1-WnYDNUIX28W!8tvoo@JIKur(!# zy+4IXgd}|uuo>_a0B%wu#03|vsHrKbC|W5ORo2$gLQG6@JAICO2C{mh`&9RLr&&%qe}5+Gvz z1yFD_eGy;;yaW)hqxWTy(*VB$JP3FN;1>cI{u+QVpsxbpeEJ$-LYMOiCDeC!<_fvq zQgSCnPVwWF6kFy=cdI}N5`Izj;W3}c(pOr$;sZlnCi4?Ho{KXqS#|)D~OBzqbxoI zyK!-o67pbd`Ft{;Rh4J(7tmd9jC_;xk4yADf0x^cJaB8POw3p(SmIk>#eflhC;W2m`vu(|WHzRSCM z{ehK333-DFd0s>Q%X40C8d_LCxUk+^c;|(nm z`l}XV3Jbfsj7V{bN0JUEd1Fmimk+Z@23u@v<|*b`+xx`K`Wy0$OQ05SLo|UdJZI7Q zfrEtGWfCobqam8?VNv$wq{Oq<{vsh>7Sm|dqrp)^Hd$MEXX|oX9X30ijFod(P2+-D ze+G#yD;jHCo88gC8&F}-i-~<4#_X{d8w<%1&sUAjDsqm=&Bl7sJO%SDQ2rn!nhQNz z9+6G0)AunHwv~D{RZgqa=bQ(leQ37J{+-_E8m2b& z8ukwNk9i)74Q!y@z+CNfxbL5C&*njPr9Dp7`vjk(?SP{IHwQ&OuH*M>O1^;5Sd%tU z3-=^cM7cU!*Ew58Hz(ViF1N4e42KHJ0Y}zBm{`Y7x~pRmxya6SoYkThnkfGgIntR* zj6Q4F819)W%;hC=t)-%LMVYxqw4%db zD`KLmY(0e=LD9_uflJ_LLOKy2JguYuGc29eun zIAAJ34=@0d0I7gc zRAB1W4A$DWCR`V&{W4h<*h9Y5r~+Hbms;lS%jH2Hxcz`8Zp1~5f7u1qVp-+xSeCmxhlG0W-TeXKnFrO|y7yBRIn2r) zNe%lNX8sBI7vLM#`^eIy>mY9c0Zx7*7 zC2+lX#ov3piTt(@tI^3Q>UB7XIO%q(Hc4i%CfPyeAAsw5$C^Qs%#f>vikdy9P`-N4QtuFdY&knjV>BQp-p jIJ)dB38Sk$p)Buo7#rIdVhjYEfJs8yhL4aCNHW@lBtU55rF%8JM`{8#c{VL! zbVggcy5C_>8=$m;bd^GsR!W*}?SD)EYP779JtNtDYSiwJN?ZRT39Z^n({|1?Hjt0? z3IFcbx#ymH?z!ij%ip?R^XA>s>va@-a~jX7mujZ-EadKV^}C&#D@yF8C~vWrqNxKE zmv@fh47}=!VzuA0+Mf^o1-y2sHr>A-dEoLPDI=RL2lz01$QL-v9`Omj5kAZdA$G4X z#Jh>4>j?)19$VM<(qAgbWznhr3)v=qu5Kj5qET~N{7_S@Pzidmj42bp(QFr=WHu8U zw5r8hx;n9i(W)PVRYNV}pP9y-uMCzLV-ZTAN4!&NzFwi7Cu$qC1c!K2*GO7LI_H5K*hnxg}RQ%urq zUS{?r8QLVqjV>EUU7^#RFkG-<7?~9o88?y`A0RoZGZnm?7J<@%+<5+ty+t=3J+1A^6xJ#%Pj}=w^d@ImN+WiOH z4zTTqJN60N*4kZdhxQ5Ev0W&ScXaj~IoNiBJ>1=~uUlw<0bvIMYFv06;R%GD0FvSq z9~MvO%Zi=YGTbMHP%gfyFC!J=2Y@#5@A@t3PM`~YBmPJ4D6~5kjLGu$IQ-c=qS__K zD%$fJB40S1m-H9)i`>oB zW`N5?us{(a01m+>K3m`>Pm8Y>+#)5{`wD*`gH1?TkI;;OMz(@)nriozUX68B3?5Mn&lN`#v91$%#V?fIAE?~ z@MgH3u*LJ{GBx@Dp-KFcxsvP>KR0iS$kS!>QTK!ef8bPFT$v#XDQWfwgTuTpAX~)! zia`sOat4Ndp%D0h=YpKz!UY@%9S8>yoFbwW0duz3ma?JFQ1r z1n2cX7CT8rj>>vZL8%LtX{g<`=~el6%W_q^?`%qyPWB1lMvjzPRg*B~Wl?GE?2b}{ zgwvd3ylP&P$flK04)givQGH{Ep^Kqvwl0hQ%e z$W|n&Pru+3PK5+{`{;ljj;XW)kZPjpq2h=))%kn=3gaOo!1q(s7mWTDO`NgB8RzWd z3C1ZaWFRXO5HavW_V>yFX29=Hig|WN#H|*dfezsp2rR<02tI^<1P;JWgeoX9mIqZS z2OI*+@q@mx;qZj(p+c_e%(IU26Xa43Fh%{-P?)OTQj)6Oma3>qIX9=OYg1*86}={3 zw@hiYaHQg|a;&;hAfBPXV-xYqDqHc3G`L|J`Zj*zojg+{mwHh#i7p$rDSvVcj$*Y1 zzEwbdxmCh*P^3MZlJkXq>FwjD-AZ|@l5#L8j7YlCY)q4KaUcGGZy@Y{o(~~c2Ym8T zNoC-zT_fzEe^?HGqpNoFe8z4jn%8Ma{7hFIc_isAU>rh!FhzZ3vdpm4Y{IlTs!Nq@ zns1(KPL^zmmu!g@Z;9rn8g@r@OU%}krwPj~DT6h}SmlFv=cHZtVPGR10g#maaCe1n zY#&94pm7Pu5oA>auyz8$3$Xqgp2SXsk8uDweE$-aDsv{3PH@EuWp&C{noyRetTLwi zO_qexvO*J8#aF8QJ2a!xt=?RyEf>Naz7wHUDx2K7g0=Mh#Z?C2m;LaT;dk%1aO5w8 z9q^QwaFmxm2Di(r;Al?aCtf8@@v5QRH0gST-fZ+<>*o}l;{9#POsEHEpyhR(ss$+i zA0yGLD0w3Q8mD=m$z%=QT$zh@jf;3gVInH=hO(%V(_JCyNtx1{#~VPv zoQIJ&ak&|?OzF*+$@OdG85!0}P>d7zQ(ed#fpy+b(B>g+L6I!AVU2c8>Ij#gSw2&G zO|lpTNX`|Wqr7I>8ymqJ7xNabXr1@9awZtJ$v(IQe6U$EKj3)TUVda$GWI+d99{Fq z=}rSb9traSj^)Swp)ka)UU0JpSXR>e#==2=U_jtU_&`|F_&GKVY~;|qAJS7MFg85w z>mTORAvz!Cq+?zI*5tq^$7GCt|E@%i%2Q*0Zi8Dz6IEcqzxOu44A|w+>iI!4`*HL+ z^kEM=E=s&zW%qPsLsLe5FJkgZ4XLvnvXvo5JZ~^Xl#}EF#i`y=fx^^X647mt3cV9b zeGlXLQxuV1=reE`PJ#$867-@lo0_CA(C;YzKxPP`Ue8xjXUPYO7l@md$gZxm<5x(u zXRAa`OXT@bIyj|0UgSq@%PBsXV zws`7lZ_LmXW11k8T{Bt5PgOf2>G-2qO9O;4SVSns#Wg7Dym?g*mtkI!4h;e68KEzJomi{o#;&Vw)vsr@% zvTKDV1I=c+0+kx6iq=Kluy&P&xZ7X?I~~fEA6X8g`;m{VtepdOA@YmRY=#S1Y5GmX zc*4Q^Uqrfeo{eU{E?r%F#>n?~?Ja|M0unDwW~71#qO_zCf-j`aJd%m*X89fV0O>^C zBMj)_T%9!6$IbOo#p^jKV`Va8bjOWu zXffEzHomag=j-O`Vy?!dYfs#@=SIb+^`F$o`c5SK`s025v10?Vfzz>`;U(M1^wC%- z3=DKBdtK7r9Je>)O4gL2Fq%%6H#m%JcK9v`3Hg>-Y5R?+F`6SBd0PYOhwN4JP*rCg zq%aOMh1U_*KR>XIS^q@YBNVoJrUukd8xTU;V|OI&b#Z$g7;97ebYzmN%362WAv$USu^RqR@x~BF=J8+)WIa@eyowF`%ztnWG zDPi?Y9Xj8TPqRSPHoXn_Kj&13j6Q7ztGA$$U&>QAk zg?FF{YNtX&0LuzO$Q@col;3WqNY!m>*KKO&*Oc`(<^Gx~zfG0grpj((Wz&lK7$G{) zJTu2E)T~h0S`N^yM7i=SVkNd%Me_>ffXedYWze^WQ~`DO{PDTt3lrZ`(2#}sAInm< AjsO4v delta 4255 zcmbVPeQaCR6~FiS>-i&blBQ1VxV94~#BONX1Sm~HThgR0Ep1xb5=vI~aQ$Ag1lJDt zIi(F@4x(%=Fj00jwTz*LY0~J*A4AbLwrK;TY0}0dY^9Ygj|gjGf9#J*Au0QowsWrI zq)A&Qc(Tts_xqgRJzwv|f!`l0|DdeQM&Oyg5*Skauawu)!Yj?+zt?odh`odi)M#ZA z*-g~)GemV>k&3-niZ3!yE5<5dtWvAIVwkR?KI*g`P9~V9?1<=EnC4ylq2@Kx>Cx$a z>0<*8^Uda;(oOuY<_n32C_@s&p-$w(|Q zG^Q~ZoXP)Vxx?xPh6S;;SKe&C8yNi{|AyS*{V3Rx4Iaw`kEI_QoCyw{wO*A2IcIHJ zu4NwHWp_^(p61O3rOC4nUbc?0|xj!@oj&zmRc z1R1I3al4z^`7TFOrKFVMJbc8M7ssld#UALB4imNpTHy-*dYQMr71+FW*S_xEO3#7b zoov%`yRUoyPS(c%TUJ}%4!!IiB=-X09p%27dYtI&K62!cvZq%$c<4ay!#zh>fXB;y zw1IyMsGGl4-eP_L=INLCYikoNA3EP~X6iN}Aho$*^P7fjXmJw z&?mWG(4hHD* z?0HDFoFM~dE72^fe1+b`&kB^jLsFnHOH-e{{9+{FR}P2t@7jfMIkgo0et`hwSYz0!(8S{H@v3tL%AM1cLUhV|j8 z#^Ye->>#!eAVC204m}AGHo9oqPhkHD5@C13Tv2+V!YN>MwD#vo!5f${26FXHGsdPu zZQYEqE>|O{=r62s%@|$tDWlzFo2#ug$#ZuTbJeF{-ZnJ!B3C>CH(voLf{D)pN_T;1 zWPqwR+;^3Ij!ujiLjkIuK*T{08WBq{&5)9aa_DpjSV5&FbaO2?G&OhXN|^0v?# z{-DL0qU1CQ8~Q|G9pC&p0<=a{RT*9M(v`A=P3$f>CGR*Hi7CTzxUP6qV|X@u68p`O z(NQg~h9wcV#ZkHh1Azcb31joze(x_U(=TCv9b^6^`AD|C>^$eZSe_1TNq4gAgpAP# zC3so)N!2;ofrDAumyvxJzkW?_E#`V&kd5YVQuG%D)O+r>fS#lL$xyX#^3J3cjuTJP zUgFNuK?+wd^S47TU#a?0Nr`(#nvkBgOi1UbV&L~z`%)v7rIpL?bM(rh&x*@3_OWId z9B=!=m$f3^;RRq_v4Af49Z(eN62d=mRnc?&m8P|+Cm{WnN)IaXb6CpLQ{wF6?M;eY z@h|zlSmeZUHL`8I=L<{JdS5INjl}eAz!W!mAEePC%csacCdoVWUF*-S?>(B`*`I;m zmj212*F)q$gJU`pk*lyS$Q$F@sU*X4l#L=m<6}u6VMEdK5VxZFp$`Whhw1^|`L(w& zzf>arB@q5KY^P%?0O3n!XPxRwZ;D>kPF|It%Gs;4_F%>yOxs&NT37#rmYLT6^wDG4 zqp{4<*i6HTbV8q5mpt2-b9S#wJHxq_j`P;56`_?zdit6i7NKdyeWJUGFy9Hx1)@@3 zaJl5yh$_LwO8kwA>eTB-$YzGV@r|EzPn|b}6_IE4&cJxt4V|3<@Z)88dr)IE&mxwh z)EIBPfmL43*4vu98$I{x# zwDYO7{M5}Fn_#KX_`ASdfOz|i(Am*T9)m0du0=--80Vj)sh*VG2HSx-!A8nc&uIdmP*53^4qOTvd#K>H78`Z%?=Pr2V~D<()aF zFD?5%2YJlH{}=hxGPsC50$lu}F%<0xJyhUXLa%z2epv45H~4J{Lf_3$;M64;JBu); zZmcSo5-Jv7w>YP?_(KE}6E}eAuTR4ljjti=YtQ)F5zjpoeAE%hI+`<%<~Pf;p`Dq~ z&Y95eYmNsH&pou@45sCvK&~$pb`-yKmg*d#cixD{7mFQXS7V67(@1)eOd@#>$*O86 zfqh7R27i&`o+ml4Z}PzTBQr){uEssN_q=h&=$pITl>VR0m6 zStTT7g%eQF$Fyzi+b{(KgsuSrbSQ-~iyA+>gV3f~vSpSWoF(pA68Uf`E?^0eg*pSY=dgW!f_iD=RQNLjFQMN50JqFu A7XSbN 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 a71bfcfd06304db969851c9274ed81df068a09b5..9181d1ab14a2eaa0d39cebb5433a4da5ca46d06a 100644 GIT binary patch delta 2943 zcmaJ@U2Gf25xzb0$RqE_qsS9^A}R4lvLx!qk|@hXWmy(w*|idbwk*MM)7Z2u%C;Cu zl#h&m2s$#*JTPq@)NFwYNfS6ofT(a=v+#@2m!vOkfdb84X!ov!fVe<`pbteA8AZ{e z1v-0F>7NKCz`5PIo!Ob4Z@#@RkGy}>`8$WhPQmYAD;<|o{$DuL$mcyNXVb6EqR-clzR3}YIZrDTF$2DQ!BIb{Bpi< z=xsWHU1pb=*x``5(HnwoZ&8~IB7kCKEiiV6aJa? zVo%!k2KBNdZ3pR0b07s9mFD5;N;^O{q@5t$H-wn0>V2E`-un(agT_72MI~pmdAS2N z&Y3`j!(mx~XI0uQ1G2Wz2d?mcY_4_^c8aL_h&6F>i~6(Jr-{?5IIYZFQWlmf;xhh1 z*uxRm|qBVEdCYmIa8Z+MSI35|FafFZZ|F2 zDTm&gd$O0=*fC~G9+heE5VKUh_=MDmM>xlxs&yfqB8OJB*K3fg@}R6wV?2J5J9)m^ zuyo^zvSuS@^Oxu4=e7LP3#-C&YjQlq041&ejM~b>_%0Vif53m_URuMDN&NE~p*jimOfcv}v9m)zhQ&PiXze)&Aq3dyea&wzXrr*tEq{E~zAJaa4Ff z3ms5H2ks}-(C8YkNB3*dgc?nJ8d0MYYl7|x)x4C2nv=>CC%Rzwfe#-9vE{vYf*(T{nxZmE558A$sUl1I}yem7b@NCGtG*iH6rrnnp;-sJM2)?M1aFXQu zwO-07iz^lJ3iQ$!D1kq5`H>%&y^U>#NsN(WU{&?)z5%v1ghRpq6G5&pxD&#v;V*ZJ z#4x{e-t~TdRasn8XO@+fd_{b%WYYz=CPY*rayw?Q)h6dug!T&8u@U*4>(-;+ydSwA zRiX#CDdZSKYfjxIYOX%j)mL^tbRB~81nnciQ{v6GE|ELNKq>MUl=3_?PaGbsn0N$~53d z?tQ^=FpAl#Om1ayAul(>OeXv!4}!o~kmnV7h)nkpArV3960_D0n$6_k2FT@Q`7mg! z9%K3}2&xQ_d_E@=;;Gu|?{Zd{hw*nkW2-O2DEB^yTht?euq5c5N8tkN*Eiztyk1W0 zt=%7welS{Yt+ejnrdZpc!iRLRLlb*dv3FyxBE|vCf_rV~`-SzX@2%cuH=745%|oT6 zzNc$r;Da-zMNt4bP`>M9*b{qFzV&^=zKuqqbeW0J^GN3Z#BR! zTW-qb(S$x#=qn2qVN7AijPl?FU{n_WjV|MC@e=+>>auA~J!(_W1HKopH3soNq-HxQI;rF1IBp4) z&@lcu(9XU~rOkjOgXOIZflJ1M{}PA@`-^niQg8s$=(k496kZC1d~o}`OT9<`?@odn zgr25iEItv8r5fsWto6xoSUw5f3N#D|eyhk{aIDDlR~P255qJ!Tp*0CEtK3|6IhS3W zPc3FI$pCGtYF?gQnm6zTYn-5w592R`nbn`d5IzA|x5l=pY>N^(`hY#A`&%^su<9SK z_(w{@Q!nG?LrVOx5}J6x9?`v0iPKwpw<)u&4S*oE-j-DVU6!l`Hl^z z);X$nj#fIy9`Xso!{fjktqR*(BaWSq2k=Qz_42R5ZgOP;oRz3 z(0naD(F=@8YJ+SSjO-fMlUgvY2IER#usrZwNzSQ5=ahXZC3RkDnpOGPHz!Hn7a(s* zVI?E)WXvOz&qX;*M1%;!Epin9H5?cmCc|$L@d6QqyktT+G6_y5ja$njLq?=b@(Lb{ zM9>Dl5E*3LjI`B`--#r8c_x7#n-uQ+orA|)MVuJUv(=) AOaK4? delta 2499 zcmZWrTWs6b8Rn5hiKHme7Ac9;g_19EEjzyDA}4l=^kT=gv&i#|c5Aj&l}*QxV@oz^ zJB_B;8L$U=%`h)#K%Ew;o%Ka)fx+vRtloC&+m5KOlLY+v>XL?{F;DMi7tuSoiBHtSIp?7F9f;+?x*HYk4 z<}4+tK4-b>{OB!%6Dc#`@dV4Oz;;a_Oc!+(pknoiGWS`bq&?Bq!pV3;uO>cI4xs`S1P zI*LNf5Moc4^!Ru|P~i8N6L6!322Wr>ZiMU1)yv^|62(@ptoakL|I|lZa}mUCTh^4d zNvJDp*}vcDMr(t+oC0oJ0g<(i5|%1POtDK5Gkj)mG({-b!+u}VC^Rj6aH$+>sAw*c z31Pm@q!yo;TS!cwMqS!FP;gvsH9LH(OoT4xIDskQ% zw@0I>J?inl9j^k0Iaa5K%P(KVORXTdLwq54b+NT5Mh!7q5V~{p&Y=$a@K|wp#u%Q_ zQ)y#(R#z7b!p$6A;>4U~$L(7?zcF|J#ezFhAppG$a{W7edy&6l@K^L$q8OVtV$=GJ zsxK@WGmA#-rhe;ofnQqb+cN{&ybN~XFjJ4zO*hrfs%d3meE!&B>I;~j83B@{Do5Fa zvgR>m+71%v2@c>89EW#skT`w#ZGG%|L6|(u9NemX6zD-g5mL3Gn<`*v#SlbLcEg7* zw+{_QaLe@_BCzZV18f+NSi;P>)YpYk*G-ZdM3q1U*z}iNUwTLMPYM)u|MZ*zWnbc;dlk?S$ zs#wdiEvdxkZ_Q4WS@dw^2USF4DwZ>1-PeJd($cB8Hm|A|@HA(&c@$qJ(XpS`RBTzz zieTTi`)P8ZQwKNQoy((m^j!pZh+Vfg$CT{6ZuhUflRx$T(xy_9o7PkJQ~A+?+*Kj0 zbR-um3H3#x*$|rZd_ibKX5w6{XWz}Njr?MHgW3@z1+g_ZSPGxmNIax+gIjE{bfP8S z_3%gdxxU1DifqtegKNocwt3HCb<>eOCsD%}xfX+K$@dhvs7^)U4T~TC*7H9w1=qcw zgE!#M#8<5Sh-BtuHMhH>+d7Adciodj7CZTAQh#%-z>mWdQY+YkBT}DvAPe9f8r3^V zFilZ#QwjkF>e9utXke63186=H5<64HWp7_zELNFMC1xg$g|FrUcK9UlIvn(kSr<@@ z_G9?S*Wy^0@5@E0*N}R**bDH9H*n7%WN;4g@A;RA$1C8FMaXQ{UW9*^E*|$lyRWmc znmm<96V%u7%GftJRr}?o3$+eT)2h$itu5h@DFk`fq(GIp=0qCoYXD0tzski&>lt9_;gCTC;P!k_<}zNy5Xk3 z32XMxkjIiWPciVn{yOLBtVtm=4rF-K-SZaM>JNLZS+|a|Lei^t5K7u1b_nU61=cH^3SZkLmFN``j7ANu7c27R?mS%AK6b?{** z`qBr4Vt!yb$WsHVHaI1gSTzGGu7~Onf{3}Qu^Pi2!??q8ASCP!Yu8X&`z}MlgT5(P zBtQ=VOwqkISPZlofi~UWo=)5r$n_Dts096 z&|BAa4u3Y)moU7F0hcuu*CO=|4EU_8*DzowsFN75lIjfnXB9`1Mzsx%N}-Yz#zOv#_kd7HWt={>278W z!5NY`wK&<0p*ATX-i={5TgK)2aK7UG+DY<}NhMW5BkxMpHLjY}CLjD^<4x`QCpqVK zt3lA<%+}^-Z^7w%&$;*X?c3+A{#U1yrJ((OapOpFIYs>f2bq?mbvFJDI`b4y1t^~8 znFt+a0wx;!rieLe30O$q9Lb4V16I4n z3#(J(gsJy>T=b4jyM44$u!BD!*?u`L3S3)I5@5ve!vO7kP!5J7K}mvv ztsOhCB_!aq3vphEz`$`m9FYa_dN4wkvO!rEM+6yAq0Ki)Q5J2mQO;1*w?W7RDnNsv zF$0uf8ntbms`djGAxE&5!9cL_^eMcWMhgw*u?!_RM)&Qc02Ty&d*hi;Opjp?*aCUG zttI$Mb=FqMn;(NbVar?tuCL6)l3AO%1`2))JPLQ?VSEnyz1@4PGf+l-UGWTco#u1y z*a9U&DQ~?)Jys8f3haZiZOga}#`Z1aa-O|I1u9VG10FsX;Qkrv79FVUr+iMOWQTlm z{)sU`Dd}##(8;y>{e4_dufMCOo4eF{exTEjGB_rNqd{?kyD3bp9fxhK{SSbU_NK_T zOaSqJqY1!Y(eso{&@CD6oxwDq4B5? zlcgbe;t??zjfP_*LzlwRcrfDam&f^V+Z;v z2vkTv5g4G$Am>>Qr#ufPd`dsR+sqWr)2O*q3& z77eF40*aCy8R}?mrnh;86**)DHJZ1H&Ge?IQCFtFdA(2Z)*mpBwY$RJ?HQVk2SeIu zNv5}XouV^3F+#&CeK%7K$g{0`4Ig(6&uh(!0BzkGvR*@nJXzCtU5rP$jy4XgCKnCH zCb-P241xUxpE53hR#?M4d7+9q1cp~}#)46S17|Wa9tnzygAB(a<6PncYi;*;UFt+(CQCUbCm51JDn)#JrTWc#67ftP znG{nfA}RI{#syG6G5(Q~mo0!2@&oTF;@c390GMpvMHJtB&qi1-{WXAT>Oaan_lsxp z(p867zP9X{$$Mt2OjjOSp%)|AuSg$idQz}Fh5g!eUE|6J%R|_&-irUiTm8_v>|6;y zWgbPJ_WzXo3AcLDpSpN8aq;SE@3nP`;^;O8Ev$5>PT6DYsynxe_Pi0UkQ0IXqe4TWG0Rd)^JfW2g1mmVK0 zR>NGe20<-?Is^w1972G;N%SE=+a)$2I0_(3;`Wea{Z3z9AoZm!c)vde@LLv0`cdR* z`%im*(zDvzpXwb-^bURYhaia8=vI`+ZV*e9$97d7cN09cHhAzGW_SlX1rLlM5VtqY z%x*E!Fc06{wx-QP{-jOOqq@1w;J^V;qiE!|wO!}xrgL)vPiKO)%oR*5J{f6K;JS@W zxwbofM`RxQ!EH^Or@Im|&mff4<~cLVcYOjB`E6~4%Iy5MY0C6RZ_5WV6Q)cV$H6l< zJ3xHvr%WBxJ#&Z|0TXhyl%j5%<*Ll=QB;R*ZAuSE=a}!5nPJs!Gn|heCZjrr7@FWe zqI{-qg(9lyb1Ri3lIrTiOR1b0z6N{!&}R@o|sZi zXA@0lKQsTk?O$xfuUt!9ytexOaPr+y@(_=6!87?*YEp+!C*ZH{8;Al2)v(f@I?|Sa zzeDZnEN|^n|3hw>OL)JIi2do}viZw%mlr~*%H~96^V8$W;?py1+EKjfsQTN`%Hbcy zpVFTnY)%Jn{=7c2>c9HT*OKyeBzzs84*ty7^Lc$_ru$iLooY6I{nAAFqO^qZ$v>5P z+TSr}h0XbZCN|`A=s;xv^$mL4+bCF=?G3^y#@KcM#RL?*<+cVCGf)iDL7-TGVqi^x zk^>Y2+W{0SPz(Y=| zs)lGl%U+oku>rL>Yo!{QwRn9t5p9#|@6Z|;I!Dx^N3;mmgObpUtDzT0dZI8Ua@-!N zfI6WcSN;irX=VCIE!0Hx!6AxGe4+dDHl!P)Wh`?Nff(T#@ycYN&TJuA&m)kUW zJl$_??&-1C1@BWtybm3={+QN%4*d}&;*Xr0QF_AE0udJk$db((cgRi&Xdk{-Rr*F zz0mQXYq3iosPYfPRBlxww`%FFRLzM*%?X02N#xcn`BQZ#6LlvE!js7LEbtF*F5V== z`b2L1YOg=l%O!fbpC5kz)8>`tRKux6!>OM&oc{dq`!5P$7weSW&i?wPi)sj}#`_F;Cq%5?h}#qwb=GA<})S-2&`;S$3`-pqO6 zwbjJrX@|(gNo8`fZtt_!riGCUO5im0C0K!>xuJB?zEsh{MA5+)785?H$<7ix;5$G} zpTcrn6iTEK0ctS09QOg#OVlJ*Gy@w|oG?@qF-}xWk}N9u92bnm;xehHN?;04A*pyr zNy*=N*)L+Wpyag2BjeGSV(p5_!iXTM0Z~prNNsGy$nYxGHb}39U`$O#P*)WPsRcy^ zs4?>-`4!&=wAhB=0s@pt(GNgzYK5ba5Q%Uc7;rT8!wbv2qmE(aiCC&3Bt;2WR`{2j>PC#P3~AI%=jn(nb4c+vdCGx)#CCC+8-U z&g$v2ugr{P|GJIJDR{xyEtMN4=z*45D%VR0&Zgs_w_ZeW4jl)*m*sYg>tzXRVPBS* zE$jyCu-J%XkaG#ax#$hwA-0Xb0O`)IH}iDB#524pOa~w{5-djM8n6cDnm6&LPt2JL zQNSkH1(vsvuC(uu7P~Qjs1m4^9#{2Wnce|_}J#JKO`$rDfwW5 zg&5BXx5APPX2=ib7#~=12FK-iI2IBGEGVnRLSUuZYK-AkgN3n%Vn$oJMuGiMy(-3w z#H+5MQCG|(<6+*|jWhxMO{H@l+|1U}x$6H-B8F|G5-ncG9>y%HbDmbM8=A|>+C7d% zuT*~Bf&N7IhPt2-Y8~H~_vbFFMLQUE*kYqUYy`;emqwta8 z&|i`ErfRm4H3H9#FLYZ2tU>Td5+1#_Eiyb4gW7v`DaA0nWH>#f`IY#$&-5t)gBA~4DKL(4*;b9c?Ewi%$U+8M^YtkB}(3!F@498cKcH9 z#)P{O1~xJ{nQ)&ZgYu?S`Kd(tDH!B`QSNzgbn)nF{pnPFXQICIQ|X^S{)dlOuUt!A z8A)6jSqHR9iFLg}`YiK`qAJcYa~ENFf$3&|1)KI9PkGKHJZEN1&unGs{K6SE z9LiEslrKD!jUNK|YOx+jj4p?;SZjd&e@TQOvb2)O@{x6md~Aw_ZjMCMOz{H*+X77z zHBHv+^_E1tu* z`7X}LE~lVN0&*9U-$U@topaDHK@Ei6QUf8b1Y-u(z3nPQ+vNvC?>9LcwHER>FjM+I zfd6wXWUtCdcAaELStPp(vZF|nz1q3%X0b@ZYDE&CN39DD;Bj06fEk4x9EPeX{#3{* zdD@T*iX)f-VT3FO5L`ikXQ`ONFW!8O;ybJo1&VO6MaQL zE@Bof#u4-)Aejz_z4rlZ&1r@aiQo^APzH*GIZaU` zG#ilH?>8o0K9%fCmwF*@nV6ecDqAXiShifYa^gpo$V?7wWs7A?#~-#Vww;EM!Io~<~rjZN^um>dp?=(-d; zd@Lo(AWM>HC*(MMYY~Jm8$=d|7V^0fN%P1VJfhUR4}X|>Z9Aow15S%~V2E*<)D2+W zMAP&OhNaEFJV?=X&#AM|so#4}mHii0^_;4BPE|g~&Vg6v08QIKxGpbVUYdLbpC!?@ YSGSl(+O<^uuztCI<(t2xU_kEozgMk76aWAK delta 1446 zcmZuxU1%It6rMZTnVp^8o&CvXH=DSd&3`t3ppDIsF?RFQG?1iWV`D7hbj^-&!)7Mj znFX^%QmikcV#_J0^r00L8U#U#Z-V$Df)rdtQU>!P_@WPPQ?fc|@nA~dNf8t3S$U=L3o7*FcY2Fsh(w0VTNmUDa!BW*UToA62diYc5h^5(R zQ(ThR|Y{$gffMqQp;oIN+6$cjax~JfB;7R!(1sMT)gTM5Y{W6p5-&T$ua|?OZ+TPN}Qf0`59!r#) zjz#s{rlxKcOEgzR#^q3gl;Pu0{A2^0o%SH45Kt6H04Lp})G(_(LL=;F5(ezV;6Z4R zEI@zw%`WGlu)Eg$%y15Bi1oh16}TO4gTNPw$gRV0nD`6ghop8ee%Os9R!*`3N2?E` zt4Mj3!9}jhOF{XL65dw^ zD$2mk{I|-9YMlgU8d{ZoUwg&Ze&gx=&f!YuFq9e|_1z6Hc9oMnGOOaMD-I7D7NRLO z(b2~KyEI&gj*%DOTC`I_J<=_-2fm6X`%nk!24e-a?W-%lj7aBMON0BxFeplwVluDR$-00G3F^)8nsyRCY8{a4EDt3 zEQ3-Hy265y*NV>0_qd~N;A8WLG`?vB^QEFTL7!(nR' + 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 91790748c423d18af03e7be6f687dd40044ce780..982af07b0caf66f7275e2e6711c12b4903096274 100644 GIT binary patch delta 191 zcmbPfyv&&QG%qg~0}$MaQ%^s%kvEZB=$1fQeo=0GT4qj3YEf}~eoo5fVs3dxMw`i# zd74;!t_XN;mgIfODxnY5b&Dl0v!J-h0LavoD&hcAMTV25gteuNKum5BVGJTnK!hoX zFq<4N>@IE&Vp@O*OAuiNBs4jStS9dkPGR)gtRxc3$a+BLin!nA8qo(#K$~MFWEs6C SS4&7SCQP0t@t-9gr~v@!eJ`v4 delta 199 zcmZ2xJkyx>G%qg~0}ybpQb^ymkvEZ>wMYZV-Q2(}&&X&!c>zxo3(pk+*Uf6YFIgq@ zfHJpO@-hpGi}Zm^O{pRdAXQ{ASzTCL$`Hil1`$Re!WcxDfC$scIl}JZW+0|Hh_C<= zmOw(2qsVIVDd7}G&&~QGp^U6MVy=jLZSE9(zy!28OF~x06R2ns3ww@DIGjM0;&CBCvm0o4NlUOq7% delta 188 zcmZ2zG{uPTG%qg~0}ybpQb_+RwUIB2o3%&{$lu(>t-#1=Ie9ftGr!Cg0lyB`8~h^I z`PDA*t4)>@)!v-J>%%If15{X~3nVn9ir7GGy~)Rfw59YxOimDC03r-Qgb|1^p3E&A zByIv?nt}*35Md4^G}((RCYK0DGP-U)C+xt;dLZYDc<^Rn(MwD~Cp;5ZV|1O&Dit=;gvx@WcCYQ4tE3@2UNl7e8yv382Uz8i4mYGwMT2y?CF||k;XjU=EmkN`Q zvA5YMg1BpdL<7SU7QX8&QWsgIX4qX}(YnJedYxPCBDdO-^2^-%4K5#;SXfQ(h#OrO zx49^8vm@lPxYOhsjykaoqE4a=heSD@xtI^hDLJz;A7*8B=GrX4d5%fwmH@Kt@%cF^ zlOJ>22^OgW?JMF15v(9WZL&R2zkHDq9QHyE~n#5h1o1>Jlc-Q(T-gM8!N zJbgl3gMy2UL6STm!URN^f(SDZVLtheaJY;Gh-nETtU!b{kkDj@I(V|bh^a2vvFt!$ zpj$zpNC(KiB~YALmKtA>T9jK_l30?NpI77w6!zG>Q6!v^CFY8F)Mg&B2xdu;+Fu+t zx%nxjIjMF<2|z9=p%wE@u9Zw+e!!?W`Gus05HDj0<7Z|DCKsj;Od$3LxyedWl>j5Z BqFev~ delta 693 zcmZ9KO=uHA6vyAp&StY|HkLMI?Yd&xRNC}IYwOk;V+zrW+KVX0LZJ;L))v!**{vWX zv5I&QLCPE=6v49*ddNjVumn6QLNHJXB7)*cA<&yAXA+~}JN)MVKIYAvVcu9uktFCtARH%!XYT4&vvoGH&NDK?odgr*;tN82c>uTR4yY z>-Tr0@}J@Y%tHzasE8hJv{&}s_22*%g$?x@&1M!??d%%Wgin%m*=8kW3Q4S{=tSZ{ z_EWh(G0%nllw$+F5#KH`YQ%UPtCNu?CbIQOpWM}>H9h(&@p|Fq!Uz34+jbWNrBK`h zRgW5+$KwPbLUw+KTUelNq zzIaSJC2(B85}0N_f5JQ=cfe1%fp{Ilnvparkyfu}=eK8d`I?8pU+fLq0FXqxT zv+g9F75=2>c=&eZt3QE=S=X;rVu7ntpQ!!ij%Ko{^&9CJUE;3zQg(oC_bqib@iZb$ ciU1F=9%H!2i!P%*3Gi9m#6mYsHfP-W4YE#>fdBvi 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 ba38235c7b8d5853b715a61b849748fea6d98ced..c9eb0f7ecfbb758b050ebbff52586aa4cd14a9ed 100644 GIT binary patch delta 143 zcmX>ScO;JQG%qg~0}wp!&`Ce5w~^0`mC=5)E2{_#qsQhbPDdujoXvB%m$EVzY<3d# zWM-Vbxktp8m2vOpTas0bjO!ScO;JQG%qg~0}xzUrH~$|zmd<3mC<3dE2{_#qvz%*PDduj+|6^im$EVzZgvv% zWM-VRxktp8m2uzZTas0bj2kA0O21%a*=#4%&c=9c^D!k&cE;bEKWI8IF`7;`)G6gx sVHNqz%)ln}feFa^;I( z%|GA#ul?tr+1%2_wCy{a&C0Q-l6Vt0F4y7V;=!=8Tik6ZHOr&Qm^h}4i{r+;MV?UhhuD z-SICHAIYSp+}~!u+0xHkzTQqxcQ;mJoJ=J(j7M{as&4YAmGbtlQ6v4{oxkM80-f)05AhE3sA*CuRB4O6ufU5Z&+o>1z7U{U%b?*SM&Rud_~N(Kqm{C|Sb zR(fqY!IH_A^vH3hvza64^H{<01zghBTcR}JX$fx0yJ{mmS!5O@!a#*sU7HUH(zBj1 zbdTmdKe7V9} z*ZsUHTe~6JYK~TL%vW8u>SWpbJnGC%^`((zgjtd>{W1_(Nv7h`S$w8^1hB@seXNU& zfyOuh6~9<76+;`v9f^w)AWh=)1}-L0_`huWUvq zhhecQ88^}>HOe9I(FnYCQ%@yzz`g*$%EXZ)0Gl0OYN;KiO}+w43k>uMBfB_=4N;O< zR-}}Mdz9fjP?)MyRv& z;efB=_^oYG+BNvWRQT<^KRd%kr&w@``Ilc?bK*ST@!RC|&B?XN`8?m1cZQ12@dA7K zi938-k#`k%SKd8*n;%)PuBZ;vKL#h}E2{&{jSwgba|K~8fB49naP;lx*Dah)$P0sC zv=@gC6xb`w6!_U9KVRVIi@aFiS-{0xeDV(ODDv$EzWuUto9|n%Vcynj>8YWcmEYD0 z2W#nIFtFlYXO~c)0UmGgHy6(pgPPsc>5n2%$GDN^+Y0 z0s2cLj;7N_f9p+K7T7JMWYp6#X`{zSf-6&CTz7(f? zlW9peEvb5?VM96?PvCwaU7)coorysgs?yo;wfkKxfk2n~OTKxkNVj<4} delta 1805 zcmZWpU2Icj7(QQD+HE}@8{PV|c3a!gwO!YrtzA31t&D#NVg~Y)90IkpXIu50c6_HJ z&J?*ZWEV()mqai`W8#$=nE!?~r`5U+}AZgES}ygn-IT(vTb!LMrc+!g552sJu%WmPdq<)tsmhW!@$!CdAm& zERD)>AucC`gghqf7*mrh(k3}6B;|2oTz$7n6Y``msdAf?l2by8a2jqGm+O9=%h^TG z^(Gt&#|fJkO@2q^Lvo)GEmWJVd+Qz3w3u7SmePkaG@mKui-o%F87aLpFO@{9)a}oP zwiOGdOuit}%CAj*1q7Co?=s{1s_vp6C)RnU2BF!Qh!wkJ~X_TAUY^bS|GQC7pB} zGuTf#I?2HApmyXt5w;*~MX(?^7}O0}DrQPzdUhe7quWv5fv^o>7lPUddysW8sJmxq zQBH5)nuhZs`y4J?U7ydXCD7+E%ZyUn)5XyP7->g%0pTFRA%wLSY%IB{u~u(mD9fO( zRqGPL7`EyfEdYVA$NaQ?W9+OIX2PDHdh1$Hp(oL30ilF&3f>JnShIW{p4R=%1SJBU z5x@4>a`SQ661hBifGlnM(Un+n2{o5cJ$n3>D_!M#@ACE)-d*F})&9|CK7M=i{wnXR zx}qzt@tSM=TYlm}i?-zefv(|+o!XWlvv34g9Md(&bans1TaH6Z`)&s|-!QIB9jdWA zaCm9oGVi;~n^*Xr8sBq8{*E6)hu{OA+t9hByWQLd_qu(sJbYo@*Ad6=5adUKIv>`* z5w4AN@9`rYL0dL<2Z5RIEkGfCr&HWG!4*DP$VkxE5uKQvLLo&2%$D@;LZtWBM}(d z0g1UfW(0_h(IXNP3@k{nTVg=0EUX|9_qjsC!*lQV`n}J0pZw?4tAYNpP{>K*DY5SM zz~0yE@+WD3wZDrb7rAMYr8%5Sv_dqR$N5BONP+5DPqa#k)WAlfv!q1JxSVL2RB%P~ zkco*+vF3N$j?f+C7D$`6aT`gpbVYLY$C6w0 za<5ZxSV_W*bGc_k&k#ZyinG_R4M&$4n?^rURTRiFzZ87Nc*aJ%lpct=vHh|6F-%t%zu>j$L;&2|XI8i0893e`%iRHK556z)?US za15{x=mJ&&EBv>)j4ty-Ru^^nRqK)X<_BwlPDa11H!018i~%^u-!&|)4zdUE_}7MI zH-!w4z97U`bSk1WO0+tu_wYW^Px}=Q^8pc~F~xiNpor7B;t`$@ zNt#qV%2Ogu(~9@;A(5dO#ryfN$kMFH(VWQByeQCu(g*m67^S0%$M~2Sr{j{JlKLQ@ z5R-ILOwlPZO{Y~toL>_&bVkh5SuscFl$PN0Vu3Cwp5#TbNEa1P@g=cLmlaR*6;Yxk z#fSK+Sfgu-hxj^OmoFLO8+1cHGyFACre(4D9^Dkz>2;Mf%(p~^R>U^lR_iRkA$I7F z;yGRwRazxlNP9=C=fBkI1-9^G7oMo5(brp{;>b@g2ssS}g&H{Zrs?VXhR2Q^XzBZo z?HQKMAV~Z_RwO}WzX`x>vn6@YO<^1{N#X~LTPI8w-)eZ4V@oM~n;l)U$bsdWPSf_V z;uh2y6uX07)%w)*f^=s{je%%-2G$3$S0Y#@3sN-$48c4GuHKHwX3;wzyssYuI3O2& zcRa^@px^YED0T(iAG&h?1Bm+D7RSP%pjJ4=a$Pw@KRmf>@TM9lOOl?jnCh zdev;?YUtIu$=wY355wuR@z6^`mi)2q8M1k{*KL#VoIHM*_kZsBj;#70hYv{Q?3?f> zQL=INcl--N3VthjO!EG->=zU z+(6ht*!END8FJU(O3#yuuctqkGyh7L$=+FF=+`bfk2%*6Zc7N_x^CFEb9n)-uEP?B zstAuT9@BM`8?I|I&UL*=pd?k7NO%)gF-yH0!kRyuTkl`%XvJOM$W=(q|2nrq=KXJT z*=nQhIkW9K=)vT$gdl&f=}PmtuI}7BW~S$s%(mg67vrPYV8BA-K?H?46w39E0Uc#P zh+-&vr57ku0)AS82`r4)+vbG+f4e(qQW!vC9Fun2`-Pa4U=SgWkid+>l_Bm!uFHA{ zAc+Z6*ka37_Qb1%6snmkWld>TNMqk2gbZdaVC`7vxK29Ggkj9cBINvMx!Kb^Ca3N* z-jGf&T|RZA(SQO5`q(3n+30x}Mo>t6CU5eAE;nj$^F9+T7*%=y5ynsmyB=5#7K9u( z=utH=E_Ikdn8b`oqg6NTcRkC5DHNws412AHWglIdYX)WIjUqB-3-rs2NL9!$4`;jZ zm0Y5c+!Ozgd}ifB`}ABZssG-&ws@|UCBM*)|J07pwY77ta-r3pYPAdP@l)-w|2$vm H#-{%OMFP^U diff --git a/datastores/__pycache__/datastore_store_product_category.cpython-312.pyc b/datastores/__pycache__/datastore_store_product_category.cpython-312.pyc index 3f5ea8861dc4f2502ce0bad4cab4c13a485fce0a..ac70acbc570a79002ab0f54aaa15f5d33541d64f 100644 GIT binary patch delta 709 zcmYk4PiqrF7{+Hd|2Dhb&89I;OloZ!YmBu;5sOHbDpV0fDB@*2Ea~oan>w>wXEwx~ zMDPoQx%mx55NbYw;7Lz{r$8(ode?&p3hK<3f_r%Oncu$q?)$v#+ve}O{n4@vAg?*r z3O-vyyQ+Nw!*dG}&7m9wKJ?Q>r+Ji5e1;g*L}uc%WQtnIN_>vkw15hU*NH=msF?UX znWiOFO1wc%&@w6~UL!MTM)uZ71y$tTB*XoaSLqy@OCDR~G@VEDiML6EHc$fs4cq~K z;RWy=Y`#vZkpVyp1Fc;YZ{T0?Ub~ymKiItIZZH;&meYSAtcnZS6?kU!DEl*YQ6F3CF9 z604>M>*A$(8=f6~l^)KD4eR`^>QP_P;hf@lC-T{KMJ(6#6!S14uG@yJCMkzf)>&OD zD<4Z!>|0H9_W0OtiUVs6w#21EMc9sh#ghXE5gRbI1(sHlkut7r^>{aw^SaU2F7{%+ z!k-Wq%Y87G6-&;d9DmcPLS5`Sr>-UO4g565p$f>E`VGd;ww&>?D_`soZwJ!>GZi-e z15@IiQ+Z~o&)P}~szBcx_?~+I{O)H{yn?!sCSQ1TT{-v+c$nOz+ wgFTc-wG4h=%C{7R@VjQf^p6^ViwB_p3G^r6;vra{fc6AjJ`~T3%W2i;A8h@zZU6uP delta 1619 zcmaJ>&u<$=6rOb)$G`13aT444ojQpV;xr^}(>6`gUx8LgH551uht+0x;%qYGHE-5Q zeV~>Q7mn55xg#!!`~~!cgoG4vTgmdNcQ{lakbs$Sf{?6YS#Q4gz3_Aj{y4!Vx;ehVih%QJQ5VctqhC9c5#9jOB2S<#C=Ba6$2LI?g6=YeFRn zI?1N+l)_0m&1Ucno5izi4$mnrMX#_TF0y$%&ld24;?i`Hm2gSnLAu12@v_1h`W9Qk zD+&+MGF!!~3J=q(Yz?m|oTYEGb-b>j1M&0$x`8*;dJSI_>j=HhZr~ei6K}Gc_@-(Y zrMK8^e4B0IEtQYaJ8T+;oWASH10*UzefUo z=$^rkiR;I@tNzF(%nJt|x5D=u0HkI%OPb&Rh#6HPKp4X6uBNs-fqXL(AQLslmCputUd!iuY|Sn_m$;*F@NbvfNqt zd+Oc2ZD}TmNXh&gB-W+P9Az_*{}cYXY4>M9Q^M*-co^Ylu-XIu~x@?b5{@5@qx68^fB2|lG+*J1D z(v2`GD`PU`yszTLd|rw&hlJLJxy#*EH|ljLceC0p8OJ*R zlp54LB&-ROl8*j|n36<@yI|LeA8@$euXSP0Ogcwh42RyCS)e+pOEQ zDijfFA!TUgv#${-e@Wy05#D0r#iwK&xJacV`7;rI>C-gr*FaPYzRn}9*gOK}SEMqc*zQMw=Z}IY*TadVY?cze2lhRBEI3S19*72gXVt8 z4I)>#&F=7vO(": # 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 3b0071b42e546f872756fd258075d1bb61b967b9..698e530d47686282189c40f32ea5916509828294 100644 GIT binary patch delta 3987 zcmZwK3tUuH9tZF_GcbTKsDLO22O~uEmk(%k4rP;bxTf6J-X4z`Z=DKaRZn@>Qt(LFc^Zzq4XZF*4KK$;v-+Rvg zo_p@&qb;56TqiS~Hko?qF}gKFZ7UuK{J}UaSTn{+)Iw}? z3gy;T4&xQ8AghE26tj_O@StKwLC{N}bb6V8W+{b*Z2wh*Q$wuo#oOjT?N*;1IM*fKIVOjoRh zY&rZyu@z*~9)lSQwh}%LGZkA&_5}P?u~lSG!p{_IBWo88;rV!1j|ARP+yhX$ucq#6 zV3uMXWNYD3#nz$8ddGjD-Y=AXg2t|g+0uIM>NA8Jz^Zh7mTV);QEU_0W++$eIkGKK zq1aZkZBVILC)swe`7PeIgK#HkezfgE)2hT95h=JpXMW&lVrb!X2njCy#ezTdz0)fSfJQ%$liv9ioHYT{w*w0 z@OOm2hsBDWCi?>{QS6Uoe}bioy-RimmMQig+56yD>@3*_(1PanecJv^cn+2;9nX_} z2rCr(h|CL*DfSn#kD*nu3uJ$V#}&Is_BU9mnEMmLzrzy>eoA%;Rw?!w*+1Y(#V(Wm z6WSE}oa_r|SL_Pezu+mwz9jp~4Noh0mGIxNTCuOm{sU_i`-bel(4p8hvg@!`v2W4B zbhhtcouW6W=S>jOdY=DVgtuY6((w-2_wbBjchNeSO$QtND)*Vs_3&(f8+;xF8v{JJ z+ub%JYzjCK;u{bOn*%(|=e^*$01rnG(`iO6L{1~Z*UJQ3w5=qOJ+e(6H<9)3F?Xl7 zov2R_?eIz89@(i?QJ<(D*`@uGBpOAp({{_!F&%7wzkN)C{J|b=ulBsu*jC-XZtB@W zR~W8f|5hEm;FgU6vawHYs%UldiB*8@r?Jw$umAlZtgt^qO~|Vc_mIGLTZcdQt#LfSNqa4q469a zFHR$07jGAjWKo`5#ktJQWk2r1XvSE8u?S-c#xjf+j1?I8KPtWwV--dl##0!pF*-2T zVXVj4fUyx{GsYH-tr*)dIx%+WM$6oZ&0QF~G4^6~Vc?gZAHX<>aR}ouMzFX%Hk+Lg zaV0hG_Ypq8IEV2eh8N>wj0+eSF+Rcg6yr0D%NU-zKO0owX`gUDh<)U#oP3e7P|x_XH`&0zVmCtz f>m9bHI<1)3iKHoI(G|fgp~JpC`kD?~bk_d?E{u{X delta 4030 zcmZA433OD|83*vWnXG0)fIvzhiHVR%LMD(9LckCXU_&CZDb&*sbO@Q3WI`6WGhqqh zOIXA}A;BvGvZEpp_E7?xSY%p_}oN0>E|ErdszEh1YC zlb9_boA@+LX1J8_8Tb{mCbDJl7_;SQhP86PZhrPtHIYM2=Sl$9y_rh1z!YYy+DaV$ z*?7GRQ(3=fX{>_BnLS6g8lGVGJlPs>XbarcwS?b?RlW;@7sLM5|ZWUVlR z*>18uP{nL7**>Udwx8?()MyJV&_O~k)UuARlD!5qnY~VS2xc)mOm+k$vp2}z1UIv{ z$leA|yP3}468;YA+R^zA*}E{C*?VN~!yIP6C;J1;W%dEtA7LJ|Kau?z>Y05=W*&w4 z3_l|L7@lPI3E44N!0b5L33!UxU&u~^$?UIWr=Wq^X|glWh-S8Z?#>dPgN3Z4kL)}w zVs?S-Z?KrzMY2y}3A4}0K8L57T_XECEM;b1Cj19H!|)5Te?k+pFUkG|%b0yd_HS6u z>}#?s@Ec}V$^HW?n0-Tb&4iT^ihC`yMUA;`{+tG5wKx-hgMB-6XpO zirHZ=su=! zb_vin<3$?Q6(z`GyrfIVw20l^T7?GvgO`o%#w%L8FSfM$DbT`>2wbVy#TMA9+h6E* zmu`FLwpF)ry4_7Z`s%%&iv{e_ZC_JIFTJzZ*r&JR+snd!k_09PND`SGB)OM~mn4bF zt0c)xUL(1Wq}+d9uM_oVoeq)oVRD!xg~<_;R3>kb+|T6A7BSD(H_dys>(mhM)E-+p zi7VbasmFrE4fS!_1aVU(rpJm~YEZg8>5e`ZpUvfVRMnQ38%~F-M&8zx7A%AH`pX+? zVR}kv2yRBGJ?RPJw)bdyiV#9w>(?z7yZFMU*Va}UB{l9KJuWFphNxZ{c9EcpGZICZ z%Cg6)#*Cu4n>bHsX>CoJt6W<3IJf?@VDC#A{gaXqx@%~#oQ;lYp4&9H*=#b`)}M$@ zKOUYgvCO1&p*y7o$#C6G+Wgyej?p;y?&Nw~+SERKis-FQ+3(Y5klcTYdNi{r#(%P9 zt}2fq-M%14wfsr#&5ZS5Trc%uX1W-qu4ne6A+7mTIv&d<=ao!NT3j9f0B)pLNG<7U9P95prSrn=40U5fWV?dc+vJVFIquG4%>htU#Dmp7$ zj8h}CJo?a~tbwt8u%7C`{TIhZH2bg8sZnT-_(V)WD%W&aKn z$Q-@fq2|!QSz+CCgC7o^hFzXe6LJTrDS6rY7Oc!$cEA7ne8GAV+;o9yLB3$8tJEVi zcttgQ$XHS4T`?q46w)$u!gGkkbHG)TGj-?}gcdY%rZi@|j5!XsN7BOj!tt^z-L*CD zVBJqY8TgQ28~V6#sqqig=`)#G5T`CaP>@rA1&3n<=}5Esf^`kIFG{DQx~|IOs&dsB zvWq^(Zq|hS;liz2@<+85x{{wQ3RKdtz9K{w53`H;YR)ix>Twc%EE6ZG@09XudrGxE z#W^XZXlTkmpnYUA!>r(y~Qi3U|%kV++Td(w&tiLYjwkj1(QbbY5F zIe7`5oK0(k<#Kdvi)Z&)!#+ z#8`x}1Y;>i6UK6k6&TGJt1uMCYK%1)>oC@1Y{1xvu?b@f##T$N&TY8)62^9n9T>YX zc4O?tz<(;_0StV#aR%cY#(9hj7#A@Vtj{j9pih9A25Ezz%Qokih(b@yk+U8U%z1d*wPnT;+I>0!X}T*Fhlii zkP#T&FnVC%7gF}Zz;BYz=GNZCmQ}t1|+iM&3uGM>~@N}>^>pe2&Qz62<>&Ct>dUhOlGd#b# e)>&6&6v!EB_V}?eB_SfA#kD2ox&^mrg8u^$fTLaj diff --git a/models/__pycache__/model_view_store.cpython-312.pyc b/models/__pycache__/model_view_store.cpython-312.pyc index f9cb0397c3a090b7c83118cca45ecc285b085745..6ae5e9ecd4f7bbabf9bb6d1fe471bd524327c5c0 100644 GIT binary patch delta 2119 zcmZXW3rtg27=U})@*2?T1}ILjDyUsccnYHR1)?$^Kq*bQZZ@^|TDwuo&b>I%8CZhG zy(06>sW=q`UuZV9h>zh=QMW|nKuoqZGwP;Jw{DWxay$rNs!Ek zvIzK*Hi+%@s=e@qkFar#YB3QH)rSk4#EyEE&?ue}57!f6bA(Df0^gsCM}b?!W5BKA z7r<>|C$LF8D;@{CX7S7VOqH-*>;hqncmmieo&@d?PXTv|-N0R7d>V{*uTd={!k$u< z;Va*)xY+0s!&7C&OQqDRfrVN6&%)SUlH%8|8$Cp8n{Fxe*+wU*^$7#UvSX=a|DT6{ zBr8fD8Zh@H`?Tb$Z{*9dB-960(j&}lOb%_wVJCAL6UlY9+E_?Bd_6{mL~@f;sO(}z zDdPfmXV}V=G2~CynlcCM`crNZ(#^h4ok32s#I#YvxK9uI^dc@I`T`+@Gy`d8&zHrq z#$6~6{R8(CeZh4@%sW+v%kVOhBl zWqQ^GQoxpHT@LL4FQ=NllOE%Hb9_1}Y{XF45rYsn5H}G&BW?i}shSQ$MH@M|mFvO;6=o5#@v;@n3829q^_!1TAxd4w|4 zYB4_dezu|X z9BQ8+o+8d7&IA16PKP47ytIbK<4loN67^Iofh#5ilJe3(>v#E;3gwmDMzbXVITR3>4OYB!?o4vhr}J@hXlAdJx^9 z8WrvlUC|VBjm;}cgf(AS8qZc0<%bWr4rVOf>^SQddBRsB~i~O z4Wp6^u5wvc^AagP1DBibRTp=GItkrV z(48e&UnCFM1gi<0C2K>VYAuaoPpw&yXGU38EN%fAcOh?ZAb}}tMOj+HLySBXGAIqKSt zU_v(`HY2tmwjr7k+Yzk@+*p1c90&MyR#PffI&0_-)a*j+L9`+8Zvfqg_zdwmz#k6x zDr{b*h8{v$CxRccE44Vhi})46&mcdT{rH&#h0?JI6CxEc9)SzN+exRu$RBODJ1ZQr z?3Cd4vl|FK0p5I_Gpuumh6_BJ$+g$ zTd`=3F2~lRO>SDYU(>v@Piyn3op%WwoqlnM8ZPW`muJ{f42gZ_Gdv16d*Hu-3TX

delta 1970 zcmZ9Ndr(wW7{K=|%VXo=BM>2BR(!53DzJ$nT7irC=CRPQPVH=auei3jJLldtwG5kK z%0rL5@s8b2&ILvirG$MH@-%?4q;&GBwO zS)-6`cf8k6wxdsPy==&T7=ET|(C6c)y=)H_41TX%7UG#?~5j@&{6Loo;tu zUXG1xb&HtPQWxX+P-?ByIf7D$6slv6kItY*Mfx1MRcc2zNJo*|q+`fN)IE;6+t(U(%b8SX2w<#rH!`<|tz;4G$y0pZNs41i6-3tSz+4qOw?_b)44Q;X&5euxcl% z4$m6F9zf~%IjFj6{LhSaz?z9O*a1R@-M{7(wlLHLpI6Qs^d%Xyf*7Q4vDYnH^QaVs{op$qaX+Ba0&orn8IC zyC5C=Al9A&IVDBbKGOlT~Q*F?YWX*i}-xN5gVwc(0e4;|)2$gFrdM%2T=W1*?SiV0t=unwi>P^dpe>BE^6percJ9tjI7 zjcI>Sq^D3}weCXfuye5^zc)?!)@184*}gH&gg~WbCQRkvh5D+L+6Edn5_S-F5_S=q2zv;75n7C&`>Tx-7%z zs+&f?5Pl`-FjX#&;%%B{&~y}G93hL4OQ1?)y(S}Rt6IF%>Grx5#VzCA=QJ~Z6wO6r zJsmDc8o486(n3zi@92zyLiZb?3+|f?Pr*q!S&vt6cXdtb0aB%k2+Q7>f*SncdgbZ- ad5{)cmY&F8bj6q diff --git a/models/__pycache__/model_view_store_product.cpython-312.pyc b/models/__pycache__/model_view_store_product.cpython-312.pyc index 81c1885d07860663481cf9923304dff15066df2b..168e813292789d42015bfab36e0606c8706865ad 100644 GIT binary patch delta 70 zcmdm|vrmWbG%qg~0}%KYsi!{`+sMbm${4y?n)MYYW8`Kw{@u)s4Vw=MH83*X*z7Fw Wl2OQp(UgEGNMc)1@~nL(#R zlf-9qpRxo?LPL$OD5t^Z+e*WpkT+DUOI_Z^7JshX)*6z|2;jr=ML5sZ$}@2Ii^`YU zybu#`+?6_52*(Dpw;WScSY2h+Q+z0F&$u&U(hbC z%aqLMupmjqGlo4?ldpz9)GO6 zQ0DJ+2NeEEpN9&6pr5I#@{}e){s!41-_mE#`uitiMMJ9gE@h&_RRnrB9OEr<%5LUk7F!7!w~}I?eg67^E>xzLrPmkl z^QU=gEshPJ(vm8$r#(y8K~BrEHghEpCSk&3h@AOULKSn{C^hwlJ*G|dg$)WT2rjF? ztYf#Zuj&at4?W4Fmt1;*3$_|o>|1rrRb<2uMHKQVmR=M>L&H9UD>x$EypB~F9)PK2 zB{5bpaa+slp-S@C)M~Xz2aC<>JZtW1D)3<4ZWq$JJ@u(EqR-Wz#yah&vUy`CHJsNq z%PQxSFpT5`*9y*|rYWSJa=s^I>I6)LMU(=BjZr!hf62e%{Xk!x?>+!m kf1(vJQbB8@+dm;!&kBTgPDuMScbAUokDH@2fyLTrMOKcedwBr`Fv zFjjAZfr*KVp~?1@>r*~E7^3!X9VcsA5fEsbo>yn!FF;RL|; zhY^%fFYti92xW?3jA1~NVq1kX@&*RNIdmnM2fElRMENz;u1k2eCAz5#S;idv7P~V2 zSC}MgcjZZltxeN}*xN<#4fKl7Xi+Fy<9U zNF!7buw7gR>d3J7EHj2+Yy*#AUHIBn9h1$Jkjp!@ 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