From 8c4efc73da90abf6094643464d230316f644c369 Mon Sep 17 00:00:00 2001 From: teddy Date: Sat, 2 Nov 2024 15:49:40 +0000 Subject: [PATCH] Fix: Product, Product Category, Product Permutation, Supplier, Supplier Purchase Order, and Manufacturing Purchase Order architecture update for getting and saving data. --- app.log.1 | 104 ++ app.log.2 | 155 ++ app.log.3 | 97 + .../__pycache__/currency.cpython-312.pyc | Bin 7109 -> 7109 bytes business_objects/currency.py | 6 +- .../store/__pycache__/product.cpython-312.pyc | Bin 28722 -> 29329 bytes .../product_category.cpython-312.pyc | Bin 30535 -> 30716 bytes .../product_permutation.cpython-312.pyc | Bin 40500 -> 41667 bytes .../store/manufacturing_purchase_order.py | 20 +- business_objects/store/product.py | 13 +- business_objects/store/product_category.py | 6 +- business_objects/store/product_permutation.py | 92 +- ...ore_store_product_category.cpython-312.pyc | Bin 4516 -> 4530 bytes ..._store_product_permutation.cpython-312.pyc | Bin 3232 -> 3251 bytes .../datastore_user.cpython-312.pyc | Bin 7544 -> 7565 bytes .../datastore_store_product_category.py | 1 + .../datastore_store_product_permutation.py | 1 + pay_stripe.py | 182 ++ routes.py | 54 + static/MySQL/0000_combine.sql | 1629 +++++++++++------ static/MySQL/0001_destroy.sql | 3 + .../1202_tbl_Shop_Product_Category_Temp.sql | 8 +- .../1206_tbl_Shop_Product_Permutation.sql | 13 +- ...1208_tbl_Shop_Product_Permutation_Temp.sql | 5 +- static/MySQL/1400_tbl_Shop_Supplier.sql | 2 +- .../MySQL/1403_tbl_Shop_Supplier_Address.sql | 2 +- ..._tbl_Shop_Manufacturing_Purchase_Order.sql | 8 +- ...Shop_Manufacturing_Purchase_Order_Temp.sql | 12 +- ...ufacturing_Purchase_Order_Product_Link.sql | 12 +- ...uring_Purchase_Order_Product_Link_Temp.sql | 4 +- .../3206_tri_Shop_Product_Permutation.sql | 10 +- ..._tri_Shop_Manufacturing_Purchase_Order.sql | 6 +- .../7200_p_shop_save_product_category.sql | 60 +- ...7200_p_shop_save_product_category_test.sql | 311 +--- static/MySQL/7203_p_shop_save_product.sql | 2 +- .../MySQL/7203_p_shop_save_product_test.sql | 19 +- .../7204_p_shop_calc_product_permutation.sql | 11 +- .../7206_p_shop_save_product_permutation.sql | 297 +-- ...6_p_shop_save_product_permutation_test.sql | 124 ++ static/MySQL/7400_p_shop_save_supplier.sql | 2 +- .../MySQL/7400_p_shop_save_supplier_temp.sql | 42 +- ...03_p_shop_save_supplier_purchase_order.sql | 21 +- ...shop_save_supplier_purchase_order_test.sql | 11 +- ...save_Manufacturing_purchase_order_test.sql | 149 ++ ...shop_save_manufacturing_purchase_order.sql | 565 ++++-- ..._get_many_manufacturing_purchase_order.sql | 4 +- static/MySQL/9000_populate.sql | 35 +- static/MySQL/temp.txt | 2 + static/css/components/table.css | 1 - static/css/layouts/header.css | 4 + static/css/layouts/table-main.css | 11 +- .../store/manufacturing_purchase_order.css | 78 +- .../pages/store/supplier_purchase_order.css | 22 +- static/css/sections/store.css | 5 +- static/dist/css/main.bundle.css | 16 +- static/dist/css/store_home.bundle.css | 4 + .../css/store_product_categories.bundle.css | 4 + .../css/store_product_permutations.bundle.css | 4 + static/dist/css/store_stock_items.bundle.css | 4 + static/dist/js/main.bundle.js | 2 +- static/js/api.js | 5 - static/js/app.js | 1 - static/js/components/common/inputs/select.js | 2 - static/js/dom.js | 2 - .../lib/business_objects/business_objects.js | 2 +- static/js/lib/constants.js | 1 - static/js/pages/base.js | 12 +- static/js/pages/base_table.js | 70 +- static/js/pages/store/basket.js | 24 +- .../store/manufacturing_purchase_orders.js | 69 +- static/js/pages/store/mixin.js | 33 +- static/js/pages/store/product_categories.js | 14 +- static/js/pages/store/product_permutations.js | 22 +- static/js/pages/store/products.js | 1 - static/js/pages/store/stock_items.js | 22 +- .../pages/store/supplier_purchase_orders.js | 32 +- static/js/pages/store/suppliers.js | 23 +- static/js/router.js | 4 +- templates/components/store/_body_home.html | 10 +- .../components/store/_row_basket_item.html | 9 +- .../_row_manufacturing_purchase_order.html | 22 +- templates/components/store/_row_product.html | 10 +- .../store/_row_product_permutation.html | 20 +- .../store/_row_supplier_purchase_order.html | 16 +- templates/layouts/layout.html | 6 +- templates/pages/store/_basket.html | 12 +- templates/pages/store/_home.html | 6 +- .../store/_manufacturing_purchase_orders.html | 9 +- .../pages/store/_product_permutations.html | 3 +- .../store/_supplier_purchase_orders.html | 2 +- 90 files changed, 3247 insertions(+), 1472 deletions(-) create mode 100644 app.log.1 create mode 100644 app.log.2 create mode 100644 app.log.3 create mode 100644 pay_stripe.py create mode 100644 routes.py create mode 100644 static/MySQL/7206_p_shop_save_product_permutation_test.sql create mode 100644 static/MySQL/7415_p_shop_save_Manufacturing_purchase_order_test.sql diff --git a/app.log.1 b/app.log.1 new file mode 100644 index 00000000..5f12f1da --- /dev/null +++ b/app.log.1 @@ -0,0 +1,104 @@ +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 +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 +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\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) + +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) diff --git a/app.log.2 b/app.log.2 new file mode 100644 index 00000000..24f46c69 --- /dev/null +++ b/app.log.2 @@ -0,0 +1,155 @@ +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: 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 +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/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 +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\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\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) + +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 diff --git a/app.log.3 b/app.log.3 new file mode 100644 index 00000000..a4f829e9 --- /dev/null +++ b/app.log.3 @@ -0,0 +1,97 @@ +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. diff --git a/business_objects/__pycache__/currency.cpython-312.pyc b/business_objects/__pycache__/currency.cpython-312.pyc index fc5a930bc27ca4353bf0643ed87c2570c18b5c61..d2557c5b203c1db6e3e16e2f0a85907371884aae 100644 GIT binary patch delta 333 zcmX?Ve$<@%G%qg~0}y1Wt8L^?<=_?tvR|@;2#(Fw9I}jz+M8!`nlQ3y0fmaRCtv3J z17lw0c4E;5icXH_l%6cX5iz-shaV=lm?r^QE`+DZ0;C^mNE2@sqweOnyuK`q`jf4N zRx#RdekSyl$x|PwMw7qD6{J)GNZevhPc12O192rmgbRp}0uk;YLK;MHf(RK9;Q=CK zL4@aK6|obHjP{e?if`fun+Eb?k;~*&5;?{?Af_RRFar^mAi^3%*n$X05a9(P{6R!8 lh%ngfDXG9DWdLHUfd~~K@r%PIH$SB`C)KVfZE~};697g}M9}~M delta 333 zcmX?Ve$<@%G%qg~0}$-XmfFaj%E2uHWEY77iI?n~t2tyD8MQXgX$kS5+NMxD)Xd3{+J^(I>j ztzxv>{7mR8lcyd~jV6DQ3rML1khsO1o?24m3gSwF2xkx>1tQ!)gfxiY1Q9YI!W~4& zf(VbzDq<%X8SN&&72m`SHVx#(BIn7gByxVG1HFK!g>DumKScAi@(w_<@KZ l5TU=>Q&NFRN*}~l0}(1f;unWaZhlH>PO4o|>f~l=CjekgM9u&J diff --git a/business_objects/currency.py b/business_objects/currency.py index 7a01f24e..28af019f 100644 --- a/business_objects/currency.py +++ b/business_objects/currency.py @@ -69,9 +69,9 @@ class Currency(db.Model, Store_Base): @classmethod def from_DB_get_many_product_catalogue_product_permutation(cls, query_row): currency = cls() - currency.id_currency = query_row[5] - currency.code = query_row[6] - currency.symbol = query_row[7] + currency.id_currency = query_row[6] + currency.code = query_row[7] + currency.symbol = query_row[8] return currency @classmethod def from_DB_get_many_product_price_and_discount_and_delivery_region(cls, query_row): diff --git a/business_objects/store/__pycache__/product.cpython-312.pyc b/business_objects/store/__pycache__/product.cpython-312.pyc index b9f6b536df02109c9ea8c9a53e2b98c4004f5722..bb53bb78551117f7a73ef7f22a39b70034d386cc 100644 GIT binary patch delta 1552 zcmZvcZA@EL7=Zg;3Xw`HU0c?UwiF04?C=#;g?pwRFigTV!{f3yp+E zt0xUJSyNeaJ1Z~U`Ci543b~tL1k7G!3u z8Z?fZMyDs_FLSKYv4Q{(FuIyxm36rq1$c!{lw_og@};9Tnr<+%>xHKQ#uV#oXti*w zi6%&>SZoahBYq-!JrRGKM0yFp^x+=0RfRKTjJhol7NzcpD7A{=h~(`c z>-5Z#vOQ~_kZeB*ET28Wi+D za8oT=M#ql`nKn0PXOQ1e{vEN3xQPcim0 zj<~u-l7eIr^?3xIbUZB_@k9dNkUw%<@)0%eS%c6bzQnL@gdSBRA`MZ9Hs!1nC?Ou_ z_HdjF{i=jL=c+mbq32Q(e^z1~Lnfgaw5 zN#h%e0vQy)PgByvJ5p1HVqu$YK}E#bu3z4 zb5@s}xr-YL4Kc&kq0+(9fgN14YnSz@>FLX=)YNq4M&0?DB!qkZr)IRG81b|O{rJnF zrVex8=jg|4R?0n|6zGg>l$6p3U!Y?jLaDH8C^-=(JcU}6lqRg>Qaq(4g=I;U|Hi*c&CI>G5@bD|Q3{>zSl9n#*CnT|*fq%;pFqs)?ck)aC4mbhACP?h jpfZD`(LTuxd+D&$Zz_TGf#RXvgS&?te^GHo`S?Eppw*}O delta 1072 zcmZ9~S!h#16b9g&o5Uqe6K!kTG^tiZG-9I!m!^ul?URM#0=CguYipxTuASVvL?1-( zK@_wOxIVbix?-163TlZD3QCctZk5yx!3XyZEpF8LZ&bt!`8a3h%$a+VG(4xar)29) zO|=;0v;9oo>O*H*Z3i9nUYv3?6W^SZ#jngr=c+4(GpEnAMF|Y$bvYyX1818}DT!J< z)l3Zq)IPRKBRLq~{Uh_JfM{*D59@S26JhrjL*lusNU(L8Prs#&T%YM@y_Xm3X zHQoN2czG}$jKr5}cO3PiXZQgdMftjXXJ$0rlK0OOt_W2X=0*9j{GcpI@sv|ktoD>C zbeun#oH^ixeDP>5Z}4V_j}x~MHDZ;T#4hhXqEmWun(y*D#KK8CiO%W^=fs!E%|z$* zq*-)KJwnuq#MCCcajP#|?DoANY8RWPO)*nUw9M*K=&IN{cZNc@L~Oo=<{Xuk441Pe za2lKg%>aGaMbHi|gBZ95Zh|h6Qv78=_Cv&vz+>g3Bx zi>Z${mX1#Qfg&I1mAFmpD}Pw(P<|LhU+H?2>pONjB?)^l5>V^4fLa}hXlmtJ_KojY zQaHU2rz~s^>VAURU>=wch$O=hEe1EhpPNMgl2#=Z-I?BoSg+_@1{*glS@23pZ6eas8$$@?v#E9iKA~W{{4pqfb-z`a)R;p?(yN&!7 zz?Ye@MzjhoSQ)C)YSdM%AM0kk`XKNCX+5wawS$3RBGx7V%*1+m{)*R5gq8C1_c8yD zKKaF@ie-vv(@=MsI9z#Kp$j5hJ>5udel|FovUqo}I5P`ta85r`C-DBLd=DNMa zox?(MktJv0WudVJcah%%vn2^*Fsvm<(|?is*q96SNqZ2D0YmtukkhN*r4Q%At@^*} zzq!(}0TvnYO57Umw|*LKGh36hrwfr= zA*1$WC(9K^cjOi4*Uqe65wbyfyZ%P~i@Ht+oR9k-^uG`heLW)OVnoV?@YD;b`4>V9 zuE-b8RJ>4LvH6>&CM%=%W(9jjoyq$%MJAhO3)zUK@}_d72-pCPPZdiMY++apWPw1G zc#2R9LzG0Nu%^f@QS`8m4@u1}nEZiVW^+e&DI4Rf$^QzSfTUy5PDaVezl%zFie3TD PC|Uy|-feCvKFkaN8ft>( delta 334 zcmezKp7HoQM&8rByj%=G5V1-jecDFeC+w58a-=u2bKKSCW&sK_1M%k+rpXJPl{O2S z1u?SJFxD_kcE}dtkOa!qFvSZ^{%EE+x!XvXFNJwE6Hp8yECLqZjxH<)7Jh6bY>A>; z0-_IOU@(Iwi(i$ff^%X?YI=TArCwT5er|kLaekha!Yu|jP07ixEW##VH&&lqX6eny zI{A?03Z5HMax;qO*UzlKD5bx7j+G`Wqrv85_KZ4=T9Y4&2v5G9Eu<)x%A3lSB47iw zC{;W~u!UhY)XFG{6rmP|D9OouInt~}Act&r%_(JLd^ve{krR+)j1rkFRJ@c?YVwZa dQjuG1PM&^_L6Jo-feMS(fQYx7ElUnF0{~TbUPAx? diff --git a/business_objects/store/__pycache__/product_permutation.cpython-312.pyc b/business_objects/store/__pycache__/product_permutation.cpython-312.pyc index 7b030a172e4a9802a8b202d60db96b5ebd3cfed3..3ec8a4d1ab610370b5bb87e7e1ba35e6ef3a6b88 100644 GIT binary patch delta 11733 zcmb_id01Q5m48CL9z|TU_WHX3%26Kshu>7 z?VC1nmND)YJF7EvN!z4J+oYc}nWlP48o8P->3p4OJ(G4`;&jqvzE0+x`y`OCN%F_& zvw!b*&pG#=`|i8%o_o*Z+b_s|`l>AD_2lG44t`sE3bz00tIwr;BSw~@q~DJDhTM}r zSwQy;s}%0o$7G`_PdcrTtK*Sp0&m@zmBfMS_ z!%~Y0(26nCVj^%;xJ4}FF13h7^HPgg%yTD=THMOfe0TC_!BUGUpehWth`cD=A{MMm zEn?9YZqee#VzGPGXo-yTluq7+BN6@cl+ucLRgpXOskA3$l4`W#vyJJ+euZwd^7D-p zqg9d-ow+l!vvhJ>v}-K6)1M@gG<+ScPT*EG)qMdg!)X0ySn>4S zajmvtWeXfYX-pbF-$*gqBpKnD#K4$Pd3?UUdF6_e%zylvWwpMWm>=J=O!iwvzP5Gc zmcsqik2+R1iWuOwFJ$HX0#=66_Rp}A2DoEoi*Uykqn(mb)Yx^cTro6u-OFm>*!3)v z;n=NRxuvBp^e(IT=M(w*zLhIVUC{QgY_Zhzz_O-sW(=-eF?4t9mes<$8(JpAyBl7) zrEnJvqw7~TlHBP(<3$KrjC^hz8$Q=!9e)`9$Hw;s^tHUMsQ8v)1MCcs(tkmMbE0cmX{OWl5x2 zEYvT`p-;EuTx(bsX=njME9xc z>Kft1^!OA#qg#{OjPCGGcr7-kqq#S#=)69G%JqLGdisgp6lXxKalvHhA*nbY_&fv) znpc3ip8n31v2ek-mS|ZAGdlYmU9N7&dhkBn;~41~99Yk5XiDyATszh=(|Mhlp3H3~ zrSy&59cr8XqT@oziKMp`g_k2Zb(k$NZ5K)xc9_2`BOUbVz8spIf26ewo#S?g?*XvJ z@M`2?s|=+F0On%!J@TQ?Wu!l}c4UVWHN8t9NFlRj)!CZ~pFb7YRA7w=Wk|FXs> zrY}nAFHWnO2xl7m%~9hRQ)Hn&Hityc;$viv zetH9IE*<9p`*{aLgtoL~(b^I%9f50qS>~$6mmPaMxsmQE%Oe|UZdsOUnz%W**~Qm< zaXfxq67JIPTBMGwE?pJsWOAz{IZ(RTwZ@R>wbCMbyet`ao=TkLq4sNOMp?cp##JBc zAs5}(lVw`^N-OJYQbX8ej!>a2i#}GGM&B;W$c|_YLje0N_BOpd+}lBi)VG=PaBmNX zB+r&F_V&q;=+ko6TXHv!g(B3~PTEs}eeDi=iRx=Cj^Jsq&!Kf~DmqZ6O2P@ueseL@ z)TT<|i@XnpMUxM~lu^l{&coyL^s$AdW0SLwzZEJ3W43#|!Icer2EcGXwj77n3ETLYU9QR5nQ6Y6{!^uv z$3XYkv#6;mA?_fW=F@X_Jr+|BVf7;jK2(&@n`+eGqTy$@7ToOK}+p9No-k@-eEdq*AOF}vX_%%^ig|l z(w$I~{}RG+`Wt&QIYG76jd6Ejd*$?vDjofiT}90F-fA7mqfb;9$FbG03OaA3{u&iL z!BsUaNngeW?m@VhZm#Jh_tE*9_PG18mHJRC322^)?+kwuL4$A#;WVwUt*meWwaR%4 zm!O;t8C%$vt!ZfgEr5f1*r2HB)3ph4K`72%qA%1=l-SD7&j!lZ3GmN06k2D?o-Mji zbkQELj|lb=|Hjd`Y&SB^LS0>*Tw10=hdXG8<1*ntTc+M#xT~?5(03bSseMBRea@OC zn>12~ErXuyjbBJ@J{^mb>ru9bz2BBi?^&myPq!&xa6>lK-g$AD3;1^>hm?bcf}0@}-`DmxLJkgn}yCD`06^ z-LChYgnUs zy))88ejIIC7(I^+=Q4i*0jDwl1jqR}K6(oCxas9@LwE||D8kbSxWMzzAm9Y%pGCL> z;UWT?w$CABQRg3#9Ya_^h?uxo{5Ap$Oup|R#Tm?h7r~71J%l`j=Miuc^WR6f8{r2C z5px)eKSa0>;ROVo%lwN7*PX(k2qsHoM_=n0(3GP<8q9UWgY6rfBd(r)M^^`LrA6l*e*#R%Sq!VUaiXjwHSuyvdLX4#NGUz_)b zmbda9Vj3ExGlK#_S#Vw+C~6jpntfshDpX8i6_nQV)q!HCQ0x>lQJ%%*<$|*OqAE~1 zEL0AQYLsU)d99$VeO?}@-y+m+5pz(kVe(!<*?Vc^BaRy&-Lm(ki>O7tj_I2PW%Kji zK+8^{#kW(`qr$)xje@fA`H?{LcAwZCi!5tzr$zYni-IP!^t71*|QC zwMDE$c|DUyJ_Mt<8Wjyp;S`k4mq!8}2ZfGkBn(8~+Gyx74sosuSUIN$GLnr=y>6O_7#+-G;5*?C!+ zN?mK8ZoGl1xsrs$k3U#PINMh8aWH@I<6z+yyv}CB3-^XaJ(QLGi!Ak!R_9l!hfF4a zgL)|6LR-_a=$76+$~G{X#gKqo=wNRhsiWzAHrPTp_n9+(0`dzS|I0`lzOOj78DCl4 z;@-wxR;2K_i61FMW2=mJz=eMsA+lOnc(4#6nNI22H^xtlc_(J3XItpHeiQiH)9*^d zB_gUC{e8ckIB4d8F?3QG7|755HCR~*f35MC2THY0>>6&Hp=+x$?mu+bp@%B(I^tL8 zp_lic%%SfMd{c|7cu+Cx<+ph!c6p*5J~ikhom3pO%R9h|{(k6^<{!|UBz_`mFv0qT zksLzy%)~TbP7{WT({Tj(p99Rw0N7EabEuhYUN|Fr=<4yErzavz4yhDShejG z32*w~bXq*XqvL}WnAo64H|=RRC*m!mN=hP>OTv)EZVX_ z%VI1GuWUnzQB;bSEKsr#i5omAFdjw5!r|@6SP*3KkA=QtC}RQdI5HOISb#HQ@g^46 zEJ#^2V}a~mEVA&$A{Pr<_@MYHglUA`2sr4x9iax{+9}kuwb-{6r%*CX@7uVKWY*Nw zs~mvH5tUvRd>t|G?`l8rL47_Du<97N(JTpQ^m0mpv9vESc%KrBUr5^|8V zNVJS=g~t$R@d_NTjWhNs>lGFrRLa~$R;B325vLiLO!BD9?$eOqOyVPkgX*m<4q9k2XUBsNv{<8dvTQ3l0KQ(jK)pC zx{1Wsa6P0SjeAHJ8si0wyJ71jwxIDEV3iVWC0tc)pmLK?xyfI#S#%K8`&tPZCHhdQ zjfCe0n;K4L(nd&?T9i0M^=#dPhff_oIRnug8)zq_Kpo-`*%!54Oxp?CY*FG6-C@;8 zIg{d77m7Vh-A#O?C?`}{OE`@oysGpv{aQk7nWDt|2$!XK@WxX&p6nO#s>O)Ms4yq@oekc_9V&V;;-L&BnlD3ZaE>$3-=Pp4?VOPSTgQ^~yT9g`0QXN9e;l3YC6P9@HeR<0r;F zbT_Zg!83YLxewBr6VtQavFULSpNI`q(ZBDgFZm5pT%dz-W4m{IrrnSdWNxvYWp3%% zL^C#V(i4OvF#o{85JoAs}Ptg78O#V820nV zb^P2u)lAOQm!}>j=?hzSy-#jh@)M8dwdf}S{LJje&CPWkvB(qYNR55?3e=1mNBAf~ zW-{oDGgk5({o~Acz~f`P|AR!_nF2l5BPg+j>)lixY9oDVukTAk9gxcXh_4_&phdIu zB%QuC`)cXZ%_U(ws}~!SNl(H6jV*0ce(0?uuh6SrJ8abo_uj6;0SzYhOuIe%J9vJE zhrMANeQ|F#X{Yb(b&^X|v+o(jPrwKimDIm4Gn+l$eC#1U#n-8LK$CkbmeUY;0PGT6f@Eyz zHi{3n#Jz<#_A=dlaE~3&RWD~>vIN$S3v0*yJ#N2ymw%dvwPi+HTks-c1`^g54%WaP z8I>Qx4Q>7*8#znY9ohh+@~uPbl2|I?B)UFNE+Bn^md_Pvj$kLG^YehCzr(e@ zXP|3CpJSMRlFrO!8Cf3TX*6fI_#85pA6P*4CHl;qUc-*}>|}or3fX!71!OPMf0=9c zvHNB_GfZX#hY=n{z^oYmD#AMmzd~S#j^84C7vbL!*u=OBSsKVu;>5ya1D}SFiI9V! zLog!bArv4K0|b*@F4l!{&(xI51xF4iG|3K2tJu`Pt^j_cwxJn5b|cM?5%yfI$oQ36*2H!>akwGEV$QAhv# zO9gcPxQ^BzFF+kVc>D=0$7@*~I9wbzl6w4mjCj4r0JT)C)+;CS=r8Ux#+#T`7R|l8 zhQ=z><8wW+V3QqD%gk!!uv(YzV!q-ntd=&yDxX=wSFF2hR_ntDo$wX@Cc! z;-}*$f#Gkoh}$tgWweoLtneQ(^m*8DQCzIFjg!^A7Fy1u!xWE<$2Ha_yP7= zcd#{6Uk1!7H<=@k zaBi6wP9)OL8&7`(ABo_z&0?be5$-WLeJN87$yPF%2+35H(zR$mM@~;?(!qNw=xdW1 z3U|!TI_Q^@`gdh@v5yflmpt4w)J_farE9p#^|jCjJ#|kWedUyj{_P%f;*$00)2bNI zF67(``zZo{z@BKY=*BFtWdMOBgrm#(m=8bui{Jmg6t z8611%0|)KwA^-0KakT0FY+r-vU`8T-k1fIzuZev;wKkZ7@`0IYk5#)A34$?@4hYK8 zR7w)hLaR$(AEmDx%^(XVMNAAHwssL;S+AKGxb2W4($c|}&5Y|z3N|NT??LHr?kkYK zsAl6m(A@j&o@5!UFYkb}+qgd{(gO;EpfLDzNBkRh_(vxE6Nf*9L^R~W;Np}?TV2_W zvX5ZLE1SXnFJ7*qZZ}?hWDka_BZS9`X%?#`cxAt$TkkLT^=}RIdxd_lfB%s;`;Yj| zH34(ao8}%c?2z@yPQ<*eFkb#5HpZ%eu~jg(28?}zu@CF%E_aOvx^@a(JN+|z-|X7! zM-%6pMyLOfPtt=k`s4e54vQ6}Imo{*TsWCV=<_26nHT<;YrhWj91H(*Y6pqWK82sh z*q;DW|45uFyb!B927HAtAbPZFk~qtzMkAb0>eIG*ay>lm^fr11u(5dv!XHv zYOI!p=>)af2Q)iMn}gbH%qK9Wi8?cCQK`Xn0%N+Ubb=n0I!q@pW{65B7*T0}bV8BH zs7X4(`$9+fTvVIb5uQ;q9^n^H@Oh{;;|ZQIOVkNIAC(q%f@ic~*$KW7^#yQ(uM`_G?c*+mkP_QtNk+PHQH<+s3&S^6Ni`0{p1U)JtMbCz;sVV%9b zEm(070bg7GGMaQCup=@g6gVE?D*T^4Oka9vk3H8mpZ<8xxt#M=&(>e4e=D~dHii#n zz9p}|yrO2I`^>AvkR6*5+9Cq`pej2SayB`!3dvm?EqhjQY14nx6xhsMA5Ws z#=UpSvxeVEFFv-u@=zQ}gUx8snWFi%A97d{=aN&2{6ot&LKF}2XZN4ke_r!f_(MM; Gx%fX+l!WL2 delta 10508 zcmcgyc~o21nSWPEtO5iG&;}AhfP_GZeP0FG*cfcUu1#tSY$-MvgZ+>lFW4fRo!!e# zV|$v!I7wTl*{imbrR{OIY0tP#^x{m^QG0sQ>740F+cWc=IBk<@&dm4SCxKWxr+^6tC$eoy@H$FgsJN0xRYH8q)o5C3)3-oIXWE$z8DSvZA$Gw!)~k76{_ zn?(<{sgu9VdE%dvjb_88Q=XfIc8)h|(m^}7sS}x`LFxRWrw%Sv?dqIJL4zk@G|!Vb zn(s*(HA*q5Ly<(Ja48V3U@074nwP@iW#LjdytH_fqeY(7(PB^9Xo(aKo0txg6$?TW z(Y7tc#LLp9n0RTIVyYqq%RH*lavA4!(DUVLxz{l{Mz0QLWn{dV`GO3`hvP;om&+Z= zdPUW0sya%=qcOP;!_d!@GZSi)xTu8jrzi%fUrjZ{Qatl&ilxRF)x4T&iBhpOA4|zp zv_=K2SBlscrDA=*3%>1Z36083MMqSS1_vA88B0n1=~_*>R#HZ?ILK0CdSX4s=&Q*Q zkJz?hKi0+iNk!L3saRj^N8efk_G3d-Sn9{dC>0yT_;9A8KPoH@+@@Gcx)lRaDz-Sb zcQ7g}72h1CVtui_ThX!oG~YNv-J@9IpRsu(kF8^Ci{#LKaPrL)QKRZYJs7*w&lYUy8d3s)3Yf}lmO zIc~Cn{zeN6v_`(H{=7&8Y`#uQk84&oAM4L&^&3~!Z;mN!(o&^%t@_Q8`Zugue{oER zLM?qrTfasZiX$OLq9Kg2qhODQSU&F9_mW7#?Q0e+U%Q|K3R+o@ZL50hSi6V{ij=Y< zcBu$`MVFnlY#N|T8FML*xZKjI3d6gWVoZ+%rDyJ~H9G>qBIvORs0b_aTmT zI0@Bp&w+_)TP3~MFr?tIQS^TdZK^gfcpZWPJq`5MsDV!8{fXq$v3yesc866OE&)Xy zxRUQAszM|!2&^(ED)j6wLm=I>f#^#xPF8P!=Q{WL&SCeq&Y`}}k-ou!VO~#t1*4>g zzEj{K1+>PzFQuULTIE&411aw%=F@=L64&{BSs-kFSVns3sX;CE7oF-@kM-aN%WnX% z#qqgl`w)%*JTK=jpiL2m5grGa#fQxVAHIjS7Ox}Uq4yUzL(uOR|IhgHfc!=*V?r20 z=m+>v0bomvsfl&=IO-=5ObDkD*ic*qE4Ic0tBd@Ydab;n7nD7b(*c+qhmqsp@8gFO zBg@RMlYH1C{Lt50v+3q3IUOubNydB5K67;ZiCnsQLY_Jo=T2W@GujxN25fYVf(M!w zfWLNJuS}O5p+; zY1zFU(Uz61(uQrd6lKFO)I|fXYAt=t zp@FteFSfOT{=~uBO5bzjvX(YQ3oo|x(gv}aHJ#)`*5d|^#Lam`>gK6kDMC%17|k9QI=hfbDMqU;wB%7+DqTO)kmXOlaE8M z)pX3o#!mSHkpvj8ej2DOOznef_S}Uz+a~(kN?&F=d!}83!z1qgL04x#ucZrB>O5RQ z!r4sQJT%zb7g61t`UZF%6{_-yfr?d@q@(B;x7X{VnrdsxF$_P4aFTAUt|F)CscI+j z(^smi{rTvb!6I(i+Bq=NH?o68n_r9X+|J*PytLvh`VWr`x;FA``C5E#!)g|@Z`eJ& zwQJZl)VCSeCH6FjZA{ua0L`a2YP0D}H7W7;U|c8tthN|0RrkUre;>mADAd!<)fT#| zRt2brjbZ>Qy@D_Tm)=rA(cWN8R1N4*H_LK)P z+(QTt)AqVv@(4X$*G(R!H|pB5aUta&L(n6fML0+E>noi&ZESM>JbZ=ale06^((<=r z#OFzD%E~pP=v7X9nsU>g9U2PDN$_$Q*}D2V1AE1s-f^ zC9+99P3zH7Rhxo(pU9%~Pvp=KS`>lownr88ZC4gSxllo15nGjw@ z!0E=nhQMZ;e{rhu-$3#-LIB|m!Z#6cw(;LWU^~>e(JDgtM}!9uUPp+TW_bAq0t+7~wJ-8RN)&hk4)U z>fx(Euqk*KeP&%nN)J}^LxAIYHY>$-3H}6_d9!13j+^I1nO&9qi?qy8TDg!`e$8_; zt@>6RP#-8&A!V7MEW73jIXVSLr>Fo{jOS7_LQ0dMG%Z-ZR&ljLOh7h~u{J?zyH*pj zHw*S=F$wu(#uo_6f`yt;VYN_LEv5kP7nLi+q@sHoV+#dk;lfC$s9q?l4;8fwMeR3> zI>mH!P%(#ML0NoF9bhC`Ao(~>vsuumzagTn(-Bavf@>BsB%cC91^pE_lr49 zs1uZRuggOXJB5awVlEcYFn*(;-1yUxKXcpwSueXKeTiDsbxdy+l&!D(Lhbv7_WhzB zc?08{1!eQ=Bcay4LhD{J5BYq?w+YI&>+(>?0iol7Xtb+xlSLB~%!1Oq&>gbW3YJ>2 zz)m0S%k^S03sWtE(z4(Q6*mgSjUN>uU(EO-L0Pom3zakrCCy?9@>a$-3CgC|yF)Ge zgqD4x4f#^WcM8hR>opaK;6mo zUP0OWQ+a6pNn!m-u@dyJ2 zxKXS}p@9i5LFu|a66!fF^c)u(k#C~m4Z8SdG+XFr8}#w5Xtq(qMtyucnjN%lqamS_ zpxs5sH)gfEnB7fS#MsdjdzjKIDF#7lxa7IA|MLD@>lnWtd3tT*OU+x^HD^ys{`8{( z!j+DZPs2rnpN30z;`giu9;3I@a<_2mcevaw3e7uJxm%JAK}+tIbQ3+-e@5v7hgn?K z@f=*Zsh-r(J2sWVIr#J@bJlg>pXd0Su|98Yva6c#X;c6^&;24Xjh9a1=>yGXEMSxI zxcTt!BE%MDB%K;4BQ5mufJu%!3bY}I-W=%7z!hMbH!U5kCT(=rppl*Q+caVDuo1RY zEO&fwuw37PEmDC8v?x96?1=|YT&jHVR4_3Q8fV!2Jw3}@5@&t+i2#I zyBmS+EGD$resV8b_am_VgKZs!cxgdkdj;Dj*beb9a%^9Cl!L>qv>mX+#}q2l2nP|I z2)GyUxazNQ+x}(T?%#>G?e}uLZGV2|QGtS-l7+`8r0gw1Qg>*nNG42mx=x)R1-;=R%BK( zr^}B`cyC6RH>yDn^2itzs6+nPeO3CX%h@dPpA$b)OQt zPX%3mF&iD!q(fFGnK@j2bEs~&P`5i+yGP7LHHUaejbv)L+Qv}LE}>>uu-YwZQPq$! zQZJc0KiAL_s`m)>o?x9<)T68;cM`p18aRU~q%RZnWkFrJn1`x?IP{X0zf3fum`@ye zBC||fzIo}!6`*J$Rrw;b%$%_>lwT#}R|PlcRf~nFnn_KaWLcK=rwBz0^ruN=W--^? z9%`BtnkIvd`^6Gei^&ujB$92V`#pNU4QVUcChH_3vrD-y(n~^}M}^L#!H#319UV%^ zandfCWn2f0cc|SbwEKc>hsAQ#%g7O8l}ra`D-T(F1#54xWSv-ns)MX2CdqVi1w|oK zonWd98tcVMc2k|Cp#n^BtXg(^s~H8iw_Rjr&5D|9QLllTT|{Jd9oG#tg@#OiF=Vn9~Q@aQ$&W+fx=Pjx|O!aqztbvUW1Hr}z4|v+;v|w(DxGq8w zt2Sc8{5_$lFeC@RIsgR_Wp`=(NFd^D>QuOlR`|0uDr}o>CC|~h=_g5gKs$4bd||1c1az;* zdXk`?nS;Iw$T`=lh;0Y46{)ceD|$A5sFS=zpFQ*~sAvcOdlJ*3M69S0AqfkvRYe1; zu~leRSAi|n(a&dfG~jcRZ_|JGEy&Udy*pb&pFaFz`BKMHFj&)KM45Cu^bm3B0C3ll zdUBnfZ(=xQ0x9V(ES5$=O}~Gan!a#XDftn7 z|E`ytt^)~$@Kh8|-819yy7wIBdGGX|W6|4V#xCKcSeg&$3@=iS8ff@v75QhHdaRQ4 z2HKD5WGM@vNonsD>N#Pt`~k0DMqr157txwWSV}^lp)a1$6|f^l1}Z#2v>#-AvGw$K zC)(rR!O?h?mdzb1WVuTNp6a&>En9=l+k)HN!7)#0Y(^NH3AzskD-Y4&oCyZ%)?6uh zni@`SB|o72$<3-~u$Jc#9z*yF{rSnll&_+B4IpfyzsWbr_&J()O4IQ?GAfp>4|HyV z*C+j3hv0P+OR!(SBCKyLdwvx!UqiSL;Ts46y8l$3ioH~M1Fzpic#A%Bs#Q8u>EJq? z&^0qN8ZDP=2(FcAu^&z$}ARzXy!P4<;}8`S@K$;PKNt2{oQE#ASJvRP{h1 zedUZHLG8`-#(R_(&NL@vdzE0Of=O>aP>d?gey|uz&@Vjrb(+zhMHk|e;tbwAYI>*; z`GkB{L`}~@nXAC{ z$0N0khG=dO{T?l1A@krY&UuURhf|#X_!%u>KcHHVnQR4N4gRi4KX@db{^XGkzZGQZ z#h4GRQiLN2__T*ruzp8Z8}>Ws(vLsV1Mq*R6L_0>JAwsaDSud;$o2ewtVh20@PudC zPal|2#lhdlL9i~ue>%)9_U5Dvez>@rtyay++~6U7;Dx&k-wme9+%OfR9If1{P6IcL z#y(Ke`6aa+s5shjFrQ|^Zzy{obJAZv2LE7k){MTmOGbU~&dE-f#r}XhnZsT{t~*;0 zc<5|9@ymue{yKQua$*K?ar~qghAAlJog*gOe>VyvXHi3(AGZ?_edIjjbsYK&uI6hVtVXSxnCpY!n4S-skbz0YmE_GI&eNquS)09 zx*K6d2Fs@0-xw{9hoffX)j|eX_@V zsv1llnWbAw9wB$sqo~8&ky(aixnmxR2FM+)A~W-sWpPGS^H~;$re8EIOXCVqHenXW zEc3D~t`J2t%i@@6S&_vRp>BaJu2N)X@v=m!1l3|lq_Rb3S~1tyAtfs|)U3puB{Hj& zQ)@0Zo^L#77wxE&lKj-$%;It|2Z4D!V6*Xua6a2`mX{)QB4h&>j)NCowD-vpe?3wS z2>9rQ<0htk((~7d9D4}you0J*EAE_{8Tb9&i&irhG+|izZa6SW@06B5kzLa742v6p z^hmZ~!9E0h7Wwxf1nZLYe6}Np@L%vZyPH-&bx5NrxFoxhbUA6k{59)U>rIV)e#1G% zO}RY~dg{j{KSz-jIWd6skt0{35}jH_q7<{8zImmU91r~EidAN0v6t8PSz^n98PDM< zZySFnZGUFC@~(K2amjqedfB?L;Wmd?qAyiN{self.symbol_currency_cost}{self.cost_local}" + Product_Permutation.FLAG_COST_UNIT_LOCAL_VAT_EXCL: f"{self.symbol_currency_cost}{self.cost_local_VAT_excl}" } Helper_App.console_log('permutation row: ', a) return a @@ -498,7 +502,8 @@ class Product_Permutation_Temp(db.Model, Store_Base): id_permutation: int = db.Column(db.Integer, primary_key=True) id_product: int = db.Column(db.Integer) description: str = db.Column(db.String(4000)) - cost_local: float = db.Column(db.Float) + cost_local_VAT_excl: float = db.Column(db.Float) + cost_local_VAT_incl: float = db.Column(db.Float) id_currency_cost: int = db.Column(db.Integer) profit_local_min: float = db.Column(db.Float) latency_manufacture: int = db.Column(db.Integer) @@ -519,13 +524,15 @@ class Product_Permutation_Temp(db.Model, Store_Base): @classmethod def from_product_permutation(cls, product_permutation): + Helper_App.console_log(f'Product_Permutation_Temp.from_product_permutation: {product_permutation}\ntype(cost local): {str(type(product_permutation.cost_local_VAT_excl))}') row = cls() row.id_permutation = product_permutation.id_permutation row.id_product = product_permutation.id_product row.description = product_permutation.description - row.cost_local = product_permutation.cost_local + row.cost_local_VAT_excl = product_permutation.cost_local_VAT_excl if product_permutation.cost_local_VAT_excl != 'None' else None + row.cost_local_VAT_incl = product_permutation.cost_local_VAT_incl if product_permutation.cost_local_VAT_incl != 'None' else None row.id_currency_cost = product_permutation.currency_cost.id_currency - row.profit_local_min = product_permutation.profit_local_min + row.profit_local_min = product_permutation.profit_local_min if product_permutation.profit_local_min != 'None' else None row.latency_manufacture = product_permutation.latency_manufacture row.id_unit_measurement_quantity = product_permutation.id_unit_measurement_quantity row.count_unit_measurement_per_quantity_step = product_permutation.count_unit_measurement_per_quantity_step @@ -546,7 +553,8 @@ class Product_Permutation_Temp(db.Model, Store_Base): id_permutation: {self.id_permutation} id_product: {self.id_product} description: {self.description} - cost_local: {self.cost_local} + cost_local_VAT_excl: {self.cost_local_VAT_excl} + cost_local_VAT_incl: {self.cost_local_VAT_incl} id_currency_cost: {self.id_currency_cost} profit_local_min: {self.profit_local_min} latency_manufacture: {self.latency_manufacture} diff --git a/datastores/__pycache__/datastore_store_product_category.cpython-312.pyc b/datastores/__pycache__/datastore_store_product_category.cpython-312.pyc index 802be6c88176a28bc4fdb2be37aa766d4486e358..3f5ea8861dc4f2502ce0bad4cab4c13a485fce0a 100644 GIT binary patch delta 141 zcmZ3Yyh)k&G%qg~0}!YSsiq&=$Xn0Gcx`hpTM`p1YYO)qmdT$u{xGske$Oe-!JZhO zlA2VSzL}Rxf|1P*sHMnivNrd6#;DD=xfL0CZ-`5L5LEZW*1CTD#2O0(d-|r?x delta 127 zcmdm_yhNGzG%qg~0}%XLrI5aSBX2z$lwp0KjT(p@0)BaQ$7 diff --git a/datastores/__pycache__/datastore_store_product_permutation.cpython-312.pyc b/datastores/__pycache__/datastore_store_product_permutation.cpython-312.pyc index 91742da22e32da17b74708cef0d7ac46272c7248..0dbe636f84402dbe8cd0b27ecb85dc9726d0151e 100644 GIT binary patch delta 196 zcmZ1=xml9;G%qg~0}xE}R7*d$k#`XbqsHb9ELR!1QrPFP)N<7@WGPQBWD{oOn7oip zTZnTtBS_>mFeU_7M00=IRqyQv#YWfF#)ACSteVt%X6?N#;2qvm8Nfw zV3%QJ(*#NssZFlpn92BivIyq|-W%c)A30g&xGr!=ec+k=jx(OoVzM8X8@D~H?Pq2N rHo-4U_LJvxxiKnle#RBe$ml=WiN{CCg^|(rf|lJ^1`wl28fYc}-B&Sn delta 181 zcmdlixj>TlG%qg~0}%XMrI5aQBkv*>MzzfwSgta1%wewOs$s}do?OT#%*tNFwVG+N zIh(o=$7)89as~!QhDruaPQNPC$$=~?lX*D>CyTPHGHEhTc4U{|oXIZD$ff~QRirw( zi(@9^kI5>W7q~vMv&eB>;E?*jHJOnsp3!`AB9|Mt9jonUW(GFFFHClmH*vW!DsBGB d70t-#H#wBYN649x(e{Ft-B$(>qevQPAOI3LEV2Lq diff --git a/datastores/__pycache__/datastore_user.cpython-312.pyc b/datastores/__pycache__/datastore_user.cpython-312.pyc index 2d12bcc0c6f5f8e1ec4e2c6abb33ddde8474e023..2b9600aaf2762a1279dc0ece7ef69515fa72c143 100644 GIT binary patch delta 76 zcmexi)oaarnwOW00SN9yD5j@QzSx(kn>LDwC Yb4&x%7q&2FM%f8*Ul~AjksMGN05+-=82|tP delta 57 zcmeCR{$a&?nwOW00SHuAE2O7S NEW.description) UNION - # Changed cost_local - SELECT NEW.id_permutation, 'cost_local', CONVERT(OLD.cost_local, CHAR), CONVERT(NEW.cost_local, CHAR), NEW.id_change_set - WHERE NOT (OLD.cost_local <=> NEW.cost_local) + # Changed cost_local_VAT_excl + SELECT NEW.id_permutation, 'cost_local_VAT_excl', CONVERT(OLD.cost_local_VAT_excl, CHAR), CONVERT(NEW.cost_local_VAT_excl, CHAR), NEW.id_change_set + WHERE NOT (OLD.cost_local_VAT_excl <=> NEW.cost_local_VAT_excl) + UNION + # Changed cost_local_VAT_incl + SELECT NEW.id_permutation, 'cost_local_VAT_incl', CONVERT(OLD.cost_local_VAT_incl, CHAR), CONVERT(NEW.cost_local_VAT_incl, CHAR), NEW.id_change_set + WHERE NOT (OLD.cost_local_VAT_incl <=> NEW.cost_local_VAT_incl) UNION # Changed id_currency_cost SELECT NEW.id_permutation, 'id_currency_cost', CONVERT(OLD.id_currency_cost, CHAR), CONVERT(NEW.id_currency_cost, CHAR), NEW.id_change_set @@ -5900,7 +5915,7 @@ FOR EACH ROW BEGIN SET NEW.created_on := IFNULL(NEW.created_on, NOW()); -- SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT id_user FROM Shop_User WHERE firstname = CURRENT_USER()), -1)); - IF NOT EXISTS (SELECT * FROM partsltd_prod.Shop_User U WHERE U.id_user = NEW.created_on LIMIT 1) THEN + IF NOT EXISTS (SELECT * FROM partsltd_prod.Shop_User U WHERE U.id_user = NEW.created_by LIMIT 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Valid created by User ID must be provided.'; END IF; @@ -5917,10 +5932,6 @@ BEGIN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'New change Set ID must be provided.'; END IF; - IF NOT EXISTS (SELECT * FROM partsltd_prod.Shop_User U WHERE U.id_user = NEW.created_on LIMIT 1) THEN - SIGNAL SQLSTATE '45000' - SET MESSAGE_TEXT = 'Valid created by User ID must be provided.'; - END IF; INSERT INTO Shop_Manufacturing_Purchase_Order_Audit ( id_order, @@ -7755,7 +7766,8 @@ DELIMITER // CREATE PROCEDURE p_shop_save_product_category ( IN a_comment VARCHAR(500), IN a_guid BINARY(36), - IN a_id_user INT + IN a_id_user INT, + IN a_debug BIT ) BEGIN DECLARE v_code_type_error_bad_data VARCHAR(100); @@ -7764,7 +7776,7 @@ BEGIN DECLARE v_ids_product_permission LONGTEXT; DECLARE v_id_change_set INT; DECLARE v_id_access_level_edit INT; - DECLARE v_now DATETIME; + DECLARE v_time_start TIMESTAMP(6); DECLARE exit handler for SQLEXCEPTION BEGIN @@ -7783,33 +7795,33 @@ BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , guid BINARY(36) NOT NULL , id_type INT NULL , code VARCHAR(50) NOT NULL , msg VARCHAR(4000) NOT NULL ); INSERT INTO tmp_Msg_Error ( - guid - , id_type + id_type , code , msg ) SELECT - a_guid - , NULL + MET.id_type , @errno , @text + FROM partsltd_prod.Shop_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' ; 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 := 'BAD_DATA'; SET v_id_type_error_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1); SET v_id_access_level_edit := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'EDIT' LIMIT 1); - SET a_guid := IFNULL(a_guid, UUID()); + CALL p_validate_guid ( a_guid ); DROP TABLE IF EXISTS tmp_Category; @@ -7830,7 +7842,6 @@ BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , guid BINARY(36) NOT NULL , id_type INT NULL , code VARCHAR(50) NOT NULL , msg VARCHAR(4000) NOT NULL @@ -7855,7 +7866,7 @@ BEGIN , IFNULL(PC_T.name, PC.code) AS name , IFNULL(PC_T.description, PC.description) AS description , IFNULL(PC_T.id_access_level_required, PC.id_access_level_required) AS id_access_level_required - , IFNULL(PC_T.active, PC.active) AS active + , IFNULL(IFNULL(PC_T.active, PC.active), 1) AS active , IFNULL(PC_T.display_order, PC.display_order) AS display_order , IFNULL(PC_T.name, IFNULL(PC.name, IFNULL(PC_T.code, IFNULL(PC.code, IFNULL(PC_T.id_category, '(No Product Category)'))))) AS name_error , CASE WHEN IFNULL(PC_T.id_category, 0) < 1 THEN 1 ELSE 0 END AS is_new @@ -7869,14 +7880,12 @@ BEGIN -- code IF EXISTS (SELECT * FROM tmp_Category t_C WHERE ISNULL(t_C.code) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type + id_type , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following category(s) do not have a code: ', GROUP_CONCAT(IFNULL(t_C.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Category t_C @@ -7886,14 +7895,12 @@ BEGIN -- name IF EXISTS (SELECT * FROM tmp_Category t_C WHERE ISNULL(t_C.name) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type + id_type , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following category(s) do not have a name: ', GROUP_CONCAT(IFNULL(t_C.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Category t_C @@ -7903,14 +7910,12 @@ BEGIN -- display_order IF EXISTS (SELECT * FROM tmp_Category t_C WHERE ISNULL(t_C.display_order) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type + id_type , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following category(s) do not have a display order: ', GROUP_CONCAT(IFNULL(t_C.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Category t_C @@ -7947,8 +7952,6 @@ BEGIN END IF; END IF; - SET v_now := CURRENT_DATETIME(); - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN START TRANSACTION; @@ -7992,7 +7995,7 @@ BEGIN , t_C.active AS active , t_C.display_order AS display_order , a_id_user AS created_by - , v_now AS created_on + , v_time_start AS created_on FROM tmp_Category t_C WHERE is_new = 1 AND active = 1 @@ -8004,287 +8007,100 @@ BEGIN COMMIT; END IF; - SELECT * FROM tmp_Msg_Error; + # 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 + ; - DROP TEMPORARY TABLE IF EXISTS tmp_Catgory; - DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + IF a_debug = 1 THEN + SELECT * from tmp_Catgory; + END IF; + + DROP TEMPORARY TABLE tmp_Catgory; + 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 p_shop_save_product_category_test; +DROP PROCEDURE IF EXISTS partsltd_prod.p_shop_save_product_category_test; DELIMITER // -CREATE PROCEDURE p_shop_save_product_category_test ( - IN a_id_user INT, - IN a_guid BINARY(36), - IN a_comment VARCHAR(500) -) +CREATE PROCEDURE p_shop_save_product_category_test () BEGIN - DECLARE v_code_type_error_bad_data VARCHAR(100); - DECLARE v_id_type_error_bad_data INT; - DECLARE v_id_permission_product INT; - DECLARE v_ids_product_permission LONGTEXT; - DECLARE v_id_change_set INT; + + DECLARE v_guid BINARY(36); + DECLARE v_time_start TIMESTAMP(6); - DECLARE exit handler for SQLEXCEPTION - BEGIN - -- Get diagnostic information - GET DIAGNOSTICS CONDITION 1 - @sqlstate = RETURNED_SQLSTATE - , @errno = MYSQL_ERRNO - , @text = MESSAGE_TEXT - ; - - -- Rollback the transaction - ROLLBACK; - - -- Select the error information - -- SELECT 'Error' AS status, @errno AS error_code, @sqlstate AS sql_state, @text AS message; - - CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( - display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , guid BINARY(36) NOT NULL - , id_type INT NULL - , code VARCHAR(50) NOT NULL - , msg VARCHAR(4000) NOT NULL - ); - INSERT INTO tmp_Msg_Error ( - guid - , id_type + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := 'nips'; + + SELECT * + FROM partsltd_prod.Shop_Product_Category + ; + SELECT * + FROM partsltd_prod.Shop_Product_Category_Temp + ; + + START TRANSACTION; + + INSERT INTO partsltd_prod.Shop_Product_Category_Temp ( + id_category + , name , code - , msg + , description + , id_access_level_required + , display_order + , guid ) - SELECT - a_guid - , NULL - , @errno - , @text - ; - - SELECT * FROM tmp_Msg_Error; - DROP TABLE IF EXISTS tmp_Msg_Error; - END; + VALUES ( + -5 -- id_category + , 'Nips' -- name + , 'Lips' -- code + , 'Chips' -- description + , 2 -- id_access_level_required + , 25 -- display_order + , v_guid + ); + + COMMIT; - select 'p_shop_save_product_category_test'; + SELECT * + FROM partsltd_prod.Shop_Product_Category_Temp + WHERE GUID = v_guid + ; - SET v_code_type_error_bad_data := 'BAD_DATA'; - SET v_id_type_error_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1); - - SET a_guid := IFNULL(a_guid, UUID()); - - DROP TABLE IF EXISTS tmp_Category; - - CREATE TEMPORARY TABLE tmp_Category ( - id_category INT NOT NULL - , code VARCHAR(50) NOT NULL - , name VARCHAR(255) NOT NULL - , description VARCHAR(4000) NULL - , active BIT NOT NULL - , display_order INT NOT NULL - , can_view BIT NULL - , can_edit BIT NULL - , can_admin BIT NULL - , name_error VARCHAR(255) NOT NULL - , is_new BIT NOT NULL + CALL partsltd_prod.p_shop_save_product_category ( + 'Test save product category' -- comment + , v_guid -- guid + , 1 -- id_user + , 1 -- debug ); - CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( - display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , guid BINARY(36) NOT NULL - , id_type INT NULL - /* - CONSTRAINT FK_tmp_Msg_Error_id_type - FOREIGN KEY (id_type) - REFERENCES Shop_Msg_Error_Type (id_type), - */ - , code VARCHAR(50) NOT NULL - , msg VARCHAR(4000) NOT NULL - ); - + SELECT * + FROM partsltd_prod.Shop_Product_Category + ; + SELECT * + FROM partsltd_prod.Shop_Product_Category_Temp + ; - -- Get data from Temp table - INSERT INTO tmp_Category ( - id_category - , code - , name - , description - , active - , display_order - , name_error - , is_new - ) - SELECT - IFNULL(PC_T.id_category, PC.id_category) AS id_category - , IFNULL(PC_T.code, PC.code) AS code - , IFNULL(PC_T.name, PC.code) AS name - , IFNULL(PC_T.description, PC.description) AS description - , IFNULL(PC_T.active, PC.active) AS active - , IFNULL(PC_T.display_order, PC.display_order) AS display_order - , IFNULL(PC_T.name, IFNULL(PC.name, IFNULL(PC_T.code, IFNULL(PC.code, IFNULL(PC_T.id_category, '(No Product Category)'))))) AS name_error - , CASE WHEN IFNULL(PC_T.id_category, 0) < 1 THEN 1 ELSE 0 END AS is_new - FROM Shop_Product_Category_Temp PC_T - LEFT JOIN Shop_Product_Category PC ON PC_T.id_category = PC.id_category - WHERE PC_T.guid = a_guid - ; - - -- Validation - -- Missing mandatory fields - -- code - INSERT INTO tmp_Msg_Error ( - guid - , id_type - , code - , msg - ) - SELECT - a_guid AS GUID - , v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('The following category(s) do not have a code: ', GROUP_CONCAT(t_C.name_error SEPARATOR ', ')) AS msg - FROM tmp_Category t_C - ; - -- name - INSERT INTO tmp_Msg_Error ( - guid - , id_type - , code - , msg - ) - SELECT - a_guid AS GUID - , v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('The following category(s) do not have a name: ', GROUP_CONCAT(t_C.name_error SEPARATOR ', ')) AS msg - FROM tmp_Category t_C - ; - -- display_order - INSERT INTO tmp_Msg_Error ( - guid - , id_type - , code - , msg - ) - SELECT - a_guid AS GUID - , v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('The following category(s) do not have a display order: ', GROUP_CONCAT(t_C.name_error SEPARATOR ', ')) AS msg - FROM tmp_Category t_C - ; - - SELECT * FROM tmp_Category; - - -- Permissions - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN -- (SELECT * FROM tmp_Product WHERE is_new = 0 LIMIT 1) THEN - SET v_ids_product_permission := ( - SELECT GROUP_CONCAT(P.id_product SEPARATOR ',') - FROM Shop_Product P - INNER JOIN Shop_Product_Category PC - ON P.id_category = PC.id_category - AND PC.is_new = 0 - ); - IF NOT ISNULL(v_ids_product_permission) THEN - SET v_id_permission_product = (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_PRODUCT' LIMIT 1); - - CALL p_shop_calc_user(a_guid, a_id_user, v_id_permission_product, v_ids_product_permission); - - UPDATE tmp_Category t_C - INNER JOIN Shop_Product P ON t_C.id_category = P.id_product - INNER JOIN Shop_Calc_User_Temp UE_T - ON P.id_product = UE_T.id_product - AND UE_T.GUID = a_guid - SET - t_C.can_view = UE_T.can_view - , t_C.can_edit = UE_T.can_edit - , t_C.can_admin = UE_T.can_admin - ; - - CALL p_shop_clear_calc_user(a_guid); - END IF; - END IF; - - SELECT * FROM tmp_Category; - - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN - START TRANSACTION; - - IF NOT ISNULL(v_ids_product_permission) THEN - INSERT INTO Shop_Product_Change_Set ( comment ) - VALUES ( a_comment ) - ; - - SET v_id_change_set := LAST_INSERT_ID(); - - UPDATE Shop_Product_Category PC - INNER JOIN tmp_Category t_C ON PC.id_category = t_C.id_category - SET - PC.id_category = t_C.id_category - , PC.code = t_C.code - , PC.name = t_P.name - , PC.description = t_C.description - , PC.display_order = t_C.display_order - , PC.active = t_C.active - , P.id_change_set = v_id_change_set - ; - END IF; - - INSERT INTO Shop_Product_Category ( - id_category - , code - , name - , description - , display_order - , active - , created_by - , created_on - ) - SELECT - t_C.id_category AS id_category - , t_C.code AS code - , t_C.name AS name - , t_C.description AS description - , t_C.active AS active - , t_P.display_order AS display_order - , a_id_user AS created_by - , v_now AS created_on - FROM tmp_Category t_C - WHERE is_new = 1 - AND active = 1 - ; - - ROLLBACK; - END IF; - - SELECT * FROM tmp_Msg_Error; - SELECT * FROM tmp_Category; - - DROP TEMPORARY TABLE IF EXISTS tmp_Catgory; - DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + CALL partsltd_prod.p_debug_timing_reporting ( v_time_start ); END // DELIMITER ;; +/* +CALL partsltd_prod.p_shop_save_product_category_test (); -select * -from shop_product_category; -select * -from shop_product_category_temp; - -SELECT 'nips' as guid; - -CALL p_shop_save_product_category_TEST (1, 'nips', 'y'); - -select * -from shop_product_category; -select * -from shop_product_category_temp; - +DELETE FROM partsltd_prod.Shop_Product_Category_Temp; +DROP TABLE IF EXISTS tmp_Msg_Error; +*/ -- Clear previous proc DROP PROCEDURE IF EXISTS p_shop_clear_calc_product_permutation; @@ -8403,7 +8219,7 @@ BEGIN SET v_id_type_error_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1); SET v_id_access_level_edit := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'EDIT' LIMIT 1); - SET a_guid := IFNULL(a_guid, UUID()); + CALL p_validate_guid ( a_guid ); SET a_debug := IFNULL(a_debug, 0); IF a_debug = 1 THEN @@ -8684,7 +8500,9 @@ BEGIN , active , guid ) - VALUES ( + VALUES + /* Test 1 - Update + ( 4 -- id_product , 1 -- id_category , 'Laptops' -- name @@ -8693,7 +8511,20 @@ BEGIN , 2 -- display_order , 1 -- active , v_guid - ); + ) + */ + /* Test 2 - Insert */ + ( + -14 -- id_product + , 5 -- id_category + , 'Clip' -- name + , 0 -- has_variations + , 1 -- id_access_level_required + , 1 -- display_order + , 1 -- active + , v_guid + ) + ; COMMIT; @@ -8780,7 +8611,7 @@ BEGIN WHERE MET.code = 'BAD_DATA' ; - SET a_id_user := TRIM(IFNULL(a_id_user, 0)); + SET a_id_user := IFNULL(a_id_user, 0); SET a_get_all_product_category := IFNULL(a_get_all_product_category, 0); SET a_get_inactive_product_category := IFNULL(a_get_inactive_product_category, 0); SET a_ids_product_category := TRIM(IFNULL(a_ids_product_category, '')); @@ -9201,6 +9032,9 @@ BEGIN DELETE FROM tmp_Product_calc; DELETE FROM tmp_Permutation_calc; ELSE + SELECT * FROM Shop_Product_Category_Temp; + SELECT * FROM Shop_Product_Temp; + SELECT * FROM Shop_Product_Permutation_Temp; */ START TRANSACTION; @@ -9923,7 +9757,7 @@ CALL partsltd_prod.p_shop_get_many_product ( , 0 # a_get_inactive_image , '' # a_ids_image , 0 # a_get_products_quantity_stock_below_minimum - , 1 # a_debug + , 0 # a_debug ); select * FROM partsltd_prod.Shop_Calc_User_Temp; @@ -10273,7 +10107,8 @@ DELIMITER // CREATE PROCEDURE p_shop_save_product_permutation ( IN a_comment VARCHAR(500), IN a_guid BINARY(36), - IN a_id_user INT + IN a_id_user INT, + IN a_debug BIT ) BEGIN @@ -10283,7 +10118,7 @@ BEGIN DECLARE v_ids_product_permission LONGTEXT; DECLARE v_id_change_set INT; DECLARE v_id_access_level_edit INT; - DECLARE v_now DATETIME; + DECLARE v_time_start TIMESTAMP(6); DECLARE exit handler for SQLEXCEPTION BEGIN @@ -10302,33 +10137,34 @@ BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , guid BINARY(36) NOT NULL , id_type INT NULL , code VARCHAR(50) NOT NULL , msg VARCHAR(4000) NOT NULL ); INSERT INTO tmp_Msg_Error ( - guid - , id_type + id_type , code , msg ) SELECT - a_guid - , NULL + MET.id_type , @errno , @text + FROM partsltd_prod.Shop_Msg_Error_Type MET + WHERE MET.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 := 'BAD_DATA'; SET v_id_type_error_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1); SET v_id_access_level_edit := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'EDIT' LIMIT 1); - SET a_guid := IFNULL(a_guid, UUID()); + CALL p_validate_guid ( a_guid ); DROP TABLE IF EXISTS tmp_Permutation; @@ -10336,14 +10172,15 @@ BEGIN id_permutation INT NOT NULL , id_product INT NOT NULL , description VARCHAR(4000) NOT NULL - , cost_local FLOAT NOT NULL + , cost_local_VAT_excl FLOAT NULL + , cost_local_VAT_incl FLOAT NULL , id_currency_cost INT NOT NULL - , profit_local_min FLOAT NOT NULL + , profit_local_min FLOAT NULL , 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 NOT NULL , is_subscription BIT NOT NULL , id_unit_measurement_interval_recurrence INT @@ -10362,7 +10199,6 @@ BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , guid BINARY(36) NOT NULL , id_type INT NULL , code VARCHAR(50) NOT NULL , msg VARCHAR(4000) NOT NULL @@ -10374,7 +10210,8 @@ BEGIN id_permutation , id_product , description - , cost_local + , cost_local_VAT_excl + , cost_local_VAT_incl , id_currency_cost , profit_local_min , latency_manufacture @@ -10398,7 +10235,8 @@ BEGIN PP_T.id_permutation , IFNULL(PP_T.id_product, PP.id_product) AS id_product , IFNULL(PP_T.description, PP.description) AS description - , IFNULL(PP_T.cost_local, PP.cost_local) AS cost_local + , IFNULL(PP_T.cost_local_VAT_excl, PP.cost_local_VAT_excl) AS cost_local_VAT_excl + , IFNULL(PP_T.cost_local_VAT_incl, PP.cost_local_VAT_incl) AS cost_local_VAT_incl , IFNULL(PP_T.id_currency_cost, PP.id_currency_cost) AS a_id_currency_cost , IFNULL(PP_T.profit_local_min, PP.profit_local_min) AS profit_local_min , IFNULL(PP_T.latency_manufacture, PP.latency_manufacture) AS latency_manufacture @@ -10415,7 +10253,7 @@ BEGIN , IFNULL(PP_T.id_unit_measurement_interval_expiration_unsealed, PP.id_unit_measurement_interval_expiration_unsealed) AS id_unit_measurement_interval_expiration_unsealed , IFNULL(PP_T.count_interval_expiration_unsealed, PP.count_interval_expiration_unsealed) AS count_interval_expiration_unsealed , IFNULL(PP_T.active, PP.active) AS active - , fn_shop_get_product_permutation_name(PP_T.id_permutation) + , IFNULL(fn_shop_get_product_permutation_name(PP_T.id_permutation), '(No Permutation)') AS name_error , CASE WHEN IFNULL(PP_T.id_permutation, 0) < 1 THEN 1 ELSE 0 END AS is_new FROM Shop_Product_Permutation_Temp PP_T LEFT JOIN Shop_Product_Permutation PP ON PP_T.id_permutation = PP.id_permutation @@ -10427,65 +10265,75 @@ BEGIN -- id_product IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.id_product) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , id_product + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following product permutation(s) do not have a product: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P WHERE ISNULL(t_P.id_product) ; END IF; - -- cost_local - IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.cost_local) LIMIT 1) THEN + -- cost_local_VAT_excl + IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE NOT ISNULL(t_P.cost_local_VAT_excl) AND t_P.cost_local_VAT_excl < 0 LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , cost_local + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('The following product permutation(s) do not have a local cost: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg + , CONCAT('The following product permutation(s) do not have a valid local cost excluding VAT: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P - WHERE ISNULL(t_P.cost_local) + WHERE NOT ISNULL(t_P.cost_local_VAT_excl) AND t_P.cost_local_VAT_excl < 0 + ; + END IF; + -- cost_local_VAT_incl + IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE NOT ISNULL(t_P.cost_local_VAT_incl) AND t_P.cost_local_VAT_incl < 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('The following product permutation(s) do not have a valid local cost including VAT: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg + FROM tmp_Permutation t_P + WHERE NOT ISNULL(t_P.cost_local_VAT_incl) AND t_P.cost_local_VAT_incl < 0 ; END IF; -- profit_local_min - IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.profit_local_min) LIMIT 1) THEN + IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE NOT ISNULL(t_P.profit_local_min) AND t_P.profit_local_min < 0 LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , profit_local_min + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following product permutation(s) do not have a local minimum profit: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P - WHERE ISNULL(t_P.profit_local_min) + WHERE NOT ISNULL(t_P.profit_local_min) AND t_P.profit_local_min < 0 ; END IF; + + SELECT 'NIPS'; + -- latency_manufacture IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.latency_manufacture) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , latency_manufacture + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following product permutation(s) do not have a manufacturing latency: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P @@ -10495,14 +10343,12 @@ BEGIN -- id_unit_measurement_quantity IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.id_unit_measurement_quantity) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , id_unit_measurement_quantity + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following product permutation(s) do not have a unit measurement for stock quantities: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P @@ -10512,14 +10358,12 @@ BEGIN -- count_unit_measurement_per_quantity_step IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.count_unit_measurement_per_quantity_step) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , count_unit_measurement_per_quantity_step + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following product permutation(s) do not have a count unit measurement per quantity step: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P @@ -10529,14 +10373,12 @@ BEGIN -- quantity_min IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.quantity_min) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , quantity_min + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following product permutation(s) do not have a minimum quantity: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P @@ -10546,14 +10388,12 @@ BEGIN -- quantity_max IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.quantity_max) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , quantity_max + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following product permutation(s) do not have a maximum quantity: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P @@ -10563,14 +10403,12 @@ BEGIN -- is_subscription IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.is_subscription) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , is_subscription + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following product permutation(s) do not have an is subscription?: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P @@ -10580,14 +10418,12 @@ BEGIN -- does_expire_faster_once_unsealed IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.does_expire_faster_once_unsealed) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , does_expire_faster_once_unsealed + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following product permutation(s) do not have a does expire faster once unsealed: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P @@ -10624,14 +10460,12 @@ BEGIN IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.can_edit) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type + id_type , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following product permutation(s) do not have product edit permission: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P @@ -10641,8 +10475,6 @@ BEGIN END IF; END IF; - SET v_now := CURRENT_DATETIME(); - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN START TRANSACTION; @@ -10658,7 +10490,8 @@ BEGIN SET PP.id_product = t_P.id_product , PP.description = t_P.description - , PP.cost_local = t_P.cost_local + , PP.cost_local_VAT_excl = t_P.cost_local_VAT_excl + , PP.cost_local_VAT_incl = t_P.cost_local_VAT_incl , PP.id_currency_cost = t_P.id_currency_cost , PP.profit_local_min = t_P.profit_local_min , PP.latency_manufacture = t_P.latency_manufacture @@ -10682,7 +10515,8 @@ BEGIN INSERT INTO Shop_Product_Permutation ( id_product , description - , cost_local + , cost_local_VAT_excl + , cost_local_VAT_incl , id_currency_cost , profit_local_min , latency_manufacture @@ -10705,7 +10539,8 @@ BEGIN SELECT t_P.id_product AS id_product , t_P.description AS description - , t_P.cost_local AS cost_local + , t_P.cost_local_VAT_excl AS cost_local_VAT_excl + , t_P.cost_local_VAT_incl AS cost_local_VAT_incl , t_P.id_currency_cost AS id_currency_cost , t_P.profit_local_min AS profit_local_min , t_P.latency_manufacture AS latency_manufacture @@ -10723,7 +10558,7 @@ BEGIN , t_P.count_interval_expiration_unsealed AS count_interval_expiration_unsealed , t_P.active AS active , a_id_user AS created_by - , v_now AS created_on + , v_time_start AS created_on FROM tmp_Permutation t_P WHERE is_new = 1 @@ -10736,10 +10571,22 @@ BEGIN COMMIT; END IF; - SELECT * FROM tmp_Msg_Error; + # 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 + ; - DROP TEMPORARY TABLE IF EXISTS tmp_Permutation; - DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + IF a_debug = 1 THEN + SELECT * from tmp_Permutation; + END IF; + + DROP TEMPORARY TABLE tmp_Permutation; + 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 ;; @@ -10825,6 +10672,129 @@ WHERE id_permutation = 1; */ + +-- Clear previous proc +DROP PROCEDURE IF EXISTS partsltd_prod.p_shop_save_product_permutation_test; + + +DELIMITER // +CREATE PROCEDURE p_shop_save_product_permutation_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_Product_Permutation + ; + SELECT * + FROM partsltd_prod.Shop_Product_Permutation_Temp + ; + + START TRANSACTION; + + INSERT INTO partsltd_prod.Shop_Product_Permutation_Temp ( + id_permutation + , id_product + , description + , cost_local_VAT_excl + , cost_local_VAT_incl + , id_currency_cost + , profit_local_min + , latency_manufacture + , id_unit_measurement_quantity + , count_unit_measurement_per_quantity_step + , quantity_min + , quantity_max + , quantity_stock + , is_subscription + , id_unit_measurement_interval_recurrence + , count_interval_recurrence + , id_stripe_product + , does_expire_faster_once_unsealed + , id_unit_measurement_interval_expiration_unsealed + , count_interval_expiration_unsealed + , active + , guid + ) + VALUES + /* Test 1 - Insert */ + ( + -1 -- id_permutation + , 8 -- id_product + , 'Hair clip' -- description + , NULL -- cost_local_VAT_excl + , NULL -- cost_local_VAT_incl + , 1 -- id_currency_cost + , NULL -- profit_local_min + , 1 -- latency_manufacture + , 3 -- id_unit_measurement_quantity + , 1 -- count_unit_measurement_per_quantity_step + , 0 -- quantity_min + , 0 -- quantity_max + , 2 -- quantity_stock + , FALSE -- is_subscription + , NULL -- id_unit_measurement_interval_recurrence + , NULL -- count_interval_recurrence + , NULL -- id_stripe_product + , FALSE -- does_expire_faster_once_unsealed + , NULL -- id_unit_measurement_interval_expiration_unsealed + , NULL -- count_interval_expiration_unsealed + , 1 -- active + , v_guid + ) + /* Test 2 - Update + ( + 4 -- id_product + , 1 -- id_category + , 'Laptops' -- name + , 0 -- has_variations + , 2 -- id_access_level_required + , 2 -- display_order + , 1 -- active + , v_guid + ) + */ + ; + + COMMIT; + + SELECT * + FROM partsltd_prod.Shop_Product_Permutation_Temp + WHERE GUID = v_guid + ; + + CALL partsltd_prod.p_shop_save_product_permutation ( + 'Test save product' -- comment + , v_guid -- guid + , 1 -- id_user + , 1 -- debug + ); + + SELECT * + FROM partsltd_prod.Shop_Product_Permutation + ; + SELECT * + FROM partsltd_prod.Shop_Product_Permutation_Temp + ; + + CALL partsltd_prod.p_debug_timing_reporting ( v_time_start ); +END // +DELIMITER ;; + +/* +CALL partsltd_prod.p_shop_save_product_permutation_test (); + +DELETE FROM partsltd_prod.Shop_Product_Permutation_Temp; + +DROP TABLE IF EXISTS tmp_Msg_Error; + + +SELECT * FROM partsltd_prod.Shop_Product +*/ DROP PROCEDURE IF EXISTS p_shop_get_many_product_variation; DELIMITER // @@ -14336,13 +14306,11 @@ BEGIN IF ISNULL(a_id_user) THEN INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg ) VALUES ( - v_guid, v_id_type_error_bad_data, v_code_error_bad_data, CONCAT('User ID required for authorisation.') @@ -14723,9 +14691,9 @@ END // DELIMITER ;; -/* -CALL p_get_many_user ( +CALL p_get_many_user (NULL, 'google-oauth2|109567376920138999933', False, False, False, NULL, 'google-oauth2|109567376920138999933', 0); +/* NULL # a_id_user , 'auth0|6582b95c895d09a70ba10fef' # a_id_user_auth0 , 0 # a_get_all_user @@ -14733,9 +14701,10 @@ CALL p_get_many_user ( , 0 # a_get_first_user_only , NULL # a_ids_user , 'auth0|6582b95c895d09a70ba10fef' # a_ids_user_auth0 - , 1 -- a_debug -); + , 0 -- a_debug +);*/ +/* select * FROM partsltd_prod.Shop_Calc_User_Temp; delete FROM partsltd_prod.Shop_Calc_User_Temp; @@ -16014,7 +15983,7 @@ BEGIN -- Transaction IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN START TRANSACTION; - INSERT INTO partsltd_prod.Shop_Sales_And_Purchasing_Change_Set ( + INSERT INTO partsltd_prod.Shop_User_Change_Set ( comment , updated_last_by , updated_last_on @@ -16215,6 +16184,7 @@ BEGIN , active , guid ) + /* Test 1 - Insert VALUES ( -3 , 1 @@ -16227,8 +16197,26 @@ BEGIN , 'test url' , 1 -- active , v_guid - ); + ) + */ + /* Test 2 - Update */ + SELECT + id_supplier + , id_currency + , name_company + , 'Nat' AS name_contact + , 'Butchery' AS department_contact + , phone_number + , fax + , email + , website + , active + , v_guid + FROM partsltd_prod.Shop_Supplier S + WHERE S.id_supplier = 2 + ; + /* INSERT INTO partsltd_prod.Shop_Supplier_Address_Temp ( id_address , id_supplier @@ -16241,6 +16229,7 @@ BEGIN , active , GUID ) + / Test 1 - Insert VALUES ( -4 , -3 @@ -16253,7 +16242,23 @@ BEGIN , 1 , v_guid ) + / + / Test 2 - Update / + SELECT + id_address + , id_supplier + , id_region + , postcode + , address_line_1 + , address_line_2 + , city + , county + , active + , v_guid + FROM partsltd_prod.Shop_Supplier_Address SA + WHERE SA.id_supplier = 2 ; + */ COMMIT; @@ -16291,15 +16296,15 @@ BEGIN END // DELIMITER ;; +/* CALL partsltd_prod.p_shop_save_supplier_test (); DELETE FROM partsltd_prod.Shop_Supplier_Temp; DELETE FROM partsltd_prod.Shop_Supplier_Address_Temp; DROP TABLE IF EXISTS tmp_Msg_Error; -/* -Cannot add or update a child row: a foreign key constraint fails (`partsltd_prod`.`shop_supplier_address`, CONSTRAINT `FK_Shop_Supplier_Address_id_supplier` FOREIGN KEY (`id_supplier`) REFERENCES `shop_supplier` (`id_supplier`) ON UPDATE RESTRICT) +Cannot add or update a child row: a foreign key constraint fails (`partsltd_prod`.`shop_supplier`, CONSTRAINT `FK_Shop_Supplier_id_change_set` FOREIGN KEY (`id_change_set`) REFERENCES `shop_sales_and_purchasing_change_set` (`id_change_set`)) */ @@ -16850,7 +16855,7 @@ BEGIN 'A valid ID is required for the following Supplier Purchase Order(s): ' , GROUP_CONCAT(CONCAT(IFNULL(t_SPO.id_stock, '(No Supplier Purchase Order)')) SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO + FROM tmp_Supplier_Purchase_Order t_SPO LEFT JOIN partsltd_prod.Shop_Supplier_Purchase_Order SPO ON t_SPO.id_order = SPO.id_order WHERE 1=1 AND t_SPO.id_stock > 0 @@ -16881,7 +16886,7 @@ BEGIN 'A valid supplier is required for the following Supplier Purchase Order(s): ' , GROUP_CONCAT(CONCAT(IFNULL(t_SPO.id_stock, '(No Supplier Purchase Order)'), ' - ', t_SPO.id_supplier_ordered) SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO + FROM tmp_Supplier_Purchase_Order t_SPO LEFT JOIN partsltd_prod.Shop_Supplier S ON t_SPO.id_supplier_ordered = S.id_supplier WHERE 1=1 AND ( @@ -16914,7 +16919,7 @@ BEGIN 'A valid currency is required for the following Supplier Purchase Order(s): ' , GROUP_CONCAT(CONCAT(IFNULL(t_SPO.id_stock, '(No Supplier Purchase Order)'), ' - ', t_SPO.id_currency_cost) SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO + FROM tmp_Supplier_Purchase_Order t_SPO LEFT JOIN partsltd_prod.Shop_Currency C ON t_SPO.id_currency_cost = C.id_currency WHERE 1=1 AND ( @@ -17124,7 +17129,7 @@ BEGIN SELECT * from partsltd_prod.Shop_Calc_User_Temp WHERE GUID = a_guid; END IF; - IF NOT EXISTS (SELECT can_view FROM partsltd_prod.Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = a_guid) THEN + 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 ( @@ -17132,11 +17137,18 @@ BEGIN , code , msg ) - VALUES ( + SELECT v_id_type_error_no_permission , v_code_type_error_no_permission - , CONCAT('You do not have view permissions for ', (SELECT name FROM partsltd_prod.Shop_Permission WHERE id_permission = v_id_permission_supplier LIMIT 1)) - ) + , CONCAT( + 'You do not have view permissions for ' + , GROUP_CONCAT(name SEPARATOR ', ') + ) AS msg + 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; @@ -17447,7 +17459,7 @@ BEGIN , active , GUID ) - /* Test 1 - Insert + /* Test 1 - Insert */ VALUES ( -1 , 1 @@ -17455,7 +17467,7 @@ BEGIN , 1 , v_guid ) - */ + /* Test 2 - Update SELECT id_order , id_supplier_ordered @@ -17464,6 +17476,7 @@ BEGIN , v_guid FROM partsltd_prod.Shop_Supplier_Purchase_Order WHERE id_order = 6 + */ ; INSERT INTO partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link_Temp ( @@ -17480,7 +17493,7 @@ BEGIN , cost_total_local_VAT_incl , GUID ) - /* Test 1 - Insert + /* Test 1 - Insert */ VALUES ( -1 , -1 @@ -17495,7 +17508,7 @@ BEGIN , 6 , v_guid ) - */ + /* Test 2 - Update SELECT id_link , id_order @@ -17511,6 +17524,7 @@ BEGIN , v_guid FROM partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link WHERE id_order = 6 + */ ; COMMIT; @@ -17557,6 +17571,7 @@ DELETE FROM partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link_Temp; DROP TABLE IF EXISTS tmp_Msg_Error; +/* Cannot add or update a child row: a foreign key constraint fails (`partsltd_prod`.`shop_supplier_address`, CONSTRAINT `FK_Shop_Supplier_Address_id_supplier` FOREIGN KEY (`id_supplier`) REFERENCES `shop_supplier` (`id_supplier`) ON UPDATE RESTRICT) */ @@ -18082,11 +18097,13 @@ CREATE PROCEDURE p_shop_save_manufacturing_purchase_order ( 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_manufacturing_purchase_order 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); @@ -18128,6 +18145,8 @@ BEGIN 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_manufacturing_purchase_order := (SELECT GROUP_CONCAT(id_permission SEPARATOR ',') FROM partsltd_prod.Shop_Permission WHERE code IN ('STORE_MANUFACTURING_PURCHASE_ORDER', 'STORE_PRODUCT')); SET v_id_access_level_edit := (SELECT id_access_level FROM partsltd_prod.Shop_Access_Level WHERE code = 'EDIT' LIMIT 1); @@ -18141,28 +18160,38 @@ BEGIN -- Temporary tables CREATE TEMPORARY TABLE tmp_Manufacturing_Purchase_Order ( id_order INT NOT NULL PRIMARY KEY - , id_currency_cost INT NOT NULL + , id_order_temp INT NOT NULL + , id_currency INT NOT NULL + , active BIT NOT NULL , is_new BIT NOT NULL , name_error VARCHAR(1000) NOT NULL + , cost_total_local_VAT_excl FLOAT NULL + , cost_total_local_VAT_incl FLOAT NULL + , price_total_local_VAT_excl FLOAT NULL + , price_total_local_VAT_incl FLOAT NULL ); CREATE TEMPORARY TABLE tmp_Manufacturing_Purchase_Order_Product_Link ( id_link INT NOT NULL PRIMARY KEY , id_order INT NOT NULL - , id_permutation INT NOT NULL - , id_currency_cost INT NOT NULL - , quantity_used FLOAT NOT NULL + , id_product INT NULL + , id_permutation INT NULL + , id_currency INT NOT NULL , id_unit_quantity INT NOT NULL + , quantity_used FLOAT NOT NULL , quantity_produced FLOAT NULL , id_unit_latency_manufacture INT NULL , latency_manufacture INT NULL , display_order INT NOT NULL , active BIT NOT NULL - , name_error VARCHAR(200) NOT NULL - , cost_total_local_VAT_excl FLOAT NOT NULL - , cost_total_local_VAT_incl FLOAT NOT NULL - , cost_unit_local_VAT_excl FLOAT NOT NULL - , cost_unit_local_VAT_incl FLOAT NOT NULL + , cost_unit_local_VAT_excl FLOAT NULL + , cost_unit_local_VAT_incl FLOAT NULL + , cost_total_local_VAT_excl FLOAT NULL + , cost_total_local_VAT_incl FLOAT NULL + , price_unit_local_VAT_excl FLOAT NULL + , price_unit_local_VAT_incl FLOAT NULL + , price_total_local_VAT_excl FLOAT NULL + , price_total_local_VAT_incl FLOAT NULL , has_order BIT NULL , is_new BIT NOT NULL , name_error VARCHAR(1000) NOT NULL @@ -18177,21 +18206,37 @@ BEGIN INSERT INTO tmp_Manufacturing_Purchase_Order ( id_order - , id_currency_cost + , id_order_temp + , id_currency + , active + , is_new + , name_error ) SELECT - SPO_T.id_order - , IFNULL(IFNULL(SPO_T.id_currency_cost, MPO.id_currency_cost), 0) AS id_currency_cost - FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp SPO_T - LEFT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order MPO ON SPO_T.id_order = MPO.id_order - WHERE SPO_T.GUID = a_guid + MPO_T.id_order + , MPO_T.id_order + , IFNULL(IFNULL(MPO_T.id_currency, MPO.id_currency), 0) AS id_currency + , IFNULL(IFNULL(MPO_T.active, MPO.active), 1) AS active + , IFNULL(MPO_T.id_order, 0) < 1 AS is_new + , CASE WHEN IFNULL(MPO_T.id_order, -1) < 0 THEN + CONCAT('New Manufacturing Purchase Order ', MPO_T.id_order) + ELSE + CONCAT( + IFNULL(IFNULL(MPO_T.id_order, MPO.id_order), '(No Manufacturing Purchase Order)') + , ' - ' + , IFNULL(IFNULL(MPO_T.id_currency, MPO.id_currency), '(No Currency)') + ) + END AS name_error + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp MPO_T + LEFT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order MPO ON MPO_T.id_order = MPO.id_order + WHERE MPO_T.GUID = a_guid ; INSERT INTO tmp_Manufacturing_Purchase_Order_Product_Link ( id_link , id_order + , id_product , id_permutation - , id_currency_cost , id_unit_quantity , quantity_used , quantity_produced @@ -18199,55 +18244,126 @@ BEGIN , latency_manufacture , display_order , active - , name_error - , is_new - , cost_total_local_VAT_excl - , cost_total_local_VAT_incl , cost_unit_local_VAT_excl , cost_unit_local_VAT_incl + , price_unit_local_VAT_excl + , price_unit_local_VAT_incl , has_order + , is_new ) SELECT - IFNULL(SPOPL_T.id_link, 0) AS id_link - , IFNULL(IFNULL(SPOPL_T.id_order, MPOPL.id_order), 0) AS id_order - , IFNULL(IFNULL(SPOPL_T.id_permutation, MPOPL.id_permutation), 0) AS id_permutation - , IFNULL(IFNULL(SPOPL_T.id_currency_cost, MPOPL.id_currency_cost), 0) AS id_currency_cost - , IFNULL(IFNULL(SPOPL_T.id_unit_quantity, MPOPL.id_unit_quantity), 0) AS id_unit_quantity - , SPOPL_T.quantity_used AS quantity_used - , SPOPL_T.quantity_produced AS quantity_produced - , SPOPL_T.id_unit_latency_manufacture AS id_unit_latency_manufacture - , SPOPL_T.latency_manufacture AS latency_manufacture - , IFNULL(SPOPL_T.display_order, RANK() OVER (PARTITION BY IFNULL(IFNULL(SPOPL_T.id_order, MPOPL.id_order), 0) ORDER BY IFNULL(IFNULL(SPOPL_T.display_order, MPOPL.display_order), 0))) AS display_order - , IFNULL(IFNULL(SPOPL_T.active, MPOPL.active), 1) AS active - , CONCAT( - fn_shop_get_product_permutation_name(SPOPL_T.id_permutation) - , ' - x' - , IFNULL(SPOPL_T.quantity_used, '(No Quantity)') - ) AS name_error - , IFNULL(SPOPL_T.id_link, 0) < 1 AS is_new - , SPOPL_T.cost_total_local_VAT_excl AS cost_total_local_VAT_excl - , SPOPL_T.cost_total_local_VAT_incl AS cost_total_local_VAT_incl - , SPOPL_T.cost_total_local_VAT_excl / SPOPL_T.quantity_used AS cost_unit_local_VAT_excl - , SPOPL_T.cost_total_local_VAT_incl / SPOPL_T.quantity_used AS cost_unit_local_VAT_incl + IFNULL(MPOPL_T.id_link, 0) AS id_link + , IFNULL(IFNULL(MPOPL_T.id_order, MPOPL.id_order), 0) AS id_order + , IFNULL(MPOPL_T.id_product, PP.id_product) AS id_product + , IFNULL( + IFNULL( + IFNULL( + MPOPL_T.id_permutation + , CASE WHEN NOT ISNULL(MPOPL_T.id_product) AND NOT ISNULL(MPOPL_T.csv_list_variations) THEN + partsltd_prod.fn_shop_get_id_product_permutation_from_variation_csv_list(MPOPL_T.id_product, MPOPL_T.csv_list_variations) + ELSE NULL END + ) + , MPOPL.id_permutation + ) + , 0 + ) AS id_permutation + , IFNULL(IFNULL(MPOPL_T.id_unit_quantity, MPOPL.id_unit_quantity), 0) AS id_unit_quantity + , MPOPL_T.quantity_used AS quantity_used + , MPOPL_T.quantity_produced AS quantity_produced + , MPOPL_T.id_unit_latency_manufacture AS id_unit_latency_manufacture + , MPOPL_T.latency_manufacture AS latency_manufacture + , IFNULL(MPOPL_T.display_order, RANK() OVER (PARTITION BY IFNULL(IFNULL(MPOPL_T.id_order, MPOPL.id_order), 0) ORDER BY IFNULL(IFNULL(MPOPL_T.display_order, MPOPL.display_order), 0))) AS display_order + , IFNULL(IFNULL(MPOPL_T.active, MPOPL.active), 1) AS active + -- , MPOPL_T.cost_total_local_VAT_excl / MPOPL_T.quantity_used AS cost_unit_local_VAT_excl + -- , MPOPL_T.cost_total_local_VAT_incl / MPOPL_T.quantity_used AS cost_unit_local_VAT_incl + , IFNULL(MPOPL_T.cost_unit_local_VAT_excl, MPOPL.cost_unit_local_VAT_excl) AS cost_unit_local_VAT_excl + , IFNULL(MPOPL_T.cost_unit_local_VAT_incl, MPOPL.cost_unit_local_VAT_incl) AS cost_unit_local_VAT_incl + , IFNULL(MPOPL_T.price_unit_local_VAT_excl, MPOPL.price_unit_local_VAT_excl) AS price_unit_local_VAT_excl + , IFNULL(MPOPL_T.price_unit_local_VAT_incl, MPOPL.price_unit_local_VAT_incl) AS price_unit_local_VAT_incl , NOT ISNULL(t_MPO.id_order) AS has_order - FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp SPOPL_T - LEFT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link MPOPL ON SPOPL_T.id_link = MPOPL.id_link - LEFT JOIN tmp_Manufacturing_Purchase_Order t_MPO ON SPOPL_T.id_order = t_MPO.id_order - WHERE SPOPL_T.GUID = a_guid + , IFNULL(MPOPL_T.id_link, 0) < 1 AS is_new + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp MPOPL_T + LEFT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link MPOPL ON MPOPL_T.id_link = MPOPL.id_link + LEFT JOIN tmp_Manufacturing_Purchase_Order t_MPO ON MPOPL_T.id_order = t_MPO.id_order + LEFT JOIN partsltd_prod.Shop_Product_Permutation PP ON MPOPL.id_permutation = PP.id_permutation + WHERE MPOPL_T.GUID = a_guid ; + UPDATE tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + -- INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp MPOPL_T ON t_MPOPL.id_order = MPOPL_T.id_order + LEFT JOIN partsltd_prod.Shop_Product_Permutation PP ON t_MPOPL.id_permutation = PP.id_permutation + LEFT JOIN partsltd_prod.Shop_Product P ON PP.id_product = P.id_product + LEFT JOIN partsltd_prod.Shop_Product_Category PC ON P.id_category = PC.id_category + SET + name_error = CONCAT( + CASE WHEN ISNULL(t_MPOPL.id_permutation) THEN + CASE WHEN ISNULL(PP.id_product) THEN + '(No Product Permutation)' + ELSE + CONCAT( + PC.name + , ' - ' + , P.name + ) + END + ELSE + fn_shop_get_product_permutation_name(PP.id_permutation) + END + , ' - x' + , IFNULL(t_MPOPL.quantity_used, '(No Quantity)') + , ' Used - x' + , IFNULL(t_MPOPL.quantity_produced, '(No Quantity)') + , ' Produced' + ) + , cost_total_local_VAT_excl = t_MPOPL.quantity_used * t_MPOPL.cost_unit_local_VAT_excl + , cost_total_local_VAT_incl = t_MPOPL.quantity_used * t_MPOPL.cost_unit_local_VAT_incl + , price_total_local_VAT_excl = t_MPOPL.quantity_produced * t_MPOPL.price_unit_local_VAT_excl + , price_total_local_VAT_incl = t_MPOPL.quantity_produced * t_MPOPL.price_unit_local_VAT_incl + ; + + -- Insert missing order records INSERT INTO tmp_Manufacturing_Purchase_Order ( id_order - , id_currency_cost + , id_order_temp + , id_currency + , active + , is_new + , name_error ) SELECT - SPO_T.id_order - , IFNULL(IFNULL(SPO_T.id_currency_cost, MPO.id_currency_cost), 0) AS id_currency_cost + MPO.id_order + , MPO.id_order_temp + , MPO.id_currency + , MPO.active + , FALSE AS is_new + , CONCAT( + IFNULL(MPO.id_order, '(No Manufacturing Purchase Order)') + , ' - ' + , IFNULL(MPO.id_currency, '(No Currency)') + ) AS name_error FROM partsltd_prod.Shop_Manufacturing_Purchase_Order MPO INNER JOIN tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL ON MPO.id_order = t_MPOPL.id_order AND t_MPOPL.has_order = 0 ; + + UPDATE tmp_Manufacturing_Purchase_Order t_MPO + INNER JOIN ( + SELECT + t_MPOPL.id_order + , SUM(t_MPOPL.cost_total_local_VAT_excl) AS cost_total_local_VAT_excl + , SUM(t_MPOPL.cost_total_local_VAT_incl) AS cost_total_local_VAT_incl + , SUM(t_MPOPL.price_total_local_VAT_excl) AS price_total_local_VAT_excl + , SUM(t_MPOPL.price_total_local_VAT_incl) AS price_total_local_VAT_incl + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + GROUP BY t_MPOPL.id_order + ) SUM_t_MPOPL ON t_MPO.id_order = SUM_t_MPOPL.id_order + SET + t_MPO.cost_total_local_VAT_excl = SUM_t_MPOPL.cost_total_local_VAT_excl + , t_MPO.cost_total_local_VAT_incl = SUM_t_MPOPL.cost_total_local_VAT_incl + , t_MPO.price_total_local_VAT_excl = SUM_t_MPOPL.price_total_local_VAT_excl + , t_MPO.price_total_local_VAT_incl = SUM_t_MPOPL.price_total_local_VAT_incl + ; -- Validation -- Manufacturing Purchase Order @@ -18271,20 +18387,20 @@ BEGIN , v_code_type_error_bad_data , CONCAT( 'A valid ID is required for the following Manufacturing Purchase Order(s): ' - , GROUP_CONCAT(CONCAT(IFNULL(t_MPO.id_stock, '(No Manufacturing Purchase Order)')) SEPARATOR ', ') + , GROUP_CONCAT(t_MPO.name_error SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO + FROM tmp_Manufacturing_Purchase_Order t_MPO LEFT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order MPO ON t_MPO.id_order = MPO.id_order WHERE 1=1 - AND t_MPO.id_stock > 0 - AND ISNULL(MPO.id_stock) + AND t_MPO.id_order > 0 + AND ISNULL(MPO.id_order) ; END IF; - # id_currency_cost + # id_currency IF EXISTS ( SELECT * FROM tmp_Manufacturing_Purchase_Order t_MPO - LEFT JOIN partsltd_prod.Shop_Currency C ON t_MPO.id_currency_cost = C.id_currency + LEFT JOIN partsltd_prod.Shop_Currency C ON t_MPO.id_currency = C.id_currency WHERE 1=1 AND ( ISNULL(C.id_currency) @@ -18302,10 +18418,10 @@ BEGIN , v_code_type_error_bad_data , CONCAT( 'A valid currency is required for the following Manufacturing Purchase Order(s): ' - , GROUP_CONCAT(CONCAT(IFNULL(t_MPO.id_stock, '(No Manufacturing Purchase Order)'), ' - ', t_MPO.id_currency_cost) SEPARATOR ', ') + , GROUP_CONCAT(CONCAT(t_MPO.name_error, ' - ', t_MPO.id_currency) SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO - LEFT JOIN partsltd_prod.Shop_Currency C ON t_MPO.id_currency_cost = C.id_currency + FROM tmp_Manufacturing_Purchase_Order t_MPO + LEFT JOIN partsltd_prod.Shop_Currency C ON t_MPO.id_currency = C.id_currency WHERE 1=1 AND ( ISNULL(C.id_currency) @@ -18316,8 +18432,8 @@ BEGIN # id_unit_quantity IF EXISTS ( SELECT * - FROM tmp_Manufacturing_Purchase_Order t_MPO - LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPO.id_unit_quantity = UM.id_unit_measurement + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPOPL.id_unit_quantity = UM.id_unit_measurement WHERE 1=1 AND ( ISNULL(UM.id_unit_measurement) @@ -18335,10 +18451,10 @@ BEGIN , v_code_type_error_bad_data , CONCAT( 'A valid unit measurement of quantity is required for the following Manufacturing Purchase Order(s): ' - , GROUP_CONCAT(CONCAT(IFNULL(t_MPO.id_stock, '(No Manufacturing Purchase Order)'), ' - ', t_MPO.id_currency_cost) SEPARATOR ', ') + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPO.id_unit_quantity) SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO - LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPO.id_unit_quantity = UM.id_unit_measurement + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPOPL.id_unit_quantity = UM.id_unit_measurement WHERE 1=1 AND ( ISNULL(UM.id_unit_measurement) @@ -18346,10 +18462,10 @@ BEGIN ) ; END IF; - # Invalid quantity ordered + # Invalid quantity used IF EXISTS ( SELECT * - FROM tmp_Manufacturing_Purchase_Order_Product_Link + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL WHERE ISNULL(t_MPOPL.quantity_used) OR t_MPOPL.quantity_used <= 0 @@ -18361,20 +18477,22 @@ BEGIN v_id_error_type_bad_data, v_code_error_type_bad_data, CONCAT( - 'A valid quantity ordered is required for the following Manufacturing Purchase Order Item(s): ' - , GROUP_CONCAT(t_MPOPL.name_error SEPARATOR ', ') + 'A valid quantity used is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.quantity_used) SEPARATOR ', ') ) FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL WHERE - ISNULL(t_MPOPL.quantity_used) - OR t_MPOPL.quantity_used <= 0 + NOT ISNULL(t_MPOPL.quantity_used) + AND t_MPOPL.quantity_used <= 0 ; END IF; - # Invalid quantity received + # Invalid quantity produced IF EXISTS ( SELECT * - FROM tmp_Manufacturing_Purchase_Order_Product_Link - WHERE t_MPOPL.quantity_produced < 0 + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.quantity_produced) + AND t_MPOPL.quantity_produced < 0 ) THEN INSERT INTO tmp_Msg_Error ( id_type, code, msg @@ -18383,24 +18501,24 @@ BEGIN v_id_error_type_bad_data, v_code_error_type_bad_data, CONCAT( - 'A valid quantity received is required for the following Manufacturing Purchase Order Item(s): ' - , GROUP_CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.quantity_produced SEPARATOR ', ') + 'A valid quantity produced is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.quantity_produced) SEPARATOR ', ') ) FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL - WHERE t_MPOPL.quantity_produced < 0 + WHERE + NOT ISNULL(t_MPOPL.quantity_produced) + AND t_MPOPL.quantity_produced < 0 ; END IF; # id_unit_latency_manufacture IF EXISTS ( SELECT * - FROM tmp_Manufacturing_Purchase_Order t_MPO - LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPO.id_unit_latency_manufacture = UM.id_unit_measurement - WHERE 1=1 - AND ( - NOT ISNULL(t_MPO.id_unit_latency_manufacture) - OR ISNULL(UM.id_unit_measurement) - OR UM.active = 0 - ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPOPL.id_unit_latency_manufacture = UM.id_unit_measurement + WHERE + ISNULL(t_MPOPL.id_unit_latency_manufacture) + OR ISNULL(UM.id_unit_measurement) + OR UM.active = 0 LIMIT 1 ) THEN INSERT INTO tmp_Msg_Error ( @@ -18413,22 +18531,20 @@ BEGIN , v_code_type_error_bad_data , CONCAT( 'A valid unit measurement of manufacture latency is required for the following Manufacturing Purchase Order(s): ' - , GROUP_CONCAT(CONCAT(IFNULL(t_MPO.id_stock, '(No Manufacturing Purchase Order)'), ' - ', t_MPO.id_unit_latency_manufacture) SEPARATOR ', ') + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.id_unit_latency_manufacture) SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO - LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPO.id_unit_latency_manufacture = UM.id_unit_measurement - WHERE 1=1 - AND ( - NOT ISNULL(t_MPO.id_unit_latency_manufacture) - OR ISNULL(UM.id_unit_measurement) - OR UM.active = 0 - ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPOPL.id_unit_latency_manufacture = UM.id_unit_measurement + WHERE + ISNULL(t_MPOPL.id_unit_latency_manufacture) + OR ISNULL(UM.id_unit_measurement) + OR UM.active = 0 ; END IF; # Invalid manufacture latency IF EXISTS ( SELECT * - FROM tmp_Manufacturing_Purchase_Order_Product_Link + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL WHERE t_MPOPL.latency_manufacture < 0 ) THEN INSERT INTO tmp_Msg_Error ( @@ -18439,13 +18555,111 @@ BEGIN v_code_error_type_bad_data, CONCAT( 'A valid manufacture latency is required for the following Manufacturing Purchase Order Item(s): ' - , GROUP_CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.latency_manufacture SEPARATOR ', ') + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.latency_manufacture) SEPARATOR ', ') ) FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL WHERE t_MPOPL.latency_manufacture < 0 ; END IF; + # Invalid costs excl VAT + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.cost_unit_local_VAT_excl) + AND t_MPOPL.cost_unit_local_VAT_excl < 0 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT( + 'A valid cost excluding VAT is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.cost_unit_local_VAT_excl) SEPARATOR ', ') + ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.cost_unit_local_VAT_excl) + AND t_MPOPL.cost_unit_local_VAT_excl < 0 + ; + END IF; + # Invalid costs incl VAT + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.cost_unit_local_VAT_incl) + AND t_MPOPL.cost_unit_local_VAT_incl < 0 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT( + 'A valid cost including VAT is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.cost_unit_local_VAT_incl) SEPARATOR ', ') + ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.cost_unit_local_VAT_incl) + AND t_MPOPL.cost_unit_local_VAT_incl < 0 + ; + END IF; + + # Invalid prices excl VAT + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.price_unit_local_VAT_excl) + AND t_MPOPL.price_unit_local_VAT_excl < 0 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT( + 'A valid price excluding VAT is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.price_unit_local_VAT_excl) SEPARATOR ', ') + ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.price_unit_local_VAT_excl) + AND t_MPOPL.price_unit_local_VAT_excl < 0 + ; + END IF; + # Invalid prices incl VAT + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.price_unit_local_VAT_incl) + AND t_MPOPL.price_unit_local_VAT_incl < 0 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT( + 'A valid price including VAT is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.price_unit_local_VAT_incl) SEPARATOR ', ') + ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.price_unit_local_VAT_incl) + AND t_MPOPL.price_unit_local_VAT_incl < 0 + ; + END IF; + -- Duplicates IF EXISTS ( SELECT @@ -18462,7 +18676,7 @@ BEGIN SELECT v_id_error_type_bad_data, v_code_error_type_bad_data, - CONCAT('Duplicate records: ', GROUP_CONCAT(t_SPOPLC.name_error SEPARATOR ', ')) + CONCAT('Duplicate records: ', GROUP_CONCAT(t_MPOPLC.name_error SEPARATOR ', ')) FROM ( SELECT id_permutation @@ -18471,7 +18685,7 @@ BEGIN FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL GROUP BY id_permutation HAVING COUNT(*) > 1 - ) t_SPOPLC + ) t_MPOPLC ; END IF; -- Empty Manufacturing Purchase Order @@ -18532,7 +18746,10 @@ BEGIN , v_ids_product_permission -- ids_product , 0 -- a_debug ; - SELECT * from partsltd_prod.Shop_Calc_User_Temp; + SELECT * + FROM partsltd_prod.Shop_Calc_User_Temp + WHERE GUID = a_guid + ; END IF; CALL p_shop_calc_user( @@ -18549,7 +18766,7 @@ BEGIN SELECT * from partsltd_prod.Shop_Calc_User_Temp WHERE GUID = a_guid; END IF; - IF NOT EXISTS (SELECT can_view FROM partsltd_prod.Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = a_guid) THEN + 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 ( @@ -18557,18 +18774,94 @@ BEGIN , code , msg ) - VALUES ( + SELECT v_id_type_error_no_permission , v_code_type_error_no_permission - , CONCAT('You do not have view permissions for ', (SELECT name FROM partsltd_prod.Shop_Permission WHERE id_permission = v_id_permission_manufacturing LIMIT 1)) - ) + , CONCAT( + 'You do not have view 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 ); + CALL partsltd_prod.p_shop_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + -- Changed quantity used + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link MPOPL ON t_MPOPL.id_link = MPOPL.id_link + INNER JOIN partsltd_prod.Shop_Stock_Item SI ON MPOPL.id_permutation = SI.id_permutation + WHERE + t_MPOPL.is_new = 0 + AND t_MPOPL.quantity_used <> MPOPL.quantity_used + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_warning + , v_code_type_error_warning + , CONCAT( + 'The quantity used has changed on the following orders. Please update the stock items appropriately.' + , GROUP_CONCAT( + CONCAT( + t_MPOPL.name_error + , ' - from ' + , MPOPL.quantity_used + , ' to ' + , t_MPOPL.quantity_used + ) SEPARATOR ', ' + ) + ) AS msg + ; + END IF; + -- Changed quantity produced + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link MPOPL ON t_MPOPL.id_link = MPOPL.id_link + INNER JOIN partsltd_prod.Shop_Stock_Item SI ON MPOPL.id_permutation = SI.id_permutation + WHERE + t_MPOPL.is_new = 0 + AND t_MPOPL.quantity_produced <> MPOPL.quantity_produced + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_warning + , v_code_type_error_warning + , CONCAT( + 'The quantity produced has changed on the following orders. Please update the stock items appropriately.' + , GROUP_CONCAT( + CONCAT( + t_MPOPL.name_error + , ' - from ' + , MPOPL.quantity_produced + , ' to ' + , t_MPOPL.quantity_produced + ) SEPARATOR ', ' + ) + ) AS msg + ; + END IF; - IF EXISTS ( SELECT * FROM tmp_Msg_Error LIMIT 1 ) THEN - DELETE FROM tmp_Manufacturing; + IF EXISTS ( SELECT * FROM tmp_Msg_Error WHERE id_type <> v_id_type_error_warning LIMIT 1 ) THEN + DELETE FROM tmp_Manufacturing_Purchase_Order_Product_Link; + DELETE FROM tmp_Manufacturing_Purchase_Order; END IF; -- Transaction @@ -18588,31 +18881,50 @@ BEGIN SET v_id_change_set := LAST_INSERT_ID(); INSERT INTO partsltd_prod.Shop_Manufacturing_Purchase_Order ( - id_currency_cost + id_order_temp + , id_currency , cost_total_local_VAT_excl , cost_total_local_VAT_incl + , price_total_local_VAT_excl + , price_total_local_VAT_incl + , active , created_by , created_on , id_change_set - , active ) SELECT - t_MPO.id_currency_cost - , SUM(t_MPOPL.cost_total_local_VAT_excl) - , SUM(t_MPOPL.cost_total_local_VAT_incl) + t_MPO.id_order_temp + , t_MPO.id_currency + , t_MPO.cost_total_local_VAT_excl + , t_MPO.cost_total_local_VAT_incl + , t_MPO.price_total_local_VAT_excl + , t_MPO.price_total_local_VAT_incl , t_MPO.active , a_id_user , v_time_start , v_id_change_set FROM tmp_Manufacturing_Purchase_Order t_MPO INNER JOIN tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL ON t_MPO.id_order = t_MPOPL.id_order - WHERE t_MPOPL.is_new = 1 + WHERE t_MPO.is_new = 1 + ; + + UPDATE tmp_Manufacturing_Purchase_Order t_MPO + INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order MPO ON t_MPO.id_order_temp = MPO.id_order_temp + SET + t_MPO.id_order = MPO.id_order + WHERE t_MPO.is_new = 1 + ; + + UPDATE tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + INNER JOIN tmp_Manufacturing_Purchase_Order t_MPO ON t_MPOPL.id_order = t_MPO.id_order_temp + SET + t_MPOPL.id_order = t_MPO.id_order + WHERE t_MPO.is_new = 1 ; INSERT INTO Shop_Manufacturing_Purchase_Order_Product_Link ( id_order , id_permutation - , id_currency_cost , id_unit_quantity , quantity_used , quantity_produced @@ -18620,15 +18932,17 @@ BEGIN , latency_manufacture , display_order , active - , cost_total_local_VAT_excl - , cost_total_local_VAT_incl + , cost_unit_local_VAT_excl + , cost_unit_local_VAT_incl + , price_unit_local_VAT_excl + , price_unit_local_VAT_incl , created_by + , created_on , id_change_set ) SELECT t_MPOPL.id_order , t_MPOPL.id_permutation - , t_MPOPL.id_currency_cost , t_MPOPL.id_unit_quantity , t_MPOPL.quantity_used , t_MPOPL.quantity_produced @@ -18636,9 +18950,12 @@ BEGIN , t_MPOPL.latency_manufacture , t_MPOPL.display_order , t_MPOPL.active - , t_MPOPL.cost_total_local_VAT_excl - , t_MPOPL.cost_total_local_VAT_incl + , t_MPOPL.cost_unit_local_VAT_excl + , t_MPOPL.cost_unit_local_VAT_incl + , t_MPOPL.price_unit_local_VAT_excl + , t_MPOPL.price_unit_local_VAT_incl , a_id_user + , v_time_start , v_id_change_set FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL WHERE t_MPOPL.is_new = 1 @@ -18650,10 +18967,12 @@ BEGIN AND t_MPO.is_new = 0 INNER JOIN tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL ON t_MPO.id_order = t_MPOPL.id_order SET - MPO.id_currency_cost = id_currency_cost - , MPO.cost_total_local_VAT_excl = SUM(t_MPOPL.cost_total_local_VAT_excl) - , MPO.cost_total_local_VAT_incl = SUM(t_MPOPL.cost_total_local_VAT_incl) - , MPO.active = a_active + MPO.id_currency = t_MPO.id_currency + , MPO.cost_total_local_VAT_excl = t_MPO.cost_total_local_VAT_excl + , MPO.cost_total_local_VAT_incl = t_MPO.cost_total_local_VAT_incl + , MPO.price_total_local_VAT_excl = t_MPO.price_total_local_VAT_excl + , MPO.price_total_local_VAT_incl = t_MPO.price_total_local_VAT_incl + , MPO.active = t_MPO.active , MPO.id_change_set = v_id_change_set ; @@ -18664,7 +18983,6 @@ BEGIN SET MPOPL.id_order = t_MPOPL.id_order , MPOPL.id_permutation = t_MPOPL.id_permutation - , MPOPL.id_currency_cost = t_MPOPL.id_currency_cost , MPOPL.id_unit_quantity = t_MPOPL.id_unit_quantity , MPOPL.quantity_used = t_MPOPL.quantity_used , MPOPL.quantity_produced = t_MPOPL.quantity_produced @@ -18672,18 +18990,20 @@ BEGIN , MPOPL.latency_manufacture = t_MPOPL.latency_manufacture , MPOPL.display_order = t_MPOPL.display_order , MPOPL.active = t_MPOPL.active - , MPOPL.cost_total_local_VAT_excl = t_MPOPL.cost_total_local_VAT_excl - , MPOPL.cost_total_local_VAT_incl = t_MPOPL.cost_total_local_VAT_incl + , MPOPL.cost_unit_local_VAT_excl = t_MPOPL.cost_unit_local_VAT_excl + , MPOPL.cost_unit_local_VAT_incl = t_MPOPL.cost_unit_local_VAT_incl + , MPOPL.price_unit_local_VAT_excl = t_MPOPL.price_unit_local_VAT_excl + , MPOPL.price_unit_local_VAT_incl = t_MPOPL.price_unit_local_VAT_incl , MPOPL.id_change_set = v_id_change_set ; - DELETE SPO_T - FROM Shop_Manufacturing_Purchase_Order_Temp SPO_T - WHERE SPO_T.GUID = a_guid + DELETE MPO_T + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp MPO_T + WHERE MPO_T.GUID = a_guid ; - DELETE SPOPL_T - FROM Shop_Manufacturing_Purchase_Order_Product_Link_Temp SPOPL_T - WHERE SPOPL_T.GUID = a_guid + DELETE MPOPL_T + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp MPOPL_T + WHERE MPOPL_T.GUID = a_guid ; COMMIT; @@ -18725,7 +19045,7 @@ INSERT INTO Shop_Manufacturing_Purchase_Order_Product_Link_Temp ( id_order, id_permutation, cost_total_local, - id_currency_cost, + id_currency, quantity_used, id_unit_quantity, quantity_produced, @@ -18740,7 +19060,7 @@ VALUES -1, # id_order, 1, # id_permutation, 100, # cost_total_local, - 1, # id_currency_cost, + 1, # id_currency, 1, # quantity_used, 1, # id_unit_quantity, 1, # quantity_produced, @@ -18772,6 +19092,154 @@ DELETE FROM Shop_Manufacturing_Purchase_Order; +-- Clear previous proc +DROP PROCEDURE IF EXISTS partsltd_prod.p_shop_save_Manufacturing_purchase_order_test; + + +DELIMITER // +CREATE PROCEDURE p_shop_save_Manufacturing_purchase_order_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_Manufacturing_Purchase_Order + ; + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp + ; + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link + ; + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp + ; + + START TRANSACTION; + + DELETE FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp; + DELETE FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp; + + INSERT INTO partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp ( + id_order + , id_currency + , active + , GUID + ) + /* Test 1 - Insert */ + VALUES ( + -1 + , 1 + , 1 + , v_guid + ) + /* Test 2: Alter + SELECT + id_order + , id_currency + , active + , v_guid + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order + WHERE id_order = 6 + */ + ;-- SELECT * FROM partsltd_prod.Shop_Unit_Measurement; + + INSERT INTO partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp ( + id_link + , id_order + , id_permutation + , id_unit_quantity + , quantity_used + , quantity_produced + , id_unit_latency_manufacture + , latency_manufacture + , display_order + , active + , GUID + ) + /* Test 1 - Insert */ + VALUES ( + -1 -- id_link + , -1 -- id_order + , 3 -- id_permutation + , 3 -- id_unit_quantity + , 3 -- quantity_used + , 0 -- quantity_produced + , 4 -- id_unit_latency_manufacture + , 4 -- latency_manufacture + , 1 -- display_order + , 1 -- active + , v_guid -- + ) + /* Test 2: Alter + SELECT + id_link + , id_order + , id_permutation + , id_unit_quantity + , quantity_used + , quantity_produced + , id_unit_latency_manufacture + , latency_manufacture + , display_order + , active + , v_guid + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link + WHERE id_order = 6 + */ + ; + + COMMIT; + + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp + WHERE GUID = v_guid + ; + + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp + WHERE GUID = v_guid + ; + + CALL partsltd_prod.p_shop_save_Manufacturing_purchase_order ( + 'Test save Manufacturing Purchase Order' -- comment + , v_guid -- guid + , 1 -- id_user + , 1 -- debug + ); + + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp + ; + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp + ; + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order + ; + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link + ; + + CALL partsltd_prod.p_debug_timing_reporting ( v_time_start ); +END // +DELIMITER ;; + +/* +CALL partsltd_prod.p_shop_save_Manufacturing_purchase_order_test (); + +DELETE FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp; +DELETE FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp; + +DROP TABLE IF EXISTS tmp_Msg_Error; + +select * from partsltd_prod.Shop_User; +*/ + DROP PROCEDURE IF EXISTS p_shop_get_many_manufacturing_purchase_order; DELIMITER // @@ -19104,7 +19572,7 @@ BEGIN ) AS name FROM tmp_Manufacturing_Purchase_Order t_MPO INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order MPO ON MPO.id_order = t_MPO.id_order - LEFT JOIN partsltd_prod.Shop_Currency C ON MPO.id_currency_cost = C.id_currency + LEFT JOIN partsltd_prod.Shop_Currency C ON MPO.id_currency = C.id_currency ; # Manufacturing Purchase Order Product Link @@ -19152,7 +19620,6 @@ END // DELIMITER ;; -/* CALL p_shop_get_many_manufacturing_purchase_order ( 1 # a_id_user @@ -19165,6 +19632,7 @@ CALL p_shop_get_many_manufacturing_purchase_order ( , 0 # a_debug ); +/* */ @@ -21323,10 +21791,11 @@ VALUES # Product Permutations INSERT INTO Shop_Product_Permutation ( - display_order, + -- display_order, id_product, description, - cost_local, + cost_local_VAT_excl, + cost_local_VAT_incl, id_currency_cost, profit_local_min, # id_currency_profit_min, @@ -21347,10 +21816,11 @@ INSERT INTO Shop_Product_Permutation ( ) VALUES ( - 1, + -- 1, 1, 'Good Red', 5, + 6, 1, 3, # 1, @@ -21370,10 +21840,11 @@ VALUES , NULL ), ( - 2, + -- 2, 1, 'Good Blue', 6, + 7.2, 1, 4, # 1, @@ -21393,10 +21864,11 @@ VALUES , NULL ), ( - 3, + -- 3, 2, 'Test product describes good', 10, + 12, 1, 5, # 1, @@ -21416,10 +21888,11 @@ VALUES , NULL ), ( - 4, + -- 4, 3, 'Phone describes good', 10, + 12, 1, 5, # 1, @@ -21439,10 +21912,11 @@ VALUES , NULL ), ( - 5, + -- 5, 4, 'Laptop describes good', 10, + 12, 1, 5, # 1, @@ -21462,10 +21936,11 @@ VALUES , NULL ), ( - 6, + -- 6, 5, 'Smart watch describes good', 10, + 12, 1, 5, # 1, @@ -21814,6 +22289,18 @@ VALUES , 'https://www.maltkilnfarmshop.co.uk/' , 1 ) + , ( + -3 + , 'Asda' + , NULL + , NULL + -- , 1 + , '' + , NULL + , '' + , '' + , 1 + ) ; # Supplier Addresses diff --git a/static/MySQL/0001_destroy.sql b/static/MySQL/0001_destroy.sql index 09004599..da06cb9b 100644 --- a/static/MySQL/0001_destroy.sql +++ b/static/MySQL/0001_destroy.sql @@ -282,6 +282,7 @@ DROP PROCEDURE IF EXISTS p_shop_get_many_storage_location; DROP PROCEDURE IF EXISTS p_shop_get_many_currency; DROP PROCEDURE IF EXISTS p_shop_save_category; +DROP PROCEDURE IF EXISTS p_shop_save_category_test; DROP PROCEDURE IF EXISTS p_shop_save_product_category; DROP PROCEDURE IF EXISTS p_shop_save_product_category_test; DROP PROCEDURE IF EXISTS p_shop_save_product; @@ -292,6 +293,7 @@ DROP PROCEDURE IF EXISTS p_shop_get_many_product; 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_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; @@ -313,6 +315,7 @@ DROP PROCEDURE IF EXISTS p_shop_save_supplier_purchase_order; DROP PROCEDURE IF EXISTS p_shop_save_supplier_purchase_order_test; DROP PROCEDURE IF EXISTS p_shop_get_many_supplier_purchase_order; DROP PROCEDURE IF EXISTS p_shop_save_manufacturing_purchase_order; +DROP PROCEDURE IF EXISTS p_shop_save_manufacturing_purchase_order_test; DROP PROCEDURE IF EXISTS p_shop_get_many_manufacturing_purchase_order; DROP PROCEDURE IF EXISTS p_shop_save_customer; DROP PROCEDURE IF EXISTS p_shop_get_many_customer; diff --git a/static/MySQL/1202_tbl_Shop_Product_Category_Temp.sql b/static/MySQL/1202_tbl_Shop_Product_Category_Temp.sql index ede1d6f1..ff520588 100644 --- a/static/MySQL/1202_tbl_Shop_Product_Category_Temp.sql +++ b/static/MySQL/1202_tbl_Shop_Product_Category_Temp.sql @@ -12,9 +12,9 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Category_Temp ( , description VARCHAR(4000) NULL , id_access_level_required INT NOT NULL DEFAULT 1 , display_order INT NOT NULL - , active BIT NOT NULL - , can_view BIT NULL DEFAULT NULL - , can_edit BIT NULL DEFAULT NULL - , can_admin BIT NULL DEFAULT NULL + , active BIT NULL + , can_view BIT NULL + , can_edit BIT NULL + , can_admin BIT NULL , guid BINARY(36) NOT NULL ); diff --git a/static/MySQL/1206_tbl_Shop_Product_Permutation.sql b/static/MySQL/1206_tbl_Shop_Product_Permutation.sql index 36099278..3b0e2a9f 100644 --- a/static/MySQL/1206_tbl_Shop_Product_Permutation.sql +++ b/static/MySQL/1206_tbl_Shop_Product_Permutation.sql @@ -1,7 +1,7 @@ # Product Permutation - +-- DROP TABLE partsltd_prod.Shop_Product_Permutation; SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Product_Permutation'; @@ -14,9 +14,10 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Permutation ( ON UPDATE RESTRICT, -- name VARCHAR(255) NOT NULL, description VARCHAR(4000) NOT NULL, - cost_local FLOAT NOT NULL, + cost_local_VAT_excl FLOAT NULL, + cost_local_VAT_incl FLOAT NULL, id_currency_cost INT NOT NULL, - profit_local_min FLOAT NOT NULL, + profit_local_min FLOAT NULL, -- id_currency_profit_min INT NOT NULL, latency_manufacture INT NOT NULL, id_unit_measurement_quantity INT NOT NULL, @@ -24,8 +25,8 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Permutation ( FOREIGN KEY (id_unit_measurement_quantity) REFERENCES Shop_Unit_Measurement(id_unit_measurement), 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 NOT NULL, is_subscription BIT NOT NULL, id_unit_measurement_interval_recurrence INT, @@ -49,7 +50,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Permutation ( */ count_interval_expiration_unsealed INT, active BIT NOT NULL DEFAULT 1, - display_order INT NOT NULL, + -- display_order INT NOT NULL, created_on DATETIME, created_by INT, id_change_set INT, diff --git a/static/MySQL/1208_tbl_Shop_Product_Permutation_Temp.sql b/static/MySQL/1208_tbl_Shop_Product_Permutation_Temp.sql index 9974d9de..a792ea0e 100644 --- a/static/MySQL/1208_tbl_Shop_Product_Permutation_Temp.sql +++ b/static/MySQL/1208_tbl_Shop_Product_Permutation_Temp.sql @@ -9,9 +9,10 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Temp ( id_permutation INT NOT NULL , id_product INT NOT NULL , description VARCHAR(4000) NOT NULL - , cost_local FLOAT NOT NULL + , cost_local_VAT_excl FLOAT NULL + , cost_local_VAT_incl FLOAT NULL , id_currency_cost INT NOT NULL - , profit_local_min FLOAT NOT NULL + , profit_local_min FLOAT NULL , latency_manufacture INT NOT NULL , id_unit_measurement_quantity INT NOT NULL , count_unit_measurement_per_quantity_step FLOAT NOT NULL diff --git a/static/MySQL/1400_tbl_Shop_Supplier.sql b/static/MySQL/1400_tbl_Shop_Supplier.sql index d8b5f1bc..55f0cc95 100644 --- a/static/MySQL/1400_tbl_Shop_Supplier.sql +++ b/static/MySQL/1400_tbl_Shop_Supplier.sql @@ -28,6 +28,6 @@ CREATE TABLE IF NOT EXISTS Shop_Supplier ( , id_change_set INT , CONSTRAINT FK_Shop_Supplier_id_change_set FOREIGN KEY (id_change_set) - REFERENCES Shop_Sales_And_Purchasing_Change_Set(id_change_set) + REFERENCES Shop_User_Change_Set(id_change_set) , id_supplier_temp INT NOT NULL ); diff --git a/static/MySQL/1403_tbl_Shop_Supplier_Address.sql b/static/MySQL/1403_tbl_Shop_Supplier_Address.sql index f7228310..14d1284c 100644 --- a/static/MySQL/1403_tbl_Shop_Supplier_Address.sql +++ b/static/MySQL/1403_tbl_Shop_Supplier_Address.sql @@ -25,5 +25,5 @@ CREATE TABLE Shop_Supplier_Address ( , id_change_set INT , CONSTRAINT FK_Shop_Supplier_Address_id_change_set FOREIGN KEY (id_change_set) - REFERENCES partsltd_prod.Shop_Sales_And_Purchasing_Change_Set(id_change_set) + REFERENCES partsltd_prod.Shop_User_Change_Set(id_change_set) ); \ No newline at end of file diff --git a/static/MySQL/1415_tbl_Shop_Manufacturing_Purchase_Order.sql b/static/MySQL/1415_tbl_Shop_Manufacturing_Purchase_Order.sql index 2b383b09..f7e5f186 100644 --- a/static/MySQL/1415_tbl_Shop_Manufacturing_Purchase_Order.sql +++ b/static/MySQL/1415_tbl_Shop_Manufacturing_Purchase_Order.sql @@ -14,10 +14,10 @@ CREATE TABLE IF NOT EXISTS Shop_Manufacturing_Purchase_Order ( CONSTRAINT FK_Manufacturing_Purchase_Order_id_currency FOREIGN KEY (id_currency) REFERENCES Shop_Currency(id_currency), - cost_total_local_VAT_excl FLOAT NOT NULL, - cost_total_local_VAT_incl FLOAT NOT NULL, - price_total_local_VAT_excl FLOAT NOT NULL, - price_total_local_VAT_incl FLOAT NOT NULL, + cost_total_local_VAT_excl FLOAT NULL, + cost_total_local_VAT_incl FLOAT NULL, + price_total_local_VAT_excl FLOAT NULL, + price_total_local_VAT_incl FLOAT NULL, /* latency_delivery INT NOT NULL, quantity_ordered FLOAT NOT NULL, diff --git a/static/MySQL/1417_tbl_Shop_Manufacturing_Purchase_Order_Temp.sql b/static/MySQL/1417_tbl_Shop_Manufacturing_Purchase_Order_Temp.sql index 82040c97..fb8fcba4 100644 --- a/static/MySQL/1417_tbl_Shop_Manufacturing_Purchase_Order_Temp.sql +++ b/static/MySQL/1417_tbl_Shop_Manufacturing_Purchase_Order_Temp.sql @@ -1,6 +1,8 @@ # Manufacturing Purchase Order Temp +-- DROP TABLE Shop_Manufacturing_Purchase_Order_Temp + SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Manufacturing_Purchase_Order_Temp'; CREATE TABLE IF NOT EXISTS Shop_Manufacturing_Purchase_Order_Temp ( @@ -8,11 +10,11 @@ CREATE TABLE IF NOT EXISTS Shop_Manufacturing_Purchase_Order_Temp ( /* cost_total_local FLOAT NOT NULL, */ - id_currency_cost INT NOT NULL, - cost_total_local_VAT_excl FLOAT NOT NULL, - cost_total_local_VAT_incl FLOAT NOT NULL, - price_total_local_VAT_excl FLOAT NOT NULL, - price_total_local_VAT_incl FLOAT NOT NULL, + id_currency INT NOT NULL, + cost_total_local_VAT_excl FLOAT NULL, + cost_total_local_VAT_incl FLOAT NULL, + price_total_local_VAT_excl FLOAT NULL, + price_total_local_VAT_incl FLOAT NULL, /* latency_delivery INT NOT NULL, quantity_ordered FLOAT NOT NULL, diff --git a/static/MySQL/1418_tbl_Shop_Manufacturing_Purchase_Order_Product_Link.sql b/static/MySQL/1418_tbl_Shop_Manufacturing_Purchase_Order_Product_Link.sql index dcaaaa8d..fc45c92a 100644 --- a/static/MySQL/1418_tbl_Shop_Manufacturing_Purchase_Order_Product_Link.sql +++ b/static/MySQL/1418_tbl_Shop_Manufacturing_Purchase_Order_Product_Link.sql @@ -1,6 +1,8 @@ # Manufacturing Purchase Order Product Link +-- DROP TABLE partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Audit +-- DROP TABLE partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Manufacturing_Purchase_Order_Product_Link'; @@ -9,11 +11,11 @@ CREATE TABLE IF NOT EXISTS Shop_Manufacturing_Purchase_Order_Product_Link ( , id_order INT NOT NULL , CONSTRAINT FK_Manufacturing_Purchase_Order_Product_Link_id_order FOREIGN KEY (id_order) - REFERENCES Shop_Manufacturing_Purchase_Order(id_order) + REFERENCES partsltd_prod.Shop_Manufacturing_Purchase_Order(id_order) , id_permutation INT NOT NULL , CONSTRAINT FK_Manufacturing_Purchase_Order_Product_Link_id_permutation FOREIGN KEY (id_permutation) - REFERENCES Shop_Product_Permutation(id_permutation) + REFERENCES partsltd_prod.Shop_Product_Permutation(id_permutation) , cost_unit_local_VAT_excl FLOAT NULL , cost_unit_local_VAT_incl FLOAT NULL , price_unit_local_VAT_excl FLOAT NULL @@ -21,13 +23,13 @@ CREATE TABLE IF NOT EXISTS Shop_Manufacturing_Purchase_Order_Product_Link ( , id_unit_quantity INT NOT NULL , CONSTRAINT FK_Manufacturing_Purchase_Order_id_unit_quantity FOREIGN KEY (id_unit_quantity) - REFERENCES Shop_Unit_Measurement(id_unit_measurement) + REFERENCES partsltd_prod.Shop_Unit_Measurement(id_unit_measurement) , quantity_used FLOAT NULL , quantity_produced FLOAT NULL , id_unit_latency_manufacture INT NULL , CONSTRAINT FK_MPO_id_unit_latency_manufacture FOREIGN KEY (id_unit_latency_manufacture) - REFERENCES Shop_Unit_Measurement(id_unit_measurement) + REFERENCES partsltd_prod.Shop_Unit_Measurement(id_unit_measurement) , latency_manufacture INT NULL , display_order INT NOT NULL , active BIT NOT NULL @@ -38,5 +40,5 @@ CREATE TABLE IF NOT EXISTS Shop_Manufacturing_Purchase_Order_Product_Link ( , id_change_set INT NULL , CONSTRAINT FK_Manufacturing_Purchase_Order_id_change_set FOREIGN KEY (id_change_set) - REFERENCES Shop_Sales_And_Purchasing_Change_Set(id_change_set) + REFERENCES partsltd_prod.Shop_Sales_And_Purchasing_Change_Set(id_change_set) ); diff --git a/static/MySQL/1420_tbl_Shop_Manufacturing_Purchase_Order_Product_Link_Temp.sql b/static/MySQL/1420_tbl_Shop_Manufacturing_Purchase_Order_Product_Link_Temp.sql index d9e9e149..c3adca3e 100644 --- a/static/MySQL/1420_tbl_Shop_Manufacturing_Purchase_Order_Product_Link_Temp.sql +++ b/static/MySQL/1420_tbl_Shop_Manufacturing_Purchase_Order_Product_Link_Temp.sql @@ -9,7 +9,9 @@ SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning CREATE TABLE IF NOT EXISTS Shop_Manufacturing_Purchase_Order_Product_Link_Temp ( id_link INT NOT NULL PRIMARY KEY, id_order INT NOT NULL, - id_permutation INT NOT NULL, + id_product INT NULL, + id_permutation INT NULL, + csv_list_variations VARCHAR(4000) NULL, id_unit_quantity INT NOT NULL, quantity_used FLOAT NULL, quantity_produced FLOAT NULL, diff --git a/static/MySQL/3206_tri_Shop_Product_Permutation.sql b/static/MySQL/3206_tri_Shop_Product_Permutation.sql index 30dc5400..3964319f 100644 --- a/static/MySQL/3206_tri_Shop_Product_Permutation.sql +++ b/static/MySQL/3206_tri_Shop_Product_Permutation.sql @@ -69,9 +69,13 @@ BEGIN SELECT NEW.id_permutation, 'description', OLD.description, NEW.description, NEW.id_change_set WHERE NOT (OLD.description <=> NEW.description) UNION - # Changed cost_local - SELECT NEW.id_permutation, 'cost_local', CONVERT(OLD.cost_local, CHAR), CONVERT(NEW.cost_local, CHAR), NEW.id_change_set - WHERE NOT (OLD.cost_local <=> NEW.cost_local) + # Changed cost_local_VAT_excl + SELECT NEW.id_permutation, 'cost_local_VAT_excl', CONVERT(OLD.cost_local_VAT_excl, CHAR), CONVERT(NEW.cost_local_VAT_excl, CHAR), NEW.id_change_set + WHERE NOT (OLD.cost_local_VAT_excl <=> NEW.cost_local_VAT_excl) + UNION + # Changed cost_local_VAT_incl + SELECT NEW.id_permutation, 'cost_local_VAT_incl', CONVERT(OLD.cost_local_VAT_incl, CHAR), CONVERT(NEW.cost_local_VAT_incl, CHAR), NEW.id_change_set + WHERE NOT (OLD.cost_local_VAT_incl <=> NEW.cost_local_VAT_incl) UNION # Changed id_currency_cost SELECT NEW.id_permutation, 'id_currency_cost', CONVERT(OLD.id_currency_cost, CHAR), CONVERT(NEW.id_currency_cost, CHAR), NEW.id_change_set diff --git a/static/MySQL/3415_tri_Shop_Manufacturing_Purchase_Order.sql b/static/MySQL/3415_tri_Shop_Manufacturing_Purchase_Order.sql index 06cb2696..024e7180 100644 --- a/static/MySQL/3415_tri_Shop_Manufacturing_Purchase_Order.sql +++ b/static/MySQL/3415_tri_Shop_Manufacturing_Purchase_Order.sql @@ -14,7 +14,7 @@ FOR EACH ROW BEGIN SET NEW.created_on := IFNULL(NEW.created_on, NOW()); -- SET NEW.created_by := IFNULL(NEW.created_by, IFNULL((SELECT id_user FROM Shop_User WHERE firstname = CURRENT_USER()), -1)); - IF NOT EXISTS (SELECT * FROM partsltd_prod.Shop_User U WHERE U.id_user = NEW.created_on LIMIT 1) THEN + IF NOT EXISTS (SELECT * FROM partsltd_prod.Shop_User U WHERE U.id_user = NEW.created_by LIMIT 1) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Valid created by User ID must be provided.'; END IF; @@ -31,10 +31,6 @@ BEGIN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'New change Set ID must be provided.'; END IF; - IF NOT EXISTS (SELECT * FROM partsltd_prod.Shop_User U WHERE U.id_user = NEW.created_on LIMIT 1) THEN - SIGNAL SQLSTATE '45000' - SET MESSAGE_TEXT = 'Valid created by User ID must be provided.'; - END IF; INSERT INTO Shop_Manufacturing_Purchase_Order_Audit ( id_order, diff --git a/static/MySQL/7200_p_shop_save_product_category.sql b/static/MySQL/7200_p_shop_save_product_category.sql index 1643b6c4..e98199dc 100644 --- a/static/MySQL/7200_p_shop_save_product_category.sql +++ b/static/MySQL/7200_p_shop_save_product_category.sql @@ -10,7 +10,8 @@ DELIMITER // CREATE PROCEDURE p_shop_save_product_category ( IN a_comment VARCHAR(500), IN a_guid BINARY(36), - IN a_id_user INT + IN a_id_user INT, + IN a_debug BIT ) BEGIN DECLARE v_code_type_error_bad_data VARCHAR(100); @@ -19,7 +20,7 @@ BEGIN DECLARE v_ids_product_permission LONGTEXT; DECLARE v_id_change_set INT; DECLARE v_id_access_level_edit INT; - DECLARE v_now DATETIME; + DECLARE v_time_start TIMESTAMP(6); DECLARE exit handler for SQLEXCEPTION BEGIN @@ -38,33 +39,33 @@ BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , guid BINARY(36) NOT NULL , id_type INT NULL , code VARCHAR(50) NOT NULL , msg VARCHAR(4000) NOT NULL ); INSERT INTO tmp_Msg_Error ( - guid - , id_type + id_type , code , msg ) SELECT - a_guid - , NULL + MET.id_type , @errno , @text + FROM partsltd_prod.Shop_Msg_Error_Type MET + WHERE MET.code = 'MYSQL_ERROR' ; 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 := 'BAD_DATA'; SET v_id_type_error_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1); SET v_id_access_level_edit := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'EDIT' LIMIT 1); - SET a_guid := IFNULL(a_guid, UUID()); + CALL p_validate_guid ( a_guid ); DROP TABLE IF EXISTS tmp_Category; @@ -85,7 +86,6 @@ BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , guid BINARY(36) NOT NULL , id_type INT NULL , code VARCHAR(50) NOT NULL , msg VARCHAR(4000) NOT NULL @@ -110,7 +110,7 @@ BEGIN , IFNULL(PC_T.name, PC.code) AS name , IFNULL(PC_T.description, PC.description) AS description , IFNULL(PC_T.id_access_level_required, PC.id_access_level_required) AS id_access_level_required - , IFNULL(PC_T.active, PC.active) AS active + , IFNULL(IFNULL(PC_T.active, PC.active), 1) AS active , IFNULL(PC_T.display_order, PC.display_order) AS display_order , IFNULL(PC_T.name, IFNULL(PC.name, IFNULL(PC_T.code, IFNULL(PC.code, IFNULL(PC_T.id_category, '(No Product Category)'))))) AS name_error , CASE WHEN IFNULL(PC_T.id_category, 0) < 1 THEN 1 ELSE 0 END AS is_new @@ -124,14 +124,12 @@ BEGIN -- code IF EXISTS (SELECT * FROM tmp_Category t_C WHERE ISNULL(t_C.code) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type + id_type , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following category(s) do not have a code: ', GROUP_CONCAT(IFNULL(t_C.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Category t_C @@ -141,14 +139,12 @@ BEGIN -- name IF EXISTS (SELECT * FROM tmp_Category t_C WHERE ISNULL(t_C.name) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type + id_type , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following category(s) do not have a name: ', GROUP_CONCAT(IFNULL(t_C.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Category t_C @@ -158,14 +154,12 @@ BEGIN -- display_order IF EXISTS (SELECT * FROM tmp_Category t_C WHERE ISNULL(t_C.display_order) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type + id_type , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data , CONCAT('The following category(s) do not have a display order: ', GROUP_CONCAT(IFNULL(t_C.name_error, 'NULL') SEPARATOR ', ')) AS msg FROM tmp_Category t_C @@ -202,8 +196,6 @@ BEGIN END IF; END IF; - SET v_now := CURRENT_DATETIME(); - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN START TRANSACTION; @@ -247,7 +239,7 @@ BEGIN , t_C.active AS active , t_C.display_order AS display_order , a_id_user AS created_by - , v_now AS created_on + , v_time_start AS created_on FROM tmp_Category t_C WHERE is_new = 1 AND active = 1 @@ -259,10 +251,22 @@ BEGIN COMMIT; END IF; - SELECT * FROM tmp_Msg_Error; + # 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 + ; - DROP TEMPORARY TABLE IF EXISTS tmp_Catgory; - DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + IF a_debug = 1 THEN + SELECT * from tmp_Catgory; + END IF; + + DROP TEMPORARY TABLE tmp_Catgory; + 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/7200_p_shop_save_product_category_test.sql b/static/MySQL/7200_p_shop_save_product_category_test.sql index ba88e966..1ffa0c53 100644 --- a/static/MySQL/7200_p_shop_save_product_category_test.sql +++ b/static/MySQL/7200_p_shop_save_product_category_test.sql @@ -1,274 +1,75 @@ - - - -- Clear previous proc -DROP PROCEDURE IF EXISTS p_shop_save_product_category_test; +DROP PROCEDURE IF EXISTS partsltd_prod.p_shop_save_product_category_test; DELIMITER // -CREATE PROCEDURE p_shop_save_product_category_test ( - IN a_id_user INT, - IN a_guid BINARY(36), - IN a_comment VARCHAR(500) -) +CREATE PROCEDURE p_shop_save_product_category_test () BEGIN - DECLARE v_code_type_error_bad_data VARCHAR(100); - DECLARE v_id_type_error_bad_data INT; - DECLARE v_id_permission_product INT; - DECLARE v_ids_product_permission LONGTEXT; - DECLARE v_id_change_set INT; + + DECLARE v_guid BINARY(36); + DECLARE v_time_start TIMESTAMP(6); - DECLARE exit handler for SQLEXCEPTION - BEGIN - -- Get diagnostic information - GET DIAGNOSTICS CONDITION 1 - @sqlstate = RETURNED_SQLSTATE - , @errno = MYSQL_ERRNO - , @text = MESSAGE_TEXT - ; - - -- Rollback the transaction - ROLLBACK; - - -- Select the error information - -- SELECT 'Error' AS status, @errno AS error_code, @sqlstate AS sql_state, @text AS message; - - CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( - display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , guid BINARY(36) NOT NULL - , id_type INT NULL - , code VARCHAR(50) NOT NULL - , msg VARCHAR(4000) NOT NULL - ); - INSERT INTO tmp_Msg_Error ( - guid - , id_type + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_guid := 'nips'; + + SELECT * + FROM partsltd_prod.Shop_Product_Category + ; + SELECT * + FROM partsltd_prod.Shop_Product_Category_Temp + ; + + START TRANSACTION; + + INSERT INTO partsltd_prod.Shop_Product_Category_Temp ( + id_category + , name , code - , msg + , description + , id_access_level_required + , display_order + , guid ) - SELECT - a_guid - , NULL - , @errno - , @text - ; - - SELECT * FROM tmp_Msg_Error; - DROP TABLE IF EXISTS tmp_Msg_Error; - END; + VALUES ( + -5 -- id_category + , 'Nips' -- name + , 'Lips' -- code + , 'Chips' -- description + , 2 -- id_access_level_required + , 25 -- display_order + , v_guid + ); + + COMMIT; - select 'p_shop_save_product_category_test'; + SELECT * + FROM partsltd_prod.Shop_Product_Category_Temp + WHERE GUID = v_guid + ; - SET v_code_type_error_bad_data := 'BAD_DATA'; - SET v_id_type_error_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1); - - SET a_guid := IFNULL(a_guid, UUID()); - - DROP TABLE IF EXISTS tmp_Category; - - CREATE TEMPORARY TABLE tmp_Category ( - id_category INT NOT NULL - , code VARCHAR(50) NOT NULL - , name VARCHAR(255) NOT NULL - , description VARCHAR(4000) NULL - , active BIT NOT NULL - , display_order INT NOT NULL - , can_view BIT NULL - , can_edit BIT NULL - , can_admin BIT NULL - , name_error VARCHAR(255) NOT NULL - , is_new BIT NOT NULL + CALL partsltd_prod.p_shop_save_product_category ( + 'Test save product category' -- comment + , v_guid -- guid + , 1 -- id_user + , 1 -- debug ); - CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( - display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , guid BINARY(36) NOT NULL - , id_type INT NULL - /* - CONSTRAINT FK_tmp_Msg_Error_id_type - FOREIGN KEY (id_type) - REFERENCES Shop_Msg_Error_Type (id_type), - */ - , code VARCHAR(50) NOT NULL - , msg VARCHAR(4000) NOT NULL - ); - + SELECT * + FROM partsltd_prod.Shop_Product_Category + ; + SELECT * + FROM partsltd_prod.Shop_Product_Category_Temp + ; - -- Get data from Temp table - INSERT INTO tmp_Category ( - id_category - , code - , name - , description - , active - , display_order - , name_error - , is_new - ) - SELECT - IFNULL(PC_T.id_category, PC.id_category) AS id_category - , IFNULL(PC_T.code, PC.code) AS code - , IFNULL(PC_T.name, PC.code) AS name - , IFNULL(PC_T.description, PC.description) AS description - , IFNULL(PC_T.active, PC.active) AS active - , IFNULL(PC_T.display_order, PC.display_order) AS display_order - , IFNULL(PC_T.name, IFNULL(PC.name, IFNULL(PC_T.code, IFNULL(PC.code, IFNULL(PC_T.id_category, '(No Product Category)'))))) AS name_error - , CASE WHEN IFNULL(PC_T.id_category, 0) < 1 THEN 1 ELSE 0 END AS is_new - FROM Shop_Product_Category_Temp PC_T - LEFT JOIN Shop_Product_Category PC ON PC_T.id_category = PC.id_category - WHERE PC_T.guid = a_guid - ; - - -- Validation - -- Missing mandatory fields - -- code - INSERT INTO tmp_Msg_Error ( - guid - , id_type - , code - , msg - ) - SELECT - a_guid AS GUID - , v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('The following category(s) do not have a code: ', GROUP_CONCAT(t_C.name_error SEPARATOR ', ')) AS msg - FROM tmp_Category t_C - ; - -- name - INSERT INTO tmp_Msg_Error ( - guid - , id_type - , code - , msg - ) - SELECT - a_guid AS GUID - , v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('The following category(s) do not have a name: ', GROUP_CONCAT(t_C.name_error SEPARATOR ', ')) AS msg - FROM tmp_Category t_C - ; - -- display_order - INSERT INTO tmp_Msg_Error ( - guid - , id_type - , code - , msg - ) - SELECT - a_guid AS GUID - , v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('The following category(s) do not have a display order: ', GROUP_CONCAT(t_C.name_error SEPARATOR ', ')) AS msg - FROM tmp_Category t_C - ; - - SELECT * FROM tmp_Category; - - -- Permissions - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN -- (SELECT * FROM tmp_Product WHERE is_new = 0 LIMIT 1) THEN - SET v_ids_product_permission := ( - SELECT GROUP_CONCAT(P.id_product SEPARATOR ',') - FROM Shop_Product P - INNER JOIN Shop_Product_Category PC - ON P.id_category = PC.id_category - AND PC.is_new = 0 - ); - IF NOT ISNULL(v_ids_product_permission) THEN - SET v_id_permission_product = (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_PRODUCT' LIMIT 1); - - CALL p_shop_calc_user(a_guid, a_id_user, v_id_permission_product, v_ids_product_permission); - - UPDATE tmp_Category t_C - INNER JOIN Shop_Product P ON t_C.id_category = P.id_product - INNER JOIN Shop_Calc_User_Temp UE_T - ON P.id_product = UE_T.id_product - AND UE_T.GUID = a_guid - SET - t_C.can_view = UE_T.can_view - , t_C.can_edit = UE_T.can_edit - , t_C.can_admin = UE_T.can_admin - ; - - CALL p_shop_clear_calc_user(a_guid); - END IF; - END IF; - - SELECT * FROM tmp_Category; - - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN - START TRANSACTION; - - IF NOT ISNULL(v_ids_product_permission) THEN - INSERT INTO Shop_Product_Change_Set ( comment ) - VALUES ( a_comment ) - ; - - SET v_id_change_set := LAST_INSERT_ID(); - - UPDATE Shop_Product_Category PC - INNER JOIN tmp_Category t_C ON PC.id_category = t_C.id_category - SET - PC.id_category = t_C.id_category - , PC.code = t_C.code - , PC.name = t_P.name - , PC.description = t_C.description - , PC.display_order = t_C.display_order - , PC.active = t_C.active - , P.id_change_set = v_id_change_set - ; - END IF; - - INSERT INTO Shop_Product_Category ( - id_category - , code - , name - , description - , display_order - , active - , created_by - , created_on - ) - SELECT - t_C.id_category AS id_category - , t_C.code AS code - , t_C.name AS name - , t_C.description AS description - , t_C.active AS active - , t_P.display_order AS display_order - , a_id_user AS created_by - , v_now AS created_on - FROM tmp_Category t_C - WHERE is_new = 1 - AND active = 1 - ; - - ROLLBACK; - END IF; - - SELECT * FROM tmp_Msg_Error; - SELECT * FROM tmp_Category; - - DROP TEMPORARY TABLE IF EXISTS tmp_Catgory; - DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + CALL partsltd_prod.p_debug_timing_reporting ( v_time_start ); END // DELIMITER ;; +/* +CALL partsltd_prod.p_shop_save_product_category_test (); -select * -from shop_product_category; -select * -from shop_product_category_temp; - -SELECT 'nips' as guid; - -CALL p_shop_save_product_category_TEST (1, 'nips', 'y'); - -select * -from shop_product_category; -select * -from shop_product_category_temp; - +DELETE FROM partsltd_prod.Shop_Product_Category_Temp; +DROP TABLE IF EXISTS tmp_Msg_Error; +*/ diff --git a/static/MySQL/7203_p_shop_save_product.sql b/static/MySQL/7203_p_shop_save_product.sql index ee5a2a0a..3f9d1dfd 100644 --- a/static/MySQL/7203_p_shop_save_product.sql +++ b/static/MySQL/7203_p_shop_save_product.sql @@ -64,7 +64,7 @@ BEGIN SET v_id_type_error_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1); SET v_id_access_level_edit := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'EDIT' LIMIT 1); - SET a_guid := IFNULL(a_guid, UUID()); + CALL p_validate_guid ( a_guid ); SET a_debug := IFNULL(a_debug, 0); IF a_debug = 1 THEN diff --git a/static/MySQL/7203_p_shop_save_product_test.sql b/static/MySQL/7203_p_shop_save_product_test.sql index 34651f91..23302e15 100644 --- a/static/MySQL/7203_p_shop_save_product_test.sql +++ b/static/MySQL/7203_p_shop_save_product_test.sql @@ -33,7 +33,9 @@ BEGIN , active , guid ) - VALUES ( + VALUES + /* Test 1 - Update + ( 4 -- id_product , 1 -- id_category , 'Laptops' -- name @@ -42,7 +44,20 @@ BEGIN , 2 -- display_order , 1 -- active , v_guid - ); + ) + */ + /* Test 2 - Insert */ + ( + -14 -- id_product + , 5 -- id_category + , 'Clip' -- name + , 0 -- has_variations + , 1 -- id_access_level_required + , 1 -- display_order + , 1 -- active + , v_guid + ) + ; COMMIT; diff --git a/static/MySQL/7204_p_shop_calc_product_permutation.sql b/static/MySQL/7204_p_shop_calc_product_permutation.sql index 6816cb29..e54a7447 100644 --- a/static/MySQL/7204_p_shop_calc_product_permutation.sql +++ b/static/MySQL/7204_p_shop_calc_product_permutation.sql @@ -52,7 +52,7 @@ BEGIN WHERE MET.code = 'BAD_DATA' ; - SET a_id_user := TRIM(IFNULL(a_id_user, 0)); + SET a_id_user := IFNULL(a_id_user, 0); SET a_get_all_product_category := IFNULL(a_get_all_product_category, 0); SET a_get_inactive_product_category := IFNULL(a_get_inactive_product_category, 0); SET a_ids_product_category := TRIM(IFNULL(a_ids_product_category, '')); @@ -473,6 +473,9 @@ BEGIN DELETE FROM tmp_Product_calc; DELETE FROM tmp_Permutation_calc; ELSE + SELECT * FROM Shop_Product_Category_Temp; + SELECT * FROM Shop_Product_Temp; + SELECT * FROM Shop_Product_Permutation_Temp; */ START TRANSACTION; @@ -546,7 +549,8 @@ BEGIN id_permutation , id_product , description - , cost_local + , cost_local_VAT_excl + , cost_local_VAT_incl , id_currency_cost , profit_local_min , latency_manufacture @@ -572,7 +576,8 @@ BEGIN t_PP.id_permutation , PP.id_product , PP.description - , PP.cost_local + , PP.cost_local_VAT_excl + , PP.cost_local_VAT_incl , PP.id_currency_cost , PP.profit_local_min , PP.latency_manufacture diff --git a/static/MySQL/7206_p_shop_save_product_permutation.sql b/static/MySQL/7206_p_shop_save_product_permutation.sql index e24a9839..7d0d1a2c 100644 --- a/static/MySQL/7206_p_shop_save_product_permutation.sql +++ b/static/MySQL/7206_p_shop_save_product_permutation.sql @@ -8,7 +8,8 @@ DELIMITER // CREATE PROCEDURE p_shop_save_product_permutation ( IN a_comment VARCHAR(500), IN a_guid BINARY(36), - IN a_id_user INT + IN a_id_user INT, + IN a_debug BIT ) BEGIN @@ -18,7 +19,7 @@ BEGIN DECLARE v_ids_product_permission LONGTEXT; DECLARE v_id_change_set INT; DECLARE v_id_access_level_edit INT; - DECLARE v_now DATETIME; + DECLARE v_time_start TIMESTAMP(6); DECLARE exit handler for SQLEXCEPTION BEGIN @@ -37,33 +38,34 @@ BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , guid BINARY(36) NOT NULL , id_type INT NULL , code VARCHAR(50) NOT NULL , msg VARCHAR(4000) NOT NULL ); INSERT INTO tmp_Msg_Error ( - guid - , id_type + id_type , code , msg ) SELECT - a_guid - , NULL + MET.id_type , @errno , @text + FROM partsltd_prod.Shop_Msg_Error_Type MET + WHERE MET.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 := 'BAD_DATA'; SET v_id_type_error_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_bad_data LIMIT 1); SET v_id_access_level_edit := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'EDIT' LIMIT 1); - SET a_guid := IFNULL(a_guid, UUID()); + CALL p_validate_guid ( a_guid ); DROP TABLE IF EXISTS tmp_Permutation; @@ -71,14 +73,15 @@ BEGIN id_permutation INT NOT NULL , id_product INT NOT NULL , description VARCHAR(4000) NOT NULL - , cost_local FLOAT NOT NULL + , cost_local_VAT_excl FLOAT NULL + , cost_local_VAT_incl FLOAT NULL , id_currency_cost INT NOT NULL - , profit_local_min FLOAT NOT NULL + , profit_local_min FLOAT NULL , 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 NOT NULL , is_subscription BIT NOT NULL , id_unit_measurement_interval_recurrence INT @@ -97,7 +100,6 @@ BEGIN CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT - , guid BINARY(36) NOT NULL , id_type INT NULL , code VARCHAR(50) NOT NULL , msg VARCHAR(4000) NOT NULL @@ -109,7 +111,8 @@ BEGIN id_permutation , id_product , description - , cost_local + , cost_local_VAT_excl + , cost_local_VAT_incl , id_currency_cost , profit_local_min , latency_manufacture @@ -133,7 +136,8 @@ BEGIN PP_T.id_permutation , IFNULL(PP_T.id_product, PP.id_product) AS id_product , IFNULL(PP_T.description, PP.description) AS description - , IFNULL(PP_T.cost_local, PP.cost_local) AS cost_local + , IFNULL(PP_T.cost_local_VAT_excl, PP.cost_local_VAT_excl) AS cost_local_VAT_excl + , IFNULL(PP_T.cost_local_VAT_incl, PP.cost_local_VAT_incl) AS cost_local_VAT_incl , IFNULL(PP_T.id_currency_cost, PP.id_currency_cost) AS a_id_currency_cost , IFNULL(PP_T.profit_local_min, PP.profit_local_min) AS profit_local_min , IFNULL(PP_T.latency_manufacture, PP.latency_manufacture) AS latency_manufacture @@ -150,7 +154,7 @@ BEGIN , IFNULL(PP_T.id_unit_measurement_interval_expiration_unsealed, PP.id_unit_measurement_interval_expiration_unsealed) AS id_unit_measurement_interval_expiration_unsealed , IFNULL(PP_T.count_interval_expiration_unsealed, PP.count_interval_expiration_unsealed) AS count_interval_expiration_unsealed , IFNULL(PP_T.active, PP.active) AS active - , fn_shop_get_product_permutation_name(PP_T.id_permutation) + , IFNULL(fn_shop_get_product_permutation_name(PP_T.id_permutation), '(No Permutation)') AS name_error , CASE WHEN IFNULL(PP_T.id_permutation, 0) < 1 THEN 1 ELSE 0 END AS is_new FROM Shop_Product_Permutation_Temp PP_T LEFT JOIN Shop_Product_Permutation PP ON PP_T.id_permutation = PP.id_permutation @@ -162,67 +166,77 @@ BEGIN -- id_product IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.id_product) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , id_product + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('The following product permutation(s) do not have a product: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg + , CONCAT('The following product permutation(s) do not have a product: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P WHERE ISNULL(t_P.id_product) ; END IF; - -- cost_local - IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.cost_local) LIMIT 1) THEN + -- cost_local_VAT_excl + IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE NOT ISNULL(t_P.cost_local_VAT_excl) AND t_P.cost_local_VAT_excl < 0 LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , cost_local + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('The following product permutation(s) do not have a local cost: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg + , CONCAT('The following product permutation(s) do not have a valid local cost excluding VAT: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P - WHERE ISNULL(t_P.cost_local) + WHERE NOT ISNULL(t_P.cost_local_VAT_excl) AND t_P.cost_local_VAT_excl < 0 + ; + END IF; + -- cost_local_VAT_incl + IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE NOT ISNULL(t_P.cost_local_VAT_incl) AND t_P.cost_local_VAT_incl < 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('The following product permutation(s) do not have a valid local cost including VAT: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg + FROM tmp_Permutation t_P + WHERE NOT ISNULL(t_P.cost_local_VAT_incl) AND t_P.cost_local_VAT_incl < 0 ; END IF; -- profit_local_min - IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.profit_local_min) LIMIT 1) THEN + IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE NOT ISNULL(t_P.profit_local_min) AND t_P.profit_local_min < 0 LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , profit_local_min + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('The following product permutation(s) do not have a local minimum profit: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg + , CONCAT('The following product permutation(s) do not have a local minimum profit: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P - WHERE ISNULL(t_P.profit_local_min) + WHERE NOT ISNULL(t_P.profit_local_min) AND t_P.profit_local_min < 0 ; END IF; + + SELECT 'NIPS'; + -- latency_manufacture IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.latency_manufacture) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , latency_manufacture + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('The following product permutation(s) do not have a manufacturing latency: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg + , CONCAT('The following product permutation(s) do not have a manufacturing latency: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P WHERE ISNULL(t_P.latency_manufacture) ; @@ -230,16 +244,14 @@ BEGIN -- id_unit_measurement_quantity IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.id_unit_measurement_quantity) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , id_unit_measurement_quantity + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('The following product permutation(s) do not have a unit measurement for stock quantities: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg + , CONCAT('The following product permutation(s) do not have a unit measurement for stock quantities: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P WHERE ISNULL(t_P.id_unit_measurement_quantity) ; @@ -247,16 +259,14 @@ BEGIN -- count_unit_measurement_per_quantity_step IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.count_unit_measurement_per_quantity_step) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , count_unit_measurement_per_quantity_step + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('The following product permutation(s) do not have a count unit measurement per quantity step: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg + , CONCAT('The following product permutation(s) do not have a count unit measurement per quantity step: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P WHERE ISNULL(t_P.count_unit_measurement_per_quantity_step) ; @@ -264,16 +274,14 @@ BEGIN -- quantity_min IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.quantity_min) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , quantity_min + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('The following product permutation(s) do not have a minimum quantity: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg + , CONCAT('The following product permutation(s) do not have a minimum quantity: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P WHERE ISNULL(t_P.quantity_min) ; @@ -281,16 +289,14 @@ BEGIN -- quantity_max IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.quantity_max) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , quantity_max + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('The following product permutation(s) do not have a maximum quantity: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg + , CONCAT('The following product permutation(s) do not have a maximum quantity: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P WHERE ISNULL(t_P.quantity_max) ; @@ -298,16 +304,14 @@ BEGIN -- is_subscription IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.is_subscription) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , is_subscription + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('The following product permutation(s) do not have an is subscription?: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg + , CONCAT('The following product permutation(s) do not have an is subscription?: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P WHERE ISNULL(t_P.is_subscription) ; @@ -315,68 +319,82 @@ BEGIN -- does_expire_faster_once_unsealed IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.does_expire_faster_once_unsealed) LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( - guid - , id_type - , does_expire_faster_once_unsealed + id_type + , code , msg ) SELECT - a_guid AS GUID - , v_id_type_error_bad_data + v_id_type_error_bad_data , v_code_type_error_bad_data - , CONCAT('The following product permutation(s) do not have a does expire faster once unsealed: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg + , CONCAT('The following product permutation(s) do not have a does expire faster once unsealed: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg FROM tmp_Permutation t_P WHERE ISNULL(t_P.does_expire_faster_once_unsealed) ; END IF; -- Permissions - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN -- (SELECT * FROM tmp_Product WHERE is_new = 0 LIMIT 1) THEN - SET v_ids_product_permission := ( - SELECT GROUP_CONCAT(P.id_product SEPARATOR ',') - FROM Shop_Product P - INNER JOIN tmp_Permutation t_P - ON P.id_product = t_P.id_product - -- AND t_P.is_new = 0 - ); - IF NOT ISNULL(v_ids_product_permission) THEN - SET v_id_permission_product = (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_PRODUCT' LIMIT 1); - - CALL p_shop_calc_user(a_guid, a_id_user, FALSE, v_id_permission_product, v_id_access_level_edit, v_ids_product_permission); - - UPDATE tmp_Permutation t_P - INNER JOIN Shop_Product P ON t_P.id_product = P.id_product - INNER JOIN Shop_Calc_User_Temp UE_T - ON P.id_product = UE_T.id_product - AND UE_T.GUID = a_guid - SET - t_P.can_view = UE_T.can_view - , t_P.can_edit = UE_T.can_edit - , t_P.can_admin = UE_T.can_admin - ; - - CALL p_shop_clear_calc_user(a_guid); - - IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.can_edit) LIMIT 1) THEN - INSERT INTO tmp_Msg_Error ( - guid - , id_type - , code - , msg - ) - SELECT - a_guid AS GUID - , v_id_type_error_bad_data - , v_code_type_error_bad_data - , CONCAT('The following product permutation(s) do not have product edit permission: ', GROUP_CONCAT(IFNULL(t_P.name_error, 'NULL') SEPARATOR ', ')) AS msg - FROM tmp_Permutation t_P - WHERE ISNULL(t_P.can_edit) - ; - END IF; - END IF; + SET v_ids_product_permission := ( + SELECT GROUP_CONCAT(P.id_product SEPARATOR ',') + FROM Shop_Product P + INNER JOIN tmp_Permutation t_P + ON P.id_product = t_P.id_product + -- AND t_P.is_new = 0 + ); + + SET v_id_permission_product = (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_PRODUCT' LIMIT 1); + + IF a_debug = 1 THEN + SELECT + a_guid + , a_id_user + , FALSE AS a_get_inactive_user + , v_id_permission_product + , v_id_access_level_edit + , v_ids_product_permission + , 0 AS a_debug + ; END IF; - SET v_now := CURRENT_DATETIME(); + CALL p_shop_calc_user( + a_guid + , a_id_user + , FALSE -- a_get_inactive_user + , v_id_permission_product + , v_id_access_level_edit + , v_ids_product_permission + , 0 -- a_debug + ); + + UPDATE tmp_Permutation t_P + INNER JOIN Shop_Product P ON t_P.id_product = P.id_product + INNER JOIN Shop_Calc_User_Temp UE_T + ON P.id_product = UE_T.id_product + AND UE_T.GUID = a_guid + SET + t_P.can_view = UE_T.can_view + , t_P.can_edit = UE_T.can_edit + , t_P.can_admin = UE_T.can_admin + ; + + CALL p_shop_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + IF EXISTS (SELECT * FROM tmp_Permutation t_P WHERE ISNULL(t_P.can_edit) LIMIT 1) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT('The following product permutation(s) do not have product edit permission: ', GROUP_CONCAT(t_P.name_error SEPARATOR ', ')) AS msg + FROM tmp_Permutation t_P + WHERE ISNULL(t_P.can_edit) + ; + END IF; IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN START TRANSACTION; @@ -393,7 +411,8 @@ BEGIN SET PP.id_product = t_P.id_product , PP.description = t_P.description - , PP.cost_local = t_P.cost_local + , PP.cost_local_VAT_excl = t_P.cost_local_VAT_excl + , PP.cost_local_VAT_incl = t_P.cost_local_VAT_incl , PP.id_currency_cost = t_P.id_currency_cost , PP.profit_local_min = t_P.profit_local_min , PP.latency_manufacture = t_P.latency_manufacture @@ -417,7 +436,8 @@ BEGIN INSERT INTO Shop_Product_Permutation ( id_product , description - , cost_local + , cost_local_VAT_excl + , cost_local_VAT_incl , id_currency_cost , profit_local_min , latency_manufacture @@ -440,7 +460,8 @@ BEGIN SELECT t_P.id_product AS id_product , t_P.description AS description - , t_P.cost_local AS cost_local + , t_P.cost_local_VAT_excl AS cost_local_VAT_excl + , t_P.cost_local_VAT_incl AS cost_local_VAT_incl , t_P.id_currency_cost AS id_currency_cost , t_P.profit_local_min AS profit_local_min , t_P.latency_manufacture AS latency_manufacture @@ -458,7 +479,7 @@ BEGIN , t_P.count_interval_expiration_unsealed AS count_interval_expiration_unsealed , t_P.active AS active , a_id_user AS created_by - , v_now AS created_on + , v_time_start AS created_on FROM tmp_Permutation t_P WHERE is_new = 1 @@ -471,10 +492,22 @@ BEGIN COMMIT; END IF; - SELECT * FROM tmp_Msg_Error; + # 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 + ; - DROP TEMPORARY TABLE IF EXISTS tmp_Permutation; - DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + IF a_debug = 1 THEN + SELECT * from tmp_Permutation; + END IF; + + DROP TEMPORARY TABLE tmp_Permutation; + 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/7206_p_shop_save_product_permutation_test.sql b/static/MySQL/7206_p_shop_save_product_permutation_test.sql new file mode 100644 index 00000000..c70d21fd --- /dev/null +++ b/static/MySQL/7206_p_shop_save_product_permutation_test.sql @@ -0,0 +1,124 @@ + + +-- Clear previous proc +DROP PROCEDURE IF EXISTS partsltd_prod.p_shop_save_product_permutation_test; + + +DELIMITER // +CREATE PROCEDURE p_shop_save_product_permutation_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_Product_Permutation + ; + SELECT * + FROM partsltd_prod.Shop_Product_Permutation_Temp + ; + + START TRANSACTION; + + INSERT INTO partsltd_prod.Shop_Product_Permutation_Temp ( + id_permutation + , id_product + , description + , cost_local_VAT_excl + , cost_local_VAT_incl + , id_currency_cost + , profit_local_min + , latency_manufacture + , id_unit_measurement_quantity + , count_unit_measurement_per_quantity_step + , quantity_min + , quantity_max + , quantity_stock + , is_subscription + , id_unit_measurement_interval_recurrence + , count_interval_recurrence + , id_stripe_product + , does_expire_faster_once_unsealed + , id_unit_measurement_interval_expiration_unsealed + , count_interval_expiration_unsealed + , active + , guid + ) + VALUES + /* Test 1 - Insert */ + ( + -1 -- id_permutation + , 8 -- id_product + , 'Hair clip' -- description + , NULL -- cost_local_VAT_excl + , NULL -- cost_local_VAT_incl + , 1 -- id_currency_cost + , NULL -- profit_local_min + , 1 -- latency_manufacture + , 3 -- id_unit_measurement_quantity + , 1 -- count_unit_measurement_per_quantity_step + , 0 -- quantity_min + , 0 -- quantity_max + , 2 -- quantity_stock + , FALSE -- is_subscription + , NULL -- id_unit_measurement_interval_recurrence + , NULL -- count_interval_recurrence + , NULL -- id_stripe_product + , FALSE -- does_expire_faster_once_unsealed + , NULL -- id_unit_measurement_interval_expiration_unsealed + , NULL -- count_interval_expiration_unsealed + , 1 -- active + , v_guid + ) + /* Test 2 - Update + ( + 4 -- id_product + , 1 -- id_category + , 'Laptops' -- name + , 0 -- has_variations + , 2 -- id_access_level_required + , 2 -- display_order + , 1 -- active + , v_guid + ) + */ + ; + + COMMIT; + + SELECT * + FROM partsltd_prod.Shop_Product_Permutation_Temp + WHERE GUID = v_guid + ; + + CALL partsltd_prod.p_shop_save_product_permutation ( + 'Test save product' -- comment + , v_guid -- guid + , 1 -- id_user + , 1 -- debug + ); + + SELECT * + FROM partsltd_prod.Shop_Product_Permutation + ; + SELECT * + FROM partsltd_prod.Shop_Product_Permutation_Temp + ; + + CALL partsltd_prod.p_debug_timing_reporting ( v_time_start ); +END // +DELIMITER ;; + +/* +CALL partsltd_prod.p_shop_save_product_permutation_test (); + +DELETE FROM partsltd_prod.Shop_Product_Permutation_Temp; + +DROP TABLE IF EXISTS tmp_Msg_Error; + + +SELECT * FROM partsltd_prod.Shop_Product +*/ \ No newline at end of file diff --git a/static/MySQL/7400_p_shop_save_supplier.sql b/static/MySQL/7400_p_shop_save_supplier.sql index 09eb3319..4c4040d7 100644 --- a/static/MySQL/7400_p_shop_save_supplier.sql +++ b/static/MySQL/7400_p_shop_save_supplier.sql @@ -429,7 +429,7 @@ BEGIN -- Transaction IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN START TRANSACTION; - INSERT INTO partsltd_prod.Shop_Sales_And_Purchasing_Change_Set ( + INSERT INTO partsltd_prod.Shop_User_Change_Set ( comment , updated_last_by , updated_last_on diff --git a/static/MySQL/7400_p_shop_save_supplier_temp.sql b/static/MySQL/7400_p_shop_save_supplier_temp.sql index 0b2ea5d7..fd3d2301 100644 --- a/static/MySQL/7400_p_shop_save_supplier_temp.sql +++ b/static/MySQL/7400_p_shop_save_supplier_temp.sql @@ -42,6 +42,7 @@ BEGIN , active , guid ) + /* Test 1 - Insert VALUES ( -3 , 1 @@ -54,8 +55,26 @@ BEGIN , 'test url' , 1 -- active , v_guid - ); + ) + */ + /* Test 2 - Update */ + SELECT + id_supplier + , id_currency + , name_company + , 'Nat' AS name_contact + , 'Butchery' AS department_contact + , phone_number + , fax + , email + , website + , active + , v_guid + FROM partsltd_prod.Shop_Supplier S + WHERE S.id_supplier = 2 + ; + /* INSERT INTO partsltd_prod.Shop_Supplier_Address_Temp ( id_address , id_supplier @@ -68,6 +87,7 @@ BEGIN , active , GUID ) + / Test 1 - Insert VALUES ( -4 , -3 @@ -80,7 +100,23 @@ BEGIN , 1 , v_guid ) + / + / Test 2 - Update / + SELECT + id_address + , id_supplier + , id_region + , postcode + , address_line_1 + , address_line_2 + , city + , county + , active + , v_guid + FROM partsltd_prod.Shop_Supplier_Address SA + WHERE SA.id_supplier = 2 ; + */ COMMIT; @@ -118,14 +154,14 @@ BEGIN END // DELIMITER ;; +/* CALL partsltd_prod.p_shop_save_supplier_test (); DELETE FROM partsltd_prod.Shop_Supplier_Temp; DELETE FROM partsltd_prod.Shop_Supplier_Address_Temp; DROP TABLE IF EXISTS tmp_Msg_Error; -/* -Cannot add or update a child row: a foreign key constraint fails (`partsltd_prod`.`shop_supplier_address`, CONSTRAINT `FK_Shop_Supplier_Address_id_supplier` FOREIGN KEY (`id_supplier`) REFERENCES `shop_supplier` (`id_supplier`) ON UPDATE RESTRICT) +Cannot add or update a child row: a foreign key constraint fails (`partsltd_prod`.`shop_supplier`, CONSTRAINT `FK_Shop_Supplier_id_change_set` FOREIGN KEY (`id_change_set`) REFERENCES `shop_sales_and_purchasing_change_set` (`id_change_set`)) */ \ No newline at end of file diff --git a/static/MySQL/7403_p_shop_save_supplier_purchase_order.sql b/static/MySQL/7403_p_shop_save_supplier_purchase_order.sql index 8ee883ff..a5667ebc 100644 --- a/static/MySQL/7403_p_shop_save_supplier_purchase_order.sql +++ b/static/MySQL/7403_p_shop_save_supplier_purchase_order.sql @@ -285,7 +285,7 @@ BEGIN 'A valid ID is required for the following Supplier Purchase Order(s): ' , GROUP_CONCAT(CONCAT(IFNULL(t_SPO.id_stock, '(No Supplier Purchase Order)')) SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO + FROM tmp_Supplier_Purchase_Order t_SPO LEFT JOIN partsltd_prod.Shop_Supplier_Purchase_Order SPO ON t_SPO.id_order = SPO.id_order WHERE 1=1 AND t_SPO.id_stock > 0 @@ -316,7 +316,7 @@ BEGIN 'A valid supplier is required for the following Supplier Purchase Order(s): ' , GROUP_CONCAT(CONCAT(IFNULL(t_SPO.id_stock, '(No Supplier Purchase Order)'), ' - ', t_SPO.id_supplier_ordered) SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO + FROM tmp_Supplier_Purchase_Order t_SPO LEFT JOIN partsltd_prod.Shop_Supplier S ON t_SPO.id_supplier_ordered = S.id_supplier WHERE 1=1 AND ( @@ -349,7 +349,7 @@ BEGIN 'A valid currency is required for the following Supplier Purchase Order(s): ' , GROUP_CONCAT(CONCAT(IFNULL(t_SPO.id_stock, '(No Supplier Purchase Order)'), ' - ', t_SPO.id_currency_cost) SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO + FROM tmp_Supplier_Purchase_Order t_SPO LEFT JOIN partsltd_prod.Shop_Currency C ON t_SPO.id_currency_cost = C.id_currency WHERE 1=1 AND ( @@ -559,7 +559,7 @@ BEGIN SELECT * from partsltd_prod.Shop_Calc_User_Temp WHERE GUID = a_guid; END IF; - IF NOT EXISTS (SELECT can_view FROM partsltd_prod.Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = a_guid) THEN + 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 ( @@ -567,11 +567,18 @@ BEGIN , code , msg ) - VALUES ( + SELECT v_id_type_error_no_permission , v_code_type_error_no_permission - , CONCAT('You do not have view permissions for ', (SELECT name FROM partsltd_prod.Shop_Permission WHERE id_permission = v_id_permission_supplier LIMIT 1)) - ) + , CONCAT( + 'You do not have view permissions for ' + , GROUP_CONCAT(name SEPARATOR ', ') + ) AS msg + 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; diff --git a/static/MySQL/7403_p_shop_save_supplier_purchase_order_test.sql b/static/MySQL/7403_p_shop_save_supplier_purchase_order_test.sql index 59964fd1..8fe91a72 100644 --- a/static/MySQL/7403_p_shop_save_supplier_purchase_order_test.sql +++ b/static/MySQL/7403_p_shop_save_supplier_purchase_order_test.sql @@ -39,7 +39,7 @@ BEGIN , active , GUID ) - /* Test 1 - Insert + /* Test 1 - Insert */ VALUES ( -1 , 1 @@ -47,7 +47,7 @@ BEGIN , 1 , v_guid ) - */ + /* Test 2 - Update SELECT id_order , id_supplier_ordered @@ -56,6 +56,7 @@ BEGIN , v_guid FROM partsltd_prod.Shop_Supplier_Purchase_Order WHERE id_order = 6 + */ ; INSERT INTO partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link_Temp ( @@ -72,7 +73,7 @@ BEGIN , cost_total_local_VAT_incl , GUID ) - /* Test 1 - Insert + /* Test 1 - Insert */ VALUES ( -1 , -1 @@ -87,7 +88,7 @@ BEGIN , 6 , v_guid ) - */ + /* Test 2 - Update SELECT id_link , id_order @@ -103,6 +104,7 @@ BEGIN , v_guid FROM partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link WHERE id_order = 6 + */ ; COMMIT; @@ -149,6 +151,7 @@ DELETE FROM partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link_Temp; DROP TABLE IF EXISTS tmp_Msg_Error; +/* Cannot add or update a child row: a foreign key constraint fails (`partsltd_prod`.`shop_supplier_address`, CONSTRAINT `FK_Shop_Supplier_Address_id_supplier` FOREIGN KEY (`id_supplier`) REFERENCES `shop_supplier` (`id_supplier`) ON UPDATE RESTRICT) */ \ No newline at end of file diff --git a/static/MySQL/7415_p_shop_save_Manufacturing_purchase_order_test.sql b/static/MySQL/7415_p_shop_save_Manufacturing_purchase_order_test.sql new file mode 100644 index 00000000..fe5b3378 --- /dev/null +++ b/static/MySQL/7415_p_shop_save_Manufacturing_purchase_order_test.sql @@ -0,0 +1,149 @@ + + +-- Clear previous proc +DROP PROCEDURE IF EXISTS partsltd_prod.p_shop_save_Manufacturing_purchase_order_test; + + +DELIMITER // +CREATE PROCEDURE p_shop_save_Manufacturing_purchase_order_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_Manufacturing_Purchase_Order + ; + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp + ; + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link + ; + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp + ; + + START TRANSACTION; + + DELETE FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp; + DELETE FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp; + + INSERT INTO partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp ( + id_order + , id_currency + , active + , GUID + ) + /* Test 1 - Insert */ + VALUES ( + -1 + , 1 + , 1 + , v_guid + ) + /* Test 2: Alter + SELECT + id_order + , id_currency + , active + , v_guid + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order + WHERE id_order = 6 + */ + ;-- SELECT * FROM partsltd_prod.Shop_Unit_Measurement; + + INSERT INTO partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp ( + id_link + , id_order + , id_permutation + , id_unit_quantity + , quantity_used + , quantity_produced + , id_unit_latency_manufacture + , latency_manufacture + , display_order + , active + , GUID + ) + /* Test 1 - Insert */ + VALUES ( + -1 -- id_link + , -1 -- id_order + , 3 -- id_permutation + , 3 -- id_unit_quantity + , 3 -- quantity_used + , 0 -- quantity_produced + , 4 -- id_unit_latency_manufacture + , 4 -- latency_manufacture + , 1 -- display_order + , 1 -- active + , v_guid -- + ) + /* Test 2: Alter + SELECT + id_link + , id_order + , id_permutation + , id_unit_quantity + , quantity_used + , quantity_produced + , id_unit_latency_manufacture + , latency_manufacture + , display_order + , active + , v_guid + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link + WHERE id_order = 6 + */ + ; + + COMMIT; + + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp + WHERE GUID = v_guid + ; + + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp + WHERE GUID = v_guid + ; + + CALL partsltd_prod.p_shop_save_Manufacturing_purchase_order ( + 'Test save Manufacturing Purchase Order' -- comment + , v_guid -- guid + , 1 -- id_user + , 1 -- debug + ); + + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp + ; + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp + ; + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order + ; + SELECT * + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link + ; + + CALL partsltd_prod.p_debug_timing_reporting ( v_time_start ); +END // +DELIMITER ;; + +/* +CALL partsltd_prod.p_shop_save_Manufacturing_purchase_order_test (); + +DELETE FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp; +DELETE FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp; + +DROP TABLE IF EXISTS tmp_Msg_Error; + +select * from partsltd_prod.Shop_User; +*/ \ 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 b402ab8d..c67228dd 100644 --- a/static/MySQL/7415_p_shop_save_manufacturing_purchase_order.sql +++ b/static/MySQL/7415_p_shop_save_manufacturing_purchase_order.sql @@ -18,11 +18,13 @@ CREATE PROCEDURE p_shop_save_manufacturing_purchase_order ( 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_manufacturing_purchase_order 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); @@ -64,6 +66,8 @@ BEGIN 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_manufacturing_purchase_order := (SELECT GROUP_CONCAT(id_permission SEPARATOR ',') FROM partsltd_prod.Shop_Permission WHERE code IN ('STORE_MANUFACTURING_PURCHASE_ORDER', 'STORE_PRODUCT')); SET v_id_access_level_edit := (SELECT id_access_level FROM partsltd_prod.Shop_Access_Level WHERE code = 'EDIT' LIMIT 1); @@ -77,28 +81,38 @@ BEGIN -- Temporary tables CREATE TEMPORARY TABLE tmp_Manufacturing_Purchase_Order ( id_order INT NOT NULL PRIMARY KEY - , id_currency_cost INT NOT NULL + , id_order_temp INT NOT NULL + , id_currency INT NOT NULL + , active BIT NOT NULL , is_new BIT NOT NULL , name_error VARCHAR(1000) NOT NULL + , cost_total_local_VAT_excl FLOAT NULL + , cost_total_local_VAT_incl FLOAT NULL + , price_total_local_VAT_excl FLOAT NULL + , price_total_local_VAT_incl FLOAT NULL ); CREATE TEMPORARY TABLE tmp_Manufacturing_Purchase_Order_Product_Link ( id_link INT NOT NULL PRIMARY KEY , id_order INT NOT NULL - , id_permutation INT NOT NULL - , id_currency_cost INT NOT NULL - , quantity_used FLOAT NOT NULL + , id_product INT NULL + , id_permutation INT NULL + , id_currency INT NOT NULL , id_unit_quantity INT NOT NULL + , quantity_used FLOAT NOT NULL , quantity_produced FLOAT NULL , id_unit_latency_manufacture INT NULL , latency_manufacture INT NULL , display_order INT NOT NULL , active BIT NOT NULL - , name_error VARCHAR(200) NOT NULL - , cost_total_local_VAT_excl FLOAT NOT NULL - , cost_total_local_VAT_incl FLOAT NOT NULL - , cost_unit_local_VAT_excl FLOAT NOT NULL - , cost_unit_local_VAT_incl FLOAT NOT NULL + , cost_unit_local_VAT_excl FLOAT NULL + , cost_unit_local_VAT_incl FLOAT NULL + , cost_total_local_VAT_excl FLOAT NULL + , cost_total_local_VAT_incl FLOAT NULL + , price_unit_local_VAT_excl FLOAT NULL + , price_unit_local_VAT_incl FLOAT NULL + , price_total_local_VAT_excl FLOAT NULL + , price_total_local_VAT_incl FLOAT NULL , has_order BIT NULL , is_new BIT NOT NULL , name_error VARCHAR(1000) NOT NULL @@ -113,21 +127,37 @@ BEGIN INSERT INTO tmp_Manufacturing_Purchase_Order ( id_order - , id_currency_cost + , id_order_temp + , id_currency + , active + , is_new + , name_error ) SELECT - SPO_T.id_order - , IFNULL(IFNULL(SPO_T.id_currency_cost, MPO.id_currency_cost), 0) AS id_currency_cost - FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp SPO_T - LEFT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order MPO ON SPO_T.id_order = MPO.id_order - WHERE SPO_T.GUID = a_guid + MPO_T.id_order + , MPO_T.id_order + , IFNULL(IFNULL(MPO_T.id_currency, MPO.id_currency), 0) AS id_currency + , IFNULL(IFNULL(MPO_T.active, MPO.active), 1) AS active + , IFNULL(MPO_T.id_order, 0) < 1 AS is_new + , CASE WHEN IFNULL(MPO_T.id_order, -1) < 0 THEN + CONCAT('New Manufacturing Purchase Order ', MPO_T.id_order) + ELSE + CONCAT( + IFNULL(IFNULL(MPO_T.id_order, MPO.id_order), '(No Manufacturing Purchase Order)') + , ' - ' + , IFNULL(IFNULL(MPO_T.id_currency, MPO.id_currency), '(No Currency)') + ) + END AS name_error + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp MPO_T + LEFT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order MPO ON MPO_T.id_order = MPO.id_order + WHERE MPO_T.GUID = a_guid ; INSERT INTO tmp_Manufacturing_Purchase_Order_Product_Link ( id_link , id_order + , id_product , id_permutation - , id_currency_cost , id_unit_quantity , quantity_used , quantity_produced @@ -135,55 +165,126 @@ BEGIN , latency_manufacture , display_order , active - , name_error - , is_new - , cost_total_local_VAT_excl - , cost_total_local_VAT_incl , cost_unit_local_VAT_excl , cost_unit_local_VAT_incl + , price_unit_local_VAT_excl + , price_unit_local_VAT_incl , has_order + , is_new ) SELECT - IFNULL(SPOPL_T.id_link, 0) AS id_link - , IFNULL(IFNULL(SPOPL_T.id_order, MPOPL.id_order), 0) AS id_order - , IFNULL(IFNULL(SPOPL_T.id_permutation, MPOPL.id_permutation), 0) AS id_permutation - , IFNULL(IFNULL(SPOPL_T.id_currency_cost, MPOPL.id_currency_cost), 0) AS id_currency_cost - , IFNULL(IFNULL(SPOPL_T.id_unit_quantity, MPOPL.id_unit_quantity), 0) AS id_unit_quantity - , SPOPL_T.quantity_used AS quantity_used - , SPOPL_T.quantity_produced AS quantity_produced - , SPOPL_T.id_unit_latency_manufacture AS id_unit_latency_manufacture - , SPOPL_T.latency_manufacture AS latency_manufacture - , IFNULL(SPOPL_T.display_order, RANK() OVER (PARTITION BY IFNULL(IFNULL(SPOPL_T.id_order, MPOPL.id_order), 0) ORDER BY IFNULL(IFNULL(SPOPL_T.display_order, MPOPL.display_order), 0))) AS display_order - , IFNULL(IFNULL(SPOPL_T.active, MPOPL.active), 1) AS active - , CONCAT( - fn_shop_get_product_permutation_name(SPOPL_T.id_permutation) - , ' - x' - , IFNULL(SPOPL_T.quantity_used, '(No Quantity)') - ) AS name_error - , IFNULL(SPOPL_T.id_link, 0) < 1 AS is_new - , SPOPL_T.cost_total_local_VAT_excl AS cost_total_local_VAT_excl - , SPOPL_T.cost_total_local_VAT_incl AS cost_total_local_VAT_incl - , SPOPL_T.cost_total_local_VAT_excl / SPOPL_T.quantity_used AS cost_unit_local_VAT_excl - , SPOPL_T.cost_total_local_VAT_incl / SPOPL_T.quantity_used AS cost_unit_local_VAT_incl + IFNULL(MPOPL_T.id_link, 0) AS id_link + , IFNULL(IFNULL(MPOPL_T.id_order, MPOPL.id_order), 0) AS id_order + , IFNULL(MPOPL_T.id_product, PP.id_product) AS id_product + , IFNULL( + IFNULL( + IFNULL( + MPOPL_T.id_permutation + , CASE WHEN NOT ISNULL(MPOPL_T.id_product) AND NOT ISNULL(MPOPL_T.csv_list_variations) THEN + partsltd_prod.fn_shop_get_id_product_permutation_from_variation_csv_list(MPOPL_T.id_product, MPOPL_T.csv_list_variations) + ELSE NULL END + ) + , MPOPL.id_permutation + ) + , 0 + ) AS id_permutation + , IFNULL(IFNULL(MPOPL_T.id_unit_quantity, MPOPL.id_unit_quantity), 0) AS id_unit_quantity + , MPOPL_T.quantity_used AS quantity_used + , MPOPL_T.quantity_produced AS quantity_produced + , MPOPL_T.id_unit_latency_manufacture AS id_unit_latency_manufacture + , MPOPL_T.latency_manufacture AS latency_manufacture + , IFNULL(MPOPL_T.display_order, RANK() OVER (PARTITION BY IFNULL(IFNULL(MPOPL_T.id_order, MPOPL.id_order), 0) ORDER BY IFNULL(IFNULL(MPOPL_T.display_order, MPOPL.display_order), 0))) AS display_order + , IFNULL(IFNULL(MPOPL_T.active, MPOPL.active), 1) AS active + -- , MPOPL_T.cost_total_local_VAT_excl / MPOPL_T.quantity_used AS cost_unit_local_VAT_excl + -- , MPOPL_T.cost_total_local_VAT_incl / MPOPL_T.quantity_used AS cost_unit_local_VAT_incl + , IFNULL(MPOPL_T.cost_unit_local_VAT_excl, MPOPL.cost_unit_local_VAT_excl) AS cost_unit_local_VAT_excl + , IFNULL(MPOPL_T.cost_unit_local_VAT_incl, MPOPL.cost_unit_local_VAT_incl) AS cost_unit_local_VAT_incl + , IFNULL(MPOPL_T.price_unit_local_VAT_excl, MPOPL.price_unit_local_VAT_excl) AS price_unit_local_VAT_excl + , IFNULL(MPOPL_T.price_unit_local_VAT_incl, MPOPL.price_unit_local_VAT_incl) AS price_unit_local_VAT_incl , NOT ISNULL(t_MPO.id_order) AS has_order - FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp SPOPL_T - LEFT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link MPOPL ON SPOPL_T.id_link = MPOPL.id_link - LEFT JOIN tmp_Manufacturing_Purchase_Order t_MPO ON SPOPL_T.id_order = t_MPO.id_order - WHERE SPOPL_T.GUID = a_guid + , IFNULL(MPOPL_T.id_link, 0) < 1 AS is_new + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp MPOPL_T + LEFT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link MPOPL ON MPOPL_T.id_link = MPOPL.id_link + LEFT JOIN tmp_Manufacturing_Purchase_Order t_MPO ON MPOPL_T.id_order = t_MPO.id_order + LEFT JOIN partsltd_prod.Shop_Product_Permutation PP ON MPOPL.id_permutation = PP.id_permutation + WHERE MPOPL_T.GUID = a_guid ; + UPDATE tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + -- INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp MPOPL_T ON t_MPOPL.id_order = MPOPL_T.id_order + LEFT JOIN partsltd_prod.Shop_Product_Permutation PP ON t_MPOPL.id_permutation = PP.id_permutation + LEFT JOIN partsltd_prod.Shop_Product P ON PP.id_product = P.id_product + LEFT JOIN partsltd_prod.Shop_Product_Category PC ON P.id_category = PC.id_category + SET + name_error = CONCAT( + CASE WHEN ISNULL(t_MPOPL.id_permutation) THEN + CASE WHEN ISNULL(PP.id_product) THEN + '(No Product Permutation)' + ELSE + CONCAT( + PC.name + , ' - ' + , P.name + ) + END + ELSE + fn_shop_get_product_permutation_name(PP.id_permutation) + END + , ' - x' + , IFNULL(t_MPOPL.quantity_used, '(No Quantity)') + , ' Used - x' + , IFNULL(t_MPOPL.quantity_produced, '(No Quantity)') + , ' Produced' + ) + , cost_total_local_VAT_excl = t_MPOPL.quantity_used * t_MPOPL.cost_unit_local_VAT_excl + , cost_total_local_VAT_incl = t_MPOPL.quantity_used * t_MPOPL.cost_unit_local_VAT_incl + , price_total_local_VAT_excl = t_MPOPL.quantity_produced * t_MPOPL.price_unit_local_VAT_excl + , price_total_local_VAT_incl = t_MPOPL.quantity_produced * t_MPOPL.price_unit_local_VAT_incl + ; + + -- Insert missing order records INSERT INTO tmp_Manufacturing_Purchase_Order ( id_order - , id_currency_cost + , id_order_temp + , id_currency + , active + , is_new + , name_error ) SELECT - SPO_T.id_order - , IFNULL(IFNULL(SPO_T.id_currency_cost, MPO.id_currency_cost), 0) AS id_currency_cost + MPO.id_order + , MPO.id_order_temp + , MPO.id_currency + , MPO.active + , FALSE AS is_new + , CONCAT( + IFNULL(MPO.id_order, '(No Manufacturing Purchase Order)') + , ' - ' + , IFNULL(MPO.id_currency, '(No Currency)') + ) AS name_error FROM partsltd_prod.Shop_Manufacturing_Purchase_Order MPO INNER JOIN tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL ON MPO.id_order = t_MPOPL.id_order AND t_MPOPL.has_order = 0 ; + + UPDATE tmp_Manufacturing_Purchase_Order t_MPO + INNER JOIN ( + SELECT + t_MPOPL.id_order + , SUM(t_MPOPL.cost_total_local_VAT_excl) AS cost_total_local_VAT_excl + , SUM(t_MPOPL.cost_total_local_VAT_incl) AS cost_total_local_VAT_incl + , SUM(t_MPOPL.price_total_local_VAT_excl) AS price_total_local_VAT_excl + , SUM(t_MPOPL.price_total_local_VAT_incl) AS price_total_local_VAT_incl + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + GROUP BY t_MPOPL.id_order + ) SUM_t_MPOPL ON t_MPO.id_order = SUM_t_MPOPL.id_order + SET + t_MPO.cost_total_local_VAT_excl = SUM_t_MPOPL.cost_total_local_VAT_excl + , t_MPO.cost_total_local_VAT_incl = SUM_t_MPOPL.cost_total_local_VAT_incl + , t_MPO.price_total_local_VAT_excl = SUM_t_MPOPL.price_total_local_VAT_excl + , t_MPO.price_total_local_VAT_incl = SUM_t_MPOPL.price_total_local_VAT_incl + ; -- Validation -- Manufacturing Purchase Order @@ -207,20 +308,20 @@ BEGIN , v_code_type_error_bad_data , CONCAT( 'A valid ID is required for the following Manufacturing Purchase Order(s): ' - , GROUP_CONCAT(CONCAT(IFNULL(t_MPO.id_stock, '(No Manufacturing Purchase Order)')) SEPARATOR ', ') + , GROUP_CONCAT(t_MPO.name_error SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO + FROM tmp_Manufacturing_Purchase_Order t_MPO LEFT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order MPO ON t_MPO.id_order = MPO.id_order WHERE 1=1 - AND t_MPO.id_stock > 0 - AND ISNULL(MPO.id_stock) + AND t_MPO.id_order > 0 + AND ISNULL(MPO.id_order) ; END IF; - # id_currency_cost + # id_currency IF EXISTS ( SELECT * FROM tmp_Manufacturing_Purchase_Order t_MPO - LEFT JOIN partsltd_prod.Shop_Currency C ON t_MPO.id_currency_cost = C.id_currency + LEFT JOIN partsltd_prod.Shop_Currency C ON t_MPO.id_currency = C.id_currency WHERE 1=1 AND ( ISNULL(C.id_currency) @@ -238,10 +339,10 @@ BEGIN , v_code_type_error_bad_data , CONCAT( 'A valid currency is required for the following Manufacturing Purchase Order(s): ' - , GROUP_CONCAT(CONCAT(IFNULL(t_MPO.id_stock, '(No Manufacturing Purchase Order)'), ' - ', t_MPO.id_currency_cost) SEPARATOR ', ') + , GROUP_CONCAT(CONCAT(t_MPO.name_error, ' - ', t_MPO.id_currency) SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO - LEFT JOIN partsltd_prod.Shop_Currency C ON t_MPO.id_currency_cost = C.id_currency + FROM tmp_Manufacturing_Purchase_Order t_MPO + LEFT JOIN partsltd_prod.Shop_Currency C ON t_MPO.id_currency = C.id_currency WHERE 1=1 AND ( ISNULL(C.id_currency) @@ -252,8 +353,8 @@ BEGIN # id_unit_quantity IF EXISTS ( SELECT * - FROM tmp_Manufacturing_Purchase_Order t_MPO - LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPO.id_unit_quantity = UM.id_unit_measurement + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPOPL.id_unit_quantity = UM.id_unit_measurement WHERE 1=1 AND ( ISNULL(UM.id_unit_measurement) @@ -271,10 +372,10 @@ BEGIN , v_code_type_error_bad_data , CONCAT( 'A valid unit measurement of quantity is required for the following Manufacturing Purchase Order(s): ' - , GROUP_CONCAT(CONCAT(IFNULL(t_MPO.id_stock, '(No Manufacturing Purchase Order)'), ' - ', t_MPO.id_currency_cost) SEPARATOR ', ') + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPO.id_unit_quantity) SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO - LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPO.id_unit_quantity = UM.id_unit_measurement + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPOPL.id_unit_quantity = UM.id_unit_measurement WHERE 1=1 AND ( ISNULL(UM.id_unit_measurement) @@ -282,10 +383,10 @@ BEGIN ) ; END IF; - # Invalid quantity ordered + # Invalid quantity used IF EXISTS ( SELECT * - FROM tmp_Manufacturing_Purchase_Order_Product_Link + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL WHERE ISNULL(t_MPOPL.quantity_used) OR t_MPOPL.quantity_used <= 0 @@ -297,20 +398,22 @@ BEGIN v_id_error_type_bad_data, v_code_error_type_bad_data, CONCAT( - 'A valid quantity ordered is required for the following Manufacturing Purchase Order Item(s): ' - , GROUP_CONCAT(t_MPOPL.name_error SEPARATOR ', ') + 'A valid quantity used is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.quantity_used) SEPARATOR ', ') ) FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL WHERE - ISNULL(t_MPOPL.quantity_used) - OR t_MPOPL.quantity_used <= 0 + NOT ISNULL(t_MPOPL.quantity_used) + AND t_MPOPL.quantity_used <= 0 ; END IF; - # Invalid quantity received + # Invalid quantity produced IF EXISTS ( SELECT * - FROM tmp_Manufacturing_Purchase_Order_Product_Link - WHERE t_MPOPL.quantity_produced < 0 + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.quantity_produced) + AND t_MPOPL.quantity_produced < 0 ) THEN INSERT INTO tmp_Msg_Error ( id_type, code, msg @@ -319,24 +422,24 @@ BEGIN v_id_error_type_bad_data, v_code_error_type_bad_data, CONCAT( - 'A valid quantity received is required for the following Manufacturing Purchase Order Item(s): ' - , GROUP_CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.quantity_produced SEPARATOR ', ') + 'A valid quantity produced is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.quantity_produced) SEPARATOR ', ') ) FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL - WHERE t_MPOPL.quantity_produced < 0 + WHERE + NOT ISNULL(t_MPOPL.quantity_produced) + AND t_MPOPL.quantity_produced < 0 ; END IF; # id_unit_latency_manufacture IF EXISTS ( SELECT * - FROM tmp_Manufacturing_Purchase_Order t_MPO - LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPO.id_unit_latency_manufacture = UM.id_unit_measurement - WHERE 1=1 - AND ( - NOT ISNULL(t_MPO.id_unit_latency_manufacture) - OR ISNULL(UM.id_unit_measurement) - OR UM.active = 0 - ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPOPL.id_unit_latency_manufacture = UM.id_unit_measurement + WHERE + ISNULL(t_MPOPL.id_unit_latency_manufacture) + OR ISNULL(UM.id_unit_measurement) + OR UM.active = 0 LIMIT 1 ) THEN INSERT INTO tmp_Msg_Error ( @@ -349,22 +452,20 @@ BEGIN , v_code_type_error_bad_data , CONCAT( 'A valid unit measurement of manufacture latency is required for the following Manufacturing Purchase Order(s): ' - , GROUP_CONCAT(CONCAT(IFNULL(t_MPO.id_stock, '(No Manufacturing Purchase Order)'), ' - ', t_MPO.id_unit_latency_manufacture) SEPARATOR ', ') + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.id_unit_latency_manufacture) SEPARATOR ', ') ) AS msg - FROM tmp_Stock_Item t_SPO - LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPO.id_unit_latency_manufacture = UM.id_unit_measurement - WHERE 1=1 - AND ( - NOT ISNULL(t_MPO.id_unit_latency_manufacture) - OR ISNULL(UM.id_unit_measurement) - OR UM.active = 0 - ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_MPOPL.id_unit_latency_manufacture = UM.id_unit_measurement + WHERE + ISNULL(t_MPOPL.id_unit_latency_manufacture) + OR ISNULL(UM.id_unit_measurement) + OR UM.active = 0 ; END IF; # Invalid manufacture latency IF EXISTS ( SELECT * - FROM tmp_Manufacturing_Purchase_Order_Product_Link + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL WHERE t_MPOPL.latency_manufacture < 0 ) THEN INSERT INTO tmp_Msg_Error ( @@ -375,13 +476,111 @@ BEGIN v_code_error_type_bad_data, CONCAT( 'A valid manufacture latency is required for the following Manufacturing Purchase Order Item(s): ' - , GROUP_CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.latency_manufacture SEPARATOR ', ') + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.latency_manufacture) SEPARATOR ', ') ) FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL WHERE t_MPOPL.latency_manufacture < 0 ; END IF; + # Invalid costs excl VAT + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.cost_unit_local_VAT_excl) + AND t_MPOPL.cost_unit_local_VAT_excl < 0 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT( + 'A valid cost excluding VAT is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.cost_unit_local_VAT_excl) SEPARATOR ', ') + ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.cost_unit_local_VAT_excl) + AND t_MPOPL.cost_unit_local_VAT_excl < 0 + ; + END IF; + # Invalid costs incl VAT + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.cost_unit_local_VAT_incl) + AND t_MPOPL.cost_unit_local_VAT_incl < 0 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT( + 'A valid cost including VAT is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.cost_unit_local_VAT_incl) SEPARATOR ', ') + ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.cost_unit_local_VAT_incl) + AND t_MPOPL.cost_unit_local_VAT_incl < 0 + ; + END IF; + + # Invalid prices excl VAT + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.price_unit_local_VAT_excl) + AND t_MPOPL.price_unit_local_VAT_excl < 0 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT( + 'A valid price excluding VAT is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.price_unit_local_VAT_excl) SEPARATOR ', ') + ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.price_unit_local_VAT_excl) + AND t_MPOPL.price_unit_local_VAT_excl < 0 + ; + END IF; + # Invalid prices incl VAT + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.price_unit_local_VAT_incl) + AND t_MPOPL.price_unit_local_VAT_incl < 0 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT( + 'A valid price including VAT is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.price_unit_local_VAT_incl) SEPARATOR ', ') + ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + NOT ISNULL(t_MPOPL.price_unit_local_VAT_incl) + AND t_MPOPL.price_unit_local_VAT_incl < 0 + ; + END IF; + -- Duplicates IF EXISTS ( SELECT @@ -398,7 +597,7 @@ BEGIN SELECT v_id_error_type_bad_data, v_code_error_type_bad_data, - CONCAT('Duplicate records: ', GROUP_CONCAT(t_SPOPLC.name_error SEPARATOR ', ')) + CONCAT('Duplicate records: ', GROUP_CONCAT(t_MPOPLC.name_error SEPARATOR ', ')) FROM ( SELECT id_permutation @@ -407,7 +606,7 @@ BEGIN FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL GROUP BY id_permutation HAVING COUNT(*) > 1 - ) t_SPOPLC + ) t_MPOPLC ; END IF; -- Empty Manufacturing Purchase Order @@ -468,7 +667,10 @@ BEGIN , v_ids_product_permission -- ids_product , 0 -- a_debug ; - SELECT * from partsltd_prod.Shop_Calc_User_Temp; + SELECT * + FROM partsltd_prod.Shop_Calc_User_Temp + WHERE GUID = a_guid + ; END IF; CALL p_shop_calc_user( @@ -485,7 +687,7 @@ BEGIN SELECT * from partsltd_prod.Shop_Calc_User_Temp WHERE GUID = a_guid; END IF; - IF NOT EXISTS (SELECT can_view FROM partsltd_prod.Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = a_guid) THEN + 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 ( @@ -493,18 +695,94 @@ BEGIN , code , msg ) - VALUES ( + SELECT v_id_type_error_no_permission , v_code_type_error_no_permission - , CONCAT('You do not have view permissions for ', (SELECT name FROM partsltd_prod.Shop_Permission WHERE id_permission = v_id_permission_manufacturing LIMIT 1)) - ) + , CONCAT( + 'You do not have view 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 ); + CALL partsltd_prod.p_shop_clear_calc_user( + a_guid + , 0 -- a_debug + ); + + -- Changed quantity used + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link MPOPL ON t_MPOPL.id_link = MPOPL.id_link + INNER JOIN partsltd_prod.Shop_Stock_Item SI ON MPOPL.id_permutation = SI.id_permutation + WHERE + t_MPOPL.is_new = 0 + AND t_MPOPL.quantity_used <> MPOPL.quantity_used + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_warning + , v_code_type_error_warning + , CONCAT( + 'The quantity used has changed on the following orders. Please update the stock items appropriately.' + , GROUP_CONCAT( + CONCAT( + t_MPOPL.name_error + , ' - from ' + , MPOPL.quantity_used + , ' to ' + , t_MPOPL.quantity_used + ) SEPARATOR ', ' + ) + ) AS msg + ; + END IF; + -- Changed quantity produced + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link MPOPL ON t_MPOPL.id_link = MPOPL.id_link + INNER JOIN partsltd_prod.Shop_Stock_Item SI ON MPOPL.id_permutation = SI.id_permutation + WHERE + t_MPOPL.is_new = 0 + AND t_MPOPL.quantity_produced <> MPOPL.quantity_produced + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_warning + , v_code_type_error_warning + , CONCAT( + 'The quantity produced has changed on the following orders. Please update the stock items appropriately.' + , GROUP_CONCAT( + CONCAT( + t_MPOPL.name_error + , ' - from ' + , MPOPL.quantity_produced + , ' to ' + , t_MPOPL.quantity_produced + ) SEPARATOR ', ' + ) + ) AS msg + ; + END IF; - IF EXISTS ( SELECT * FROM tmp_Msg_Error LIMIT 1 ) THEN - DELETE FROM tmp_Manufacturing; + IF EXISTS ( SELECT * FROM tmp_Msg_Error WHERE id_type <> v_id_type_error_warning LIMIT 1 ) THEN + DELETE FROM tmp_Manufacturing_Purchase_Order_Product_Link; + DELETE FROM tmp_Manufacturing_Purchase_Order; END IF; -- Transaction @@ -524,31 +802,50 @@ BEGIN SET v_id_change_set := LAST_INSERT_ID(); INSERT INTO partsltd_prod.Shop_Manufacturing_Purchase_Order ( - id_currency_cost + id_order_temp + , id_currency , cost_total_local_VAT_excl , cost_total_local_VAT_incl + , price_total_local_VAT_excl + , price_total_local_VAT_incl + , active , created_by , created_on , id_change_set - , active ) SELECT - t_MPO.id_currency_cost - , SUM(t_MPOPL.cost_total_local_VAT_excl) - , SUM(t_MPOPL.cost_total_local_VAT_incl) + t_MPO.id_order_temp + , t_MPO.id_currency + , t_MPO.cost_total_local_VAT_excl + , t_MPO.cost_total_local_VAT_incl + , t_MPO.price_total_local_VAT_excl + , t_MPO.price_total_local_VAT_incl , t_MPO.active , a_id_user , v_time_start , v_id_change_set FROM tmp_Manufacturing_Purchase_Order t_MPO INNER JOIN tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL ON t_MPO.id_order = t_MPOPL.id_order - WHERE t_MPOPL.is_new = 1 + WHERE t_MPO.is_new = 1 + ; + + UPDATE tmp_Manufacturing_Purchase_Order t_MPO + INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order MPO ON t_MPO.id_order_temp = MPO.id_order_temp + SET + t_MPO.id_order = MPO.id_order + WHERE t_MPO.is_new = 1 + ; + + UPDATE tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + INNER JOIN tmp_Manufacturing_Purchase_Order t_MPO ON t_MPOPL.id_order = t_MPO.id_order_temp + SET + t_MPOPL.id_order = t_MPO.id_order + WHERE t_MPO.is_new = 1 ; INSERT INTO Shop_Manufacturing_Purchase_Order_Product_Link ( id_order , id_permutation - , id_currency_cost , id_unit_quantity , quantity_used , quantity_produced @@ -556,15 +853,17 @@ BEGIN , latency_manufacture , display_order , active - , cost_total_local_VAT_excl - , cost_total_local_VAT_incl + , cost_unit_local_VAT_excl + , cost_unit_local_VAT_incl + , price_unit_local_VAT_excl + , price_unit_local_VAT_incl , created_by + , created_on , id_change_set ) SELECT t_MPOPL.id_order , t_MPOPL.id_permutation - , t_MPOPL.id_currency_cost , t_MPOPL.id_unit_quantity , t_MPOPL.quantity_used , t_MPOPL.quantity_produced @@ -572,9 +871,12 @@ BEGIN , t_MPOPL.latency_manufacture , t_MPOPL.display_order , t_MPOPL.active - , t_MPOPL.cost_total_local_VAT_excl - , t_MPOPL.cost_total_local_VAT_incl + , t_MPOPL.cost_unit_local_VAT_excl + , t_MPOPL.cost_unit_local_VAT_incl + , t_MPOPL.price_unit_local_VAT_excl + , t_MPOPL.price_unit_local_VAT_incl , a_id_user + , v_time_start , v_id_change_set FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL WHERE t_MPOPL.is_new = 1 @@ -586,10 +888,12 @@ BEGIN AND t_MPO.is_new = 0 INNER JOIN tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL ON t_MPO.id_order = t_MPOPL.id_order SET - MPO.id_currency_cost = id_currency_cost - , MPO.cost_total_local_VAT_excl = SUM(t_MPOPL.cost_total_local_VAT_excl) - , MPO.cost_total_local_VAT_incl = SUM(t_MPOPL.cost_total_local_VAT_incl) - , MPO.active = a_active + MPO.id_currency = t_MPO.id_currency + , MPO.cost_total_local_VAT_excl = t_MPO.cost_total_local_VAT_excl + , MPO.cost_total_local_VAT_incl = t_MPO.cost_total_local_VAT_incl + , MPO.price_total_local_VAT_excl = t_MPO.price_total_local_VAT_excl + , MPO.price_total_local_VAT_incl = t_MPO.price_total_local_VAT_incl + , MPO.active = t_MPO.active , MPO.id_change_set = v_id_change_set ; @@ -600,7 +904,6 @@ BEGIN SET MPOPL.id_order = t_MPOPL.id_order , MPOPL.id_permutation = t_MPOPL.id_permutation - , MPOPL.id_currency_cost = t_MPOPL.id_currency_cost , MPOPL.id_unit_quantity = t_MPOPL.id_unit_quantity , MPOPL.quantity_used = t_MPOPL.quantity_used , MPOPL.quantity_produced = t_MPOPL.quantity_produced @@ -608,18 +911,20 @@ BEGIN , MPOPL.latency_manufacture = t_MPOPL.latency_manufacture , MPOPL.display_order = t_MPOPL.display_order , MPOPL.active = t_MPOPL.active - , MPOPL.cost_total_local_VAT_excl = t_MPOPL.cost_total_local_VAT_excl - , MPOPL.cost_total_local_VAT_incl = t_MPOPL.cost_total_local_VAT_incl + , MPOPL.cost_unit_local_VAT_excl = t_MPOPL.cost_unit_local_VAT_excl + , MPOPL.cost_unit_local_VAT_incl = t_MPOPL.cost_unit_local_VAT_incl + , MPOPL.price_unit_local_VAT_excl = t_MPOPL.price_unit_local_VAT_excl + , MPOPL.price_unit_local_VAT_incl = t_MPOPL.price_unit_local_VAT_incl , MPOPL.id_change_set = v_id_change_set ; - DELETE SPO_T - FROM Shop_Manufacturing_Purchase_Order_Temp SPO_T - WHERE SPO_T.GUID = a_guid + DELETE MPO_T + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Temp MPO_T + WHERE MPO_T.GUID = a_guid ; - DELETE SPOPL_T - FROM Shop_Manufacturing_Purchase_Order_Product_Link_Temp SPOPL_T - WHERE SPOPL_T.GUID = a_guid + DELETE MPOPL_T + FROM partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link_Temp MPOPL_T + WHERE MPOPL_T.GUID = a_guid ; COMMIT; @@ -661,7 +966,7 @@ INSERT INTO Shop_Manufacturing_Purchase_Order_Product_Link_Temp ( id_order, id_permutation, cost_total_local, - id_currency_cost, + id_currency, quantity_used, id_unit_quantity, quantity_produced, @@ -676,7 +981,7 @@ VALUES -1, # id_order, 1, # id_permutation, 100, # cost_total_local, - 1, # id_currency_cost, + 1, # id_currency, 1, # quantity_used, 1, # id_unit_quantity, 1, # quantity_produced, diff --git a/static/MySQL/7416_p_shop_get_many_manufacturing_purchase_order.sql b/static/MySQL/7416_p_shop_get_many_manufacturing_purchase_order.sql index b4e62cdd..a478a0e6 100644 --- a/static/MySQL/7416_p_shop_get_many_manufacturing_purchase_order.sql +++ b/static/MySQL/7416_p_shop_get_many_manufacturing_purchase_order.sql @@ -332,7 +332,7 @@ BEGIN ) AS name FROM tmp_Manufacturing_Purchase_Order t_MPO INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order MPO ON MPO.id_order = t_MPO.id_order - LEFT JOIN partsltd_prod.Shop_Currency C ON MPO.id_currency_cost = C.id_currency + LEFT JOIN partsltd_prod.Shop_Currency C ON MPO.id_currency = C.id_currency ; # Manufacturing Purchase Order Product Link @@ -380,7 +380,6 @@ END // DELIMITER ;; -/* CALL p_shop_get_many_manufacturing_purchase_order ( 1 # a_id_user @@ -393,4 +392,5 @@ CALL p_shop_get_many_manufacturing_purchase_order ( , 0 # a_debug ); +/* */ diff --git a/static/MySQL/9000_populate.sql b/static/MySQL/9000_populate.sql index b44df681..75f21294 100644 --- a/static/MySQL/9000_populate.sql +++ b/static/MySQL/9000_populate.sql @@ -251,10 +251,11 @@ VALUES # Product Permutations INSERT INTO Shop_Product_Permutation ( - display_order, + -- display_order, id_product, description, - cost_local, + cost_local_VAT_excl, + cost_local_VAT_incl, id_currency_cost, profit_local_min, # id_currency_profit_min, @@ -275,10 +276,11 @@ INSERT INTO Shop_Product_Permutation ( ) VALUES ( - 1, + -- 1, 1, 'Good Red', 5, + 6, 1, 3, # 1, @@ -298,10 +300,11 @@ VALUES , NULL ), ( - 2, + -- 2, 1, 'Good Blue', 6, + 7.2, 1, 4, # 1, @@ -321,10 +324,11 @@ VALUES , NULL ), ( - 3, + -- 3, 2, 'Test product describes good', 10, + 12, 1, 5, # 1, @@ -344,10 +348,11 @@ VALUES , NULL ), ( - 4, + -- 4, 3, 'Phone describes good', 10, + 12, 1, 5, # 1, @@ -367,10 +372,11 @@ VALUES , NULL ), ( - 5, + -- 5, 4, 'Laptop describes good', 10, + 12, 1, 5, # 1, @@ -390,10 +396,11 @@ VALUES , NULL ), ( - 6, + -- 6, 5, 'Smart watch describes good', 10, + 12, 1, 5, # 1, @@ -742,6 +749,18 @@ VALUES , 'https://www.maltkilnfarmshop.co.uk/' , 1 ) + , ( + -3 + , 'Asda' + , NULL + , NULL + -- , 1 + , '' + , NULL + , '' + , '' + , 1 + ) ; # Supplier Addresses diff --git a/static/MySQL/temp.txt b/static/MySQL/temp.txt index 669da2aa..c8177d9d 100644 --- a/static/MySQL/temp.txt +++ b/static/MySQL/temp.txt @@ -187,6 +187,7 @@ 7204_p_shop_get_many_product.sql 7205_p_shop_get_many_stripe_product_new.sql 7206_p_shop_save_product_permutation.sql +7206_p_shop_save_product_permutation_test.sql 7210_p_shop_get_many_product_variation.sql 7219_p_shop_get_many_stock_item.sql 7220_p_shop_save_stock_item.sql @@ -203,6 +204,7 @@ 7403_p_shop_save_supplier_purchase_order_test.sql 7404_p_shop_get_many_supplier_purchase_order.sql 7415_p_shop_save_manufacturing_purchase_order.sql +7415_p_shop_save_Manufacturing_purchase_order_test.sql 7416_p_shop_get_many_manufacturing_purchase_order.sql 7421_p_shop_save_customer.sql 7422_p_shop_get_many_customer.sql diff --git a/static/css/components/table.css b/static/css/components/table.css index eae60f5d..86c30eef 100644 --- a/static/css/components/table.css +++ b/static/css/components/table.css @@ -39,7 +39,6 @@ tr { min-height: 1px; border-bottom: 1px solid var(--c_purple_dark); border-top: 1px solid var(--c_purple_dark); - padding-bottom: 1vh; background-color: transparent; } diff --git a/static/css/layouts/header.css b/static/css/layouts/header.css index fe4e207a..42687196 100644 --- a/static/css/layouts/header.css +++ b/static/css/layouts/header.css @@ -12,4 +12,8 @@ form.filter button.save, form.filter button.button-cancel { form.filter button.save, form.filter button.button-cancel { margin-top: 0; margin-bottom: 0; +} + +#formFilters .container-input.filter.active { + width: 8vh; } \ No newline at end of file diff --git a/static/css/layouts/table-main.css b/static/css/layouts/table-main.css index dfc49c54..498786a7 100644 --- a/static/css/layouts/table-main.css +++ b/static/css/layouts/table-main.css @@ -1,7 +1,8 @@ + #tableMain { overflow-x: auto; padding: 1vh 2vh; - max-width: min(calc(1vh * 80), calc(1vw * 90)); + max-width: 95vw; /* min(calc(1vh * 80), calc(1vw * 90)); */ width: fit-content; margin: 1vh 2vh; align-items: normal; @@ -12,4 +13,12 @@ width: 20vh; min-width: 20vh; padding: 0 0.5vh; +} +#tableMain thead tr th.active, #tableMain tbody tr td.active { + width: 6vh; + min-width: 6vh; +} +#tableMain tbody tr td.display_order, #tableMain thead tr th.display_order { + width: 5vh; + min-width: 5vh; } \ No newline at end of file diff --git a/static/css/pages/store/manufacturing_purchase_order.css b/static/css/pages/store/manufacturing_purchase_order.css index 0582381c..cd3dfd63 100644 --- a/static/css/pages/store/manufacturing_purchase_order.css +++ b/static/css/pages/store/manufacturing_purchase_order.css @@ -1,6 +1,6 @@ #formFilters { - width: 50vh; + width: 100vh; } #formFilters .container-input.filter.active { @@ -11,6 +11,71 @@ width: 8vh; } + +#tableMain tbody tr td.cost_total_local_vat_excl, #tableMain thead tr th.cost_total_local_vat_excl, +#tableMain tbody tr td.cost_total_local_vat_incl, #tableMain thead tr th.cost_total_local_vat_incl { + width: 10vh; + min-width: 10vh; +} + +#tableMain thead tr th.order_items.collapsed, +#tableMain tbody tr td.order_items.collapsed { + width: 15vh; + min-width: 15vh; +} +#tableMain:has(tbody tr td.order_items table thead tr th.product_variations.collapsed) thead tr th.order_items, +#tableMain:has(tbody tr td.order_items table thead tr th.product_variations.collapsed) tbody tr td.order_items { + width: 100vh; /* 95vh */ + min-width: 100vh; +} +#tableMain thead tr th.order_items, +#tableMain tbody tr td.order_items { + width: 110vh; + min-width: 110vh; +} +#tableMain tbody tr td.order_items table thead tr th, #tableMain tbody tr td.order_items table tbody tr td { + width: 12vh; + min-width: 12vh; +} +#tableMain tbody tr td.order_items table thead tr th.display_order, #tableMain tbody tr td.order_items table tbody tr td.display_order { + width: 5vh; + min-width: 5vh; +} +#tableMain tbody tr td.order_items table thead tr th.id_unit_measurement_quantity, #tableMain tbody tr td.order_items table tbody tr td.id_unit_measurement_quantity, +#tableMain tbody tr td.order_items table thead tr th.unit_measurement_latency_manufacture, #tableMain tbody tr td.order_items table tbody tr td.unit_measurement_latency_manufacture { + width: 6vh; + min-width: 6vh; +} + +#tableMain tbody tr td.order_items table thead tr th.product_variations.collapsed, #tableMain tbody tr td.order_items table tbody tr td.product_variations.collapsed { + width: 10vh; + min-width: 10vh; +} +#tableMain tbody tr td.order_items table thead tr th.product_variations, #tableMain tbody tr td.order_items table tbody tr td.product_variations { + width: 20vh; + min-width: 20vh; +} +#tableMain tbody tr td.order_items table tbody tr td.product_variations table thead tr th, #tableMain tbody tr td.order_items table tbody tr td.product_variations table tbody tr td { + width: 8vh; + min-width: 8vh; +} +#tableMain tbody tr td.order_items table tbody tr td.product_variations table thead tr th:last-of-type, #tableMain tbody tr td.order_items table tbody tr td.product_variations table tbody tr td:last-of-type { + width: 4vh; + min-width: 4vh; +} + +#tableMain tbody tr td.order_items table thead tr th.quantity_used, #tableMain tbody tr td.order_items table tbody tr td.quantity_used, +#tableMain tbody tr td.order_items table thead tr th.quantity_produced, #tableMain tbody tr td.order_items table tbody tr td.quantity_produced, +#tableMain tbody tr td.order_items table thead tr th.latency_manufacture, #tableMain tbody tr td.order_items table tbody tr td.latency_manufacture { + width: 8vh; + min-width: 8vh; +} +#tableMain tbody tr td.order_items table thead tr th.active, #tableMain tbody tr td.order_items table tbody tr td.active, +#tableMain tbody tr td.order_items table thead tr th.add, #tableMain tbody tr td.order_items table tbody tr td.delete { + width: 4vh; + min-width: 4vh; +} + #tableMain thead tr th.currency.collapsed, #tableMain tbody tr td.currency.collapsed { width: 9vh; min-width: 9vh; @@ -26,13 +91,4 @@ #tableMain tbody tr td.price_total_local_vat_incl, #tableMain thead tr th.price_total_local_vat_incl { width: 5vh; min-width: 5vh; -} -#tableMain tbody tr td.items, #tableMain thead tr th.items { - width: 40vh; - min-width: 40vh; -} - -#tableMain tbody tr td.active, #tableMain thead tr th.active { - width: 5vh; - min-width: 5vh; -} +} \ No newline at end of file diff --git a/static/css/pages/store/supplier_purchase_order.css b/static/css/pages/store/supplier_purchase_order.css index f24ebefc..97dbb219 100644 --- a/static/css/pages/store/supplier_purchase_order.css +++ b/static/css/pages/store/supplier_purchase_order.css @@ -41,22 +41,22 @@ } #tableMain:has(tbody tr td.order_items table thead tr th.product_variations.collapsed) thead tr th.order_items, #tableMain:has(tbody tr td.order_items table thead tr th.product_variations.collapsed) tbody tr td.order_items { - width: 91vh; - min-width: 91vh; + width: 126vh; + min-width: 126vh; } #tableMain thead tr th.order_items, #tableMain tbody tr td.order_items { - width: 101vh; - min-width: 101vh; + width: 136vh; + min-width: 136vh; } #tableMain tbody tr td.order_items table thead tr th, #tableMain tbody tr td.order_items table tbody tr td { width: 12vh; min-width: 12vh; } #tableMain tbody tr td.order_items table thead tr th.display_order, #tableMain tbody tr td.order_items table tbody tr td.display_order, -#tableMain tbody tr td.order_items table thead tr th.id_unit_measurement_quantity, #tableMain tbody tr td.order_items table tbody tr td.id_unit_measurement_quantity { - width: 6vh; - min-width: 6vh; +#tableMain tbody tr td.order_items table thead tr th.add, #tableMain tbody tr td.order_items table tbody tr td.delete { + width: 5vh; + min-width: 5vh; } #tableMain tbody tr td.order_items table thead tr th.product_variations.collapsed, #tableMain tbody tr td.order_items table tbody tr td.product_variations.collapsed { @@ -76,8 +76,16 @@ min-width: 4vh; } +#tableMain tbody tr td.order_items table thead tr th.id_unit_measurement_quantity, #tableMain tbody tr td.order_items table tbody tr td.id_unit_measurement_quantity { + width: 6vh; + min-width: 6vh; +} #tableMain tbody tr td.order_items table thead tr th.quantity_ordered, #tableMain tbody tr td.order_items table tbody tr td.quantity_ordered, #tableMain tbody tr td.order_items table thead tr th.quantity_received, #tableMain tbody tr td.order_items table tbody tr td.quantity_received, +#tableMain tbody tr td.order_items table thead tr th.cost_total_local_vat_excl, #tableMain tbody tr td.order_items table tbody tr td.cost_total_local_vat_excl, +#tableMain tbody tr td.order_items table thead tr th.cost_total_local_vat_incl, #tableMain tbody tr td.order_items table tbody tr td.cost_total_local_vat_incl, +#tableMain tbody tr td.order_items table thead tr th.cost_unit_local_vat_excl, #tableMain tbody tr td.order_items table tbody tr td.cost_unit_local_vat_excl, +#tableMain tbody tr td.order_items table thead tr th.cost_unit_local_vat_incl, #tableMain tbody tr td.order_items table tbody tr td.cost_unit_local_vat_incl, #tableMain tbody tr td.order_items table thead tr th.latency_delivery_days, #tableMain tbody tr td.order_items table tbody tr td.latency_delivery_days { width: 8vh; min-width: 8vh; diff --git a/static/css/sections/store.css b/static/css/sections/store.css index 2b9096a2..a8c1974b 100644 --- a/static/css/sections/store.css +++ b/static/css/sections/store.css @@ -50,4 +50,7 @@ /* Right column */ .rightcolumn { min-width: fit-content; -} \ No newline at end of file +} + +/* Main Table */ + diff --git a/static/dist/css/main.bundle.css b/static/dist/css/main.bundle.css index 480fe7ca..ac912d15 100644 --- a/static/dist/css/main.bundle.css +++ b/static/dist/css/main.bundle.css @@ -645,7 +645,6 @@ tr { min-height: 1px; border-bottom: 1px solid var(--c_purple_dark); border-top: 1px solid var(--c_purple_dark); - padding-bottom: 1vh; background-color: transparent; } @@ -691,10 +690,15 @@ form.filter button.save, form.filter button.button-cancel { margin-bottom: 0; } +#formFilters .container-input.filter.active { + width: 8vh; +} + + #tableMain { overflow-x: auto; padding: 1vh 2vh; - max-width: min(calc(1vh * 80), calc(1vw * 90)); + max-width: 95vw; /* min(calc(1vh * 80), calc(1vw * 90)); */ width: fit-content; margin: 1vh 2vh; align-items: normal; @@ -706,6 +710,14 @@ form.filter button.save, form.filter button.button-cancel { min-width: 20vh; padding: 0 0.5vh; } +#tableMain thead tr th.active, #tableMain tbody tr td.active { + width: 6vh; + min-width: 6vh; +} +#tableMain tbody tr td.display_order, #tableMain thead tr th.display_order { + width: 5vh; + min-width: 5vh; +} diff --git a/static/dist/css/store_home.bundle.css b/static/dist/css/store_home.bundle.css index 1ca221b1..558c2c35 100644 --- a/static/dist/css/store_home.bundle.css +++ b/static/dist/css/store_home.bundle.css @@ -52,3 +52,7 @@ min-width: fit-content; } +/* Main Table */ + + + diff --git a/static/dist/css/store_product_categories.bundle.css b/static/dist/css/store_product_categories.bundle.css index e4d4fbd0..c8b01ed1 100644 --- a/static/dist/css/store_product_categories.bundle.css +++ b/static/dist/css/store_product_categories.bundle.css @@ -52,6 +52,10 @@ min-width: fit-content; } +/* Main Table */ + + + #formFilters { width: 50vh; } diff --git a/static/dist/css/store_product_permutations.bundle.css b/static/dist/css/store_product_permutations.bundle.css index de083a06..bf3399aa 100644 --- a/static/dist/css/store_product_permutations.bundle.css +++ b/static/dist/css/store_product_permutations.bundle.css @@ -52,6 +52,10 @@ min-width: fit-content; } +/* Main Table */ + + + #formFilters { width: 50vh; } diff --git a/static/dist/css/store_stock_items.bundle.css b/static/dist/css/store_stock_items.bundle.css index ee75a15b..b54bc339 100644 --- a/static/dist/css/store_stock_items.bundle.css +++ b/static/dist/css/store_stock_items.bundle.css @@ -52,6 +52,10 @@ min-width: fit-content; } +/* Main Table */ + + + th, td { min-width: fit-content; } diff --git a/static/dist/js/main.bundle.js b/static/dist/js/main.bundle.js index ab07e71e..7ce8541d 100644 --- a/static/dist/js/main.bundle.js +++ b/static/dist/js/main.bundle.js @@ -1,2 +1,2 @@ /*! 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),g}},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),g}},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)),console.log("API request:",n,i,o),t.prev=7,t.next=10,fetch(i,l);case 10:if((u=t.sent).ok){t.next=13;break}throw new Error("HTTP error! status: ".concat(u.status));case 13:return t.next=15,u.json();case 15:return t.abrupt("return",t.sent);case 18:throw t.prev=18,t.t0=t.catch(7),console.error("API request failed:",t.t0),t.t0;case 22:case"end":return t.stop()}}),t,null,[[7,18]])}))),function(e){return A.apply(this,arguments)})},{key:"getUrlFromHash",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;null==t&&(t=hashPageHome),console.log("getUrlFromHash:"),console.log("base url: "+_pathHost+"\nhash: "+t+"\nparams: "+r);var n=e.parameteriseUrl(_pathHost+t,r);return console.log("url: "+n),n}},{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:(I=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 I.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:(O=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 O.apply(this,arguments)})},{key:"getProducts",value:(E=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 E.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:(v=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 v.apply(this,arguments)})},{key:"saveProductPermutations",value:(g=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 g.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,g,v,b,P,S,E,O,w,T,I,A}();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 O(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"),console.log("converting billing form to json\nform ID: "+r.id),e[flagForm]=convertForm2JSON(r);var n=[keyNameFull,keyPhoneNumber,keyPostcode,keyAddress1,keyAddress2,keyCity,keyCounty];for(var o in 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 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=g.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 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 Ot(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){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?(console.log("Records saved!"),console.log("Data received:",t),e.getAndLoadFilteredTableContent()):(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?(console.log("Records saved!"),console.log("Data received:",t),e.callbackLoadTableContent(t)):(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(),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);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(console.log({isDirtyElement:o,wasDirtyElement:n,wasDirtyParentRows:r}),o!=n){var a=u.getCellFromElement(t);u.setElementAttributeValueCurrent(a,u.getElementValueCurrent(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();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.handleChangeTableCellDdl(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)}))}))}))}},{key:"hookupTableCellDdls",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(e,r){t.handleChangeTableCellDdl(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")){console.log("click table cell ddl preview");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),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:"handleChangeTableCellDdl",value:function(e,t){var r=u.getRowFromElement(t),n=u.getCellFromElement(t);console.log("td: ",n);var o=u.hasDirtyChildrenNotDeletedContainer(r),a=t.classList.contains(flagDirty),i=u.updateAndCheckIsElementDirty(t);if(console.log("isDirtyElement: ",i),console.log("wasDirtyElement: ",a),i!=a){u.handleDirtyElement(n,i);var l=t.options[t.selectedIndex];u.setElementAttributeValueCurrent(n,l.value);var c=u.hasDirtyChildrenNotDeletedContainer(r);if(console.log("isNowDirtyRow: ",c),console.log("wasDirtyRow: ",o),c!=o){u.handleDirtyElement(r,c);var s=this.getTableRecords(!0),d=s.length>0;console.log("dirty records:",s),console.log("existsDirtyRecord:",d),this.toggleShowButtonsSaveCancel(d)}}}},{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.handleChangeTableCellDdl(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.handleChangeTableCellDdl(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)){console.log("click product permutation variations preview"),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");console.log("variations:",a),n.isEmpty(a)||a.forEach((function(e,t){r.addProductPermutationVariationRow(f,e)})),o.appendChild(f);var p=t.closest(idTableMain+" tbody tr td."+flagProductVariations);p.innerHTML="",p.appendChild(o),console.log("tblVariations: ",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?(console.log("parts: ",t),o=productVariationTypes[t[0].trim()],r=productVariations[t[1].trim()],i.push(kt(kt({},flagProductVariationType,o),flagProductVariation,r))):console.log("error: invalid variation: ",e)})),i}},{key:"addProductPermutationVariationRow",value:function(e,t){var r,n,o,a,i,l,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])}))),console.log("permutationVariation: ",t);var h=t[flagProductVariation],g=t[flagProductVariationType],v=document.createElement("td");v.classList.add(flagProductVariationType),u.setElementAttributesValuesCurrentAndPrevious(v,g[attrIdProductVariationType]);var m=document.createElement("select");m.classList.add(flagProductVariationType),u.setElementAttributesValuesCurrentAndPrevious(m,g[attrIdProductVariationType]),o=u.createOption(null),console.log("optionProductVariationType: ",o),m.appendChild(o),d.forEach((function(e){r=productVariationTypes[e],n=st.getOptionJsonFromObjectJson(r,g[attrIdProductVariationType]),o=u.createOption(n),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),console.log("optionProductVariation: ",l),k.appendChild(l),s.forEach((function(e){a=productVariations[e],i=st.getOptionJsonFromObjectJson(a,h[attrIdProductVariation]),l=u.createOption(i),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),v.appendChild(m),S.appendChild(v),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.");Ot(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 Ordered";var g=document.createElement("th");g.classList.add(flagQuantityProduced),g.textContent="Quantity Received";var v=document.createElement("th");v.classList.add(flagCostTotalLocalVatExcl),v.textContent="Cost Total Local VAT Excl";var m=document.createElement("th");m.classList.add(flagCostTotalLocalVatIncl),m.textContent="Cost Total Local VAT Incl";var b=document.createElement("th");b.classList.add(flagCostUnitLocalVatExcl),b.textContent="Cost Unit Local VAT Excl";var k=document.createElement("th");k.classList.add(flagCostUnitLocalVatIncl),k.textContent="Cost Unit Local VAT Incl";var C=document.createElement("th");C.classList.add(flagLatencyManufacture),C.textContent="Latency Delivery (Days)";var P=document.createElement("th");P.classList.add(flagActive),P.textContent="Active";var S=document.createElement("th");S.classList.add(flagAdd);var E=document.createElement("button");E.classList.add(flagAdd),E.textContent="+",S.appendChild(E),c.appendChild(s),c.appendChild(d),c.appendChild(f),c.appendChild(p),c.appendChild(y),c.appendChild(h),c.appendChild(g),c.appendChild(v),c.appendChild(m),c.appendChild(b),c.appendChild(k),c.appendChild(C),c.appendChild(P),c.appendChild(S),l.appendChild(c),i.appendChild(l);var O=document.createElement("tbody");a.forEach((function(e,t){r.addRowManufacturingPurchaseOrderItem(O,e)})),i.appendChild(O);var w=u.getCellFromElement(t),T=w.cloneNode(!1);T.appendChild(i),n.replaceChild(T,w),console.log("tblOrderItems: ",i),this.hookupOrderItemsFields()}},{key:"addRowManufacturingPurchaseOrderItem",value:function(e,t){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),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 g=document.createElement("input");g.classList.add(flagQuantityProduced),g.type="number",u.setElementAttributesValuesCurrentAndPrevious(g,t[flagQuantityProduced]),h.appendChild(g);var v=document.createElement("td");v.classList.add(flagCostTotalLocalVatExcl);var m=document.createElement("input");m.classList.add(flagCostTotalLocalVatExcl),m.type="number",m.step=.01,u.setElementAttributesValuesCurrentAndPrevious(m,t[flagCostTotalLocalVatExcl]),v.appendChild(m);var b=document.createElement("td");b.classList.add(flagCostTotalLocalVatIncl);var k=document.createElement("input");k.classList.add(flagCostTotalLocalVatIncl),k.type="number",k.step=.01,u.setElementAttributesValuesCurrentAndPrevious(k,t[flagCostTotalLocalVatIncl]),b.appendChild(k);var C=document.createElement("td");C.classList.add(flagCostUnitLocalVatExcl);var P=document.createElement("div");P.classList.add(flagCostUnitLocalVatExcl),u.setElementValuesCurrentAndPrevious(P,t[flagCostUnitLocalVatExcl]),C.appendChild(P);var S=document.createElement("td");S.classList.add(flagCostUnitLocalVatIncl);var E=document.createElement("div");E.classList.add(flagCostUnitLocalVatIncl),u.setElementValuesCurrentAndPrevious(E,t[flagCostUnitLocalVatIncl]),S.appendChild(E);var O=document.createElement("td");O.classList.add(flagLatencyManufacture);var w=document.createElement("input");w.classList.add(flagLatencyManufacture),w.type="number",w.step=1,u.setElementAttributesValuesCurrentAndPrevious(w,t[flagLatencyManufacture]),O.appendChild(w);var T=document.createElement("td");T.classList.add(flagActive);var I=document.createElement("input");I.classList.add(flagActive),I.type="checkbox",u.setElementValuesCurrentAndPrevious(I,t[flagActive]),T.appendChild(I);var A=document.createElement("td");A.classList.add(flagDelete);var L=document.createElement("button");L.classList.add(flagDelete),L.textContent="x",A.appendChild(L);var V=document.createElement("tr");V.classList.add(flagOrderItems),V.setAttribute(attrIdManufacturingPurchaseOrder,t[attrIdManufacturingPurchaseOrder]),V.setAttribute(attrIdManufacturingPurchaseOrderProductLink,t[attrIdManufacturingPurchaseOrderProductLink]),V.appendChild(r),V.appendChild(o),V.appendChild(i),V.appendChild(c),V.appendChild(d),V.appendChild(p),V.appendChild(h),V.appendChild(v),V.appendChild(b),V.appendChild(C),V.appendChild(S),V.appendChild(O),V.appendChild(T),V.appendChild(A),e.appendChild(V)}},{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:"handleChangeElementProductVariationsSubtableCell",value:function(e,t){this.handleChangeNestedElementCellTable(e,t)}},{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:"hookupFieldsOrderItemPriceTotalLocalVatExcl",value:function(){var e=this;this.hookupChangeHandlerTableCells(idTableMain+" td."+flagOrderItems+" td."+flagPriceTotalLocalVatExcl+" input",(function(t,r){e.handleChangeNestedElementCellTable(t,r),e.updateFieldsPriceUnitLocalVatExcl(r)}))}},{key:"hookupFieldsOrderItemPriceTotalLocalVatIncl",value:function(){var e=this;this.hookupChangeHandlerTableCells(idTableMain+" td."+flagOrderItems+" td."+flagPriceTotalLocalVatIncl+" input",(function(t,r){e.handleChangeNestedElementCellTable(t,r),e.updateFieldsPriceUnitLocalVatIncl(r)}))}},{key:"updateFieldsPriceUnitLocalVatExcl",value:function(e){var t=e.closest("tr."+flagOrderItems),r=t.querySelector("td."+flagPriceTotalLocalVatExcl+" input"),n=u.getElementValueCurrent(r),o=t.querySelector("td."+flagQuantityUsed+" input"),a=u.getElementValueCurrent(o),i=t.querySelector("td."+flagPriceUnitLocalVatExcl+" div"),l=0==a?0:n/a;u.setElementValuesCurrentAndPrevious(i,l);var c=t.closest(idTableMain+" > tbody > tr"),s=c.querySelector("td."+flagPriceTotalLocalVatExcl+" div"),d=c.querySelectorAll("td."+flagOrderItems+" td."+flagPriceTotalLocalVatExcl+" input"),f=Array.from(d).reduce((function(e,t){return e+Number(u.getElementValueCurrent(t))}),0);u.setElementValueCurrent(s,f)}},{key:"updateFieldsPriceUnitLocalVatIncl",value:function(e){var t=e.closest("tr."+flagOrderItems),r=t.querySelector("td."+flagPriceTotalLocalVatIncl+" input"),n=u.getElementValueCurrent(r),o=t.querySelector("td."+flagQuantityUsed+" input"),a=u.getElementValueCurrent(o),i=t.querySelector("td."+flagPriceUnitLocalVatIncl+" div"),l=0==a?0:n/a;u.setElementValuesCurrentAndPrevious(i,l);var c=t.closest(idTableMain+" > tbody > tr"),s=c.querySelector("td."+flagPriceTotalLocalVatIncl+" div"),d=c.querySelectorAll("td."+flagOrderItems+" td."+flagPriceTotalLocalVatIncl+" input"),f=Array.from(d).reduce((function(e,t){return e+Number(u.getElementValueCurrent(t))}),0);u.setElementValueCurrent(s,f)}},{key:"hookupFieldsOrderItemPriceUnitLocalVatExcl",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagOrderItems+" td."+flagPriceUnitLocalVatExcl+" input")}},{key:"hookupFieldsOrderItemPriceUnitLocalVatIncl",value:function(){this.hookupChangeHandlerTableCells(idTableMain+" td."+flagOrderItems+" td."+flagPriceUnitLocalVatIncl+" 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+" input."+flagActive+":checked").length>0,l=o.querySelectorAll("td."+flagOrderItems+" td."+flagManufacturingPurchaseOrder).length,u=(rr(rr(rr(rr(rr(rr(rr(rr(rr(rr(n={},attrIdManufacturingPurchaseOrder,a),attrIdManufacturingPurchaseOrderProductLink,-1-l),attrIdProductCategory,0),attrIdProduct,0),flagProductVariations,""),attrIdUnitMeasurementQuantity,0),flagQuantityUsed,""),flagQuantityProduced,""),attrIdUnitMeasurementLatencyManufacture,0),flagLatencyManufacture,""),rr(rr(n,flagDisplayOrder,countManufacturingOrderItems+1),flagActive,!i)),c=o.querySelector("td."+flagOrderItems+" table tbody");e.addRowManufacturingOrderItem(c,u),e.hookupOrderItemsFields()}))}},{key:"leave",value:function(){$t(t,"leave",this,3)([])}}])}(At);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 g=document.createElement("th");g.classList.add(flagActive),g.textContent="Active";var v=document.createElement("th");v.classList.add(flagAdd);var m=document.createElement("button");m.classList.add(flagAdd),m.textContent="+",v.appendChild(m),c.appendChild(s),c.appendChild(d),c.appendChild(f),c.appendChild(p),c.appendChild(y),c.appendChild(h),c.appendChild(g),c.appendChild(v),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),console.log("tblAddresses: ",i),this.hookupAddressFields()}},{key:"addRowSupplierAddress",value:function(e,t,r){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 g,v,m=document.createElement("select");m.classList.add(flagRegion),v=u.createOption(null),m.appendChild(v),r.forEach((function(e){g=st.getOptionJsonFromObjectJson(e),v=u.createOption(g),m.appendChild(v)})),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.handleChangeElementAddressSubtableCells(idTableMain+" td."+flagAddress+" textarea."+flagPostcode)}},{key:"handleChangeElementAddressSubtableCells",value:function(e,t){this.handleChangeNestedElementCellTable(e,t)}},{key:"hookupAddressLine1Inputs",value:function(){this.handleChangeElementAddressSubtableCells(idTableMain+" td."+flagAddress+" textarea."+flagAddressLine1)}},{key:"hookupAddressLine2Inputs",value:function(){this.handleChangeElementAddressSubtableCells(idTableMain+" td."+flagAddress+" textarea."+flagAddressLine2)}},{key:"hookupAddressCityInputs",value:function(){this.handleChangeElementAddressSubtableCells(idTableMain+" td."+flagAddress+" textarea."+flagCity)}},{key:"hookupAddressCountyInputs",value:function(){this.handleChangeElementAddressSubtableCells(idTableMain+" td."+flagAddress+" textarea."+flagCounty)}},{key:"hookupAddressRegionDdls",value:function(){this.handleChangeElementAddressSubtableCells(idTableMain+" td."+flagAddress+" select."+flagRegion)}},{key:"hookupAddressActiveCheckboxes",value:function(){this.handleChangeElementAddressSubtableCells(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)([])}}])}(At);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);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+" input."+flagActive+":checked").length>0,l=o.querySelectorAll("td."+flagOrderItems+" td."+flagSupplierPurchaseOrder).length,u=(bn(bn(bn(bn(bn(bn(bn(bn(bn(bn(n={},attrIdSupplierPurchaseOrder,a),attrIdSupplierPurchaseOrderProductLink,-1-l),attrIdProductCategory,0),attrIdProduct,0),flagProductVariations,""),attrIdUnitMeasurementQuantity,0),flagQuantityOrdered,""),flagQuantityReceived,""),flagCostTotalLocalVatExcl,""),flagCostTotalLocalVatIncl,""),bn(bn(bn(bn(bn(n,flagCostUnitLocalVatExcl,""),flagCostUnitLocalVatIncl,""),flagLatencyDeliveryDays,""),flagDisplayOrder,l+1),flagActive,!i)),c=o.querySelector("td."+flagOrderItems+" table tbody");e.addRowSupplierPurchaseOrderItem(c,u),e.hookupOrderItemsFields()}))}},{key:"leave",value:function(){hn(t,"leave",this,3)([])}}])}(At);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 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){console.log(e.data),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{"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 { button.addEventListener("click", (event) => { event.stopPropagation(); - console.log('saving page: ', this.title); + if (_verbose) { console.log('saving page: ', this.title); } OverlayConfirm.show(); }); // button.classList.add(flagCollapsed); @@ -204,7 +204,7 @@ export default class BasePage { } leave() { - console.log('Leaving ' + this.title + ' page'); + if (_verbose) { console.log('Leaving ' + this.title + ' page'); } if (this.constructor === BasePage) { throw new Error("Must implement leave() method."); } @@ -222,11 +222,11 @@ export default class BasePage { if (show) { buttonCancel.classList.remove(flagCollapsed); buttonSave.classList.remove(flagCollapsed); - console.log('showing buttons'); + if (_verbose) { console.log('showing buttons'); } } else { buttonCancel.classList.add(flagCollapsed); buttonSave.classList.add(flagCollapsed); - console.log('hiding buttons'); + if (_verbose) { console.log('hiding buttons'); } } } diff --git a/static/js/pages/base_table.js b/static/js/pages/base_table.js index a3dbaf3b..9e79bad5 100644 --- a/static/js/pages/base_table.js +++ b/static/js/pages/base_table.js @@ -134,7 +134,7 @@ export default class TableBasePage extends BasePage { let filtersJson = DOM.convertForm2JSON(formFilters); this.callFilterTableContent(filtersJson) .then(data => { - console.log('Table data received:', data); + if (_verbose) { console.log('Table data received:', data); } this.callbackLoadTableContent(data); }) .catch(error => console.error('Error:', error)); @@ -156,12 +156,14 @@ export default class TableBasePage extends BasePage { this.callSaveTableContent(records, formElement, comment) .then(data => { if (data[flagStatus] == flagSuccess) { - console.log('Records saved!'); - console.log('Data received:', data); + if (_verbose) { + console.log('Records saved!'); + console.log('Data received:', data); + } this.getAndLoadFilteredTableContent(); } else { - console.log("error: ", data[flagMessage]); + if (_verbose) { console.log("error: ", data[flagMessage]); } OverlayError.show(data[flagMessage]); } }) @@ -192,12 +194,14 @@ export default class TableBasePage extends BasePage { this.callSaveTableContent(records, formElement, comment) .then(data => { if (data[flagStatus] == flagSuccess) { - console.log('Records saved!'); - console.log('Data received:', data); + if (_verbose) { + console.log('Records saved!'); + console.log('Data received:', data); + } this.callbackLoadTableContent(data); } else { - console.log("error: ", data[flagMessage]); + if (_verbose) { console.log("error: ", data[flagMessage]); } OverlayError.show(data[flagMessage]); } }) @@ -207,7 +211,7 @@ export default class TableBasePage extends BasePage { Events.initialiseEventHandler(idFormFilters + ' button.' + flagCancel, flagInitialised, function(button) { button.addEventListener("click", function(event) { event.stopPropagation(); - getAndLoadFilteredTableContent(); + this.getAndLoadFilteredTableContent(); }); button.classList.add(flagCollapsed); }); @@ -255,7 +259,7 @@ export default class TableBasePage extends BasePage { cacheRowBlank() { let selectorRowNew = idTableMain + ' tbody tr.' + flagRowNew; let rowBlankTemp = document.querySelector(selectorRowNew); - console.log("row blank temp: ", rowBlankTemp); + if (_verbose) { console.log("row blank temp: ", rowBlankTemp); } _rowBlank = rowBlankTemp.cloneNode(true); document.querySelectorAll(selectorRowNew).forEach(function(row) { row.remove(); @@ -368,10 +372,10 @@ export default class TableBasePage extends BasePage { let wasDirtyParentRows = this.getAllIsDirtyRowsInParentTree(element); let wasDirtyElement = element.classList.contains(flagDirty); let isDirtyElement = DOM.updateAndCheckIsElementDirty(element); - console.log({isDirtyElement, wasDirtyElement, wasDirtyParentRows}); + if (_verbose) { console.log({isDirtyElement, wasDirtyElement, wasDirtyParentRows}); } if (isDirtyElement != wasDirtyElement) { let td = DOM.getCellFromElement(element); - DOM.setElementAttributeValueCurrent(td, DOM.getElementValueCurrent(element)); + DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element)); this.toggleShowButtonsSaveCancel(isDirtyElement); this.cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows); } @@ -397,7 +401,7 @@ export default class TableBasePage extends BasePage { let tr = DOM.getRowFromElement(td); let isDirtyRow = isDirtyTd || DOM.hasDirtyChildrenNotDeletedContainer(tr); let wasDirtyRow = wasDirtyParentRows.pop(); - console.log({isDirtyRow, wasDirtyRow}); + if (_verbose) { console.log({isDirtyRow, wasDirtyRow}); } if (isDirtyRow != wasDirtyRow) { DOM.handleDirtyElement(tr, isDirtyRow); this.toggleShowButtonsSaveCancel(isDirtyRow); @@ -517,10 +521,9 @@ export default class TableBasePage extends BasePage { cellSelector , optionList , ddlHookup = (cellSelector) => { this.hookupTableCellDdls(cellSelector); } - , changeHandler = (event, element) => { this.handleChangeTableCellDdl(event, element); } + , changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); } ) { this.hookupEventHandler("click", cellSelector, (event, td) => { - // if (td.querySelector('select')) return; this.handleClickTableCellDdlPreview( event , td @@ -532,14 +535,14 @@ export default class TableBasePage extends BasePage { ); } ); }); + ddlHookup(cellSelector + ' select'); } - hookupTableCellDdls(ddlSelector, changeHandler = (event, element) => { this.handleChangeTableCellDdl(event, element); }) { + hookupTableCellDdls(ddlSelector, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) { this.hookupEventHandler("change", ddlSelector, (event, element) => { changeHandler(event, element); }); } handleClickTableCellDdlPreview(event, td, optionObjectList, cellSelector, ddlHookup = (cellSelector) => { this.hookupTableCellDdls(cellSelector); }) { if (td.querySelector('select')) return; // td.removeEventListener("click", ddlHookup); - console.log("click table cell ddl preview"); let tdNew = td.cloneNode(true); td.parentNode.replaceChild(tdNew, td); let idSelected = DOM.getElementAttributeValueCurrent(tdNew); @@ -547,7 +550,10 @@ export default class TableBasePage extends BasePage { let ddl = document.createElement('select'); DOM.setElementValuesCurrentAndPrevious(ddl, idSelected); let optionJson, option; - console.log({optionObjectList, cellSelector}); + if (_verbose) { + console.log("click table cell ddl preview"); + console.log({optionObjectList, cellSelector}); + } option = DOM.createOption(null); ddl.appendChild(option); optionObjectList.forEach((optionObjectJson) => { @@ -557,8 +563,10 @@ export default class TableBasePage extends BasePage { }); tdNew.appendChild(ddl); let ddlSelector = cellSelector + ' select'; + debugger; ddlHookup(ddlSelector); } + /* handleChangeTableCellDdl(event, ddl) { let row = DOM.getRowFromElement(ddl); let td = DOM.getCellFromElement(ddl); @@ -585,6 +593,7 @@ export default class TableBasePage extends BasePage { } } } + */ hookupTableCellDDlPreviewsWhenNotCollapsed(cellSelector, optionList, ddlHookup = (event, element) => { this.hookupTableCellDdls(event, element); }) { this.hookupEventHandler("click", cellSelector, (event, td) => { let div = td.querySelector('div'); @@ -596,7 +605,7 @@ export default class TableBasePage extends BasePage { this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { this.handleChangeProductCategoryDdl(event, element); }); } handleChangeProductCategoryDdl(event, ddlCategory) { - this.handleChangeTableCellDdl(event, ddlCategory); + this.handleChangeNestedElementCellTable(event, ddlCategory); let idProductCategorySelected = DOM.getElementValueCurrent(ddlCategory); let row = DOM.getRowFromElement(ddlCategory); let tdProduct = row.querySelector('td.' + flagProduct); @@ -611,7 +620,7 @@ export default class TableBasePage extends BasePage { option = DOM.createOption(optionJson); ddlProduct.appendChild(option); }); - this.handleChangeTableCellDdl(event, ddlProduct); + this.handleChangeNestedElementCellTable(event, ddlProduct); } hookupFieldsProductPermutationVariation() { this.hookupPreviewsProductPermutationVariation(); @@ -625,7 +634,6 @@ export default class TableBasePage extends BasePage { handleClickProductPermutationVariationsPreview(event, element) { let tblVariations = element.querySelector('table.' + flagProductVariations); if (!Validation.isEmpty(tblVariations)) return; - console.log("click product permutation variations preview"); this.toggleColumnCollapsed(flagProductVariations, false); let permutationVariations = this.getElementProductVariations(element); tblVariations = document.createElement("table"); @@ -650,18 +658,21 @@ export default class TableBasePage extends BasePage { thead.appendChild(tr); tblVariations.appendChild(thead); let tbody = document.createElement("tbody"); - console.log('variations:', permutationVariations); if (!Validation.isEmpty(permutationVariations)) { permutationVariations.forEach((permutationVariation, index) => { this.addProductPermutationVariationRow(tbody, permutationVariation); }); } tblVariations.appendChild(tbody); + if (_verbose) { + console.log("click product permutation variations preview"); + console.log('variations:', permutationVariations); + console.log("tblVariations: ", tblVariations); + } let cellParent = element.closest(idTableMain + ' tbody tr td.' + flagProductVariations); cellParent.innerHTML = ''; cellParent.appendChild(tblVariations); - console.log("tblVariations: ", tblVariations); this.hookupFieldsProductPermutationVariation(); } @@ -680,7 +691,7 @@ export default class TableBasePage extends BasePage { permutationVariations.forEach((variation) => { parts = variation.split(':'); if (parts.length == 2) { - console.log("parts: ", parts); + if (_verbose) { console.log("parts: ", parts); } new_variation_type = productVariationTypes[parts[0].trim()]; new_variation = productVariations[parts[1].trim()]; objVariations.push({ @@ -689,7 +700,7 @@ export default class TableBasePage extends BasePage { }); } else { - console.log("error: invalid variation: ", variation); + if (_verbose) { console.log("error: invalid variation: ", variation); } } }); } @@ -712,6 +723,7 @@ export default class TableBasePage extends BasePage { }; } addProductPermutationVariationRow(tbody, permutationVariation) { + if (_verbose) { console.log("permutationVariation: ", permutationVariation); } let productVariationType, optionProductVariationTypeJson, optionProductVariationType, productVariation, optionProductVariationJson, optionProductVariation; /* if (Validation.isEmpty(variations)) { @@ -734,7 +746,7 @@ export default class TableBasePage extends BasePage { if (doFilterProductVariationKeys) { productVariationKeys = productVariationKeys.filter(variationKey => !productVariationTypeKeysSelected.has(productVariations[variationKey][attrIdProductVariationType])); } - console.log("permutationVariation: ", permutationVariation); + let permutationVariationJson = permutationVariation[flagProductVariation]; let permutationVariationTypeJson = permutationVariation[flagProductVariationType]; @@ -747,7 +759,7 @@ export default class TableBasePage extends BasePage { DOM.setElementAttributesValuesCurrentAndPrevious(ddlVariationType, permutationVariationTypeJson[attrIdProductVariationType]); optionProductVariationType = DOM.createOption(null); - console.log("optionProductVariationType: ", optionProductVariationType); + if (_verbose) { console.log("optionProductVariationType: ", optionProductVariationType); } ddlVariationType.appendChild(optionProductVariationType); productVariationTypeKeys.forEach((productVariationTypeKey) => { @@ -759,7 +771,7 @@ export default class TableBasePage extends BasePage { productVariationType = productVariationTypes[productVariationTypeKey]; optionProductVariationTypeJson = BusinessObjects.getOptionJsonFromObjectJson(productVariationType, permutationVariationTypeJson[attrIdProductVariationType]); optionProductVariationType = DOM.createOption(optionProductVariationTypeJson); - console.log("optionProductVariationType: ", optionProductVariationType); + if (_verbose) { console.log("optionProductVariationType: ", optionProductVariationType); } ddlVariationType.appendChild(optionProductVariationType); }); @@ -772,14 +784,14 @@ export default class TableBasePage extends BasePage { DOM.setElementAttributesValuesCurrentAndPrevious(ddlVariation, permutationVariationJson[attrIdProductVariation]); optionProductVariation = DOM.createOption(null); - console.log("optionProductVariation: ", optionProductVariation); + if (_verbose) { console.log("optionProductVariation: ", optionProductVariation); } ddlVariation.appendChild(optionProductVariation); productVariationKeys.forEach((productVariationKey) => { productVariation = productVariations[productVariationKey]; optionProductVariationJson = BusinessObjects.getOptionJsonFromObjectJson(productVariation, permutationVariationJson[attrIdProductVariation]); optionProductVariation = DOM.createOption(optionProductVariationJson); - console.log("optionProductVariation: ", optionProductVariation); + if (_verbose) { console.log("optionProductVariation: ", optionProductVariation); } ddlVariation.appendChild(optionProductVariation); }); diff --git a/static/js/pages/store/basket.js b/static/js/pages/store/basket.js index 262cd6d4..ff7da1cc 100644 --- a/static/js/pages/store/basket.js +++ b/static/js/pages/store/basket.js @@ -21,12 +21,12 @@ export default class PageStoreBasket extends BasePage { hookupStoreCardsInfo() { document.querySelectorAll(idContainerInfoDelivery).addEventListener("click", function(event) { - console.log("delivery modal display method"); + if (_verbose) { console.log("delivery modal display method"); } document.querySelectorAll(idOverlayInfoDelivery).css('display', 'block'); }); document.querySelectorAll(idContainerInfoBilling).addEventListener("click", function(event) { - console.log("billing modal display method"); + if (_verbose) { console.log("billing modal display method"); } document.querySelectorAll(idOverlayInfoBilling).css('display', 'block'); }); } @@ -44,7 +44,7 @@ export default class PageStoreBasket extends BasePage { elForm.submit(function(event) { elForm = document.querySelectorAll(elForm); event.preventDefault(); - console.log("delivery submit method"); + if (_verbose) { console.log("delivery submit method"); } ajaxData = {}; ajaxData[keyInfoType] = keyInfoDelivery; @@ -63,7 +63,7 @@ export default class PageStoreBasket extends BasePage { Events.initialiseEventHandler(elForm, flagInitialised, function() { elForm.submit(function(event) { event.preventDefault(); - console.log("billing submit method"); + if (_verbose) { console.log("billing submit method"); } ajaxData = {}; ajaxData[keyInfoType] = keyInfoBilling; @@ -81,7 +81,7 @@ export default class PageStoreBasket extends BasePage { loadInfoAddress(response) { - console.log('ajax:'); console.log(response.data); + if (_verbose) { console.log('response:'); console.log(response.data); } let infoType = response.data[keyInfoType]; let infoAddress = response.data[infoType]; LocalStorage.setLocalStorage(infoType, infoAddress); @@ -119,11 +119,13 @@ export default class PageStoreBasket extends BasePage { elOverlay = document.querySelectorAll(idOverlayInfoDelivery); elForm = elOverlay.querySelector('form'); - console.log('converting billing form to json\nform ID: ' + elForm.id); ajaxData[flagForm] = convertForm2JSON(elForm); // formData; // form.serialize(); let keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyAddress2, keyCity, keyCounty]; - console.log('ajaxData:'); - console.log(ajaxData); + 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]) { @@ -132,8 +134,10 @@ export default class PageStoreBasket extends BasePage { ajaxData[flagForm][keys[k]] = getElementValueCurrent(elForm.querySelector('#' + keys[k])); } } - console.log('ajaxData:'); - console.log(ajaxData); + if (_verbose) { + console.log('ajaxData:'); + console.log(ajaxData); + } return ajaxData; } diff --git a/static/js/pages/store/manufacturing_purchase_orders.js b/static/js/pages/store/manufacturing_purchase_orders.js index 0a160d1a..20e6d912 100644 --- a/static/js/pages/store/manufacturing_purchase_orders.js +++ b/static/js/pages/store/manufacturing_purchase_orders.js @@ -37,7 +37,7 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage let inputCostTotalLocalVatIncl = row.querySelector('td.' + flagCostTotalLocalVatIncl + ' input'); let inputPriceTotalLocalVatExcl = row.querySelector('td.' + flagPriceTotalLocalVatExcl + ' input'); let inputPriceTotalLocalVatIncl = row.querySelector('td.' + flagPriceTotalLocalVatIncl + ' input'); - let tdItems = row.querySelector('td.' + flagOrderItems); + let trsPurchaseOrderItem = row.querySelectorAll('tr.' + flagOrderItems); let checkboxActive = row.querySelector('td.' + flagActive + ' textarea'); let jsonRow = {}; @@ -47,11 +47,12 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl); jsonRow[flagPriceTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputPriceTotalLocalVatExcl); jsonRow[flagPriceTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputPriceTotalLocalVatIncl); - // jsonRow[flagOrderItems] = DOM.getElementAttributeValueCurrent(tdItems); let orderItems = []; - trsPurchaseOrderItem.forEach((tr) => { - orderItems.push(this.getJsonRowOrderItem(tr)); - }); + if (trsPurchaseOrderItem != null) { + trsPurchaseOrderItem.forEach((tr) => { + orderItems.push(this.getJsonRowOrderItem(tr)); + }); + } jsonRow[flagOrderItems] = orderItems; jsonRow[flagActive] = DOM.getElementAttributeValueCurrent(checkboxActive); return jsonRow; @@ -77,8 +78,6 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage jsonRow[attrIdUnitMeasurementQuantity] = DOM.getElementAttributeValueCurrent(tdUnitQuantity); jsonRow[flagQuantityUsed] = DOM.getElementAttributeValueCurrent(inputQuantityUsed); jsonRow[flagQuantityProduced] = DOM.getElementAttributeValueCurrent(inputQuantityProduced); - jsonRow[flagCostTotalLocalVatExcl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatExcl); - jsonRow[flagCostTotalLocalVatIncl] = DOM.getElementAttributeValueCurrent(inputCostTotalLocalVatIncl); jsonRow[flagLatencyManufacture] = DOM.getElementAttributeValueCurrent(inputLatencyManufacture); jsonRow[flagActive] = DOM.getElementAttributeValueCurrent(checkboxActive); @@ -91,11 +90,11 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage hookupTableMain() { super.hookupTableMain(); this.hookupCurrencyFields(); - this.hookupCostInputs(); + this.hookupCostAndPriceInputs(); this.hookupOrderItemsFields(); this.hookupInputsActiveTable(); } - hookupCostInputs() { + hookupCostAndPriceInputs() { this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatExcl + ' input'); this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostTotalLocalVatIncl + ' input'); this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPriceTotalLocalVatExcl + ' input'); @@ -110,8 +109,7 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage this.hookupFieldsOrderItemUnitQuantity(); this.hookupFieldsOrderItemQuantityUsed(); this.hookupFieldsOrderItemQuantityProduced(); - this.hookupFieldsOrderItemCostTotalLocalVatExcl(); - this.hookupFieldsOrderItemCostTotalLocalVatIncl(); + this.hookupFieldsOrderItemUnitMeasurementLatencyManufacture(); this.hookupFieldsOrderItemLatencyManufacture(); this.hookupFieldsOrderItemActive(); this.hookupFieldsOrderItemAddDelete(); @@ -124,7 +122,7 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage }); } handleClickOrderItemsPreview(event, element) { - console.log("click order items preview"); + if (_verbose) { console.log("click order items preview"); } this.toggleColumnHeaderCollapsed(flagOrderItems, false); element.classList.remove(flagCollapsed); @@ -154,10 +152,11 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage thUnitQuantity.textContent = 'Unit Quantity'; let thQuantityUsed = document.createElement("th"); thQuantityUsed.classList.add(flagQuantityUsed); - thQuantityUsed.textContent = 'Quantity Ordered'; + thQuantityUsed.textContent = 'Quantity Used'; let thQuantityProduced = document.createElement("th"); thQuantityProduced.classList.add(flagQuantityProduced); - thQuantityProduced.textContent = 'Quantity Received'; + thQuantityProduced.textContent = 'Quantity Produced'; + /* let thCostTotalLocalVatExcl = document.createElement("th"); thCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl); thCostTotalLocalVatExcl.textContent = 'Cost Total Local VAT Excl'; @@ -170,9 +169,13 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage let thCostUnitLocalVatIncl = document.createElement("th"); thCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl); thCostUnitLocalVatIncl.textContent = 'Cost Unit Local VAT Incl'; + */ + let thUnitMeasurementLatencyManufacture = document.createElement("th"); + thUnitMeasurementLatencyManufacture.classList.add(flagUnitMeasurementLatencyManufacture); + thUnitMeasurementLatencyManufacture.textContent = 'Unit Measurement Latency Manufacture'; let thLatencyManufacture = document.createElement("th"); thLatencyManufacture.classList.add(flagLatencyManufacture); - thLatencyManufacture.textContent = 'Latency Delivery (Days)'; + thLatencyManufacture.textContent = 'Latency Manufacture'; let thActive = document.createElement("th"); thActive.classList.add(flagActive); thActive.textContent = 'Active'; @@ -190,10 +193,13 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage 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); @@ -210,11 +216,11 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage let cellNew = cell.cloneNode(false); cellNew.appendChild(tblOrderItems); row.replaceChild(cellNew, cell); - console.log("tblOrderItems: ", tblOrderItems); + if (_verbose) { console.log("tblOrderItems: ", tblOrderItems); } this.hookupOrderItemsFields(); } addRowManufacturingPurchaseOrderItem(tbody, orderItem) { // productVariationTypeOptions, productVariationOptions, productCategoryOptions, productOptions, unitMeasurementOptions, - console.log("addRowManufacturingPurchaseOrderItem: ", orderItem); + if (_verbose) { console.log("addRowManufacturingPurchaseOrderItem: ", orderItem); } let tdDisplayOrder = document.createElement("td"); tdDisplayOrder.classList.add(flagDisplayOrder); @@ -245,6 +251,7 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage let tdVariations = document.createElement("td"); tdVariations.classList.add(flagProductVariations); + tdVariations.classList.add(flagCollapsed); DOM.setElementAttributesValuesCurrentAndPrevious(tdVariations, orderItem[attrIdProductCategory]); let divVariations = document.createElement("div"); divVariations.classList.add(flagProductVariations); @@ -276,6 +283,7 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage DOM.setElementAttributesValuesCurrentAndPrevious(inputQuantityProduced, orderItem[flagQuantityProduced]); tdQuantityProduced.appendChild(inputQuantityProduced); + /* let tdCostTotalLocalVatExcl = document.createElement("td"); tdCostTotalLocalVatExcl.classList.add(flagCostTotalLocalVatExcl); let inputCostTotalLocalVatExcl = document.createElement("input"); @@ -307,7 +315,16 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage divCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl); DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, orderItem[flagCostUnitLocalVatIncl]); tdCostUnitLocalVatIncl.appendChild(divCostUnitLocalVatIncl); + */ + let tdUnitMeasurementLatencyManufacture = document.createElement("td"); + tdUnitMeasurementLatencyManufacture.classList.add(flagUnitMeasurementLatencyManufacture); + DOM.setElementAttributesValuesCurrentAndPrevious(tdUnitMeasurementLatencyManufacture, orderItem[attrIdUnitMeasurementLatencyManufacture]); + let divUnitMeasurementLatencyManufacture = document.createElement("div"); + divUnitMeasurementLatencyManufacture.classList.add(flagUnitMeasurementLatencyManufacture); + // DOM.setElementValuesCurrentAndPrevious(divUnitMeasurementLatencyManufacture, orderItem[flagUnitMeasurementLatencyManufacture]); + tdUnitMeasurementLatencyManufacture.appendChild(divUnitMeasurementLatencyManufacture); + let tdLatencyManufacture = document.createElement("td"); tdLatencyManufacture.classList.add(flagLatencyManufacture); let inputLatencyManufacture = document.createElement("input"); @@ -343,10 +360,13 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage 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); @@ -368,9 +388,6 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage hookupFieldsOrderItemProductVariations() { this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductVariations, (event, element) => this.handleClickProductPermutationVariationsPreview(event, element)); } - handleChangeElementProductVariationsSubtableCell(event, element) { - this.handleChangeNestedElementCellTable(event, element); // , flagProductVariations); - } hookupFieldsOrderItemUnitQuantity() { this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagUnitMeasurementQuantity, Utils.getListFromDict(unitMeasurements)); } @@ -380,6 +397,7 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage hookupFieldsOrderItemQuantityProduced() { this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagQuantityProduced + ' input'); } + /* hookupFieldsOrderItemPriceTotalLocalVatExcl() { this.hookupChangeHandlerTableCells( idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatExcl + ' input' @@ -438,6 +456,7 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage hookupFieldsOrderItemPriceUnitLocalVatIncl() { this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagOrderItems + ' td.' + flagPriceUnitLocalVatIncl + ' input'); } + */ hookupFieldsOrderItemUnitMeasurementLatencyManufacture() { this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagOrderItems + ' td.' + flagUnitMeasurementLatencyManufacture, Utils.getListFromDict(unitMeasurementsTime)); } @@ -459,11 +478,11 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' th button.' + flagAdd, (event, element) => { let row = element.closest(idTableMain + ' > tbody > tr'); let idManufacturingPurchaseOrder = row.getAttribute(attrIdManufacturingPurchaseOrder); - let hasActiveOrderItem = row.querySelectorAll('td.' + flagOrderItems + ' input.' + flagActive + ':checked').length > 0; - let countManufacturingOrderItemes = row.querySelectorAll('td.' + flagOrderItems + ' td.' + flagManufacturingPurchaseOrder).length; + // let hasActiveOrderItem = row.querySelectorAll('td.' + flagOrderItems + ' input.' + flagActive + ':checked').length > 0; + let countManufacturingOrderItems = row.querySelectorAll('td.' + flagOrderItems + ' td.' + flagManufacturingPurchaseOrder).length; let manufacturingPurchaseOrderItem = { [attrIdManufacturingPurchaseOrder]: idManufacturingPurchaseOrder, - [attrIdManufacturingPurchaseOrderProductLink]: -1 - countManufacturingOrderItemes, + [attrIdManufacturingPurchaseOrderProductLink]: -1 - countManufacturingOrderItems, [attrIdProductCategory]: 0, [attrIdProduct]: 0, [flagProductVariations]: '', @@ -473,10 +492,10 @@ export default class PageStoreManufacturingPurchaseOrders extends TableBasePage [attrIdUnitMeasurementLatencyManufacture]: 0, [flagLatencyManufacture]: '', [flagDisplayOrder]: countManufacturingOrderItems + 1, - [flagActive]: !hasActiveOrderItem, + [flagActive]: true, // !hasActiveOrderItem, }; let tbody = row.querySelector('td.' + flagOrderItems + ' table tbody'); - this.addRowManufacturingOrderItem(tbody, manufacturingPurchaseOrderItem); + this.addRowManufacturingPurchaseOrderItem(tbody, manufacturingPurchaseOrderItem); /* if (!hasActiveOrderItem) { let tdOrderItem = row.querySelector('td.' + flagOrderItems); diff --git a/static/js/pages/store/mixin.js b/static/js/pages/store/mixin.js index ec794962..1496389c 100644 --- a/static/js/pages/store/mixin.js +++ b/static/js/pages/store/mixin.js @@ -65,7 +65,7 @@ export default class StoreMixinPage { }); dropdownCurrency.addEventListener("change", function() { let selectedCurrency = dropdownCurrency.val(); - console.log("selected currency: ", selectedCurrency); + if (_verbose) { console.log("selected currency: ", selectedCurrency); } let basket = LocalStorage.getLocalStorage(keyBasket); basket[keyIdCurrency] = selectedCurrency; // LocalStorage.setLocalStorage(keyIdCurrency, selectedCurrency); @@ -109,17 +109,17 @@ export default class StoreMixinPage { Events.initialiseEventHandler(dropdownRegion, flagInitialised, function() { dropdownRegion = document.querySelectorAll(dropdownRegion); dropdownRegion.addEventListener("focus", function() { - console.log("dropdown region focused"); + if (_verbose) { console.log("dropdown region focused"); } handleSelectExpand(dropdownRegion); }); dropdownRegion.addEventListener("blur", function() { - console.log("dropdown region blurred"); + if (_verbose) { console.log("dropdown region blurred"); } handleSelectCollapse(dropdownRegion); }); dropdownRegion.addEventListener("change", function() { handleSelectCollapse(dropdownRegion); let selectedRegion = dropdownRegion.val(); - console.log("selected region: ", selectedRegion); + if (_verbose) { console.log("selected region: ", selectedRegion); } let basket = LocalStorage.getLocalStorage(keyBasket); basket[keyIdRegionDelivery] = selectedRegion; // LocalStorage.setLocalStorage(keyIdRegionDelivery, selectedRegion); @@ -138,10 +138,13 @@ export default class StoreMixinPage { elSelector.addEventListener("change", function(event) { ajaxData = {}; ajaxData[flagForm] = convertForm2JSON(elForm); - console.log('sending data to include VAT controller: '); console.log(ajaxData); + 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); }); - console.log("form is included VAT initialised") + if (_verbose) { console.log("form is included VAT initialised"); } }); } hookupLocalStorage() { @@ -153,7 +156,7 @@ export default class StoreMixinPage { // console.log('d:'); console.log(d); let basketLocalStorage = LocalStorage.getLocalStorage(keyBasket); if (!StoreMixinPage.validateBasket(basketLocalStorage)) { - console.log('locally-stored basket not valid'); + if (_verbose) { console.log('locally-stored basket not valid'); } basketLocalStorage = StoreMixinPage.makeNewBasket(); } let basketServer = StoreMixinPage.validateBasket(userBasket) ? userBasket : basketLocalStorage; @@ -216,7 +219,7 @@ export default class StoreMixinPage { this.hookupDeleteBasketItemButtons(); } toggleShowButtonCheckout() { - console.log("toggling checkout button"); + if (_verbose) { console.log("toggling checkout button"); } const buttonCheckout = document.querySelectorAll(idButtonCheckout); const labelBasketEmpty = document.querySelectorAll(idLabelBasketEmpty); if (userBasket['items'].length == 0) { @@ -228,7 +231,7 @@ export default class StoreMixinPage { } } hookupButtonCheckout() { - console.log("hooking up checkout button"); + if (_verbose) { console.log("hooking up checkout button"); } const buttonCheckout = document.querySelectorAll(idButtonCheckout); // let lsPage = getPageLocalStorage(hashPageCurrent); Events.initialiseEventHandler(buttonCheckout, flagInitialised, function() { @@ -383,7 +386,7 @@ export default class StoreMixinPage { getCurrencySelected() { let elementSelectorCurrency = document.querySelectorAll(idSelectorCurrency); let selectedCurrency = elementSelectorCurrency.val(); - console.log("selected currency: ", selectedCurrency); + if (_verbose) { console.log("selected currency: ", selectedCurrency); } return selectedCurrency; } @@ -392,13 +395,15 @@ export default class StoreMixinPage { let d; // , lsShared; let selectorCardProduct = '.card.subcard'; Events.initialiseEventHandler(selectorCardProduct, flagInitialised, function(cardProduct) { - console.log("initialising product card: ", 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 - console.log("product click: " + cardProduct.getAttribute(attrIdProduct)); - console.log("permutation click: " + cardProduct.getAttribute(attrIdPermutation)); + 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) @@ -406,7 +411,7 @@ export default class StoreMixinPage { goToPage(hashPageStoreProduct, d); } }); - console.log("click method added for product ID: " + cardProduct.getAttribute(attrIdProduct) + ', permutation ID: ', cardProduct.getAttribute(attrIdPermutation)); + if (_verbose) { console.log("click method added for product ID: " + cardProduct.getAttribute(attrIdProduct) + ', permutation ID: ', cardProduct.getAttribute(attrIdPermutation)); } }); } diff --git a/static/js/pages/store/product_categories.js b/static/js/pages/store/product_categories.js index f65f3f86..3717054c 100644 --- a/static/js/pages/store/product_categories.js +++ b/static/js/pages/store/product_categories.js @@ -33,13 +33,13 @@ export default class PageStoreProductCategories extends TableBasePage { loadRowTable(rowJson) { if (rowJson == null) return; + if (_verbose) { console.log("applying data row: ", rowJson); } let row = _rowBlank.cloneNode(true); row.classList.remove(flagRowNew); row.classList.remove(flagInitialised); row.querySelectorAll('.' + flagInitialised).forEach(function(element) { element.classList.remove(flagInitialised); }); - console.log("applying data row: ", rowJson); let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider); let textareaCode = row.querySelector('td.' + flagCode + ' textarea'); let textareaName = row.querySelector('td.' + flagName + ' textarea'); @@ -75,13 +75,13 @@ export default class PageStoreProductCategories extends TableBasePage { let jsonCategory = {}; jsonCategory[attrIdProductCategory] = row.getAttribute(attrIdProductCategory); - jsonCategory[flagCode] = DOM.getElementValueCurrent(textareaCode); - jsonCategory[flagName] = DOM.getElementValueCurrent(textareaName); - jsonCategory[flagDescription] = DOM.getElementValueCurrent(textareaDescription); + jsonCategory[flagCode] = DOM.getElementAttributeValueCurrent(textareaCode); + jsonCategory[flagName] = DOM.getElementAttributeValueCurrent(textareaName); + jsonCategory[flagDescription] = DOM.getElementAttributeValueCurrent(textareaDescription); // jsonCategory[flagAccessLevelRequired] = tdAccessLevel.getAttribute(flagAccessLevelRequired); - jsonCategory[attrIdAccessLevel] = DOM.getElementValueCurrent(tdAccessLevel); - jsonCategory[flagActive] = DOM.getElementValueCurrent(inputActive); - jsonCategory[flagDisplayOrder] = sliderDisplayOrder.getAttribute(attrValueCurrent); + jsonCategory[attrIdAccessLevel] = DOM.getElementAttributeValueCurrent(tdAccessLevel); + jsonCategory[flagActive] = DOM.getElementAttributeValueCurrent(inputActive); + jsonCategory[flagDisplayOrder] = DOM.getElementAttributeValueCurrent(sliderDisplayOrder); return jsonCategory; } initialiseRowNew(row) { diff --git a/static/js/pages/store/product_permutations.js b/static/js/pages/store/product_permutations.js index 1418c3bc..7c9de399 100644 --- a/static/js/pages/store/product_permutations.js +++ b/static/js/pages/store/product_permutations.js @@ -67,12 +67,12 @@ export default class PageStoreProductPermutations extends TableBasePage { } 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); - console.log("applying data row: ", rowJson); let dllCategory = row.querySelector('td.' + flagProductCategory + ' select'); dllCategory.value = rowJson[attrIdProductCategory]; let ddlProduct = row.querySelector('td.' + flagProduct + ' select'); @@ -130,7 +130,8 @@ export default class PageStoreProductPermutations extends TableBasePage { let tdProduct = row.querySelector('td.' + flagProduct); let tdProductVariations = row.querySelector('td.' + flagProductVariations); let inputDescription = row.querySelector('td.' + flagDescription + ' textarea'); - let inputCostLocal = row.querySelector('td.' + flagCostLocal + ' input'); + let inputCostLocalVatExcl = row.querySelector('td.' + flagCostUnitLocalVatExcl + ' input'); + let inputCostLocalVatIncl = row.querySelector('td.' + flagCostUnitLocalVatIncl + ' input'); let tdCurrencyCost = row.querySelector('td.' + flagCurrencyCost); let inputProfitLocalMin = row.querySelector('td.' + flagProfitLocalMin + ' input'); let inputLatencyManufactureDays = row.querySelector('td.' + flagLatencyManufacture + ' input'); @@ -155,7 +156,8 @@ export default class PageStoreProductPermutations extends TableBasePage { jsonRow[flagProductVariations] = tdProductVariations.getAttribute(attrValueCurrent); jsonRow[flagHasVariations] = jsonRow[flagProductVariations] != ''; jsonRow[flagDescription] = inputDescription.getAttribute(attrValueCurrent); - jsonRow[flagCostLocal] = inputCostLocal.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); @@ -181,8 +183,10 @@ export default class PageStoreProductPermutations extends TableBasePage { let ddlProductFilter = document.querySelector(idFormFilters + ' #' + attrIdProduct); let idProductFilter = DOM.getElementValueCurrent(ddlProductFilter); let hasProductFilter = !(Validation.isEmpty(idProductFilter) || idProductFilter == '0'); - console.log("initialiseRowNew: ", row); - console.log({ddlCategoryFilter, idProductCategoryFilter, hasCategoryFilter, ddlProductFilter, idProductFilter, hasProductFilter}); + if (_verbose) { + console.log("initialiseRowNew: ", row); + console.log({ddlCategoryFilter, idProductCategoryFilter, hasCategoryFilter, ddlProductFilter, idProductFilter, hasProductFilter}); + } if (!hasCategoryFilter && !hasProductFilter) return; if (hasCategoryFilter) { let ddlCategory = row.querySelector('td.' + flagProductCategory + ' select'); @@ -231,7 +235,10 @@ export default class PageStoreProductPermutations extends TableBasePage { this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagCurrencyCost, Utils.getListFromDict(currencies)); } hookupCostInputs(){ - this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostLocal + ' input'); + /* + this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostUnitLocalVatExcl + ' input'); + this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCostUnitLocalVatIncl + ' input'); + */ } hookupProfitFields(){ // this.hookupCurrencyProfitFields(); @@ -268,7 +275,6 @@ export default class PageStoreProductPermutations extends TableBasePage { this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCountUnitMeasurementPerQuantityStep + ' input'); } hookupUnitMeasurementQuantityFields() { - console.log("hooking up unit measurement quantity fields"); this.hookupTableCellDdlPreviews(idTableMain + ' td.' + flagUnitMeasurementQuantity, Utils.getListFromDict(unitMeasurements)); } hookupSubscriptionFields() { diff --git a/static/js/pages/store/products.js b/static/js/pages/store/products.js index c207405a..92d436c8 100644 --- a/static/js/pages/store/products.js +++ b/static/js/pages/store/products.js @@ -40,7 +40,6 @@ export default class PageStoreProducts extends TableBasePage { row.querySelectorAll('.' + flagInitialised).forEach(function(element) { element.classList.remove(flagInitialised); }); - console.log("applying data row: ", rowJson); let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider); let tdProductCategory = row.querySelector('td.' + flagProductCategory); let divProductCategory = tdProductCategory.querySelector('div.' + flagProductCategory); diff --git a/static/js/pages/store/stock_items.js b/static/js/pages/store/stock_items.js index b1ed9796..bad199a9 100644 --- a/static/js/pages/store/stock_items.js +++ b/static/js/pages/store/stock_items.js @@ -115,8 +115,10 @@ export default class PageStoreStockItems extends TableBasePage { let ddlProductFilter = document.querySelector(idFormFilters + ' #' + attrIdProduct); let idProductFilter = DOM.getElementValueCurrent(ddlProductFilter); let hasProductFilter = !(Validation.isEmpty(idProductFilter) || idProductFilter == '0'); - console.log("initialiseRowNew: ", row); - console.log({ddlCategoryFilter, idProductCategoryFilter, hasCategoryFilter, ddlProductFilter, idProductFilter, hasProductFilter}); + if (_verbose) { + console.log("initialiseRowNew: ", row); + console.log({ddlCategoryFilter, idProductCategoryFilter, hasCategoryFilter, ddlProductFilter, idProductFilter, hasProductFilter}); + } if (!hasCategoryFilter && !hasProductFilter) return; if (hasCategoryFilter) { let ddlCategory = row.querySelector('td.' + flagProductCategory + ' select'); @@ -222,7 +224,7 @@ export default class PageStoreStockItems extends TableBasePage { DOM.setElementAttributesValuesCurrentAndPrevious(ddlPlant, plantJson[attrIdPlant]); optionPlant = DOM.createOption(null); - console.log("optionPlant: ", optionPlant); + if (_verbose) { console.log("optionPlant: ", optionPlant); } ddlPlant.appendChild(optionPlant); plantKeys.forEach((plantKey) => { @@ -232,7 +234,7 @@ export default class PageStoreStockItems extends TableBasePage { valueSelected = plantJson[attrIdPlant] ); optionPlant = DOM.createOption(optionPlantJson); - console.log("optionPlant: ", optionPlant); + if (_verbose) { console.log("optionPlant: ", optionPlant); } ddlPlant.appendChild(optionPlant); }); @@ -245,7 +247,7 @@ export default class PageStoreStockItems extends TableBasePage { DOM.setElementAttributesValuesCurrentAndPrevious(ddlStorageLocation, storageLocationJson[attrIdStorageLocation]); optionStorageLocation = DOM.createOption(null); - console.log("optionStorageLocation: ", optionStorageLocation); + if (_verbose) { console.log("optionStorageLocation: ", optionStorageLocation); } ddlStorageLocation.appendChild(optionStorageLocation); StorageLocationKeys.forEach((StorageLocationKey) => { @@ -255,7 +257,7 @@ export default class PageStoreStockItems extends TableBasePage { valueSelected = storageLocationJson[attrIdStorageLocation] ); optionStorageLocation = DOM.createOption(optionStorageLocationJson); - console.log("optionStorageLocation: ", optionStorageLocation); + if (_verbose) { console.log("optionStorageLocation: ", optionStorageLocation); } ddlStorageLocation.appendChild(optionStorageLocation); }); @@ -270,12 +272,12 @@ export default class PageStoreStockItems extends TableBasePage { let parent = element.parentElement; parent.innerHTML = ''; parent.appendChild(tblStorageLocation); - console.log("tblStorageLocation: ", tblStorageLocation); + if (_verbose) { console.log("tblStorageLocation: ", tblStorageLocation); } this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagPlant + ' select', (event, element) => { this.handleChangeStoragePlantDdl(event, element); }); this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagStorageLocation + ' select', (event, element) => { this.handleChangeStorageLocationDdl(event, element); }); } handleChangeStoragePlantDdl(event, ddlPlant) { - this.handleChangeTableCellDdl(event, ddlPlant); + this.handleChangeNestedElementCellTable(event, ddlPlant); let row = DOM.getRowFromElement(ddlPlant); let ddlStorageLocation = row.querySelector('td.' + flagStorageLocation + ' select'); ddlStorageLocation.innerHTML = ''; @@ -288,10 +290,10 @@ export default class PageStoreStockItems extends TableBasePage { option = DOM.createOption(optionJson); ddlStorageLocation.appendChild(option); }); - this.handleChangeTableCellDdl(event, ddlStorageLocation); + this.handleChangeNestedElementCellTable(event, ddlStorageLocation); } handleChangeStorageLocationDdl(event, ddlStorageLocation) { - this.handleChangeTableCellDdl(event, ddlStorageLocation); + this.handleChangeNestedElementCellTable(event, ddlStorageLocation); } hookupSealingInputs() { diff --git a/static/js/pages/store/supplier_purchase_orders.js b/static/js/pages/store/supplier_purchase_orders.js index c5184cce..a72d8880 100644 --- a/static/js/pages/store/supplier_purchase_orders.js +++ b/static/js/pages/store/supplier_purchase_orders.js @@ -129,7 +129,7 @@ export default class PageStoreSupplierPurchaseOrders extends TableBasePage { }); } handleClickOrderItemsPreview(event, element) { - console.log("click order items preview"); + if (_verbose) { console.log("click order items preview"); } this.toggleColumnHeaderCollapsed(flagOrderItems, false); element.classList.remove(flagCollapsed); @@ -216,11 +216,11 @@ export default class PageStoreSupplierPurchaseOrders extends TableBasePage { let cellNew = cell.cloneNode(false); cellNew.appendChild(tblOrderItems); row.replaceChild(cellNew, cell); - console.log("tblOrderItems: ", tblOrderItems); + if (_verbose) { console.log("tblOrderItems: ", tblOrderItems); } this.hookupOrderItemsFields(); } addRowSupplierPurchaseOrderItem(tbody, orderItem) { // productVariationTypeOptions, productVariationOptions, productCategoryOptions, productOptions, unitMeasurementOptions, - console.log("addRowSupplierPurchaseOrderItem: ", orderItem); + if (_verbose) { console.log("addRowSupplierPurchaseOrderItem: ", orderItem); } let tdDisplayOrder = document.createElement("td"); tdDisplayOrder.classList.add(flagDisplayOrder); @@ -255,6 +255,7 @@ export default class PageStoreSupplierPurchaseOrders extends TableBasePage { let tdVariations = document.createElement("td"); tdVariations.classList.add(flagProductVariations); + tdVariations.classList.add(flagCollapsed); DOM.setElementAttributesValuesCurrentAndPrevious(tdVariations, orderItem[attrIdProductVariation]); let divVariations = document.createElement("div"); divVariations.classList.add(flagProductVariations); @@ -312,14 +313,14 @@ export default class PageStoreSupplierPurchaseOrders extends TableBasePage { tdCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl); let divCostUnitLocalVatExcl = document.createElement("div"); divCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl); - DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, orderItem[flagCostUnitLocalVatExcl]); + DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, orderItem[flagCostUnitLocalVatExcl].toFixed(3)); 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]); + DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, orderItem[flagCostUnitLocalVatIncl].toFixed(3)); tdCostUnitLocalVatIncl.appendChild(divCostUnitLocalVatIncl); let tdLatencyDeliveryDays = document.createElement("td"); @@ -384,20 +385,11 @@ export default class PageStoreSupplierPurchaseOrders extends TableBasePage { this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' td.' + flagProductVariations, (event, element) => this.handleClickProductPermutationVariationsPreview(event, element)); } */ - handleChangeElementProductVariationsSubtableCell(event, element) { - this.handleChangeNestedElementCellTable(event, element); // flagProductVariations); - } hookupDdlsProductPermutationVariation() { - this.hookupTableCellDdls( - idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation - , (event, element) => { this.handleChangeElementProductVariationsSubtableCell(event, element); } - ); + this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation); } hookupDdlsProductPermutationVariationType() { - this.hookupTableCellDdls( - idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariationType - , (event, element) => { this.handleChangeElementProductVariationsSubtableCell(event, element); } - ); + this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariationType); } hookupFieldsOrderItemUnitQuantity() { this.hookupTableCellDdlPreviews( @@ -442,7 +434,7 @@ export default class PageStoreSupplierPurchaseOrders extends TableBasePage { let divCostUnitLocalVatExcl = row.querySelector('td.' + flagCostUnitLocalVatExcl + ' div'); let costUnitLocalVatExcl = quantityOrdered == 0 ? 0 : costTotalLocalVatExcl / quantityOrdered; - DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, costUnitLocalVatExcl); + DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, costUnitLocalVatExcl.toFixed(3)); let rowSupplierPurchaseOrder = row.closest(idTableMain + ' > tbody > tr'); let divCostGrandTotalLocalVatExcl = rowSupplierPurchaseOrder.querySelector('td.' + flagCostTotalLocalVatExcl + ' div'); @@ -459,7 +451,7 @@ export default class PageStoreSupplierPurchaseOrders extends TableBasePage { let divCostUnitLocalVatIncl = row.querySelector('td.' + flagCostUnitLocalVatIncl + ' div'); let costUnitLocalVatIncl = quantityOrdered == 0 ? 0 : costTotalLocalVatIncl / quantityOrdered; - DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, costUnitLocalVatIncl); + DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatIncl, costUnitLocalVatIncl.toFixed(3)); let rowSupplierPurchaseOrder = row.closest(idTableMain + ' > tbody > tr'); let divCostGrandTotalLocalVatIncl = rowSupplierPurchaseOrder.querySelector('td.' + flagCostTotalLocalVatIncl + ' div'); @@ -485,7 +477,7 @@ export default class PageStoreSupplierPurchaseOrders extends TableBasePage { this.hookupEventHandler("click", idTableMain + ' td.' + flagOrderItems + ' th button.' + flagAdd, (event, element) => { let row = element.closest(idTableMain + ' > tbody > tr'); let idSupplierPurchaseOrder = row.getAttribute(attrIdSupplierPurchaseOrder); - let hasActiveOrderItem = row.querySelectorAll('td.' + flagOrderItems + ' input.' + flagActive + ':checked').length > 0; + // let hasActiveOrderItem = row.querySelectorAll('td.' + flagOrderItems + ' input.' + flagActive + ':checked').length > 0; let countSupplierOrderItems = row.querySelectorAll('td.' + flagOrderItems + ' td.' + flagSupplierPurchaseOrder).length; let supplierOrderItem = { [attrIdSupplierPurchaseOrder]: idSupplierPurchaseOrder, @@ -502,7 +494,7 @@ export default class PageStoreSupplierPurchaseOrders extends TableBasePage { [flagCostUnitLocalVatIncl]: '', [flagLatencyDeliveryDays]: '', [flagDisplayOrder]: countSupplierOrderItems + 1, - [flagActive]: !hasActiveOrderItem, + [flagActive]: true, // !hasActiveOrderItem, }; let tbody = row.querySelector('td.' + flagOrderItems + ' table tbody'); this.addRowSupplierPurchaseOrderItem(tbody, supplierOrderItem); diff --git a/static/js/pages/store/suppliers.js b/static/js/pages/store/suppliers.js index 782c5adc..87c9531d 100644 --- a/static/js/pages/store/suppliers.js +++ b/static/js/pages/store/suppliers.js @@ -132,7 +132,7 @@ export default class PageStoreSuppliers extends TableBasePage { }); } handleClickAddressPreview(event, element) { - console.log("click address preview"); + if (_verbose) { console.log("click address preview"); } this.toggleColumnHeaderCollapsed(flagAddress, false); element.classList.remove(flagCollapsed); let row = DOM.getRowFromElement(element); @@ -192,11 +192,11 @@ export default class PageStoreSuppliers extends TableBasePage { let cellNew = cell.cloneNode(false); cellNew.appendChild(tblAddresses); row.replaceChild(cellNew, cell); - console.log("tblAddresses: ", tblAddresses); + if (_verbose) { console.log("tblAddresses: ", tblAddresses); } this.hookupAddressFields(); } addRowSupplierAddress(tbody, supplierAddress, regionOptions) { - console.log("addRowSupplierAddress: ", supplierAddress); + if (_verbose) { console.log("addRowSupplierAddress: ", supplierAddress); } let tdPostcode = document.createElement("td"); tdPostcode.classList.add(flagPostcode); let textareaPostcode = document.createElement("textarea"); @@ -279,28 +279,25 @@ export default class PageStoreSuppliers extends TableBasePage { tbody.appendChild(tr); } hookupAddressPostcodeInputs() { - this.handleChangeElementAddressSubtableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagPostcode); - } - handleChangeElementAddressSubtableCells(event, element) { - this.handleChangeNestedElementCellTable(event, element); // flagAddress); + this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagPostcode); } hookupAddressLine1Inputs() { - this.handleChangeElementAddressSubtableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagAddressLine1); + this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagAddressLine1); } hookupAddressLine2Inputs() { - this.handleChangeElementAddressSubtableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagAddressLine2); + this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagAddressLine2); } hookupAddressCityInputs() { - this.handleChangeElementAddressSubtableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagCity); + this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagCity); } hookupAddressCountyInputs() { - this.handleChangeElementAddressSubtableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagCounty); + this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' textarea.' + flagCounty); } hookupAddressRegionDdls() { - this.handleChangeElementAddressSubtableCells(idTableMain + ' td.' + flagAddress + ' select.' + flagRegion); + this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' select.' + flagRegion); } hookupAddressActiveCheckboxes() { - this.handleChangeElementAddressSubtableCells(idTableMain + ' td.' + flagAddress + ' input.' + flagActive, (event, element) => { + this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagAddress + ' input.' + flagActive, (event, element) => { let rowSupplierAddress = element.closest('tr'); let idAddress = rowSupplierAddress.getAttribute(attrIdSupplierAddress); DOM.setElementAttributeValueCurrent(rowSupplierAddress, idAddress); diff --git a/static/js/router.js b/static/js/router.js index 554161a7..bc4690f9 100644 --- a/static/js/router.js +++ b/static/js/router.js @@ -143,7 +143,7 @@ export default class Router { return module; // [pageJson.name]; } catch (error) { - console.log("this.pages: ", this.pages); + if (_verbose) { console.log("this.pages: ", this.pages); }; console.error('Page not found:', hashPage); throw error; } @@ -169,7 +169,6 @@ export default class Router { // this.beforeLeave(); /* if (this.routes[hash]) { - console.log("navigating to hash: " + hash); this.routes[hash](isPopState); } else { console.error(`Hash ${hash} not found`); @@ -323,7 +322,6 @@ export default class Router { */ static loadPageBodyFromResponse(response) { - console.log(response.data); DOM.loadPageBody(response.data); } } diff --git a/templates/components/store/_body_home.html b/templates/components/store/_body_home.html index ab55aa8b..36c1185f 100644 --- a/templates/components/store/_body_home.html +++ b/templates/components/store/_body_home.html @@ -27,11 +27,7 @@ \ No newline at end of file diff --git a/templates/components/store/_row_basket_item.html b/templates/components/store/_row_basket_item.html index b4fadcd6..471ad389 100644 --- a/templates/components/store/_row_basket_item.html +++ b/templates/components/store/_row_basket_item.html @@ -30,6 +30,13 @@ {{ product.form_delivery_option() }} {% endif %} - + \ No newline at end of file diff --git a/templates/components/store/_row_manufacturing_purchase_order.html b/templates/components/store/_row_manufacturing_purchase_order.html index 359f14e4..85c72e21 100644 --- a/templates/components/store/_row_manufacturing_purchase_order.html +++ b/templates/components/store/_row_manufacturing_purchase_order.html @@ -1,6 +1,9 @@ {% if is_blank_row %} + + {% include 'components/store/_preview_order_items.html' %} + {% include 'components/store/_preview_DDL_currency.html' %} @@ -30,15 +33,20 @@ {{ model.ATTR_VALUE_CURRENT }}="" {{ model.ATTR_VALUE_PREVIOUS }}="" > - - {% include 'components/store/_preview_order_items.html' %} - {% else %} + {% set order_items = order.items %} + {% set json_str_items = model.jsonify(model.convert_list_objects_to_list_options(order_items)) %} + + {# + {% include 'components/store/_preview_manufacturing_purchase_order_items.html' %} + #} + {% include 'components/store/_preview_order_items.html' %} + {% set currency = order.currency %} {% include 'components/store/_preview_DDL_currency.html' %} @@ -71,14 +79,6 @@ {{ model.ATTR_VALUE_PREVIOUS }}="{{ order.price_total_local_VAT_incl }}" > - {% set order_items = order.items %} - {% set json_str_items = model.jsonify(model.convert_list_objects_to_list_options(order_items)) %} - - {# - {% include 'components/store/_preview_manufacturing_purchase_order_items.html' %} - #} - {% include 'components/store/_preview_order_items.html' %} - diff --git a/templates/components/store/_row_product.html b/templates/components/store/_row_product.html index 808f1ca3..32c69613 100644 --- a/templates/components/store/_row_product.html +++ b/templates/components/store/_row_product.html @@ -17,7 +17,10 @@ - +
View
@@ -46,7 +49,10 @@ - +
{{ product.name_access_level_required }}
diff --git a/templates/components/store/_row_product_permutation.html b/templates/components/store/_row_product_permutation.html index 4887a43f..04697f09 100644 --- a/templates/components/store/_row_product_permutation.html +++ b/templates/components/store/_row_product_permutation.html @@ -52,9 +52,18 @@ {% include 'components/store/_preview_DDL_product_permutation_interval_expiration_unsealed.html' %} - + + +
+ 0 +
+ + +
+ 0 +
{% include 'components/store/_preview_DDL_currency.html' %} @@ -140,8 +149,11 @@ {% include 'components/store/_preview_DDL_product_permutation_interval_expiration_unsealed.html' %} - - + + + + + {% set currency = permutation.currency_cost %} diff --git a/templates/components/store/_row_supplier_purchase_order.html b/templates/components/store/_row_supplier_purchase_order.html index bffb6ca9..62bb729a 100644 --- a/templates/components/store/_row_supplier_purchase_order.html +++ b/templates/components/store/_row_supplier_purchase_order.html @@ -4,6 +4,9 @@ {% include 'components/store/_preview_DDL_supplier.html' %} + + {% include 'components/store/_preview_order_items.html' %} + {% include 'components/store/_preview_DDL_currency.html' %} @@ -19,9 +22,6 @@ {{ model.ATTR_VALUE_CURRENT }}="" {{ model.ATTR_VALUE_PREVIOUS }}="" > - - {% include 'components/store/_preview_order_items.html' %} - @@ -32,6 +32,11 @@ {% include 'components/store/_preview_DDL_supplier.html' %} + {% set order_items = order.items %} + {% set json_str_items = model.jsonify(model.convert_list_objects_to_list_options(order_items)) %} + + {% include 'components/store/_preview_order_items.html' %} + {% set currency = order.currency %} {% include 'components/store/_preview_DDL_currency.html' %} @@ -56,11 +61,6 @@ {{ model.ATTR_VALUE_PREVIOUS }}="{{ order.cost_total_local_VAT_incl }}" > - {% set order_items = order.items %} - {% set json_str_items = model.jsonify(model.convert_list_objects_to_list_options(order_items)) %} - - {% include 'components/store/_preview_order_items.html' %} - diff --git a/templates/layouts/layout.html b/templates/layouts/layout.html index 2dec77a2..f011031f 100644 --- a/templates/layouts/layout.html +++ b/templates/layouts/layout.html @@ -235,13 +235,17 @@ var _pathHost = "{{ model.get_url_host() }}"; var _rowBlank = null; var titlePageCurrent = "{{ model.title }}"; + var _verbose = ("{{ model.app.app_config.DEBUG }}" == "True"); - + + + {% block page_head %}{% endblock %}
diff --git a/templates/pages/store/_basket.html b/templates/pages/store/_basket.html index 648aedb0..e9dd9865 100644 --- a/templates/pages/store/_basket.html +++ b/templates/pages/store/_basket.html @@ -1,14 +1,12 @@ {% extends 'layouts/layout.html' %} -{% block title %}{{ model.title }}{% endblock %} +{% block page_head %} + + +{% endblock %} + {% block page_body %} - - -
diff --git a/templates/pages/store/_home.html b/templates/pages/store/_home.html index 7ebd3a39..7495cf87 100644 --- a/templates/pages/store/_home.html +++ b/templates/pages/store/_home.html @@ -1,6 +1,10 @@ {% extends 'layouts/layout.html' %} -{% block title %}{{ model.title }}{% endblock %} +{% block page_head %} + + +{% endblock %} + {% block page_body %} {% include 'components/store/_home_body.html' %} diff --git a/templates/pages/store/_manufacturing_purchase_orders.html b/templates/pages/store/_manufacturing_purchase_orders.html index f383839e..bac476e7 100644 --- a/templates/pages/store/_manufacturing_purchase_orders.html +++ b/templates/pages/store/_manufacturing_purchase_orders.html @@ -1,8 +1,11 @@ {% extends 'layouts/layout.html' %} +{% block page_head %} + + +{% endblock %} + {% block page_body %} - -
{{ model.form_filters.hidden_tag() }}
@@ -41,12 +44,12 @@ + - diff --git a/templates/pages/store/_product_permutations.html b/templates/pages/store/_product_permutations.html index 4cd38f83..83beaa54 100644 --- a/templates/pages/store/_product_permutations.html +++ b/templates/pages/store/_product_permutations.html @@ -112,7 +112,8 @@ - + + diff --git a/templates/pages/store/_supplier_purchase_orders.html b/templates/pages/store/_supplier_purchase_orders.html index 69d88ea4..c85a3e3f 100644 --- a/templates/pages/store/_supplier_purchase_orders.html +++ b/templates/pages/store/_supplier_purchase_orders.html @@ -42,10 +42,10 @@ + -
Items Currency Cost Total VAT Excl. Cost Total VAT Incl. Price Total VAT Excl. Price Total VAT Incl.Items Active
Expires Faster Once Unsealed? Count Interval Expiration Unsealed Interval Expiration UnsealedCostCost Local VAT Excl.Cost Local VAT Incl. Cost Currency Profit Local Min Manufacturing Latency
SupplierItems Currency Cost Total VAT Excl. Cost Total VAT Incl.Items Active