From 697963e28aea2e933f9672b3e2ef9fadfe39b952 Mon Sep 17 00:00:00 2001 From: teddy Date: Tue, 15 Oct 2024 16:40:35 +0100 Subject: [PATCH] feat(MySQL): Tables, Triggers, and Get Many and Save Stored Procedures for Suppliers, Supplier Purchase Orders (+ items), and Manufacturing Purchase Orders (+ items) --- .../__pycache__/base.cpython-312.pyc | Bin 4040 -> 4353 bytes .../__pycache__/user.cpython-312.pyc | Bin 12558 -> 12637 bytes business_objects/base.py | 5 + .../__pycache__/store_base.cpython-312.pyc | Bin 3519 -> 4385 bytes business_objects/store/store_base.py | 10 + business_objects/store/supplier.py | 111 ++ business_objects/user.py | 3 +- controllers/__pycache__/core.cpython-312.pyc | Bin 6014 -> 5946 bytes controllers/__pycache__/user.cpython-312.pyc | Bin 8676 -> 8312 bytes controllers/core.py | 1 - .../store/__pycache__/product.cpython-312.pyc | Bin 6384 -> 6385 bytes .../product_category.cpython-312.pyc | Bin 6304 -> 6305 bytes .../product_permutation.cpython-312.pyc | Bin 6642 -> 6643 bytes .../__pycache__/stock_item.cpython-312.pyc | Bin 6872 -> 6873 bytes .../__pycache__/supplier.cpython-312.pyc | Bin 4099 -> 4099 bytes controllers/store/product.py | 12 +- controllers/store/product_category.py | 6 +- controllers/store/product_permutation.py | 12 +- controllers/store/stock_item.py | 8 +- controllers/store/supplier.py | 2 +- controllers/user.py | 27 +- .../datastore_base.cpython-312.pyc | Bin 11528 -> 11245 bytes datastores/datastore_base.py | 5 +- datastores/datastore_store_supplier.py | 150 +++ .../site-packages/pip-24.0.dist-info/RECORD | 6 +- .../pip/__pycache__/__init__.cpython-312.pyc | Bin 726 -> 726 bytes .../pip/__pycache__/__main__.cpython-312.pyc | Bin 882 -> 882 bytes .../__pip-runner__.cpython-312.pyc | Bin 2245 -> 2245 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 828 -> 828 bytes .../__pycache__/build_env.cpython-312.pyc | Bin 14335 -> 14335 bytes .../__pycache__/cache.cpython-312.pyc | Bin 12706 -> 12706 bytes .../__pycache__/configuration.cpython-312.pyc | Bin 17707 -> 17707 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 33325 -> 33325 bytes .../__pycache__/main.cpython-312.pyc | Bin 711 -> 711 bytes .../__pycache__/pyproject.cpython-312.pyc | Bin 5012 -> 5012 bytes .../self_outdated_check.cpython-312.pyc | Bin 10593 -> 10593 bytes .../__pycache__/wheel_builder.cpython-312.pyc | Bin 13690 -> 13690 bytes .../cli/__pycache__/__init__.cpython-312.pyc | Bin 319 -> 319 bytes .../autocompletion.cpython-312.pyc | Bin 8506 -> 8506 bytes .../__pycache__/base_command.cpython-312.pyc | Bin 10496 -> 10496 bytes .../__pycache__/cmdoptions.cpython-312.pyc | Bin 30415 -> 30415 bytes .../command_context.cpython-312.pyc | Bin 1822 -> 1822 bytes .../cli/__pycache__/main.cpython-312.pyc | Bin 2339 -> 2339 bytes .../__pycache__/main_parser.cpython-312.pyc | Bin 4946 -> 4946 bytes .../cli/__pycache__/parser.cpython-312.pyc | Bin 15063 -> 15063 bytes .../__pycache__/progress_bars.cpython-312.pyc | Bin 2661 -> 2661 bytes .../__pycache__/req_command.cpython-312.pyc | Bin 18893 -> 18893 bytes .../cli/__pycache__/spinners.cpython-312.pyc | Bin 7881 -> 7881 bytes .../__pycache__/status_codes.cpython-312.pyc | Bin 416 -> 416 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 4043 -> 4043 bytes .../__pycache__/cache.cpython-312.pyc | Bin 9752 -> 9752 bytes .../__pycache__/check.cpython-312.pyc | Bin 2131 -> 2131 bytes .../__pycache__/completion.cpython-312.pyc | Bin 5233 -> 5233 bytes .../__pycache__/configuration.cpython-312.pyc | Bin 13253 -> 13253 bytes .../__pycache__/debug.cpython-312.pyc | Bin 10202 -> 10202 bytes .../__pycache__/download.cpython-312.pyc | Bin 7630 -> 7630 bytes .../__pycache__/freeze.cpython-312.pyc | Bin 4397 -> 4397 bytes .../commands/__pycache__/hash.cpython-312.pyc | Bin 3024 -> 3024 bytes .../commands/__pycache__/help.cpython-312.pyc | Bin 1714 -> 1714 bytes .../__pycache__/index.cpython-312.pyc | Bin 6761 -> 6761 bytes .../__pycache__/inspect.cpython-312.pyc | Bin 4016 -> 4016 bytes .../__pycache__/install.cpython-312.pyc | Bin 28954 -> 28954 bytes .../commands/__pycache__/list.cpython-312.pyc | Bin 15441 -> 15441 bytes .../__pycache__/search.cpython-312.pyc | Bin 7662 -> 7662 bytes .../commands/__pycache__/show.cpython-312.pyc | Bin 9769 -> 9769 bytes .../__pycache__/uninstall.cpython-312.pyc | Bin 4767 -> 4767 bytes .../__pycache__/wheel.cpython-312.pyc | Bin 8997 -> 8997 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 982 -> 982 bytes .../__pycache__/base.cpython-312.pyc | Bin 2903 -> 2903 bytes .../__pycache__/installed.cpython-312.pyc | Bin 1741 -> 1741 bytes .../__pycache__/sdist.cpython-312.pyc | Bin 8529 -> 8529 bytes .../__pycache__/wheel.cpython-312.pyc | Bin 2289 -> 2289 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 273 -> 273 bytes .../__pycache__/collector.cpython-312.pyc | Bin 21927 -> 21927 bytes .../package_finder.cpython-312.pyc | Bin 40776 -> 40776 bytes .../index/__pycache__/sources.cpython-312.pyc | Bin 12645 -> 12645 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 16817 -> 16817 bytes .../__pycache__/_distutils.cpython-312.pyc | Bin 6897 -> 6897 bytes .../__pycache__/_sysconfig.cpython-312.pyc | Bin 8052 -> 8052 bytes .../__pycache__/base.cpython-312.pyc | Bin 3822 -> 3822 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 5923 -> 5923 bytes .../__pycache__/_json.cpython-312.pyc | Bin 2916 -> 2916 bytes .../metadata/__pycache__/base.cpython-312.pyc | Bin 35753 -> 35753 bytes .../__pycache__/pkg_resources.cpython-312.pyc | Bin 15831 -> 15831 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 399 -> 399 bytes .../__pycache__/_compat.cpython-312.pyc | Bin 3374 -> 3374 bytes .../__pycache__/_dists.cpython-312.pyc | Bin 13466 -> 13466 bytes .../__pycache__/_envs.cpython-312.pyc | Bin 11221 -> 11221 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 307 -> 307 bytes .../__pycache__/candidate.cpython-312.pyc | Bin 1946 -> 1946 bytes .../__pycache__/direct_url.cpython-312.pyc | Bin 11240 -> 11240 bytes .../format_control.cpython-312.pyc | Bin 4268 -> 4268 bytes .../models/__pycache__/index.cpython-312.pyc | Bin 1735 -> 1735 bytes .../installation_report.cpython-312.pyc | Bin 2313 -> 2313 bytes .../models/__pycache__/link.cpython-312.pyc | Bin 26043 -> 26043 bytes .../models/__pycache__/scheme.cpython-312.pyc | Bin 1210 -> 1210 bytes .../__pycache__/search_scope.cpython-312.pyc | Bin 5129 -> 5129 bytes .../selection_prefs.cpython-312.pyc | Bin 1892 -> 1892 bytes .../__pycache__/target_python.cpython-312.pyc | Bin 4995 -> 4995 bytes .../models/__pycache__/wheel.cpython-312.pyc | Bin 5821 -> 5821 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 295 -> 295 bytes .../network/__pycache__/auth.cpython-312.pyc | Bin 22037 -> 22037 bytes .../network/__pycache__/cache.cpython-312.pyc | Bin 6559 -> 6559 bytes .../__pycache__/download.cpython-312.pyc | Bin 8594 -> 8594 bytes .../__pycache__/lazy_wheel.cpython-312.pyc | Bin 11704 -> 11704 bytes .../__pycache__/session.cpython-312.pyc | Bin 18815 -> 18815 bytes .../network/__pycache__/utils.cpython-312.pyc | Bin 2294 -> 2294 bytes .../__pycache__/xmlrpc.cpython-312.pyc | Bin 2990 -> 2990 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 238 -> 238 bytes .../__pycache__/check.cpython-312.pyc | Bin 7620 -> 7620 bytes .../__pycache__/freeze.cpython-312.pyc | Bin 10158 -> 10158 bytes .../__pycache__/prepare.cpython-312.pyc | Bin 25788 -> 25788 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 244 -> 244 bytes .../__pycache__/build_tracker.cpython-312.pyc | Bin 7864 -> 7864 bytes .../__pycache__/metadata.cpython-312.pyc | Bin 1921 -> 1921 bytes .../metadata_editable.cpython-312.pyc | Bin 1955 -> 1955 bytes .../metadata_legacy.cpython-312.pyc | Bin 3106 -> 3106 bytes .../build/__pycache__/wheel.cpython-312.pyc | Bin 1725 -> 1725 bytes .../wheel_editable.cpython-312.pyc | Bin 2066 -> 2066 bytes .../__pycache__/wheel_legacy.cpython-312.pyc | Bin 3970 -> 3970 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 307 -> 307 bytes .../editable_legacy.cpython-312.pyc | Bin 1858 -> 1858 bytes .../install/__pycache__/wheel.cpython-312.pyc | Bin 33900 -> 33900 bytes .../req/__pycache__/__init__.cpython-312.pyc | Bin 3784 -> 3784 bytes .../__pycache__/constructors.cpython-312.pyc | Bin 21623 -> 21623 bytes .../req/__pycache__/req_file.cpython-312.pyc | Bin 21502 -> 21502 bytes .../__pycache__/req_install.cpython-312.pyc | Bin 38455 -> 38455 bytes .../req/__pycache__/req_set.cpython-312.pyc | Bin 7259 -> 7259 bytes .../__pycache__/req_uninstall.cpython-312.pyc | Bin 33018 -> 33018 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 238 -> 238 bytes .../__pycache__/base.cpython-312.pyc | Bin 1226 -> 1226 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 245 -> 245 bytes .../__pycache__/resolver.cpython-312.pyc | Bin 22480 -> 22480 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 249 -> 249 bytes .../__pycache__/base.cpython-312.pyc | Bin 8378 -> 8378 bytes .../__pycache__/candidates.cpython-312.pyc | Bin 30439 -> 30439 bytes .../__pycache__/factory.cpython-312.pyc | Bin 32155 -> 32155 bytes .../found_candidates.cpython-312.pyc | Bin 6249 -> 6249 bytes .../__pycache__/provider.cpython-312.pyc | Bin 10419 -> 10419 bytes .../__pycache__/reporter.cpython-312.pyc | Bin 4976 -> 4976 bytes .../__pycache__/requirements.cpython-312.pyc | Bin 11470 -> 11470 bytes .../__pycache__/resolver.cpython-312.pyc | Bin 12392 -> 12392 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 233 -> 233 bytes .../__pycache__/_jaraco_text.cpython-312.pyc | Bin 4574 -> 4574 bytes .../utils/__pycache__/_log.cpython-312.pyc | Bin 1904 -> 1904 bytes .../utils/__pycache__/appdirs.cpython-312.pyc | Bin 2448 -> 2448 bytes .../utils/__pycache__/compat.cpython-312.pyc | Bin 2251 -> 2251 bytes .../compatibility_tags.cpython-312.pyc | Bin 5599 -> 5599 bytes .../__pycache__/datetime.cpython-312.pyc | Bin 722 -> 722 bytes .../__pycache__/deprecation.cpython-312.pyc | Bin 4224 -> 4224 bytes .../direct_url_helpers.cpython-312.pyc | Bin 3601 -> 3601 bytes .../__pycache__/egg_link.cpython-312.pyc | Bin 3264 -> 3264 bytes .../__pycache__/encoding.cpython-312.pyc | Bin 2196 -> 2196 bytes .../__pycache__/entrypoints.cpython-312.pyc | Bin 4031 -> 4031 bytes .../__pycache__/filesystem.cpython-312.pyc | Bin 7496 -> 7496 bytes .../__pycache__/filetypes.cpython-312.pyc | Bin 1202 -> 1202 bytes .../utils/__pycache__/glibc.cpython-312.pyc | Bin 2380 -> 2380 bytes .../utils/__pycache__/hashes.cpython-312.pyc | Bin 7592 -> 7592 bytes .../utils/__pycache__/logging.cpython-312.pyc | Bin 13595 -> 13595 bytes .../utils/__pycache__/misc.cpython-312.pyc | Bin 34159 -> 34159 bytes .../utils/__pycache__/models.cpython-312.pyc | Bin 2750 -> 2750 bytes .../__pycache__/packaging.cpython-312.pyc | Bin 2621 -> 2621 bytes .../setuptools_build.cpython-312.pyc | Bin 4588 -> 4588 bytes .../__pycache__/subprocess.cpython-312.pyc | Bin 8756 -> 8756 bytes .../__pycache__/temp_dir.cpython-312.pyc | Bin 12100 -> 12100 bytes .../__pycache__/unpacking.cpython-312.pyc | Bin 11146 -> 11146 bytes .../utils/__pycache__/urls.cpython-312.pyc | Bin 2443 -> 2443 bytes .../__pycache__/virtualenv.cpython-312.pyc | Bin 4518 -> 4518 bytes .../utils/__pycache__/wheel.cpython-312.pyc | Bin 5964 -> 5964 bytes .../vcs/__pycache__/__init__.cpython-312.pyc | Bin 572 -> 572 bytes .../vcs/__pycache__/bazaar.cpython-312.pyc | Bin 5064 -> 5064 bytes .../vcs/__pycache__/git.cpython-312.pyc | Bin 19033 -> 19033 bytes .../vcs/__pycache__/mercurial.cpython-312.pyc | Bin 7653 -> 7653 bytes .../__pycache__/subversion.cpython-312.pyc | Bin 12525 -> 12525 bytes .../versioncontrol.cpython-312.pyc | Bin 29051 -> 29051 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 4734 -> 4734 bytes .../_vendor/__pycache__/six.cpython-312.pyc | Bin 41311 -> 41311 bytes .../typing_extensions.cpython-312.pyc | Bin 122091 -> 122091 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 944 -> 944 bytes .../__pycache__/_cmd.cpython-312.pyc | Bin 2688 -> 2688 bytes .../__pycache__/adapter.cpython-312.pyc | Bin 6506 -> 6506 bytes .../__pycache__/cache.cpython-312.pyc | Bin 3851 -> 3851 bytes .../__pycache__/controller.cpython-312.pyc | Bin 16209 -> 16209 bytes .../__pycache__/filewrapper.cpython-312.pyc | Bin 4389 -> 4389 bytes .../__pycache__/heuristics.cpython-312.pyc | Bin 6736 -> 6736 bytes .../__pycache__/serialize.cpython-312.pyc | Bin 6447 -> 6447 bytes .../__pycache__/wrapper.cpython-312.pyc | Bin 1716 -> 1716 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 477 -> 477 bytes .../__pycache__/file_cache.cpython-312.pyc | Bin 7752 -> 7752 bytes .../__pycache__/redis_cache.cpython-312.pyc | Bin 2780 -> 2780 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 360 -> 360 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 687 -> 687 bytes .../certifi/__pycache__/core.cpython-312.pyc | Bin 2891 -> 2891 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 4610 -> 4610 bytes .../__pycache__/big5freq.cpython-312.pyc | Bin 27241 -> 27241 bytes .../__pycache__/big5prober.cpython-312.pyc | Bin 1429 -> 1429 bytes .../chardistribution.cpython-312.pyc | Bin 9680 -> 9680 bytes .../charsetgroupprober.cpython-312.pyc | Bin 4164 -> 4164 bytes .../__pycache__/charsetprober.cpython-312.pyc | Bin 5060 -> 5060 bytes .../codingstatemachine.cpython-312.pyc | Bin 3920 -> 3920 bytes .../codingstatemachinedict.cpython-312.pyc | Bin 831 -> 831 bytes .../__pycache__/cp949prober.cpython-312.pyc | Bin 1438 -> 1438 bytes .../chardet/__pycache__/enums.cpython-312.pyc | Bin 3038 -> 3038 bytes .../__pycache__/escprober.cpython-312.pyc | Bin 4608 -> 4608 bytes .../chardet/__pycache__/escsm.cpython-312.pyc | Bin 15352 -> 15352 bytes .../__pycache__/eucjpprober.cpython-312.pyc | Bin 4425 -> 4425 bytes .../__pycache__/euckrfreq.cpython-312.pyc | Bin 12124 -> 12124 bytes .../__pycache__/euckrprober.cpython-312.pyc | Bin 1432 -> 1432 bytes .../__pycache__/euctwfreq.cpython-312.pyc | Bin 27246 -> 27246 bytes .../__pycache__/euctwprober.cpython-312.pyc | Bin 1432 -> 1432 bytes .../__pycache__/gb2312freq.cpython-312.pyc | Bin 19168 -> 19168 bytes .../__pycache__/gb2312prober.cpython-312.pyc | Bin 1445 -> 1445 bytes .../__pycache__/hebrewprober.cpython-312.pyc | Bin 5864 -> 5864 bytes .../__pycache__/jisfreq.cpython-312.pyc | Bin 22197 -> 22197 bytes .../__pycache__/johabfreq.cpython-312.pyc | Bin 83045 -> 83045 bytes .../__pycache__/johabprober.cpython-312.pyc | Bin 1436 -> 1436 bytes .../__pycache__/jpcntx.cpython-312.pyc | Bin 39591 -> 39591 bytes .../langbulgarianmodel.cpython-312.pyc | Bin 83164 -> 83164 bytes .../langgreekmodel.cpython-312.pyc | Bin 77030 -> 77030 bytes .../langhebrewmodel.cpython-312.pyc | Bin 77541 -> 77541 bytes .../langhungarianmodel.cpython-312.pyc | Bin 83118 -> 83118 bytes .../langrussianmodel.cpython-312.pyc | Bin 105293 -> 105293 bytes .../__pycache__/langthaimodel.cpython-312.pyc | Bin 77719 -> 77719 bytes .../langturkishmodel.cpython-312.pyc | Bin 77558 -> 77558 bytes .../__pycache__/latin1prober.cpython-312.pyc | Bin 7044 -> 7044 bytes .../macromanprober.cpython-312.pyc | Bin 7224 -> 7224 bytes .../mbcharsetprober.cpython-312.pyc | Bin 3945 -> 3945 bytes .../mbcsgroupprober.cpython-312.pyc | Bin 1630 -> 1630 bytes .../__pycache__/mbcssm.cpython-312.pyc | Bin 38687 -> 38687 bytes .../__pycache__/resultdict.cpython-312.pyc | Bin 674 -> 674 bytes .../sbcharsetprober.cpython-312.pyc | Bin 6429 -> 6429 bytes .../sbcsgroupprober.cpython-312.pyc | Bin 2399 -> 2399 bytes .../__pycache__/sjisprober.cpython-312.pyc | Bin 4537 -> 4537 bytes .../universaldetector.cpython-312.pyc | Bin 12311 -> 12311 bytes .../__pycache__/utf1632prober.cpython-312.pyc | Bin 10021 -> 10021 bytes .../__pycache__/utf8prober.cpython-312.pyc | Bin 3217 -> 3217 bytes .../__pycache__/version.cpython-312.pyc | Bin 530 -> 530 bytes .../cli/__pycache__/__init__.cpython-312.pyc | Bin 237 -> 237 bytes .../__pycache__/chardetect.cpython-312.pyc | Bin 4054 -> 4054 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 242 -> 242 bytes .../__pycache__/languages.cpython-312.pyc | Bin 9797 -> 9797 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 534 -> 534 bytes .../colorama/__pycache__/ansi.cpython-312.pyc | Bin 3992 -> 3992 bytes .../__pycache__/ansitowin32.cpython-312.pyc | Bin 16463 -> 16463 bytes .../__pycache__/initialise.cpython-312.pyc | Bin 3592 -> 3592 bytes .../__pycache__/win32.cpython-312.pyc | Bin 8168 -> 8168 bytes .../__pycache__/winterm.cpython-312.pyc | Bin 9130 -> 9130 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 240 -> 240 bytes .../__pycache__/ansi_test.cpython-312.pyc | Bin 5509 -> 5509 bytes .../ansitowin32_test.cpython-312.pyc | Bin 18145 -> 18145 bytes .../initialise_test.cpython-312.pyc | Bin 11790 -> 11790 bytes .../__pycache__/isatty_test.cpython-312.pyc | Bin 4946 -> 4946 bytes .../tests/__pycache__/utils.cpython-312.pyc | Bin 2530 -> 2530 bytes .../__pycache__/winterm_test.cpython-312.pyc | Bin 6654 -> 6654 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 1311 -> 1311 bytes .../__pycache__/compat.cpython-312.pyc | Bin 45647 -> 45647 bytes .../__pycache__/database.cpython-312.pyc | Bin 66069 -> 66069 bytes .../distlib/__pycache__/index.cpython-312.pyc | Bin 24408 -> 24408 bytes .../__pycache__/locators.cpython-312.pyc | Bin 60200 -> 60200 bytes .../__pycache__/manifest.cpython-312.pyc | Bin 15167 -> 15167 bytes .../__pycache__/markers.cpython-312.pyc | Bin 7724 -> 7724 bytes .../__pycache__/metadata.cpython-312.pyc | Bin 41841 -> 41841 bytes .../__pycache__/resources.cpython-312.pyc | Bin 17367 -> 17367 bytes .../__pycache__/scripts.cpython-312.pyc | Bin 19622 -> 19622 bytes .../distlib/__pycache__/util.cpython-312.pyc | Bin 88298 -> 88298 bytes .../__pycache__/version.cpython-312.pyc | Bin 30408 -> 30408 bytes .../distlib/__pycache__/wheel.cpython-312.pyc | Bin 51903 -> 51903 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 1002 -> 1002 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 334 -> 334 bytes .../distro/__pycache__/distro.cpython-312.pyc | Bin 53796 -> 53796 bytes .../idna/__pycache__/__init__.cpython-312.pyc | Bin 923 -> 923 bytes .../idna/__pycache__/codec.cpython-312.pyc | Bin 4675 -> 4675 bytes .../idna/__pycache__/compat.cpython-312.pyc | Bin 929 -> 929 bytes .../idna/__pycache__/core.cpython-312.pyc | Bin 16324 -> 16324 bytes .../idna/__pycache__/idnadata.cpython-312.pyc | Bin 38424 -> 38424 bytes .../__pycache__/intranges.cpython-312.pyc | Bin 2680 -> 2680 bytes .../__pycache__/package_data.cpython-312.pyc | Bin 258 -> 258 bytes .../__pycache__/uts46data.cpython-312.pyc | Bin 158912 -> 158912 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 1873 -> 1873 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 2067 -> 2067 bytes .../msgpack/__pycache__/ext.cpython-312.pyc | Bin 8710 -> 8710 bytes .../__pycache__/fallback.cpython-312.pyc | Bin 43618 -> 43618 bytes .../__pycache__/__about__.cpython-312.pyc | Bin 672 -> 672 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 508 -> 508 bytes .../__pycache__/_manylinux.cpython-312.pyc | Bin 12118 -> 12118 bytes .../__pycache__/_musllinux.cpython-312.pyc | Bin 6952 -> 6952 bytes .../__pycache__/_structures.cpython-312.pyc | Bin 3283 -> 3283 bytes .../__pycache__/markers.cpython-312.pyc | Bin 14100 -> 14100 bytes .../__pycache__/requirements.cpython-312.pyc | Bin 6988 -> 6988 bytes .../__pycache__/specifiers.cpython-312.pyc | Bin 31289 -> 31289 bytes .../__pycache__/tags.cpython-312.pyc | Bin 18998 -> 18998 bytes .../__pycache__/utils.cpython-312.pyc | Bin 5910 -> 5910 bytes .../__pycache__/version.cpython-312.pyc | Bin 19981 -> 19981 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 146516 -> 146516 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 18071 -> 18071 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 1988 -> 1988 bytes .../__pycache__/android.cpython-312.pyc | Bin 9486 -> 9486 bytes .../__pycache__/api.cpython-312.pyc | Bin 9714 -> 9714 bytes .../__pycache__/macos.cpython-312.pyc | Bin 5679 -> 5679 bytes .../__pycache__/unix.cpython-312.pyc | Bin 12483 -> 12483 bytes .../__pycache__/version.cpython-312.pyc | Bin 353 -> 353 bytes .../__pycache__/windows.cpython-312.pyc | Bin 13041 -> 13041 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 3531 -> 3531 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 777 -> 777 bytes .../__pycache__/cmdline.cpython-312.pyc | Bin 26648 -> 26648 bytes .../__pycache__/console.cpython-312.pyc | Bin 2669 -> 2669 bytes .../__pycache__/filter.cpython-312.pyc | Bin 3275 -> 3275 bytes .../__pycache__/formatter.cpython-312.pyc | Bin 4612 -> 4612 bytes .../__pycache__/lexer.cpython-312.pyc | Bin 38372 -> 38372 bytes .../__pycache__/modeline.cpython-312.pyc | Bin 1611 -> 1611 bytes .../__pycache__/plugin.cpython-312.pyc | Bin 3439 -> 3439 bytes .../__pycache__/regexopt.cpython-312.pyc | Bin 4124 -> 4124 bytes .../__pycache__/scanner.cpython-312.pyc | Bin 4799 -> 4799 bytes .../__pycache__/sphinxext.cpython-312.pyc | Bin 11089 -> 11089 bytes .../__pycache__/style.cpython-312.pyc | Bin 6717 -> 6717 bytes .../__pycache__/token.cpython-312.pyc | Bin 8185 -> 8185 bytes .../__pycache__/unistring.cpython-312.pyc | Bin 33031 -> 33031 bytes .../pygments/__pycache__/util.cpython-312.pyc | Bin 14024 -> 14024 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 37979 -> 37979 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 6969 -> 6969 bytes .../__pycache__/_mapping.cpython-312.pyc | Bin 4258 -> 4258 bytes .../__pycache__/bbcode.cpython-312.pyc | Bin 4237 -> 4237 bytes .../__pycache__/groff.cpython-312.pyc | Bin 7307 -> 7307 bytes .../__pycache__/html.cpython-312.pyc | Bin 40615 -> 40615 bytes .../__pycache__/img.cpython-312.pyc | Bin 27086 -> 27086 bytes .../__pycache__/irc.cpython-312.pyc | Bin 6108 -> 6108 bytes .../__pycache__/latex.cpython-312.pyc | Bin 19997 -> 19997 bytes .../__pycache__/other.cpython-312.pyc | Bin 6927 -> 6927 bytes .../__pycache__/pangomarkup.cpython-312.pyc | Bin 2973 -> 2973 bytes .../__pycache__/rtf.cpython-312.pyc | Bin 6169 -> 6169 bytes .../__pycache__/svg.cpython-312.pyc | Bin 9109 -> 9109 bytes .../__pycache__/terminal.cpython-312.pyc | Bin 5872 -> 5872 bytes .../__pycache__/terminal256.cpython-312.pyc | Bin 15200 -> 15200 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 14695 -> 14695 bytes .../__pycache__/_mapping.cpython-312.pyc | Bin 64447 -> 64447 bytes .../lexers/__pycache__/python.cpython-312.pyc | Bin 42682 -> 42682 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 4491 -> 4491 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 7954 -> 7954 bytes .../__pycache__/actions.cpython-312.pyc | Bin 8438 -> 8438 bytes .../__pycache__/common.cpython-312.pyc | Bin 13457 -> 13457 bytes .../__pycache__/core.cpython-312.pyc | Bin 267751 -> 267751 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 13037 -> 13037 bytes .../__pycache__/helpers.cpython-312.pyc | Bin 48544 -> 48544 bytes .../__pycache__/results.cpython-312.pyc | Bin 34153 -> 34153 bytes .../__pycache__/testing.cpython-312.pyc | Bin 17231 -> 17231 bytes .../__pycache__/unicode.cpython-312.pyc | Bin 13227 -> 13227 bytes .../__pycache__/util.cpython-312.pyc | Bin 14947 -> 14947 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 26856 -> 26856 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 656 -> 656 bytes .../__pycache__/_compat.cpython-312.pyc | Bin 417 -> 417 bytes .../__pycache__/_impl.cpython-312.pyc | Bin 14768 -> 14768 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 1123 -> 1123 bytes .../__pycache__/_in_process.cpython-312.pyc | Bin 14440 -> 14440 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 5496 -> 5496 bytes .../__pycache__/__version__.cpython-312.pyc | Bin 627 -> 627 bytes .../_internal_utils.cpython-312.pyc | Bin 2067 -> 2067 bytes .../__pycache__/adapters.cpython-312.pyc | Bin 21323 -> 21323 bytes .../requests/__pycache__/api.cpython-312.pyc | Bin 7247 -> 7247 bytes .../requests/__pycache__/auth.cpython-312.pyc | Bin 13966 -> 13966 bytes .../__pycache__/certs.cpython-312.pyc | Bin 965 -> 965 bytes .../__pycache__/compat.cpython-312.pyc | Bin 1550 -> 1550 bytes .../__pycache__/cookies.cpython-312.pyc | Bin 25289 -> 25289 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 7090 -> 7090 bytes .../requests/__pycache__/help.cpython-312.pyc | Bin 4355 -> 4355 bytes .../__pycache__/hooks.cpython-312.pyc | Bin 1095 -> 1095 bytes .../__pycache__/models.cpython-312.pyc | Bin 35491 -> 35491 bytes .../__pycache__/packages.cpython-312.pyc | Bin 815 -> 815 bytes .../__pycache__/sessions.cpython-312.pyc | Bin 27800 -> 27800 bytes .../__pycache__/status_codes.cpython-312.pyc | Bin 6002 -> 6002 bytes .../__pycache__/structures.cpython-312.pyc | Bin 5660 -> 5660 bytes .../__pycache__/utils.cpython-312.pyc | Bin 36312 -> 36312 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 677 -> 677 bytes .../__pycache__/providers.cpython-312.pyc | Bin 6894 -> 6894 bytes .../__pycache__/reporters.cpython-312.pyc | Bin 2697 -> 2697 bytes .../__pycache__/resolvers.cpython-312.pyc | Bin 25940 -> 25940 bytes .../__pycache__/structs.cpython-312.pyc | Bin 10549 -> 10549 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 243 -> 243 bytes .../collections_abc.cpython-312.pyc | Bin 463 -> 463 bytes .../rich/__pycache__/__init__.cpython-312.pyc | Bin 7058 -> 7058 bytes .../rich/__pycache__/__main__.cpython-312.pyc | Bin 10347 -> 10347 bytes .../__pycache__/_cell_widths.cpython-312.pyc | Bin 7864 -> 7864 bytes .../__pycache__/_emoji_codes.cpython-312.pyc | Bin 206019 -> 206019 bytes .../_emoji_replace.cpython-312.pyc | Bin 1772 -> 1772 bytes .../_export_format.cpython-312.pyc | Bin 2364 -> 2364 bytes .../__pycache__/_extension.cpython-312.pyc | Bin 580 -> 580 bytes .../rich/__pycache__/_fileno.cpython-312.pyc | Bin 898 -> 898 bytes .../rich/__pycache__/_inspect.cpython-312.pyc | Bin 12120 -> 12120 bytes .../__pycache__/_log_render.cpython-312.pyc | Bin 4190 -> 4190 bytes .../rich/__pycache__/_loop.cpython-312.pyc | Bin 1928 -> 1928 bytes .../__pycache__/_null_file.cpython-312.pyc | Bin 3663 -> 3663 bytes .../__pycache__/_palettes.cpython-312.pyc | Bin 5203 -> 5203 bytes .../rich/__pycache__/_pick.cpython-312.pyc | Bin 769 -> 769 bytes .../rich/__pycache__/_ratio.cpython-312.pyc | Bin 6622 -> 6622 bytes .../__pycache__/_spinners.cpython-312.pyc | Bin 13222 -> 13222 bytes .../rich/__pycache__/_stack.cpython-312.pyc | Bin 1008 -> 1008 bytes .../rich/__pycache__/_timer.cpython-312.pyc | Bin 908 -> 908 bytes .../_win32_console.cpython-312.pyc | Bin 29019 -> 29019 bytes .../rich/__pycache__/_windows.cpython-312.pyc | Bin 2533 -> 2533 bytes .../_windows_renderer.cpython-312.pyc | Bin 3616 -> 3616 bytes .../rich/__pycache__/_wrap.cpython-312.pyc | Bin 2403 -> 2403 bytes .../rich/__pycache__/abc.cpython-312.pyc | Bin 1651 -> 1651 bytes .../rich/__pycache__/align.cpython-312.pyc | Bin 12365 -> 12365 bytes .../rich/__pycache__/ansi.cpython-312.pyc | Bin 9149 -> 9149 bytes .../rich/__pycache__/bar.cpython-312.pyc | Bin 4315 -> 4315 bytes .../rich/__pycache__/box.cpython-312.pyc | Bin 11901 -> 11901 bytes .../rich/__pycache__/cells.cpython-312.pyc | Bin 5661 -> 5661 bytes .../rich/__pycache__/color.cpython-312.pyc | Bin 26613 -> 26613 bytes .../__pycache__/color_triplet.cpython-312.pyc | Bin 1744 -> 1744 bytes .../rich/__pycache__/columns.cpython-312.pyc | Bin 8630 -> 8630 bytes .../rich/__pycache__/console.cpython-312.pyc | Bin 113836 -> 113836 bytes .../__pycache__/constrain.cpython-312.pyc | Bin 2301 -> 2301 bytes .../__pycache__/containers.cpython-312.pyc | Bin 9269 -> 9269 bytes .../rich/__pycache__/control.cpython-312.pyc | Bin 10972 -> 10972 bytes .../default_styles.cpython-312.pyc | Bin 10416 -> 10416 bytes .../rich/__pycache__/diagnose.cpython-312.pyc | Bin 1530 -> 1530 bytes .../rich/__pycache__/emoji.cpython-312.pyc | Bin 4252 -> 4252 bytes .../rich/__pycache__/errors.cpython-312.pyc | Bin 1888 -> 1888 bytes .../__pycache__/file_proxy.cpython-312.pyc | Bin 3620 -> 3620 bytes .../rich/__pycache__/filesize.cpython-312.pyc | Bin 3125 -> 3125 bytes .../__pycache__/highlighter.cpython-312.pyc | Bin 9941 -> 9941 bytes .../rich/__pycache__/json.cpython-312.pyc | Bin 6078 -> 6078 bytes .../rich/__pycache__/jupyter.cpython-312.pyc | Bin 5252 -> 5252 bytes .../rich/__pycache__/layout.cpython-312.pyc | Bin 20263 -> 20263 bytes .../rich/__pycache__/live.cpython-312.pyc | Bin 19186 -> 19186 bytes .../__pycache__/live_render.cpython-312.pyc | Bin 4937 -> 4937 bytes .../rich/__pycache__/logging.cpython-312.pyc | Bin 13597 -> 13597 bytes .../rich/__pycache__/markup.cpython-312.pyc | Bin 9341 -> 9341 bytes .../rich/__pycache__/measure.cpython-312.pyc | Bin 6419 -> 6419 bytes .../rich/__pycache__/padding.cpython-312.pyc | Bin 7177 -> 7177 bytes .../rich/__pycache__/pager.cpython-312.pyc | Bin 1863 -> 1863 bytes .../rich/__pycache__/palette.cpython-312.pyc | Bin 5357 -> 5357 bytes .../rich/__pycache__/panel.cpython-312.pyc | Bin 12140 -> 12140 bytes .../rich/__pycache__/pretty.cpython-312.pyc | Bin 40099 -> 40099 bytes .../rich/__pycache__/progress.cpython-312.pyc | Bin 75121 -> 75121 bytes .../__pycache__/progress_bar.cpython-312.pyc | Bin 10432 -> 10432 bytes .../rich/__pycache__/prompt.cpython-312.pyc | Bin 14824 -> 14824 bytes .../rich/__pycache__/protocol.cpython-312.pyc | Bin 1835 -> 1835 bytes .../rich/__pycache__/region.cpython-312.pyc | Bin 610 -> 610 bytes .../rich/__pycache__/repr.cpython-312.pyc | Bin 6669 -> 6669 bytes .../rich/__pycache__/rule.cpython-312.pyc | Bin 6611 -> 6611 bytes .../rich/__pycache__/scope.cpython-312.pyc | Bin 3873 -> 3873 bytes .../rich/__pycache__/screen.cpython-312.pyc | Bin 2527 -> 2527 bytes .../rich/__pycache__/segment.cpython-312.pyc | Bin 28204 -> 28204 bytes .../rich/__pycache__/spinner.cpython-312.pyc | Bin 6107 -> 6107 bytes .../rich/__pycache__/status.cpython-312.pyc | Bin 6111 -> 6111 bytes .../rich/__pycache__/style.cpython-312.pyc | Bin 33557 -> 33557 bytes .../rich/__pycache__/styled.cpython-312.pyc | Bin 2182 -> 2182 bytes .../rich/__pycache__/syntax.cpython-312.pyc | Bin 39655 -> 39655 bytes .../rich/__pycache__/table.cpython-312.pyc | Bin 43627 -> 43627 bytes .../terminal_theme.cpython-312.pyc | Bin 3391 -> 3391 bytes .../rich/__pycache__/text.cpython-312.pyc | Bin 59006 -> 59006 bytes .../rich/__pycache__/theme.cpython-312.pyc | Bin 6383 -> 6383 bytes .../rich/__pycache__/themes.cpython-312.pyc | Bin 357 -> 357 bytes .../__pycache__/traceback.cpython-312.pyc | Bin 31591 -> 31591 bytes .../rich/__pycache__/tree.cpython-312.pyc | Bin 11482 -> 11482 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 27129 -> 27129 bytes .../__pycache__/_asyncio.cpython-312.pyc | Bin 4849 -> 4849 bytes .../__pycache__/_utils.cpython-312.pyc | Bin 2358 -> 2358 bytes .../__pycache__/after.cpython-312.pyc | Bin 1667 -> 1667 bytes .../__pycache__/before.cpython-312.pyc | Bin 1507 -> 1507 bytes .../__pycache__/before_sleep.cpython-312.pyc | Bin 2345 -> 2345 bytes .../tenacity/__pycache__/nap.cpython-312.pyc | Bin 1455 -> 1455 bytes .../__pycache__/retry.cpython-312.pyc | Bin 14324 -> 14324 bytes .../tenacity/__pycache__/stop.cpython-312.pyc | Bin 5611 -> 5611 bytes .../__pycache__/tornadoweb.cpython-312.pyc | Bin 2629 -> 2629 bytes .../tenacity/__pycache__/wait.cpython-312.pyc | Bin 12456 -> 12456 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 427 -> 427 bytes .../tomli/__pycache__/_parser.cpython-312.pyc | Bin 26970 -> 26970 bytes .../tomli/__pycache__/_re.cpython-312.pyc | Bin 3951 -> 3951 bytes .../tomli/__pycache__/_types.cpython-312.pyc | Bin 409 -> 409 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 661 -> 661 bytes .../__pycache__/_api.cpython-312.pyc | Bin 15840 -> 15840 bytes .../__pycache__/_macos.cpython-312.pyc | Bin 16705 -> 16705 bytes .../__pycache__/_openssl.cpython-312.pyc | Bin 2258 -> 2258 bytes .../_ssl_constants.cpython-312.pyc | Bin 1142 -> 1142 bytes .../__pycache__/_windows.cpython-312.pyc | Bin 15549 -> 15549 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 3448 -> 3448 bytes .../__pycache__/_collections.cpython-312.pyc | Bin 15974 -> 15974 bytes .../__pycache__/_version.cpython-312.pyc | Bin 261 -> 261 bytes .../__pycache__/connection.cpython-312.pyc | Bin 20450 -> 20450 bytes .../connectionpool.cpython-312.pyc | Bin 36322 -> 36322 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 13536 -> 13536 bytes .../__pycache__/fields.cpython-312.pyc | Bin 10452 -> 10452 bytes .../__pycache__/filepost.cpython-312.pyc | Bin 4061 -> 4061 bytes .../__pycache__/poolmanager.cpython-312.pyc | Bin 20345 -> 20345 bytes .../__pycache__/request.cpython-312.pyc | Bin 7337 -> 7337 bytes .../__pycache__/response.cpython-312.pyc | Bin 34011 -> 34011 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 241 -> 241 bytes .../_appengine_environ.cpython-312.pyc | Bin 1891 -> 1891 bytes .../__pycache__/appengine.cpython-312.pyc | Bin 11607 -> 11607 bytes .../__pycache__/ntlmpool.cpython-312.pyc | Bin 5762 -> 5762 bytes .../__pycache__/pyopenssl.cpython-312.pyc | Bin 24493 -> 24493 bytes .../securetransport.cpython-312.pyc | Bin 35599 -> 35599 bytes .../contrib/__pycache__/socks.cpython-312.pyc | Bin 7554 -> 7554 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 258 -> 258 bytes .../__pycache__/bindings.cpython-312.pyc | Bin 17470 -> 17470 bytes .../__pycache__/low_level.cpython-312.pyc | Bin 14844 -> 14844 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 242 -> 242 bytes .../packages/__pycache__/six.cpython-312.pyc | Bin 41362 -> 41362 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 252 -> 252 bytes .../__pycache__/makefile.cpython-312.pyc | Bin 1868 -> 1868 bytes .../weakref_finalize.cpython-312.pyc | Bin 7374 -> 7374 bytes .../util/__pycache__/__init__.cpython-312.pyc | Bin 1189 -> 1189 bytes .../__pycache__/connection.cpython-312.pyc | Bin 4799 -> 4799 bytes .../util/__pycache__/proxy.cpython-312.pyc | Bin 1595 -> 1595 bytes .../util/__pycache__/queue.cpython-312.pyc | Bin 1395 -> 1395 bytes .../util/__pycache__/request.cpython-312.pyc | Bin 4226 -> 4226 bytes .../util/__pycache__/response.cpython-312.pyc | Bin 3032 -> 3032 bytes .../util/__pycache__/retry.cpython-312.pyc | Bin 21740 -> 21740 bytes .../util/__pycache__/ssl_.cpython-312.pyc | Bin 15146 -> 15146 bytes .../ssl_match_hostname.cpython-312.pyc | Bin 5114 -> 5114 bytes .../__pycache__/ssltransport.cpython-312.pyc | Bin 10815 -> 10815 bytes .../util/__pycache__/timeout.cpython-312.pyc | Bin 11182 -> 11182 bytes .../util/__pycache__/url.cpython-312.pyc | Bin 15838 -> 15838 bytes .../util/__pycache__/wait.cpython-312.pyc | Bin 4446 -> 4446 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 12044 -> 12044 bytes .../__pycache__/labels.cpython-312.pyc | Bin 7175 -> 7175 bytes .../__pycache__/mklabels.cpython-312.pyc | Bin 2742 -> 2742 bytes .../__pycache__/tests.cpython-312.pyc | Bin 9294 -> 9294 bytes .../x_user_defined.cpython-312.pyc | Bin 3338 -> 3338 bytes env_web/Scripts/pip.exe | Bin 108466 -> 108466 bytes env_web/Scripts/pip3.12.exe | Bin 108466 -> 108466 bytes env_web/Scripts/pip3.exe | Bin 108466 -> 108466 bytes forms/__pycache__/base.cpython-312.pyc | Bin 2499 -> 2499 bytes forms/base.py | 2 +- .../model_view_base.cpython-312.pyc | Bin 17421 -> 17619 bytes .../model_view_store.cpython-312.pyc | Bin 22454 -> 22454 bytes models/model_view_base.py | 14 +- models/model_view_store.py | 1 - static/MySQL/0000_combine.sql | 170 +-- .../1000_tbl_Shop_Product_Change_Set.sql | 2 +- .../MySQL/1001_tbl_Shop_User_Change_Set.sql | 2 +- ...l_Shop_Sales_And_Purchasing_Change_Set.sql | 2 +- static/MySQL/1003_tbl_Shop_Access_Level.sql | 2 +- static/MySQL/1010_tbl_File_Type.sql | 4 +- static/MySQL/1011_tbl_File_Type_Audit.sql | 4 +- static/MySQL/1012_tbl_Shop_General.sql | 2 +- static/MySQL/1014_tbl_Shop_Image_Type.sql | 2 +- static/MySQL/1100_tbl_Shop_Region.sql | 2 +- static/MySQL/1102_tbl_Shop_Region_Temp.sql | 2 +- static/MySQL/1103_tbl_Shop_Region_Branch.sql | 2 +- static/MySQL/1106_tbl_Shop_Address.sql | 2 +- static/MySQL/1106_tbl_Shop_Plant.sql | 2 +- .../MySQL/1109_tbl_Shop_Storage_Location.sql | 2 +- .../1112_tbl_Shop_Storage_Location_Branch.sql | 2 +- static/MySQL/1115_tbl_Shop_Currency.sql | 2 +- .../MySQL/1118_tbl_Shop_Tax_Or_Surcharge.sql | 2 +- .../MySQL/1121_tbl_Shop_Unit_Measurement.sql | 2 +- ...4_tbl_Shop_Unit_Measurement_Conversion.sql | 2 +- .../MySQL/1200_tbl_Shop_Product_Category.sql | 2 +- static/MySQL/1203_tbl_Shop_Product.sql | 2 +- .../1206_tbl_Shop_Product_Permutation.sql | 2 +- static/MySQL/1209_tbl_Shop_Variation_Type.sql | 2 +- static/MySQL/1212_tbl_Shop_Variation.sql | 2 +- ...hop_Product_Permutation_Variation_Link.sql | 2 +- static/MySQL/1221_tbl_Shop_Product_Price.sql | 2 +- static/MySQL/1224_tbl_Shop_Product_Image.sql | 2 +- .../MySQL/1227_tbl_Shop_Delivery_Option.sql | 2 +- ...oduct_Permutation_Delivery_Option_Link.sql | 2 +- static/MySQL/1233_tbl_Shop_Discount.sql | 6 +- ...tbl_Shop_Discount_Region_Currency_Link.sql | 2 +- .../MySQL/1300_tbl_Shop_Permission_Group.sql | 2 +- static/MySQL/1303_tbl_Shop_Permission.sql | 2 +- static/MySQL/1306_tbl_Shop_Role.sql | 2 +- .../1309_tbl_Shop_Role_Permission_Link.sql | 2 +- static/MySQL/1312_tbl_Shop_User.sql | 2 +- static/MySQL/1315_tbl_Shop_User_Role_Link.sql | 2 +- static/MySQL/1318_tbl_Shop_User_Address.sql | 2 +- static/MySQL/1321_tbl_Shop_User_Basket.sql | 2 +- static/MySQL/1397_tbl_Shop_Order_Status.sql | 2 +- static/MySQL/1400_tbl_Shop_Supplier.sql | 12 +- static/MySQL/1402_tbl_Shop_Supplier_Temp.sql | 18 + .../1409_tbl_Shop_Supplier_Purchase_Order.sql | 7 +- ..._tbl_Shop_Supplier_Purchase_Order_Temp.sql | 11 + ...p_Supplier_Purchase_Order_Product_Link.sql | 11 +- ...plier_Purchase_Order_Product_Link_Temp.sql | 36 +- ..._tbl_Shop_Manufacturing_Purchase_Order.sql | 4 +- ...ufacturing_Purchase_Order_Product_Link.sql | 4 +- static/MySQL/1421_tbl_Shop_Customer.sql | 2 +- .../1424_tbl_Shop_Customer_Sales_Order.sql | 4 +- ...Shop_Customer_Sales_Order_Product_Link.sql | 4 +- .../MySQL/6000_p_debug_timing_reporting.sql | 8 +- ...t_permutation_from_variation_csv_list.sql} | 0 .../7200_p_shop_save_product_category.sql | 4 +- .../7204_p_shop_calc_product_permutation.sql | 40 +- static/MySQL/7204_p_shop_get_many_product.sql | 2 +- .../7206_p_shop_save_product_permutation.sql | 4 +- .../MySQL/7219_p_shop_get_many_stock_item.sql | 4 +- static/MySQL/7220_p_shop_save_stock_item.sql | 70 +- ...price_and_discount_and_delivery_option.sql | 2 +- static/MySQL/7312_p_shop_save_user.sql | 2 +- static/MySQL/7313_p_get_many_user.sql | 2 +- static/MySQL/7321_p_shop_save_user_basket.sql | 2 +- static/MySQL/7400_p_shop_save_supplier.sql | 574 +++++---- .../MySQL/7401_p_shop_get_many_supplier.sql | 395 +++--- .../7403_p_save_supplier_purchase_order.sql | 1050 +++++++++------- ..._shop_get_many_supplier_purchase_order.sql | 985 ++++++--------- ...shop_save_manufacturing_purchase_order.sql | 1059 +++++++++-------- ..._get_many_manufacturing_purchase_order.sql | 864 +++++--------- .../MySQL/7422_p_shop_get_many_customer.sql | 2 +- ...5_p_shop_get_many_customer_sales_order.sql | 6 +- static/MySQL/9000_populate.sql | 1 + .../000_init_tables_authentication.sql | 18 +- .../deprecated/000_init_tables_product.sql | 38 +- .../108_tbl_Shop_Recurrence_Interval.sql | 2 +- ...1_tbl_Shop_Product_Variation_Type_Link.sql | 2 +- .../116_tbl_Shop_Product_Variation_Link.sql | 2 +- ..._tbl_Shop_Product_Delivery_Region_Link.sql | 2 +- .../deprecated/170_ish_tbl_ERP_Order.sql | 2 +- .../deprecated/171_tbl_Shop_User_Order.sql | 2 +- .../173_tbl_Shop_User_Order_Product_Link.sql | 2 +- .../7000_p_shop_get_many_role_permission.sql | 2 +- .../deprecated/706_p_shop_get_product.sql | 2 +- static/MySQL/deprecated/dump.sql | 8 +- static/MySQL/deprecated/dump2.sql | 8 +- static/dist/js/main.bundle.js | 2 +- static/js/api.js | 4 +- static/js/pages/base.js | 4 +- static/js/pages/store/basket.js | 10 +- static/js/pages/store/mixin.js | 6 +- templates/layouts/layout.html | 30 +- 621 files changed, 3023 insertions(+), 2945 deletions(-) create mode 100644 business_objects/store/supplier.py create mode 100644 datastores/datastore_store_supplier.py create mode 100644 static/MySQL/1402_tbl_Shop_Supplier_Temp.sql create mode 100644 static/MySQL/1411_tbl_Shop_Supplier_Purchase_Order_Temp.sql rename static/MySQL/{7210_fn_shop_get_id_product_permutation_from_variation_csv_list.sql => 6210_fn_shop_get_id_product_permutation_from_variation_csv_list.sql} (100%) diff --git a/business_objects/__pycache__/base.cpython-312.pyc b/business_objects/__pycache__/base.cpython-312.pyc index ad5c69b4e5ee9a1d5bf09cf101db09d2aeb294f3..bef2ca63dfc61b4c2fefa1c73b8ef14d252ca605 100644 GIT binary patch delta 703 zcmZ9GO=}ZT6oxaIX})KQSP?DS*obM2ZPXg2P$Wq^X%Z*X(j=xC!C}(5?F910odnZG zF@j*bk;J=+yDqJ+B!5EarZAf@OMie1S5iT|ceD~bi|3y6oR`b_GV^MdJ7HOm4VNfz zyFa|2xh7@5Ne{c!Tl-5jF5LnQn7D%1z@a9V@vE*#!7;aLIbNC@b4kmsNue>9vRqoa zJ?1jRxose^93mDl@>64)}qKKa_Kxj^tnnD6+=7j6RL>rd-Bu@dgD2c zJj17l82A7`aFO64L6lfKERg;=hHl63`(Y8u-WZicN8TlO2`e#l7v|Ad??{FzlFbkZ z1R}u(hUwj|D!N_+_-GYw5#!TaN~^N{SIH!)U>w^Z`4bii9OszAjsEl<`*YeK>}Gnd z!NopnFu~FFKsR-u_4LDKjnyIWVD`a&vly7cQQA32&3KP z1n!k4fj}cQS&9sRRFOW2Fai;VAW^0wZxA~KNE9;x2?d2BUm$f$YH}Qp)Z}m;MMlTT zl{}W5{y;%LP3jgfy7FN zB9KO+PlNSnzNyUNG h!?pk7u*uC&Da}c>D@vJsQ9zm3h>`0P1CRhK0RY1MShfHF diff --git a/business_objects/__pycache__/user.cpython-312.pyc b/business_objects/__pycache__/user.cpython-312.pyc index 1e34e0f0ad777735062f61b8e304561603c701ee..9ca0afc6b743182dd2f62c6ca1db788db9e2ceda 100644 GIT binary patch delta 2333 zcmbuATWl0n7=Y)@-ml%=?sj+Ey>@q72DdlxLJN^C6a$DFdf~D`CtGJ)x3s%(cDK}m zprM447)1XEkq3z3iGT)N9v~)QctU+?i3wz)FT@ZN305V>pb^hMTPPBi7w6%dbIyM` z|No!!&m127VbJ!i&1UAX9hhyZ)v#@zYUzB;l9%)#YCQfb;f*xGtfnF8uAYFZ5%yNG$MoQG z!qiY#-NOT&ptritd>p=~YMj%CpPt7n_0!xCkqlGDbc1A^;?e;*D4C|X)APrY4zaoU zk$G6MFs+DWWsFX96C~Z(#|bt?J5Z2m`J^sQ+-_z&X~TJ|C}wlnq9`_l(~u&I;DRMw z-f6f(pgZceN?eId5L!dHJv=U$C4PGk$0lM82&ONM4r*eas1t6Rn(HiVsPLI_#hlIU zC>6!Qe14RMK`sdScrr+s?XYg3nzG zuD=k!oV=L4>YVLbKdt@F=)X}@J8hx9@^Q-)zt4$&79*ZPpcjf!&@e*XuMJ1-2sMU> z+uzfdSoU3!Q%*GnMYn@yb46O!V+*=yMJ)L4tmd4$n4+Ljv?GOljxIr~r3?kukX$4Z zq297$f1MB?9Jl!SqXaHmHoytTEx2r}*Qw=(OEzE7xcvpS)DC8)K1H-wAISv2+C04Z zRoLsQTT7p3i;58w%I1dhil$H+RO_JF<*`h5R2*l5p{y*au`3*9emS~~LD14J99Kew zjV>QMkP%lKxdq2uUxaT2qt}CNv%$8r#hKvpYr!pFX|JbxXH&g1o3_lRwm`_?C%$r~ zwvYUuqnI>h3L;jjDI&|JY;&z>b_12MqooDypL?}d#!lh7(73zMdnb>Ixoewbx zM%n@$5wBD2h%8%Cv{I&+VPAr+k&q9&XyLM>)HFo%V0C}w*#|?-8B8UhfB8VuW5fMi;F$h+=i@g+ERubj$ z%xH<7c0Q+Qhf7(BRd;UDT9SZHp__ETZlRf-(n+C*`~^P=r`Yx%EiUk@-$qxH2(^B@ zakK~V4nqAX?#0nQ#Jh<15HB-4?1Hr|EyN7tEmv7xR<hTWvbJ3%+UFN?IV^zB#PQ|7&y4xMD0Xl}60vn5o^($T;+S6Y Y!Lmckj`ZJU|2yKCn*gP~U5nfN3mvTEaR2}S delta 2381 zcmbtVU2IcT9KYxG`@37ak9MW)+K%>)ZQVeHA?gOqfa6QHL1=EZcYO71F(f92#Kh=}5lqMpCZfi~7?X*{n8}0x|0y3+*wlC*e*K^G z|Nc7tYWVc9=QEGTDZqDmmt(Z+l4przCQX9yx^Pxdg&a|YoH!&XBxh31swD(+s#OuU z;IECH2?n?39LpFcWGLpGbJ?8*??gd$jWq)Cw-0W^>;*9pu)b@%C{~#{Z&jMbOm!yL zSQPmo`$baa-u=z_|CLnDgHpuK=DFp@K=F9q#5-n(|!q4{pzC-fRK;M3&eoyc2KDl>r zaKF5F-{8)@d*lPXyN3EIZ&gET&<+IjK${V`tuCb2BXIjw({Nm}mLc-ZajAxf zXIPHWLQ$tHTFjz}PK5imyH_$!gCHoG4D*;)D$++#>rns=c2tPR<1|!h^c^N7%x<_s zWM5^$zk#@QWb#k3v#hs{I9Pja!Er)YT9iF{#Po&?57K~<_@ zb%V6zuNHhW(Elx;holpr>(Hc`K91I^nXpr}jnJ5PYO~}D`?B_ZmiGrqxbjh8fc&41 zOgZwJj0Jo#V zH=?@%^cS*P zeWod{Bz+7Wxit*y`3V&^TcKN6vMIFzpK_jH55<~Prv!Hsr&XJV)PH|XxE}48*)exy zK|48d)!b1TZ|Wu+eU{*2La^5UECwvWUrazPBDL7|;N7iOzop@~l-J_N9gTQJ7?dBQ zQF4|!V?9vm{#cs041tb-OUX{NY$o1N!`G?+H-=fs>v?!8&c~x(T*dnv!>+~Gl5^~j z_)%D!{#c03G+!~}Qn9xajqJIEqm6IqQMjolmP6{^I!mOwfp`1M5^KqO>~iAp9cx`l znT)YB$wUjPNTT7xNHo1fRheT|9slicf7$h9EBSz#Qr)2cL@Lt#EPC6A@HE0fgd)N* z1RdalKyj3+rRTvR%(FLB1*psI)EA=Fhy0q#wRD8+jUc@SA&L+~h$AErk_ah;wFnsi z$xV;LkKrjOvO1X`FY~c9%%kOk0u_Bq+CkE6PU0*i4@E@4U%OOc5ZL6VXMOUX_C!Q`iuDv_dA1vD{A5=ntNNC8kr z10*v!hPjI=#cc9B=6Ut08nYQv+~zVxX(Fk12OH-RrG+Hs2^RB;(nb>V28;Pb=^%;u zg2nuzbdkjT!D0bXdPrh{V6pn3D19WsV6b3FlmU`hC|E2k$`DB`94rKR31LmVjeONKm||OT2SvaEQOJYtSt-aU}Wp z;>4WP;`scc6rfrebhYupjy|rz@%}+Bu0fOMu%x-k1GVNR=9Q);CYO{JW#*;F7nBwy zX8>)58leI+!q?F+)XmX3Bs9p=&pkdMG|1V*G1wJi)MiH3c*bauGmA?L3UV@$of#Y& z5a8npbfy%NG`cPFFk4`%(JYu8&z9lI0S^OSHy=lLL;#4uBv3priJ}O_=f~K39c1u& zTM?`oub+e1&ocURz c6U_a$#9sj_IgOam{l zC@+Xuk-RYWGE3m(K5lavW!(nf2^KS)C)!?S(Y>MXdVxiDM#T!|nYEW$Tqhslw&61m zy}+Wnpkf2_LZDFSPO4o| V!Q>WR9ezDVqX{Bk8Gsa65df8CU`zl2 delta 329 zcmZ3ev|pOoaOje$5@nEdsQmNDM?sOb+2`oy^VK%`VQwz|hL@VDfHWoyp&L zr%YbKXEymapY>!{{u7h61Y{V4C%X%@N(F&51%rqXAn}XCCO1E&G$+-rC}#3A0Udr7 OMxzNLUm1WDSP=lN^;0?k diff --git a/business_objects/store/store_base.py b/business_objects/store/store_base.py index 48b52505..856bc18d 100644 --- a/business_objects/store/store_base.py +++ b/business_objects/store/store_base.py @@ -58,9 +58,12 @@ class I_Store_Base(): class Store_Base(Base): # ATTR_ID_CURRENCY_COST: ClassVar[str] = 'id_currency_cost' + ATTR_ID_CUSTOMER: ClassVar[str] = 'id_customer' + ATTR_ID_CUSTOMER_SALES_ORDER: ClassVar[str] = 'id_customer_sales_order' ATTR_ID_DELIVERY_OPTION: ClassVar[str] = 'id_delivery_option' ATTR_ID_DISCOUNT: ClassVar[str] = 'id_discount' ATTR_ID_IMAGE: ClassVar[str] = 'id_image' + ATTR_ID_MANUFACTURING_PURCHASE_ORDER: ClassVar[str] = 'id_manufacturing_purchase_order' ATTR_ID_PLANT: ClassVar[str] = 'id_plant' ATTR_ID_PRODUCT: ClassVar[str] = 'id_product' ATTR_ID_PRODUCT_CATEGORY: ClassVar[str] = 'id_category' @@ -71,13 +74,18 @@ class Store_Base(Base): ATTR_ID_PRODUCT_VARIATION_TYPE: ClassVar[str] = 'id_type' ATTR_ID_STOCK_ITEM: ClassVar[str] = 'id_stock_item' ATTR_ID_STORAGE_LOCATION: ClassVar[str] = 'id_location' + ATTR_ID_SUPPLIER: ClassVar[str] = 'id_supplier' + ATTR_ID_SUPPLIER_PURCHASE_ORDER: ClassVar[str] = 'id_supplier_purchase_order' FLAG_COST_LOCAL: ClassVar[str] = 'cost_local' FLAG_COST_LOCAL_VAT_EXCL: ClassVar[str] = FLAG_COST_LOCAL + '_vat_excl' FLAG_COST_LOCAL_VAT_INCL: ClassVar[str] = FLAG_COST_LOCAL + '_vat_incl' + FLAG_CUSTOMER: ClassVar[str] = 'customer' + FLAG_CUSTOMER_SALES_ORDER: ClassVar[str] = 'customer_sales_order' FLAG_DELIVERY_OPTION: ClassVar[str] = 'delivery_option' FLAG_HAS_VARIATIONS: ClassVar[str] = 'has_variations' FLAG_IS_OUT_OF_STOCK: ClassVar[str] = 'is_out_of_stock' FLAG_DISCOUNT: ClassVar[str] = 'discount' + FLAG_MANUFACTURING_PURCHASE_ORDER: ClassVar[str] = 'manufacturing_purchase_order' FLAG_PLANT: ClassVar[str] = 'plant' FLAG_PRODUCT: ClassVar[str] = 'product' FLAG_PRODUCT_CATEGORY: ClassVar[str] = 'product_category' @@ -91,6 +99,8 @@ class Store_Base(Base): FLAG_QUANTITY_MAX: ClassVar[str] = 'quantity_max' FLAG_STOCK_ITEM: ClassVar[str] = 'stock_item' FLAG_STORAGE_LOCATION: ClassVar[str] = 'storage_location' + FLAG_SUPPLIER: ClassVar[str] = 'supplier' + FLAG_SUPPLIER_PURCHASE_ORDER: ClassVar[str] = 'supplier_purchase_order' FLAG_TEXT: ClassVar[str] = 'text' FLAG_VALUE_TEXT: ClassVar[str] = 'value_text' \ No newline at end of file diff --git a/business_objects/store/supplier.py b/business_objects/store/supplier.py new file mode 100644 index 00000000..7ce5bf23 --- /dev/null +++ b/business_objects/store/supplier.py @@ -0,0 +1,111 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: Business Objects +Feature: Supplier Business Object + +Description: +Business object for supplier +""" + +# internal +import lib.argument_validation as av +from business_objects.store.store_base import Store_Base +from extensions import db +# external +from pydantic import BaseModel +from typing import ClassVar + + +class Supplier(db.Model, Store_Base): + FLAG_DEPARTMENT_CONTACT: ClassVar[str] = 'department_contact' + FLAG_NAME_COMPANY: ClassVar[str] = 'name_company' + FLAG_NAME_CONTACT: ClassVar[str] = 'name_contact' + NAME_ATTR_OPTION_VALUE: ClassVar[str] = Store_Base.ATTR_ID_SUPPLIER + NAME_ATTR_OPTION_TEXT: ClassVar[str] = Store_Base.FLAG_NAME + __tablename__ = 'Shop_Supplier_Temp' + id_supplier = db.Column(db.Integer, primary_key=True) + id_address = db.Column(db.Integer) + id_currency = db.Column(db.Integer) + name_company = db.Column(db.String(255)) + name_contact = db.Column(db.String(255)) + department_contact = db.Column(db.String(255)) + # address + phone_number = db.Column(db.String(50)) + fax = db.Column(db.String(50)) + email = db.Column(db.String(255)) + website = db.Column(db.String(255)) + active = db.Column(db.Boolean) + created_on = db.Column(db.DateTime) + created_by = db.Column(db.Integer) + def __init__(self): + super().__init__() + Store_Base.__init__(self) + @classmethod + def from_DB_supplier(cls, query_row): + supplier = cls() + supplier.id_supplier = query_row[0] + supplier.id_address = query_row[1] + supplier.id_currency = query_row[2] + supplier.name_company = query_row[3] + supplier.name_contact = query_row[4] + supplier.department_contact = query_row[5] + supplier.phone_number = query_row[6] + supplier.fax = query_row[7] + supplier.email = query_row[8] + supplier.website = query_row[9] + supplier.active = query_row[10] + return supplier + + def __repr__(self): + return f''' +id: {self.id_supplier}, +id_address: {self.id_address}, +id_currency: {self.id_currency}, +name_company: {self.name_company}, +name_contact: {self.name_contact}, +department_contact: {self.department_contact}, +phone_number: {self.phone_number}, +fax: {self.fax}, +email: {self.email}, +website: {self.website}, +active: {self.active}, + ''' + def to_json(self): + return { + **self.get_shared_json_attributes(self), + self.ATTR_ID_SUPPLIER: self.id_supplier, + self.ATTR_ID_ADDRESS: self.id_address, + self.ATTR_ID_CURRENCY: self.id_currency, + self.FLAG_NAME_COMPANY: self.name_company, + self.FLAG_NAME_CONTACT: self.name_contact, + self.FLAG_DEPARTMENT_CONTACT: self.department_contact, + self.FLAG_PHONE_NUMBER: self.phone_number, + self.FLAG_FAX: self.fax, + self.FLAG_EMAIL: self.email, + self.FLAG_WEBSITE: self.website, + self.FLAG_ACTIVE: av.input_bool(self.active, self.FLAG_ACTIVE, f'{self.__class__.__name__}.to_json') + } + def to_json_option(self): + return { + 'value': self.id_supplier, + 'text': self.name_company + } + @classmethod + def from_json(cls, json): + print(f'{cls.__name__}.from_json: {json}') + supplier = cls() + supplier.id_supplier = json[cls.ATTR_ID_SUPPLIER] + supplier.id_address = json[cls.ATTR_ID_ADDRESS] + supplier.id_currency = json[cls.ATTR_ID_CURRENCY] + supplier.name_company = json[cls.FLAG_NAME_COMPANY] + supplier.name_contact = json[cls.FLAG_NAME_CONTACT] + supplier.department_contact = json[cls.FLAG_DEPARTMENT_CONTACT] + supplier.phone_number = json[cls.FLAG_PHONE_NUMBER] + supplier.fax = json[cls.FLAG_FAX] + supplier.email = json[cls.FLAG_EMAIL] + supplier.website = json[cls.FLAG_WEBSITE] + supplier.active = json[cls.FLAG_ACTIVE] + return supplier diff --git a/business_objects/user.py b/business_objects/user.py index 8dcbcd71..3674c476 100644 --- a/business_objects/user.py +++ b/business_objects/user.py @@ -18,7 +18,6 @@ from typing import ClassVar class User(db.Model, Base): - KEY_USER: ClassVar[str] = 'authorisedUser' # 'user' already used NAME_ATTR_OPTION_VALUE: ClassVar[str] = Base.ATTR_ID_USER NAME_ATTR_OPTION_TEXT: ClassVar[str] = 'email' @@ -57,6 +56,7 @@ class User(db.Model, Base): user.is_super_user = av.input_bool(query_row[9], 'is_super_user', _m) user.can_admin_store = av.input_bool(query_row[10], 'can_admin_store', _m) user.can_admin_user = av.input_bool(query_row[11], 'can_admin_user', _m) + user.is_logged_in = (user.id_user is not None and user.id_user > 0) return user @staticmethod @@ -101,6 +101,7 @@ class User(db.Model, Base): user.is_included_VAT_default = None user.can_admin_store = None user.can_admin_user = None + user.is_logged_in = (user.id_user_auth0 is not None and user.id_user_auth0 != '') print(f'user: {user}') return user diff --git a/controllers/__pycache__/core.cpython-312.pyc b/controllers/__pycache__/core.cpython-312.pyc index 0840b30c7b99d13c16780bdb768cda2cd7eb0ee8..c17381f02f36bc55d23ea2aa8aaa379ea62452ae 100644 GIT binary patch delta 632 zcmeyTw@Z)rG%qg~0}$}L^QE8M$h(SlavcAR$=PgrDy&89K=C4w>@7~$isaOSlFa

n@NEta(WqTC`?khl(r&;=63 ztUy8m1d8;4tXu5K`FSOY$t6WLK%UNKbFO4&HmJ!9c;)#`fucobAcaiM&PA4!&+!_> zqS?k?WDQaTR_P34S%L@`kRFcQ#LOJelGI#?)u507TMe_E2WokIK|U}jJb}`do1^)* zF?u6;5Gbh0TEqdQz=2qVYI~73P@0rYxVW^!tAkvCA-cXEtC5NnYEkU4oF ztJvm80_~{bS0bdrXf=7Rkd_falerR8ax?SdGxBp&ivoZKhHd^Sw4ccw6mz!(Jsg8Q z;sYGrUE`ho{X!g_L%<;l_S7vQgk-R5P?)E)YjBbGlTrT_o{ delta 735 zcmah`&ubG=5PrLxx0_#UH-Y33g;=Z6v^GsGSV*g~q`^i@s!dTmNC@dxSGw6{b|Zoo zL1|q%N!wIFb2~;6*(yzU-zl3y>=fp~ zX%2bjMC#QcZgO2Xi;$;&sN)*ohZb$HAjjhc4kHLIML5n66w&gPmfiN6Ee|fBH{6X! zTavtAxua(L&SMnDd7@Y@Ly5gsi?{z#Q(%%O1({RaDsiarKVhqBE>%6l+LPu}3#1Rk zM)FiD#p X6d|=M5phcBiD>qc>|y$2$i(zt+VG;k diff --git a/controllers/__pycache__/user.cpython-312.pyc b/controllers/__pycache__/user.cpython-312.pyc index 2d74953b6aa8eb0d43f54f3e33379e8b959b177b..2ff400bc6662827a745e4609d00ae966beee4c05 100644 GIT binary patch delta 1514 zcmZuxO>7%Q6rR~1uh+Zlb^L>Iew{dp;~FP{77?6;#`&#DNF*S%4HYJ^PFgF8(Rf2h zS(AuUka~zTy;NxnLP&+SmnxhP2U;O$l8Y@DQbG?PRY=@iS_#wxV#d+dj>O3Oy>H(8 z=DqRT*||UPPoJ`*C^kUGm6z?apWIM>vhvFCSZrkT59a1i)dbKGyAib(H*f})GgH^7RFA3KhR;kj!X$nqcYOK=H% zz@7w4FaQqp(`E>ySCV1FMpY12;V-I!$rsG*72W7EePvq_jh4M8tBCfPzOvQaxYHSd z9{iTG4&QYC1{?6_ErYL#b>$nna`i9foY6aS_uZ#!Kb0@Y8}_yM-DjicM$S*{ zx+8h=liP8~yWr@{2mA63v0QzB&OUI*I*6}$o8U>j?G3^s_%HAJO1u}`JjxKf#nc~b z0k{0IW-|Gn?}u?0_(6!(#KYjnrWjS+ZV}@S_IA5BF0os@g?P3ko_Mw#Eafg&yp7#z z_e2SUPk1fJkop<^yRy9s^2KsbVbtv<%jkp6tU*;dmC zUwfTUbcjNTf=nSsfxZqjMxl?w5Cw_C5enlJCJ2N$^akbhkRf`@ph>@%#OV9>@K9wCL5%Wc>gWrf(e4zl3PfQur%?W+|uo$JUkfT|bX7P(3w&0i9FPhA#ON)z>_NOw(S zER*n-?ia_-%xZdOHBS&Tpoc`JpY&s686lq#1UrhkdK4!0{bWc3^Hf8!hJ68?kU885 zKLJX%6&XRu^(CfIo1n;H*ia6?67;KTg-Q^&$dVrr3Kde9;ty;G<7 zOU=#V1#yKgaKv(SG!m5NmuAB&ddx&jy<$!kiC$S@3Z9{UuLwUkJ_5DyrU~}vC|pd^ zqNX{1E+|jopsDGoe6>~5U?(#xg%=Cn9EbJA>80huQc_`=M!!z@me~so@H2ByyX3=8 z?R=n^!3U=0>4+Sbg2gq3tLNB4kJJw3 zRd)3vq94G^Rn;H_qgB6w1sJLxKUb(Sh@@tf6hx~l223wc`8rV o1N8535fCJ|159aPN|_rn!0{{TMSdL8m@m-$+t4DuM&W}006ETqXaE2J diff --git a/controllers/core.py b/controllers/core.py index 28a3ef54..f20b4390 100644 --- a/controllers/core.py +++ b/controllers/core.py @@ -36,7 +36,6 @@ routes_core = Blueprint('routes_core', __name__) def home(): try: model = Model_View_Home() - print('nips') html_body = render_template('pages/core/_home.html', model = model) except Exception as e: return jsonify(error=str(e)), 403 diff --git a/controllers/store/__pycache__/product.cpython-312.pyc b/controllers/store/__pycache__/product.cpython-312.pyc index cd9eeaf28186b6851e87297921678676176aae22..4424096f6f2599ea779fc58314ff778d8a5eaff2 100644 GIT binary patch delta 91 zcmexh_|cH}G%qg~0}wdM@ui>H$a{sGmDA0~(S7q%Zf-_Vy^B108(6O!IA1hyzHZ=s r(ZKt%f$wB>(df+yyqnk|(mdAD~S7kPA7lwQ|&x~T7TUEk}X qzSm`apUE1c(VG)_H?c#cYp&~iUex!zt{-?&Kk%}C@MaCslgt2$%^;xw diff --git a/controllers/store/__pycache__/product_category.cpython-312.pyc b/controllers/store/__pycache__/product_category.cpython-312.pyc index 4474aca83e9c1a48018772cf6a615721fe45cb95..a807b8c2c25bbae4453a2432670b7c55e88e93f1 100644 GIT binary patch delta 91 zcmZ2rxX_UIG%qg~0}$xR@ujzICjGZjV8@<_BG?y6w6?Pt? delta 90 zcmZ2zxWJJ2G%qg~0}!NL;Ye@Z$a{~Qg~Qu5a`OjnUPe)~i#%pKSg%`nU$pSPZV`OZ qBKWdJ=;WIs(VKI5!`UIyJl8FPE?NX#w}`rE5p~%jX7f#v6U+cnG$8E& diff --git a/controllers/store/__pycache__/product_permutation.cpython-312.pyc b/controllers/store/__pycache__/product_permutation.cpython-312.pyc index bbc800b52479d5b8d433b45f64d607c51e977ff0..a212c5724da9b483115c143609a19b2bda4c397a 100644 GIT binary patch delta 91 zcmexl{MnfIG%qg~0}wdM@ukab2xjBqSfKk-)B9G+`)9coL7p?uSTZdh= q4!dj}vALR8g99REbKN@hqIKwX>)4Cdv6rpmCs*@EZx$ANzzhH--XC@V diff --git a/controllers/store/__pycache__/stock_item.cpython-312.pyc b/controllers/store/__pycache__/stock_item.cpython-312.pyc index b46f8a1e9c45c953f1b6fb17e303b95c94e8666b..1528b16afc78cdcf057ffd655f9ba5a5f1fbf6d8 100644 GIT binary patch delta 87 zcmca%defBmG%qg~0}$xR@ue4Sq;B#-W#u!#AslZ(#-idW{_p delta 86 zcmca2x!H)fkWtj&B9Fla)$2yC7mZx68~I)| m^1W>2zj+5=1P4S)=em*4MI)c/ def login_callback(): @@ -84,6 +84,7 @@ def login_callback(): print(f"Error: {str(e)}") session[current_app.config['ID_TOKEN_USER']] = token # import user id + """ print(f'str(type(token)) = {str(type(token))}') print(f'token = {token}') userinfo = token.get('userinfo') @@ -91,18 +92,18 @@ def login_callback(): # id_user = token.get('sub') id_user = userinfo.get('sub') print(f'user ID: {id_user}') - - datastore_user = DataStore_User() - user = datastore_user.get_user_auth0() + """ + user = User.from_json_auth0(token) # datastore_user.get_user_auth0() user_filters = User_Filters.from_user(user) + datastore_user = DataStore_User() users, errors = datastore_user.get_many_user(user_filters, user) try: user = users[0] print('User logged in') print(f'user ({str(type(user))}): {user}') - print(f'user key: {Model_View_Base.KEY_USER}') + print(f'user key: {Model_View_Base.FLAG_USER}') user_json = user.to_json() - session[Model_View_Base.KEY_USER] = user_json + session[Model_View_Base.FLAG_USER] = user_json print(f'user stored on session') except: print(f'User not found: {user_filters}\nDatabase query error: {errors}') @@ -121,7 +122,7 @@ def login_callback(): # add user to database # DataStore_Store().add_new_user(id_user) # this is part of get basket - should occur on page load - print(f'user session: {session[Model_View_Base.KEY_USER]}') + print(f'user session: {session[Model_View_Base.FLAG_USER]}') return redirect(f"{current_app.config['URL_HOST']}{hash_callback}") except Exception as e: return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_FAILURE, Model_View_Base.FLAG_MESSAGE: f'Controller error.\n{e}'}) @@ -160,7 +161,7 @@ def logout_callback(): # add user to database # DataStore_Store().add_new_user(id_user) # this is part of get basket - should occur on page load - print(f'user session: {session[Model_View_Base.KEY_USER]}') + print(f'user session: {session[Model_View_Base.FLAG_USER]}') return redirect(f'{current_app.URL_HOST}{hash_callback}') except Exception as e: return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_FAILURE, Model_View_Base.FLAG_MESSAGE: f'Controller error.\n{e}'}) @@ -171,7 +172,7 @@ def user(): try: model = Model_View_User(current_app, db) if not model.is_user_logged_in: - # return redirect(url_for('routes_user.login', data = jsonify({ Model_View_User.KEY_CALLBACK: Model_View_User.HASH_PAGE_USER_ACCOUNT }))) + # return redirect(url_for('routes_user.login', data = jsonify({ Model_View_User.FLAG_CALLBACK: Model_View_User.HASH_PAGE_USER_ACCOUNT }))) return redirect(url_for('routes_core.home')) html_body = render_template('pages/user/_user.html', model = model) except Exception as e: diff --git a/datastores/__pycache__/datastore_base.cpython-312.pyc b/datastores/__pycache__/datastore_base.cpython-312.pyc index 4037a56320a48bcc7c8c26dbfaf5aaeb18d70df5..bd525007b83a4854682f9c82d77a3645b7130046 100644 GIT binary patch delta 514 zcmeB(dK=DrnwOW00SMZB_|p3~@`^Jv&YG;stiZ@M*^SxGfs-MXHHE!}VKqnz5JYjO za-?vjaI`SOMR>p>oJbK4-Iw=y2YKIS`wdprQtbCmg&N`1G%E7~J6(?yu{to0C32 zduH|;mGycn^)Aa)vRgS5Ib@Cr! z8OD;y`XaKE{e*;AS2Fr(3QX=6l9uN1c8!b=4R#H>#hsp75}%TqmROooQlt;mJbACs zLQOd!qk-WGzi@wDXWg9i`PnnG*Ql)5U8#Fn&f+q^q|I*LST>u_CJgVp;H(ofsECR5FU&M`hm%>C>AKF$yUS;q;B!273Jr~XBFq?#V3}Q zWEd0)07Z);L4+Vko-H{)FD)~@2xJ=AJw@^$VZL;Jpr1;MQ;Q(ls$?fC3J6;v1Xco7 z6{`aYuotiMD_`VSUgEyod!hFh?&}6l7Y&>a*k3dVzN`{*nLqRbN9g8GVOpS{q252}HDmhz=m3DN@7(VuM^$)CnTGCZALF=Ia45dqG4WkeJ*cFAg!) z6eQF?*;7rEZxV<(8AMD0DPdHQm^?$xh4K65yJ{tj+|xi3AQuB;JVql{Gzr8{0}+iN zVk(H3Gx?;3G2_O`e>FnYcvwX~Gc&LWeP9BzK1cysADI|g!x*80Am#&B!O5ALZj1{y cZ_qr;$hdWKopzjHIy0l}gvhT9AQ~J80EfxDmjD0& diff --git a/datastores/datastore_base.py b/datastores/datastore_base.py index 8e6e85a7..ea45fddd 100644 --- a/datastores/datastore_base.py +++ b/datastores/datastore_base.py @@ -154,7 +154,8 @@ class DataStore_Base(BaseModel): return regions, currencies @staticmethod def get_user_session(): - return User.from_json(session.get(User.KEY_USER)) + print('DataStore_Base.get_user_session') + return User.from_json(session.get(User.FLAG_USER)) user = User.get_default() try: print(f'user session: {session[self.app.ID_TOKEN_USER]}') @@ -166,9 +167,11 @@ class DataStore_Base(BaseModel): except: print('get user login failed') return user + """ @staticmethod def get_user_auth0(): return User.from_json_auth0(session.get(current_app.config['ID_TOKEN_USER'])) + """ @staticmethod def upload_bulk(permanent_table_name, records, batch_size): _m = 'DataStore_Base.upload_bulk' diff --git a/datastores/datastore_store_supplier.py b/datastores/datastore_store_supplier.py new file mode 100644 index 00000000..e0f2aeaa --- /dev/null +++ b/datastores/datastore_store_supplier.py @@ -0,0 +1,150 @@ +""" +Project: PARTS Website +Author: Edward Middleton-Smith + Precision And Research Technology Systems Limited + +Technology: DataStores +Feature: Store Stock Item DataStore + +Description: +Datastore for Store Stock Items +""" + +# internal +# from routes import bp_home +import lib.argument_validation as av +from business_objects.sql_error import SQL_Error +from business_objects.store.supplier import Supplier, Parameters_Supplier, Supplier_Temp +from datastores.datastore_store_base import DataStore_Store_Base +from helpers.helper_db_mysql import Helper_DB_MySQL +# from models.model_view_store_checkout import Model_View_Store_Checkout # circular! +from extensions import db +# external +# from abc import ABC, abstractmethod, abstractproperty +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy import text +import stripe +import os +from flask import Flask, session, current_app +from pydantic import BaseModel, ConfigDict +from typing import ClassVar +from datetime import datetime + +# db = SQLAlchemy() + + +class DataStore_Store_Supplier(DataStore_Store_Base): + # Global constants + # Attributes + + def __init__(self): + super().__init__() + + # Stock Items + def get_many_supplier(self, parameters_supplier, category_list): + # redundant argument validation? + _m = 'DataStore_Store_Supplier.get_many_supplier' + av.val_instance(parameters_supplier, 'parameters_supplier', _m, Parameters_Supplier) + argument_dict = parameters_supplier.to_json() + user = self.get_user_session() + """ + argument_dict['a_id_user'] = user.id_user # 'auth0|6582b95c895d09a70ba10fef' # id_user + argument_dict['a_debug'] = 0 + """ + argument_dict = { + 'a_id_user': user.id_user + , **argument_dict + , 'a_debug': 0 + } + ids_permutation = category_list.get_csv_ids_permutation() + print(f'ids_permutation: {ids_permutation}') + argument_dict['a_ids_product_permutation'] = ids_permutation + print(f'argument_dict: {argument_dict}') + print('executing p_shop_get_many_supplier') + result = self.db_procedure_execute('p_shop_get_many_supplier', argument_dict) + cursor = result.cursor + print('data received') + # categories, category_index = DataStore_Store_Supplier.input_many_product(cursor) + category_list, errors = DataStore_Store_Supplier.input_many_supplier(cursor, category_list) + DataStore_Store_Supplier.db_cursor_clear(cursor) + + return category_list, errors # categories, category_index + + + def input_many_supplier(cursor, category_list): + _m = 'DataStore_Store_Supplier.input_many_supplier' + result_set_1 = cursor.fetchall() + print(f'raw categories: {result_set_1}') + for row in result_set_1: + new_supplier = Supplier.from_DB_supplier(row) + category_list.add_supplier(new_supplier) # , row) + + # Errors + cursor.nextset() + result_set_e = cursor.fetchall() + print(f'raw errors: {result_set_e}') + errors = [] + if len(result_set_e) > 0: + errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # (row[0], row[1]) + for error in errors: + print(f"Error [{error.code}]: {error.msg}") + """ + if len(errors) > 0: + for error in errors: + if error.code == 'PRODUCT_AVAILABILITY': + ids_permutation_unavailable = DataStore_Store_Supplier.get_ids_permutation_from_error_availability(error.msg) + for id_permutation in ids_permutation_unavailable: + index_category = category_list.get_index_category_from_id_permutation(id_permutation) + category = category_list.categories[index_category] + index_product = category.get_index_product_from_id_permutation(id_permutation) + product = category.products[index_product] + index_permutation = product.get_index_permutation_from_id(id_permutation) + permutation = product.permutations[index_permutation] + permutation.is_available = False + if 'region' in error.msg or 'currency' in error.msg: + permutation.is_unavailable_in_currency_or_region = True + """ + DataStore_Store_Supplier.db_cursor_clear(cursor) + return category_list, errors # categories, category_index + + @classmethod + def save_suppliers(cls, comment, suppliers): + _m = 'DataStore_Store_Supplier.save_suppliers' + av.val_str(comment, 'comment', _m) + + guid = Helper_DB_MySQL.create_guid_str() + now = datetime.now() + user = cls.get_user_session() + rows = [] + for supplier in suppliers: + # row = permutation.to_temporary_record() + row = Supplier_Temp.from_supplier(supplier) + row.guid = guid + rows.append(row) + + print(f'rows: {rows}') + + DataStore_Store_Base.upload_bulk(Supplier_Temp.__tablename__, rows, 1000) + print('bulk uploaded') + + argument_dict_list = { + 'a_comment': comment, + 'a_guid': guid, + 'a_id_user': user.id_user, + 'a_debug': 0 + } + result = cls.db_procedure_execute('p_shop_save_supplier', argument_dict_list) + print('saved product permutations') + + # Errors + cursor = result.cursor + cursor.nextset() + result_set_e = cursor.fetchall() + print(f'raw errors: {result_set_e}') + errors = [] + if len(result_set_e) > 0: + errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # (row[0], row[1]) + for error in errors: + print(f"Error [{error.code}]: {error.msg}") + DataStore_Store_Supplier.db_cursor_clear(cursor) + return errors diff --git a/env_web/Lib/site-packages/pip-24.0.dist-info/RECORD b/env_web/Lib/site-packages/pip-24.0.dist-info/RECORD index f5dfd32b..6d6a0857 100644 --- a/env_web/Lib/site-packages/pip-24.0.dist-info/RECORD +++ b/env_web/Lib/site-packages/pip-24.0.dist-info/RECORD @@ -1,6 +1,6 @@ -../../Scripts/pip.exe,sha256=klaXm9Us0xLs-F4HRXu23Q9DlGgpERohNDOIkxFyrus,108466 -../../Scripts/pip3.12.exe,sha256=klaXm9Us0xLs-F4HRXu23Q9DlGgpERohNDOIkxFyrus,108466 -../../Scripts/pip3.exe,sha256=klaXm9Us0xLs-F4HRXu23Q9DlGgpERohNDOIkxFyrus,108466 +../../Scripts/pip.exe,sha256=c7HuPbTodA03BZskKpysGLwtwFjgKiS0ReMoKwJgZMQ,108466 +../../Scripts/pip3.12.exe,sha256=c7HuPbTodA03BZskKpysGLwtwFjgKiS0ReMoKwJgZMQ,108466 +../../Scripts/pip3.exe,sha256=c7HuPbTodA03BZskKpysGLwtwFjgKiS0ReMoKwJgZMQ,108466 pip-24.0.dist-info/AUTHORS.txt,sha256=SwXm4nkwRkmtnO1ZY-dLy7EPeoQNXMNLby5CN3GlNhY,10388 pip-24.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 pip-24.0.dist-info/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093 diff --git a/env_web/Lib/site-packages/pip/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/__pycache__/__init__.cpython-312.pyc index e8a631ab5c0b690f58d71cf0b7d3800f5cfbab23..21d921fecfafdba716aa7ca77f9405e316de6d4d 100644 GIT binary patch delta 21 bcmcb{dX1ImG%qg~0}v=n@TG6$ImHA3I!^@a delta 21 bcmcb{dX1ImG%qg~0}$-E{xxkQ&nYGVNtFjB diff --git a/env_web/Lib/site-packages/pip/__pycache__/__main__.cpython-312.pyc b/env_web/Lib/site-packages/pip/__pycache__/__main__.cpython-312.pyc index 09366793cfec9079d352e7c3e9dc967eaf6b9a9c..b56889104cab9735abc9458ddc48cfce3af65ded 100644 GIT binary patch delta 21 bcmeyw_KA(>G%qg~0}v=n@TG6$Nn-{8J`M!J delta 21 bcmeyw_KA(>G%qg~0}$-E{xxkQPZ~1-O;iT_ diff --git a/env_web/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc b/env_web/Lib/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc index 59ad49b9184bc2846c1d91510da2e02287a03ce3..c18dee6a187b00bd36dc7a2c64b75af394b2e072 100644 GIT binary patch delta 21 bcmX>qcvO(*G%qg~0}v=n@TG6$*~tL_Ia37I delta 21 bcmX>qcvO(*G%qg~0}$-E{xxkQ&rS{iNSOx^ diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc index c68332e79206e9c9bf68ebf05fc2ec695fb80c42..09b64d9f750ead84515cfcab6a26ea16842ac599 100644 GIT binary patch delta 21 bcmdnPwug=9G%qg~0}v=n@TG6$F<=G&H8KPs delta 21 bcmdnPwug=9G%qg~0}$-E{xxkQj{!3PM0f^T diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc index 984b5e04a62965e5e3c35cdc6f40ce0678563af8..20228ebd6f3a245eb8c2ce1249a48464c79481aa 100644 GIT binary patch delta 21 bcmeyL|39DSG%qg~0}v=n@TG6$`D_jVQ2GXM delta 21 bcmeyL|39DSG%qg~0}$-E{xxkQ&u4Q0U_c0| diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc index a24aa7d3603834c09acf5c6ece04ada0aaf7db10..89b629233b31dba441ee6ad6b53057eea0b1ae15 100644 GIT binary patch delta 21 bcmZ3KyeOIHG%qg~0}v=n@TG6$nPvz8Kk5ZK delta 21 bcmZ3KyeOIHG%qg~0}$-E{xxkQ&on~-PcR2` diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc index 82239ff192c8d43e2474de81126bb310bb45c237..d46d1cedc0fb8a4e1322d7c0bd78e4bd82d3e150 100644 GIT binary patch delta 23 dcmZ48#kjhQk>@loFBbz4C`<6AZ{(481prD41vvl! delta 23 dcmZ48#kjhQk>@loFBbz4?703lZ6lAoD*#zg2Xg=b diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc index 676bce4ad6c0de5bede178b8aac5018fbcc4b84a..807ca3446f2015f3c72c41b2c4595cdb31a8c100 100644 GIT binary patch delta 23 dcmZ46!nC%9iRUygFBbz4C`<6AZ{$&I0su+U1#$oY delta 23 dcmZ46!nC%9iRUygFBbz4?703lZ6l9j698El2dn@9 diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc index 3e74e905d8122cd6f40d442f55001e2601ccbb02..5edf4a75132d99365284a3d360661611f615befb 100644 GIT binary patch delta 21 bcmX@kdYqN#G%qg~0}v=n@TG6$+06t1H`xTf delta 21 bcmX@kdYqN#G%qg~0}$-E{xxkQ&u%6FM;`|G diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc index 7157a4e5254d5efb58b991b57b6d0a3d326a909e..3f7d9da73627de715df8c19cc6c6fe702c6f5e0c 100644 GIT binary patch delta 21 bcmbQDK1H49G%qg~0}v=n@TG6$=@140G?)Z> delta 21 bcmbQDK1H49G%qg~0}$-E{xxkQPlqr7L*53o diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc index 126831911fd4a83748ac9429c09373cd19ad3def..53da38b02e689bc6c90f2c16d9d67c7851154c4f 100644 GIT binary patch delta 21 bcmaDD^e~9$G%qg~0}v=n@TG6$3DpDuMzRG> delta 21 bcmaDD^e~9$G%qg~0}$-E{xxkQPpBpURrm*o diff --git a/env_web/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc index 1a08d5275980f424bc998cb0bf1e1fec47252725..9f4385cd0d64cb0f52d40a42db82b326966d4907 100644 GIT binary patch delta 21 bcmeyB^(%|#G%qg~0}v=n@TG6$$uk82PG|+x delta 21 bcmeyB^(%|#G%qg~0}$-E{xxkQPo60NU9JcY diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc index 5cb47bfbc6ecce53d16c832975fd5f98807e519f..0f92eb2b0a452177d8acefd5382467f11cb9e749 100644 GIT binary patch delta 21 bcmdnbw4aIRG%qg~0}v=n@TG6$F=hk+H5LRP delta 21 bcmdnbw4aIRG%qg~0}$-E{xxkQk1-&$i delta 21 bcmdnxw9AR-G%qg~0}$-E{xxkQkDej`O)3WJ diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc index d230b7eecc67dcaffd49c5c70bd7211026092df5..895452695089daa6d5232821c210fde0c0182817 100644 GIT binary patch delta 21 bcmZn&Y6#*v&CAQh00hbseCZo`zGwgdIL8Gk delta 21 bcmZn&Y6#*v&CAQh00cX(e@)xS^F;#yNDT*L diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc index fa2309b85d058eced14a9f91aff9532766819e37..46a27c7abda8f048739d853bcd7703297acba364 100644 GIT binary patch delta 23 dcmX^Amht>sMxN8Wyj%=Gpe(_czLDo}8318w2OIzZ delta 23 dcmX^Amht>sMxN8Wyj%=Gu;cpIw2eH6%K&h&3043A diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc index 86cb3b6dbc4059b751ab7787b53183ba0ad824ad..21b51076ef41fc7b5c2644adcc23de3d7a651d2c 100644 GIT binary patch delta 21 bcmbQoH;<3!G%qg~0}v=n@TG6$5n=}bF?s{q delta 21 bcmbQoH;<3!G%qg~0}$-E{xxkQj}SWmK)?nR diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc index 0b7a7c110b33830d2014726eda3cc7bd60d42eea..4e90e96966b34719f9167b6ded7c7b4bf43b81dc 100644 GIT binary patch delta 21 bcmZ21v{;DeG%qg~0}v=n@TG6$5$6N|GUfyG delta 21 bcmZ21v{;DeG%qg~0}$-E{xxkQk2og)LM#R? diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc index f854332cff630538e20c3cf887ce4b797d9ac6d6..5a1daa1df103c51f2f4b644fa8a6fa0d4eb301f2 100644 GIT binary patch delta 21 bcmcblc1exrG%qg~0}v=n@TG6$aT5jrJ)Q)z delta 21 bcmcblc1exrG%qg~0}$-E{xxkQkDD+6Oymaa diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc index b8f7ea992b1dff7251f5f2f6eee0034665888637..6dfc375b4809505215d59024b5ac7cc41744a169 100644 GIT binary patch delta 21 bcmca!dcBnAG%qg~0}v=n@TG6$Ic)_1OHl>} delta 21 bcmca!dcBnAG%qg~0}$-E{xxkQ&uJ?FT9*hw diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc index 5647c1b3e8c501834249b297d23928f678a8d396..81a99045677fbb34bea3c0fff880a57be5199ac4 100644 GIT binary patch delta 21 bcmaDV@>GQ9G%qg~0}v=n@TG6$iR1zRJ_iK8 delta 21 bcmaDV@>GQ9G%qg~0}$-E{xxkQPb3!rO-%;) diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc index 6f89d423e6964c3eec37bf95a2d14332b6b2398d..aad5aa13e451f59a1dea9ceab458136e8616f779 100644 GIT binary patch delta 23 dcmX>*nepsoMxN8Wyj%=Gpe(_czLDpkCje4;1~mWx delta 23 dcmX>*nepsoMxN8Wyj%=Gu;cpIw2eFmJpp0A2yXxY diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc index c2d12e3e760535f6044a8d96717f5d7c92cbc05e..98b0cb989e46574eb00463716b4e9529d05313ec 100644 GIT binary patch delta 21 bcmX?Ud(xKYG%qg~0}v=n@TG6$*((PCK$!(l delta 21 bcmX?Ud(xKYG%qg~0}$-E{xxkQ&t5qIPu~ZM diff --git a/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc index 1ef46a78688a1ae252119a3109c04a52d81166b6..78a4f98a9f28130ba358c33ed6be345996b38546 100644 GIT binary patch delta 21 bcmZ3$ynvbKG%qg~0}v=n@TG6$nZgJFF(w2= delta 21 bcmZ3$ynvbKG%qg~0}$-E{xxkQ&lE-gKx_tn diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc index 3fcc265c6aa74f0080fdeaa1e79c139625122226..a8e2d6f3940356a3b6470bea3e7e2c04efce729d 100644 GIT binary patch delta 21 bcmX>te_EdBG%qg~0}v=n@TG6$+0PFEJZc3C delta 21 bcmX>te_EdBG%qg~0}$-E{xxkQ&whRYORxt; diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/cache.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/cache.cpython-312.pyc index 83ae63637162e1c461e537b491194a7f08406f85..a85e995e091a57f4a13f4f2b4387f9b74c0a6f47 100644 GIT binary patch delta 21 bcmbQ?GsB1HG%qg~0}v=n@TG6$;ZXwsIne}T delta 21 bcmbQ?GsB1HG%qg~0}$-E{xxkQ504rENf!p4 diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/check.cpython-312.pyc index 2c58f3db8b6d40c1d3ad1aebc0f5fa170b8a37f3..c318ee49305b15048443b32b5c14779855d702eb 100644 GIT binary patch delta 21 bcmcaCa9M!oG%qg~0}v=n@TG6$apwR4I(YRK delta 21 bcmccRf6JfeG%qg~0}$-E{xxkQ&pCAfRbB_` diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc index 2822a90406797ebc4946c242841b47d077a48ced..fe6274d1c75a3b2237b24ac8ea4ddadff2712a6e 100644 GIT binary patch delta 21 bcmX?Sea@QaG%qg~0}v=n@TG6$IV1}JK^_HK delta 21 bcmX?Sea@QaG%qg~0}$-E{xxkQ&mma=P-F*` diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-312.pyc index 4b9672b40f5df690a390022b3c8e57c20cae6e61..d137b8c507ec7a50cf2238fc8725deb1aecb3ce0 100644 GIT binary patch delta 21 bcmZ3hv{s4dG%qg~0}v=n@TG6$Q4|CKHu3~H delta 21 bcmZ3hv{s4dG%qg~0}$-E{xxkQkD?#|MmPp@ diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc index fe9a790f5d7d77950408d9975f84cdae52ff68ce..a84ca29411096e0807334da2c1d91772560f8377 100644 GIT binary patch delta 21 bcmca0enFh)G%qg~0}v=n@TG6$Il>J9JO~8_ delta 21 bcmca0enFh)G%qg~0}$-E{xxkQ&k=3_OHKzs diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc index 948d3fa8d6679e30786daa64423ae14751a15267..437d9d9e6d33d9d5b5ea3421d784958a129b8e30 100644 GIT binary patch delta 21 bcmdnQyNQ?QG%qg~0}v=n@TG6$S;htcHJb#J delta 21 bcmdnQyNQ?QG%qg~0}$-E{xxkQ&oVXuMBxU_ diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/index.cpython-312.pyc index 584326a46dc6ee5797690b803fc65cdc2eb73a40..4555707e1309866867bf271f5a1f971da18ba47b 100644 GIT binary patch delta 21 bcmaE9^3sIoG%qg~0}v=n@TG6$iIoBXLw^Mt delta 21 bcmaE9^3sIoG%qg~0}$-E{xxkQPplLGQpE>U diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc index 2c22f355d6cb6655d2ddb454f4065e7aae381001..a888d818e135a6aa093618a0db3321f9467ec3f1 100644 GIT binary patch delta 21 bcmdlWzd@eoG%qg~0}v=n@TG6$S;7whH~a*; delta 21 bcmdlWzd@eoG%qg~0}$-E{xxkQ&k}wBM?wbl diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc index 705d835e322e119740d9f4892c20bbf8c2df1f6f..c03a7880fdffb291b10d4ade21fcbddbef243f74 100644 GIT binary patch delta 23 dcmbRBh;h~yhz delta 23 dcmbRBh;h~> diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/show.cpython-312.pyc index 917355410b43fd822749053e5c6aeaa5820812ca..c1057b687604fb9c711ed9c12216d563ef2c2a45 100644 GIT binary patch delta 21 bcmZ4Kv(ks>G%qg~0}v=n@TG6$kyQf#JevfT delta 21 bcmZ4Kv(ks>G%qg~0}$-E{xxkQkE|L1OW_94 diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc index 60bc1963e1e962e7d16f9d3e067ce83faa63c40e..e7a0511c75299cee595c5d3ced774a92551eab5c 100644 GIT binary patch delta 21 bcmbQQI$xFNG%qg~0}v=n@TG6$nJfeVHW>t# delta 21 bcmbQQI$xFNG%qg~0}$-E{xxkQ&txG0MPCNc diff --git a/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc index fd302859bc5082e6503676fe1dbe8a275afbf672..7fe8eb32252583ef65580521be95704cfd105845 100644 GIT binary patch delta 21 bcmZ4Lw$zR1G%qg~0}v=n@TG6$kyHi%I}8MS delta 21 bcmZ4Lw$zR1G%qg~0}$-E{xxkQkEAjHN>T>3 diff --git a/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc index f73cf7e960be4a11c8669b2d171cf04c4bd05763..d3980da98cca9965649e946ade7c21ae8030d269 100644 GIT binary patch delta 21 bcmcb{evO^yG%qg~0}v=n@TG6$ImHYBI-CUX delta 21 bcmcb{evO^yG%qg~0}$-E{xxkQ&nadAN#X}8 diff --git a/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc index 8f72de12e9c96c07686284cb45561e0ff2d7e22e..0534f418efc68a567d0d3c3d4a901bc0026cc27a 100644 GIT binary patch delta 21 bcmcaEc3q6;G%qg~0}v=n@TG6$@#Y2qJO~7t delta 21 bcmcaEc3q6;G%qg~0}$-E{xxkQk2f~}OHKyU diff --git a/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc index aad505568cf8723c2dd1d363cfea61cbebde5f23..a90af55cad4749cd8152b801d73ad6f91ae7faca 100644 GIT binary patch delta 21 bcmX@hdzP2yG%qg~0}v=n@TG6$ImiY8Itc{i delta 21 bcmX@hdzP2yG%qg~0}$-E{xxkQ&p|c-NlynJ diff --git a/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc index 25263dc102fb412dad37fbbcdace6e53622d29a3..26f7414cbe62cbe7329dbb7080c40749ec5ff1e3 100644 GIT binary patch delta 21 bcmccUbkT|DG%qg~0}v=n@TG6$aa9BWL8=7x delta 21 bcmccUbkT|DG%qg~0}$-E{xxkQkE% diff --git a/env_web/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc index 405cb9e8bc9885b0c82d15b3a0c454895be72bd9..e81f3a91a9964b3942e7fe859462036c3047fb62 100644 GIT binary patch delta 21 bcmaEw^fZa*G%qg~0}v=n@TG6$i8KTNNx}tz delta 21 bcmaEw^fZa*G%qg~0}$-E{xxkQPoyCLSqKNa diff --git a/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc index aeeca3479a0478a875aba66bcc0ce3814d0f4bd1..2b1830afc4c6b677ddb8ecf7bf2f14de69f72d1b 100644 GIT binary patch delta 23 dcmdnk%($_ck>@loFBbz4C`<6AZ{%6(2mng;1-SqK delta 23 dcmdnk%($_ck>@loFBbz4?703lZ6nW8M*vzo2lD^` diff --git a/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc index ccbac81bc2daf1d79af44f6cc6b63b3d37fc0a4e..b69538e928e1c92c7e8347251fbb590c322da4f8 100644 GIT binary patch delta 21 bcmexp`q7lM?RXYdn diff --git a/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc index 4d3b39b8cc64ab3ce7efd9675f31a4448d9683f6..3af3a6965eda69b278f7ce0ae756a7e0ff6a5911 100644 GIT binary patch delta 21 bcmexj_r;FqG%qg~0}v=n@TG6$$&d#CM$QFP delta 21 bcmexj_r;FqG%qg~0}$-E{xxkQPlh}IRul)0 diff --git a/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc index e798a48147444bda4f828d0f2acabe5c8ab8b8fd..3f739a1bfd102ca684782675a5dbea254d8656b9 100644 GIT binary patch delta 21 bcmaDS`%aeUG%qg~0}v=n@TG6$dBg_*LE8my delta 21 bcmaDS`%aeUG%qg~0}$-E{xxkQ&m%qnQ6UGZ diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc index 8eb521c81514ee7d65496acf60d9296cab432149..fdc230956d1afe83a3906ab6f890fd97f032bef0 100644 GIT binary patch delta 21 bcmZ3iw^)zoG%qg~0}v=n@TG6$5f=vlHyi{x delta 21 bcmZ3iw^)zoG%qg~0}$-E{xxkQkGMDhMq&nY diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc index c6b3a682a30f5e1bd29afec76f0d69084a410736..64c623d607edae9544d40c00007bcbe47ddb8b3d 100644 GIT binary patch delta 21 bcmaDN_C$>5G%qg~0}v=n@TG6$iQonRJ}Lyj delta 21 bcmaDN_C$>5G%qg~0}$-E{xxkQPXsprO>hSK diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc index 65300bae7c991468a22d2149790a04d7d391db75..acbaeca910b782bf5e4fa546d580d5c23db7c6a6 100644 GIT binary patch delta 23 dcmZ2EooVHCCZ5y0yj%=Gpe(_czL95cHvmmC1{DAR delta 23 dcmZ2EooVHCCZ5y0yj%=Gu;cpIw2eG-y8&Ey2u}b2 diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc index 7bd9805e492bd6ca3c7fc05866729b9771d51a2c..07277f8d08edc4b2e50f32d033226990c3d23bff 100644 GIT binary patch delta 21 bcmca!eZ89JG%qg~0}v=n@TG6$Ic*C7OgIJ= delta 21 bcmca!eZ89JG%qg~0}$-E{xxkQ&uLo#TYd;n diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc index fe41cc02d8cc237163747e2765042c2365608c2f..9e9be4de0a7e94406d4eb08e3635dea98e7b21f9 100644 GIT binary patch delta 21 acmeBY?q}vX&CAQh00hbseCZo`ni&BuTm%sS delta 21 bcmeBY?q}vX&CAQh00cX(e@)xS)656}J)#Cn diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc index e92e65f78685c5dc6d752e58afecad35ad71874c..776da64bb99f5cb9003ece5e0f5279157bbfb959 100644 GIT binary patch delta 21 bcmZ1{wN8rXG%qg~0}v=n@TG6$QQ`#vHRuE= delta 21 bcmZ1{wN8rXG%qg~0}$-E{xxkQj}k8cMJ@(n diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc index 9a17814f44fdd903a5725d15c458ff309592d015..2a0be473f9e5d5d9e48b3f63b35bb418008f71ba 100644 GIT binary patch delta 21 bcmbQ0IV+RrG%qg~0}v=n@TG6$=`#TUKY;}? delta 21 bcmbQ0IV+RrG%qg~0}$-E{xxkQPoD_@PR9pp diff --git a/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc index c8b0c42df9b7f119a5661b954a06033f039d2ffe..f0853a8558650ccf238ff6f72f0a4fc11eea504f 100644 GIT binary patch delta 21 bcmcZ_el?uuG%qg~0}v=n@TG6$IjIc*MtTLc delta 21 bcmcZ_el?uuG%qg~0}$-E{xxkQ&q-|nRlo=D diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc index 346e789a4579849bfd131b0adfaa2d9eddca6611..25999d991737abc65b9ff0187e56327656739b05 100644 GIT binary patch delta 21 bcmdnYw3&(LG%qg~0}v=n@TG6$QD+1IGadu` delta 21 bcmdnYw3&(LG%qg~0}$-E{xxkQk2)g&LSzOt diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc index d2ef6df99618eaedddffdae2f219732ad940403b..a88fb0c0280df4fb774ba3e4d83a64908751387b 100644 GIT binary patch delta 21 bcmbQmKZ~E|G%qg~0}v=n@TG6$>0<`~G57>f delta 21 bcmbQmKZ~E|G%qg~0}$-E{xxkQPait~K|ThG diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc index 1902adc2de7a9401d65794b7e2df569a8ab2ee9f..8744b58559c9da59a7dd0234313fbc07dcbc6d35 100644 GIT binary patch delta 21 bcmaD6{vw>`G%qg~0}v=n@TG6$xuXpLNtgxh delta 21 bcmaD6{vw>`G%qg~0}$-E{xxkQ&mC<5Sl$RI diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc index 70e3b36dba09e508dc05480dcd59d6d570f5feb9..10c5ebd14c4477afd616c1cc8e6a5b857c617d65 100644 GIT binary patch delta 21 bcmZ3ZxJHrZG%qg~0}v=n@TG6$Ss(xaH=zWx delta 21 bcmZ3ZxJHrZG%qg~0}$-E{xxkQ&jJAeM&}0Y diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc index 7f5f971c660c0cdec4ff125173bd75c806835363..d40ca567278803c3ca4707d1bd122dbb603f5cc2 100644 GIT binary patch delta 21 bcmX@kdz_c&G%qg~0}v=n@TG6$+06z3ISmBT delta 21 bcmX@kdz_c&G%qg~0}$-E{xxkQ&u%sVNK*$4 diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc index dd9835b2d325f0a87c87c1694060faafd2c12e61..49ff1066b63e0a95c760ae44f929cf846e2710c3 100644 GIT binary patch delta 21 bcmeAa>J;KR&CAQh00hbseCZo`{&D~SFrfsb delta 21 bcmeAa>J;KR&CAQh00cX(e@)xS^OpkvKj#MC diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc index 5d7326a0fe7d4c5dc8c5880f4ba5c84f06b4fe55..6f6387809921fe816067b6bf1ee57bf6f3c52f90 100644 GIT binary patch delta 23 dcmdmensN7OMxN8Wyj%=Gpe(_czL95rDganx28#dy delta 23 dcmdmensN7OMxN8Wyj%=Gu;cpIw2eILQvqkG2*m&Z diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc index f7cc99187451075bbc55ca10c12d7a70705685df..17a8503bc84b7130262364c689e94bc67eeeced7 100644 GIT binary patch delta 21 bcmdnRxr>wMG%qg~0}v=n@TG6$S;qnZHcwMG%qg~0}$-E{xxkQ&pH+WMVAKK diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc index e5331616d1ab91e543d16311d24734ee403399b1..aa958c206eb79ce6b0d36bb48451b9ee7f648324 100644 GIT binary patch delta 21 bcmeCw=+xjj&CAQh00hbseCZo`{t5#CGw=l4 delta 21 bcmeCw=+xjj&CAQh00cX(e@)xS^H&%ELpBE$ diff --git a/env_web/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc index 7ab3a6844e092bc8a0c25501ce031d4bf0f3f692..25d0eb1273eac38dd681d18b5079e77eb7e39965 100644 GIT binary patch delta 21 bcmaFD_k@qf|MxN8Wyj%=Gpe(_czLAGB3;;{71xx?{ delta 23 dcmbQbhH>f|MxN8Wyj%=Gu;cpIw2eHRVE|h72ZjIu diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc index b0c7ba03e8768fd6859e6592dc683e66417732d0..45397e85c98013f98a5a68057aaf354c3bac40e1 100644 GIT binary patch delta 21 bcmbPlJl~k-G%qg~0}v=n@TG6$nJftaI5Y&g delta 21 bcmbPlJl~k-G%qg~0}$-E{xxkQ&typeM|uYH diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc index bb696a82435bf1e8565787e68299408fd23e960d..d851e32e8b999b189ead8573f490f0669058aecc 100644 GIT binary patch delta 21 bcmbQ_Jjt2oG%qg~0}v=n@TG6$X;TCMIC=!S delta 21 bcmbQ_Jjt2oG%qg~0}$-E{xxkQPn#kDN5BU3 diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc index bf0b610468ff6a2e61d83ada64dbe6700313a54e..eb7e29d7b02b4fa87ff958c68a632136b36b1f74 100644 GIT binary patch delta 21 bcmdlHy(60EG%qg~0}v=n@TG6$S)&U8LQ(~2 delta 21 bcmdlHy(60EG%qg~0}$-E{xxkQ&l+6-QJ4p! diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc index 03f2ef9277869e4731c07c4138686d0449319ed5..1fbcfbe03571633d76be7429ffcfa5f58b807094 100644 GIT binary patch delta 23 dcmexAiShp=MxN8Wyj%=Gpe(_czLBTc698Ho21x(_ delta 23 dcmexAiShp=MxN8Wyj%=Gu;cpIw2eH)o&afJ2!j9s diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc index aaf731060cceeea81709faaab358d11b2fca3683..86948a88b9e7d625918e45baaf8d5a13d6a3815b 100644 GIT binary patch delta 21 bcmew+_)U=KG%qg~0}v=n@TG6$dBp($L0tuD delta 21 bcmew+_)U=KG%qg~0}$-E{xxkQ&npf9P@@N< diff --git a/env_web/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc index ba4cd9597dc58f990a2407cbc63b4936feb71683..3f2d597c58e2b7d1db29d17add616ef6fa4d6e24 100644 GIT binary patch delta 21 bcmZ1{zD}IyG%qg~0}v=n@TG6$S;P$hHgp7_ delta 21 bcmZ1{zD}IyG%qg~0}$-E{xxkQ&mwLBMY;ys diff --git a/env_web/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc index 67e960e02ddff3acb4a4c84563d419d6071e372c..0afd669f27747153135272bfff0ab3d2f1efd7d9 100644 GIT binary patch delta 20 acmaFI_>Ph1G%qg~0}v=n@TE`Wc?1AB90dsg delta 20 acmaFI_>Ph1G%qg~0}$-E{xxkP&m#auCjCKHvo` delta 21 bcmZ4Izs{fMG%qg~0}$-E{xxkQ&mwgIP9_It diff --git a/env_web/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc index 80269855aeba403a057f27024e3a55e36f4fc671..a62b6b0a7295103ef443b125e1ed5c851ac281f8 100644 GIT binary patch delta 23 dcmdmUl5x*TMxN8Wyj%=Gpe(_czL94`3IJF=28jRw delta 23 dcmdmUl5x*TMxN8Wyj%=Gu;cpIw2eF)QUGUz2*UsX diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc index 12568e51b2d64850dd666b36586d3e28c4e78d88..22d987bad0379ca1dd30a9c660a9ebdc0cc3b7df 100644 GIT binary patch delta 20 acmeyu_=S<@G%qg~0}v=n@TE`Wc>w@91_c`c delta 20 acmeyu_=S<@G%qg~0}$-E{xxkP&kF!X5(iZP diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc index 39d6c9600fda2a990d8bf48d4a2beef8f914bf49..de10125ad770b40016508e39d4bc3c9a47a1069a 100644 GIT binary patch delta 21 bcmdmCyTg{}G%qg~0}v=n@TG6$StADkJ>Gou6l delta 21 bcmZ1^u}FgFG%qg~0}$-E{xxkQj~EXCLg@xM diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc index fa63c8d85675eacff2aeaa9d76da4a7502227768..9894664b67ba73b3ffadb383283b95b5ab5b341f 100644 GIT binary patch delta 21 bcmdnXyO)>eG%qg~0}v=n@TG6$*~kU}H)#a4 delta 21 bcmdnXyO)>eG%qg~0}$-E{xxkQ&qg)?Mz03$ diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc index 2286b79885d2192d5162b8a899bd8df2a5c61d9e..39aff8d03361827cbae3c0d3e03e33af2fd16fc7 100644 GIT binary patch delta 21 bcmbOvFiC*tG%qg~0}v=n@TG6$VdDS*FV6$J delta 21 bcmbOvFiC*tG%qg~0}$-E{xxkQ4;u#nKNSV_ diff --git a/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc index efaccb07af9ecc981c82a9019b1a8e06811b0873..ed68a00abbb7c752930c9a400f13f5e091645495 100644 GIT binary patch delta 21 acmZpYZ<6OZ&CAQh00hbseCZo`%J=~=a0D;_ delta 21 bcmZpYZ<6OZ&CAQh00cX(e@)xSQ^pSfKeh&H diff --git a/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc index ad5208f8cde0848b38514639e00b02428dc0dffd..8d9dd42f4ac3edc3822507c236ac702e0aa88733 100644 GIT binary patch delta 21 bcmdnYw3&(LG%qg~0}v=n@TG6$QD+1IGadu` delta 21 bcmdnYw3&(LG%qg~0}$-E{xxkQk2)g&LSzOt diff --git a/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc index 2dc0fe1ec1803ce4f9868ca636346a489649e532..fdc310b46d36e935776b2b934a2514be398851f2 100644 GIT binary patch delta 21 bcmX@acZiSYG%qg~0}v=n@TG6$F=Gb+H(~@v delta 21 bcmX@acZiSYG%qg~0}$-E{xxkQj~P1vMyLjW diff --git a/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc index ccd48bf1ba2eaa9549c4f693d8fc49ff58759da5..2caf388d5734442af0d450567669fdb531739a06 100644 GIT binary patch delta 23 dcmaFU!StqsiRUygFBbz4C`<6AZ{$g60RUBt1~~u# delta 23 dcmaFU!StqsiRUygFBbz4?703lZ6i-Y3jk!%2y*}c diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc index d9072a9468529306fd7140f5a746fe739e978962..556b7ef30e23f4b30ed54fa4afb6854941175cd9 100644 GIT binary patch delta 21 bcmX>hdqS4yG%qg~0}v=n@TG6$*~13_JD&vo delta 21 bcmX>hdqS4yG%qg~0}$-E{xxkQ&mKMiO63PP diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc index a9aa3fce94b2e4710c26e3ec4fcc68956bd04e67..cc4908cd89c14a80c9e98e1cc552716e111ea4c3 100644 GIT binary patch delta 23 dcmeyqg7NzbMxN8Wyj%=Gpe(_czL6(81OQw^250~P delta 23 dcmeyqg7NzbMxN8Wyj%=Gu;cpIw2eI3ApmQM2%-Q0 diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc index c96b28df715659bd3177789fb96cedd47f975b7d..4e814aa014c7786e3f8697bfd3afe6cd3bccc61e 100644 GIT binary patch delta 23 dcmeyjoblgsMxN8Wyj%=Gpe(_czLDosFaTau2KoR1 delta 23 dcmeyjoblgsMxN8Wyj%=Gu;cpIw2eHUf&p!s2{Zrz diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc index c376e20e6eb0ea9fc366619f0c64d5320cde0f44..5e5ade34d3cf4f4db0881101ccb116289243a301 100644 GIT binary patch delta 23 dcmdnKhH3j6CZ5y0yj%=Gpe(_czL7_J8URud1@r&_ delta 23 dcmdnKhH3j6CZ5y0yj%=Gu;cpIw2eI4(*R*s2rd8s diff --git a/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc index d9623c692f55ae510e8771f601ff8559d55c6e7a..740e972395274d2305d9bdbef5c51ae4a72f3459 100644 GIT binary patch delta 21 bcmca@aod9DG%qg~0}v=n@TG6$@s|MrLCpmE delta 21 bcmca@aod9DG%qg~0}$-E{xxkQkG~86Q4$n>j`iRUygFBbz4C`<6AZ{&H`0039s2GIZj delta 23 dcmey>$n>j`iRUygFBbz4?703lZ6nXS1^{Oy2@3!K diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc index f46868f4d552dd280c20a56615c6044cc136fd63..73e9b45c3dd9a65862b5eefc2db99e5e34855bda 100644 GIT binary patch delta 20 acmaFI_>Ph1G%qg~0}v=n@TE`Wc?1AB90dsg delta 20 acmaFI_>Ph1G%qg~0}$-E{xxkP&m#auC+<6G%qg~0}v=n@TE`Wc?$qJ$ptC^ delta 20 acmey#_>+<6G%qg~0}$-E{xxkP&szXS)dyq% diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc index aea4875231084a288aab1b51dbd3041c07e40bf5..006c0d4c9d672ff53783527642d3255f497a1c2e 100644 GIT binary patch delta 21 bcmdnxxXY2}G%qg~0}v=n@TG6$S*HL1KD`Ak delta 21 bcmdnxxXY2}G%qg~0}$-E{xxkQ&pHJFP6G#L diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc index 857a3d4d09103905e1fa56cfa0c33470c7b02b53..fd804384f0fb7bf166ec646fd073564324d080a9 100644 GIT binary patch delta 23 dcmaFXc`lOYG%qg~0}v=n@TG6$Iiv#sMWF?y delta 21 bcmX>Xc`lOYG%qg~0}$-E{xxkQ&mkQERObiZ diff --git a/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc index 0b38af7b99eef12f2e1d82a69c8d7462f21a2090..328af3225adfec903bf2276ca9d7d6c26daffdf6 100644 GIT binary patch delta 21 bcmaEn@FIcdG%qg~0}v=n@TG6$i7@~GN%IAT delta 21 bcmaEn@FIcdG%qg~0}$-E{xxkQPmBQoSvd#4 diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc index 77b23682296322f5d89f2c7f066c286cca12b116..1940a4469c7ccf17c88f3f824099a3650f059e73 100644 GIT binary patch delta 20 acmaFK_>z(5G%qg~0}v=n@TE`WxeEX{Sp@n3 delta 20 acmaFK_>z(5G%qg~0}$-E{xxkP&s_jSWd}3> diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc index 868a8c3e0b800bccfd4d0a9f547e39d4a68a2090..f0b0b873e8fbaa0a298bf1d5be3ed1bac1fdbf1f 100644 GIT binary patch delta 21 bcmcbod{3F@G%qg~0}v=n@TG6$xg-bxKq3WB delta 21 bcmcbod{3F@G%qg~0}$-E{xxkQ&m}tcv_I>G%qg~0}v=n@TG6$+0Ow0I!^@X delta 21 bcmX>tcv_I>G%qg~0}$-E{xxkQ&wdU7NtFj8 diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc index fce28d4607066b757d1508dfd2d39f8c83c26620..95697ce63ac57b94992b0deacd9e6ced22d6291e 100644 GIT binary patch delta 21 bcmcbweP5gBG%qg~0}v=n@TG6$xhx6*L4XBi delta 21 bcmcbweP5gBG%qg~0}$-E{xxkQ&t*{nP{s$J diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc index 51a1224ed3bee6e35842ccbf400183f88173dc83..823ec0e3a5b97bfb6fff7ca9b34181b59ad4d5ce 100644 GIT binary patch delta 21 bcmcb_dWn_iG%qg~0}v=n@TG6$ImQG4Ij02Q delta 21 bcmcb_dWn_iG%qg~0}$-E{xxkQ&oL$dNbLt1 diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc index 398c5f24cdf65b48b02adf7a119ecbb849ba8b85..48cee4db811191ed168656d45f60fc57a81b776c 100644 GIT binary patch delta 21 acmZorY*6Gm&CAQh00hbseCZo`N(2BfX#_6- delta 21 bcmZorY*6Gm&CAQh00cX(e@)xSQz8HWKd%O9 diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc index 0c65669dc9f4bf328ce269d7b9e066d4334622a7..32a14b4bfb983e378569805f44beb0e9cbdb7f78 100644 GIT binary patch delta 21 bcmbOzGf{@;G%qg~0}v=n@TG6$VdVn=F>?df delta 21 bcmbOzGf{@;G%qg~0}$-E{xxkQ4=W!4K)D7G diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc index 49c9f97e8e9b9005a14d2368135e162c020a803e..887eda566f208b136d76771340b00068aa51f97e 100644 GIT binary patch delta 21 bcmX>gc|elqG%qg~0}v=n@TG6$*}?+=Ikg1a delta 21 bcmX>gc|elqG%qg~0}$-E{xxkQ&lVm4Nc#sB diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc index 9927ec910c4eebdc4a17b1f0f86fde739b154365..3cfc01532ee920b5c37cc7ab97cb828821710ed5 100644 GIT binary patch delta 21 bcmbOtI7N`>G%qg~0}v=n@TG6$>EHkWF-ZhN delta 21 bcmbOtI7N`>G%qg~0}$-E{xxkQPX`A8K#vA} diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc index 70bd8dfb05cd0e47117824975ffae1379d48b788..17c6d7904e420bf600ede75839c5a30732cb97b7 100644 GIT binary patch delta 21 bcmdllzh9o`G%qg~0}v=n@TG6$*~||BI&uW( delta 21 bcmdllzh9o`G%qg~0}$-E{xxkQ&t`rANw^0g diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc index af354c744e4bcb553f3f89cb0ecf71ada4591bf5..28e2ce7da146990ab9b9765ea4bce62046ffbd1a 100644 GIT binary patch delta 21 bcmX?Mb;640G%qg~0}v=n@TG6$v5^G;KKum6 delta 21 bcmX?Mb;640G%qg~0}$-E{xxkQkBuwjbVi8hG%qg~0}v=n@TG6$ao_|1IiLh? delta 21 bcmX>jbVi8hG%qg~0}$-E{xxkQj{_$FNahBp diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc index bb63ea229103648c7f4182d66657bc42709c36bd..d0a5205fe27a5bb0b22bcb2a9159ba125b09fcae 100644 GIT binary patch delta 21 bcmZ2sy~3L3G%qg~0}v=n@TG6$nIj7TI^qQA delta 21 bcmZ2sy~3L3G%qg~0}$-E{xxkQ&m36*N+<^+ diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc index 69bd189bbdf335f97bd3442537da10fb4b75ae8a..6b789afb381b6ce152dda689ef04cd72b9ff8cb7 100644 GIT binary patch delta 21 bcmbQ8H9L#vG%qg~0}v=n@TG6$;Wq^UKGFoY delta 21 bcmbQ8H9L#vG%qg~0}$-E{xxkQ55Fk@P8bI9 diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc index d66ea9ffbd97c5c1f58cbfda4b9df9e7bc63508e..057b0870664e7a7d21542fd8ca63ff07dd0297e8 100644 GIT binary patch delta 23 dcmaFg#q_?5iRUygFBbz4C`<6AZ{$gC1proM21ft@ delta 23 dcmaFg#q_?5iRUygFBbz4?703lZ6i-|D*$Dy2!Q|q diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc index 43606c65c2894206c9af4bf50c4299276534a8d1..e17016cb212921724c31be2625297dfa4cd198e8 100644 GIT binary patch delta 21 bcmdldx=)nnG%qg~0}v=n@TG6$*~A3^IL8Fb delta 21 bcmdldx=)nnG%qg~0}$-E{xxkQ&n7MaNDT)C diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc index ee7ecd4722a1d7f9df4411cd955af014dd88cb82..116e7653412053a101c27da298f332b51b5949aa 100644 GIT binary patch delta 21 bcmdlhvR8!XG%qg~0}v=n@TG6$G2{XOH+KX^ delta 21 bcmdlhvR8!XG%qg~0}$-E{xxkQk0BQTM!g1r diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc index 60e1f34a03c67b709a219973d2a42450cd4844b3..6a507f41c98dca7f4f461566884ba7916841e624 100644 GIT binary patch delta 21 bcmaE({6?AQG%qg~0}v=n@TG6$c_0V?LT&|k delta 21 bcmaE({6?AQG%qg~0}$-E{xxkQ&jUdKQM3oL diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc index d4d0b4cb42e7ef8843ab20eee1bba71dda414ec4..48b5685bca446870dfa062ea3b471d648eedcda6 100644 GIT binary patch delta 21 bcmdnuvc-kxG%qg~0}v=n@TG6$(NF>aJv9WQ delta 21 bcmdnuvc-kxG%qg~0}$-E{xxkQkA@NeOnV01 diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc index 180ff28882400ca86bc470030567d66f87362038..11623ea37e75d426badb2bfeba991ee5074710c2 100644 GIT binary patch delta 21 bcmX>ScO;JIG%qg~0}v=n@TG6$vCszqL%szR delta 21 bcmX>ScO;JIG%qg~0}$-E{xxkQkA*$}Qv?T2 diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc index 09f9790cd7edc5a0649d842cb824942b1ac60f9a..4bf2e3844b604a1f9b25283c73e68c18e728355f 100644 GIT binary patch delta 21 acmeAQ?+WKR&CAQh00hbseCZo`>a+nmECkd5 delta 21 bcmeAQ?+WKR&CAQh00cX(e@)xSQ>P68Npc4c diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc index 5870a307b2a990b37dc97d19107188f1fd54a420..9a542820b346f86fa1b56cb66fff828311866c86 100644 GIT binary patch delta 21 acmeAc?iS`b&CAQh00hbseCZo`>Nx>090V-@ delta 21 bcmeAc?iS`b&CAQh00cX(e@)xSQ_l$iKVk-F diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc index 7cfe0b8f25b11d46a16bc23454cc374265129de7..d0609fe3636c3abb13baf7087fb0afb3a9b844be 100644 GIT binary patch delta 21 bcmZ3cyiA$rG%qg~0}v=n@TG6$nI#ASHu40f delta 21 bcmZ3cyiA$rG%qg~0}$-E{xxkQ&n!UzMmPrG diff --git a/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc index f5cf08520800678c8fd3f3b32461df6010c87dd2..1c7fc52a2c1e6114294dd00d9507b014d1b7e8a8 100644 GIT binary patch delta 21 bcmX@3cSeurG%qg~0}v=n@TG6$aS#UpJ=O%Y delta 21 bcmX@3cSeurG%qg~0}$-E{xxkQkApY>O&kX9 diff --git a/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc index 9ea3b28eb9abc41a72bcc27d8f5b21021753617f..18984b1e51bbb0bfb2314243457a0259810a8727 100644 GIT binary patch delta 21 bcmdnPvWJD|G%qg~0}v=n@TG6$F<=4!H01;v delta 21 bcmdnPvWJD|G%qg~0}$-E{xxkQj{y?^L@NeW diff --git a/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc index 6663faa9094a77efb0ef9d3eb8591a1569b6c6bd..54548b4a61f66980cc24c913cddfd6afac57aa7a 100644 GIT binary patch delta 21 bcmX@1enOq+G%qg~0}v=n@TG6$*&_@9Js<@Z delta 21 bcmX@1enOq+G%qg~0}$-E{xxkQ&mLg_OlAjA diff --git a/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc index b70499425d902681e5ef242aacb972ad91a5f56a..97f8230bbe97cd48b7b9512ca2c3c870eaa26f58 100644 GIT binary patch delta 23 dcmcaPh4JPTMxN8Wyj%=Gpe(_czLCe*3jkBU1>67t delta 23 dcmcaPh4JPTMxN8Wyj%=Gu;cpIw2eHzUI1eS2o?YU diff --git a/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc index 1b9e341de331128286f08550d11eb1d257587d6e..31f5d496899c9a9d702e22a71548a7910cdb9ad2 100644 GIT binary patch delta 21 bcmaEA{nVQ0G%qg~0}v=n@TG6$xhV?(MC1jZ delta 21 bcmaEA{nVQ0G%qg~0}$-E{xxkQ&rMkXR4NDA diff --git a/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc index f178517c75815a7f239145cbf9e86775cad86f1e..4f1b477ffb858f73bfcc01aa1bd4fea365fa0009 100644 GIT binary patch delta 21 bcmaEx_%@N}G%qg~0}v=n@TG6$d1wFtOX~&} delta 21 bcmaEx_%@N}G%qg~0}$-E{xxkQ&qD(MTQLYw diff --git a/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc b/env_web/Lib/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc index 7aa81a6e5cd9996b2aee507f21cd0715e005c8bd..1e7f9868e26480299d82a1b6127e65f69e550f9c 100644 GIT binary patch delta 23 dcmezUi1GI$MxN8Wyj%=Gpe(_czL6)t5CCRg2L%8C delta 23 dcmezUi1GI$MxN8Wyj%=Gu;cpIw2eIZg#dM=2|oY; diff --git a/env_web/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc index 701b30308808220e0a783e50e05810ee57a40204..6f1ca2258ab98d93baa6ca1bd0f91db1ce79e0f4 100644 GIT binary patch delta 21 bcmeyT@=t~5G%qg~0}v=n@TG6$DG~wzM2Q74 delta 21 bcmeyT@=t~5G%qg~0}$-E{xxkQPmvG+Q_lx$ diff --git a/env_web/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/__pycache__/six.cpython-312.pyc index 575ca976940f47dcc6ff345002e5ff1ca2540d82..37e3f957968e8a59dc042cdb4ec1ee69c0478fd8 100644 GIT binary patch delta 23 dcmcbAi0S?zCZ5y0yj%=Gpe(_czL6(*Apl&d2BQD~ delta 23 dcmcbAi0S?zCZ5y0yj%=Gu;cpIw2eH$3ju5I2;Bex diff --git a/env_web/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc index 29c1d8fbfc4b16af6f6055c0131ce3a013751dc9..2b823bc97a63915d416a6c68595067694c6641c2 100644 GIT binary patch delta 26 gcmaF8ll}EhcAnF`yj%=Gpe(_c-pI3+hw=U$0CM{X3;+NC delta 26 hcmaF8ll}EhcAnF`yj%=Gu;cpIv__t-JdF46004;Z3Pu0` diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc index 8d0d9a94c074cc4a1a368a64e0c221fadc78f819..4446491e6e98f9523220514ca4133083cf36e06c 100644 GIT binary patch delta 21 bcmdnMzJZdpR diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc index 5ee1e8ec34d41b59fd0329e3ceed919b55ab9422..36ffa3c698057e3369ed9b22e85c8f48ed40ff44 100644 GIT binary patch delta 21 bcmaE5^va0mG%qg~0}v=n@TG6$iIW5XLtF(I delta 21 bcmaE5^va0mG%qg~0}$-E{xxkQPn;wGQlbY^ diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc index 0bf55fc83dc9d78a56ef3425e6bd5ea2e7abf441..0a600c3457f60df589c2b1b0fdfb3addb432d1a3 100644 GIT binary patch delta 21 bcmeB{>z3m=&CAQh00hbseCZo`{__Cz3m=&CAQh00cX(e@)xS^Pdj@LJ0=~ diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc index fc0d37d9e6b27a282c7bc45bd03b4173179cfc47..154ba1357525fc30d062ae6466b9d0616f5278a0 100644 GIT binary patch delta 21 bcmcaucd?G=G%qg~0}v=n@TG6$akU2kO0Wfs delta 21 bcmcaucd?G=G%qg~0}$-E{xxkQkE=ZZS@s9T diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc index 788296452a1927e832380d297572b1fb7a2ea904..c118454527751b5024c259747199bb64fbfd0b60 100644 GIT binary patch delta 21 bcmZ3gv{Z@bG%qg~0}v=n@TG6$krV^~HKGI| delta 21 bcmZ3gv{Z@bG%qg~0}$-E{xxkQkE9>~MCb-v diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc index 5c1e9a1cdb08613bcde39b6d79453ef4356f08f1..db7bfab80298ae3fef84d9e8fd13c70ac2f1bba2 100644 GIT binary patch delta 21 bcmca$a>0b>G%qg~0}v=n@TG6$aghQ5KV<~Z delta 21 bcmca$a>0b>G%qg~0}$-E{xxkQkBbxlPOAqA diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc index b7e18f5519ca9ed6b8db764c2440b9711e3a221b..9781359fd37535b4f9700fc8d1cd6841a707e232 100644 GIT binary patch delta 21 bcmZ2)wBCs4G%qg~0}v=n@TG6$QI-S%Ij#g} delta 21 bcmZ2)wBCs4G%qg~0}$-E{xxkQkFq2HNc0Aw diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc index 218bfe8eb72880de94b6adac00acf9de968c78cc..b823d6bf7bb05bcc178b8fe9fe0abe989aeeb1eb 100644 GIT binary patch delta 21 bcmdnOyM>qMG%qg~0}v=n@TG6$S-}PXHSYwO delta 21 bcmdnOyM>qMG%qg~0}$-E{xxkQ&k8mGMKuP~ diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc index 0a81ef5b38201e0c3d673fa360cbc6227729358d..ff7e66552a5c320da56a105f5f67564e6e5f1e0a 100644 GIT binary patch delta 21 bcmcc1e3zN$G%qg~0}v=n@TG6$xyT3rJ17ME delta 21 bcmcc1e3zN$G%qg~0}$-E{xxkQ&qYQ6N^S== diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc index 03b4872331ec74f7e5174ce371d693db02aaf459..43f1ea2b2847f206e80878dc9af374885e392eff 100644 GIT binary patch delta 21 bcmX?MbHaw_G%qg~0}v=n@TG6$v5^A+KS>13 delta 21 bcmX?MbHaw_G%qg~0}$-E{xxkQkBuAvPLBr# diff --git a/env_web/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc index ba72821f73fa150f2a52215a46ed2f8b8b6b530f..aa3519a8235813a618bd5d479f8ccde9ee262d57 100644 GIT binary patch delta 21 bcmca3dPkJ!G%qg~0}v=n@TG6$xxfVgJ+lQR delta 21 bcmca3dPkJ!G%qg~0}$-E{xxkQ&jl_3O!)_2 diff --git a/env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc index b462565f3ab31118ab4a4499f4746146998b1af1..62400c817ad8d1b4c2a131440e805d18601d37fa 100644 GIT binary patch delta 21 bcmaFC^n!`!G%qg~0}v=n@TG6$iD3i)JJ1B0 delta 21 bcmaFC^n!`!G%qg~0}$-E{xxkQPYfdfOBM#y diff --git a/env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc index 56351a4611936195fc6b65f7bc41daaa9ade5e5e..2f35371b35b1a1dd6eec6d1922e8dd86fccb7dcd 100644 GIT binary patch delta 21 bcmZ3_x}KHiG%qg~0}v=n@TG6$Stc3O<*G%qg~0}v=n@TG6$vF8Q=IuHbP delta 21 bcmX>tc3O<*G%qg~0}$-E{xxkQk3Ba4Nmd50 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-312.pyc index 9e84de02f369f2e3de4195f3a15550c6641c3881..a9d8ae52b7ab61ac7f3a94d09170639a802fb3cd 100644 GIT binary patch delta 21 bcmZotX;R@i&CAQh00hbseCZo`z6k;VGB50|`}FpLB@ delta 21 bcmbQrJ(Zj1G%qg~0}$-E{xxkQPbVt?Khg$q diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-312.pyc index b9709a2f7b1eb4261b69fb50a05c9c9d0bec9104..b0768752fb16e622e36c210e89fe1a3963685237 100644 GIT binary patch delta 21 bcmccMeZiaOG%qg~0}v=n@TG6$Iid;xL)rz1 delta 21 bcmccMeZiaOG%qg~0}$-E{xxkQ&kSz diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-312.pyc index 40ce572b0778bcdb8115c5e7afd0b6cd5f072fa4..7b10d1ce3c3e8c3ed2aa299bc5c949cf46d89263 100644 GIT binary patch delta 21 bcmX@2a72OUG%qg~0}v=n@TG6$u@C?NI%@=Z delta 21 bcmX@2a72OUG%qg~0}$-E{xxkQkA(mLNwEgA diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc index cae9ad870bd189f72af21e85b417023fae291fe0..ea13f315d7fdbd51c50c60df3a81d0b21ff20464 100644 GIT binary patch delta 21 bcmX@2eng$;G%qg~0}v=n@TG6$*&z%7Ja`2P delta 21 bcmX@2eng$;G%qg~0}$-E{xxkQ&kkV#OTGt0 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc index a14e65bded03fedc3a5bb2b291b167ce513fbce1..839ea38bdc8640d647f656b170a886416111b105 100644 GIT binary patch delta 21 bcmca0cR`NlG%qg~0}v=n@TG6$ap4C5JQf6) delta 21 bcmca0cR`NlG%qg~0}$-E{xxkQj|)ElOI!xh diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-312.pyc index 1ba0b9c81eee24cf25d19e510f5e284ca0a4f9d4..7ed945e44245e9ccdbcf2a33925f657a33f537d2 100644 GIT binary patch delta 21 bcmdnbwx5mXG%qg~0}v=n@TG6$F=hq;HLwIJ delta 21 bcmdnbwx5mXG%qg~0}$-E{xxkQk1;aj=K}-gW diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-312.pyc index bcd1feed08d8aa0c06c2cc4b8487ba1b549fb156..a1aa9576893e438a74f71ad87df0ff27b405b092 100644 GIT binary patch delta 21 bcmca7eovg|G%qg~0}v=n@TG6$xx@_sK2!xT delta 21 bcmca7eovg|G%qg~0}$-E{xxkQ&n0dEO_~R4 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc index 913078f34bc9d90961495e06b64ea58e8f092bdf..7b9a937a52344d5c64791f6d0a218b7492e916e7 100644 GIT binary patch delta 21 bcmZorX;9%g&CAQh00hbseCZo`z6b&UG28^U delta 21 bcmZorX;9%g&CAQh00cX(e@)xS^F0t!`F$x4g delta 21 bcmbQiJ%gL)G%qg~0}$-E{xxkQPY){qKu`vH diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc index 357a65bcccc9053f6bd36402204b8f2c9c311645..3ccee5d8e1d688e2d09079743461d9a808281b2c 100644 GIT binary patch delta 23 dcmaENh4I}LMxN8Wyj%=Gpe(_czL6&>3jkrz2D<0t!`F$x4g delta 21 bcmbQiJ%gL)G%qg~0}$-E{xxkQPY){qKu`vH diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-312.pyc index d45c48cb089b1762a384f5d9602cc03670b66bc0..ce95cec70e58b6ec5a48de371d90a2eeb3d9266b 100644 GIT binary patch delta 23 dcmaDbmGQw;MxN8Wyj%=Gpe(_czLDpO7XVfx26F%a delta 23 dcmaDbmGQw;MxN8Wyj%=Gu;cpIw2eGhyZ~is2(17B diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc index d26f501ca45d1807ae43b68548ef8c27f87f0cda..765aea73d178c0a58b7acf708d890e23cb2c9f08 100644 GIT binary patch delta 21 bcmZ3=y_B2hG%qg~0}v=n@TG6$naK(OGb{vW delta 21 bcmZ3=y_B2hG%qg~0}$-E{xxkQ&rDVTLUIP7 diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc index 0f2b00258c631a080222a601617b6116b7f6eff7..d335276288a6e5427c385a86b79bc79b5be91641 100644 GIT binary patch delta 21 bcmaE%`$CuJG%qg~0}v=n@TG6$xg!PuLq`RL delta 21 bcmaE%`$CuJG%qg~0}$-E{xxkQ&mA!UQjG_{ diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc index 8ed321ec39e2962ac9a135db5f3bc8098619f4f5..ab8808f6451d869f4904fa6f78fff6da88e5b895 100644 GIT binary patch delta 23 dcmdnGmT~J^MxN8Wyj%=Gpe(_czL95T7ywdu1}*>q delta 23 dcmdnGmT~J^MxN8Wyj%=Gu;cpIw2eF~!vJBv2xtHR diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc index 5e74f24be7e0fe03a811ce484af61db8a770b743..a8e52f1b6ee502352f37be459fe8bde0873555ea 100644 GIT binary patch delta 26 gcmaFb!TPj=mFF}sFBbz4C`<6AH}Y)dVT^PE0A|<*d;kCd delta 26 gcmaFb!TPj=mFF}sFBbz4?703lt&wLd4`ZYY0DQ~{wg3PC diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc index 96239d12bd72c9ca58e4eb4594c5718eaccfe80b..6437ed299f892e86b7eb505a3ae2a8ca1b0de5f4 100644 GIT binary patch delta 21 bcmbQkJ%^j;G%qg~0}v=n@TG6$nZODFF|q_q delta 21 bcmbQkJ%^j;G%qg~0}$-E{xxkQ&jeNgK==lR diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-312.pyc index e64dc4c6a22a0be99fa8d5d47bce35bc0b4e21bb..c2bed173d42bfb98ad9e87ad76c747e2e11e15f5 100644 GIT binary patch delta 23 dcmZ3!m1+4_CZ5y0yj%=Gpe(_czL974EC5lp23i0B delta 23 ecmZ3!m1+4_CZ5y0yj%=Gu;cpIw2eHoX8{0U`v{Z( diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc index 0a3349e2e08d246d73b6f2f4e1b6ebba7cb37085..d32d1d9bdaf27acb1401b966e0998760b5f8f04b 100644 GIT binary patch delta 26 gcmcc9$$F=gmFF}sFBbz4C`<6AH}Y)dVZ7i10A@S};{X5v delta 26 gcmcc9$$F=gmFF}sFBbz4?703lt&wLd590+F0DLeB9RL6T diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc index 91a524f501c4470b5e7439e5182de49ed69ad16d..5ea0fd0b906481557f85c5b19de3bb9dd9797b5a 100644 GIT binary patch delta 26 gcmaEMljYe>7M|0*yj%=Gpe(_c-pI3+hw+vU0CuGZhX4Qo delta 26 gcmaEMljYe>7M|0*yj%=Gu;cpIv__t-JdC$=0F0Rl!2kdN diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-312.pyc index 3b388e20b2502d05c6db0dfe03e703490fd16a77..c119af1b533522e6aee9d7b4241fb4c199495776 100644 GIT binary patch delta 26 gcmaEQm*weQ7M|0*yj%=Gpe(_c-pI3+hw-K!0CzA4jsO4v delta 26 gcmaEQm*weQ7M|0*yj%=Gu;cpIv__t-Jd8K>0F5LG$N&HU diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-312.pyc index c938ebcdc4e550dc017e979afa3a59343c3b306f..995fbbdf761f1761da47381c4d68bee9b962effe 100644 GIT binary patch delta 26 gcmZ42$-1tSmFF}sFBbz4C`<6AH}Y)dVO-<_09_IWSpWb4 delta 26 gcmZ42$-1tSmFF}sFBbz4?703lt&wLd591;i0CNTilK=n! diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc index 80145332d6638d760dbdbea5a0d19aa13570564d..9db91c66ca2de80cbcb924aa55629205a5830245 100644 GIT binary patch delta 26 gcmX@RjqU6Px# delta 26 gcmX@RjqU6@~ delta 26 gcmbP!pJn=e7M|0*yj%=Gu;cpIv__t-JdEA?0Dbug;{X5v diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc index 411173337a66091602f0772a9b24351db8fe4b5a..6c226015275ae72f17cec78f515ef87f4b69140b 100644 GIT binary patch delta 26 gcmex%m*v}C7M|0*yj%=Gpe(_c-pI3+hw+sj0D6-L!2kdN delta 26 gcmex%m*v}C7M|0*yj%=Gu;cpIv__t-JdCgO0FZ|X`v3p{ diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc index 4b12f18376468675d1716aec375559053c10c05e..77f195a488ce84fd5d06de8680487360af48691c 100644 GIT binary patch delta 21 acmZoMZ!zaN&CAQh00hbseCZo`Dx?84U<7gi delta 21 bcmZoMZ!zaN&CAQh00cX(e@)xSQy~oiL#76- diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc index ece5a542af51ba7c054640bb860ee0396867852d..6a19b494541040156128f5412f4ac78ad6c4b5ba 100644 GIT binary patch delta 21 bcmdmCvBQGrG%qg~0}v=n@TG6$(UAcFJP!ns delta 21 bcmdmCvBQGrG%qg~0}$-E{xxkQkB$rgOH~HT diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc index b82ae5ab9579e16dacfe3dd2983e6b7f82c56a58..4fef0aab26b80cbcd6086c65ce52cef1ec9ae58a 100644 GIT binary patch delta 21 bcmaDU_fn4MG%qg~0}v=n@TG6$iRA|XKrjU3 delta 21 bcmaDU_fn4MG%qg~0}$-E{xxkQPb@zGPj&|# diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc index 1f78c63dc16881120be558d8b32d6933e3be37fd..24e8e06970c1c07710f9a3da4897bd7c558cb608 100644 GIT binary patch delta 21 bcmcb|bB~ATG%qg~0}v=n@TG6$31R~PJFNtj delta 21 bcmcb|bB~ATG%qg~0}$-E{xxkQPY@dbO7jNK diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc index 9f66b3eaafd9985249b3bd97c6fedd42faa63d00..cb3c1b19ed24ca7a606d883565e29cda9805f0a1 100644 GIT binary patch delta 23 dcmbQgj%ofnCZ5y0yj%=Gpe(_czL7_GIsi^91+f4C delta 23 dcmbQgj%ofnCZ5y0yj%=Gu;cpIw2eH%(*a#^2kQU; diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc index 502fc87dca85fbfd2150b83b9a18f02377b50d7c..1136b953fa576361452f1ae77a94d98c5867eaa5 100644 GIT binary patch delta 21 bcmZ3)x`>tMG%qg~0}v=n@TG6$nZ^VFF~tMG%qg~0}$-E{xxkQ&om|gK@A3p diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc index a7e11e04e7ad88ace8a8b641a5485dbd56130ca3..f81ba647bd3800d38a54472a13b757bf051903f7 100644 GIT binary patch delta 21 bcmbPhG}nmdG%qg~0}v=n@TG6$5tIY~Ho62c delta 21 bcmbPhG}nmdG%qg~0}$-E{xxkQkDw#~MgRtD diff --git a/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc index b5174788bfd237d7e4517835789eb4b2d0322f52..d04c6e5812e59c6c9b326c47f734c2aa5a681696 100644 GIT binary patch delta 21 bcmcaFbYF<)G%qg~0}v=n@TG6$3FZUvJ?{nM diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-312.pyc index 0546eb505612866a0cab0acec3b6ce16076b2b2c..2efbb3a1e652ea57261495c4dd9b7aa17b4f85db 100644 GIT binary patch delta 21 bcmbOsKSQ49G%qg~0}v=n@TG6$>EQ@loFBbz4C`<6AZ{%@y002(E1&jay delta 23 dcmX@#z<9oak>@loFBbz4?703lZ6lAf0{~tH2gU#Z diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-312.pyc index be5dd65a4624a905b0889164e06c01a7dd89ec3c..d20c40f0cf13c13751eb9f46977b45f1a4de16a5 100644 GIT binary patch delta 21 bcmeB>>5$<$&CAQh00hbseCZo`{_p|-G57?! delta 21 bcmeB>>5$<$&CAQh00cX(e@)xS^M@AzK|Tib diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-312.pyc index bbfbc94ac9144a6c813e6199df635b2380614e84..9ed531e0d5094764bb91f6a5a098abab6135b06a 100644 GIT binary patch delta 21 bcmaE1|H7W(}9Y6TAf delta 20 acmeys_<@nF&CAQh00hbseCZo`Dn$V@yaZPO delta 21 bcmZqGZq?>F&CAQh00cX(e@)xSQz;4nLIMVn diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-312.pyc index 70145830a2dc64afaf02b885dd2d12f59c8da7bc..8bad27e825cf56850cb319066516ba9fb19bc924 100644 GIT binary patch delta 23 dcmaFZ%lNRDk>@loFBbz4C`<6AZ{)e^1^`tA24VmJ delta 23 dcmaFZ%lNRDk>@loFBbz4?703lZ6nWBHvnWx2%G=_ diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-312.pyc index 911e83064a09cff3baf662d9b80ba86c6fb35f78..7a0cc80384fa1d0cfc8ed10328bb247c36b02cad 100644 GIT binary patch delta 21 acmeB+>5Jhx&CAQh00hbseCZo`nDhWTl>}`7 delta 21 bcmeB+>5Jhx&CAQh00cX(e@)xS!=wiQN!tde diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-312.pyc index 0f4fdb19a4b1d586511a64472f3d71a8adb741ef..9228c234943cef5dc39743ddfd1f9b1ec9cbe727 100644 GIT binary patch delta 21 bcmcblc1exrG%qg~0}v=n@TG6$aT5jrJ)Q)z delta 21 bcmcblc1exrG%qg~0}$-E{xxkQkDD+6Oymaa diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-312.pyc index 52548ed292f847bd22027570a71f32ae5399cc8d..405d5a21a4d15ffbeb7339bc22f6a14cd4b16da4 100644 GIT binary patch delta 21 bcmaDP{79JRG%qg~0}v=n@TG6$xyA_qK4Jwj delta 21 bcmaDP{79JRG%qg~0}$-E{xxkQ&oxc}O{fQK diff --git a/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-312.pyc index 7efc01200892be2e1f2f62f3e437ac669521ae2b..819b8ec3cb540684789dbb35cd64ec18427eca32 100644 GIT binary patch delta 21 bcmexo{Lh%@G%qg~0}v=n@TG6$`6LMdN6H1( delta 21 bcmexo{Lh%@G%qg~0}$-E{xxkQ&nHO$R}csg diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc index 9684c5acb38bc3d805e4f450b1085b3b038fd19a..e6c15bf4d9a31071c2074f6fe2fb4d2fc1a49efd 100644 GIT binary patch delta 21 bcmbQwHJ^*;G%qg~0}v=n@TG6$5oQGdF$x3I delta 21 bcmbQwHJ^*;G%qg~0}$-E{xxkQk1#6$Ku`t^ diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc index b77610a2f3c725207d3bb6dd33b8668a682b3948..6b83dc0a8e6c0190cbd83d77954d0c2e4eef4419 100644 GIT binary patch delta 23 dcmX^Agz5YfCZ5y0yj%=Gpe(_czLCdy698Xa2FL&a delta 23 dcmX^Agz5YfCZ5y0yj%=Gu;cpIw2eH@n*eU22?78B diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc index 33cf587b9799ef5ab50d742afbcb5bbbaa1649b1..7fe3fc8c1c65b5772cbb0c86d5c7929912ea406c 100644 GIT binary patch delta 26 gcmbQ*!ZNjmh37OcFBbz4C`<6AH}Y)dVdP{209CyOKmY&$ delta 26 gcmbQ*!ZNjmh37OcFBbz4?703lt&wLd4@loFBbz4C`<6AZ{#`c3;@loFBbz4?703lZ6nWVX8>W32yXxY diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc index 2758cea739845116065d4d0ff2ff88a498cf67df..18d942be272fcf3a0ab964607e3a5ac46b71222f 100644 GIT binary patch delta 23 dcmZ2BlX2NhMxN8Wyj%=Gpe(_czL95^4**P;1s{jB1 diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc index f0ae554aa1bab48756d311e2a906403506709739..12c7e97ca904dd627f2a78e0def3090b88f6f82b 100644 GIT binary patch delta 23 dcmX@{mhr?}MxN8Wyj%=Gpe(_czL9578314}2L}KE delta 23 dcmX@{mhr?}MxN8Wyj%=Gu;cpIw2eG_$^dV52|)k= diff --git a/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc index 29a32a299e07c7936358550ff52821ee146525ea..e6d8a198f012890e8cedcd3d8c1ddcd2ef398c7d 100644 GIT binary patch delta 23 dcmdl#m3jYEW}ef$yj%=Gpe(_czL971DF9I<29y8* delta 23 ecmdl#m3jYEW}ef$yj%=Gu;cpIw2eHQPXPd6Y6#8% diff --git a/env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc index 5dc3b5344af0375de1421df356973f670b70602d..6f4e89ba800961e2c85c6f39ac6216132581918d 100644 GIT binary patch delta 21 bcmaFG{)(OFG%qg~0}v=n@TG6$xyK9uJ>&%} delta 21 bcmaFG{)(OFG%qg~0}$-E{xxkQ&pl=UO)3Xw diff --git a/env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc index f29671310c1003447ff1c3bb42ec4472f5ad61bc..a321278b51c387a1104c96db0b2f28261fc0adab 100644 GIT binary patch delta 21 bcmX@dbdHJVG%qg~0}v=n@TG6$abg4jH;e>K delta 21 bcmX@dbdHJVG%qg~0}$-E{xxkQj}s#RM$!g` diff --git a/env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc index 7420cd4fe1acb57b5e978af9d049fdab829655f5..65424f5e914c5cc6a3d1b78f7da3ac9b2c3c188c 100644 GIT binary patch delta 23 dcmZ3ogn7vlW}ef$yj%=Gpe(_czL7`b5&%uq1?d0) delta 23 dcmZ3ogn7vlW}ef$yj%=Gu;cpIw2eFxmjGQF2qORh diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc index 3315d148c8ddb9f9c2f8465e31f9a6b66be05038..4c9230cea0d9be42cf9f2331f2d7c09881365798 100644 GIT binary patch delta 21 bcmbQuKAWBAG%qg~0}v=n@TG6$>1PH2Fzy6D delta 21 bcmbQuKAWBAG%qg~0}$-E{xxkQPd_sNKr{w< diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-312.pyc index a02323699d9d0b63fa7c24469734bf68dd065fb3..d992f75d5b38ca67024d7d5f03921a5070c629b3 100644 GIT binary patch delta 21 bcmX@Ca#)4uG%qg~0}v=n@TG6$F&6>=I@<(* delta 21 bcmX@Ca#)4uG%qg~0}$-E{xxkQkGT*4N+AZi diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc index b52bc97d8f30b710ca19d8da25a668b7d75d9b38..4cc7cc2295b1d9908cc027c14b638f8068ad7cd0 100644 GIT binary patch delta 21 bcmZ3;zL1^gG%qg~0}v=n@TG6$naT_RG3o?S delta 21 bcmZ3;zL1^gG%qg~0}$-E{xxkQ&s1grK`;i3 diff --git a/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc index 1ff3129d22a2029229a2ad3dfbdcdcb180ee8baa..cde8d0e3a2602842f98fc4c18171039b37022392 100644 GIT binary patch delta 21 bcmX?7f25x0G%qg~0}v=n@TG6$*9P3K_vwD delta 21 bcmew%@n$PM*`eyj%=Gpe(_c-pJF+!?=})X-f_Og)j&5 delta 29 jcmX?blk>n$PM*`eyj%=Gu;cpIv__s*9>%RaOj~jQq0$O0 diff --git a/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc index 96fa401615c72a62ab1409ada786b97ef75e2b37..bf7b8c1de6f21d10b6661d2eba09a072894dc607 100644 GIT binary patch delta 21 bcmcb}cae|hG%qg~0}v=n@TG6$ab*VpIoJeq delta 21 bcmcb}cae|hG%qg~0}$-E{xxkQk1IO>Ngf8R diff --git a/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc index 54117e0da59afd53db792a423429cb03ff0a1d6c..20ba6444140f1dfcf04fe76b895c77885466ded0 100644 GIT binary patch delta 21 bcmbO%Fj;`-G%qg~0}v=n@TG6$Vdnq;K@&CAQh00hbseCZo`eklR~H>d>| delta 21 bcmZp3X>;K@&CAQh00cX(e@)xS^Ggu`M(zhv diff --git a/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc index 43aa349da5dd7205eac40f43863f0099f64f3cb8..23815d77ea3d30263124e715951714504ee2f143 100644 GIT binary patch delta 23 dcmaEKh3U~1CZ5y0yj%=Gpe(_czL6(v6#!rx2H5}r delta 23 dcmaEKh3U~1CZ5y0yj%=Gu;cpIw2eGrs{n6d2@?PS diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-312.pyc index 63d1ad48d528376808bbee33cca4911233d53513..7dc291f6acf2d5e059c15fce476460b47219f445 100644 GIT binary patch delta 21 bcmZ3$x`37EG%qg~0}v=n@TG6$nZg7BF>?e- delta 21 bcmZ3$x`37EG%qg~0}$-E{xxkQ&lDyAK)D8k diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc index 625e4843d7025c40551265089f038b275d26896a..42ffcd8872d8ef4fed8263690fd1381ff4047bfa 100644 GIT binary patch delta 21 bcmeyv{D+z6G%qg~0}v=n@TG6$`M?MOKt2Un delta 21 bcmeyv{D+z6G%qg~0}$-E{xxkQ&j&^TPlN}O diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc index 70c5168d07ccce9c8311bd550ba5812b3bf8bd8c..3f782684cf3e652f8448c4615535e49535ed8848 100644 GIT binary patch delta 21 bcmcZ>cP)cP)mN>MxN8Wyj%=Gpe(_czL7__3IJWN25bNT delta 23 dcmdn_g>mN>MxN8Wyj%=Gu;cpIw2eHvRRC=D2&Mo4 diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc index 7827fc7a3e23434fbf90b016283b903f3b3f6741..dca1c64dd1fa66f8181cb5fbff3300e5535f3654 100644 GIT binary patch delta 23 dcmdlsg>l;yMxN8Wyj%=Gpe(_czL7`E3jj@+1#l;yMxN8Wyj%=Gu;cpIw2eGkUI1L)2dw}A diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc index 0deffee57307f8b94d761da566b63fb3c563579d..b9799cf67c9cac2a6f162ba7dbdd217a9fd81cc9 100644 GIT binary patch delta 21 bcmbQHH%*V{G%qg~0}v=n@TG6$;SvV`H2MS* delta 21 bcmbQHH%*V{G%qg~0}$-E{xxkQ50^LqL_h{i diff --git a/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc index 398d344721683f75a4b7f4d545217730e89fbf91..db0269d00f866845b72852a91be96f9dacc370cc 100644 GIT binary patch delta 23 dcmeC3!`M5Ak>@loFBbz4C`<6AZ{%V00{};_1q=WH delta 23 dcmeC3!`M5Ak>@loFBbz4?703lZ6gn(9{^VM2Sxw@ diff --git a/env_web/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc index 95e59a76ac827d1769c306c9ede0251088587faa..c53f6c7e94cf00adb1d651bc45c2d65f02021737 100644 GIT binary patch delta 29 jcmccegX78%4xZDzyj%=Gpe(_c-pJF+!?=})$-@Q!j;sf| delta 29 jcmccegX78%4xZDzyj%=Gu;cpIv__s*9>%RaOdd7>t4;~@ diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc index 8b87615f0409da0807ca21086697b44a20b1f94f..11737993a87c8e8189fbcbe5e846b293e1c8a523 100644 GIT binary patch delta 23 dcmbQ<%Q(H4k>@loFBbz4C`<6AZ{+EA0{}<@1%v@loFBbz4?703lZ6i;&8vs{G2fhFR diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc index 2ed234f9d24574c86f97faae924595a6dd696b5e..8a4e227c6258b9207d09c7927ce27d3e23d9d89b 100644 GIT binary patch delta 21 bcmX@Ye}tdsG%qg~0}v=n@TG6$*})C~INSuz delta 21 bcmX@Ye}tdsG%qg~0}$-E{xxkQ&kl9~NFoOa diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc index 1bc74b2fea8ffce64bf554b3c74851f0f76978cb..055231908bf5591e8b4b0a7790da426a4531e7f5 100644 GIT binary patch delta 21 acmeD4>ht0`&CAQh00hbseCZo`m{b8b-~>Pb delta 21 bcmeD4>ht0`&CAQh00cX(e@)xS!=wrTMG%qg~0}v=n@TG6$d8P^gNp1!1 delta 21 bcmez5{mGl>G%qg~0}$-E{xxkQ&ofm3ShNTz diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc index d9a336a85613bf0d56410551684ad2cf5e00bd43..d211ee79ad677d72d79ad6fe8a0f7d1951125983 100644 GIT binary patch delta 21 bcmZ3lvtEbiG%qg~0}v=n@TG6$Q5FLLIL8E7 delta 21 bcmZ3lvtEbiG%qg~0}$-E{xxkQkFpp5NDT&( diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc index 419f843f8a52e7e276183d8bd1f714ee870b4d9b..582c5ce04c52163e5953d176d5fc2fc8922df504 100644 GIT binary patch delta 21 bcmX?{csP;gG%qg~0}v=n@TG6$*=_&;MF$0# delta 21 bcmX?{csP;gG%qg~0}$-E{xxkQ&vpX{0 diff --git a/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc index 809f2b283b5a1f60e7a43ba012238522bed3d97c..76b8d5f7141b19ffcdcb80d129ba4f5a38d54eea 100644 GIT binary patch delta 21 bcmeyE`Z1N~G%qg~0}v=n@TG6$d1?dzO)Um2 delta 21 bcmeyE`Z1N~G%qg~0}$-E{xxkQ&r>4+TyqF! diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc index a4ec55e665078f85569aaadb26e8a0c3062e5213..c77f1730c26fd87e813e4fdf8360b16fc84a280f 100644 GIT binary patch delta 21 bcmX>teOj95G%qg~0}v=n@TG6$+0P3AJJ1CI delta 21 bcmX>teOj95G%qg~0}$-E{xxkQ&wgG2OBM$^ diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc index 498f4b8c90202bc7e1bb4840b2f3c89778fa5838..b0d8b8290352cf437efa72365d131e434199c912 100644 GIT binary patch delta 21 bcmeBV>ty3O&CAQh00hbseCZo`{xSgoF4F{t delta 21 bcmeBV>ty3O&CAQh00cX(e@)xS^Op$#J{bnU diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc index 782de4fd03729967afb5cad062daa3440fc7991c..684323f8f8dc9b000df822c2f3a8012642d075e2 100644 GIT binary patch delta 23 dcmbPnfpNwKMxN8Wyj%=Gpe(_czLAF~0{~JC1+M@A delta 23 dcmbPnfpNwKMxN8Wyj%=Gu;cpIw2eGG8318Y2k8I+ diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc index 388b8f58c044025dcb25815cb32855546f935a00..37d99fc15cb74ef1da600503bd2a96f6dc376a1e 100644 GIT binary patch delta 21 bcmaDW@>YcBG%qg~0}v=n@TG6$N#p_mKUW0S delta 21 bcmaDW@>YcBG%qg~0}$-E{xxkQPa+opPMrr3 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc index a7bf0bac8fa91c4c85f26a93221a7c2e13260ce0..a1a54301de39995fec4abb62c4aea195656967f9 100644 GIT binary patch delta 21 bcmX>td0LX^G%qg~0}v=n@TG6$+0O$2JA(xL delta 21 bcmX>td0LX^G%qg~0}$-E{xxkQ&wd^NO34Q{ diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc index 4174b1438eb7102c9392a1d418a8f798cb340dac..6324c3ab367e863710d4d766ce09fcb81cb13a8f 100644 GIT binary patch delta 21 bcmZosX;I-h&CAQh00hbseCZo`eh2~pGK2)e delta 21 bcmZosX;I-h&CAQh00cX(e@)xS^Ft5-LCOaF diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc index 7e306c1a3735a272f8020898da3dec92f1845401..88712cd23568ca467d3e69ba5b1d0f8c36d185e9 100644 GIT binary patch delta 23 dcmaE|n(4`ECZ5y0yj%=Gpe(_czLDp~Q~+Af2KWE~ delta 23 ecmaE|n(4`ECZ5y0yj%=Gu;cpIw2eGBrUC$J6$vr` diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc index 886150cc6a70743b9e46d29bd59b2e4133d652dd..1a002da6599d7db26961ec3f4d22003cb3767531 100644 GIT binary patch delta 21 bcmX@jbDD?eG%qg~0}v=n@TG6$v1bDSIFAHe delta 21 bcmX@jbDD?eG%qg~0}$-E{xxkQk3AazN7V+F diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc index b90e696c9a2da0ac092d1de03a9da4dd6e7c9453..c29f9e53eb98db7d67178d5df2fc4d3aeb204bb1 100644 GIT binary patch delta 21 bcmaDa^t` diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc index 003de1d7e7d7e1c9ba3e55e8d8f167b144ab0916..b2f1f965ca99d3ec75e0f46ee9009b3e67505f8c 100644 GIT binary patch delta 21 bcmdn5x?h#&G%qg~0}v=n@TG6$*(?MAJ6Qzw delta 21 bcmdn5x?h#&G%qg~0}$-E{xxkQ&t@S2N}mTX diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc index 7e4d61d340a6f46d05311b295bbcb430cf3b52b6..876ea9e340d1605df2db2080c22397e308c1db82 100644 GIT binary patch delta 21 bcmcZ@b}@|SG%qg~0}v=n@TG6$an%L@M63lT delta 21 bcmcZ@b}@|SG%qg~0}$-E{xxkQkE=ESQ}PF4 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc index a24d2133545e905521cdd5e330ef0b808b156a2d..4e340f5b2dc851cde803c50c4b7711d475344a53 100644 GIT binary patch delta 21 bcmdmMve$&?G%qg~0}v=n@TG6$F_Z!TJVykU delta 21 bcmdmMve$&?G%qg~0}$-E{xxkQkD(L*ON|E5 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc index 56a7f2622cd76788e59fdffdcfbf371d20e55114..3f7f9d8692da83ac61729cde770232af9bb7fe09 100644 GIT binary patch delta 21 bcmexq|I?o5G%qg~0}v=n@TG6$c`FY9NX7-_ delta 21 bcmexq|I?o5G%qg~0}$-E{xxkQ&s%u_SPTds diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc index 48616437ed0beda5862a503faa3bcad06262fc85..7aab5be41bb5fb2f5fba198019138aa251e30bc8 100644 GIT binary patch delta 23 dcmZo~Vrp+<;yKOB%f$c$$`X9(8+m>=002bL1^NI0 delta 23 dcmZo~Vrp+<;yKOB%f$c$JFb6C+sN~~0RU7M2s8iy diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc index c313a301d8b48346a05f1b79b04c7d4b4d5b7b70..8957c964a48dbc3b0de64ad984748d7a262b896f 100644 GIT binary patch delta 21 bcmX?+dm@+TG%qg~0}v=n@TG6$*<%I(N2dkF delta 21 bcmX?+dm@+TG%qg~0}$-E{xxkQ&mJ=XR_zD> diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc index f875483315124a3482e8f52437043e9cfc3ff0d0..a2d312e0cf9f6d6cb2d2c7a0ee3191c2d41f1aee 100644 GIT binary patch delta 23 dcmcb;g6Z}OCZ5y0yj%=Gpe(_czLCd&3IJEW237z7 delta 23 dcmcb;g6Z}OCZ5y0yj%=Gu;cpIw2eIeQvhcK2#^2( diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc index 813ace8fba6039f3da71f1537eb8edb9d5ceef44..d21bbda4b7f140741c95ca9a12549580a41a1fea 100644 GIT binary patch delta 21 bcmdmKw$qH~G%qg~0}v=n@TG6$(Uk@OJM09H delta 21 bcmdmKw$qH~G%qg~0}$-E{xxkQkFGQTOELz@ diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc index 46aee6cdde0439f84a008d1d79d3329771b31361..77d4e7f78906a77a6394532fa103be45f0b5c715 100644 GIT binary patch delta 21 bcmZ3axJZ%bG%qg~0}v=n@TG6$nI-@LHT?vY delta 21 bcmZ3axJZ%bG%qg~0}$-E{xxkQ&olu5MMDP9 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc index fdf2d7286139c03d5d0fafa5eb380f793efd76ff..61fbfb2e6f26d1aee38786f1fb80db2c406e7e43 100644 GIT binary patch delta 21 acmeBG>{aAB&CAQh00hbseCZo`8U+9{iv(5x delta 21 bcmeBG>{aAB&CAQh00cX(e@)xS(SX{m(*%qF delta 21 bcmeCS?6%}N&CAQh00cX(e@)xSQ!fJmMHvRh diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc index 1fe6fe239ea97366108a85a6dbe4f03ed700ac5d..9aa202c1e65941bc280dcfaade7a52cfeb9ea33b 100644 GIT binary patch delta 23 dcmZ3!mudN4CZ5y0yj%=Gpe(_czL974JOEPx25tZV delta 23 ecmZ3!mudN4CZ5y0yj%=Gu;cpIw2eHo=K%m>M+m3@ diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc index adad9a4d22e6ac7dad98e3003cf5e6fe6b525587..9fdb019d07b28638e181166d858cbc3e636e597d 100644 GIT binary patch delta 23 dcmX?inep6ZMxN8Wyj%=Gpe(_czLDopCIDRq2G{@q delta 23 dcmX?inep6ZMxN8Wyj%=Gu;cpIw2eH6G68H%2@(JR diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc index b1fa2d0241e3c10fde141dd2d942502b877ea8fc..f0a597b0480b22a9df9a0fd2d28b79cc6703d20f 100644 GIT binary patch delta 21 bcmcbke@CC^G%qg~0}v=n@TG6$xgZVzL7W9< delta 21 bcmcbke@CC^G%qg~0}$-E{xxkQ&joP+P~r!m diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc index fe95f4d5bea7eae791bb10f24fd3a57a02e727f2..f259770989afb30948575a85cf9654162a1c48ac 100644 GIT binary patch delta 23 dcmbO`hjH#4MxN8Wyj%=Gpe(_czL7`J4**Jk1v~%% delta 23 dcmbO`hjH#4MxN8Wyj%=Gu;cpIw2eH1egIj;2X+7e diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc index 6b8ab38ea568290fbf7b965d8c3b4230bf71219e..a061b7cf326a10d882c055019795afe99cee6249 100644 GIT binary patch delta 21 acmeA->o?;$&CAQh00hbseCZo`n56+V2m}!T delta 21 bcmeA->o?;$&CAQh00cX(e@)xS!z>K|L{0`v diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc index 0234b3e8f0c2a8d018382ccd30675a290114efdb..1776891b522edc9dde7db5c1d7aa70253ddc59d2 100644 GIT binary patch delta 21 bcmbO$K3AOQG%qg~0}v=n@TG6$naB+QGpYn_ delta 21 bcmbO$K3AOQG%qg~0}$-E{xxkQ&qQtjLhuHs diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc index f7ad2ee822f7f945c2f659a1237e2c92d04ecd7d..b6b04472167290a69b25687233edac6b1abcc659 100644 GIT binary patch delta 21 bcmbPfFw=nNG%qg~0}v=n@TG6$;gtXYHN^xV delta 21 bcmbPfFw=nNG%qg~0}$-E{xxkQ53d9OMGFR6 diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc index ba53f3d0b3898cc240447136eb415350500c001f..c5f38179755195e8df8a83871c371408c79478f0 100644 GIT binary patch delta 21 bcmbR0KGmJ)G%qg~0}v=n@TG6$=~M;)Ig$j; delta 21 bcmbR0KGmJ)G%qg~0}$-E{xxkQPp2{fNZ1Dl diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc index 0175f7b40db03f5e52631626f1c700283876ec79..67a454e346032e8e5352b7c2ff092021bf982e99 100644 GIT binary patch delta 21 bcmeyM`$3oIG%qg~0}v=n@TG6$c_Ib?M3)7f delta 21 bcmeyM`$3oIG%qg~0}$-E{xxkQ&l52KQ{4yG diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc index 6f49ecb4a4e7255676c347b8c07ddb914cebe627..419466360ca264125f4995154d353031882cd030 100644 GIT binary patch delta 21 bcmaD*_MnXCG%qg~0}v=n@TG6$39$wMOY#Mz delta 21 bcmaD*_MnXCG%qg~0}$-E{xxkQPlz=DTQ~>a diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc index a33fa9fbc82b2d19ba8130c281ec3b67665598df..db43fe305f5598c0eb0fec4a01ea9fc87173b79a 100644 GIT binary patch delta 21 bcmaD}^t_1YG%qg~0}v=n@TG6$iM9j)OnwEg delta 21 bcmaD}^t_1YG%qg~0}$-E{xxkQPqZZfTf_(H diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc index e223a02d6acc9b8da39478d2b4d88badf695f8ac..709725bab9be0ede9185b9921e63157dbb5f2bf2 100644 GIT binary patch delta 23 dcmdo0oq7LvW}ef$yj%=Gpe(_czL971ZvbHj2Z;ax delta 23 ecmdo0oq7LvW}ef$yj%=Gu;cpIw2eHQe**w;O$oyQ diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-312.pyc index 89d372d64017f49673876d2840040eea3efb83a4..9c491374b8a0a184b731b4f1e51a2ab93152f136 100644 GIT binary patch delta 23 dcmdmWmTA{nCZ5y0yj%=Gpe(_czL96$G5}cc2G0Nh delta 23 ecmdmWmTA{nCZ5y0yj%=Gu;cpIw2eILmH_~0HVFv; diff --git a/env_web/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc index 63792087c7f978436f81849cbe73ec66ce75edba..31e3124ddc36abb4227cfac32a24fd6720a0bf27 100644 GIT binary patch delta 21 acmeBH?pEeG&CAQh00hbseCZo`>IDHZgalOp delta 21 bcmeBH?pEeG&CAQh00cX(e@)xSQ!fYrLCOY? diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-312.pyc index dd1b1411ff705252d1f639a4a3a8ccc2ef314c53..8431192bbadd91c26cbd6ea37984a6a9cd328e2f 100644 GIT binary patch delta 21 bcmbPaH_49YG%qg~0}v=n@TG6$VUq^{Ho62Z delta 21 bcmbPaH_49YG%qg~0}$-E{xxkQ51TvyMgRtA diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-312.pyc index dc435e32ae3acf82309c02b4afc8991f67dc231e..78f391e232978d343af3bc574fe490cab75bc4f0 100644 GIT binary patch delta 21 bcmez7_|1{$G%qg~0}v=n@TG6$d8GgVNR!K4rdA&2tvoEZMFHNF3nc&m diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-312.pyc index c5fa838eded1ed287f0e8f48a7f4bc15224455ca..fd0eb9425bc8b1640a40ad0e9d1f3b96b941711a 100644 GIT binary patch delta 21 bcmaEx`Zks4G%qg~0}v=n@TG6$d1wRxOoav@ delta 21 bcmaEx`Zks4G%qg~0}$-E{xxkQ&qE^sTgwPq diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-312.pyc index 9f78318dffa5f7bce9a4fc4cc535ff1c90906ce0..10c96e5f17ff8cad3e144da33a200978d378f29b 100644 GIT binary patch delta 23 dcmZ4Rn`yysCZ5y0yj%=Gpe(_czL96jUI1Iu2J`>` delta 23 ecmZ4Rn`yysCZ5y0yj%=Gu;cpIw2eGd_5uKF83`@` diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-312.pyc index 142d0304cb02f9b5416994485828be3ee2314812..63fab66998db9c86466891cb918e7bdb69a9bdeb 100644 GIT binary patch delta 23 dcmaFa#q_d^iRUygFBbz4C`<6AZ{&$>1prl71~mWx delta 23 dcmaFa#q_d^iRUygFBbz4?703lZ6i-?D*$Aj2yXxY diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-312.pyc index 0cfc2a3313ca35895bb17235d94dcb9ebbe68973..b67d3821cee2a2838432f4e1d70d416481fc1674 100644 GIT binary patch delta 23 dcmX@##(2Jsk>@loFBbz4C`<6AZ{%@y1^`dE1)Bf> delta 23 dcmX@##(2Jsk>@loFBbz4?703lZ6lAfGXP%x2h{)o diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-312.pyc index e5098c31c1203ceee9dbd30cf8a8f40b0e717cda..547df72d12f3931fe69368b290eb8904519e086b 100644 GIT binary patch delta 21 bcmZ3TzB--fG%qg~0}v=n@TG6$nQsgLLH-3_ delta 21 bcmZ3TzB--fG%qg~0}$-E{xxkQ&wOJ5QA7us diff --git a/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-312.pyc index 17a656d13c720709dcc3c46ff8cd796e404b19dd..98cbb4bb021a67f395698a29ce3a0abe21891ac4 100644 GIT binary patch delta 21 bcmaD{^0G5~Ok30nXF diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc index aa69e3cee2c397301b311dd2cf484d50704a7263..6568e463e4fb993ebdff02f2cbc733d6ad924a98 100644 GIT binary patch delta 21 bcmbQhI)RnvG%qg~0}v=n@TG6$X<-5YF4F`V delta 21 bcmbQhI)RnvG%qg~0}$-E{xxkQPYV+OJ{bm6 diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-312.pyc index bb0796fe8095c424996c99e38774730232f66a22..339cb2a8e982e5cc14fa5afbecc46287570cad9a 100644 GIT binary patch delta 21 bcmZ3;ypWmaG%qg~0}v=n@TG6$naT(NF;E0Y delta 21 bcmZ3;ypWmaG%qg~0}$-E{xxkQ&s0VLK$Zr9 diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc index f52ad832bf09cf6b61988c460ccc393882806ff1..76dc833de45d5dfd65d6d06e50bdf1622bcd6cf7 100644 GIT binary patch delta 21 bcmdl`yrG!qG%qg~0}v=n@TG6$Sz-wQM4knV delta 21 bcmdl`yrG!qG%qg~0}$-E{xxkQ&k{=jQ{)H6 diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc index 99746acde43efe27ceb67c9a6f2dfd0f3a7d3253..1e435afcf6a6282d857c470a0c4cddb4fbda29c1 100644 GIT binary patch delta 21 bcmaFN@tA|>G%qg~0}v=n@TG6$31G%qg~0}$-I{xxkQPdEzzOEU)5 diff --git a/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc index 74681a9234266b33c7632117bd759704816f59b2..a4a53b1bee6b0fd8c3b625c42fd41b013a8fe325 100644 GIT binary patch delta 21 bcmaD+@S=d{G%qg~0}v=n@TG6$iLn3xOj`x5 delta 21 bcmaD+@S=d{G%qg~0}$-I{xxkQPmBcsTd4== diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc index f286a4a01e8714c6084c300b38dda236e7b5df9c..4912ed4e5cae7bd138468126e4c9c0a62b49fd82 100644 GIT binary patch delta 21 bcmeyN^+Sv2G%qg~0}v=n@TG6$$q@wrM05o% delta 21 bcmeyN^+Sv2G%qg~0}$-I{xxkQPmU-6Q^E&n diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc index af49ec1a0ff20801578a0f89833ca84e1d6fc29a..c13986e36156e4a6f3337dd92dfc46ccad702f06 100644 GIT binary patch delta 21 bcmey&@|lI_G%qg~0}v=n@TG6$NoN88J?jL( delta 21 bcmey&@|lI_G%qg~0}$-I{xxkQPdXC-O*sbp diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc index 62e448cb487758b5f1fa034b27b587130a2a27c6..0ff93ea27d2aaa8fa7e0bab75b6b6d1d342d77e4 100644 GIT binary patch delta 21 bcmbO%Fj;`-G%qg~0}v=n@TG6$Vdnq1>XPw delta 23 dcmX@TjPdj`MxN8Wyj%=Gu=D!Yw2eIW!2n}|2pRwY diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc index 79c5ed55cb642a7dd842ee4a085ce26feb722085..83246ece14713403285f60d45803d52457492959 100644 GIT binary patch delta 21 bcmX?aao&RGG%qg~0}v=n@TG6$ah3r9Kh*@* delta 21 bcmX?aao&RGG%qg~0}$-I{xxkQkFyK_Pa_8r diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc index 01a0e4f35e5f3cce837b88d8f849002dfa7235d2..f4c975508e05b948ce76ea96f3925afeccf987f7 100644 GIT binary patch delta 21 acmeCn?aSpk&CAQh00hbseCZo`n#=$`BLx=# delta 21 bcmeCn?aSpk&CAQh00cX)e@)xS(_{t!O>qZO diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc index 1cb3fcfb9c6a95c84290349bad7f1280db15a2e7..b38878aa6469e0314839936e453a14e89d4be392 100644 GIT binary patch delta 21 bcmX@gew3Z(G%qg~0}v=n@TG6$*~tt5H_`;X delta 21 bcmX@gew3Z(G%qg~0}$-I{xxkQ&rW6lM<53H diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc index cdc1231ab8cb3847f4dc7aedf43ba042d80436a4..34ef42d9ee385120d639ab48895a3f395026ffa8 100644 GIT binary patch delta 21 acmeC<>Eq!!&CAQh00hbseCZo`nAiX=jRU0s delta 21 bcmeC<>Eq!!&CAQh00cX)e@)xS!^8#vJ=+D~ diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc index 9abf1ac856f4585d08e3ae9e86eeaa8addcb20a3..55ba077644e2a892d5750c98a2ee386e23c23425 100644 GIT binary patch delta 23 dcmX?kl=0+IMxN8Wyj%=Gpe(_czL95d5&&7?2BrW2 delta 23 dcmX?kl=0+IMxN8Wyj%=Gu=D!Yw2eG_lK^Qh2;l$# diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc index a33fc7297776ad6c50d9eb173d4b5c7b614cc91b..aae2263999966b8b541112242a36c64efcc2c9b3 100644 GIT binary patch delta 21 bcmdmFzR8^DG%qg~0}v=n@TG6$StbntJM0Af delta 21 bcmdmFzR8^DG%qg~0}$-I{xxkQ&oXHMOF9QP diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/help.cpython-312.pyc index 8b674539a804172640acf2633638d4a65df180dd..fe97e42c2155259bbcddd622ad84bf91b29b4e32 100644 GIT binary patch delta 21 bcmZoxYF6So&CAQh00hbseCZo`z6$^VG7SW} delta 21 bcmZoxYF6So&CAQh00cX)e@)xS^IZS{L0bm( diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc index cf8419e21c6f99e05d9ae1c067ccee98910a5505..e4ef674841446cbf216ad314a411e200c9445198 100644 GIT binary patch delta 21 bcmX@kah!waG%qg~0}v=n@TG6$v1S1PH%$aa delta 21 bcmX@kah!waG%qg~0}$-I{xxkQk2MPbMw delta 23 dcmbPnlX1pPMxN8Wyj%=Gu=D!Yw2eGHIRInN2!H?p diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc index bb25268c02131a62f0dbb3d86f187b62e04774c5..f05ea8788d1177b85ea1becf12a53fe0bfec22cc 100644 GIT binary patch delta 21 bcmeyQ_eqcEG%qg~0}v=n@TG6$NfQSEL=pui delta 21 bcmeyQ_eqcEG%qg~0}$-I{xxkQPntLYQ(y;S diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc index e6b73c872f095f6fd7d43b7311cdeb8b34d6c61c..b16b17da3579365eaa15454d817ce4237efe642c 100644 GIT binary patch delta 21 bcmbQEGe?K#G%qg~0}v=n@TG6$5fB3aHK_z2 delta 21 bcmbQEGe?K#G%qg~0}$-I{xxkQkAN5eME3?- diff --git a/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc index c6379ffd4dd96bb28626a89e946bd2b84f5a8cdc..1a776617deb6ab5633bc8778199a6490cf3e5937 100644 GIT binary patch delta 23 dcmcaHo9V`ECZ5y0yj%=Gpe(_czLDolF922>2CM)8 delta 23 dcmcaHo9V`ECZ5y0yj%=Gu=D!Yw2eGxdI4o=2IS62t2 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc index 8972ac7cf0e878dd003dbcb793f15eaf9b688c64..9a8d70676b7de7d5e88ca52d3fbbe21a631b820d 100644 GIT binary patch delta 21 bcmdmCyTg{}G%qg~0}v=n@TG6$StADkJy9xlASO_fu delta 32 mcmX?nlIQSA9-h;@yj%=Gu=D!Yv__s*9>!K4rmZ~8+f@L(xe90i diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc index cb40f3eaf0188866573473c06a7869f7081756da..1580a61b7c6c623cf2a53168fa4e9c07fc89528d 100644 GIT binary patch delta 21 bcmaFE`-Ye2G%qg~0}v=n@TG6$dB6q$KOY4_ delta 21 bcmaFE`-Ye2G%qg~0}$-I{xxkQ&jU69PHhK# diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc index f98245debd63553925c5203d6b8e1407fd621c55..3eda337d79f37cd30879403d1a9b784a47cf33ac 100644 GIT binary patch delta 21 bcmdlZv`2{NG%qg~0}v=n@TG6$G2jFMHvj}a delta 21 bcmdlZv`2{NG%qg~0}$-I{xxkQj{zqDMotEK diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc index 78eef93b9955f7a68ea36c70e7c643761a73c2ab..f14a4a31ea316c3f5b6bebc8bf1d093af9db2ddb 100644 GIT binary patch delta 21 bcmX@Ya)gEFG%qg~0}v=n@TG6$v0wrKHZ=q@ delta 21 bcmX@Ya)gEFG%qg~0}$-I{xxkQj|CF|MS})z diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc index 7f99360579adf63ad3b104af5703eeb3f2447ebf..ae819ca5de687bef1bcc6bfdbd1233d8b0eb3dd2 100644 GIT binary patch delta 21 acmZo-Z(`>;&CAQh00hbseCZo`%9sHx)C2SY delta 21 bcmZo-Z(`>;&CAQh00cX)e@)xSQ^pJcJR$}! diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-312.pyc index 937ae9b669159a84cc675355bd3475db5e13bc09..375321644e543d8041bc0a26091af39ce0a6d339 100644 GIT binary patch delta 21 bcmcZ+cO#DHG%qg~0}v=n@TG6$@zDnWM+OB@ delta 21 bcmcZ+cO#DHG%qg~0}$-I{xxkQkB>e8R#XRz diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc index 1f182e9b5c4c2c6e1c8f78e16f755e3237868890..75154caff89f70f13f522ffd0d1a456edc3c34ab 100644 GIT binary patch delta 21 bcmcboa8H5fG%qg~0}v=n@TG6$2@(JRKCcAF delta 21 bcmcboa8H5fG%qg~0}$-I{xxkQPmllrP5lP~ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc index 7f29f9930943fdde73e729e3fdaa957c280ca9cf..c5b354ee5407e75efc3c6181aa8048405a138526 100644 GIT binary patch delta 21 acmeC+@8IV-&CAQh00hbseCZo`YS;lU1OyrY delta 21 bcmeC+@8IV-&CAQh00cX)e@)xSQ^O7bK2io% diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc index 06d4f18fb214364ee9721318580629bfaa2b256f..9b8dd0b46db547d27cc0ae40d93cced357de8734 100644 GIT binary patch delta 21 bcmX>vb6$q$G%qg~0}v=n@TG6$apnU6JD&uQ delta 21 bcmX>vb6$q$G%qg~0}$-I{xxkQk24;A diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc index ec6bf097f5fdd4f417c89484ae886285e34e4372..e5d83d64a5b9053522e673698ef24b6ecd5e6624 100644 GIT binary patch delta 21 bcmcbtaan`sG%qg~0}v=n@TG6$aTfsqJ{1JI delta 21 bcmcbtaan`sG%qg~0}$-I{xxkQkGlu}O=AZ2 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc index 5cd800936d8249a835490b1be742162c366ea530..96f3eaa61043ce252280fe1fe7c1a246e6819fd2 100644 GIT binary patch delta 21 bcmZod&&CAQh00hbseCZo`zA^y-ErSGZ delta 21 bcmZod&&CAQh00cX)e@)xS^OXqzJkbWJ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc index 5fcd735a28dd7cd799dad7bcd42d5aea517e4a1d..b4c406001170ae0edbb0b86f2255f992b004f818 100644 GIT binary patch delta 21 bcmca-e9xHYG%qg~0}v=n@TG6$xg-eyLW%`; delta 21 bcmca-e9xHYG%qg~0}$-I{xxkQ&m~C!QP>Bu diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc index f19bad2de33af8b474accfc17a7c91475e8e658c..09aa44dbf1f040658586774dd954985913bf6b21 100644 GIT binary patch delta 21 bcmZ3MzAT;RG%qg~0}v=n@TG6$nPm(BK`aGO delta 21 bcmZ3MzAT;RG%qg~0}$-I{xxkQ&n#mAPJ;nx2 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc index d55b1f4c51ea0ae935b8cd6eccc8c229d1f820a4..a18225d195db7136ce0c8ee29e4cdeb448a68f73 100644 GIT binary patch delta 23 dcmccpi1GF#MxN8Wyj%=Gpe(_czLCej5CCAl2BiQ1 delta 23 dcmccpi1GF#MxN8Wyj%=Gu=D!Yw2eIeg#d622;cw! diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-312.pyc index b9c3553c2b626a22e0719ed1c9dadb6a2f5d32bc..fc9f2ae3998e79370612edfce7a774b81c003d19 100644 GIT binary patch delta 21 bcmaDV{8X6dG%qg~0}v=n@TG6$xycCtKHvpA delta 21 bcmaDV{8X6dG%qg~0}$-I{xxkQ&rMDMPA&&_ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc index 345fb5a8332e69747a1ba124f5dfeaf3dc053b55..890ccc826881318b18e3cb9c10199bd7b78911a4 100644 GIT binary patch delta 21 bcmZ1=vp|ODG%qg~0}v=n@TG6$5#a*>GwB2a delta 21 bcmZ1=vp|ODG%qg~0}$-I{xxkQj|d+CLpKIK diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc index e0ecf35763a70abbfdad7c21e8fe98eee735b6b9..7eaa96f7e062b4b92a1401798729cf2cbf111f10 100644 GIT binary patch delta 21 bcmaDX^jL`JG%qg~0}v=n@TG6$3Fia=J!S;6 delta 21 bcmaDX^jL`JG%qg~0}$-I{xxkQPdFz4Otc2> diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc index 50cce9d161c374661401d3a57b1801179c9e2c52..e5a65050b59a547ba677c16fd887b266553e0c6c 100644 GIT binary patch delta 21 bcmey&^O=X|G%qg~0}v=n@TG6$NoNB9KOY3t delta 21 bcmey&^O=X|G%qg~0}$-I{xxkQPdXa_PHhJd diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc index 74c1d0b5486f3a8abb920685c7cf25afce3c623e..a32483e65b573840c17ca8f52cceacd3aac969a7 100644 GIT binary patch delta 21 bcmX?`a5jPGG%qg~0}v=n@TG6$aWnt`MTG@4 delta 21 bcmX?`a5jPGG%qg~0}$-I{xxkQkD~zqRMQ7< diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc index 5a57e3c7058b4f6686f02479b0ead2916d35c88b..8cbd0643d81df94a1d24bf39235ac2e78cba6ad2 100644 GIT binary patch delta 21 bcmdn%zSo`SG%qg~0}v=n@TG6$*{BQvKq3W2 delta 21 bcmdn%zSo`SG%qg~0}$-I{xxkQ&qiecPjCl- diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-312.pyc index 276a3985259a1654b707582c99ccde6b6ab5cf42..bd3a51c438c0e720ff4a39d4fc55e091a95bffe6 100644 GIT binary patch delta 21 bcmcbucw3R@G%qg~0}v=n@TG6$IWGVJKUW1n delta 21 bcmcbucw3R@G%qg~0}$-I{xxkQ&v^j=PNfHX diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc index 52066b168fa81f181d161fa4dbed80b910647ced..d450625514e711f0445c8394fd5d5fd8e493f73d 100644 GIT binary patch delta 21 bcmewx^EZa)G%qg~0}v=n@TG6$Dbxc1Ov?qj delta 21 bcmewx^EZa)G%qg~0}$-I{xxkQPoW+FTp0)T diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc index eb62b127a1f74cdb005a8acf8c1dc953f7d88467..7d4ddc2c6a264a42fcdbc5c8554b73ade5fe88eb 100644 GIT binary patch delta 21 bcmbQMGgpV_G%qg~0}v=n@TG6$5flReHPZwl delta 21 bcmbQMGgpV_G%qg~0}$-I{xxkQkDwR;MIi=V diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc index 554becbcf4b0451b818567450e61eaf13bd27b29..fc47df2f0c4d028117e314c4c2721031f3db61ab 100644 GIT binary patch delta 23 dcmex*p7HB>MxN8Wyj%=Gpe(_czLDo;Isjuk2SWe= delta 23 dcmex*p7HB>MxN8Wyj%=Gu=D!Yw2eG3(*bgc34Qdx4kdG%qg~0}v=n@TG6$Il=}2I)?=9 delta 21 bcmcb>dx4kdG%qg~0}$-I{xxkQ&k;5NN!14^ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc index 8f11bca380c720d64b2f4c0f29858ab5999a9bdf..4b06977463612594576c036fea6f066fc9735217 100644 GIT binary patch delta 21 bcmdnyyv>>CG%qg~0}v=n@TG6$S)~X7K4JwX delta 21 bcmdnyyv>>CG%qg~0}$-I{xxkQ&niU#O|S=H diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc index 59f45ab066090a2b2ef69ba747d1e8e608cf3902..e87fb2713a0231f3a091c57e6e8a5c71f2d2167d 100644 GIT binary patch delta 26 gcmZ4UlWomUHlEYGyj%=Gpe(_c-pI3+hjGCk0CC|5tpET3 delta 26 hcmZ4UlWomUHlEYGyj%=Gu=D!Yv__t-Jd6wW004*J3FrU- diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc index 365a151be49acf820569e5f72413d4b5bdb0e76c..d42eb709ed784803a3b7f2930a8b500512401e0e 100644 GIT binary patch delta 21 bcmew>_*anUG%qg~0}v=n@TG6$`N#nPLW2c< delta 21 bcmew>_*anUG%qg~0}$-I{xxkQ&qodbQPBsv diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc index d74fb3bd248ac8cf4fc65d9e527e697e1bb43ed6..e9fbb90ddba736030491fdbc367431c434581fb3 100644 GIT binary patch delta 21 bcmdn$vDJg;G%qg~0}v=n@TG6$(NqBdJ^2K% delta 21 bcmdn$vDJg;G%qg~0}$-I{xxkQkERL$O-Ban diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc index 7af77094b0111f6c8f939c20e6283c4164eb8222..9fddfa23dcf5b7ca5c5524970fe9c50494102598 100644 GIT binary patch delta 21 bcmcZ;dMA|UG%qg~0}v=n@TG6$xu69AM^gpG delta 21 bcmcZ;dMA|UG%qg~0}$-I{xxkQ&jl?2R-p(0 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc index ecdbae886aeaeb0faf19faf44e8d0d0480d1966e..de4f49279e932d2d1cd8d2ee330aace0a2aeba1b 100644 GIT binary patch delta 21 bcmdlGxFL||G%qg~0}v=n@TG6$S)u^|KY;}| delta 21 bcmdlGxFL||G%qg~0}$-I{xxkQ&k_v)PR|E& diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-312.pyc index 75619fd492e9eee82f5b3666ff4f86158a52bfba..94376d76eb106a02b6ee77592856299b5a11708f 100644 GIT binary patch delta 21 bcmeyx{fnFDG%qg~0}v=n@TG6$dB+L>K^_HW delta 21 bcmeyx{fnFDG%qg~0}$-I{xxkQ&pTECP;3XG diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc index 84439aa2ef795141accdc880976220c629e9b138..b17555826ebceb1dd40bb9d09d9b0783b6b89010 100644 GIT binary patch delta 21 bcmbQEI7gA^G%qg~0}v=n@TG6$nIHfFH30;J delta 21 bcmbQEI7gA^G%qg~0}$-I{xxkQ&jbMgL{A33 diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc index c4531078f13e8fefd001ad2eb9ffe72b9d49b057..bd0dc3fdf25980d4fd56d2337e6a8b2864cbb7f6 100644 GIT binary patch delta 21 bcmaFB_kfS*G%qg~0}v=n@TG6$31J5SJWd3l delta 21 bcmaFB_kfS*G%qg~0}$-I{xxkQPY62zOPmJV diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc index 207329885602bee38e138dbf2f48c60641c21e20..1c1e1c021ce473c4adc731fc888382741c414e12 100644 GIT binary patch delta 21 bcmZ1?vqXmHG%qg~0}v=n@TG6$k>CRWG?4@k delta 21 bcmZ1?vqXmHG%qg~0}$-I{xxkQj|3k8L*E8U diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc index f35c02dfdd6269c1587c30d8511243229d0f31ec..3155ad4f8a6b2e7cb69260935a219e05730fd3cf 100644 GIT binary patch delta 21 bcmdlgu~mZSG%qg~0}v=n@TG6$(c}RDHo*iq delta 21 bcmdlgu~mZSG%qg~0}$-I{xxkQk0uWQMh^ya diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc index 15e8d77b6362798e00e2b864906b7e0dcc44d6ba..bf6e8f94add90c67dfda84a6fbc9ef3ca3d2a378 100644 GIT binary patch delta 21 bcmccWd)1fcG%qg~0}v=n@TG6$IjIH!MEM1r delta 21 bcmccWd)1fcG%qg~0}$-I{xxkQ&q*}^R7VHb diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/json.cpython-312.pyc index f1deadcf7c1cbfbc385d9dadadbef326dd50cf59..24edcb6f2b1ff7d9f2621b311da7913921ffd597 100644 GIT binary patch delta 21 bcmdm|zfYg%G%qg~0}v=n@TG6$*(44CJg@}} delta 21 bcmdm|zfYg%G%qg~0}$-I{xxkQ&n9sIOa2E( diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc index 1872b7fbd7214be03a98d0b9e73d2aeeb9e882a6..9fc966df0d76d4b32c71c3c3a17d519833a7eefc 100644 GIT binary patch delta 21 acmZqCY|-R7&CAQh00hbseCZo`DntM>MFdX( delta 21 bcmZqCY|-R7&CAQh00cX)e@)xSQy~HXL6ZiG diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-312.pyc index 4aa504aa857b0387e922c9927c0680c2d11ff4b5..40151636f66458382c595a9636a5ca71813d55e7 100644 GIT binary patch delta 23 dcmZ2Jk8$}tMxN8Wyj%=Gpe(_czL7`T9{^001z!LF delta 23 dcmZ2Jk8$}tMxN8Wyj%=Gu=D!Yw2eH{{s3Fz2bur? diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc index 29024c5564a983ef77787d0917d794231fa108aa..bbc7f66c5a0d696d3eecc9f35d0bb188e54afb72 100644 GIT binary patch delta 23 dcmew~mGRS5MxN8Wyj%=Gpe(_czLDpd7XVpJ2B`o5 delta 23 dcmew~mGRS5MxN8Wyj%=Gu=D!Yw2eH^yZ~sM2;=|& diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc index 14cdfb3223eeebbcd34bf3ed7234f091a82c73db..80c129aff023ccd7b4a5c4051acd0e5f47e7579d 100644 GIT binary patch delta 21 bcmX@9c2bS!G%qg~0}v=n@TG6$u@wdYJR}5{ delta 21 bcmX@9c2bS!G%qg~0}$-I{xxkQkF78OOL7L% diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc index 872db04299d80d96996dcd7bc3f764bb065d5ea7..9eea1323d032c4d1bfb55d296af6810c0fb12c98 100644 GIT binary patch delta 21 bcmbQ6H8+drG%qg~0}v=n@TG6$5i|t=KPCjd delta 21 bcmbQ6H8+drG%qg~0}$-I{xxkQkDw_4PILzN diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc index 07776a1c96bfdc8b9ed8d452c2633d49b3d396cb..35f1c2d355c70a893ee4ab6cc5c18afb35743138 100644 GIT binary patch delta 21 bcmezC@z;arG%qg~0}v=n@TG6$DO3RfNy!C> delta 21 bcmezC@z;arG%qg~0}$-I{xxkQPoW9`Sr-Sx diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc index 23c52dc0b57b134f860776d05c08e32ac4ac6e6d..27fcd71b6b3e251add04ae16ba84dbc96ae56fd9 100644 GIT binary patch delta 21 bcmbPiG}(yfG%qg~0}v=n@TG6$VV48|H5LRD delta 21 bcmbPiG}(yfG%qg~0}$-I{xxkQ54$7)L}Ug| diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc index 84c391c7bcbc547fd83c314ab270e30d40503c58..cef76801af9d2bb0b5c1846c2e2e6720e73885d4 100644 GIT binary patch delta 21 bcmeCQ=(OND&CAQh00hbseCZo`{z?M?HdqA% delta 21 bcmeCQ=(OND&CAQh00cX)e@)xS^H&-GMWzQn diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc index b4caa04f4daf99f95d614a2d6164272e1ad0d7a2..fd1a876326788abeed02fcc073f3b009cfa20198 100644 GIT binary patch delta 21 bcmX@kcbt#sG%qg~0}v=n@TG6$v1SJVI5Y%R delta 21 bcmX@kcbt#sG%qg~0}$-I{xxkQk2O00M}h{B diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc index 77c4181da424427a9335f2644a5e002e9efeadc4..72c7917bccd28c8f693d13b6b97d5eba35f4b6e2 100644 GIT binary patch delta 21 bcmaE>`BszXG%qg~0}v=n@TG6$c_;z^Lw^N| delta 21 bcmaE>`BszXG%qg~0}$-I{xxkQ&qEOaQq2d& diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc index 60ee7d8b75080f9d318db2f3eb1a5d5f97f19d6a..e6f78f42b93eb1d596354306824c1abdc1fbc6de 100644 GIT binary patch delta 21 bcmaD8_a=_#G%qg~0}v=n@TG6$NzexXN=^lg delta 21 bcmaD8_a=_#G%qg~0}$-I{xxkQPl7%GS)2#Q diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc index bde3df3eadb608e98daa6ffd7fbb13dc17393c07..445de40078546f01a09a53a5510fd40cce4a070c 100644 GIT binary patch delta 23 dcmZ3ylWFlzCZ5y0yj%=Gpe(_czL9788~{Qcp#AHG%qg~0}v=n@TG6$*`fgeLLmib delta 21 bcmX>Qcp#AHG%qg~0}$-I{xxkQ&lU{;QEvyL diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-312.pyc index 2852e11a908d5b45124815bf7845b0963b3f5a8a..81efd85458278926f4537aca4ed3ad5e01079dbc 100644 GIT binary patch delta 21 bcmaD+{GyoWG%qg~0}v=n@TG6$xnl_cP0j{1 delta 21 bcmaD+{GyoWG%qg~0}$-I{xxkQ&mBtuT^tB+ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc index 7ad698b9e91604d58f4caae4de8e839fdc216bf2..37512211b128e2e64cb622dcbeab2c2394184929 100644 GIT binary patch delta 21 bcmZ3@x0;XVG%qg~0}v=n@TG6$k!J@0Gn@ng delta 21 bcmZ3@x0;XVG%qg~0}$-I{xxkQk32g7Lh1%Q diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc index 2e6ead9c03fe4f149491673bed2daee8425d0362..1276dbaf094c697addb2892d3470b29f5035b7b3 100644 GIT binary patch delta 21 bcmaFF@`#1!G%qg~0}v=n@TG6$31b2PJ0S#( delta 21 bcmaFF@`#1!G%qg~0}$-I{xxkQPZ$#bN^b_p diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc index cde3879a3e64f5dd446facc5d3371e9896f83d14..f9fe8889080f42dda47a46ed8da401c5c24263c1 100644 GIT binary patch delta 21 acmeA*={4aw&CAQh00hbseCZo`7^MI-X9NZS delta 21 bcmeA*={4aw&CAQh00cX)e@)xS!zcv+L$wA$ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-312.pyc index 22f40ef117880df42a0696a083d8d5c41d733e7d..0b41be655bd73eea983ffe6a14d22f9a28150f11 100644 GIT binary patch delta 21 bcmca?eA$@iG%qg~0}v=n@TG6$IW7qRK)eN2 delta 21 bcmca?eA$@iG%qg~0}$-I{xxkQ&v8irPznc- diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc index 0e2eed6fb1bd865cb19c024222eb2d69bb4818c6..2081fc8bb6ff8f1d9337788c7dbb44548fa9f44b 100644 GIT binary patch delta 21 bcmZ1|w@{AfG%qg~0}v=n@TG6$5#&%` delta 21 bcmcaFd|#O7G%qg~0}$-I{xxkQ&t*;kO)>{$ diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc index 17a71b046f9f4cee8d1767ea998a57d520b85267..fe936c66b440f25503cf98d6813311c9f24b0560 100644 GIT binary patch delta 23 dcmZ2;hjGmvMxN8Wyj%=Gpe(_czL7^E4**w!1_=NF delta 23 dcmZ2;hjGmvMxN8Wyj%=Gu=D!Yw2eFpc>re62t)t? diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc index 87360f2145f2f1a7bbaf55636ebac2fccb354cfe..06ad88a3907c486e74efe64754df74cf1cb297fe 100644 GIT binary patch delta 21 bcmcbue_NmDG%qg~0}v=n@TG6$IWG6#!wd2J`>` delta 23 dcmaETh3WMbCZ5y0yj%=Gu=D!Yw2eIRs{nBR2`>Nu diff --git a/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc index 9df79e588d55d26224973af6d936dbf645d09944..f66736b6b2c807dd572c3978b1f09d2c80832b0c 100644 GIT binary patch delta 21 bcmdllwO@+oG%qg~0}v=n@TG6$G3EsTII;v= delta 21 bcmdllwO@+oG%qg~0}$-I{xxkQk1;O*NB{ delta 21 bcmaEF_}-A`G%qg~0}$-I{xxkQ&tnMyR8vycGvWjV delta 21 bcmZ1}v{H!YG%qg~0}$-I{xxkQk1QtuLofzF diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-312.pyc index d12164a958faa5b6ae98b0c0beb2db9cc63b28f5..463f4872aaa3c26de2d8aa8e38b3ebc55a3ff00c 100644 GIT binary patch delta 21 bcmZ3_y`G!rG%qg~0}v=n@TG6$S>mf diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-312.pyc index dc9807fb64ba5ad37c776410ed1d83d707b4a9c0..901fdab0aa7f3669ff8ff9d154a3b0b79b23eff2 100644 GIT binary patch delta 21 bcmey8|0SR2G%qg~0}v=n@TG6$d0`F!Pb>yb delta 21 bcmey8|0SR2G%qg~0}$-I{xxkQ&kJ(^UU~?L diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-312.pyc index 348246416425de5591ee4fe587c7cb1883fee707..877933df0578d9ab761ac74e118013586b3b23b8 100644 GIT binary patch delta 21 bcmaE@{aTynG%qg~0}v=n@TG6$xi1O;LwE&= delta 21 bcmaE@{aTynG%qg~0}$-I{xxkQ&wWtqa#V!pG%qg~0}v=n@TG6$vE%{(IL8ED delta 21 bcmX>qa#V!pG%qg~0}$-I{xxkQk0loXNEHT| diff --git a/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-312.pyc index c67fe974c65706a390b9ff3aa8846946d76445a3..8a82c8a9319c6c605fc091b03fe9f8e8499c466f 100644 GIT binary patch delta 21 bcmZ3HxFV6~G%qg~0}v=n@TG6$nPUI|K$!(c delta 21 bcmZ3HxFV6~G%qg~0}$-I{xxkQ&m02)Pv-}M diff --git a/env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc index 17e025c44e0584f72563b27ad798324db2538e95..f4f205aeaa60957adbbfec93229e3d9c1c66f643 100644 GIT binary patch delta 21 bcmZ3@yqcNkG%qg~0}v=n@TG6$na>CSGV}yx delta 21 bcmZ3@yqcNkG%qg~0}$-I{xxkQ&wNGzLP7?h diff --git a/env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc index 0888212a93bbbe163fa9f4c898e46abb4ed4eb94..8ca15f62c8063a6b292169a262aaa441b78f5a00 100644 GIT binary patch delta 23 dcmcb0iSgDYMxN8Wyj%=Gpe(_czLCc-698TL26_Mh delta 23 dcmcb0iSgDYMxN8Wyj%=Gu=D!Yw2eG|nE-7^2(H{G%qg~0}v=n@TG6$>16}}FaQKE delta 21 bcmbQqJd>H{G%qg~0}$-I{xxkQPcI_?KTZZ} diff --git a/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc index 78b12e43bf9dba117262baf52715f571f2f90c39..7b50a050363f17ad8a65fc4049b9ae04af864b89 100644 GIT binary patch delta 21 bcmbQrI+c~@G%qg~0}v=n@TG6$>0|-`FQo)1 delta 21 bcmbQrI+c~@G%qg~0}$-I{xxkQPbU)qKJx}+ diff --git a/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc index b053e9cacc175870c8872c997014275c2be39208..aeebdcb27d98ccfa041b0b0de0cbc37f0dbb78b1 100644 GIT binary patch delta 21 bcmaD*{h*rXG%qg~0}v=n@TG6$xnc_dO|k|s delta 21 bcmaD*{h*rXG%qg~0}$-I{xxkQ&lOt$T>uDc diff --git a/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc index 91eb5941c5a941123403a30a2a4aa63a0b22b6e8..df6ad74ac71e1ebeb3921641764968f8c75a9672 100644 GIT binary patch delta 23 dcmX@u#CWiYk>@loFBbz4C`<6AZ{#s`1OQB&1!n*N delta 23 dcmX@u#CWiYk>@loFBbz4?7aRpZ6lAVBLG|K2ciG~ diff --git a/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc index 823ad888b020efb199897b42a953902fd5239a6f..d2576fc5c08b06a20582211dcd314c62560367ba 100644 GIT binary patch delta 21 bcmca4cuA1wG%qg~0}v=n@TG6$ImQ71J9Py8 delta 21 bcmca4cuA1wG%qg~0}$-I{xxkQ&oK@FO2Y>@ diff --git a/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc index 67b10beef9a6023bff4d14ec2cd9db195502b9ae..38281831e99a49c9792caa8c4c786cf1e6917013 100644 GIT binary patch delta 21 bcmeyy@r{G$G%qg~0}v=n@TG6$$zlNjKLZ5Q delta 21 bcmeyy@r{G$G%qg~0}$-I{xxkQPZkRRPEiLA diff --git a/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc index d16ca582b431386c89453c876816a00d231db4d1..15d36e45b810c8973b92591de4a9db72aee90744 100644 GIT binary patch delta 21 bcmdm6xwn$%G%qg~0}v=n@TG6$*=Pd*N2dkC delta 21 bcmdm6xwn$%G%qg~0}$-I{xxkQ&qf;nR`mz{ diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc index 5b1d727d0c4bf090ec167d4ad3c8f6a7ed3f2fcc..852b7897da650624de3d4dd5130077515832c5da 100644 GIT binary patch delta 21 bcmew%^+Ss1G%qg~0}v=n@TG6$$>9Y6LJS24 delta 21 bcmew%^+Ss1G%qg~0}$-I{xxkQPYy2tQCbH< diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc index 7837e814b1d3658c6a900a5f4762583703cc5756..49978d226e4e23d7e6fdab68d1a75d836d5e7374 100644 GIT binary patch delta 21 bcmaD>^Q?yFG%qg~0}v=n@TG6$iLwI#P1Oa( delta 21 bcmaD>^Q?yFG%qg~0}$-I{xxkQPm~=1T_Xqp diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc index ff26bd0d3d79e447b13c9d713e79c2310a9bc8ec..09826bee2e4f535305900fa96948a3d3f890cda4 100644 GIT binary patch delta 20 acmZo=YGvX%&CAQh00hbseCZQ;egXg}!30nM delta 20 acmZo=YGvX%&CAQh00cX)e@&an^Ai9y)CP+H diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc index 458a0e76e296ca938dc65fcbe27de26f0cdd950d..c007f22c15275cc743d2fdd7cb9e3df4109df352 100644 GIT binary patch delta 23 dcmaDfpYhRrMxN8Wyj%=Gpe(_czLDpeKLA)929f{( delta 23 dcmaDfpYhRrMxN8Wyj%=Gu=D!Yw2eI1`~hcb2+aTh diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc index 01cfac545f1e08fe9d4f74c67e30a2c3e1244af8..b189e04e0901f4a3363640c25fee456768b7e039 100644 GIT binary patch delta 23 dcmaDfo9WSPCZ5y0yj%=Gpe(_czLDozF928F2Fd^c delta 23 dcmaDfo9WSPCZ5y0yj%=Gu=D!Yw2eI1dI4uE2?YQE diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc index 9ad241c2e44b719efee7dbeecd8e0033fd34ffed..1c48079c13a4c92ca5862cd0aa3b9016f6b6801c 100644 GIT binary patch delta 21 bcmaEm`5=?$G%qg~0}v=n@TG6$xncqUO8o`{ delta 21 bcmaEm`5=?$G%qg~0}$-I{xxkQ&lM8@T1yB% diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc index 41cd313c873aa7552ad76915bdf3323f65e343d5..6c069bd3322276749a0e079c1948fdce98c50624 100644 GIT binary patch delta 21 bcmcZ-cqNeMG%qg~0}v=n@TG6$IiUdnMQH`2 delta 21 bcmcZ-cqNeMG%qg~0}$-I{xxkQ&j}3xRJRA- diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc index 51f03713be6cbb76ea6ba98356395b1a80fd516d..cf9450400271d0f336c67253708fa6eb7759147d 100644 GIT binary patch delta 21 bcmcaBe^;L8G%qg~0}v=n@TG6$xyTOyKVAhv delta 21 bcmcaBe^;L8G%qg~0}$-I{xxkQ&qaO!POJxf diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc index a01c350a33f00b92b7043590d7270963bc03fc4a..e78cf25b7da5684105619245709631978cdd37c9 100644 GIT binary patch delta 23 dcmex4kMZX`MxN8Wyj%=Gpe(_czL6)_9{^hZ22}t6 delta 23 dcmex4kMZX`MxN8Wyj%=Gu=D!Yw2eHu{s3xB2#^2( diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc index c60a4c12ede5ebd82b45b0d8e035e867a5b9a9cb..d9c14660c449588d50a78d4df722a64b2fb32744 100644 GIT binary patch delta 21 bcmZ2!xzdv7G%qg~0}v=n@TG6$nJWVTI==+w delta 21 bcmZ2!xzdv7G%qg~0}$-I{xxkQ&s-S*N(~1g diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc index 92075f9dbfacd10bfcd18e40bd85e51acb753d6b..efde5b73f30f4e28e61c613f0e98312d2029acde 100644 GIT binary patch delta 23 dcmccJ$#lDuiRUygFBbz4C`<6AZ{#`O0svFD28aLv delta 23 dcmccJ$#lDuiRUygFBbz4?7aRpZ6nY5764-f2*UsX diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc index 135e23a18c16ffdcf3360d382904dc8569cdb828..cbb863594dbc9bb4f64a3403fd132d5dd64143c2 100644 GIT binary patch delta 20 acmey!_>qz4G%qg~0}v=n@TE`Wc?tkHkp&U} delta 20 acmey!_>qz4G%qg~0}$-I{xxkP&r<+Jqz6p^ diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc index 231a23051e10db279548a3214ba67b7b4f9f7896..48bd26978404a968be60d73da31aee4e38bf2076 100644 GIT binary patch delta 21 bcmaFN_n438G%qg~0}v=n@TG6$31e5 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc index 6451db48bf9cd3d5921f410280d5d5c3cbf0cd59..dacad15a8e293de38f47903c15b8aa2cbbd38cfd 100644 GIT binary patch delta 23 dcmZ3xpK(o diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc index 1bd9216fe494ff3abc09b26c269ea7c940a86539..4cd6ad64d5176cdd0adeb3feef1225e3619d78a2 100644 GIT binary patch delta 21 acmZp&ZnEY%&CAQh00hbseCZo`%47jFrUZ5X delta 21 bcmZp&ZnEY%&CAQh00cX)e@)xSQzi=lL-Yo* diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc index d4928de3aa909ae9afc5a231f0cabf05cf02b66e..e19f6405ba0bd7d5be4633ecc06971bb316e1df8 100644 GIT binary patch delta 20 acmZo-YGUF!&CAQh00hbseCZQ;z5xIzOaw;& delta 20 acmZo-YGUF!&CAQh00cX)e@&an^9=wsUj~8z diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc index 3b79412f3f99af3a35209b61b94d6129b2efd710..75bf2520529c7da222d6214f1b53127689b22b0e 100644 GIT binary patch delta 23 dcmdnj!MLx3k>@loFBbz4C`<6AZ{#s@0RT-71#JKT delta 23 dcmdnj!MLx3k>@loFBbz4?7aRpZ6lA73jkbP2dDr5 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc index 8737b01b8afadaec54dccd71f7354566cbd80075..1853dc95528c22dd4e4ae92e66a4a0ea7a8bdc0e 100644 GIT binary patch delta 21 bcmexU{HK`bG%qg~0}v=n@TG6$`CthEQ5FVp delta 21 bcmexU{HK`bG%qg~0}$-I{xxkQ&j(8YU}OlZ diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc index 586aa8184a20c6f8aebce3cb0eaaaaafd2ec07de..ec7606b2dacabbee9166cdcbcb22e8f68d3e12bc 100644 GIT binary patch delta 20 acmeyw_=%C{G%qg~0}v=n@TE`Wc?JMDxCIpe delta 20 acmeyw_=%C{G%qg~0}$-I{xxkP&ocl;%Lh;Z diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc index d8233f81606694962dc83742e9dce3575887ed5b..8302dd2c85d15dc502ef94a19b7f341ae286ff25 100644 GIT binary patch delta 23 dcmbPqm}$~sCZ5y0yj%=Gpe(_czLBSGAplTG20j1) delta 23 dcmbPqm}$~sCZ5y0yj%=Gu=D!Yw2eG%3jtr32zdYi diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-312.pyc index 6047e444b71e8dee9dc0605ec482e6b4a2ed5018..b1544f02c35e80035fe69ff20162ad09349be725 100644 GIT binary patch delta 20 acmeyv_=l0_G%qg~0}v=n@TE`W`2YYqJ_R!X delta 20 acmeyv_=l0_G%qg~0}$-I{xxkP&j$cUQ3q}S diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc index 4eb6c0767015adeac1de39ab3ed37bbb586b151d..eb381d21d586dfb2dd12d95a03f288bcd0e2940d 100644 GIT binary patch delta 21 bcmX@ZcZQGWG%qg~0}v=n@TG6$abO1kIR*q| delta 21 bcmX@ZcZQGWG%qg~0}$-I{xxkQj{`dZNK^)& diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc index 8998325dda233e7a75689f74a014010ec29f3155..1613a7a7accd82cc69d9df7fcc90f138bddf2923 100644 GIT binary patch delta 21 bcmX?SdCrpOG%qg~0}v=n@TG6$IV1xBK+y$N delta 21 bcmX?SdCrpOG%qg~0}$-I{xxkQ&mkEAP#*`7 diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc index ba630ec1f4d18ee13b90e16b171d1caaceb60ec4..beed0269b12b0c0f01b73903e843a26e18828e01 100644 GIT binary patch delta 21 bcmZ3=xs;RVG%qg~0}v=n@TG6$naKhGGT#JZ delta 21 bcmZ3=xs;RVG%qg~0}$-I{xxkQ&rB8oLM;ZJ diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc index e200b68a584f31536be13e8c874be0146967b1d3..4b230332ee83e8b87c07c461a79ef9413ed34bba 100644 GIT binary patch delta 21 bcmdn5x?h#&G%qg~0}v=n@TG6$*(?MAJ6Qzw delta 21 bcmdn5x?h#&G%qg~0}$-I{xxkQ&t@S2N~Z@g diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc index b0ad2b63b79e1c6b2ea1728f73ed593a55986f0c..ebecfbebdb7afc6df6001c00d4c99f42b59676d4 100644 GIT binary patch delta 21 bcmdnZvzv$KG%qg~0}v=n@TG6$(PskyHSYv0 delta 21 bcmdnZvzv$KG%qg~0}$-I{xxkQk3Jg!MLh;* diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc index 3dab745a0716229406fd482ab29ab4d537748bd3..d0d47e45a9446f05bce0024c6592c849ae6aacce 100644 GIT binary patch delta 21 bcmey&^_h$3G%qg~0}v=n@TG6$NoNHBKGFow delta 21 bcmey&^_h$3G%qg~0}$-I{xxkQPdY0AP9O&g diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc index 92e41dc8cbfefe1f04ec9fcf4cb7a0d5e807e054..88181c93f3a2eb31f93b836aa96317d17ba772b4 100644 GIT binary patch delta 21 acmZotY*OSo&CAQh00hbseCZo`$^-x~y#zG? delta 21 bcmZotY*OSo&CAQh00cX)e@)xSQzifaKnn(N diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc index 25e0d195ace14ebd614a3d1d2cad9c7d53f94514..c89b11297909f0ae27ae1cad05c3196b2754eba9 100644 GIT binary patch delta 21 bcmca1enXt+G%qg~0}v=n@TG6$Il~PAJy-=E delta 21 bcmca1enXt+G%qg~0}$-I{xxkQ&lzq2Or{4} diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc index 7330d27bc5794561575d63450734245135505945..11db9c55f1cb25a832293369476fdf4f01ff908b 100644 GIT binary patch delta 23 dcmaE}lJU(-MxN8Wyj%=Gpe(_czLDoa2mo7s2FU;b delta 23 dcmaE}lJU(-MxN8Wyj%=Gu=D!Yw2eFuLI7&Z2?PKD diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc index 8d6725684d6f3e206dcfdeb1f78a7c95b15262b1..53f122d2e483fa406720baf88d261d2727d4bf88 100644 GIT binary patch delta 21 bcmZ2gwyKQhG%qg~0}v=n@TG6$k+TK>Lly-B delta 21 bcmZ2gwyKQhG%qg~0}$-I{xxkQkDN6CQe+1` diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc index 6ddaed522a92ad442f0c44d8051dffff56346a66..5c5553e95b188a4e93169c46b88f483643b81acc 100644 GIT binary patch delta 21 bcmeyR{!5+bG%qg~0}v=n@TG6$c_$12MN|c> delta 21 bcmeyR{!5+bG%qg~0}$-I{xxkQ&pTlNRH6sx diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc index cae36cae90ce1b068ec7d817b5152157743a470b..dfbdbee9892ffd98fe10b174e7fe64749d61a1a9 100644 GIT binary patch delta 21 bcmdlVvOk39G%qg~0}v=n@TG6$G1dYAL2Cr; delta 21 bcmdlVvOk39G%qg~0}$-I{xxkQkFgd2P`L*u diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc index cffd5d5e442d46411d4a04f6866798013d3d65fa..adae17d6489a8a4c2552f0e589753d9f3147ad71 100644 GIT binary patch delta 21 bcmZ1%zAl{SG%qg~0}v=n@TG6$S)>gBKokW) delta 21 bcmZ1%zAl{SG%qg~0}$-I{xxkQ&mwIAPhtmq diff --git a/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc index 0d974f12d70e73192376fd96952c51a2c937812c..f39f1f7cd96a11bf9451abde56c1cb53074e2ecc 100644 GIT binary patch delta 21 bcmcateXpA5G%qg~0}v=n@TG6$xnv6fOxttz&CAQh00hbseCZ2$^Z_;@1Y7_B delta 20 acmeB)>xttz&CAQh00cX)e@$D+qYnT>GzOOd diff --git a/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-312.pyc index 88e469cc4cb33308343be1929eae13a3d3142f19..f7478f59fc954eefe24a97d653a34cc3df32796c 100644 GIT binary patch delta 21 bcmZp-Xt&@w&CAQh00hbseCZo`eoF%YHUtFy delta 21 bcmZp-Xt&@w&CAQh00cX)e@)xS^IIAKMN$Vi diff --git a/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-312.pyc index 433d8afd94665fa6f65a20620fcce43f000d7d83..742c2e1088f7ff00ef42332ffe3f1bd8b5af8042 100644 GIT binary patch delta 21 bcmdlcx=oblG%qg~0}v=n@TG6$S;YkaH+KZH delta 21 bcmdlcx=oblG%qg~0}$-I{xxkQ&nhkeM#Tp1 diff --git a/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-312.pyc index e394117595885646a8081edc44b1d1ac23fedd82..31552b02a56192ecd9457251ebab64a118d20519 100644 GIT binary patch delta 21 bcmX@-an6J1G%qg~0}v=n@TG6$aZ&*QLK6i0 delta 21 bcmX@-an6J1G%qg~0}$-I{xxkQkCO@jQDFx* diff --git a/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-312.pyc b/env_web/Lib/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-312.pyc index 42794df996518ad09622f06dbbc840f2a6f7018c..05542f47aadcbd94eec8a5afaa7df0818b85ce0c 100644 GIT binary patch delta 21 bcmeB@>XPC)&CAQh00b%$eCZo`{_y|+G6w{_ delta 21 bcmeB@>XPC)&CAQh00cX)e@)xS^N$ArK}`ns diff --git a/env_web/Scripts/pip.exe b/env_web/Scripts/pip.exe index 53489587b9ba35d15391b91fb70ae0816cc4431c..2d816dfa8564045baee37ce0045238682b3c1b01 100644 GIT binary patch delta 29 icmdmVo^8{4wuUW?Rm+%9IQdVnUB>tc%qUvU=l}r9WemCi delta 29 icmdmVo^8{4wuUW?Rm+$cZnK(RyNvM@m{GKx(E$L@NewCh diff --git a/env_web/Scripts/pip3.12.exe b/env_web/Scripts/pip3.12.exe index 53489587b9ba35d15391b91fb70ae0816cc4431c..2d816dfa8564045baee37ce0045238682b3c1b01 100644 GIT binary patch delta 29 icmdmVo^8{4wuUW?Rm+%9IQdVnUB>tc%qUvU=l}r9WemCi delta 29 icmdmVo^8{4wuUW?Rm+$cZnK(RyNvM@m{GKx(E$L@NewCh diff --git a/env_web/Scripts/pip3.exe b/env_web/Scripts/pip3.exe index 53489587b9ba35d15391b91fb70ae0816cc4431c..2d816dfa8564045baee37ce0045238682b3c1b01 100644 GIT binary patch delta 29 icmdmVo^8{4wuUW?Rm+%9IQdVnUB>tc%qUvU=l}r9WemCi delta 29 icmdmVo^8{4wuUW?Rm+$cZnK(RyNvM@m{GKx(E$L@NewCh diff --git a/forms/__pycache__/base.cpython-312.pyc b/forms/__pycache__/base.cpython-312.pyc index 4fd011ac2b7852661225431ed731de2022ed4744..fc8bd5390fb02cc68700cf1db27824eceaed8751 100644 GIT binary patch delta 22 ccmX>sd{~(GG%qg~0}wdM@ueTx$h(ab071zGz5oCK delta 22 ccmX>sd{~(GG%qg~0}wp!WlBH1k#`#>07{w$!Txa>gHBCHy3v85|{Bw0wf z7Y8{=ir_{D29@HVR?FUT%7Y|ZNGQfZC1ix)CZn4|as)RuP-qSm8jvgWlm>cguqRLG znHK2rK#%`qP?J1PX(W?`jCpvaCi0-*n$gWC#e!Q9sMLIC;X zx;IF@;QoNFlXwHJ1rFRFQ63?`6cXP=_ZIn;;JVPgO{n1BLH8%33GQ8Veqd8!%oE(l=z2(#;Etg?PMQVx3Az(xzTi%x`;;tD zTW-I0bdXj_IYk~9Qcq**XJnz^K1cTj5jXD)y0c`FkoP6JugI?jcMjcO$#42x-}8SS zNW6&dYtkyXZ_r&LPYCWZx+~;K!Tk-KRZ=Z{bFX55FL_FBN7n0CqxEGU8&sI{jXgz5BP_yQlC|s@?ER6 zt55vzo2=&Rdb3p`&nf@rT%&x?xmNj4tJFf;t8JeADwB2C`jNNRs~x;8-7ZBo zppgZ$5sg7Go6r~qvl)#^Fwdhg2h22>_ZCzZA!#d`Ai-=y6D*kRXsm+S(bSt7;$L#t zhjL7CrOV@~a8=goVG~OV9&i>Gl$6|GP*}`nMjnqaDK4K&w_?Zmf*A$O9@QPGo2tCD zE?_54oj%$BT~w4gBp_z~V#0KPNX#~ip*fqC%h~?exU;flD_{Aw5}TG9$Kr-w4__cT z@dp-Ge}Tk~7^7KoLVURIuE2Ikin&jxbx0cxx3*1|nhc3jwxr3823abTWd65o{ybxu z)F|66tRkUn`WL*wl!?t&P1Q8Fw?03DdjCkzI zY|vDiA8!w%(R{ET>~ung(@FdDke*>v69>v?Syf^}@mJ6v>eiedZ*{e*@I3k@S9TNq z22$bLx}~EN*L2*+!tPU|7-p84J3g~x-(-?&@0CiY4k zH?S8B*J-LVv%1oWbW~UV8!dmG;Rc?=uFN}e2M*N@8a#Qw48zcUbq<@Ig*PtiLDj0y z<@3>yHkqbzX_s{?KUk{M=dM$4?G}s6D-XE>w}(@Gfjya*E8k#;^J-c~fXxBq z0UUr)fcpSr0Am5;0QUpN1110-089cD14;l>0HuKGfEj>?01pGo00dADcuWfCoDEGE zpn~nYcgCQ_(0l^$6rc^T6!0{QcMMKi1I>28dO!yt6tDrX5wM9>ITF}%hofaLg!=$~ zz<$61z(K&PfJ1=8fHwf0fFpo60bPK10Ph0c1AGAZ2+$4q7;p^m3E(6^2b_}la?;b# z{0#6p;0z!V5Cu5Pp_|}sgKtU-Z%}%U)s9SWxeU##fSZ6H0M`I;;;Ds057qbyb63`> zzByinhJuGvN%1`3qkIp9LjVbYR6qt`H~^kTiVp^!XgmP`8~-;M1& delta 3454 zcmZXV3s@A_6@X{<#V&$W1Oh6^n_c7~FTv+m)T9c;n6Ku+#bgC$z*UxQ?kplmvL<2* z))@4vC_WQo8e^WWF=^78CefzW7`13H6RQ|ojfSeUiD_(Yde33eYr1^+xH_sq<_ zGedW~{7jo1dN?#RSmK{WmxF7kzZsftl*{}@#xG=(YFv=Z9@Qi|)Tp?2$$kae)VxEvG!>0F=e8J5^cONMb z+-!9B`+I_#ai!K^rL3paZZ*0! z~E>gjrZ*Z44q1;U73WZzHZ6%KgZX3Go;;aDH^Yy=1;1-$J>MxCHk$x_8I|!Tko^yJVr@-b43WQYX0Iq1#W~f_op` z?@2v4U*IA80Og0oBNTpw?g06P;0~hu19?nvAEWytp@KVv?oUJ$++lQ|5U=2TM^JuB z8U%S1-7&IAaL3X8nKTNn8=Os2PLRcdJ&Bc{ktV_QpgTpH1@}2PpQ4i`g8TvtPm>nG z{RQ0_^0?s6qU$A32<{xZFNsfZ=h6L@EEU|}&|M%;a(Cm#j#`#U(Bq+0mf@(Sj!lI7~tJh~Q$eyLpLQGXz6Q`>p;4~TrqRk8xZe+H7jQdjci zH-YFGbrp}kg~%YO&nnkn`EIw&1O6c$>S}e3@~>8D_kg(dOBmmj?^`9ZR=L5sPWdMI->7+FAEB+cZ_vT%P&~@s3a$!JTe(I$iZHuhU6~^N^lp*OH>-UKW&` z82=^YLtL7(&Qn{fD!h)KH_x;gKpHkR5#ao8dd5r&`a!tlnD7U`z)nQ?qhwaF>F%mjF_{$ zRJT-n>T6uJ^eY}{aEtOYV_Q;ZVcneUfp#>ACulzhG=uRs9GZb+@Jb-r9M9fJjbyE9 zS$y_sdj%V6pOFvcdQgq4&Z|;QH#pt&JQ#~gsfTJmUJ$+^QgaG#6T!CHCu5u4g?L1n zXDHt_Ngvk0_d#>I)k>{_s&2L3OO4$BxRsghcU15WBhqW+3+&1CF?<1DO+OGCxFjo_ zMKbG6k7nz~ghkn)1OLMHbJ9>gZq8@N((Ua07zb|?nlW!+HDo=gR`phTy>yq6!Zh8u zP;H{Y(7*@{0!yN2vSZnq>`+Eua^R3*yo6c-Kl#7nTwWZ@CS*nWhh)u`v%;YY>mT7Q zcNqo_Wb;%la8}npX{*EyP!uj0&0N!OQi=vA@g5g2H$ACkC!+;}zqk!XpZoo-E z58!ilx+ppw9(_6t5Dw_&&`nhyPaVFv@Kr@aAakC@jnD9X4Z|yd?*TUf{Q!7eshL9$ z(fA|bs&=d1`5uK10S}K5#TyxKy^#>c0ulgefDAx3;3BlcoyNy68bUw{{~ELt{=?%V zWp-skJ6k@n%bz)^#NcnAvesbFSX$O$-;lRDv)h!>8<)IvM%(-jt=-*iN@50Zg;ZIn4$Em9v^a69NIX zldeMX0lBlFLpK2dy_48P?E%A+#zocv#*>{!`vJ+bnMZR00nM`wNgWFX3@50Zp^aIn4$Emb02b69NIY zldeMX0lKrGLpK2dzLVHQ?E%D-#zocv$CI5#`vJO_ diff --git a/models/model_view_base.py b/models/model_view_base.py index bd3187e8..80c1d5ec 100644 --- a/models/model_view_base.py +++ b/models/model_view_base.py @@ -54,6 +54,7 @@ class Model_View_Base(BaseModel, ABC): FLAG_CANCEL: ClassVar[str] = 'button-cancel' # FLAG_CONTACT_US: ClassVar[str] = 'button-contact' FLAG_CLOSE_TEMPORARY_ELEMENT: ClassVar[str] = 'button-temporary-element-close' + FLAG_CALLBACK: ClassVar[str] = 'callback' FLAG_CARD: ClassVar[str] = 'card' FLAG_CODE: ClassVar[str] = Base.FLAG_CODE FLAG_COLLAPSED: ClassVar[str] = 'collapsed' @@ -63,6 +64,7 @@ class Model_View_Base(BaseModel, ABC): FLAG_CONTAINER: ClassVar[str] = 'container' FLAG_CONTAINER_INPUT: ClassVar[str] = FLAG_CONTAINER + '-input' FLAG_CURRENCY: ClassVar[str] = 'currency' + FLAG_DATA: ClassVar[str] = 'data' FLAG_DELETE: ClassVar[str] = 'delete' FLAG_DESCRIPTION: ClassVar[str] = Base.FLAG_DESCRIPTION FLAG_DETAIL: ClassVar[str] = 'detail' @@ -73,6 +75,7 @@ class Model_View_Base(BaseModel, ABC): FLAG_EXPANDED: ClassVar[str] = 'expanded' FLAG_FAILURE: ClassVar[str] = 'failure' FLAG_FILTER: ClassVar[str] = 'filter' + FLAG_FORM: ClassVar[str] = 'form' FLAG_FORM_FILTERS: ClassVar[str] = 'form-filters' FLAG_HAMBURGER: ClassVar[str] = 'hamburger' FLAG_IMAGE_LOGO: ClassVar[str] = 'image-logo' @@ -113,6 +116,7 @@ class Model_View_Base(BaseModel, ABC): FLAG_SUBMITTED: ClassVar[str] = 'submitted' FLAG_SUCCESS: ClassVar[str] = 'success' FLAG_TEMPORARY_ELEMENT: ClassVar[str] = 'temporary-element' + FLAG_USER: ClassVar[str] = User.FLAG_USER # flagIsDatePicker: ClassVar[str] = 'is-date-picker' HASH_APPLY_FILTERS_STORE_PRODUCT_PERMUTATION: ClassVar[str] = '/store/permutation_filter' HASH_CALLBACK_LOGIN: ClassVar[str] = '/callback-login' @@ -180,10 +184,6 @@ class Model_View_Base(BaseModel, ABC): ID_PAGE_BODY: ClassVar[str] = 'pageBody' ID_TABLE_MAIN: ClassVar[str] = 'tableMain' ID_TEXTAREA_CONFIRM: ClassVar[str] = 'textareaConfirm' - KEY_CALLBACK: ClassVar[str] = 'callback' - # KEY_CSRF_TOKEN: ClassVar[str] = 'X-CSRFToken' - KEY_DATA: ClassVar[str] = 'data' - KEY_FORM: ClassVar[str] = 'form' NAME_COMPANY: ClassVar[str] = 'Precision And Research Technology Systems Limited' NAME_CSRF_TOKEN: ClassVar[str] = 'csrf-token' # URL_HOST: ClassVar[str] = os.env() 'http://127.0.0.1:5000' # 'https://www.partsltd.co.uk' @@ -256,9 +256,9 @@ class Model_View_Base(BaseModel, ABC): print(f'session: {self.session}') datastore_user = DataStore_User() - user = datastore_user.get_user_session() - self.user = user - self.is_user_logged_in = user.is_logged_in + self.user = datastore_user.get_user_session() + self.is_user_logged_in = self.user.is_logged_in + print(f'model_view_base init end - model.user: {self.user}') def output_bool(self, boolean): return str(boolean).lower() diff --git a/models/model_view_store.py b/models/model_view_store.py index 1509f051..421fc860 100644 --- a/models/model_view_store.py +++ b/models/model_view_store.py @@ -140,7 +140,6 @@ class Model_View_Store(Model_View_Base): """ KEY_BASKET : ClassVar[str] = Basket.KEY_BASKET # 'basket' # KEY_CODE_CURRENCY : ClassVar[str] = 'code_currency' - # KEY_FORM : ClassVar[str] = 'form' KEY_ID_CURRENCY : ClassVar[str] = Basket.KEY_ID_CURRENCY # 'id_currency' KEY_ID_PRODUCT : ClassVar[str] = 'product_id' KEY_ID_PERMUTATION : ClassVar[str] = 'permutation_id' diff --git a/static/MySQL/0000_combine.sql b/static/MySQL/0000_combine.sql index 8e50d762..c6747853 100644 --- a/static/MySQL/0000_combine.sql +++ b/static/MySQL/0000_combine.sql @@ -305,7 +305,7 @@ SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning CREATE TABLE Shop_Product_Change_Set ( id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY, comment VARCHAR(500), - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); # Split Staging @@ -329,7 +329,7 @@ SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning CREATE TABLE IF NOT EXISTS Shop_User_Change_Set ( id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY, comment VARCHAR(500), - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); # Split Key Value Pair CSV Staging @@ -354,7 +354,7 @@ SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning CREATE TABLE Shop_Sales_And_Purchasing_Change_Set ( id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY, comment VARCHAR(500), - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); # Access Levels @@ -370,7 +370,7 @@ CREATE TABLE IF NOT EXISTS Shop_Access_Level ( priority INT NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Access_Level_id_change_set @@ -425,9 +425,9 @@ CREATE TABLE IF NOT EXISTS File_Type ( code VARCHAR(50), name VARCHAR(100), extension VARCHAR(50), - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); @@ -447,9 +447,9 @@ CREATE TABLE IF NOT EXISTS File_Type_Audit ( name_field VARCHAR(50), value_prev VARCHAR(500), value_new VARCHAR(500), - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); # Generic / shared properties @@ -461,7 +461,7 @@ SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning CREATE TABLE IF NOT EXISTS Shop_General ( id_general INT NOT NULL AUTO_INCREMENT PRIMARY KEY, quantity_max FLOAT, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT CHK_Shop_General_id_change_set @@ -508,7 +508,7 @@ CREATE TABLE IF NOT EXISTS Shop_Image_Type ( name_plural VARCHAR(256), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Image_Type_id_change_set @@ -547,7 +547,7 @@ CREATE TABLE IF NOT EXISTS Shop_Region ( name VARCHAR(200) NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Region_id_change_set @@ -587,7 +587,7 @@ CREATE TABLE IF NOT EXISTS Shop_Region_Temp ( name VARCHAR(200) NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Region_Temp_id_change_set @@ -615,7 +615,7 @@ CREATE TABLE IF NOT EXISTS Shop_Region_Branch ( -- depth INT NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Region_Branch_id_change_set @@ -671,7 +671,7 @@ CREATE TABLE Shop_Address ( city VARCHAR(256) NOT NULL, county VARCHAR(256) NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Address_id_change_set @@ -692,7 +692,7 @@ CREATE TABLE IF NOT EXISTS Shop_Plant ( REFERENCES Shop_Address(id_address), id_user_manager INT NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Plant_id_change_set @@ -775,7 +775,7 @@ CREATE TABLE IF NOT EXISTS Shop_Storage_Location ( code VARCHAR(50) NOT NULL, name VARCHAR(500) NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Storage_Location_id_change_set @@ -839,7 +839,7 @@ CREATE TABLE IF NOT EXISTS Shop_Storage_Location_Branch ( -- depth INT NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Storage_Location_Branch_id_change_set @@ -896,7 +896,7 @@ CREATE TABLE IF NOT EXISTS Shop_Currency ( factor_from_GBP FLOAT NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Currency_id_change_set @@ -971,7 +971,7 @@ CREATE TABLE Shop_Tax_Or_Surcharge ( quantity_max FLOAT NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Tax_Or_Surcharge_id_change_set @@ -1041,7 +1041,7 @@ CREATE TABLE IF NOT EXISTS Shop_Unit_Measurement ( is_unit_of_time BIT NOT NULL DEFAULT 0, is_unit_of_volume BIT NOT NULL DEFAULT 0, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Unit_Measurement_id_change_set @@ -1085,7 +1085,7 @@ CREATE TABLE IF NOT EXISTS Shop_Unit_Measurement_Conversion ( multiplier_unit_base FLOAT NOT NULL, increment_unit_base FLOAT NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Unit_Measurement_Conversion_id_change_set @@ -1131,7 +1131,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Category ( , CONSTRAINT FK_Shop_Product_Category_id_access_level_required FOREIGN KEY (id_access_level_required) REFERENCES Shop_Access_Level(id_access_level) - , created_on TIMESTAMP + , created_on DATETIME , created_by INT NOT NULL , id_change_set INT , CONSTRAINT FK_Shop_Product_Category_id_change_set @@ -1221,7 +1221,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product ( # id_stripe_price VARCHAR(100) NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP NOT NULL, + created_on DATETIME NOT NULL, created_by INT NOT NULL, id_change_set INT, CONSTRAINT FK_Shop_Product_id_change_set @@ -1321,7 +1321,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, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Permutation_id_change_set @@ -1399,7 +1399,7 @@ CREATE TABLE IF NOT EXISTS Shop_Variation_Type ( name_plural VARCHAR(256), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Variation_Type_id_change_set @@ -1445,7 +1445,7 @@ CREATE TABLE Shop_Variation ( name VARCHAR(255), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Variation_id_change_set @@ -1495,7 +1495,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Variation_Link ( ON UPDATE RESTRICT, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Permutation_Variation_Link_id_change_set @@ -1637,7 +1637,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Price ( price_local_VAT_excl FLOAT NULL, id_stripe_price VARCHAR(200), active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Price_id_change_set @@ -1701,7 +1701,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Image ( url VARCHAR(255), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Image_id_change_set @@ -1747,7 +1747,7 @@ CREATE TABLE IF NOT EXISTS Shop_Delivery_Option ( */ active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Delivery_Option_Type_id_change_set @@ -1814,7 +1814,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Delivery_Option_Link ( quantity_max FLOAT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Permutation_Delivery_Option_Link_id_change_set @@ -1878,11 +1878,11 @@ CREATE TABLE Shop_Discount ( apply_multiplier_first BIT DEFAULT 1, quantity_min FLOAT NOT NULL DEFAULT 0, quantity_max FLOAT NOT NULL, - date_start TIMESTAMP NOT NULL, - date_end TIMESTAMP NOT NULL, + date_start DATETIME NOT NULL, + date_end DATETIME NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Discount_id_change_set @@ -1936,7 +1936,7 @@ CREATE TABLE IF NOT EXISTS Shop_Discount_Region_Currency_Link ( REFERENCES Shop_Currency(id_currency) ON UPDATE RESTRICT, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Discount_Region_Currency_Link_id_change_set @@ -1977,7 +1977,7 @@ CREATE TABLE IF NOT EXISTS Shop_Permission_Group ( name VARCHAR(255), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Permission_Group_id_change_set @@ -2028,7 +2028,7 @@ CREATE TABLE IF NOT EXISTS Shop_Permission ( REFERENCES Shop_Access_Level(id_access_level), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Permission_id_change_set @@ -2069,7 +2069,7 @@ CREATE TABLE IF NOT EXISTS Shop_Role ( name VARCHAR(255), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Role_id_change_set @@ -2121,7 +2121,7 @@ CREATE TABLE IF NOT EXISTS Shop_Role_Permission_Link ( FOREIGN KEY (id_access_level) REFERENCES Shop_Access_Level(id_access_level), active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Role_Permission_Link_id_change_set @@ -2167,7 +2167,7 @@ CREATE TABLE IF NOT EXISTS Shop_User ( id_region_default INT NULL, is_included_VAT_default BIT NOT NULL DEFAULT 1, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_User_id_change_set @@ -2215,7 +2215,7 @@ CREATE TABLE IF NOT EXISTS Shop_User_Role_Link ( FOREIGN KEY (id_role) REFERENCES Shop_Role(id_role), active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_User_Role_Link_id_change_set @@ -2265,7 +2265,7 @@ CREATE TABLE Shop_User_Address ( city VARCHAR(256) NOT NULL, county VARCHAR(256) NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_User_Address_id_change_set @@ -2317,7 +2317,7 @@ CREATE TABLE IF NOT EXISTS Shop_User_Basket ( ON UPDATE RESTRICT, quantity INT NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set_user INT, CONSTRAINT FK_Shop_User_Basket_id_change_set_user @@ -2371,7 +2371,7 @@ CREATE TABLE IF NOT EXISTS Shop_User_Order_Status ( name_plural VARCHAR(256), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_User_Order_Status_id_change_set @@ -2424,7 +2424,7 @@ CREATE TABLE IF NOT EXISTS Shop_Supplier ( FOREIGN KEY (id_currency) REFERENCES Shop_Currency(id_currency), active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Supplier_id_change_set @@ -2485,9 +2485,9 @@ CREATE TABLE IF NOT EXISTS Shop_Supplier_Purchase_Order ( display_order INT NOT NULL, */ active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP NULL, + updated_last_on DATETIME NULL, created_last_by VARCHAR(100) NULL, id_change_set INT NULL, CONSTRAINT FK_Shop_Supplier_Purchase_Order_id_change_set @@ -2544,9 +2544,9 @@ CREATE TABLE IF NOT EXISTS Shop_Supplier_Purchase_Order_Product_Link ( latency_delivery_days INT NOT NULL, display_order INT NOT NULL, active BIT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP NULL, + updated_last_on DATETIME NULL, created_last_by VARCHAR(100) NULL, id_change_set INT NULL, CONSTRAINT FK_Shop_Supplier_Purchase_Order_Product_Link_id_change_set @@ -2633,9 +2633,9 @@ CREATE TABLE IF NOT EXISTS Shop_Manufacturing_Purchase_Order ( display_order INT NOT NULL, */ active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP NULL, + updated_last_on DATETIME NULL, created_last_by VARCHAR(100) NULL, id_change_set INT NULL, CONSTRAINT FK_Shop_Manufacturing_Purchase_Order_id_change_set @@ -2693,9 +2693,9 @@ CREATE TABLE IF NOT EXISTS Shop_Manufacturing_Purchase_Order_Product_Link ( quantity_produced FLOAT NOT NULL, display_order INT NOT NULL, active BIT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP NULL, + updated_last_on DATETIME NULL, created_last_by VARCHAR(100) NULL, id_change_set INT NULL, CONSTRAINT FK_Manufacturing_Purchase_Order_id_change_set @@ -2781,7 +2781,7 @@ CREATE TABLE IF NOT EXISTS Shop_Customer ( FOREIGN KEY (id_currency) REFERENCES Shop_Currency(id_currency), active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Customer_id_change_set @@ -2836,9 +2836,9 @@ CREATE TABLE IF NOT EXISTS Shop_Customer_Sales_Order ( display_order INT NOT NULL, */ active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP NULL, + updated_last_on DATETIME NULL, created_last_by VARCHAR(100) NULL, id_change_set INT NULL, CONSTRAINT FK_Shop_Customer_Sales_Order_id_change_set @@ -2896,9 +2896,9 @@ CREATE TABLE IF NOT EXISTS Shop_Customer_Sales_Order_Product_Link ( display_order INT NOT NULL, active BIT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP NULL, + updated_last_on DATETIME NULL, created_last_by VARCHAR(100) NULL, id_change_set INT NULL, CONSTRAINT FK_Shop_Customer_Sales_Order_Product_Link_id_change_set @@ -5999,19 +5999,19 @@ BEGIN SET v_time_end := CURRENT_TIMESTAMP(6); SELECT a_time_start - , UNIX_TIMESTAMP(a_time_start) + , UNIX_DATETIME(a_time_start) , MICROSECOND(a_time_start) / 1000 , v_time_end - , UNIX_TIMESTAMP(v_time_end) + , UNIX_DATETIME(v_time_end) , MICROSECOND(v_time_end) / 1000 , v_time_end - a_time_start AS timestamp_delta - , UNIX_TIMESTAMP(v_time_end - a_time_start) AS UNIX_TIMESTAMP_timestamp_delta + , UNIX_DATETIME(v_time_end - a_time_start) AS UNIX_DATETIME_timestamp_delta , MICROSECOND(v_time_end - a_time_start) AS MICROSECOND_timestamp_delta -- , TIME_FORMAT(TIMEDIFF(v_time_end, a_time_start), '%H:%i:%s') AS time_difference , CONCAT( TIME_FORMAT(TIMEDIFF(v_time_end, a_time_start), '%H hours, %i minutes, %s seconds'), ', ', - TIMESTAMPDIFF(MICROSECOND, a_time_start, v_time_end) % 1000000 / 1000, ' milliseconds' + DATETIMEDIFF(MICROSECOND, a_time_start, v_time_end) % 1000000 / 1000, ' milliseconds' ) AS time_difference ; @@ -7258,7 +7258,7 @@ BEGIN DECLARE v_ids_product_permission LONGTEXT; DECLARE v_id_change_set INT; DECLARE v_id_access_level_edit INT; - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE exit handler for SQLEXCEPTION BEGIN @@ -7441,7 +7441,7 @@ BEGIN END IF; END IF; - SET v_now := CURRENT_TIMESTAMP(); + SET v_now := CURRENT_DATETIME(); IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN START TRANSACTION; @@ -8950,7 +8950,7 @@ BEGIN DECLARE v_ids_product_permission VARCHAR(4000); -- DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; DECLARE v_id_minimum INT; DECLARE v_ids_product_invalid VARCHAR(4000); DECLARE v_time_start TIMESTAMP(6); @@ -9754,7 +9754,7 @@ BEGIN DECLARE v_ids_product_permission LONGTEXT; DECLARE v_id_change_set INT; DECLARE v_id_access_level_edit INT; - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE exit handler for SQLEXCEPTION BEGIN @@ -10112,7 +10112,7 @@ BEGIN END IF; END IF; - SET v_now := CURRENT_TIMESTAMP(); + SET v_now := CURRENT_DATETIME(); IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN START TRANSACTION; @@ -10956,7 +10956,7 @@ CREATE PROCEDURE p_shop_get_many_stock_item ( IN a_get_all_location_storage BIT, IN a_get_inactive_location_storage BIT, IN a_ids_location_storage TEXT, - IN a_date_received_to TIMESTAMP, + IN a_date_received_to DATETIME, IN a_get_sealed_stock_item_only BIT, IN a_get_unsealed_stock_item_only BIT, IN a_get_expired_stock_item_only BIT, @@ -10977,7 +10977,7 @@ BEGIN DECLARE v_ids_product_permission LONGTEXT; -- DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; -- DECLARE v_id_minimum INT; DECLARE v_time_start TIMESTAMP(6); @@ -11728,7 +11728,7 @@ BEGIN DECLARE v_id_change_set INT; DECLARE v_id_access_level_edit INT; DECLARE v_time_start TIMESTAMP(6); - DECLARE v_time_expire TIMESTAMP; + DECLARE v_time_expire DATETIME; DECLARE exit handler for SQLEXCEPTION BEGIN @@ -12514,7 +12514,7 @@ BEGIN DECLARE v_ids_product_permission VARCHAR(4000); -- DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; DECLARE v_id_minimum INT; DECLARE v_time_start TIMESTAMP(6); @@ -13747,7 +13747,7 @@ BEGIN -- Argument redeclaration -- Variable declaration DECLARE v_has_filter_user BIT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; -- Argument validation + default values @@ -13921,7 +13921,7 @@ BEGIN DECLARE v_id_permission_user INT; DECLARE v_id_permission_user_admin INT; DECLARE v_ids_permission_required VARCHAR(4000); - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE v_id_minimum INT; DECLARE v_code_error_bad_data VARCHAR(50); DECLARE v_id_type_error_bad_data INT; @@ -14457,7 +14457,7 @@ BEGIN # DECLARE v_id_user VARCHAR(100); DECLARE v_id_permission_product INT; DECLARE v_ids_permutation_permission VARCHAR(4000); - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; # DECLARE v_quantity_new INT; DECLARE v_change_set_used BIT; DECLARE v_id_change_set INT; @@ -15560,7 +15560,7 @@ BEGIN # DECLARE v_ids_product_permission VARCHAR(4000); # DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE v_id_minimum INT; DECLARE v_code_error_data VARCHAR(50); @@ -16367,8 +16367,8 @@ CREATE PROCEDURE p_shop_get_many_supplier_purchase_order ( IN a_ids_product VARCHAR(4000), IN a_get_inactive_permutation BIT, IN a_ids_permutation VARCHAR(4000), - IN a_date_from TIMESTAMP, - IN a_date_to TIMESTAMP + IN a_date_from DATETIME, + IN a_date_to DATETIME ) BEGIN -- Argument redeclaration @@ -16387,7 +16387,7 @@ BEGIN DECLARE v_ids_product_permission VARCHAR(4000); # DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; -- DECLARE v_id_minimum INT; DECLARE v_code_error_data VARCHAR(50); DECLARE v_id_type_error_data INT; @@ -17733,8 +17733,8 @@ CREATE PROCEDURE p_shop_get_many_manufacturing_purchase_order ( IN a_ids_product VARCHAR(4000), IN a_get_inactive_permutation BIT, IN a_ids_permutation VARCHAR(4000), - IN a_date_from TIMESTAMP, - IN a_date_to TIMESTAMP + IN a_date_from DATETIME, + IN a_date_to DATETIME ) BEGIN -- Argument redeclaration @@ -17752,7 +17752,7 @@ BEGIN DECLARE v_ids_product_permission VARCHAR(4000); # DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; -- DECLARE v_id_minimum INT; DECLARE v_code_error_data VARCHAR(50); DECLARE v_id_type_error_data INT; @@ -18711,7 +18711,7 @@ BEGIN # DECLARE v_ids_product_permission VARCHAR(4000); # DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE v_id_minimum INT; SET v_code_error_type_bad_data = 'BAD_DATA'; @@ -19523,8 +19523,8 @@ CREATE PROCEDURE p_shop_get_many_customer_sales_order ( IN a_ids_product VARCHAR(4000), IN a_get_inactive_permutation BIT, IN a_ids_permutation VARCHAR(4000), - IN a_date_from TIMESTAMP, - IN a_date_to TIMESTAMP + IN a_date_from DATETIME, + IN a_date_to DATETIME ) BEGIN -- Argument redeclaration @@ -19543,7 +19543,7 @@ BEGIN DECLARE v_ids_product_permission VARCHAR(4000); # DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; -- DECLARE v_id_minimum INT; DECLARE v_code_error_data VARCHAR(50); DECLARE v_id_type_error_data INT; diff --git a/static/MySQL/1000_tbl_Shop_Product_Change_Set.sql b/static/MySQL/1000_tbl_Shop_Product_Change_Set.sql index ccc6f3bb..831dae2d 100644 --- a/static/MySQL/1000_tbl_Shop_Product_Change_Set.sql +++ b/static/MySQL/1000_tbl_Shop_Product_Change_Set.sql @@ -8,6 +8,6 @@ SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning CREATE TABLE Shop_Product_Change_Set ( id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY, comment VARCHAR(500), - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); \ No newline at end of file diff --git a/static/MySQL/1001_tbl_Shop_User_Change_Set.sql b/static/MySQL/1001_tbl_Shop_User_Change_Set.sql index 01849100..ac34c635 100644 --- a/static/MySQL/1001_tbl_Shop_User_Change_Set.sql +++ b/static/MySQL/1001_tbl_Shop_User_Change_Set.sql @@ -8,6 +8,6 @@ SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning CREATE TABLE IF NOT EXISTS Shop_User_Change_Set ( id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY, comment VARCHAR(500), - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); \ No newline at end of file diff --git a/static/MySQL/1002_tbl_Shop_Sales_And_Purchasing_Change_Set.sql b/static/MySQL/1002_tbl_Shop_Sales_And_Purchasing_Change_Set.sql index 184ea4b7..4e6630a4 100644 --- a/static/MySQL/1002_tbl_Shop_Sales_And_Purchasing_Change_Set.sql +++ b/static/MySQL/1002_tbl_Shop_Sales_And_Purchasing_Change_Set.sql @@ -8,6 +8,6 @@ SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning CREATE TABLE Shop_Sales_And_Purchasing_Change_Set ( id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY, comment VARCHAR(500), - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); \ No newline at end of file diff --git a/static/MySQL/1003_tbl_Shop_Access_Level.sql b/static/MySQL/1003_tbl_Shop_Access_Level.sql index 21094a5d..18c0ce7f 100644 --- a/static/MySQL/1003_tbl_Shop_Access_Level.sql +++ b/static/MySQL/1003_tbl_Shop_Access_Level.sql @@ -12,7 +12,7 @@ CREATE TABLE IF NOT EXISTS Shop_Access_Level ( priority INT NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Access_Level_id_change_set diff --git a/static/MySQL/1010_tbl_File_Type.sql b/static/MySQL/1010_tbl_File_Type.sql index 81dbf0c6..7063b499 100644 --- a/static/MySQL/1010_tbl_File_Type.sql +++ b/static/MySQL/1010_tbl_File_Type.sql @@ -10,8 +10,8 @@ CREATE TABLE IF NOT EXISTS File_Type ( code VARCHAR(50), name VARCHAR(100), extension VARCHAR(50), - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); diff --git a/static/MySQL/1011_tbl_File_Type_Audit.sql b/static/MySQL/1011_tbl_File_Type_Audit.sql index e21dd2e5..50939b7c 100644 --- a/static/MySQL/1011_tbl_File_Type_Audit.sql +++ b/static/MySQL/1011_tbl_File_Type_Audit.sql @@ -15,8 +15,8 @@ CREATE TABLE IF NOT EXISTS File_Type_Audit ( name_field VARCHAR(50), value_prev VARCHAR(500), value_new VARCHAR(500), - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); \ No newline at end of file diff --git a/static/MySQL/1012_tbl_Shop_General.sql b/static/MySQL/1012_tbl_Shop_General.sql index e587dece..77ebee36 100644 --- a/static/MySQL/1012_tbl_Shop_General.sql +++ b/static/MySQL/1012_tbl_Shop_General.sql @@ -8,7 +8,7 @@ SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning CREATE TABLE IF NOT EXISTS Shop_General ( id_general INT NOT NULL AUTO_INCREMENT PRIMARY KEY, quantity_max FLOAT, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT CHK_Shop_General_id_change_set diff --git a/static/MySQL/1014_tbl_Shop_Image_Type.sql b/static/MySQL/1014_tbl_Shop_Image_Type.sql index 658c6489..485ef555 100644 --- a/static/MySQL/1014_tbl_Shop_Image_Type.sql +++ b/static/MySQL/1014_tbl_Shop_Image_Type.sql @@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS Shop_Image_Type ( name_plural VARCHAR(256), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Image_Type_id_change_set diff --git a/static/MySQL/1100_tbl_Shop_Region.sql b/static/MySQL/1100_tbl_Shop_Region.sql index 6ce12b78..23295e43 100644 --- a/static/MySQL/1100_tbl_Shop_Region.sql +++ b/static/MySQL/1100_tbl_Shop_Region.sql @@ -9,7 +9,7 @@ CREATE TABLE IF NOT EXISTS Shop_Region ( name VARCHAR(200) NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Region_id_change_set diff --git a/static/MySQL/1102_tbl_Shop_Region_Temp.sql b/static/MySQL/1102_tbl_Shop_Region_Temp.sql index 587373fa..94c3d12e 100644 --- a/static/MySQL/1102_tbl_Shop_Region_Temp.sql +++ b/static/MySQL/1102_tbl_Shop_Region_Temp.sql @@ -11,7 +11,7 @@ CREATE TABLE IF NOT EXISTS Shop_Region_Temp ( name VARCHAR(200) NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Region_Temp_id_change_set diff --git a/static/MySQL/1103_tbl_Shop_Region_Branch.sql b/static/MySQL/1103_tbl_Shop_Region_Branch.sql index 0910966a..d2dc7944 100644 --- a/static/MySQL/1103_tbl_Shop_Region_Branch.sql +++ b/static/MySQL/1103_tbl_Shop_Region_Branch.sql @@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS Shop_Region_Branch ( -- depth INT NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Region_Branch_id_change_set diff --git a/static/MySQL/1106_tbl_Shop_Address.sql b/static/MySQL/1106_tbl_Shop_Address.sql index 0c66b3d8..37f3dfe7 100644 --- a/static/MySQL/1106_tbl_Shop_Address.sql +++ b/static/MySQL/1106_tbl_Shop_Address.sql @@ -13,7 +13,7 @@ CREATE TABLE Shop_Address ( city VARCHAR(256) NOT NULL, county VARCHAR(256) NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Address_id_change_set diff --git a/static/MySQL/1106_tbl_Shop_Plant.sql b/static/MySQL/1106_tbl_Shop_Plant.sql index 7ebc467d..6c2a668c 100644 --- a/static/MySQL/1106_tbl_Shop_Plant.sql +++ b/static/MySQL/1106_tbl_Shop_Plant.sql @@ -13,7 +13,7 @@ CREATE TABLE IF NOT EXISTS Shop_Plant ( REFERENCES Shop_Address(id_address), id_user_manager INT NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Plant_id_change_set diff --git a/static/MySQL/1109_tbl_Shop_Storage_Location.sql b/static/MySQL/1109_tbl_Shop_Storage_Location.sql index 8a0a18a3..adbab96a 100644 --- a/static/MySQL/1109_tbl_Shop_Storage_Location.sql +++ b/static/MySQL/1109_tbl_Shop_Storage_Location.sql @@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS Shop_Storage_Location ( code VARCHAR(50) NOT NULL, name VARCHAR(500) NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Storage_Location_id_change_set diff --git a/static/MySQL/1112_tbl_Shop_Storage_Location_Branch.sql b/static/MySQL/1112_tbl_Shop_Storage_Location_Branch.sql index 6bcaeb0b..b0d87f5b 100644 --- a/static/MySQL/1112_tbl_Shop_Storage_Location_Branch.sql +++ b/static/MySQL/1112_tbl_Shop_Storage_Location_Branch.sql @@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS Shop_Storage_Location_Branch ( -- depth INT NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Storage_Location_Branch_id_change_set diff --git a/static/MySQL/1115_tbl_Shop_Currency.sql b/static/MySQL/1115_tbl_Shop_Currency.sql index 90cda8d6..2ae8aa5f 100644 --- a/static/MySQL/1115_tbl_Shop_Currency.sql +++ b/static/MySQL/1115_tbl_Shop_Currency.sql @@ -13,7 +13,7 @@ CREATE TABLE IF NOT EXISTS Shop_Currency ( factor_from_GBP FLOAT NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Currency_id_change_set diff --git a/static/MySQL/1118_tbl_Shop_Tax_Or_Surcharge.sql b/static/MySQL/1118_tbl_Shop_Tax_Or_Surcharge.sql index af8a20f3..1db28da6 100644 --- a/static/MySQL/1118_tbl_Shop_Tax_Or_Surcharge.sql +++ b/static/MySQL/1118_tbl_Shop_Tax_Or_Surcharge.sql @@ -29,7 +29,7 @@ CREATE TABLE Shop_Tax_Or_Surcharge ( quantity_max FLOAT NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Tax_Or_Surcharge_id_change_set diff --git a/static/MySQL/1121_tbl_Shop_Unit_Measurement.sql b/static/MySQL/1121_tbl_Shop_Unit_Measurement.sql index 44c3eb0c..4082ed2e 100644 --- a/static/MySQL/1121_tbl_Shop_Unit_Measurement.sql +++ b/static/MySQL/1121_tbl_Shop_Unit_Measurement.sql @@ -17,7 +17,7 @@ CREATE TABLE IF NOT EXISTS Shop_Unit_Measurement ( is_unit_of_time BIT NOT NULL DEFAULT 0, is_unit_of_volume BIT NOT NULL DEFAULT 0, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Unit_Measurement_id_change_set diff --git a/static/MySQL/1124_tbl_Shop_Unit_Measurement_Conversion.sql b/static/MySQL/1124_tbl_Shop_Unit_Measurement_Conversion.sql index 249da5fd..903dacb0 100644 --- a/static/MySQL/1124_tbl_Shop_Unit_Measurement_Conversion.sql +++ b/static/MySQL/1124_tbl_Shop_Unit_Measurement_Conversion.sql @@ -13,7 +13,7 @@ CREATE TABLE IF NOT EXISTS Shop_Unit_Measurement_Conversion ( multiplier_unit_base FLOAT NOT NULL, increment_unit_base FLOAT NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Unit_Measurement_Conversion_id_change_set diff --git a/static/MySQL/1200_tbl_Shop_Product_Category.sql b/static/MySQL/1200_tbl_Shop_Product_Category.sql index c92f7def..5ca48963 100644 --- a/static/MySQL/1200_tbl_Shop_Product_Category.sql +++ b/static/MySQL/1200_tbl_Shop_Product_Category.sql @@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Category ( , CONSTRAINT FK_Shop_Product_Category_id_access_level_required FOREIGN KEY (id_access_level_required) REFERENCES Shop_Access_Level(id_access_level) - , created_on TIMESTAMP + , created_on DATETIME , created_by INT NOT NULL , id_change_set INT , CONSTRAINT FK_Shop_Product_Category_id_change_set diff --git a/static/MySQL/1203_tbl_Shop_Product.sql b/static/MySQL/1203_tbl_Shop_Product.sql index f0dc160a..1d243698 100644 --- a/static/MySQL/1203_tbl_Shop_Product.sql +++ b/static/MySQL/1203_tbl_Shop_Product.sql @@ -39,7 +39,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product ( # id_stripe_price VARCHAR(100) NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP NOT NULL, + created_on DATETIME NOT NULL, created_by INT NOT NULL, id_change_set INT, CONSTRAINT FK_Shop_Product_id_change_set diff --git a/static/MySQL/1206_tbl_Shop_Product_Permutation.sql b/static/MySQL/1206_tbl_Shop_Product_Permutation.sql index 49302982..8421a391 100644 --- a/static/MySQL/1206_tbl_Shop_Product_Permutation.sql +++ b/static/MySQL/1206_tbl_Shop_Product_Permutation.sql @@ -50,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, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Permutation_id_change_set diff --git a/static/MySQL/1209_tbl_Shop_Variation_Type.sql b/static/MySQL/1209_tbl_Shop_Variation_Type.sql index aa911b67..6624b7e2 100644 --- a/static/MySQL/1209_tbl_Shop_Variation_Type.sql +++ b/static/MySQL/1209_tbl_Shop_Variation_Type.sql @@ -12,7 +12,7 @@ CREATE TABLE IF NOT EXISTS Shop_Variation_Type ( name_plural VARCHAR(256), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Variation_Type_id_change_set diff --git a/static/MySQL/1212_tbl_Shop_Variation.sql b/static/MySQL/1212_tbl_Shop_Variation.sql index e36294e3..3dbcf817 100644 --- a/static/MySQL/1212_tbl_Shop_Variation.sql +++ b/static/MySQL/1212_tbl_Shop_Variation.sql @@ -16,7 +16,7 @@ CREATE TABLE Shop_Variation ( name VARCHAR(255), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Variation_id_change_set diff --git a/static/MySQL/1215_tbl_Shop_Product_Permutation_Variation_Link.sql b/static/MySQL/1215_tbl_Shop_Product_Permutation_Variation_Link.sql index c2ed9a4a..4f615265 100644 --- a/static/MySQL/1215_tbl_Shop_Product_Permutation_Variation_Link.sql +++ b/static/MySQL/1215_tbl_Shop_Product_Permutation_Variation_Link.sql @@ -19,7 +19,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Variation_Link ( ON UPDATE RESTRICT, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Permutation_Variation_Link_id_change_set diff --git a/static/MySQL/1221_tbl_Shop_Product_Price.sql b/static/MySQL/1221_tbl_Shop_Product_Price.sql index 42bd70b2..fa3d8694 100644 --- a/static/MySQL/1221_tbl_Shop_Product_Price.sql +++ b/static/MySQL/1221_tbl_Shop_Product_Price.sql @@ -23,7 +23,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Price ( price_local_VAT_excl FLOAT NULL, id_stripe_price VARCHAR(200), active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Price_id_change_set diff --git a/static/MySQL/1224_tbl_Shop_Product_Image.sql b/static/MySQL/1224_tbl_Shop_Product_Image.sql index 54a788fd..e3488d26 100644 --- a/static/MySQL/1224_tbl_Shop_Product_Image.sql +++ b/static/MySQL/1224_tbl_Shop_Product_Image.sql @@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Image ( url VARCHAR(255), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Image_id_change_set diff --git a/static/MySQL/1227_tbl_Shop_Delivery_Option.sql b/static/MySQL/1227_tbl_Shop_Delivery_Option.sql index 0c8ff919..263b0a90 100644 --- a/static/MySQL/1227_tbl_Shop_Delivery_Option.sql +++ b/static/MySQL/1227_tbl_Shop_Delivery_Option.sql @@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS Shop_Delivery_Option ( */ active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Delivery_Option_Type_id_change_set diff --git a/static/MySQL/1230_tbl_Shop_Product_Permutation_Delivery_Option_Link.sql b/static/MySQL/1230_tbl_Shop_Product_Permutation_Delivery_Option_Link.sql index 61840b0a..3278cdad 100644 --- a/static/MySQL/1230_tbl_Shop_Product_Permutation_Delivery_Option_Link.sql +++ b/static/MySQL/1230_tbl_Shop_Product_Permutation_Delivery_Option_Link.sql @@ -37,7 +37,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Permutation_Delivery_Option_Link ( quantity_max FLOAT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Permutation_Delivery_Option_Link_id_change_set diff --git a/static/MySQL/1233_tbl_Shop_Discount.sql b/static/MySQL/1233_tbl_Shop_Discount.sql index 7094da71..29643329 100644 --- a/static/MySQL/1233_tbl_Shop_Discount.sql +++ b/static/MySQL/1233_tbl_Shop_Discount.sql @@ -35,11 +35,11 @@ CREATE TABLE Shop_Discount ( apply_multiplier_first BIT DEFAULT 1, quantity_min FLOAT NOT NULL DEFAULT 0, quantity_max FLOAT NOT NULL, - date_start TIMESTAMP NOT NULL, - date_end TIMESTAMP NOT NULL, + date_start DATETIME NOT NULL, + date_end DATETIME NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Discount_id_change_set diff --git a/static/MySQL/1236_tbl_Shop_Discount_Region_Currency_Link.sql b/static/MySQL/1236_tbl_Shop_Discount_Region_Currency_Link.sql index b9d60556..7d6f4b8a 100644 --- a/static/MySQL/1236_tbl_Shop_Discount_Region_Currency_Link.sql +++ b/static/MySQL/1236_tbl_Shop_Discount_Region_Currency_Link.sql @@ -23,7 +23,7 @@ CREATE TABLE IF NOT EXISTS Shop_Discount_Region_Currency_Link ( REFERENCES Shop_Currency(id_currency) ON UPDATE RESTRICT, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Discount_Region_Currency_Link_id_change_set diff --git a/static/MySQL/1300_tbl_Shop_Permission_Group.sql b/static/MySQL/1300_tbl_Shop_Permission_Group.sql index 5a4a6ff7..8de32e14 100644 --- a/static/MySQL/1300_tbl_Shop_Permission_Group.sql +++ b/static/MySQL/1300_tbl_Shop_Permission_Group.sql @@ -11,7 +11,7 @@ CREATE TABLE IF NOT EXISTS Shop_Permission_Group ( name VARCHAR(255), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Permission_Group_id_change_set diff --git a/static/MySQL/1303_tbl_Shop_Permission.sql b/static/MySQL/1303_tbl_Shop_Permission.sql index 7a682ab1..9ad88867 100644 --- a/static/MySQL/1303_tbl_Shop_Permission.sql +++ b/static/MySQL/1303_tbl_Shop_Permission.sql @@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS Shop_Permission ( REFERENCES Shop_Access_Level(id_access_level), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Permission_id_change_set diff --git a/static/MySQL/1306_tbl_Shop_Role.sql b/static/MySQL/1306_tbl_Shop_Role.sql index 22da3b74..6fab3546 100644 --- a/static/MySQL/1306_tbl_Shop_Role.sql +++ b/static/MySQL/1306_tbl_Shop_Role.sql @@ -11,7 +11,7 @@ CREATE TABLE IF NOT EXISTS Shop_Role ( name VARCHAR(255), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Role_id_change_set diff --git a/static/MySQL/1309_tbl_Shop_Role_Permission_Link.sql b/static/MySQL/1309_tbl_Shop_Role_Permission_Link.sql index 42faddd2..cd09785d 100644 --- a/static/MySQL/1309_tbl_Shop_Role_Permission_Link.sql +++ b/static/MySQL/1309_tbl_Shop_Role_Permission_Link.sql @@ -22,7 +22,7 @@ CREATE TABLE IF NOT EXISTS Shop_Role_Permission_Link ( FOREIGN KEY (id_access_level) REFERENCES Shop_Access_Level(id_access_level), active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Role_Permission_Link_id_change_set diff --git a/static/MySQL/1312_tbl_Shop_User.sql b/static/MySQL/1312_tbl_Shop_User.sql index 7df32a6e..629ac72c 100644 --- a/static/MySQL/1312_tbl_Shop_User.sql +++ b/static/MySQL/1312_tbl_Shop_User.sql @@ -17,7 +17,7 @@ CREATE TABLE IF NOT EXISTS Shop_User ( id_region_default INT NULL, is_included_VAT_default BIT NOT NULL DEFAULT 1, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_User_id_change_set diff --git a/static/MySQL/1315_tbl_Shop_User_Role_Link.sql b/static/MySQL/1315_tbl_Shop_User_Role_Link.sql index f75b63a6..879ed9bc 100644 --- a/static/MySQL/1315_tbl_Shop_User_Role_Link.sql +++ b/static/MySQL/1315_tbl_Shop_User_Role_Link.sql @@ -17,7 +17,7 @@ CREATE TABLE IF NOT EXISTS Shop_User_Role_Link ( FOREIGN KEY (id_role) REFERENCES Shop_Role(id_role), active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_User_Role_Link_id_change_set diff --git a/static/MySQL/1318_tbl_Shop_User_Address.sql b/static/MySQL/1318_tbl_Shop_User_Address.sql index a18c999e..d36739ae 100644 --- a/static/MySQL/1318_tbl_Shop_User_Address.sql +++ b/static/MySQL/1318_tbl_Shop_User_Address.sql @@ -20,7 +20,7 @@ CREATE TABLE Shop_User_Address ( city VARCHAR(256) NOT NULL, county VARCHAR(256) NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_User_Address_id_change_set diff --git a/static/MySQL/1321_tbl_Shop_User_Basket.sql b/static/MySQL/1321_tbl_Shop_User_Basket.sql index 122a183e..02ada954 100644 --- a/static/MySQL/1321_tbl_Shop_User_Basket.sql +++ b/static/MySQL/1321_tbl_Shop_User_Basket.sql @@ -24,7 +24,7 @@ CREATE TABLE IF NOT EXISTS Shop_User_Basket ( ON UPDATE RESTRICT, quantity INT NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set_user INT, CONSTRAINT FK_Shop_User_Basket_id_change_set_user diff --git a/static/MySQL/1397_tbl_Shop_Order_Status.sql b/static/MySQL/1397_tbl_Shop_Order_Status.sql index 76495f1b..e5ae3f8a 100644 --- a/static/MySQL/1397_tbl_Shop_Order_Status.sql +++ b/static/MySQL/1397_tbl_Shop_Order_Status.sql @@ -12,7 +12,7 @@ CREATE TABLE IF NOT EXISTS Shop_User_Order_Status ( name_plural VARCHAR(256), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_User_Order_Status_id_change_set diff --git a/static/MySQL/1400_tbl_Shop_Supplier.sql b/static/MySQL/1400_tbl_Shop_Supplier.sql index c632c74e..99f6e81a 100644 --- a/static/MySQL/1400_tbl_Shop_Supplier.sql +++ b/static/MySQL/1400_tbl_Shop_Supplier.sql @@ -1,8 +1,6 @@ # Supplier - - SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Supplier'; CREATE TABLE IF NOT EXISTS Shop_Supplier ( @@ -12,21 +10,21 @@ CREATE TABLE IF NOT EXISTS Shop_Supplier ( department_contact VARCHAR(255) NULL, id_address INT NOT NULL, CONSTRAINT FK_Shop_Supplier_id_address - FOREIGN KEY (id_address) + FOREIGN KEY (id_address) REFERENCES Shop_Address(id_address), - phone_number VARCHAR(50) NULL, + phone_number VARCHAR(50) NULL, fax VARCHAR(50) NULL, email VARCHAR(255) NOT NULL, website VARCHAR(255) NULL, id_currency INT NOT NULL, CONSTRAINT FK_Shop_Supplier_id_currency - FOREIGN KEY (id_currency) + FOREIGN KEY (id_currency) REFERENCES Shop_Currency(id_currency), active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Supplier_id_change_set - FOREIGN KEY (id_change_set) + FOREIGN KEY (id_change_set) REFERENCES Shop_User_Change_Set(id_change_set) ); diff --git a/static/MySQL/1402_tbl_Shop_Supplier_Temp.sql b/static/MySQL/1402_tbl_Shop_Supplier_Temp.sql new file mode 100644 index 00000000..7e474daf --- /dev/null +++ b/static/MySQL/1402_tbl_Shop_Supplier_Temp.sql @@ -0,0 +1,18 @@ + +# Supplier Staging + +SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Supplier_Temp'; + +CREATE TABLE IF NOT EXISTS Shop_Supplier_Temp ( + id_supplier INT NOT NULL, + name_company VARCHAR(255) NOT NULL, + name_contact VARCHAR(255) NULL, + department_contact VARCHAR(255) NULL, + id_address INT NOT NULL, + phone_number VARCHAR(50) NULL, + fax VARCHAR(50) NULL, + email VARCHAR(255) NOT NULL, + website VARCHAR(255) NULL, + id_currency INT NOT NULL, + active BIT NULL +); diff --git a/static/MySQL/1409_tbl_Shop_Supplier_Purchase_Order.sql b/static/MySQL/1409_tbl_Shop_Supplier_Purchase_Order.sql index ee419866..a0b30786 100644 --- a/static/MySQL/1409_tbl_Shop_Supplier_Purchase_Order.sql +++ b/static/MySQL/1409_tbl_Shop_Supplier_Purchase_Order.sql @@ -17,8 +17,9 @@ CREATE TABLE IF NOT EXISTS Shop_Supplier_Purchase_Order ( FOREIGN KEY (id_supplier_fulfilled) REFERENCES Shop_Supplier(id_supplier), */ - 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, /* latency_delivery INT NOT NULL, quantity_ordered FLOAT NOT NULL, @@ -30,9 +31,9 @@ CREATE TABLE IF NOT EXISTS Shop_Supplier_Purchase_Order ( display_order INT NOT NULL, */ active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP NULL, + updated_last_on DATETIME NULL, created_last_by VARCHAR(100) NULL, id_change_set INT NULL, CONSTRAINT FK_Shop_Supplier_Purchase_Order_id_change_set diff --git a/static/MySQL/1411_tbl_Shop_Supplier_Purchase_Order_Temp.sql b/static/MySQL/1411_tbl_Shop_Supplier_Purchase_Order_Temp.sql new file mode 100644 index 00000000..95c2af27 --- /dev/null +++ b/static/MySQL/1411_tbl_Shop_Supplier_Purchase_Order_Temp.sql @@ -0,0 +1,11 @@ + +# Supplier Purchase Order Staging + +SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Supplier_Purchase_Order_Temp'; + +CREATE TABLE IF NOT EXISTS Shop_Supplier_Purchase_Order_Temp ( + id_order INT NOT NULL, + id_supplier_ordered INT NOT NULL, + id_currency_cost INT NOT NULL, + active BIT NULL +); diff --git a/static/MySQL/1412_tbl_Shop_Supplier_Purchase_Order_Product_Link.sql b/static/MySQL/1412_tbl_Shop_Supplier_Purchase_Order_Product_Link.sql index c8dd884b..73d5890e 100644 --- a/static/MySQL/1412_tbl_Shop_Supplier_Purchase_Order_Product_Link.sql +++ b/static/MySQL/1412_tbl_Shop_Supplier_Purchase_Order_Product_Link.sql @@ -15,20 +15,23 @@ CREATE TABLE IF NOT EXISTS Shop_Supplier_Purchase_Order_Product_Link ( CONSTRAINT FK_Shop_Supplier_Purchase_Order_Product_Link_id_permutation FOREIGN KEY (id_permutation) REFERENCES Shop_Product_Permutation(id_permutation), - cost_total_local FLOAT NOT NULL, id_currency_cost INT NOT NULL, - quantity_ordered FLOAT NOT NULL, id_unit_quantity INT NOT NULL, CONSTRAINT FK_Shop_Supplier_Purchase_Order_Product_Link_id_unit_quantity FOREIGN KEY (id_unit_quantity) REFERENCES Shop_Unit_Measurement(id_unit_measurement), + quantity_ordered FLOAT NOT NULL, quantity_received FLOAT NULL, latency_delivery_days INT NOT NULL, display_order INT NOT NULL, active BIT NOT NULL, - created_on TIMESTAMP, + 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, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP NULL, + updated_last_on DATETIME NULL, created_last_by VARCHAR(100) NULL, id_change_set INT NULL, CONSTRAINT FK_Shop_Supplier_Purchase_Order_Product_Link_id_change_set diff --git a/static/MySQL/1414_tbl_Shop_Supplier_Purchase_Order_Product_Link_Temp.sql b/static/MySQL/1414_tbl_Shop_Supplier_Purchase_Order_Product_Link_Temp.sql index 45979730..82948379 100644 --- a/static/MySQL/1414_tbl_Shop_Supplier_Purchase_Order_Product_Link_Temp.sql +++ b/static/MySQL/1414_tbl_Shop_Supplier_Purchase_Order_Product_Link_Temp.sql @@ -8,27 +8,17 @@ SELECT CONCAT('WARNING: Table ', TABLE_NAME, ' already exists.') AS msg_warning FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Shop_Supplier_Purchase_Order_Product_Link_Temp'; CREATE TABLE IF NOT EXISTS Shop_Supplier_Purchase_Order_Product_Link_Temp ( - id_link INT NOT NULL PRIMARY KEY, - GUID BINARY(36) NOT NULL, - id_order INT NOT NULL, - /* - CONSTRAINT FK_Supplier_Purchase_Order_Product_Link_Temp_id_order - FOREIGN KEY (id_order) - REFERENCES Shop_Supplier_Purchase_Order(id_order), - */ - id_permutation INT NOT NULL, - CONSTRAINT FK_Supplier_Purchase_Order_Product_Link_Temp_id_permutation - FOREIGN KEY (id_permutation) - REFERENCES Shop_Product_Permutation(id_permutation), - cost_total_local FLOAT NOT NULL, - id_currency_cost INT NOT NULL, - quantity_ordered FLOAT NOT NULL, - id_unit_quantity INT NOT NULL, - CONSTRAINT FK_Supplier_Purchase_Order_Product_Link_Temp_id_unit_quantity - FOREIGN KEY (id_unit_quantity) - REFERENCES Shop_Unit_Measurement(id_unit_measurement), - quantity_received FLOAT NULL, - latency_delivery_days INT NOT NULL, - display_order INT NOT NULL, - active BIT NOT NULL + id_link INT NOT NULL PRIMARY KEY + , id_order INT NOT NULL + , id_permutation INT NOT NULL + , id_currency_cost INT NOT NULL + , id_unit_quantity INT NOT NULL + , quantity_ordered FLOAT NOT NULL + , quantity_received FLOAT NULL + , latency_delivery_days INT NOT NULL + , display_order INT NOT NULL + , active BIT NOT NULL + , cost_total_local_VAT_excl FLOAT NOT NULL + , cost_total_local_VAT_incl FLOAT NOT NULL + , GUID BINARY(36) NOT NULL ); diff --git a/static/MySQL/1415_tbl_Shop_Manufacturing_Purchase_Order.sql b/static/MySQL/1415_tbl_Shop_Manufacturing_Purchase_Order.sql index 4b8dd49a..b66e4d25 100644 --- a/static/MySQL/1415_tbl_Shop_Manufacturing_Purchase_Order.sql +++ b/static/MySQL/1415_tbl_Shop_Manufacturing_Purchase_Order.sql @@ -22,9 +22,9 @@ CREATE TABLE IF NOT EXISTS Shop_Manufacturing_Purchase_Order ( display_order INT NOT NULL, */ active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP NULL, + updated_last_on DATETIME NULL, created_last_by VARCHAR(100) NULL, id_change_set INT NULL, CONSTRAINT FK_Shop_Manufacturing_Purchase_Order_id_change_set 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 aa5c21b8..3f92002b 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 @@ -27,9 +27,9 @@ CREATE TABLE IF NOT EXISTS Shop_Manufacturing_Purchase_Order_Product_Link ( quantity_produced FLOAT NOT NULL, display_order INT NOT NULL, active BIT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP NULL, + updated_last_on DATETIME NULL, created_last_by VARCHAR(100) NULL, id_change_set INT NULL, CONSTRAINT FK_Manufacturing_Purchase_Order_id_change_set diff --git a/static/MySQL/1421_tbl_Shop_Customer.sql b/static/MySQL/1421_tbl_Shop_Customer.sql index fd8785ce..0443b81b 100644 --- a/static/MySQL/1421_tbl_Shop_Customer.sql +++ b/static/MySQL/1421_tbl_Shop_Customer.sql @@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS Shop_Customer ( FOREIGN KEY (id_currency) REFERENCES Shop_Currency(id_currency), active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Customer_id_change_set diff --git a/static/MySQL/1424_tbl_Shop_Customer_Sales_Order.sql b/static/MySQL/1424_tbl_Shop_Customer_Sales_Order.sql index 537d21ce..1d22b588 100644 --- a/static/MySQL/1424_tbl_Shop_Customer_Sales_Order.sql +++ b/static/MySQL/1424_tbl_Shop_Customer_Sales_Order.sql @@ -24,9 +24,9 @@ CREATE TABLE IF NOT EXISTS Shop_Customer_Sales_Order ( display_order INT NOT NULL, */ active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP NULL, + updated_last_on DATETIME NULL, created_last_by VARCHAR(100) NULL, id_change_set INT NULL, CONSTRAINT FK_Shop_Customer_Sales_Order_id_change_set diff --git a/static/MySQL/1427_tbl_Shop_Customer_Sales_Order_Product_Link.sql b/static/MySQL/1427_tbl_Shop_Customer_Sales_Order_Product_Link.sql index b17f7e16..46814584 100644 --- a/static/MySQL/1427_tbl_Shop_Customer_Sales_Order_Product_Link.sql +++ b/static/MySQL/1427_tbl_Shop_Customer_Sales_Order_Product_Link.sql @@ -27,9 +27,9 @@ CREATE TABLE IF NOT EXISTS Shop_Customer_Sales_Order_Product_Link ( display_order INT NOT NULL, active BIT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP NULL, + updated_last_on DATETIME NULL, created_last_by VARCHAR(100) NULL, id_change_set INT NULL, CONSTRAINT FK_Shop_Customer_Sales_Order_Product_Link_id_change_set diff --git a/static/MySQL/6000_p_debug_timing_reporting.sql b/static/MySQL/6000_p_debug_timing_reporting.sql index 41ad7bba..45eaf32b 100644 --- a/static/MySQL/6000_p_debug_timing_reporting.sql +++ b/static/MySQL/6000_p_debug_timing_reporting.sql @@ -17,19 +17,19 @@ BEGIN SET v_time_end := CURRENT_TIMESTAMP(6); SELECT a_time_start - , UNIX_TIMESTAMP(a_time_start) + , UNIX_DATETIME(a_time_start) , MICROSECOND(a_time_start) / 1000 , v_time_end - , UNIX_TIMESTAMP(v_time_end) + , UNIX_DATETIME(v_time_end) , MICROSECOND(v_time_end) / 1000 , v_time_end - a_time_start AS timestamp_delta - , UNIX_TIMESTAMP(v_time_end - a_time_start) AS UNIX_TIMESTAMP_timestamp_delta + , UNIX_DATETIME(v_time_end - a_time_start) AS UNIX_DATETIME_timestamp_delta , MICROSECOND(v_time_end - a_time_start) AS MICROSECOND_timestamp_delta -- , TIME_FORMAT(TIMEDIFF(v_time_end, a_time_start), '%H:%i:%s') AS time_difference , CONCAT( TIME_FORMAT(TIMEDIFF(v_time_end, a_time_start), '%H hours, %i minutes, %s seconds'), ', ', - TIMESTAMPDIFF(MICROSECOND, a_time_start, v_time_end) % 1000000 / 1000, ' milliseconds' + DATETIMEDIFF(MICROSECOND, a_time_start, v_time_end) % 1000000 / 1000, ' milliseconds' ) AS time_difference ; diff --git a/static/MySQL/7210_fn_shop_get_id_product_permutation_from_variation_csv_list.sql b/static/MySQL/6210_fn_shop_get_id_product_permutation_from_variation_csv_list.sql similarity index 100% rename from static/MySQL/7210_fn_shop_get_id_product_permutation_from_variation_csv_list.sql rename to static/MySQL/6210_fn_shop_get_id_product_permutation_from_variation_csv_list.sql diff --git a/static/MySQL/7200_p_shop_save_product_category.sql b/static/MySQL/7200_p_shop_save_product_category.sql index 6e4d5d39..1643b6c4 100644 --- a/static/MySQL/7200_p_shop_save_product_category.sql +++ b/static/MySQL/7200_p_shop_save_product_category.sql @@ -19,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 TIMESTAMP; + DECLARE v_now DATETIME; DECLARE exit handler for SQLEXCEPTION BEGIN @@ -202,7 +202,7 @@ BEGIN END IF; END IF; - SET v_now := CURRENT_TIMESTAMP(); + SET v_now := CURRENT_DATETIME(); IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN START TRANSACTION; diff --git a/static/MySQL/7204_p_shop_calc_product_permutation.sql b/static/MySQL/7204_p_shop_calc_product_permutation.sql index 6d7cf0ff..9ee160db 100644 --- a/static/MySQL/7204_p_shop_calc_product_permutation.sql +++ b/static/MySQL/7204_p_shop_calc_product_permutation.sql @@ -166,6 +166,10 @@ BEGIN WHERE ISNULL(t_S.as_int) OR ISNULL(PC.id_category) + OR ( + PC.active = 0 + AND a_get_inactive_product_category = 0 + ) ) THEN INSERT INTO tmp_Msg_Error ( -- guid, @@ -183,7 +187,10 @@ BEGIN WHERE ISNULL(t_S.as_int) OR ISNULL(PC.id_category) - -- OR PC.active = 0 + OR ( + PC.active = 0 + AND a_get_inactive_product_category = 0 + ) ; ELSE INSERT INTO tmp_Category_calc ( @@ -197,7 +204,7 @@ BEGIN a_get_all_product_category = 1 OR ( v_has_filter_product_category = 1 - AND FIND_IN_SET(PC.id_category, a_ids_product_category) > 0 + AND NOT ISNULL(t_S.as_int) ) ) AND ( @@ -239,6 +246,10 @@ BEGIN WHERE ISNULL(t_S.as_int) OR ISNULL(P.id_product) + OR ( + P.active = 0 + AND a_get_inactive_product = 0 + ) ) THEN INSERT INTO tmp_Msg_Error ( -- guid, @@ -256,7 +267,10 @@ BEGIN WHERE ISNULL(t_S.as_int) OR ISNULL(P.id_product) - -- OR PC.active = 0 + OR ( + P.active = 0 + AND a_get_inactive_product = 0 + ) ; ELSE INSERT INTO tmp_Product_calc ( @@ -273,7 +287,7 @@ BEGIN a_get_all_product = 1 OR ( v_has_filter_product = 1 - AND FIND_IN_SET(P.id_product, a_ids_product) > 0 + AND NOT ISNULL(t_S.as_int) ) ) AND ( @@ -332,7 +346,10 @@ BEGIN WHERE ISNULL(t_S.as_int) OR ISNULL(PP.id_permutation) - -- OR PC.active = 0 + OR ( + PP.active = 0 + AND a_get_inactive_product_permutation = 0 + ) ; ELSE INSERT INTO tmp_Permutation_calc ( @@ -347,17 +364,18 @@ BEGIN FROM tmp_Split t_S RIGHT JOIN partsltd_prod.Shop_Product_Permutation PP ON t_S.as_int = PP.id_permutation INNER JOIN tmp_Product_calc t_P ON PP.id_product = t_P.id_product - WHERE ( + WHERE 1=1 + AND ( a_get_all_product_permutation = 1 OR ( v_has_filter_permutation = 1 - AND FIND_IN_SET(PP.id_permutation, a_ids_permutation) > 0 - ) - OR ( - a_get_products_quantity_stock_below_min = 1 - AND PP.quantity_stock < PP.quantity_min + AND NOT ISNULL(t_S.as_int) ) ) + AND ( + a_get_products_quantity_stock_below_min = 1 + AND PP.quantity_stock < PP.quantity_min + ) AND ( a_get_inactive_permutation = 1 OR PP.active = 1 diff --git a/static/MySQL/7204_p_shop_get_many_product.sql b/static/MySQL/7204_p_shop_get_many_product.sql index 783d2273..b2d803d3 100644 --- a/static/MySQL/7204_p_shop_get_many_product.sql +++ b/static/MySQL/7204_p_shop_get_many_product.sql @@ -37,7 +37,7 @@ BEGIN DECLARE v_ids_product_permission VARCHAR(4000); -- DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; DECLARE v_id_minimum INT; DECLARE v_ids_product_invalid VARCHAR(4000); DECLARE v_time_start TIMESTAMP(6); diff --git a/static/MySQL/7206_p_shop_save_product_permutation.sql b/static/MySQL/7206_p_shop_save_product_permutation.sql index e56d960b..cfb59e1a 100644 --- a/static/MySQL/7206_p_shop_save_product_permutation.sql +++ b/static/MySQL/7206_p_shop_save_product_permutation.sql @@ -18,7 +18,7 @@ BEGIN DECLARE v_ids_product_permission LONGTEXT; DECLARE v_id_change_set INT; DECLARE v_id_access_level_edit INT; - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE exit handler for SQLEXCEPTION BEGIN @@ -376,7 +376,7 @@ BEGIN END IF; END IF; - SET v_now := CURRENT_TIMESTAMP(); + SET v_now := CURRENT_DATETIME(); IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN START TRANSACTION; diff --git a/static/MySQL/7219_p_shop_get_many_stock_item.sql b/static/MySQL/7219_p_shop_get_many_stock_item.sql index 20443aff..06bd6d32 100644 --- a/static/MySQL/7219_p_shop_get_many_stock_item.sql +++ b/static/MySQL/7219_p_shop_get_many_stock_item.sql @@ -22,7 +22,7 @@ CREATE PROCEDURE p_shop_get_many_stock_item ( IN a_get_all_location_storage BIT, IN a_get_inactive_location_storage BIT, IN a_ids_location_storage TEXT, - IN a_date_received_to TIMESTAMP, + IN a_date_received_to DATETIME, IN a_get_sealed_stock_item_only BIT, IN a_get_unsealed_stock_item_only BIT, IN a_get_expired_stock_item_only BIT, @@ -43,7 +43,7 @@ BEGIN DECLARE v_ids_product_permission LONGTEXT; -- DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; -- DECLARE v_id_minimum INT; DECLARE v_time_start TIMESTAMP(6); diff --git a/static/MySQL/7220_p_shop_save_stock_item.sql b/static/MySQL/7220_p_shop_save_stock_item.sql index 97195ef2..cf6c2abe 100644 --- a/static/MySQL/7220_p_shop_save_stock_item.sql +++ b/static/MySQL/7220_p_shop_save_stock_item.sql @@ -13,11 +13,11 @@ CREATE PROCEDURE p_shop_save_stock_item ( 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_id_access_level_edit INT; + DECLARE v_id_change_set INT; + DECLARE v_id_permission_product INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_ids_product_permission LONGTEXT; DECLARE v_time_start TIMESTAMP(6); DECLARE v_time_expire DATETIME; @@ -63,7 +63,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 partsltd_prod.p_validate_guid ( a_guid ); DROP TEMPORARY TABLE IF EXISTS tmp_Stock_Item; DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; @@ -191,7 +191,41 @@ BEGIN END IF; -- Validation - -- Missing mandatory fields + -- id_stock + IF EXISTS ( + SELECT * + FROM tmp_Stock_Item t_SI + LEFT JOIN partsltd_prod.Shop_Stock_Item SI ON t_SI.id_stock = SI.id_stock + WHERE 1=1 + AND t_SI.id_stock > 0 + AND ISNULL(SI.id_stock) + 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( + 'Invalid stock item(s): ' + , GROUP_CONCAT( + CONCAT( + IFNULL(t_SI.id_stock, '(No Stock Item)') + , ' - ' + , IFNULL(t_SI.name_error, '(No Product)') + ) SEPARATOR ', ' + ) + ) AS msg + FROM tmp_Stock_Item t_SI + LEFT JOIN partsltd_prod.Shop_Product_Permutation PP ON t_SI.id_permutation = PP.id_permutation + WHERE 1=1 + AND t_SI.id_stock > 0 + AND ISNULL(SI.id_stock) + ; + END IF; -- id_product IF EXISTS (SELECT * FROM tmp_Stock_Item t_SI WHERE t_SI.id_product = 0 LIMIT 1) THEN INSERT INTO tmp_Msg_Error ( @@ -483,8 +517,14 @@ BEGIN START TRANSACTION; IF NOT ISNULL(v_ids_product_permission) THEN - INSERT INTO Shop_Product_Change_Set ( comment ) - VALUES ( a_comment ) + INSERT INTO Shop_Product_Change_Set ( + comment + , updated_last_by + ) + VALUES ( + a_comment, + a_id_user + ) ; SET v_id_change_set := LAST_INSERT_ID(); @@ -556,10 +596,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 + ; + + IF a_debug = 1 THEN + SELECT * from tmp_Stock_Item; + END IF; DROP TEMPORARY TABLE IF EXISTS tmp_Stock_Item; DROP TEMPORARY TABLE IF EXISTS 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/7221_p_get_many_shop_product_price_and_discount_and_delivery_option.sql b/static/MySQL/7221_p_get_many_shop_product_price_and_discount_and_delivery_option.sql index 87606e83..40174c26 100644 --- a/static/MySQL/7221_p_get_many_shop_product_price_and_discount_and_delivery_option.sql +++ b/static/MySQL/7221_p_get_many_shop_product_price_and_discount_and_delivery_option.sql @@ -44,7 +44,7 @@ BEGIN DECLARE v_ids_product_permission VARCHAR(4000); -- DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; DECLARE v_id_minimum INT; DECLARE v_time_start TIMESTAMP(6); diff --git a/static/MySQL/7312_p_shop_save_user.sql b/static/MySQL/7312_p_shop_save_user.sql index 5a06a5ef..fe964f7b 100644 --- a/static/MySQL/7312_p_shop_save_user.sql +++ b/static/MySQL/7312_p_shop_save_user.sql @@ -28,7 +28,7 @@ BEGIN -- Argument redeclaration -- Variable declaration DECLARE v_has_filter_user BIT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; -- Argument validation + default values diff --git a/static/MySQL/7313_p_get_many_user.sql b/static/MySQL/7313_p_get_many_user.sql index 27b730eb..4bac0863 100644 --- a/static/MySQL/7313_p_get_many_user.sql +++ b/static/MySQL/7313_p_get_many_user.sql @@ -22,7 +22,7 @@ BEGIN DECLARE v_id_permission_user INT; DECLARE v_id_permission_user_admin INT; DECLARE v_ids_permission_required VARCHAR(4000); - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE v_id_minimum INT; DECLARE v_code_error_bad_data VARCHAR(50); DECLARE v_id_type_error_bad_data INT; diff --git a/static/MySQL/7321_p_shop_save_user_basket.sql b/static/MySQL/7321_p_shop_save_user_basket.sql index e4715085..0f29cfe6 100644 --- a/static/MySQL/7321_p_shop_save_user_basket.sql +++ b/static/MySQL/7321_p_shop_save_user_basket.sql @@ -47,7 +47,7 @@ BEGIN # DECLARE v_id_user VARCHAR(100); DECLARE v_id_permission_product INT; DECLARE v_ids_permutation_permission VARCHAR(4000); - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; # DECLARE v_quantity_new INT; DECLARE v_change_set_used BIT; DECLARE v_id_change_set INT; diff --git a/static/MySQL/7400_p_shop_save_supplier.sql b/static/MySQL/7400_p_shop_save_supplier.sql index 64f88225..98cfcea6 100644 --- a/static/MySQL/7400_p_shop_save_supplier.sql +++ b/static/MySQL/7400_p_shop_save_supplier.sql @@ -8,273 +8,367 @@ DROP PROCEDURE IF EXISTS p_shop_save_supplier; DELIMITER // CREATE PROCEDURE p_shop_save_supplier ( - IN a_guid VARCHAR(500), - IN a_id_user INT, - IN a_comment VARCHAR(500), - IN a_id_supplier INT, - IN a_name_company VARCHAR(256), - IN a_name_contact VARCHAR(256), - IN a_department_contact VARCHAR(256), - IN a_id_address INT, - IN a_phone_number VARCHAR(20), - IN a_fax VARCHAR(20), - IN a_email VARCHAR(515), - IN a_website VARCHAR(300), - IN a_id_currency INT, - IN a_active BIT + IN a_comment VARCHAR(500) + , IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_debug BIT ) BEGIN - DECLARE v_id_error_type_bad_data INT; - DECLARE v_id_error_type_no_permission INT; - DECLARE v_guid_permission BINARY(36); - DECLARE v_id_user VARCHAR(100); - DECLARE v_id_permission_supplier INT; - -- DECLARE v_id_access_level_EDIT INT; - DECLARE v_has_permission BIT; + DECLARE v_code_type_error_bad_data VARCHAR(50); + DECLARE v_code_type_error_no_permission VARCHAR(50); + DECLARE v_id_access_level_edit INT; DECLARE v_id_change_set INT; - DECLARE v_is_new_supplier BIT; + DECLARE v_id_permission_supplier INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(50) NOT NULL + , msg VARCHAR(4000) NOT NULL + ); + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + NULL + , @errno + , @text + ; + SELECT * + FROM tmp_Msg_Error; + DROP TABLE IF EXISTS tmp_Msg_Error; + END; + + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'BAD_DATA'); + 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); + SET v_code_type_error_no_permission := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'NO_PERMISSION'); + 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); + SET v_id_permission_supplier = (SELECT id_permission FROM partsltd_prod.Shop_Permission WHERE code = 'STORE_SUPPLIER' LIMIT 1); + SET v_id_access_level_EDIT = (SELECT id_access_level FROM partsltd_prod.Shop_Access_Level WHERE code = 'EDIT'); - SET v_id_error_type_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = 'BAD_DATA'); - SET v_guid_permission = UUID(); - SET v_id_user = CURRENT_USER(); - SET v_id_permission_supplier = (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_SUPPLIER' LIMIT 1); - -- SET v_id_access_level_EDIT = (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'EDIT'); + CALL p_validate_guid ( a_guid ); + SET a_comment := TRIM(IFNULL(a_comment, '')); - -- Argument default values - IF a_guid IS NULL THEN - SET a_guid = UUID(); - END IF; - - - -- Temporary tables - /* - CREATE TABLE tmp_Shop_Supplier ( - id_supplier INT NOT NULL, - name_company VARCHAR(255) NOT NULL, - name_contact VARCHAR(255) NULL, - department_contact VARCHAR(255) NULL, - id_address INT NOT NULL, - CONSTRAINT FK_tmp_Shop_Supplier_id_address - FOREIGN KEY (id_address) - REFERENCES Shop_Address(id_address), - phone_number VARCHAR(50) NULL, - fax VARCHAR(50) NULL, - email VARCHAR(255) NOT NULL, - website VARCHAR(255) NULL, - id_currency INT NOT NULL, - CONSTRAINT FK_tmp_Shop_Supplier_id_currency - FOREIGN KEY (id_currency) - REFERENCES Shop_Currency(id_currency), - active BIT NOT NULL, - can_view BIT NOT NULL, - can_edit BIT NOT NULL, - can_admin BIT NOT NULL + DROP TEMPORARY TABLE IF EXISTS tmp_Supplier; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + + CREATE TEMPORARY TABLE tmp_Supplier ( + id_supplier INT NOT NULL + , id_address INT NOT NULL + , id_currency INT NOT NULL + , name_company VARCHAR(255) NOT NULL + , name_contact VARCHAR(255) NULL + , department_contact VARCHAR(255) NULL + , phone_number VARCHAR(50) NULL + , fax VARCHAR(50) NULL + , email VARCHAR(255) NOT NULL + , website VARCHAR(255) NULL + , active BIT NOT NULL + , name_error VARCHAR(1000) NOT NULL + , is_new BIT NOT NULL ); - */ - CREATE TABLE IF NOT EXISTS tmp_Msg_Error ( - display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT, - guid BINARY(36) NOT NULL, - id_type INT NOT 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 + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NOT NULL + , code VARCHAR(50) NOT NULL + , msg VARCHAR(4000) NOT NULL ); - -- Argument validation - IF a_id_supplier IS NULL THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, 'Supplier ID must not be null') - ; - END IF; - IF a_name_company IS NULL THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, 'Supplier company name must not be null') - ; - END IF; - IF a_id_address IS NULL THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, 'Address ID must not be null') - ; - END IF; - IF a_email IS NULL THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, 'Email must not be null') - ; - END IF; - IF a_active IS NULL THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, 'Active must not be null') - ; - END IF; + INSERT INTO tmp_Supplier ( + id_supplier + , id_address + , id_currency + , name_company + , name_contact + , department_contact + , phone_number + , fax + , email + , website + , active + , name_error + , is_new + ) + SELECT + S_T.id_supplier + , S_T.id_address + , S_T.id_currency + , S_T.name_company + , S_T.name_contact + , S_T.department_contact + , S_T.phone_number + , S_T.fax + , S_T.email + , S_T.website + , S_T.active + , IFNULL(S_T.name_company, IFNULL(S_T.email, IFNULL(S_T.website, IFNULL(S_T.name_contact, '(No Supplier)')))) + , IFNULL(S_T.id_supplier, 0) < 1 + FROM partsltd_prod.Shop_Supplier_Temp S_T + WHERE GUID = a_guid + ; - - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - SET v_is_new_supplier := CASE WHEN a_id_supplier <= 0 THEN 1 ELSE 0 END; - - IF (v_is_new_supplier = 0 AND NOT EXISTS (SELECT * FROM Shop_Supplier S WHERE S.id_supplier = a_id_supplier)) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, msg + -- Validation + # id_address + IF EXISTS ( + SELECT * + FROM tmp_Supplier t_S + LEFT JOIN partsltd_prod.Shop_Address A ON t_S.id_address = A.id_address + WHERE 1=1 + AND ( + t_S.id_address = 0 + OR A.active = 0 ) - VALUES - (a_guid, v_id_error_type_bad_data, CONCAT('Invalid supplier ID: ', a_id_supplier)) - ; - END IF; - END IF; - - /* - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - INSERT INTO tmp_Shop_Supplier ( - id_supplier, name_company, name_contact, department_contact, id_address, phone_number, fax, email, website, id_currency, active + LIMIT 1 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg ) - VALUES - (a_id_supplier, a_name_company, a_name_contact, a_department_contact, a_id_address, a_phone_number, a_fax, a_email, a_website, a_id_currency, a_active) - /* - FROM Shop_Supplier S - WHERE (NOT v_has_filter_category OR C.id_category LIKE '%' || a_ids_category || '%') - AND (a_get_inactive_categories OR C.active) - * - ; + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT( + 'The following supplier(s) have an invalid or inactive Address: ' + , GROUP_CONCAT(t_S.name_error SEPARATOR ', ') + ) AS msg + FROM tmp_Supplier t_S + LEFT JOIN partsltd_prod.Shop_Address A ON t_S.id_address = A.id_address + WHERE 1=1 + AND ( + t_S.id_address = 0 + OR A.active = 0 + ) + ; END IF; - */ - + # id_currency + IF EXISTS ( + SELECT * + FROM tmp_Supplier t_S + LEFT JOIN partsltd_prod.Shop_Currency C ON t_S.id_currency = C.id_currency + WHERE 1=1 + AND ( + t_S.id_currency = 0 + OR C.active = 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 supplier(s) have an invalid or inactive Currency: ' + , GROUP_CONCAT(t_S.name_error SEPARATOR ', ') + ) AS msg + FROM tmp_Supplier t_S + LEFT JOIN partsltd_prod.Shop_Currency C ON t_S.id_currency = C.id_currency + WHERE 1=1 + AND ( + t_S.id_currency = 0 + OR C.active = 0 + ) + ; + END IF; + # name_company + IF EXISTS (SELECT * FROM tmp_Supplier t_S WHERE ISNULL(t_S.name_company) 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 supplier(s) do not have a name: ', GROUP_CONCAT(IFNULL(t_S.name_error, 'NULL') SEPARATOR ', ')) AS msg + FROM tmp_Supplier t_S + WHERE ISNULL(t_S.name_company) + ; + END IF; + # email + IF EXISTS (SELECT * FROM tmp_Supplier t_S WHERE ISNULL(t_S.email) 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 supplier(s) do not have an email: ', GROUP_CONCAT(IFNULL(t_S.name_error, 'NULL') SEPARATOR ', ')) AS msg + FROM tmp_Supplier t_S + WHERE ISNULL(t_S.email) + ; + END IF; + -- Permissions - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - CALL p_shop_calc_user(v_guid_permission, v_id_user, v_id_permission_supplier, ''); - - /* - UPDATE tmp_Shop_Supplier t_S - INNER JOIN Shop_Calc_User_Temp TP - ON TP.GUID = v_guid_permission - SET tP.can_view = TP.can_view, - tP.can_edit = TP.can_edit, - tP.can_admin = TP.can_admin; - */ - SET v_has_permission := (SELECT can_edit FROM Shop_Calc_User_Temp WHERE GUID = v_guid_permission); - - IF v_has_permission = 0 THEN - SET v_id_error_type_no_permission := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = 'NO_PERMISSION'); - INSERT INTO tmp_Msg_Error ( - guid, id_type, msg - ) - SELECT - a_guid, - v_id_error_type_no_permission, - CONCAT('You do not have ', name, ' permissions.') - FROM Shop_Permission - WHERE id_permission = v_id_permission_supplier - ; - END IF; - - -- CALL p_shop_clear_calc_user(v_guid_permission); - - DELETE FROM Shop_Calc_User_Temp - WHERE GUID = a_guid; - END IF; + IF a_debug = 1 THEN + SELECT + v_guid + , a_id_user + , FALSE -- get inactive users + , v_id_permission_supplier + , v_id_access_level_edit + , '' -- ids_product + , 0 -- a_debug + ; + SELECT * from partsltd_prod.Shop_Calc_User_Temp; + END IF; + + CALL p_shop_calc_user( + v_guid + , a_id_user + , FALSE -- get inactive users + , v_id_permission_supplier + , v_id_access_level_edit + , '' -- ids_product + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT * from partsltd_prod.Shop_Calc_User_Temp WHERE GUID = a_guid; + END IF; + + IF NOT EXISTS (SELECT can_view FROM partsltd_prod.Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = v_guid) THEN + DELETE FROM tmp_Msg_Error; + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + 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)) + ) + ; + END IF; + + CALL partsltd_prod.p_shop_clear_calc_user( a_guid ); + + IF EXISTS ( SELECT * FROM tmp_Msg_Error LIMIT 1 ) THEN + DELETE FROM tmp_Supplier; + END IF; -- Transaction - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - INSERT INTO Shop_Sales_And_Purchasing_Change_Set ( - comment, - updated_last_by, - updated_last_on - ) - VALUES ( - CONCAT( - 'Save ', - CASE WHEN v_is_new_supplier = 1 THEN 'new ' ELSE '' END, - 'Supplier - ', - a_comment - ), - a_id_user, - CURRENT_TIME() - ); - - SET v_id_change_set := (SELECT id_change_set FROM Shop_Sales_And_Purchasing_Change_Set ORDER BY id_change_set DESC LIMIT 1); - + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN START TRANSACTION; - IF (v_is_new_supplier = 1) THEN - INSERT INTO Shop_Supplier ( - -- id_supplier, - name_company, name_contact, department_contact, id_address, phone_number, fax, email, website, id_currency, active, id_change_set - ) - VALUES - ( - -- a_id_supplier, - a_name_company, a_name_contact, a_department_contact, a_id_address, a_phone_number, a_fax, a_email, a_website, a_id_currency, a_active, v_id_change_set - ) + INSERT INTO partsltd_prod.Shop_Sales_And_Purchasing_Change_Set ( + comment + , updated_last_by + , updated_last_on + ) + VALUES ( + a_comment + , a_id_user + , v_time_start + ); + + SET v_id_change_set := LAST_INSERT_ID(); + + INSERT INTO partsltd_prod.Shop_Supplier ( + -- id_supplier, + id_address + , id_currency + , name_company + , name_contact + , department_contact + , phone_number + , fax + , email + , website + , active + , id_change_set + ) + SELECT + t_S.id_address + , t_S.id_currency + , t_S.name_company + , t_S.name_contact + , t_S.department_contact + , t_S.phone_number + , t_S.fax + , t_S.email + , t_S.website + , t_S.active + v_id_change_set + FROM tmp_Supplier t_S + WHERE t_S.is_new = 1 + ; + + UPDATE partsltd_prod.Shop_Supplier S + INNER JOIN tmp_Supplier t_S + ON S.id_supplier = t_S.id_supplier + AND t_S.is_new = 0 + SET + S.id_address = t_S.id_address + , S.id_currency = t_S.id_currency + , S.name_company = t_S.name_company + , S.name_contact = t_S.name_contact + , S.department_contact = t_S.department_contact + , S.phone_number = t_S.phone_number + , S.fax = t_S.fax + , S.email = t_S.email + , S.website = t_S.website + , S.active = t_S.active + , S.id_change_set = v_id_change_set /* - FROM Shop_Supplier S - WHERE (NOT v_has_filter_category OR C.id_category LIKE '%' || a_ids_category || '%') - AND (a_get_inactive_categories OR C.active) + S.name_company = a_name_company, + S.name_contact = a_name_contact, + S.department_contact = a_department_contact, + S.id_address = a_id_address, + S.phone_number = a_phone_number, + S.fax = a_fax, + S.email = a_email, + S.website = a_website, + S.id_currency = a_id_currency, + S.active = a_active, + S.id_change_set = v_id_change_set */ - ; - ELSE - UPDATE Shop_Supplier S - -- INNER JOIN tmp_Shop_Supplier t_S ON S.id_supplier = t_S.id_supplier - SET - /* - S.name_company = t_S.name_company, - S.name_contact = t_S.name_contact, - S.department_contact = t_S.department_contact, - S.id_address = t_S.id_address, - S.phone_number = t_S.phone_number, - S.fax = t_S.fax, - S.email = t_S.email, - S.website = t_S.website, - S.id_currency = t_S.id_currency, - S.active = t_S.active - */ - S.name_company = a_name_company, - S.name_contact = a_name_contact, - S.department_contact = a_department_contact, - S.id_address = a_id_address, - S.phone_number = a_phone_number, - S.fax = a_fax, - S.email = a_email, - S.website = a_website, - S.id_currency = a_id_currency, - S.active = a_active, - S.id_change_set = v_id_change_set - ; - END IF; - - IF EXISTS (SELECT * FROM tmp_Msg_Error) THEN - ROLLBACK; - ELSE - COMMIT; - END IF; + ; + COMMIT; END IF; - -- Returns - -- SET v_now = NOW(); - # Errors SELECT * - FROM tmp_Msg_Error + FROM tmp_Msg_Error t_ME + INNER JOIN partsltd_prod.Shop_Msg_Error_Type MET ON t_ME.id_type = MET.id_type ; - DROP TABLE tmp_Shop_Supplier; - DROP TABLE tmp_Msg_Error; + IF a_debug = 1 THEN + SELECT * from tmp_Supplier; + END IF; + + DROP TEMPORARY TABLE tmp_Supplier; + 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/7401_p_shop_get_many_supplier.sql b/static/MySQL/7401_p_shop_get_many_supplier.sql index 71876de4..b854cf55 100644 --- a/static/MySQL/7401_p_shop_get_many_supplier.sql +++ b/static/MySQL/7401_p_shop_get_many_supplier.sql @@ -1,266 +1,241 @@ - -/* - -CALL p_shop_get_many_supplier ( - '', # a_id_user - 1, # a_get_all_supplier - 0, # a_get_inactive_supplier - 0, # a_get_first_supplier_only - '', # a_ids_supplier -); - -*/ - - --- Clear previous proc DROP PROCEDURE IF EXISTS p_shop_get_many_supplier; - DELIMITER // CREATE PROCEDURE p_shop_get_many_supplier ( - IN a_id_user INT, - IN a_get_all_supplier BIT, - IN a_get_inactive_supplier BIT, - IN a_get_first_supplier_only BIT, - IN a_ids_supplier VARCHAR(4000) + IN a_id_user INT + , IN a_get_all_supplier BIT + , IN a_get_inactive_supplier BIT + , IN a_ids_supplier TEXT + , IN a_debug BIT ) BEGIN - -- Argument redeclaration - -- Variable declaration - DECLARE v_has_filter_supplier BIT; + DECLARE v_code_type_error_bad_data VARCHAR(50); + DECLARE v_code_type_error_no_permission VARCHAR(50); DECLARE v_guid BINARY(36); - # DECLARE v_id_user VARCHAR(100); - # DECLARE v_ids_permutation_unavailable VARCHAR(4000); - DECLARE v_id_permission_supplier INT; - # DECLARE v_ids_product_permission VARCHAR(4000); - # DECLARE v_ids_permutation_permission VARCHAR(4000); + DECLARE v_has_filter_supplier BIT; DECLARE v_id_access_level_view INT; - DECLARE v_now TIMESTAMP; - DECLARE v_id_minimum INT; - DECLARE v_code_error_data VARCHAR(50); - + DECLARE v_id_permission_supplier INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); SET v_guid := UUID(); SET v_id_access_level_view := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'VIEW' LIMIT 1); - SET v_code_error_data := (SELECT code FROM Shop_Msg_Error_Type WHERE code = 'BAD_DATA' LIMIT 1); + SET v_code_type_error_bad_data := (SELECT code FROM Shop_Msg_Error_Type WHERE code = 'BAD_DATA' LIMIT 1); + 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_code_type_error_no_permission := (SELECT code FROM Shop_Msg_Error_Type WHERE code = 'NO_PERMISSION'); + SET v_id_type_error_no_permission := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_no_permission); + SET v_id_permission_supplier := (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_SUPPLIER' LIMIT 1); - -- Argument validation + default values - IF a_id_user IS NULL THEN - SET a_id_user = ''; - ELSE - SET a_id_user = TRIM(a_id_user); - END IF; - IF a_get_all_supplier IS NULL THEN - SET a_get_all_supplier = 1; - END IF; - IF a_get_inactive_supplier IS NULL THEN - SET a_get_inactive_supplier = 0; - END IF; - IF a_get_first_supplier_only IS NULL THEN - SET a_get_first_supplier_only = 0; - END IF; - IF a_ids_supplier IS NULL THEN - SET a_ids_supplier = ''; - ELSE - SET a_ids_supplier = TRIM(REPLACE(a_ids_supplier, '|', ',')); - END IF; + SET a_get_all_supplier := IFNULL(a_get_all_supplier, 0); + SET a_get_inactive_supplier := IFNULL(a_get_inactive_supplier, 0); + SET a_ids_supplier := TRIM(IFNULL(a_ids_supplier, '')); - -- Temporary tables - DROP TABLE IF EXISTS tmp_Shop_Supplier; + DROP TEMPORARY TABLE IF EXISTS tmp_Supplier; - CREATE TABLE tmp_Shop_Supplier ( - id_supplier INT NOT NULL, - CONSTRAINT FK_tmp_Shop_Supplier_id_supplier - FOREIGN KEY (id_supplier) - REFERENCES Shop_Supplier(id_supplier), - active BIT NOT NULL, - rank_supplier INT NULL + CREATE TEMPORARY TABLE tmp_Supplier ( + id_supplier INT NOT NULL ); CREATE TABLE IF NOT EXISTS tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT, - guid BINARY(36) NOT NULL, id_type INT NOT 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 ); + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split ( + substring VARCHAR(4000) NOT NULL + , as_int INT NULL + ); + DELETE FROM tmp_Split; + -- Parse filters SET v_has_filter_supplier = CASE WHEN a_ids_supplier = '' THEN 0 ELSE 1 END; - -- select v_has_filter_product, v_has_filter_permutation; - - IF v_has_filter_supplier = 1 OR a_get_all_supplier = 1 THEN - CALL p_split(a_guid, a_ids_supplier, ','); - - IF EXISTS (SELECT * FROM Split_Temp S_T LEFT JOIN Shop_Supplier S ON S_T.substring = S.id_supplier WHERE ISNULL(S.id_supplier)) THEN - INSERT INTO tmp_Msg_Error ( - guid, - code, - msg - ) - VALUES ( - v_guid, - v_code_error_data, - CONCAT('Invalid supplier IDs: ', (SELECT GROUP_CONCAT(S.id_supplier) FROM Temp_Split TS LEFT JOIN Shop_Supplier S ON TS.substring = S.id_supplier WHERE ISNULL(S.id_supplier))) - ) - ; - ELSE - INSERT INTO tmp_Shop_Supplier ( - id_supplier, - active, - rank_supplier - ) - SELECT - S.id_supplier, - S.active, - RANK() OVER (ORDER BY id_supplier ASC) AS rank_supplier - FROM Shop_Supplier S - LEFT JOIN Split_Temp S_T ON S.id_supplier = S_T.substring - WHERE - ( - a_get_all_supplier = 1 - OR NOT ISNULL(S_T.substring) - ) - AND ( - a_get_inactive_supplier - OR S.active = 1 - ) - ; - END IF; - - DROP TABLE Split_Temp; - - IF a_get_first_supplier_only THEN - DELETE t_S - FROM tmp_Shop_Supplier t_S - WHERE t_S.rank_supplier > 1 /*( - SELECT MIN(t_S.rank_supplier) - FROM tmp_Shop_Supplier t_S - ) */ - ; - END IF; + IF a_debug = 1 THEN + SELECT + v_has_filter_supplier + ; END IF; - - -- Permissions - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN - # SET v_id_user := (SELECT id_user FROM Shop_User WHERE name = CURRENT_USER()); - SET v_id_permission_supplier := (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_SUPPLIER' LIMIT 1); - - -- SELECT v_guid, a_id_user, false, v_id_permission_product, v_id_access_level_view, v_ids_permutation_permission; - -- select * from Shop_Calc_User_Temp; - - CALL p_shop_calc_user(v_guid, a_id_user, FALSE, v_id_permission_supplier, v_id_access_level_view, ''); - - -- select * from Shop_Calc_User_Temp; - - IF NOT EXISTS (SELECT can_view FROM Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = v_guid) THEN - INSERT INTO tmp_Msg_Error ( - guid, - code, - msg - ) - VALUES ( - v_guid, - v_code_error_data, - CONCAT('You do not have view permissions for ', (SELECT name FROM Shop_Permission WHERE id_permission = v_id_permission_supplier LIMIT 1)) - ) - ; - END IF; + + -- Suppliers + IF v_has_filter_supplier = 1 THEN + CALL partsltd_prod.p_split(a_guid, a_ids_supplier, ',', a_debug); + + INSERT INTO tmp_Split ( + substring + , as_int + ) + SELECT + substring + , CONVERT(substring, DECIMAL(10,0)) AS as_int + FROM partsltd_prod.Split_Temp + WHERE 1=1 + AND GUID = a_guid + AND NOT ISNULL(substring) + AND substring != '' + ; + + CALL partsltd_prod.p_clear_split_temp( a_guid ); END IF; + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN + IF EXISTS ( + SELECT * + FROM tmp_Split t_S + LEFT JOIN partsltd_prod.Shop_Supplier S ON t_S.as_int = S.id_supplier + WHERE + ISNULL(t_S.as_int) + OR ISNULL(S.id_supplier) + OR ( + S.active = 0 + AND v_get_inactive_supplier = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, + code, + msg + ) + SELECT + v_id_type_error_bad_data, + v_code_type_error_bad_data, + CONCAT('Invalid or inactive Supplier IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split t_S + LEFT JOIN partsltd_prod.Shop_Supplier S ON t_S.as_int = S.id_supplier + WHERE + ISNULL(t_S.as_int) + OR ISNULL(S.id_supplier) + OR ( + S.active = 0 + AND v_get_inactive_supplier = 0 + ) + ; + ELSE + INSERT INTO tmp_Supplier ( + id_supplier + ) + SELECT + S.id_supplier + FROM tmp_Split t_S + RIGHT JOIN partsltd_prod.Shop_Supplier S ON t_S.as_int = S.id_supplier + WHERE ( + a_get_all_supplier = 1 + OR ( + v_has_filter_supplier = 1 + AND NOT ISNULL(t_S.as_int) + ) + ) + AND ( + a_get_inactive_supplier = 1 + OR S.active = 1 + ) + ; + END IF; + END IF; - -- select * from tmp_Shop_Product; + DELETE FROM tmp_Split; + + -- Permissions + IF a_debug = 1 THEN + SELECT + v_guid + , a_id_user + , FALSE -- get inactive users + , v_id_permission_supplier + , v_id_access_level_view + , '' -- ids_product + , 0 -- a_debug + ; + SELECT * from Shop_Calc_User_Temp; + END IF; + + CALL p_shop_calc_user( + v_guid + , a_id_user + , FALSE -- get inactive users + , v_id_permission_supplier + , v_id_access_level_view + , '' -- ids_product + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT * from Shop_Calc_User_Temp; + END IF; + + IF NOT EXISTS (SELECT can_view FROM Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = v_guid) THEN + DELETE FROM tmp_Msg_Error; + + INSERT INTO tmp_Msg_Error ( + , id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + CONCAT('You do not have view permissions for ', (SELECT name FROM Shop_Permission WHERE id_permission = v_id_permission_supplier LIMIT 1)) + ) + ; + END IF; - -- Returns - SET v_now := NOW(); + IF EXISTS ( SELECT * FROM tmp_Msg_Error LIMIT 1 ) THEN + DELETE FROM tmp_Supplier; + END IF; + -- Returns # Suppliers SELECT t_S.id_supplier, + S.id_address, + S.id_currency, S.name_company, - name_contact, - department_contact, - id_address, - phone_number, - fax, - email, - website, - id_currency, - t_S.active - FROM tmp_Shop_Supplier t_S + S.name_contact, + S.department_contact, + S.phone_number, + S.fax, + S.email, + S.website, + S.active + FROM tmp_Supplier t_S INNER JOIN Shop_Supplier S ON t_S.id_supplier = S.id_supplier ; # Errors - SELECT - /* - t_ME.display_order, - t_ME.guid, - t_ME.id_type, - t_ME.msg, - MET.code, - MET.name, - MET.description - */ - * + SELECT * FROM tmp_Msg_Error t_ME - INNER JOIN Shop_Msg_Error_Type MET - ON t_ME.id_type = MET.id_type - WHERE guid = v_guid + INNER JOIN Shop_Msg_Error_Type MET ON t_ME.id_type = MET.id_type ; - /* - # Return arguments for test - SELECT - a_ids_category, - a_get_inactive_category, - a_ids_product, - a_get_inactive_product, - a_get_first_product_only, - a_get_all_product, - a_ids_image, - a_get_inactive_image, - a_get_first_image_only, - a_get_all_image - ; - */ - - # select 'other outputs'; - # select * from tmp_Shop_Product; - - -- Clean up - DROP TABLE IF EXISTS tmp_Supplier; + IF a_debug = 1 THEN + SELECT * from tmp_Supplier; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Supplier; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + + IF a_debug = 1 THEN + CALL p_debug_timing_reporting( v_time_start ); + END IF; END // DELIMITER ;; -/* CALL p_shop_get_many_supplier ( - 'auth0|6582b95c895d09a70ba10fef', # a_id_user - 1, # a_get_all_supplier - 0, # a_get_inactive_supplier - 0, # a_get_first_supplier_only - '' # a_ids_supplier + 1 -- 'auth0|6582b95c895d09a70ba10fef' # a_id_user + , 1 # a_get_all_supplier + , 0 # a_get_inactive_supplier + , '' # a_ids_supplier + , 0 # a_debug ); -select * from shop_supplier; -select * from shop_product; -select * from TMP_MSG_ERROR; -DROP TABLE TMP_MSG_ERROR; - -insert into shop_product_change_set (comment) - values ('set product not subscription - test bool output to python'); - update shop_product - set is_subscription = 0, - id_change_set = (select id_change_set from shop_product_change_set order by id_change_set desc limit 1) - where id_product = 1 +/* */ \ No newline at end of file diff --git a/static/MySQL/7403_p_save_supplier_purchase_order.sql b/static/MySQL/7403_p_save_supplier_purchase_order.sql index 6723c648..b8d660cc 100644 --- a/static/MySQL/7403_p_save_supplier_purchase_order.sql +++ b/static/MySQL/7403_p_save_supplier_purchase_order.sql @@ -5,491 +5,651 @@ -- Clear previous proc DROP PROCEDURE IF EXISTS p_shop_save_supplier_purchase_order; -DROP TABLE IF EXISTS tmp_Shop_Supplier_Purchase_Order_Product_Link; +DROP TABLE IF EXISTS tmp_Supplier_Purchase_Order_Product_Link; DROP TABLE IF EXISTS tmp_Msg_Error; DELIMITER // CREATE PROCEDURE p_shop_save_supplier_purchase_order ( - IN a_guid VARCHAR(500), - IN a_id_user INT, - IN a_comment VARCHAR(500), - IN a_id_order INT, - IN a_id_supplier_ordered INT, - IN a_id_currency_cost INT - -- IN a_active BIT + IN a_comment VARCHAR(500) + , IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_debug BIT ) BEGIN - DECLARE v_id_error_type_bad_data INT; - DECLARE v_code_error_type_bad_data VARCHAR(50); - DECLARE v_id_error_type_no_permission INT; - DECLARE v_code_error_type_no_permission VARCHAR(50); - DECLARE v_guid_permission BINARY(36); - -- DECLARE v_id_user VARCHAR(100); - DECLARE v_id_permission_supplier_purchase_order INT; - DECLARE v_id_access_level_EDIT INT; - DECLARE v_ids_product VARCHAR(4000); - DECLARE v_ids_product_no_permission VARCHAR(4000); - -- DECLARE v_id_order_new INT; + 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_is_new_supplier_purchase_order BIT; + DECLARE v_id_permission_supplier_purchase_order INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_id_type_error_warning INT; + DECLARE v_ids_product_permission TEXT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(50) NOT NULL + , msg VARCHAR(4000) NOT NULL + ); + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + NULL + , @errno + , @text + ; + SELECT * + FROM tmp_Msg_Error; + DROP TABLE IF EXISTS tmp_Msg_Error; + END; - -- SET SESSION sql_mode = sys.list_drop(@@session.sql_mode, 'ONLY_FULL_GROUP_BY'); + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'BAD_DATA'); + 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); + SET v_code_type_error_no_permission := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'NO_PERMISSION'); + 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); + SET v_code_type_error_warning := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'WARNING'); + SET v_id_type_error_warning := (SELECT id_type FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = v_code_type_error_warning); + SET v_id_permission_supplier_purchase_order = (SELECT id_permission FROM partsltd_prod.Shop_Permission WHERE code = 'STORE_SUPPLIER_PURCHASE_ORDER' LIMIT 1); + SET v_id_access_level_edit = (SELECT id_access_level FROM partsltd_prod.Shop_Access_Level WHERE code = 'EDIT'); - SET v_code_error_type_bad_data = 'BAD_DATA'; - SET v_id_error_type_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_type_bad_data LIMIT 1); - SET v_code_error_type_no_permission = 'NO_PERMISSION'; - SET v_id_error_type_no_permission := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_type_no_permission LIMIT 1); - SET v_guid_permission = UUID(); - -- SET v_id_user = CURRENT_USER(); - SET v_id_permission_supplier_purchase_order := (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_SUPPLIER_PURCHASE_ORDER' LIMIT 1); - SET v_id_access_level_EDIT := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'EDIT'); - - -- Argument default values - IF a_guid IS NULL THEN - SET a_guid = UUID(); - END IF; - /* - IF a_active IS NULL THEN - SET a_active = 0; - END IF; - */ + CALL p_validate_guid ( a_guid ); + SET a_comment := TRIM(IFNULL(a_comment, '')); + DROP TEMPORARY TABLE IF EXISTS tmp_Supplier; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + -- Temporary tables - /* - CREATE TABLE tmp_Shop_Supplier_Purchase_Order ( - id_order INT NOT NULL PRIMARY KEY, - id_supplier_ordered INT NOT NULL, - CONSTRAINT FK_tmp_Shop_Supplier_Purchase_Order_id_supplier_ordered - FOREIGN KEY (id_supplier_ordered) - REFERENCES Shop_Supplier(id_supplier), - cost_total_local FLOAT NOT NULL, - id_currency_cost INT NOT NULL - ); - */ - - CREATE TABLE tmp_Shop_Supplier_Purchase_Order_Product_Link ( - id_link INT NOT NULL PRIMARY KEY, - id_order INT NOT NULL, - /* - CONSTRAINT FK_tmp_Supplier_Purchase_Order_Product_Link_id_order - FOREIGN KEY (id_order) - REFERENCES Shop_Supplier_Purchase_Order(id_order), - */ - id_permutation INT NOT NULL, - CONSTRAINT FK_tmp_Supplier_Purchase_Order_Product_Link_id_permutation - FOREIGN KEY (id_permutation) - REFERENCES Shop_Product_Permutation(id_permutation), - cost_total_local FLOAT NOT NULL, - id_currency_cost INT NOT NULL, - quantity_ordered FLOAT NOT NULL, - id_unit_quantity INT NOT NULL, - CONSTRAINT FK_tmp_Supplier_Purchase_Order_Product_Link_id_unit_quantity - FOREIGN KEY (id_unit_quantity) - REFERENCES Shop_Unit_Measurement(id_unit_measurement), - quantity_received FLOAT NULL, - latency_delivery_days INT NOT NULL, - display_order INT NOT NULL, - active BIT NOT NULL, - name_error VARCHAR(200) NOT NULL + CREATE TEMPORARY TABLE tmp_Supplier_Purchase_Order ( + id_order INT NOT NULL PRIMARY KEY + , id_supplier_ordered INT NOT NULL + , id_currency_cost INT NOT NULL + -- , cost_total_local FLOAT NOT NULL ); - CREATE TABLE IF NOT EXISTS tmp_Msg_Error ( - display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT, - guid BINARY(36) NOT NULL, - id_type INT NOT 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 + CREATE TEMPORARY TABLE tmp_Supplier_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_ordered FLOAT NOT NULL + , id_unit_quantity INT NOT NULL + , quantity_received FLOAT NULL + , latency_delivery_days INT NOT 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 + , has_order BIT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NOT NULL + , code VARCHAR(50) NOT NULL + , msg VARCHAR(4000) NOT NULL ); - - -- Argument validation - # User ID - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF ISNULL(a_id_user) OR NOT EXISTS (SELECT * FROM Shop_User WHERE id_user = a_id_user) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, v_code_error_type_bad_data, CONCAT('Invalid User ID: ', IFNULL(a_id_user, 'NULL'))) - ; - END IF; - END IF; - - # Order ID - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF ISNULL(a_id_order) OR ((a_id_order > 0) AND NOT EXISTS (SELECT * FROM Shop_Supplier_Purchase_Order WHERE id_order = a_id_order)) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, v_code_error_type_bad_data, CONCAT('Invalid Supplier Purchase Order ID: ', IFNULL(a_id_order, 'NULL'))) - ; - END IF; - END IF; - - # Supplier ID - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF ISNULL(a_id_supplier_ordered) OR NOT EXISTS (SELECT * FROM Shop_Supplier WHERE id_supplier = a_id_supplier_ordered) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, v_code_error_type_bad_data, CONCAT('Invalid Supplier ID: ', IFNULL(a_id_supplier_ordered, 'NULL'))) - ; - END IF; - END IF; - - # Currency ID - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF ISNULL(a_id_currency_cost) OR NOT EXISTS (SELECT * FROM Shop_Currency WHERE id_currency = a_id_currency_cost) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, v_code_error_type_bad_data, CONCAT('Invalid currency ID: ', IFNULL(a_id_currency, 'NULL'))) - ; - END IF; - END IF; - - # Comment - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF ISNULL(a_comment) OR TRIM(a_comment) = '' THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, v_code_error_type_bad_data, 'A comment must be provided.') - ; - END IF; - END IF; - + INSERT INTO tmp_Supplier_Purchase_Order ( + id_order + , id_supplier_ordered + , id_currency_cost + ) + SELECT + SPO_T.id_order + , IFNULL(IFNULL(SPO_T.id_supplier_ordered, SPO.id_supplier_ordered), 0) AS id_supplier_ordered + , IFNULL(IFNULL(SPO_T.id_currency_cost, SPO.id_currency_cost), 0) AS id_currency_cost + FROM partsltd_prod.Shop_Supplier_Purchase_Order_Temp SPO_T + LEFT JOIN partsltd_prod.Shop_Supplier_Purchase_Order SPO ON SPO_T.id_order = SPO.id_order + WHERE SPO_T.GUID = a_guid + ; - -- Get data from Temp table - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - SET v_is_new_supplier_purchase_order := CASE WHEN a_id_order <= 0 THEN 1 ELSE 0 END; - - INSERT INTO tmp_Shop_Supplier_Purchase_Order_Product_Link ( - id_link, - id_order, - id_permutation, - cost_total_local, - id_currency_cost, - quantity_ordered, - id_unit_quantity, - quantity_received, - latency_delivery_days, - display_order, - active, - name_error + INSERT INTO tmp_Supplier_Purchase_Order_Product_Link ( + id_link + , id_order + , id_permutation + , id_currency_cost + , quantity_ordered + , id_unit_quantity + , quantity_received + , latency_delivery_days + , 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 + , has_order + ) + SELECT + IFNULL(SPOPL_T.id_link, 0) AS id_link + , IFNULL(IFNULL(SPOPL_T.id_order, SPOPL.id_order) 0) AS id_order + , IFNULL(IFNULL(SPOPL_T.id_permutation, SPOPL.id_permutation), 0) AS id_permutation + , IFNULL(IFNULL(SPOPL_T.id_currency_cost, SPOPL.id_currency_cost) 0) AS id_currency_cost + , IFNULL(IFNULL(SPOPL_T.quantity_ordered, SPOPL.quantity_ordered), 0) AS quantity_ordered + , IFNULL(IFNULL(SPOPL_T.id_unit_quantity, SPOPL.id_unit_quantity), 0) AS id_unit_quantity + , IFNULL(SPOPL_T.quantity_received, SPOPL.quantity_received) AS quantity_received + , IFNULL(SPOPL_T.latency_delivery_days, SPOPL.latency_delivery_days) AS latency_delivery_days + , RANK() OVER (PARTITION BY IFNULL(IFNULL(SPOPL_T.id_order, SPOPL.id_order) 0) ORDER BY IFNULL(IFNULL(SPOPL_T.display_order, SPOPL.display_order), 0)) AS display_order + , IFNULL(IFNULL(SPOPL_T.active, SPOPL.active), 1) AS active + , CONCAT( + fn_shop_get_product_permutation_name(SPOPL_T.id_permutation) + , ' - x' + , IFNULL(SPOPL_T.quantity_ordered, '(No Quantity)') + ) AS name_error + , IFNULL(SPOPL_T.id_link, 0) < 1 AS is_new + , IFNULL(IFNULL(SPOPL_T.cost_total_local_VAT_excl, SPOPL.cost_total_local_VAT_excl), 0) AS cost_total_local_VAT_excl + , IFNULL(IFNULL(SPOPL_T.cost_total_local_VAT_incl, SPOPL.cost_total_local_VAT_incl), 0) AS cost_total_local_VAT_incl + , IFNULL(SPOPL_T.cost_total_local_VAT_excl / SPOPL_T.quantity_ordered, SPOPL.cost_unit_local_VAT_excl) AS cost_unit_local_VAT_excl + , IFNULL(SPOPL_T.cost_total_local_VAT_incl / SPOPL_T.quantity_ordered, SPOPL.cost_unit_local_VAT_incl) AS cost_unit_local_VAT_incl + , NOT ISNULL(t_SPO.id_order) AS has_order + FROM partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link_Temp SPOPL_T + LEFT JOIN partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link SPOPL ON SPOPL_T.id_link = SPOPL.id_link + LEFT JOIN tmp_Supplier_Purchase_Order t_SPO ON SPOPL_T.id_order = t_SPO.id_order + WHERE SPOPL_T.GUID = a_guid + ; + + INSERT INTO tmp_Supplier_Purchase_Order ( + id_order + , id_supplier_ordered + , id_currency_cost + ) + SELECT + SPO_T.id_order + , IFNULL(IFNULL(SPO_T.id_supplier_ordered, SPO.id_supplier_ordered), 0) AS id_supplier_ordered + , IFNULL(IFNULL(SPO_T.id_currency_cost, SPO.id_currency_cost), 0) AS id_currency_cost + FROM partsltd_prod.Shop_Supplier_Purchase_Order SPO + INNER JOIN tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + ON SPO.id_order = t_SPOPL.id_order + AND t_SPOPL.has_order = 0 + ; + + -- Validation + -- Supplier Purchase Order + # id_order + IF EXISTS ( + SELECT * + 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_order > 0 + AND ISNULL(SPO.id_order) + LIMIT 1 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg ) - /* - VALUES - (a_id_supplier, a_name_company, a_name_contact, a_department_contact, a_id_address, a_phone_number, a_fax, a_email, a_website, a_id_currency, a_active) - */ - SELECT - SPOPL_T.id_link, - SPOPL_T.id_order, - SPOPL_T.id_permutation, - PP.cost_local * quantity_ordered AS cost_total_local, - SPOPL_T.id_currency_cost, - SPOPL_T.quantity_ordered, - SPOPL_T.id_unit_quantity, - SPOPL_T.quantity_received, - SPOPL_T.latency_delivery_days, - SPOPL_T.display_order, - SPOPL_T.active, - CONCAT(PP.id_permutation, ' - ', IFNULL(PP.name ,'')) AS name_error - FROM Shop_Supplier_Purchase_Order_Product_Link_Temp SPOPL_T - INNER JOIN Shop_Product_Permutation PP ON SPOPL_T.id_permutation = PP.id_permutation - WHERE SPOPL_T.GUID = a_guid - ; - DELETE SPOPL_T - FROM Shop_Supplier_Purchase_Order_Product_Link_Temp SPOPL_T - WHERE SPOPL_T.GUID = a_guid - ; - - /* - UPDATE tmp_Shop_Supplier_Purchase_Order_Product_Link t_SPOPL - SET - cost_total_local - */ + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT( + '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 + 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 + AND ISNULL(SPO.id_stock) + ; END IF; - - -- Invalid quantity ordered - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF EXISTS ( - SELECT * - FROM tmp_Shop_Supplier_Purchase_Order_Product_Link - WHERE - NOT ISNULL(quantity_ordered) - AND quantity_ordered < 0 - ) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg + # id_supplier_ordered + IF EXISTS ( + SELECT * + 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 ( + ISNULL(S.id_supplier) + OR S.active = 0 ) - SELECT - a_guid, - v_id_error_type_bad_data, - v_code_error_type_bad_data, - CONCAT('Invalid quantity ordered property for the following permutations: ', GROUP_CONCAT(t_SPOPL.name_error SEPARATOR ', ')) - FROM tmp_Shop_Supplier_Purchase_Order_Product_Link t_SPOPL - -- INNER JOIN Shop_Product_Permutation PP ON t_SPOPL.id_permutation = PP.id_permutation - WHERE t_SPOPL.quantity_ordered < 0 - ; - END IF; + LIMIT 1 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT( + 'A valid 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 + LEFT JOIN partsltd_prod.Shop_Supplier S ON t_SPO.id_supplier_ordered = S.id_supplier + WHERE 1=1 + AND ( + ISNULL(S.id_supplier) + OR S.active = 0 + ) + ; END IF; - - -- Duplicates - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF EXISTS (SELECT id_permutation, name_error, COUNT(*) FROM tmp_Shop_Supplier_Purchase_Order_Product_Link t_SPOPL GROUP BY id_permutation HAVING COUNT(*) > 1) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg + # id_currency_cost + IF EXISTS ( + SELECT * + 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 ( + ISNULL(C.id_currency) + OR C.active = 0 ) - SELECT - a_guid, - v_id_error_type_bad_data, - v_code_error_type_bad_data, - CONCAT('Duplicate records: ', GROUP_CONCAT(t_SPOPLC.name_error SEPARATOR ', ')) - FROM (SELECT id_permutation, name_error, COUNT(*) FROM tmp_Shop_Supplier_Purchase_Order_Product_Link t_SPOPL GROUP BY id_permutation HAVING COUNT(*) > 1) t_SPOPLC - ; - END IF; + LIMIT 1 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT( + 'A valid 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 + LEFT JOIN partsltd_prod.Shop_Currency C ON t_SPO.id_currency_cost = C.id_currency + WHERE 1=1 + AND ( + ISNULL(C.id_currency) + OR C.active = 0 + ) + ; + END IF; + # id_unit_quantity + IF EXISTS ( + SELECT * + FROM tmp_Supplier_Purchase_Order t_SPO + LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_SPO.id_unit_quantity = UM.id_unit_measurement + WHERE 1=1 + AND ( + ISNULL(UM.id_unit_measurement) + OR UM.active = 0 + ) + LIMIT 1 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT( + 'A valid unit measurement of quantity 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 + LEFT JOIN partsltd_prod.Shop_Unit_Measurement UM ON t_SPO.id_unit_quantity = UM.id_unit_measurement + WHERE 1=1 + AND ( + ISNULL(UM.id_unit_measurement) + OR UM.active = 0 + ) + ; + END IF; + # Invalid quantity ordered + IF EXISTS ( + SELECT * + FROM tmp_Supplier_Purchase_Order_Product_Link + WHERE + ISNULL(t_SPOPL.quantity_ordered) + OR t_SPOPL.quantity_ordered <= 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 quantity ordered is required for the following Supplier Purchase Order Item(s): ' + , GROUP_CONCAT(t_SPOPL.name_error SEPARATOR ', ') + ) + FROM tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + WHERE + ISNULL(t_SPOPL.quantity_ordered) + OR t_SPOPL.quantity_ordered <= 0 + ; + END IF; + # Invalid quantity received + IF EXISTS ( + SELECT * + FROM tmp_Supplier_Purchase_Order_Product_Link + WHERE t_SPOPL.quantity_received < 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 quantity received is required for the following Supplier Purchase Order Item(s): ' + , GROUP_CONCAT(t_SPOPL.name_error, ' - ', t_SPOPL.quantity_received SEPARATOR ', ') + ) + FROM tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + WHERE t_SPOPL.quantity_received < 0 + ; + END IF; + # Invalid delivery latency + IF EXISTS ( + SELECT * + FROM tmp_Supplier_Purchase_Order_Product_Link + WHERE t_SPOPL.latency_delivery_days < 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 delivery latency is required for the following Supplier Purchase Order Item(s): ' + , GROUP_CONCAT(t_SPOPL.name_error, ' - ', t_SPOPL.latency_delivery_days SEPARATOR ', ') + ) + FROM tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + WHERE t_SPOPL.latency_delivery_days < 0 + ; END IF; - + -- Duplicates + IF EXISTS ( + SELECT + id_permutation + , name_error + , COUNT(*) + FROM tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + GROUP BY id_permutation + HAVING COUNT(*) > 1 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT('Duplicate records: ', GROUP_CONCAT(t_SPOPLC.name_error SEPARATOR ', ')) + FROM ( + SELECT + id_permutation + , name_error + , COUNT(*) + FROM tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + GROUP BY id_permutation + HAVING COUNT(*) > 1 + ) t_SPOPLC + ; + END IF; + -- Empty Supplier Purchase Order + IF EXISTS ( SELECT * FROM tmp_Supplier_Purchase_Order t_SPO LEFT JOIN tmp_Supplier_Purchase_Order_Product_Link t_SPOPL ON t_SPO.id_order = t_SPOPL.id_order WHERE ISNULL(t_SPOPL.id_order) ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT( + 'There are no items in the following Supplier Purchase Order(s): ' + , GROUP_CONCAT(t_SPO.name_error SEPARATOR ', ') + ) AS msg + FROM tmp_Supplier_Purchase_Order t_SPO + LEFT JOIN tmp_Supplier_Purchase_Order_Product_Link t_SPOPL ON t_SPO.id_order = t_SPOPL.id_order + WHERE ISNULL(t_SPOPL.id_order) + ; + END IF; + + -- Supplier Purchase Order Items without Order + IF EXISTS ( + SELECT * + FROM tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + LEFT JOIN tmp_Supplier_Purchase_Order t_SPO ON t_SPOPL.id_order = t_SPO.id_order + WHERE ISNULL(t_SPO.id_order) + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT( + 'There is no order for the following Supplier Purchase Order Item(s): ' + , GROUP_CONCAT(t_SPOPL.name_error SEPARATOR ', ') + ) AS msg + FROM tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + LEFT JOIN tmp_Supplier_Purchase_Order t_SPO ON t_SPOPL.id_order = t_SPO.id_order + WHERE ISNULL(t_SPO.id_order) + ; + END IF; -- Permissions - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - SET v_ids_product := ( - SELECT GROUP_CONCAT(G.id_product SEPARATOR ',') - FROM ( - SELECT DISTINCT PP.id_product - FROM tmp_Shop_Supplier_Purchase_Order_Product_Link t_SPO - INNER JOIN Shop_Product_Permutation PP ON t_SPO.id_permutation = PP.id_permutation - ) G - ); - - CALL p_shop_calc_user(v_guid_permission, a_id_user, 0, v_id_permission_supplier_purchase_order, v_id_access_level_edit, v_ids_product); - - /* - UPDATE tmp_Shop_Supplier t_S - INNER JOIN Shop_Calc_User_Temp TP - ON TP.GUID = v_guid_permission - SET tP.can_view = TP.can_view, - tP.can_edit = TP.can_edit, - tP.can_admin = TP.can_admin; - */ - /* - SET v_has_permission := ( - SELECT can_edit - FROM Shop_Calc_User_Temp - WHERE - GUID = v_guid_permission - AND can_edit = 0 - ); - - IF v_has_permission = 0 THEN - SET v_id_error_type_no_permission := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = 'NO_PERMISSION'); - INSERT INTO tmp_Msg_Error ( - guid, id_type, msg - ) - SELECT - a_guid, - v_id_error_type_no_permission, - CONCAT('You do not have ', name, ' permissions.') - FROM Shop_Permission - WHERE id_permission = v_id_permission_supplier_purchase_order - ; - END IF; - */ - SET v_ids_product_no_permission := ( - SELECT GROUP_CONCAT(PT.id_product SEPARATOR ',') - FROM Shop_Calc_User_Temp PT - WHERE - PT.can_edit = 0 - AND NOT ISNULL(PT.id_product) - ); - IF NOT ISNULL(v_ids_product_no_permission) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg - ) - VALUES ( - a_guid, - v_id_error_type_no_permission, - v_code_error_type_no_permission, - CONCAT('You do not have permission to edit the following product IDs: ', v_ids_product_no_permission) - ) - ; - END IF; - - DELETE FROM Shop_Calc_User_Temp - WHERE GUID = a_guid; - END IF; + SET v_ids_product_permission := ( + SELECT + GROUP_CONCAT(DISTINCT PP.id_product SEPARATOR ',') + FROM tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + INNER JOIN partsltd_prod.Shop_Product_Permutation PP ON t_SPOPL.id_permutation = PP.id_permutation + ); + IF a_debug = 1 THEN + SELECT + v_guid + , a_id_user + , FALSE -- get inactive users + , v_id_permission_supplier_purchase_order + , v_id_access_level_edit + , v_ids_product_permission -- ids_product + , 0 -- a_debug + ; + SELECT * from partsltd_prod.Shop_Calc_User_Temp; + END IF; + + CALL p_shop_calc_user( + v_guid + , a_id_user + , FALSE -- get inactive users + , v_id_permission_supplier_purchase_order + , v_id_access_level_edit + , v_ids_product_permission -- ids_product + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT * from partsltd_prod.Shop_Calc_User_Temp WHERE GUID = a_guid; + END IF; + + IF NOT EXISTS (SELECT can_view FROM partsltd_prod.Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = v_guid) THEN + DELETE FROM tmp_Msg_Error; + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + 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)) + ) + ; + END IF; + + CALL partsltd_prod.p_shop_clear_calc_user( a_guid ); + IF EXISTS ( SELECT * FROM tmp_Msg_Error LIMIT 1 ) THEN + DELETE FROM tmp_Supplier_Purchase_Order; + DELETE FROM tmp_Supplier_Purchase_Order_Product_Link; + END IF; + + IF EXISTS ( + SELECT * + FROM tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + INNER JOIN partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link SPOPL ON t_SPOPL.id_link = SPOPL.id_link + INNER JOIN partsltd_prod.Shop_Stock_Item SI ON SPOPL.id_permutation = SI.id_permutation + WHERE + t_SPOPL.is_new = 0 + AND t_SPOPL.quantity_received < SPOPL.quantity_received + ) + -- Transaction IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN START TRANSACTION; INSERT INTO Shop_Sales_And_Purchasing_Change_Set ( - comment, - updated_last_by, - updated_last_on + comment + , updated_last_by + , updated_last_on ) VALUES ( - CONCAT( - 'Save ', - CASE WHEN v_is_new_supplier_purchase_order = 1 THEN 'new ' ELSE '' END, - 'Supplier Purchase Order - ', - a_comment - ), - a_id_user, - CURRENT_TIME() + a_comment + , a_id_user + , v_time_start ); - SET v_id_change_set := (SELECT id_change_set FROM Shop_Sales_And_Purchasing_Change_Set ORDER BY id_change_set DESC LIMIT 1); - - IF (v_is_new_supplier_purchase_order = 1) THEN - INSERT INTO Shop_Supplier_Purchase_Order ( - id_supplier_ordered, - cost_total_local, - id_currency_cost, - created_by, - id_change_set, - active - ) - SELECT - a_id_supplier_ordered, - SUM(t_SPOPL.cost_total_local), - a_id_currency_cost, - a_id_user, - v_id_change_set, - a_active - FROM tmp_Shop_Supplier_Purchase_Order_Product_Link t_SPOPL - ; - -- SET v_id_order_new - SET a_id_order := (SELECT id_order FROM Shop_Supplier_Purchase_Order ORDER BY id_order DESC LIMIT 1); - INSERT INTO Shop_Supplier_Purchase_Order_Product_Link ( - id_order, - id_permutation, - cost_total_local, - id_currency_cost, - quantity_ordered, - id_unit_quantity, - quantity_received, - latency_delivery_days, - display_order, - active, - created_by, - id_change_set - ) - SELECT - a_id_order, -- v_id_order_new, - id_permutation, - cost_total_local, - id_currency_cost, - quantity_ordered, - id_unit_quantity, - quantity_received, - latency_delivery_days, - display_order, - active, - a_id_user, - v_id_change_set - FROM tmp_Shop_Supplier_Purchase_Order_Product_Link t_SPOPL - ; - ELSE - UPDATE Shop_Supplier_Purchase_Order SPO - INNER JOIN tmp_Shop_Supplier_Purchase_Order_Product_Link t_SPOPL ON SPO.id_order = t_SPOPL.id_order - SET - SPO.id_supplier_ordered = a_id_supplier_ordered, - SPO.cost_total_local = SUM(t_SPOPL.cost_total_local), - SPO.id_currency = a_id_currency_cost, - SPO.id_change_set = v_id_change_set, - SPO.active = a_active - WHERE SPO.id_order = a_id_order - ; - IF EXISTS (SELECT * FROM tmp_Shop_Supplier_Purchase_Order_Product_Link t_SPOPL INNER JOIN Shop_Supplier_Purchase_Order_Product_Link SPOPL ON t_SPOPL.id_link = SPOPL.id_link) THEN - UPDATE Shop_Supplier_Purchase_Order_Product_Link SPOPL - INNER JOIN tmp_Shop_Supplier_Purchase_Order_Product_Link t_SPOPL - ON SPOPL.id_link = t_SPOPL.id_link - SET - SPOPL.id_order = t_SPOPL.id_order, - SPOPL.id_permutation = t_SPOPL.id_permutation, - SPOPL.cost_total_local = t_SPOPL.cost_total_local, - SPOPL.id_currency_cost = t_SPOPL.id_currency_cost, - SPOPL.quantity_ordered = t_SPOPL.quantity_ordered, - SPOPL.id_unit_quantity = t_SPOPL.id_unit_quantity, - SPOPL.quantity_received = t_SPOPL.quantity_received, - SPOPL.latency_delivery_days = t_SPOPL.latency_delivery_days, - SPOPL.display_order = t_SPOPL.display_order, - SPOPL.active = t_SPOPL.active, - SPOPL.id_change_set = v_id_change_set - ; - ELSE - INSERT INTO Shop_Supplier_Purchase_Order_Product_Link ( - id_order, - id_permutation, - cost_total_local, - id_currency_cost, - quantity_ordered, - id_unit_quantity, - quantity_received, - latency_delivery_days, - display_order, - active, - created_by, - id_change_set - ) - SELECT - id_order, - id_permutation, - cost_total_local, - id_currency_cost, - quantity_ordered, - id_unit_quantity, - quantity_received, - latency_delivery_days, - display_order, - active, - a_id_user, - v_id_change_set - FROM tmp_Shop_Supplier_Purchase_Order_Product_Link t_SPOPL - WHERE t_SPOPL.id_link < 0 - ; - END IF; - END IF; + SET v_id_change_set := LAST_INSERT_ID(); - IF EXISTS (SELECT * FROM tmp_Msg_Error) THEN - ROLLBACK; - ELSE - COMMIT; - END IF; - END IF; - - -- Returns - # SET v_now = NOW(); - - # Supplier Purchase Orders - SELECT * - FROM Shop_Supplier_Purchase_Order - WHERE id_order = a_id_order - ; - - # Supplier Purchase Order Product Links - SELECT * - FROM Shop_Supplier_Purchase_Order_Product_Link - WHERE id_order = a_id_order - ; + INSERT INTO partsltd_prod.Shop_Supplier_Purchase_Order ( + id_supplier_ordered + , id_currency_cost + , cost_total_local_VAT_excl + , cost_total_local_VAT_incl + , created_by + , created_on + , id_change_set + , active + ) + SELECT + t_SPO.id_supplier_ordered + , t_SPO.id_currency_cost + , SUM(t_SPOPL.cost_total_local_VAT_excl) + , SUM(t_SPOPL.cost_total_local_VAT_incl) + , t_SPO.active + , a_id_user + , v_time_start + , v_id_change_set + FROM tmp_Supplier_Purchase_Order t_SPO + INNER JOIN tmp_Supplier_Purchase_Order_Product_Link t_SPOPL ON t_SPO.id_order = t_SPOPL.id_order + WHERE t_SPOPL.is_new = 1 + ; + + INSERT INTO Shop_Supplier_Purchase_Order_Product_Link ( + id_order + , id_permutation + , id_currency_cost + , id_unit_quantity + , quantity_ordered + , quantity_received + , latency_delivery_days + , display_order + , active + , cost_total_local_VAT_excl + , cost_total_local_VAT_incl + , created_by + , id_change_set + ) + SELECT + t_SPOPL.id_order + , t_SPOPL.id_permutation + , t_SPOPL.id_currency_cost + , t_SPOPL.id_unit_quantity + , t_SPOPL.quantity_ordered + , t_SPOPL.quantity_received + , t_SPOPL.latency_delivery_days + , t_SPOPL.display_order + , t_SPOPL.active + , t_SPOPL.cost_total_local_VAT_excl + , t_SPOPL.cost_total_local_VAT_incl + a_id_user + v_id_change_set + FROM tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + WHERE t_SPOPL.is_new = 1 + ; + + UPDATE partsltd_prod.Shop_Supplier_Purchase_Order SPO + INNER JOIN tmp_Supplier_Purchase_Order t_SPO + ON SPO.id_order = t_SPO.id_order + AND t_SPO.is_new = 0 + INNER JOIN tmp_Supplier_Purchase_Order_Product_Link t_SPOPL ON t_SPO.id_order = t_SPOPL.id_order + SET + SPO.id_supplier_ordered = t_SPO.id_supplier_ordered + , SPO.id_currency_cost = id_currency_cost + , SPO.cost_total_local_VAT_excl = SUM(t_SPOPL.cost_total_local_VAT_excl) + , SPO.cost_total_local_VAT_incl = SUM(t_SPOPL.cost_total_local_VAT_incl) + , SPO.active = a_active + , SPO.id_change_set = v_id_change_set + ; + + UPDATE partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link SPOPL + INNER JOIN tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + ON SPOPL.id_link = t_SPOPL.id_link + AND t_SPOPL.is_new = 0 + SET + SPOPL.id_order = t_SPOPL.id_order, + SPOPL.id_permutation = t_SPOPL.id_permutation, + SPOPL.id_currency_cost = t_SPOPL.id_currency_cost, + SPOPL.id_unit_quantity = t_SPOPL.id_unit_quantity, + SPOPL.quantity_ordered = t_SPOPL.quantity_ordered, + SPOPL.quantity_received = t_SPOPL.quantity_received, + SPOPL.latency_delivery_days = t_SPOPL.latency_delivery_days, + SPOPL.display_order = t_SPOPL.display_order, + SPOPL.active = t_SPOPL.active, + SPOPL.cost_total_local_VAT_excl = t_SPOPL.cost_total_local_VAT_excl, + SPOPL.cost_total_local_VAT_incl = t_SPOPL.cost_total_local_VAT_incl, + SPOPL.id_change_set = v_id_change_set + ; + + DELETE SPO_T + FROM Shop_Supplier_Purchase_Order_Temp SPO_T + WHERE SPO_T.GUID = a_guid + ; + DELETE SPOPL_T + FROM Shop_Supplier_Purchase_Order_Product_Link_Temp SPOPL_T + WHERE SPOPL_T.GUID = a_guid + ; + + COMMIT; # Errors SELECT * - FROM tmp_Msg_Error + FROM tmp_Msg_Error t_ME + INNER JOIN partsltd_prod.Shop_Msg_Error_Type MET ON t_ME.id_type = MET.id_type ; - # DROP TABLE tmp_Shop_Supplier_Purchase_Order; - DROP TABLE tmp_Shop_Supplier_Purchase_Order_Product_Link; - DROP TABLE tmp_Msg_Error; + IF a_debug = 1 THEN + SELECT * from tmp_Supplier; + END IF; + + DROP TEMPORARY TABLE tmp_Supplier_Purchase_Order; + DROP TEMPORARY TABLE tmp_Supplier_Purchase_Order_Product_Link; + 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/7404_p_shop_get_many_supplier_purchase_order.sql b/static/MySQL/7404_p_shop_get_many_supplier_purchase_order.sql index c945e1b7..2d235460 100644 --- a/static/MySQL/7404_p_shop_get_many_supplier_purchase_order.sql +++ b/static/MySQL/7404_p_shop_get_many_supplier_purchase_order.sql @@ -1,633 +1,390 @@ - - --- Clear previous proc DROP PROCEDURE IF EXISTS p_shop_get_many_supplier_purchase_order; - DELIMITER // CREATE PROCEDURE p_shop_get_many_supplier_purchase_order ( IN a_id_user INT, IN a_get_all_supplier BIT, IN a_get_inactive_supplier BIT, - IN a_get_first_supplier_only BIT, - IN a_ids_supplier VARCHAR(4000), + IN a_ids_supplier TEXT, IN a_get_all_order BIT, - -- IN a_get_inactive_order BIT, - IN a_get_first_order_only BIT, - IN a_ids_order VARCHAR(4000), - IN a_get_inactive_category BIT, - IN a_ids_category VARCHAR(4000), - IN a_get_inactive_product BIT, - IN a_ids_product VARCHAR(4000), - IN a_get_inactive_permutation BIT, - IN a_ids_permutation VARCHAR(4000), - IN a_date_from TIMESTAMP, - IN a_date_to TIMESTAMP + IN a_get_inactive_order BIT, + IN a_ids_order TEXT, + IN a_ids_permutation TEXT, + IN a_date_from DATETIME, + IN a_date_to DATETIME, + IN a_debug BIT ) BEGIN - -- Argument redeclaration - -- Variable declaration + DECLARE v_code_type_error_bad_data VARCHAR(50); + DECLARE v_code_type_error_no_permission VARCHAR(50); + DECLARE v_guid BINARY(36); DECLARE v_has_filter_supplier BIT; DECLARE v_has_filter_order BIT; - DECLARE v_has_filter_category BIT; - DECLARE v_has_filter_product BIT; DECLARE v_has_filter_permutation BIT; DECLARE v_has_filter_date_from BIT; DECLARE v_has_filter_date_to BIT; - DECLARE v_guid BINARY(36); - # DECLARE v_id_user VARCHAR(100); - # DECLARE v_ids_permutation_unavailable VARCHAR(4000); - DECLARE v_ids_permission_supplier_purchase_order VARCHAR(4000); - DECLARE v_ids_product_permission VARCHAR(4000); - # DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - -- DECLARE v_now TIMESTAMP; - -- DECLARE v_id_minimum INT; - DECLARE v_code_error_data VARCHAR(50); - DECLARE v_id_type_error_data INT; + DECLARE v_ids_permission_supplier_purchase_order INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); SET v_guid := UUID(); SET v_id_access_level_view := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'VIEW' LIMIT 1); - -- SET v_ids_permission_supplier_purchase_order := (SELECT id_permission FROM Shop_Permission WHERE code = 'SHOP_SUPPLIER_PURCHASE_ORDER' LIMIT 1); - SET v_code_error_data = 'BAD_DATA'; - SET v_id_type_error_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data); + SET v_code_type_error_bad_data := (SELECT code FROM Shop_Msg_Error_Type WHERE code = 'BAD_DATA' LIMIT 1); + 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_code_type_error_no_permission := (SELECT code FROM Shop_Msg_Error_Type WHERE code = 'NO_PERMISSION'); + SET v_id_type_error_no_permission := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_no_permission); + SET v_ids_permission_supplier_purchase_order := (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_SUPPLIER_PURCHASE_ORDER' LIMIT 1); + + SET a_get_all_supplier := IFNULL(a_get_all_supplier, 1); + SET a_get_inactive_supplier := IFNULL(a_get_inactive_supplier, 0); + SET a_ids_supplier := TRIM(IFNULL(a_ids_supplier, '')); + SET a_get_all_order := IFNULL(a_get_all_order, 1); + SET a_get_inactive_order := IFNULL(a_get_inactive_order, 0); + SET a_ids_order := TRIM(IFNULL(a_ids_order, '')); + SET a_ids_permutation := TRIM(IFNULL(a_ids_permutation, '')); + SET a_date_from := IFNULL(a_date_from, NULL); + SET a_date_to := IFNULL(a_date_to, NULL); + SET a_debug := IFNULL(a_debug, 0); - -- Argument validation + default values - IF a_id_user IS NULL THEN - SET a_id_user = ''; - ELSE - SET a_id_user = TRIM(a_id_user); - END IF; - IF a_get_all_supplier IS NULL THEN - SET a_get_all_supplier = 1; - END IF; - IF a_get_inactive_supplier IS NULL THEN - SET a_get_inactive_supplier = 0; - END IF; - IF a_get_first_supplier_only IS NULL THEN - SET a_get_first_supplier_only = 0; - END IF; - IF a_ids_supplier IS NULL THEN - SET a_ids_supplier = ''; - ELSE - SET a_ids_supplier = TRIM(REPLACE(a_ids_supplier, '|', ',')); - END IF; - IF a_get_all_order IS NULL THEN - SET a_get_all_order = 1; - END IF; - /* - IF a_get_inactive_order IS NULL THEN - SET a_get_inactive_order = 0; - END IF; - */ - IF a_get_first_order_only IS NULL THEN - SET a_get_first_order_only = 0; - END IF; - IF a_ids_order IS NULL THEN - SET a_ids_order = ''; - ELSE - SET a_ids_order = TRIM(REPLACE(a_ids_order, '|', ',')); - END IF; - IF a_get_inactive_category IS NULL THEN - SET a_get_inactive_category = 0; - END IF; - IF a_ids_category IS NULL THEN - SET a_ids_category = ''; - ELSE - SET a_ids_category = TRIM(REPLACE(a_ids_category, '|', ',')); - END IF; - IF a_get_inactive_product IS NULL THEN - SET a_get_inactive_product = 0; - END IF; - IF a_ids_product IS NULL THEN - SET a_ids_product = ''; - ELSE - SET a_ids_product = TRIM(REPLACE(a_ids_product, '|', ',')); - END IF; - IF a_get_inactive_permutation IS NULL THEN - SET a_get_inactive_permutation = 0; - END IF; - IF a_ids_permutation IS NULL THEN - SET a_ids_permutation = ''; - ELSE - SET a_ids_permutation = TRIM(REPLACE(a_ids_permutation, '|', ',')); - END IF; + DROP TABLE IF EXISTS tmp_Supplier_Purchase_Order_Product_Link; + DROP TABLE IF EXISTS tmp_Supplier_Purchase_Order; + DROP TABLE IF EXISTS tmp_Supplier; + DROP TABLE IF EXISTS tmp_Product; - -- Temporary tables - DROP TABLE IF EXISTS tmp_Shop_Supplier_Purchase_Order_Product_Link; - DROP TABLE IF EXISTS tmp_Shop_Supplier_Purchase_Order; - DROP TABLE IF EXISTS tmp_Shop_Supplier; - DROP TABLE IF EXISTS tmp_Shop_Product; - - CREATE TABLE tmp_Shop_Supplier ( - id_supplier INT NOT NULL, - CONSTRAINT FK_tmp_Shop_Supplier_id_supplier - FOREIGN KEY (id_supplier) - REFERENCES Shop_Supplier(id_supplier), - active BIT NOT NULL, - rank_supplier INT NULL, - can_view BIT, - can_edit BIT, - can_admin BIT + CREATE TABLE tmp_Supplier ( + id_supplier INT NOT NULL PRIMARY KEY ); - CREATE TABLE tmp_Shop_Supplier_Purchase_Order ( - id_order INT NOT NULL PRIMARY KEY, - id_supplier_ordered INT NOT NULL, - CONSTRAINT FK_tmp_Shop_Supplier_Purchase_Order_id_supplier_ordered - FOREIGN KEY (id_supplier_ordered) - REFERENCES Shop_Supplier(id_supplier), - cost_total_local FLOAT NOT NULL, - id_currency_cost INT NOT NULL, - active BIT NOT NULL, - rank_order INT NOT NULL + CREATE TABLE tmp_Supplier_Purchase_Order ( + id_order INT NOT NULL PRIMARY KEY ); - /* - CREATE TABLE tmp_Shop_Supplier_Purchase_Order_Product_Link ( + CREATE TABLE tmp_Supplier_Purchase_Order_Product_Link ( id_link INT NOT NULL PRIMARY KEY, id_order INT NOT NULL, - CONSTRAINT FK_tmp_Supplier_Purchase_Order_Product_Link_id_order - FOREIGN KEY (id_order) - REFERENCES Shop_Supplier_Purchase_Order(id_order), - id_permutation INT NOT NULL, - CONSTRAINT FK_tmp_Supplier_Purchase_Order_Product_Link_id_permutation - FOREIGN KEY (id_permutation) - REFERENCES Shop_Product_Permutation(id_permutation), - cost_total_local FLOAT NOT NULL, - id_currency_cost INT NOT NULL, - quantity_ordered FLOAT NOT NULL, - id_unit_quantity INT NOT NULL, - CONSTRAINT FK_tmp_Supplier_Purchase_Order_Product_Link_id_unit_quantity - FOREIGN KEY (id_unit_quantity) - REFERENCES Shop_Unit_Measurement(id_unit_measurement), - quantity_received FLOAT NULL, - latency_delivery_days INT NOT NULL, - display_order INT NOT NULL - ); - */ - - CREATE TABLE tmp_Shop_Product ( - id_category INT NOT NULL, - CONSTRAINT FK_tmp_Shop_Product_id_category - FOREIGN KEY (id_category) - REFERENCES Shop_Product_Category(id_category), - id_product INT NOT NULL, - CONSTRAINT FK_tmp_Shop_Product_id_product - FOREIGN KEY (id_product) - REFERENCES Shop_Product(id_product), - -- product_has_variations BIT NOT NULL, - id_permutation INT NULL, - CONSTRAINT FK_tmp_Shop_Product_id_permutation - FOREIGN KEY (id_permutation) - REFERENCES Shop_Product_Permutation(id_permutation), - active_category BIT NOT NULL, - active_product BIT NOT NULL, - active_permutation BIT NULL, - display_order_category INT NOT NULL, - display_order_product INT NOT NULL, - display_order_permutation INT NULL, - rank_permutation INT NOT NULL, # _in_category - name VARCHAR(255) NOT NULL, - description VARCHAR(4000) NOT NULL, - /* - price_GBP_full FLOAT NOT NULL, - price_GBP_min FLOAT NOT NULL, - */ - latency_manufacture_days INT NOT NULL, - quantity_min FLOAT NOT NULL, - quantity_max FLOAT NOT NULL, - quantity_step FLOAT NOT NULL, - quantity_stock FLOAT NOT NULL, - is_subscription BIT NOT NULL, - id_unit_measurement_interval_recurrence INT, - CONSTRAINT FK_tmp_Shop_Product_id_unit_measurement_interval_recurrence - FOREIGN KEY (id_unit_measurement_interval_recurrence) - REFERENCES Shop_Interval_Recurrence(id_interval), - count_interval_recurrence INT, - id_stripe_product VARCHAR(100), - product_has_variations INT NOT NULL, - can_view BIT, - can_edit BIT, - can_admin BIT + id_permutation INT NOT NULL ); CREATE TABLE IF NOT EXISTS tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT, - guid BINARY(36) NOT NULL, id_type INT NOT 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 ); - - -- Parse filters SET v_has_filter_supplier = CASE WHEN a_ids_supplier = '' THEN 0 ELSE 1 END; SET v_has_filter_order = CASE WHEN a_ids_order = '' THEN 0 ELSE 1 END; - SET v_has_filter_category = CASE WHEN a_ids_category = '' THEN 0 ELSE 1 END; - SET v_has_filter_product = CASE WHEN a_ids_product = '' THEN 0 ELSE 1 END; SET v_has_filter_permutation = CASE WHEN a_ids_permutation = '' THEN 0 ELSE 1 END; SET v_has_filter_date_from = CASE WHEN ISNULL(a_date_from) THEN 0 ELSE 1 END; SET v_has_filter_date_to = CASE WHEN ISNULL(a_date_to) THEN 0 ELSE 1 END; - -- select v_has_filter_product, v_has_filter_permutation; + IF a_debug = 1 THEN + SELECT + v_has_filter_supplier, + v_has_filter_order, + v_has_filter_permutation, + v_has_filter_date_from, + v_has_filter_date_to + ; + END IF; - IF v_has_filter_supplier THEN - CALL p_split(a_guid, a_ids_supplier, ','); - - IF EXISTS (SELECT * FROM Split_Temp TS LEFT JOIN Shop_Supplier S ON TS.substring = S.id_supplier WHERE ISNULL(S.id_supplier)) THEN + -- Permutations + IF v_has_filter_permutation = 1 THEN + CALL partsltd_prod.p_split(a_guid, a_ids_permutation, ',', a_debug); + + INSERT INTO tmp_Split ( + substring + , as_int + ) + SELECT + substring + , CONVERT(substring, DECIMAL(10,0)) AS as_int + FROM partsltd_prod.Split_Temp + WHERE 1=1 + AND GUID = a_guid + AND NOT ISNULL(substring) + AND substring != '' + ; + + CALL partsltd_prod.p_clear_split_temp( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN + IF EXISTS ( + SELECT * + FROM tmp_Split t_S + LEFT JOIN partsltd_prod.Shop_Product_Permutation PP ON t_S.as_int = PP.id_permutation + WHERE + ISNULL(t_S.as_int) + OR ISNULL(PP.id_permutation) + OR PP.active = 0 + ) THEN INSERT INTO tmp_Msg_Error ( - guid, - id_type, + id_type, code, msg ) SELECT - v_guid, - v_id_type_error_data, - v_code_error_data, - CONCAT('Invalid supplier IDs: ', IFNULL(GROUP_CONCAT(TS.substring SEPARATOR ', '), 'NULL')) - FROM Split_Temp TS - LEFT JOIN Shop_Supplier S ON TS.substring = S.id_supplier - WHERE ISNULL(S.id_supplier) + v_id_type_error_bad_data, + v_code_type_error_bad_data, + CONCAT('Invalid or inactive permutation IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split t_S + LEFT JOIN partsltd_prod.Shop_Product_Permutation PP ON t_S.as_int = PP.id_permutation + WHERE + ISNULL(t_S.as_int) + OR ISNULL(PP.id_permutation) + OR PP.active = 0 ; ELSE - INSERT INTO tmp_Shop_Supplier ( - id_supplier, - active, - rank_supplier + INSERT INTO tmp_Permutation ( + id_permutation ) SELECT - S.id_supplier, - S.active, - RANK() OVER (ORDER BY id_supplier ASC) AS rank_supplier - FROM Shop_Supplier S - INNER JOIN Split_Temp TS ON S.id_supplier = TS.substring - WHERE - ( - a_get_inactive_supplier - OR S.active = 1 - ) + PP.id_permutation + FROM tmp_Split t_S + RIGHT JOIN partsltd_prod.Shop_Product_Permutation PP ON t_S.as_int = PP.id_permutation + WHERE ( + v_has_filter_permutation = 0 + OR NOT ISNULL(t_S.as_int) + ) ; - END IF; - - DROP TABLE Split_Temp; + END IF; + END IF; + + DELETE FROM tmp_Split; + + -- Suppliers + IF v_has_filter_supplier = 1 THEN + CALL partsltd_prod.p_split(a_guid, a_ids_supplier, ',', a_debug); - IF a_get_first_supplier_only THEN - DELETE t_S - FROM tmp_Shop_Supplier t_S - WHERE t_S.rank_supplier > ( - SELECT MIN(t_S.rank_supplier) - FROM tmp_Shop_Supplier t_S - ) - ; - END IF; - END IF; - - IF v_has_filter_category = 1 THEN - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - CALL p_split(a_guid, a_ids_category, ','); - - IF EXISTS (SELECT * FROM Split_Temp TS LEFT JOIN Shop_Product_Category C ON TS.substring = C.id_category WHERE ISNULL(C.id_category)) THEN - INSERT INTO tmp_Msg_Error ( - guid, - id_type, - code, - msg - ) - SELECT - v_guid, - v_id_type_error_data, - v_code_error_data, - CONCAT('Invalid category IDs: ', IFNULL(GROUP_CONCAT(TS.substring SEPARATOR ', ') ,'NULL')) - FROM Split_Temp TS - LEFT JOIN Shop_Product_Category C ON TS.substring = C.id_category - WHERE ISNULL(C.id_category) - ; - END IF; - - DROP TABLE Split_Temp; - END IF; + INSERT INTO tmp_Split ( + substring + , as_int + ) + SELECT + substring + , CONVERT(substring, DECIMAL(10,0)) AS as_int + FROM partsltd_prod.Split_Temp + WHERE 1=1 + AND GUID = a_guid + AND NOT ISNULL(substring) + AND substring != '' + ; + + CALL partsltd_prod.p_clear_split_temp( a_guid ); END IF; - IF v_has_filter_product = 1 THEN - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - CALL p_split(a_guid, a_ids_product, ','); - - IF EXISTS (SELECT * FROM Split_Temp TS LEFT JOIN Shop_Product ON TS.substring = P.id_product WHERE ISNULL(P.id_product)) THEN - INSERT INTO tmp_Msg_Error ( - guid, - id_type, - code, - msg + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN + IF EXISTS ( + SELECT * + FROM tmp_Split t_S + LEFT JOIN partsltd_prod.Shop_Supplier S ON t_S.as_int = S.id_supplier + WHERE + ISNULL(t_S.as_int) + OR ISNULL(S.id_supplier) + OR ( + S.active = 0 + AND v_get_inactive_supplier = 0 ) - SELECT - v_guid, - v_id_type_error_data, - v_code_error_data, - CONCAT('Invalid product IDs: ', IFNULL(GROUP_CONCAT(TS.substring SEPARATOR ', ') ,'NULL')) - FROM Split_Temp TS - LEFT JOIN Shop_Product ON TS.substring = P.id_product - WHERE ISNULL(P.id_product) - ; - END IF; - - DROP TABLE Split_Temp; - END IF; - END IF; - - IF v_has_filter_permutation = 1 THEN - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - CALL p_split(a_guid, a_ids_permutation, ','); - - IF EXISTS (SELECT * FROM Split_Temp TS LEFT JOIN Shop_Product_Permutation PP ON TS.substring = PP.id_permutation WHERE ISNULL(PP.id_permutation)) THEN - INSERT INTO tmp_Msg_Error ( - guid, - id_type, - code, - msg - ) - SELECT - v_guid, - v_id_type_error_data, - v_code_error_data, - CONCAT('Invalid permutation IDs: ', IFNULL(GROUP_CONCAT(TS.substring SEPARATOR ', ') ,'NULL')) - FROM Split_Temp TS - LEFT JOIN Shop_Product_Permutation PP ON TS.substring = PP.id_permutation - WHERE ISNULL(PP.id_permutation) - ; - END IF; - - DROP TABLE Split_Temp; - END IF; - END IF; - - IF v_has_filter_category = 1 OR v_has_filter_product = 1 OR v_has_filter_permutation = 1 THEN - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - INSERT INTO tmp_Shop_Product ( - id_category, - id_product, - id_permutation, - active_category, - active_product, - active_permutation, - display_order_category, - display_order_product, - display_order_permutation - -- rank_permutation, - /* - name, - description, - /* - price_GBP_VAT_incl, - price_GBP_VAT_excl, - price_GBP_min, - * - latency_manufacture_days, - quantity_min, - quantity_max, - quantity_step, - quantity_stock, - is_subscription, - id_unit_measurement_interval_recurrence, - count_interval_recurrence, - id_stripe_product, - product_has_variations - */ - ) - SELECT - P.id_category, - P.id_product, - -- P.has_variations AS product_has_variations, - PP.id_permutation, - C.active AS active_category, - P.active AS active_product, - PP.active AS active_permutation, - C.display_order AS display_order_category, - P.display_order AS display_order_product, - PP.display_order AS display_order_permutation - -- RANK() OVER (ORDER BY C.display_order, P.display_order, PP.display_order) AS rank_permutation, #PARTITION BY P.id_category # _in_category - /* - P.name, - PP.description, - /* - PP.price_GBP_VAT_incl, - PP.price_GBP_VAT_excl, - PP.price_GBP_min, - * - PP.latency_manufacture_days, - PP.quantity_min, - PP.quantity_max, - PP.quantity_step, - PP.quantity_stock, - PP.is_subscription, - PP.id_unit_measurement_interval_recurrence, - PP.count_interval_recurrence, - PP.id_stripe_product, - P.has_variations - */ - FROM Shop_Product P - INNER JOIN Shop_Product_Permutation PP - ON P.id_product = PP.id_product - INNER JOIN Shop_Product_Category C - ON P.id_category = C.id_category - WHERE - # permutations - ( - ( - NOT v_has_filter_permutation - OR FIND_IN_SET(PP.id_permutation, a_ids_permutation) > 0 - ) - AND ( - a_get_inactive_permutation - OR PP.active = 1 - ) - ) - # categories - AND ( - ( - NOT v_has_filter_category - OR FIND_IN_SET(P.id_category, a_ids_category) > 0 - ) - AND ( - a_get_inactive_category - OR C.active = 1 - ) - ) - # products - AND ( - ( - NOT v_has_filter_product - OR FIND_IN_SET(P.id_product, a_ids_product) > 0 - ) - AND ( - a_get_inactive_product - OR P.active = 1 - ) - ) - ; - END IF; - END IF; - - -- Get orders - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - CALL p_split(a_guid, a_ids_order, ','); - - IF v_has_filter_order AND EXISTS (SELECT * FROM Split_Temp TS LEFT JOIN Shop_Supplier_Purchase_Order SPO ON TS.substring = SPO.id_order WHERE ISNULL(SPO.id_order)) THEN + ) THEN INSERT INTO tmp_Msg_Error ( - guid, - id_type, + id_type, code, msg ) SELECT - v_guid, - v_id_type_error_data, - v_code_error_data, - CONCAT('Invalid order IDs: ', IFNULL(GROUP_CONCAT(TS.substring SEPARATOR ', '), 'NULL')) - FROM Split_Temp TS - LEFT JOIN Shop_Supplier_Purchase_Order SPO ON TS.substring = SPO.id_order - WHERE ISNULL(SPO.id_order) + v_id_type_error_bad_data, + v_code_type_error_bad_data, + CONCAT('Invalid or inactive Supplier IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split t_S + LEFT JOIN partsltd_prod.Shop_Supplier S ON t_S.as_int = S.id_supplier + WHERE + ISNULL(t_S.as_int) + OR ISNULL(S.id_supplier) + OR ( + S.active = 0 + AND v_get_inactive_supplier = 0 + ) ; - END IF; - - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - INSERT INTO tmp_Shop_Supplier_Purchase_Order ( -- _Product_Link - id_order, - -- active, - rank_order + ELSE + INSERT INTO tmp_Supplier ( + id_supplier ) SELECT - SPO.id_order, - -- SPO.active, - RANK() OVER (ORDER BY SPO.id_order ASC) AS rank_order - FROM Shop_Supplier_Purchase_Order SPO - INNER JOIN Split_Temp TS ON SPO.id_order = TS.substring - INNER JOIN Shop_Supplier_Purchase_Order_Product_Link SPOPL ON SPO.id_order = SPOPL.id_order - INNER JOIN Shop_Supplier S ON SPO.id_supplier_ordered = S.id_supplier - INNER JOIN Shop_Product_Permutation PP ON SPOPL.id_permutation = PP.id_permutation - INNER JOIN Shop_Product P ON PP.id_product = P.id_product - INNER JOIN Shop_Product_Category C ON P.id_category = C.id_category - LEFT JOIN tmp_Shop_Product t_P ON SPOPL.id_permutation = t_P.id_permutation - LEFT JOIN tmp_Shop_Supplier t_S ON SPO.id_supplier_ordered = t_S.id_supplier - WHERE - # supplier - ( - v_has_filter_supplier = 0 - OR NOT ISNULL(t_S.id_supplier) -- SPO.id_supplier_ordered IN (SELECT DISTINCT id_supplier FROM tmp_Shop_Supplier) + S.id_supplier + FROM tmp_Split t_S + RIGHT JOIN partsltd_prod.Shop_Supplier S ON t_S.as_int = S.id_supplier + WHERE ( + a_get_all_supplier = 1 + OR ( + v_has_filter_supplier = 1 + AND NOT ISNULL(t_S.as_int) + ) ) - # order AND ( - ( - v_has_filter_order = 0 - OR ( - # ID - FIND_IN_SET(SPO.id_order, a_ids_order) > 0 - # date - AND ( - ( - v_has_filter_date_from = 0 - OR SPO.created_on > a_date_from - ) - AND ( - v_has_filter_date_to = 0 - OR SPO.created_on < a_date_to - ) - ) - ) - ) - # active - /* - AND ( - a_get_inactive_order - OR SPO.active = 1 - ) - */ - ) - # permutations - AND ( - ( - v_has_filter_category = 0 - AND v_has_filter_product = 0 - AND v_has_filter_permutation = 0 - ) - OR NOT ISNULL(t_P.id_permutation) -- SPO.id_permutation IN (SELECT DISTINCT id_permutation FROM tmp_Shop_Product) + a_get_inactive_supplier = 1 + OR S.active = 1 ) ; END IF; - - DROP TABLE Split_Temp; + END IF; + + DELETE FROM tmp_Split; + + -- Supplier Purchase Orders + IF v_has_filter_order = 1 THEN + CALL partsltd_prod.p_split(a_guid, a_ids_order, ',', a_debug); - IF a_get_first_order_only THEN - DELETE t_SPO - FROM tmp_Shop_Supplier_Purchase_Order t_SPO - WHERE t_SPO.rank_order > ( - SELECT MIN(t_SPO.rank_order) - FROM tmp_Shop_Supplier_Purchase_Order t_SPO + INSERT INTO tmp_Split ( + substring + , as_int + ) + SELECT + substring + , CONVERT(substring, DECIMAL(10,0)) AS as_int + FROM partsltd_prod.Split_Temp + WHERE 1=1 + AND GUID = a_guid + AND NOT ISNULL(substring) + AND substring != '' + ; + + CALL partsltd_prod.p_clear_split_temp( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN + IF EXISTS ( + SELECT * + FROM tmp_Split t_S + LEFT JOIN partsltd_prod.Shop_Supplier_Purchase_Order SPO ON t_S.as_int = SPO.id_order + WHERE + ISNULL(t_S.as_int) + OR ISNULL(SPO.id_order) + OR ( + SPO.active = 0 + AND v_get_inactive_order = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, + code, + msg ) + SELECT + v_id_type_error_bad_data, + v_code_type_error_bad_data, + CONCAT('Invalid or inactive Supplier Purchase Order IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split t_S + LEFT JOIN partsltd_prod.Shop_Supplier_Purchase_Order SPO ON t_S.as_int = SPO.id_order + WHERE + ISNULL(t_S.as_int) + OR ISNULL(SPO.id_order) + OR ( + SPO.active = 0 + AND v_get_inactive_order = 0 + ) + ; + ELSE + INSERT INTO tmp_Supplier_Purchase_Order ( + id_order + ) + SELECT + SPO.id_order + FROM tmp_Split t_S + RIGHT JOIN partsltd_prod.Shop_Supplier_Purchase_Order SPO ON t_S.as_int = SPO.id_order + INNER JOIN tmp_Supplier t_SUPP ON SPO.id_supplier_ordered = t_SUPP.id_supplier + INNER JOIN partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link SPOPL ON SPO.id_order = SPOPL.id_order + INNER JOIN tmp_Permutation t_PP ON SPOPL.id_permutation = t_PP.id_permutation + WHERE ( + a_get_all_order = 1 + OR ( + v_has_filter_order = 1 + AND NOT ISNULL(t_S.as_int) + ) + OR ( + v_has_filter_supplier = 1 + AND NOT ISNULL(t_SUPP.id_supplier) + ) + OR ( + v_has_filter_permutation = 1 + AND NOT ISNULL(t_PP.id_permutation) + ) + ) + AND ( + a_get_inactive_order = 1 + OR SPO.active = 1 + ) + AND ( + v_has_filter_date_from = 0 + OR SPO.created_on > a_date_from + ) + AND ( + v_has_filter_date_to = 0 + OR SPO.created_on < a_date_to + ) + ; END IF; - END IF; + END IF; + + DELETE FROM tmp_Split; -- Permissions - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - # SET v_id_user := (SELECT id_user FROM Shop_User WHERE name = CURRENT_USER()); - SET v_ids_permission_supplier_purchase_order := (SELECT GROUP_CONCAT(id_permission SEPARATOR ',') FROM Shop_Permission WHERE code IN ('STORE_SUPPLIER', 'STORE_SUPPLIER_PURCHASE_ORDER')); - -- SET v_ids_permutation_permission := (SELECT GROUP_CONCAT(id_permutation SEPARATOR ',') FROM tmp_Shop_Product WHERE NOT ISNULL(id_permutation)); - SET v_ids_product_permission := (SELECT GROUP_CONCAT(P.id_product SEPARATOR ',') FROM (SELECT DISTINCT id_product FROM tmp_Shop_Product WHERE NOT ISNULL(id_product)) P); - - -- SELECT v_guid, a_id_user, false, v_id_permission_product, v_id_access_level_view, v_ids_permutation_permission; - -- select * from Shop_Calc_User_Temp; - - CALL p_shop_calc_user(v_guid, a_id_user, FALSE, v_ids_permission_supplier_purchase_order, v_id_access_level_view, v_ids_product_permission); - - -- select * from Shop_Calc_User_Temp; - - IF NOT EXISTS (SELECT can_view FROM Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = v_guid) THEN - INSERT INTO tmp_Msg_Error ( - guid, - id_type, - code, - msg - ) - SELECT - v_guid, - v_id_type_error_data, - v_code_error_data, - CONCAT('You do not have view permissions for ', GROUP_CONCAT(name SEPARATOR ', ')) - FROM Shop_Permission - WHERE id_permission = v_ids_permission_supplier_purchase_order - ; - END IF; - - - UPDATE tmp_Shop_Product t_P - INNER JOIN Shop_Calc_User_Temp UE_T - ON t_P.id_product = UE_T.id_product -- t_P.id_permutation = UE_T.id_permutation - AND UE_T.GUID = v_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 + IF a_debug = 1 THEN + SELECT + v_guid + , a_id_user + , FALSE -- get inactive users + , v_id_permission_supplier_purchase_order + , v_id_access_level_view + , '' -- ids_product + , 0 -- a_debug + ; + SELECT * from Shop_Calc_User_Temp; + END IF; + + CALL p_shop_calc_user( + v_guid + , a_id_user + , FALSE -- get inactive users + , v_id_permission_supplier_purchase_order + , v_id_access_level_view + , '' -- ids_product + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT * from Shop_Calc_User_Temp; + END IF; + + IF NOT EXISTS (SELECT can_view FROM Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = v_guid) THEN + DELETE FROM tmp_Msg_Error; + + INSERT INTO tmp_Msg_Error ( + , id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + CONCAT('You do not have view permissions for ', (SELECT name FROM Shop_Permission WHERE id_permission = v_id_permission_supplier LIMIT 1)) + ) ; - - # CALL p_shop_clear_calc_user(v_guid); - # DROP TABLE IF EXISTS Shop_Calc_User_Temp; - DELETE FROM Shop_Calc_User_Temp - WHERE GUID = v_guid - ; END IF; - - -- select * from tmp_Shop_Product; - + IF EXISTS ( SELECT * FROM tmp_Msg_Error LIMIT 1 ) THEN + DELETE FROM tmp_Supplier_Purchase_Order_Product_Link; + DELETE FROM tmp_Supplier_Purchase_Order; + END IF; + -- Returns - -- SET v_now := NOW(); - + /* # Suppliers SELECT t_S.id_supplier, @@ -641,90 +398,63 @@ BEGIN S.website, S.id_currency, t_S.active - FROM tmp_Shop_Supplier t_S + FROM tmp_Supplier t_S INNER JOIN Shop_Supplier S ON t_S.id_supplier = S.id_supplier ; - + */ + # Supplier Purchase Order - SELECT # * - t_SPO.id_order, - SPO.id_supplier_ordered, - SPO.cost_total_local, - SPO.id_currency_cost, - t_SPO.active - FROM Shop_Supplier_Purchase_Order SPO - INNER JOIN tmp_Shop_Supplier_Purchase_Order t_SPO ON SPO.id_order = t_SPO.id_order + SELECT + t_SPO.id_order + , SPO.id_supplier_ordered + , SPO.id_currency_cost + , SPO.cost_total_local_VAT_excl + , SPO.cost_total_local_VAT_incl + , SPO.active + FROM tmp_Supplier_Purchase_Order t_SPO + INNER JOIN partsltd_prod.Shop_Supplier_Purchase_Order SPO ON SPO.id_order = t_SPO.id_order ; # Supplier Purchase Order Product Link SELECT - SPOPL.id_link, - SPOPL.id_order, - SPOPL.id_permutation, - P.name as name_product, - SPOPL.cost_total_local, - SPOPL.id_currency_cost, - SPOPL.quantity_ordered, - SPOPL.id_unit_quantity, - SPOPL.quantity_received, - SPOPL.latency_delivery_days, - SPOPL.display_order - FROM Shop_Supplier_Purchase_Order_Product_Link SPOPL - -- INNER JOIN tmp_Shop_Supplier_Purchase_Order_Product_Link t_SPOPL ON SPOPL.id_link = t_SPOPL.id_link - INNER JOIN tmp_Shop_Supplier_Purchase_Order t_SPO ON SPOPL.id_order = t_SPO.id_order - INNER JOIN Shop_Product_Permutation PP ON SPOPL.id_permutation = PP.id_permutation - INNER JOIN Shop_Product P ON PP.id_product = P.id_product - INNER JOIN Shop_Product_Category C ON P.id_category = C.id_category - ORDER BY SPOPL.id_order, C.display_order, P.display_order, PP.display_order + SPOPL.id_link + , SPOPL.id_order + , SPOPL.id_permutation + , fn_shop_get_product_permutation_name(SPOPL.id_permutation) AS name_permutation + , SPOPL.id_currency_cost + , SPOPL.id_unit_quantity + , SPOPL.quantity_ordered + , SPOPL.quantity_received + , SPOPL.latency_delivery_days + , SPOPL.display_order + , SPO.cost_total_local_VAT_excl + , SPO.cost_total_local_VAT_incl + FROM tmp_Supplier_Purchase_Order_Product_Link t_SPOPL + INNER JOIN partsltd_prod.Shop_Supplier_Purchase_Order_Product_Link SPOPL ON t_SPOPL.id_link = SPOPL.id_link + INNER JOIN tmp_Supplier_Purchase_Order t_SPO ON SPOPL.id_order = t_SPO.id_order ; # Errors - SELECT - /* - t_ME.display_order, - t_ME.guid, - t_ME.id_type, - t_ME.msg, - MET.code, - MET.name, - MET.description - */ - * + SELECT * FROM tmp_Msg_Error t_ME - INNER JOIN Shop_Msg_Error_Type MET - ON t_ME.id_type = MET.id_type - WHERE guid = v_guid + INNER JOIN Shop_Msg_Error_Type MET ON t_ME.id_type = MET.id_type ; - /* - # Return arguments for test - SELECT - a_ids_category, - a_get_inactive_category, - a_ids_product, - a_get_inactive_product, - a_get_first_product_only, - a_get_all_product, - a_ids_image, - a_get_inactive_image, - a_get_first_image_only, - a_get_all_image - ; - */ - - # select 'other outputs'; - # select * from tmp_Shop_Product; - - -- Clean up - DROP TABLE IF EXISTS tmp_Shop_Supplier_Purchase_Order_Product_Link; - DROP TABLE IF EXISTS tmp_Shop_Supplier_Purchase_Order; - DROP TABLE IF EXISTS tmp_Shop_Supplier; - DROP TABLE IF EXISTS tmp_Shop_Product; - - DELETE FROM Shop_Calc_User_Temp - WHERE GUID = v_guid - ; + IF a_debug = 1 THEN + SELECT * from tmp_Supplier_Purchase_Order_Product_Link; + SELECT * from tmp_Supplier_Purchase_Order; + SELECT * from tmp_Supplier; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Supplier_Purchase_Order_Product_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Supplier_Purchase_Order; + DROP TEMPORARY TABLE IF EXISTS tmp_Supplier; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + + IF a_debug = 1 THEN + CALL p_debug_timing_reporting( v_time_start ); + END IF; END // DELIMITER ;; @@ -735,31 +465,14 @@ CALL p_shop_get_many_supplier_purchase_order ( '', # a_id_user 1, # a_get_all_supplier 0, # a_get_inactive_supplier - 0, # a_get_first_supplier_only '', # a_ids_supplier 1, # a_get_all_order -- 0, # a_get_inactive_order - 0, # a_get_first_order_only '', # a_ids_order - 0, # a_get_inactive_category - '', # a_ids_category - 0, # a_get_inactive_product - '', # a_ids_product - 0, # a_get_inactive_permutation '', # a_ids_permutation NULL, # a_date_from NULL # a_date_to + , 0 # a_debug ); -select * from shop_image; -select * from shop_product; -select * from TMP_MSG_ERROR; -DROP TABLE TMP_MSG_ERROR; - -insert into shop_product_change_set (comment) - values ('set product not subscription - test bool output to python'); - update shop_product - set is_subscription = 0, - id_change_set = (select id_change_set from shop_product_change_set order by id_change_set desc limit 1) - where id_product = 1 */ 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 a2a5b3cb..c29eee63 100644 --- a/static/MySQL/7415_p_shop_save_manufacturing_purchase_order.sql +++ b/static/MySQL/7415_p_shop_save_manufacturing_purchase_order.sql @@ -5,539 +5,594 @@ -- Clear previous proc DROP PROCEDURE IF EXISTS p_shop_save_manufacturing_purchase_order; -DROP TABLE IF EXISTS tmp_Shop_Manufacturing_Purchase_Order_Product_Link; +DROP TABLE IF EXISTS tmp_Manufacturing_Purchase_Order_Product_Link; DROP TABLE IF EXISTS tmp_Msg_Error; DELIMITER // CREATE PROCEDURE p_shop_save_manufacturing_purchase_order ( - IN a_guid VARCHAR(500), - IN a_id_user INT, - IN a_id_order INT, - -- IN a_id_supplier_ordered INT, - IN a_id_currency_cost INT, - IN a_active BIT, - IN a_comment VARCHAR(500) + IN a_comment VARCHAR(500) + , IN a_guid BINARY(36) + , IN a_id_user INT + , IN a_debug BIT ) BEGIN - DECLARE v_id_error_type_bad_data INT; - DECLARE v_code_error_type_bad_data VARCHAR(50); - DECLARE v_id_error_type_no_permission INT; - DECLARE v_code_error_type_no_permission VARCHAR(50); - DECLARE v_guid_permission BINARY(36); - -- DECLARE v_id_user VARCHAR(100); - DECLARE v_id_permission_manufacturing_purchase_order INT; - DECLARE v_id_access_level_EDIT INT; - DECLARE v_ids_product VARCHAR(4000); - DECLARE v_ids_product_no_permission VARCHAR(4000); - -- DECLARE v_id_order_new INT; + DECLARE v_code_type_error_bad_data VARCHAR(50); + DECLARE v_code_type_error_no_permission VARCHAR(50); + DECLARE v_id_access_level_edit INT; DECLARE v_id_change_set INT; - DECLARE v_is_new_manufacturing_purchase_order BIT; + DECLARE v_id_permission_manufacturing_purchase_order INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_ids_product_permission TEXT; + DECLARE v_time_start TIMESTAMP(6); + + DECLARE exit handler for SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + @sqlstate = RETURNED_SQLSTATE + , @errno = MYSQL_ERRNO + , @text = MESSAGE_TEXT + ; + + ROLLBACK; + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NULL + , code VARCHAR(50) NOT NULL + , msg VARCHAR(4000) NOT NULL + ); + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + NULL + , @errno + , @text + ; + SELECT * + FROM tmp_Msg_Error; + DROP TABLE IF EXISTS tmp_Msg_Error; + END; - SET SESSION sql_mode = sys.list_drop(@@session.sql_mode, 'ONLY_FULL_GROUP_BY'); + SET v_time_start := CURRENT_TIMESTAMP(6); + SET v_code_type_error_bad_data := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'BAD_DATA'); + 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); + SET v_code_type_error_no_permission := (SELECT code FROM partsltd_prod.Shop_Msg_Error_Type WHERE code = 'NO_PERMISSION'); + 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); + SET v_id_permission_manufacturing_purchase_order = (SELECT id_permission FROM partsltd_prod.Shop_Permission WHERE code = 'STORE_SUPPLIER_PURCHASE_ORDER' LIMIT 1); + SET v_id_access_level_edit = (SELECT id_access_level FROM partsltd_prod.Shop_Access_Level WHERE code = 'EDIT'); - SET v_code_error_type_bad_data = 'BAD_DATA'; - SET v_id_error_type_bad_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_type_bad_data LIMIT 1); - SET v_code_error_type_no_permission = 'NO_PERMISSION'; - SET v_id_error_type_no_permission := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_type_no_permission LIMIT 1); - SET v_guid_permission = UUID(); - -- SET v_id_user = CURRENT_USER(); - SET v_id_permission_manufacturing_purchase_order := (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_MANUFACTURING_PURCHASE_ORDER' LIMIT 1); - SET v_id_access_level_EDIT := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'EDIT'); - - -- Argument default values - IF a_guid IS NULL THEN - SET a_guid = UUID(); - END IF; - IF a_active IS NULL THEN - SET a_active = 0; - END IF; + CALL p_validate_guid ( a_guid ); + SET a_comment := TRIM(IFNULL(a_comment, '')); + DROP TEMPORARY TABLE IF EXISTS tmp_Manufacturing; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + -- Temporary tables - /* - CREATE TABLE tmp_Shop_Supplier_Purchase_Order ( - id_order INT NOT NULL PRIMARY KEY, - id_supplier_ordered INT NOT NULL, - CONSTRAINT FK_tmp_Shop_Supplier_Purchase_Order_id_supplier_ordered - FOREIGN KEY (id_supplier_ordered) - REFERENCES Shop_Supplier(id_supplier), - cost_total_local FLOAT NOT NULL, - id_currency_cost INT NOT NULL - ); - */ - - CREATE TABLE tmp_Shop_Manufacturing_Purchase_Order_Product_Link ( - id_link INT NOT NULL PRIMARY KEY, - id_order INT NOT NULL, - /* - CONSTRAINT FK_tmp_Supplier_Purchase_Order_Product_Link_id_order - FOREIGN KEY (id_order) - REFERENCES Shop_Manufacturing_Purchase_Order(id_order), - */ - id_permutation INT NOT NULL, - CONSTRAINT FK_tmp_Manuf_Purch_Order_Product_Link_id_permutation - FOREIGN KEY (id_permutation) - REFERENCES Shop_Product_Permutation(id_permutation), - cost_total_local FLOAT NOT NULL, - id_currency_cost INT NOT NULL, - value_produced_total_local FLOAT NOT NULL, - quantity_used FLOAT NOT NULL, - id_unit_quantity INT NOT NULL, - CONSTRAINT FK_tmp_Manuf_Purch_Order_Product_Link_id_unit_quantity - FOREIGN KEY (id_unit_quantity) - REFERENCES Shop_Unit_Measurement(id_unit_measurement), - quantity_produced FLOAT NULL, - latency_manufacture_days INT NOT NULL, - display_order INT NOT NULL, - active BIT NOT NULL, - name_error VARCHAR(200) NOT NULL + CREATE TEMPORARY TABLE tmp_Manufacturing_Purchase_Order ( + id_order INT NOT NULL PRIMARY KEY + , id_currency_cost INT NOT NULL ); - CREATE TABLE IF NOT EXISTS tmp_Msg_Error ( - display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT, - guid BINARY(36) NOT NULL, - id_type INT NOT 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 + 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_ordered FLOAT NOT NULL + , id_unit_quantity INT NOT NULL + , quantity_received FLOAT NULL + , latency_delivery_days INT NOT 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 + , has_order BIT NULL + ); + + CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error ( + display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT + , id_type INT NOT NULL + , code VARCHAR(50) NOT NULL + , msg VARCHAR(4000) NOT NULL ); - - -- Argument validation - # User ID - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF ISNULL(a_id_user) OR NOT EXISTS (SELECT * FROM Shop_User WHERE id_user = a_id_user) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, v_code_error_type_bad_data, CONCAT('Invalid User ID: ', IFNULL(a_id_user, 'NULL'))) - ; - END IF; - END IF; - - # Order ID - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF ISNULL(a_id_order) OR ((a_id_order > 0) AND NOT EXISTS (SELECT * FROM Shop_Manufacturing_Purchase_Order WHERE id_order = a_id_order)) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, v_code_error_type_bad_data, CONCAT('Invalid Manufacturing Purchase Order ID: ', IFNULL(a_id_order, 'NULL'))) - ; - END IF; - END IF; - - /* - # Supplier ID - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF ISNULL(a_id_supplier_ordered) OR NOT EXISTS (SELECT * FROM Shop_Supplier WHERE id_supplier = a_id_supplier_ordered) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, v_code_error_type_bad_data, CONCAT('Invalid supplier ID: ', IFNULL(a_id_supplier_ordered, 'NULL'))) - ; - END IF; - END IF; - */ - - # Currency ID - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF ISNULL(a_id_currency_cost) OR NOT EXISTS (SELECT * FROM Shop_Currency WHERE id_currency = a_id_currency_cost) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, v_code_error_type_bad_data, CONCAT('Invalid currency ID: ', IFNULL(a_id_currency, 'NULL'))) - ; - END IF; - END IF; - - # Comment - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF ISNULL(a_comment) OR TRIM(a_comment) = '' THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg - ) - VALUES - (a_guid, v_id_error_type_bad_data, v_code_error_type_bad_data, 'A comment must be provided.') - ; - END IF; - END IF; - + INSERT INTO tmp_Manufacturing_Purchase_Order ( + id_order + , id_currency_cost + ) + 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 + ; - -- Get data from Temp table - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - SET v_is_new_manufacturing_purchase_order := CASE WHEN a_id_order <= 0 THEN 1 ELSE 0 END; - - INSERT INTO tmp_Shop_Manufacturing_Purchase_Order_Product_Link ( - id_link, - id_order, - id_permutation, - cost_total_local, - id_currency_cost, - quantity_used, - id_unit_quantity, - quantity_produced, - value_produced_total_local, - latency_manufacture_days, - display_order, - active, - name_error + INSERT INTO tmp_Manufacturing_Purchase_Order_Product_Link ( + id_link + , id_order + , id_permutation + , id_currency_cost + , quantity_ordered + , id_unit_quantity + , quantity_received + , latency_delivery_days + , 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 + , has_order + ) + 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.quantity_ordered, MPOPL.quantity_ordered), 0) AS quantity_ordered + , IFNULL(IFNULL(SPOPL_T.id_unit_quantity, MPOPL.id_unit_quantity), 0) AS id_unit_quantity + , IFNULL(SPOPL_T.quantity_received, MPOPL.quantity_received) AS quantity_received + , IFNULL(SPOPL_T.latency_delivery_days, MPOPL.latency_delivery_days) AS latency_delivery_days + , 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_ordered, '(No Quantity)') + ) AS name_error + , IFNULL(SPOPL_T.id_link, 0) < 1 AS is_new + , IFNULL(IFNULL(SPOPL_T.cost_total_local_VAT_excl, MPOPL.cost_total_local_VAT_excl), 0) AS cost_total_local_VAT_excl + , IFNULL(IFNULL(SPOPL_T.cost_total_local_VAT_incl, MPOPL.cost_total_local_VAT_incl), 0) AS cost_total_local_VAT_incl + , IFNULL(SPOPL_T.cost_total_local_VAT_excl / SPOPL_T.quantity_ordered, MPOPL.cost_unit_local_VAT_excl) AS cost_unit_local_VAT_excl + , IFNULL(SPOPL_T.cost_total_local_VAT_incl / SPOPL_T.quantity_ordered, MPOPL.cost_unit_local_VAT_incl) AS cost_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 + ; + + INSERT INTO tmp_Manufacturing_Purchase_Order ( + id_order + , id_currency_cost + ) + 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 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 + ; + + -- Validation + -- Manufacturing Purchase Order + # id_order + IF EXISTS ( + SELECT * + 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_order > 0 + AND ISNULL(MPO.id_order) + LIMIT 1 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg ) - /* - VALUES - (a_id_supplier, a_name_company, a_name_contact, a_department_contact, a_id_address, a_phone_number, a_fax, a_email, a_website, a_id_currency, a_active) - */ - SELECT - MPOPL_T.id_link, - MPOPL_T.id_order, - MPOPL_T.id_permutation, - PP.cost_local * MPOPL_T.quantity_used AS cost_total_local, - MPOPL_T.id_currency_cost, - MPOPL_T.quantity_used, - MPOPL_T.id_unit_quantity, - MPOPL_T.quantity_produced, - (PP.cost_local + PP.profit_local_min) * MPOPL_T.quantity_produced AS value_produced_total_local, - MPOPL_T.latency_manufacture_days, - MPOPL_T.display_order, - MPOPL_T.active, - CONCAT(PP.id_permutation, ' - ', IFNULL(P.name ,'')) AS name_error - FROM Shop_Manufacturing_Purchase_Order_Product_Link_Temp MPOPL_T - INNER JOIN Shop_Product_Permutation PP ON MPOPL_T.id_permutation = PP.id_permutation - INNER JOIN Shop_Product P ON PP.id_product = P.id_product - WHERE MPOPL_T.GUID = a_guid - -- GROUP BY MPOPL_T.id_order, name_error, MPOPL_T.id_link - /* - group by - MPOPL_T.id_link, - MPOPL_T.id_order, - MPOPL_T.id_permutation, - cost_total_local, - MPOPL_T.id_currency_cost, - MPOPL_T.quantity_used, - MPOPL_T.id_unit_quantity, - MPOPL_T.quantity_produced, - value_produced_total_local, - MPOPL_T.latency_manufacture_days, - MPOPL_T.display_order, - MPOPL_T.active, - name_error - */ - -- GROUP BY id_link, P.id_product, PP.id_permutation - -- GROUP BY name_error, ID_LINK, cost_total_local, value_produced_total_local - ; - DELETE MPOPL_T - FROM Shop_Manufacturing_Purchase_Order_Product_Link_Temp MPOPL_T - WHERE MPOPL_T.GUID = a_guid - ; + SELECT + v_id_type_error_bad_data + , 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 ', ') + ) AS msg + FROM tmp_Stock_Item t_SPO + 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) + ; END IF; - - -- Invalid quantity used - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF EXISTS ( - SELECT * - FROM tmp_Shop_Manufacturing_Purchase_Order_Product_Link - WHERE - NOT ISNULL(quantity_used) - AND quantity_used < 0 - ) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg + # id_currency_cost + 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 + WHERE 1=1 + AND ( + ISNULL(C.id_currency) + OR C.active = 0 ) - SELECT - a_guid, - v_id_error_type_bad_data, - v_code_error_type_bad_data, - CONCAT('Invalid quantity used property for the following permutations: ', GROUP_CONCAT(t_MPOPL.name_error SEPARATOR ', ')) - FROM tmp_Shop_Manufacturing_Purchase_Order_Product_Link t_MPOPL - WHERE t_MPOPL.quantity_used < 0 - ; - END IF; + LIMIT 1 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT( + 'A valid 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 ', ') + ) AS msg + FROM tmp_Stock_Item t_SPO + LEFT JOIN partsltd_prod.Shop_Currency C ON t_MPO.id_currency_cost = C.id_currency + WHERE 1=1 + AND ( + ISNULL(C.id_currency) + OR C.active = 0 + ) + ; END IF; - - -- Invalid quantity produced - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF EXISTS ( - SELECT * - FROM tmp_Shop_Manufacturing_Purchase_Order_Product_Link - WHERE - NOT ISNULL(quantity_produced) - AND quantity_produced < 0 - ) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg + # 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 + WHERE 1=1 + AND ( + ISNULL(UM.id_unit_measurement) + OR UM.active = 0 ) - SELECT - a_guid, - v_id_error_type_bad_data, - v_code_error_type_bad_data, - CONCAT('Invalid quantity produced property for the following permutations: ', GROUP_CONCAT(t_MPOPL.name_error SEPARATOR ', ')) - FROM tmp_Shop_Manufacturing_Purchase_Order_Product_Link t_MPOPL - WHERE t_MPOPL.quantity_produced < 0 - ; - END IF; + LIMIT 1 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + SELECT + v_id_type_error_bad_data + , v_code_type_error_bad_data + , CONCAT( + 'A valid 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 ', ') + ) 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 + WHERE 1=1 + AND ( + ISNULL(UM.id_unit_measurement) + OR UM.active = 0 + ) + ; END IF; - - -- Duplicates - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - IF EXISTS (SELECT id_permutation, name_error, COUNT(*) FROM tmp_Shop_Manufacturing_Purchase_Order_Product_Link t_MPOPL GROUP BY id_permutation HAVING COUNT(*) > 1) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg + # Invalid quantity ordered + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link + WHERE + ISNULL(t_MPOPL.quantity_ordered) + OR t_MPOPL.quantity_ordered <= 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 quantity ordered is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(t_MPOPL.name_error SEPARATOR ', ') ) - SELECT - a_guid, - v_id_error_type_bad_data, - v_code_error_type_bad_data, - CONCAT('Duplicate records: ', GROUP_CONCAT(t_MPOPLC.name_error SEPARATOR ', ')) - FROM (SELECT id_permutation, name_error, COUNT(*) FROM tmp_Shop_Manufacturing_Purchase_Order_Product_Link t_MPOPL GROUP BY id_permutation HAVING COUNT(*) > 1) t_MPOPLC - ; - END IF; + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE + ISNULL(t_MPOPL.quantity_ordered) + OR t_MPOPL.quantity_ordered <= 0 + ; + END IF; + # Invalid quantity received + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link + WHERE t_MPOPL.quantity_received < 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 quantity received is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.quantity_received SEPARATOR ', ') + ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE t_MPOPL.quantity_received < 0 + ; + END IF; + # Invalid delivery latency + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link + WHERE t_MPOPL.latency_delivery_days < 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 delivery latency is required for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(t_MPOPL.name_error, ' - ', t_MPOPL.latency_delivery_days SEPARATOR ', ') + ) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE t_MPOPL.latency_delivery_days < 0 + ; END IF; + -- Duplicates + IF EXISTS ( + SELECT + id_permutation + , name_error + , COUNT(*) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + GROUP BY id_permutation + HAVING COUNT(*) > 1 + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT('Duplicate records: ', GROUP_CONCAT(t_SPOPLC.name_error SEPARATOR ', ')) + FROM ( + SELECT + id_permutation + , name_error + , COUNT(*) + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + GROUP BY id_permutation + HAVING COUNT(*) > 1 + ) t_SPOPLC + ; + END IF; + -- Empty Manufacturing Purchase Order + IF EXISTS ( SELECT * FROM tmp_Manufacturing_Purchase_Order t_MPO LEFT JOIN tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL ON t_MPO.id_order = t_MPOPL.id_order WHERE ISNULL(t_MPOPL.id_order) ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT( + 'There are no items in the following Manufacturing Purchase Order(s): ' + , GROUP_CONCAT(t_MPO.name_error SEPARATOR ', ') + ) AS msg + FROM tmp_Manufacturing_Purchase_Order t_MPO + LEFT JOIN tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL ON t_MPO.id_order = t_MPOPL.id_order + WHERE ISNULL(t_MPOPL.id_order) + ; + END IF; + + -- Manufacturing Purchase Order Items without Order + IF EXISTS ( + SELECT * + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + LEFT JOIN tmp_Manufacturing_Purchase_Order t_MPO ON t_MPOPL.id_order = t_MPO.id_order + WHERE ISNULL(t_MPO.id_order) + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, code, msg + ) + SELECT + v_id_error_type_bad_data, + v_code_error_type_bad_data, + CONCAT( + 'There is no order for the following Manufacturing Purchase Order Item(s): ' + , GROUP_CONCAT(t_MPOPL.name_error SEPARATOR ', ') + ) AS msg + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + LEFT JOIN tmp_Manufacturing_Purchase_Order t_MPO ON t_MPOPL.id_order = t_MPO.id_order + WHERE ISNULL(t_MPO.id_order) + ; + END IF; -- Permissions - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN - SET v_ids_product := ( - SELECT GROUP_CONCAT(G.id_product SEPARATOR ',') - FROM ( - SELECT DISTINCT PP.id_product - FROM tmp_Shop_Manufacturing_Purchase_Order_Product_Link t_MPO - INNER JOIN Shop_Product_Permutation PP ON t_MPO.id_permutation = PP.id_permutation - ) G - ); - - CALL p_shop_calc_user(v_guid_permission, a_id_user, 0, v_id_permission_manufacturing_purchase_order, v_id_access_level_edit, v_ids_product); - - /* - UPDATE tmp_Shop_Supplier t_S - INNER JOIN Shop_Calc_User_Temp TP - ON TP.GUID = v_guid_permission - SET tP.can_view = TP.can_view, - tP.can_edit = TP.can_edit, - tP.can_admin = TP.can_admin; - */ - /* - SET v_has_permission := ( - SELECT can_edit - FROM Shop_Calc_User_Temp - WHERE - GUID = v_guid_permission - AND can_edit = 0 - ); - - IF v_has_permission = 0 THEN - SET v_id_error_type_no_permission := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = 'NO_PERMISSION'); - INSERT INTO tmp_Msg_Error ( - guid, id_type, msg - ) - SELECT - a_guid, - v_id_error_type_no_permission, - CONCAT('You do not have ', name, ' permissions.') - FROM Shop_Permission - WHERE id_permission = v_id_permission_manufacturing_purchase_order - ; - END IF; - */ - SET v_ids_product_no_permission := ( - SELECT GROUP_CONCAT(PT.id_product SEPARATOR ',') - FROM Shop_Calc_User_Temp PT - WHERE - PT.can_edit = 0 - AND NOT ISNULL(PT.id_product) - ); - IF NOT ISNULL(v_ids_product_no_permission) THEN - INSERT INTO tmp_Msg_Error ( - guid, id_type, code, msg - ) - VALUES ( - a_guid, - v_id_error_type_no_permission, - v_code_error_type_no_permission, - CONCAT('You do not have permission to edit the following product IDs: ', v_ids_product_no_permission) - ) - ; - END IF; - END IF; + SET v_ids_product_permission := ( + SELECT + GROUP_CONCAT(DISTINCT PP.id_product SEPARATOR ',') + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + INNER JOIN partsltd_prod.Shop_Product_Permutation PP ON t_MPOPL.id_permutation = PP.id_permutation + ); + IF a_debug = 1 THEN + SELECT + v_guid + , a_id_user + , FALSE -- get inactive users + , v_id_permission_manufacturing_purchase_order + , v_id_access_level_edit + , v_ids_product_permission -- ids_product + , 0 -- a_debug + ; + SELECT * from partsltd_prod.Shop_Calc_User_Temp; + END IF; + + CALL p_shop_calc_user( + v_guid + , a_id_user + , FALSE -- get inactive users + , v_id_permission_manufacturing_purchase_order + , v_id_access_level_edit + , v_ids_product_permission -- ids_product + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT * from partsltd_prod.Shop_Calc_User_Temp WHERE GUID = a_guid; + END IF; + + IF NOT EXISTS (SELECT can_view FROM partsltd_prod.Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = v_guid) THEN + DELETE FROM tmp_Msg_Error; + + INSERT INTO tmp_Msg_Error ( + id_type + , code + , msg + ) + VALUES ( + 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)) + ) + ; + END IF; + + CALL partsltd_prod.p_shop_clear_calc_user( a_guid ); + IF EXISTS ( SELECT * FROM tmp_Msg_Error LIMIT 1 ) THEN + DELETE FROM tmp_Manufacturing; + END IF; + -- Transaction IF NOT EXISTS (SELECT * FROM tmp_Msg_Error) THEN START TRANSACTION; INSERT INTO Shop_Sales_And_Purchasing_Change_Set ( - comment, - updated_last_by, - updated_last_on + comment + , updated_last_by + , updated_last_on ) VALUES ( - CONCAT( - 'Save ', - CASE WHEN v_is_new_manufacturing_purchase_order = 1 THEN 'new ' ELSE '' END, - 'Manufacturing Purchase Order - ', - a_comment - ), - a_id_user, - CURRENT_TIME() + a_comment + , a_id_user + , v_time_start ); - SET v_id_change_set := (SELECT id_change_set FROM Shop_Sales_And_Purchasing_Change_Set ORDER BY id_change_set DESC LIMIT 1); - - IF (v_is_new_manufacturing_purchase_order = 1) THEN - INSERT INTO Shop_Manufacturing_Purchase_Order ( - -- id_supplier_ordered, - cost_total_local, - id_currency_cost, - value_produced_total_local, - created_by, - id_change_set, - active - ) - SELECT - -- a_id_supplier_ordered, - SUM(t_MPOPL.cost_total_local), - a_id_currency_cost, - SUM(t_MPOPL.value_produced_total_local), - a_id_user, - v_id_change_set, - a_active - FROM tmp_Shop_Manufacturing_Purchase_Order_Product_Link t_MPOPL - ; - -- SET v_id_order_new - SET a_id_order := (SELECT id_order FROM Shop_Manufacturing_Purchase_Order ORDER BY id_order DESC LIMIT 1); - - INSERT INTO Shop_Manufacturing_Purchase_Order_Product_Link ( - id_order, - id_permutation, - cost_total_local, - value_produced_total_local, - id_currency_cost, - quantity_used, - id_unit_quantity, - quantity_produced, - latency_manufacture_days, - display_order, - active, - created_by, - id_change_set - ) - SELECT - a_id_order, -- v_id_order_new, - id_permutation, - cost_total_local, - value_produced_total_local, - id_currency_cost, - quantity_used, - id_unit_quantity, - quantity_produced, - latency_manufacture_days, - display_order, - active, - a_id_user, - v_id_change_set - FROM tmp_Shop_Manufacturing_Purchase_Order_Product_Link t_MPOPL - ; - ELSE - UPDATE Shop_Manufacturing_Purchase_Order MPO - INNER JOIN tmp_Shop_Manufacturing_Purchase_Order_Product_Link t_MPOPL ON MPO.id_order = t_MPOPL.id_order - SET - -- MPO.id_supplier_ordered = a_id_supplier_ordered, - MPO.cost_total_local = SUM(t_MPOPL.cost_total_local), - MPO.value_produced_total_local = SUM(t_MPOPL.value_produced_total_local), - MPO.id_currency = a_id_currency_cost, - MPO.id_change_set = v_id_change_set, - MPO.active = a_active - WHERE MPO.id_order = a_id_order - ; - IF EXISTS (SELECT * FROM tmp_Shop_Manufacturing_Purchase_Order_Product_Link t_MPOPL INNER JOIN Shop_Manufacturing_Purchase_Order_Product_Link MPOPL ON t_MPOPL.id_link = MPOPL.id_link) THEN - UPDATE Shop_Manufacturing_Purchase_Order_Product_Link MPOPL - INNER JOIN tmp_Shop_Manufacturing_Purchase_Order_Product_Link t_MPOPL - ON MPOPL.id_link = t_MPOPL.id_link - SET - MPOPL.id_order = t_MPOPL.id_order, - MPOPL.id_permutation = t_MPOPL.id_permutation, - MPOPL.cost_total_local = t_MPOPL.cost_total_local, - MPOPL.value_produced_total_local = t_MPOPL.value_produced_total_local, - MPOPL.id_currency_cost = t_MPOPL.id_currency_cost, - MPOPL.quantity_used = t_MPOPL.quantity_used, - MPOPL.id_unit_quantity = t_MPOPL.id_unit_quantity, - MPOPL.quantity_produced = t_MPOPL.quantity_produced, - MPOPL.latency_manufacture_days = t_MPOPL.latency_manufacture_days, - MPOPL.display_order = t_MPOPL.display_order, - MPOPL.active = t_MPOPL.active, - MPOPL.id_change_set = v_id_change_set - ; - ELSE - INSERT INTO Shop_Manufacturing_Purchase_Order_Product_Link ( - id_order, - id_permutation, - cost_total_local, - value_produced_total_local, - id_currency_cost, - quantity_used, - id_unit_quantity, - quantity_produced, - latency_manufacture_days, - display_order, - active, - created_by, - id_change_set - ) - SELECT - id_order, - id_permutation, - cost_total_local, - value_produced_total_local, - id_currency_cost, - quantity_used, - id_unit_quantity, - quantity_produced, - latency_manufacture_days, - display_order, - active, - a_id_user, - v_id_change_set - FROM tmp_Shop_Manufacturing_Purchase_Order_Product_Link t_MPOPL - WHERE t_MPOPL.id_link < 0 - ; - END IF; - END IF; + SET v_id_change_set := LAST_INSERT_ID(); - IF EXISTS (SELECT * FROM tmp_Msg_Error) THEN - ROLLBACK; - ELSE - COMMIT; - END IF; - END IF; - - -- Returns - # SET v_now = NOW(); - - # Manufacturing Purchase Orders - SELECT * - FROM Shop_Manufacturing_Purchase_Order - WHERE - id_order = a_id_order - -- GUID = a_guid - ; - - # Manufacturing Purchase Order Product Links - SELECT * - FROM Shop_Manufacturing_Purchase_Order_Product_Link - WHERE - id_order = a_id_order - -- GUID = a_guid - ; + INSERT INTO partsltd_prod.Shop_Manufacturing_Purchase_Order ( + id_currency_cost + , cost_total_local_VAT_excl + , cost_total_local_VAT_incl + , 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.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 + ; + + INSERT INTO Shop_Manufacturing_Purchase_Order_Product_Link ( + id_order + , id_permutation + , id_currency_cost + , id_unit_quantity + , quantity_ordered + , quantity_received + , latency_delivery_days + , display_order + , active + , cost_total_local_VAT_excl + , cost_total_local_VAT_incl + , created_by + , 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_ordered + , t_MPOPL.quantity_received + , t_MPOPL.latency_delivery_days + , t_MPOPL.display_order + , t_MPOPL.active + , t_MPOPL.cost_total_local_VAT_excl + , t_MPOPL.cost_total_local_VAT_incl + a_id_user + v_id_change_set + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + WHERE t_MPOPL.is_new = 1 + ; + + UPDATE partsltd_prod.Shop_Manufacturing_Purchase_Order MPO + INNER JOIN tmp_Manufacturing_Purchase_Order t_MPO + ON MPO.id_order = t_MPO.id_order + 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_change_set = v_id_change_set + ; + + UPDATE partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link MPOPL + INNER JOIN tmp_Manufacturing_Purchase_Order_Product_Link t_MPOPL + ON MPOPL.id_link = t_MPOPL.id_link + AND t_MPOPL.is_new = 0 + 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_ordered = t_MPOPL.quantity_ordered, + MPOPL.quantity_received = t_MPOPL.quantity_received, + MPOPL.latency_delivery_days = t_MPOPL.latency_delivery_days, + 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.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 SPOPL_T + FROM Shop_Manufacturing_Purchase_Order_Product_Link_Temp SPOPL_T + WHERE SPOPL_T.GUID = a_guid + ; + + COMMIT; # Errors SELECT * - FROM tmp_Msg_Error + FROM tmp_Msg_Error t_ME + INNER JOIN partsltd_prod.Shop_Msg_Error_Type MET ON t_ME.id_type = MET.id_type ; - # DROP TABLE tmp_Shop_Manufacturing_Purchase_Order; - DROP TABLE tmp_Shop_Manufacturing_Purchase_Order_Product_Link; - DROP TABLE tmp_Msg_Error; + IF a_debug = 1 THEN + SELECT * from tmp_Manufacturing; + END IF; + + DROP TEMPORARY TABLE tmp_Manufacturing_Purchase_Order; + DROP TEMPORARY TABLE tmp_Manufacturing_Purchase_Order_Product_Link; + 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 ;; @@ -557,10 +612,10 @@ INSERT INTO Shop_Manufacturing_Purchase_Order_Product_Link_Temp ( id_permutation, cost_total_local, id_currency_cost, - quantity_used, + quantity_ordered, id_unit_quantity, - quantity_produced, - latency_manufacture_days, + quantity_received, + latency_delivery_days, display_order, active ) @@ -572,10 +627,10 @@ VALUES 1, # id_permutation, 100, # cost_total_local, 1, # id_currency_cost, - 1, # quantity_used, + 1, # quantity_ordered, 1, # id_unit_quantity, - 1, # quantity_produced, - 14, # latency_manufacture_days , + 1, # quantity_received, + 14, # latency_delivery_days , 1, # display_order 1 # active ) @@ -584,12 +639,10 @@ VALUES SELECT * FROM Shop_Manufacturing_Purchase_Order_Product_Link_Temp; CALL p_shop_save_manufacturing_purchase_order ( - 'NIPS', # a_guid - 'auth0|6582b95c895d09a70ba10fef', # a_id_user - -1, # a_id_order - 1, # a_id_currency_cost - 1, # a_active - 'Initial data' # a_comment + 'TEST SAVE' + , 'NIPS' # a_guid + , 1 -- 'auth0|6582b95c895d09a70ba10fef', # a_id_user + , 1 -- a_debug ); SELECT * FROM Shop_Manufacturing_Purchase_Order_Product_Link_Temp; 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 5f55c21c..3c77cb5a 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 @@ -1,625 +1,368 @@ - - --- Clear previous proc DROP PROCEDURE IF EXISTS p_shop_get_many_manufacturing_purchase_order; - DELIMITER // CREATE PROCEDURE p_shop_get_many_manufacturing_purchase_order ( IN a_id_user INT, + IN a_get_all_manufacturing BIT, + IN a_get_inactive_manufacturing BIT, + IN a_ids_manufacturing TEXT, IN a_get_all_order BIT, - -- IN a_get_inactive_order BIT, - IN a_get_first_order_only BIT, - IN a_ids_order VARCHAR(4000), - IN a_get_inactive_category BIT, - IN a_ids_category VARCHAR(4000), - IN a_get_inactive_product BIT, - IN a_ids_product VARCHAR(4000), - IN a_get_inactive_permutation BIT, - IN a_ids_permutation VARCHAR(4000), - IN a_date_from TIMESTAMP, - IN a_date_to TIMESTAMP + IN a_get_inactive_order BIT, + IN a_ids_order TEXT, + IN a_ids_permutation TEXT, + IN a_date_from DATETIME, + IN a_date_to DATETIME, + IN a_debug BIT ) BEGIN - -- Argument redeclaration - -- Variable declaration + DECLARE v_code_type_error_bad_data VARCHAR(50); + DECLARE v_code_type_error_no_permission VARCHAR(50); + DECLARE v_guid BINARY(36); DECLARE v_has_filter_order BIT; - DECLARE v_has_filter_category BIT; - DECLARE v_has_filter_product BIT; DECLARE v_has_filter_permutation BIT; DECLARE v_has_filter_date_from BIT; DECLARE v_has_filter_date_to BIT; - DECLARE v_guid BINARY(36); - # DECLARE v_id_user VARCHAR(100); - # DECLARE v_ids_permutation_unavailable VARCHAR(4000); - DECLARE v_ids_permission_manufacturing_purchase_order VARCHAR(4000); - DECLARE v_ids_product_permission VARCHAR(4000); - # DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - -- DECLARE v_now TIMESTAMP; - -- DECLARE v_id_minimum INT; - DECLARE v_code_error_data VARCHAR(50); - DECLARE v_id_type_error_data INT; + DECLARE v_ids_permission_manufacturing_purchase_order INT; + DECLARE v_id_type_error_bad_data INT; + DECLARE v_id_type_error_no_permission INT; + DECLARE v_time_start TIMESTAMP(6); + SET v_time_start := CURRENT_TIMESTAMP(6); SET v_guid := UUID(); SET v_id_access_level_view := (SELECT id_access_level FROM Shop_Access_Level WHERE code = 'VIEW' LIMIT 1); - -- SET v_ids_permission_manufacturing_purchase_order := (SELECT id_permission FROM Shop_Permission WHERE code = 'SHOP_manufacturing_PURCHASE_ORDER' LIMIT 1); - SET v_code_error_data = 'BAD_DATA'; - SET v_id_type_error_data := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_error_data); + SET v_code_type_error_bad_data := (SELECT code FROM Shop_Msg_Error_Type WHERE code = 'BAD_DATA' LIMIT 1); + 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_code_type_error_no_permission := (SELECT code FROM Shop_Msg_Error_Type WHERE code = 'NO_PERMISSION'); + SET v_id_type_error_no_permission := (SELECT id_type FROM Shop_Msg_Error_Type WHERE code = v_code_type_error_no_permission); + SET v_ids_permission_manufacturing_purchase_order := (SELECT id_permission FROM Shop_Permission WHERE code = 'STORE_SUPPLIER_PURCHASE_ORDER' LIMIT 1); + + SET a_get_all_order := IFNULL(a_get_all_order, 1); + SET a_get_inactive_order := IFNULL(a_get_inactive_order, 0); + SET a_ids_order := TRIM(IFNULL(a_ids_order, '')); + SET a_ids_permutation := TRIM(IFNULL(a_ids_permutation, '')); + SET a_date_from := IFNULL(a_date_from, NULL); + SET a_date_to := IFNULL(a_date_to, NULL); + SET a_debug := IFNULL(a_debug, 0); - -- Argument validation + default values - IF a_id_user IS NULL THEN - SET a_id_user = ''; - ELSE - SET a_id_user = TRIM(a_id_user); - END IF; - IF a_get_all_order IS NULL THEN - SET a_get_all_order = 1; - END IF; - /* - IF a_get_inactive_order IS NULL THEN - SET a_get_inactive_order = 0; - END IF; - */ - IF a_get_first_order_only IS NULL THEN - SET a_get_first_order_only = 0; - END IF; - IF a_ids_order IS NULL THEN - SET a_ids_order = ''; - ELSE - SET a_ids_order = TRIM(REPLACE(a_ids_order, '|', ',')); - END IF; - IF a_get_inactive_category IS NULL THEN - SET a_get_inactive_category = 0; - END IF; - IF a_ids_category IS NULL THEN - SET a_ids_category = ''; - ELSE - SET a_ids_category = TRIM(REPLACE(a_ids_category, '|', ',')); - END IF; - IF a_get_inactive_product IS NULL THEN - SET a_get_inactive_product = 0; - END IF; - IF a_ids_product IS NULL THEN - SET a_ids_product = ''; - ELSE - SET a_ids_product = TRIM(REPLACE(a_ids_product, '|', ',')); - END IF; - IF a_get_inactive_permutation IS NULL THEN - SET a_get_inactive_permutation = 0; - END IF; - IF a_ids_permutation IS NULL THEN - SET a_ids_permutation = ''; - ELSE - SET a_ids_permutation = TRIM(REPLACE(a_ids_permutation, '|', ',')); - END IF; + DROP TABLE IF EXISTS tmp_Manufacturing_Purchase_Order_Product_Link; + DROP TABLE IF EXISTS tmp_Manufacturing_Purchase_Order; + DROP TABLE IF EXISTS tmp_Product; - -- Temporary tables - DROP TABLE IF EXISTS tmp_Shop_Manufacturing_Purchase_Order_Product_Link; - DROP TABLE IF EXISTS tmp_Shop_Manufacturing_Purchase_Order; - DROP TABLE IF EXISTS tmp_Shop_Product; - - CREATE TABLE tmp_Shop_Manufacturing_Purchase_Order ( - id_order INT NOT NULL PRIMARY KEY, - /* - id_supplier_ordered INT NOT NULL, - CONSTRAINT FK_tmp_Shop_Manufacturing_Purchase_Order_id_supplier_ordered - FOREIGN KEY (id_supplier_ordered) - REFERENCES Shop_Supplier(id_supplier), - */ - cost_total_local FLOAT NOT NULL, - id_currency_cost INT NOT NULL, - value_produced_total_local FLOAT NOT NULL, - active BIT NOT NULL, - rank_order INT NOT NULL + CREATE TABLE tmp_Manufacturing_Purchase_Order ( + id_order INT NOT NULL PRIMARY KEY ); - /* - CREATE TABLE tmp_Shop_Manufacturing_Purchase_Order_Product_Link ( + CREATE TABLE tmp_Manufacturing_Purchase_Order_Product_Link ( id_link INT NOT NULL PRIMARY KEY, id_order INT NOT NULL, - CONSTRAINT FK_tmp_manufacturing_Purchase_Order_Product_Link_id_order - FOREIGN KEY (id_order) - REFERENCES Shop_manufacturing_Purchase_Order(id_order), - id_permutation INT NOT NULL, - CONSTRAINT FK_tmp_manufacturing_Purchase_Order_Product_Link_id_permutation - FOREIGN KEY (id_permutation) - REFERENCES Shop_Product_Permutation(id_permutation), - cost_total_local FLOAT NOT NULL, - id_currency_cost INT NOT NULL, - quantity_used FLOAT NOT NULL, - id_unit_quantity INT NOT NULL, - CONSTRAINT FK_tmp_manufacturing_Purchase_Order_Product_Link_id_unit_quantity - FOREIGN KEY (id_unit_quantity) - REFERENCES Shop_Unit_Measurement(id_unit_measurement), - quantity_produced FLOAT NULL, - latency_delivery_days INT NOT NULL, - display_order INT NOT NULL - ); - */ - - CREATE TABLE tmp_Shop_Product ( - id_category INT NOT NULL, - CONSTRAINT FK_tmp_Shop_Product_id_category - FOREIGN KEY (id_category) - REFERENCES Shop_Product_Category(id_category), - id_product INT NOT NULL, - CONSTRAINT FK_tmp_Shop_Product_id_product - FOREIGN KEY (id_product) - REFERENCES Shop_Product(id_product), - -- product_has_variations BIT NOT NULL, - id_permutation INT NULL, - CONSTRAINT FK_tmp_Shop_Product_id_permutation - FOREIGN KEY (id_permutation) - REFERENCES Shop_Product_Permutation(id_permutation), - active_category BIT NOT NULL, - active_product BIT NOT NULL, - active_permutation BIT NULL, - display_order_category INT NOT NULL, - display_order_product INT NOT NULL, - display_order_permutation INT NULL, - rank_permutation INT NOT NULL, # _in_category - # name VARCHAR(255) NOT NULL, - # description VARCHAR(4000) NOT NULL, - /* - price_GBP_full FLOAT NOT NULL, - price_GBP_min FLOAT NOT NULL, - */ - /* - latency_manufacture_days INT NOT NULL, - quantity_min FLOAT NOT NULL, - quantity_max FLOAT NOT NULL, - quantity_step FLOAT NOT NULL, - quantity_stock FLOAT NOT NULL, - is_subscription BIT NOT NULL, - id_unit_measurement_interval_recurrence INT, - CONSTRAINT FK_tmp_Shop_Product_id_unit_measurement_interval_recurrence - FOREIGN KEY (id_unit_measurement_interval_recurrence) - REFERENCES Shop_Interval_Recurrence(id_interval), - count_interval_recurrence INT, - id_stripe_product VARCHAR(100), - product_has_variations INT NOT NULL, - */ - can_view BIT, - can_edit BIT, - can_admin BIT + id_permutation INT NOT NULL ); CREATE TABLE IF NOT EXISTS tmp_Msg_Error ( display_order INT NOT NULL PRIMARY KEY AUTO_INCREMENT, - guid BINARY(36) NOT NULL, id_type INT NOT 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 ); - - -- Parse filters SET v_has_filter_order = CASE WHEN a_ids_order = '' THEN 0 ELSE 1 END; - SET v_has_filter_category = CASE WHEN a_ids_category = '' THEN 0 ELSE 1 END; - SET v_has_filter_product = CASE WHEN a_ids_product = '' THEN 0 ELSE 1 END; SET v_has_filter_permutation = CASE WHEN a_ids_permutation = '' THEN 0 ELSE 1 END; SET v_has_filter_date_from = CASE WHEN ISNULL(a_date_from) THEN 0 ELSE 1 END; SET v_has_filter_date_to = CASE WHEN ISNULL(a_date_to) THEN 0 ELSE 1 END; - -- select v_has_filter_product, v_has_filter_permutation; - - IF v_has_filter_category = 1 THEN - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - CALL p_split(a_guid, a_ids_category, ','); - - IF EXISTS (SELECT * FROM Split_Temp TS LEFT JOIN Shop_Product_Category C ON TS.substring = C.id_category WHERE ISNULL(C.id_category)) THEN - INSERT INTO tmp_Msg_Error ( - guid, - id_type, - code, - msg - ) - SELECT - v_guid, - v_id_type_error_data, - v_code_error_data, - CONCAT('Invalid category IDs: ', IFNULL(GROUP_CONCAT(TS.substring SEPARATOR ', ') ,'NULL')) - FROM Split_Temp TS - LEFT JOIN Shop_Product_Category C ON TS.substring = C.id_category - WHERE ISNULL(C.id_category) - ; - END IF; - - DROP TABLE Temp_Split; - END IF; - END IF; - - IF v_has_filter_product = 1 THEN - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - CALL p_split(a_guid, a_ids_product, ','); - - IF EXISTS (SELECT * FROM Split_Temp TS LEFT JOIN Shop_Product ON TS.substring = P.id_product WHERE ISNULL(P.id_product)) THEN - INSERT INTO tmp_Msg_Error ( - guid, - id_type, - code, - msg - ) - SELECT - v_guid, - v_id_type_error_data, - v_code_error_data, - CONCAT('Invalid product IDs: ', IFNULL(GROUP_CONCAT(TS.substring SEPARATOR ', ') ,'NULL')) - FROM Split_Temp TS - LEFT JOIN Shop_Product ON TS.substring = P.id_product - WHERE ISNULL(P.id_product) - ; - END IF; - - DROP TABLE Temp_Split; - END IF; + IF a_debug = 1 THEN + SELECT + v_has_filter_order + , v_has_filter_permutation + , v_has_filter_date_from + , v_has_filter_date_to + ; END IF; + -- Permutations IF v_has_filter_permutation = 1 THEN - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - CALL p_split(a_guid, a_ids_permutation, ','); - - IF EXISTS (SELECT * FROM Split_Temp TS LEFT JOIN Shop_Product_Permutation PP ON TS.substring = PP.id_permutation WHERE ISNULL(PP.id_permutation)) THEN - INSERT INTO tmp_Msg_Error ( - guid, - id_type, - code, - msg - ) - SELECT - v_guid, - v_id_type_error_data, - v_code_error_data, - CONCAT('Invalid permutation IDs: ', IFNULL(GROUP_CONCAT(TS.substring SEPARATOR ', ') ,'NULL')) - FROM Split_Temp TS - LEFT JOIN Shop_Product_Permutation PP ON TS.substring = PP.id_permutation - WHERE ISNULL(PP.id_permutation) - ; - END IF; - - DROP TABLE Temp_Split; - END IF; + CALL partsltd_prod.p_split(a_guid, a_ids_permutation, ',', a_debug); + + INSERT INTO tmp_Split ( + substring + , as_int + ) + SELECT + substring + , CONVERT(substring, DECIMAL(10,0)) AS as_int + FROM partsltd_prod.Split_Temp + WHERE 1=1 + AND GUID = a_guid + AND NOT ISNULL(substring) + AND substring != '' + ; + + CALL partsltd_prod.p_clear_split_temp( a_guid ); END IF; - IF v_has_filter_category = 1 OR v_has_filter_product = 1 OR v_has_filter_permutation = 1 THEN - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - INSERT INTO tmp_Shop_Product ( - id_category, - id_product, - id_permutation, - active_category, - active_product, - active_permutation, - display_order_category, - display_order_product, - display_order_permutation - -- rank_permutation, - /* - name, - description, - /* - price_GBP_VAT_incl, - price_GBP_VAT_excl, - price_GBP_min, - * - latency_manufacture_days, - quantity_min, - quantity_max, - quantity_step, - quantity_stock, - is_subscription, - id_unit_measurement_interval_recurrence, - count_interval_recurrence, - id_stripe_product, - product_has_variations - */ - ) - SELECT - P.id_category, - P.id_product, - -- P.has_variations AS product_has_variations, - PP.id_permutation, - C.active AS active_category, - P.active AS active_product, - PP.active AS active_permutation, - C.display_order AS display_order_category, - P.display_order AS display_order_product, - PP.display_order AS display_order_permutation - -- RANK() OVER (ORDER BY C.display_order, P.display_order, PP.display_order) AS rank_permutation, #PARTITION BY P.id_category # _in_category - /* - P.name, - PP.description, - /* - PP.price_GBP_VAT_incl, - PP.price_GBP_VAT_excl, - PP.price_GBP_min, - * - PP.latency_manufacture_days, - PP.quantity_min, - PP.quantity_max, - PP.quantity_step, - PP.quantity_stock, - PP.is_subscription, - PP.id_unit_measurement_interval_recurrence, - PP.count_interval_recurrence, - PP.id_stripe_product, - P.has_variations - */ - FROM Shop_Product P - INNER JOIN Shop_Product_Permutation PP - ON P.id_product = PP.id_product - INNER JOIN Shop_Product_Category C - ON P.id_category = C.id_category - WHERE - # permutations - ( - ( - NOT v_has_filter_permutation - OR FIND_IN_SET(PP.id_permutation, a_ids_permutation) > 0 - ) - AND ( - a_get_inactive_permutation - OR PP.active = 1 - ) - ) - # categories - AND ( - ( - NOT v_has_filter_category - OR FIND_IN_SET(P.id_category, a_ids_category) > 0 - ) - AND ( - a_get_inactive_category - OR C.active = 1 - ) - ) - # products - AND ( - ( - NOT v_has_filter_product - OR FIND_IN_SET(P.id_product, a_ids_product) > 0 - ) - AND ( - a_get_inactive_product - OR P.active = 1 - ) - ) - ; - END IF; - END IF; - - -- Get orders - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - CALL p_split(a_guid, a_ids_order, ','); - - IF v_has_filter_order AND EXISTS (SELECT * FROM Split_Temp TS LEFT JOIN Shop_Manufacturing_Purchase_Order MPO ON TS.substring = MPO.id_order WHERE ISNULL(MPO.id_order)) THEN + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN + IF EXISTS ( + SELECT * + FROM tmp_Split t_S + LEFT JOIN partsltd_prod.Shop_Product_Permutation PP ON t_S.as_int = PP.id_permutation + WHERE + ISNULL(t_S.as_int) + OR ISNULL(PP.id_permutation) + OR PP.active = 0 + ) THEN INSERT INTO tmp_Msg_Error ( - guid, - id_type, + id_type, code, msg ) SELECT - v_guid, - v_id_type_error_data, - v_code_error_data, - CONCAT('Invalid order IDs: ', IFNULL(GROUP_CONCAT(TS.substring SEPARATOR ', '), 'NULL')) - FROM Split_Temp TS - LEFT JOIN Shop_Manufacturing_Purchase_Order MPO ON TS.substring = MPO.id_order - WHERE ISNULL(MPO.id_order) + v_id_type_error_bad_data, + v_code_type_error_bad_data, + CONCAT('Invalid or inactive permutation IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split t_S + LEFT JOIN partsltd_prod.Shop_Product_Permutation PP ON t_S.as_int = PP.id_permutation + WHERE + ISNULL(t_S.as_int) + OR ISNULL(PP.id_permutation) + OR PP.active = 0 ; - END IF; - - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - INSERT INTO tmp_Shop_Manufacturing_Purchase_Order ( -- _Product_Link - id_order, - -- active, - rank_order + ELSE + INSERT INTO tmp_Permutation ( + id_permutation ) SELECT - MPO.id_order, - -- MPO.active, - RANK() OVER (ORDER BY MPO.id_order ASC) AS rank_order - FROM Shop_Manufacturing_Purchase_Order MPO - INNER JOIN Split_Temp TS ON MPO.id_order = TS.substring - INNER JOIN Shop_manufacturing_Purchase_Order_Product_Link MPOPL ON MPO.id_order = MPOPL.id_order - INNER JOIN Shop_Product_Permutation PP ON MPOPL.id_permutation = PP.id_permutation - INNER JOIN Shop_Product P ON PP.id_product = P.id_product - INNER JOIN Shop_Product_Category C ON P.id_category = C.id_category - LEFT JOIN tmp_Shop_Product t_P ON MPOPL.id_permutation = t_P.id_permutation - WHERE - # order - ( - ( - v_has_filter_order = 0 - OR ( - # ID - FIND_IN_SET(MPO.id_order, a_ids_order) > 0 - # date - AND ( - ( - v_has_filter_date_from = 0 - OR MPO.created_on > a_date_from - ) - AND ( - v_has_filter_date_to = 0 - OR MPO.created_on < a_date_to - ) - ) - ) - ) - # active - /* - AND ( - a_get_inactive_order - OR MPO.active = 1 - ) - */ - ) - # permutations - AND ( - ( - v_has_filter_category = 0 - AND v_has_filter_product = 0 - AND v_has_filter_permutation = 0 - ) - OR NOT ISNULL(t_P.id_permutation) -- MPO.id_permutation IN (SELECT DISTINCT id_permutation FROM tmp_Shop_Product) + PP.id_permutation + FROM tmp_Split t_S + RIGHT JOIN partsltd_prod.Shop_Product_Permutation PP ON t_S.as_int = PP.id_permutation + WHERE ( + v_has_filter_permutation = 0 + OR NOT ISNULL(t_S.as_int) ) ; END IF; - - DROP TABLE Split_Temp; + END IF; + + DELETE FROM tmp_Split; + + -- Manufacturing Purchase Orders + IF v_has_filter_order = 1 THEN + CALL partsltd_prod.p_split(a_guid, a_ids_order, ',', a_debug); - IF a_get_first_order_only THEN - DELETE t_MPO - FROM tmp_Shop_Manufacturing_Purchase_Order t_MPO - WHERE t_MPO.rank_order > ( - SELECT MIN(t_MPO.rank_order) - FROM tmp_Shop_Manufacturing_Purchase_Order t_MPO + INSERT INTO tmp_Split ( + substring + , as_int + ) + SELECT + substring + , CONVERT(substring, DECIMAL(10,0)) AS as_int + FROM partsltd_prod.Split_Temp + WHERE 1=1 + AND GUID = a_guid + AND NOT ISNULL(substring) + AND substring != '' + ; + + CALL partsltd_prod.p_clear_split_temp( a_guid ); + END IF; + + IF NOT EXISTS (SELECT * FROM tmp_Msg_Error LIMIT 1) THEN + IF EXISTS ( + SELECT * + FROM tmp_Split t_S + LEFT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order SPO ON t_S.as_int = SPO.id_order + WHERE + ISNULL(t_S.as_int) + OR ISNULL(SPO.id_order) + OR ( + SPO.active = 0 + AND v_get_inactive_order = 0 + ) + ) THEN + INSERT INTO tmp_Msg_Error ( + id_type, + code, + msg ) + SELECT + v_id_type_error_bad_data, + v_code_type_error_bad_data, + CONCAT('Invalid or inactive Manufacturing Purchase Order IDs: ', IFNULL(GROUP_CONCAT(t_S.substring SEPARATOR ', '), 'NULL')) + FROM tmp_Split t_S + LEFT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order SPO ON t_S.as_int = SPO.id_order + WHERE + ISNULL(t_S.as_int) + OR ISNULL(SPO.id_order) + OR ( + SPO.active = 0 + AND v_get_inactive_order = 0 + ) + ; + ELSE + INSERT INTO tmp_Manufacturing_Purchase_Order ( + id_order + ) + SELECT + SPO.id_order + FROM tmp_Split t_S + RIGHT JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order SPO ON t_S.as_int = SPO.id_order + INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link SPOPL ON SPO.id_order = SPOPL.id_order + INNER JOIN tmp_Permutation t_PP ON SPOPL.id_permutation = t_PP.id_permutation + WHERE ( + a_get_all_order = 1 + OR ( + v_has_filter_order = 1 + AND NOT ISNULL(t_S.as_int) + ) + OR ( + v_has_filter_permutation = 1 + AND NOT ISNULL(t_PP.id_permutation) + ) + ) + AND ( + a_get_inactive_order = 1 + OR SPO.active = 1 + ) + AND ( + v_has_filter_date_from = 0 + OR SPO.created_on > a_date_from + ) + AND ( + v_has_filter_date_to = 0 + OR SPO.created_on < a_date_to + ) + ; END IF; - END IF; + END IF; + + DELETE FROM tmp_Split; -- Permissions - IF NOT EXISTS (SELECT * FROM tmp_Msg_Error WHERE guid = v_guid LIMIT 1) THEN - # SET v_id_user := (SELECT id_user FROM Shop_User WHERE name = CURRENT_USER()); - SET v_ids_permission_manufacturing_purchase_order := (SELECT GROUP_CONCAT(id_permission SEPARATOR ',') FROM Shop_Permission WHERE code IN ('STORE_manufacturing', 'STORE_manufacturing_PURCHASE_ORDER')); - -- SET v_ids_permutation_permission := (SELECT GROUP_CONCAT(id_permutation SEPARATOR ',') FROM tmp_Shop_Product WHERE NOT ISNULL(id_permutation)); - SET v_ids_product_permission := (SELECT GROUP_CONCAT(P.id_product SEPARATOR ',') FROM (SELECT DISTINCT id_product FROM tmp_Shop_Product WHERE NOT ISNULL(id_product)) P); - - -- SELECT v_guid, a_id_user, false, v_id_permission_product, v_id_access_level_view, v_ids_permutation_permission; - -- select * from Shop_Calc_User_Temp; - - CALL p_shop_calc_user(v_guid, a_id_user, FALSE, v_ids_permission_manufacturing_purchase_order, v_id_access_level_view, v_ids_product_permission); - - -- select * from Shop_Calc_User_Temp; - - IF NOT EXISTS (SELECT can_view FROM Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = v_guid) THEN - INSERT INTO tmp_Msg_Error ( - guid, - id_type, - code, - msg - ) - SELECT - v_guid, - v_id_type_error_data, - v_code_error_data, - CONCAT('You do not have view permissions for ', GROUP_CONCAT(name SEPARATOR ', ')) - FROM Shop_Permission - WHERE id_permission = v_ids_permission_manufacturing_purchase_order - ; - END IF; - - - UPDATE tmp_Shop_Product t_P - INNER JOIN Shop_Calc_User_Temp UE_T - ON t_P.id_product = UE_T.id_product -- t_P.id_permutation = UE_T.id_permutation - AND UE_T.GUID = v_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 + IF a_debug = 1 THEN + SELECT + v_guid + , a_id_user + , FALSE -- get inactive users + , v_id_permission_manufacturing_purchase_order + , v_id_access_level_view + , '' -- ids_product + , 0 -- a_debug + ; + SELECT * from Shop_Calc_User_Temp; + END IF; + + CALL p_shop_calc_user( + v_guid + , a_id_user + , FALSE -- get inactive users + , v_id_permission_manufacturing_purchase_order + , v_id_access_level_view + , '' -- ids_product + , 0 -- a_debug + ); + + IF a_debug = 1 THEN + SELECT * from Shop_Calc_User_Temp; + END IF; + + IF NOT EXISTS (SELECT can_view FROM Shop_Calc_User_Temp UE_T WHERE UE_T.GUID = v_guid) THEN + DELETE FROM tmp_Msg_Error; + + INSERT INTO tmp_Msg_Error ( + , id_type + , code + , msg + ) + VALUES ( + v_id_type_error_no_permission + , v_code_type_error_no_permission + CONCAT('You do not have view permissions for ', (SELECT name FROM Shop_Permission WHERE id_permission = v_id_permission_manufacturing LIMIT 1)) + ) ; - - # CALL p_shop_clear_calc_user(v_guid); - # DROP TABLE IF EXISTS Shop_Calc_User_Temp; - DELETE FROM Shop_Calc_User_Temp - WHERE GUID = v_guid - ; END IF; - - -- select * from tmp_Shop_Product; - + IF EXISTS ( SELECT * FROM tmp_Msg_Error LIMIT 1 ) THEN + DELETE FROM tmp_Manufacturing_Purchase_Order_Product_Link; + DELETE FROM tmp_Manufacturing_Purchase_Order; + END IF; + -- Returns - -- SET v_now := NOW(); - - # manufacturing Purchase Order - SELECT # * - t_MPO.id_order, - MPO.cost_total_local, - MPO.id_currency_cost, - MPO.value_produced_total_local, - t_MPO.active - FROM Shop_Manufacturing_Purchase_Order MPO - INNER JOIN tmp_Shop_Manufacturing_Purchase_Order t_MPO ON MPO.id_order = t_MPO.id_order + /* + # Manufacturings + SELECT + t_S.id_manufacturing, + S.name_company, + S.name_contact, + S.department_contact, + S.id_address, + S.phone_number, + S.fax, + S.email, + S.website, + S.id_currency, + t_S.active + FROM tmp_Manufacturing t_S + INNER JOIN Shop_Manufacturing S + ON t_S.id_manufacturing = S.id_manufacturing + ; + */ + + # Manufacturing Purchase Order + SELECT + t_SPO.id_order + , SPO.id_manufacturing_ordered + , SPO.id_currency_cost + , SPO.cost_total_local_VAT_excl + , SPO.cost_total_local_VAT_incl + , SPO.active + FROM tmp_Manufacturing_Purchase_Order t_SPO + INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order SPO ON SPO.id_order = t_SPO.id_order ; - # manufacturing Purchase Order Product Link + # Manufacturing Purchase Order Product Link SELECT - MPOPL.id_link, - MPOPL.id_order, - MPOPL.id_permutation, - P.name as name_product, - MPOPL.cost_total_local, - MPOPL.id_currency_cost, - MPOPL.value_produced_total_local, - MPOPL.quantity_used, - MPOPL.id_unit_quantity, - MPOPL.quantity_produced, - MPOPL.latency_manufacture_days, - MPOPL.display_order - FROM Shop_manufacturing_Purchase_Order_Product_Link MPOPL - -- INNER JOIN tmp_Shop_Manufacturing_Purchase_Order_Product_Link t_MPOPL ON MPOPL.id_link = t_MPOPL.id_link - INNER JOIN tmp_Shop_Manufacturing_Purchase_Order t_MPO ON MPOPL.id_order = t_MPO.id_order - INNER JOIN Shop_Product_Permutation PP ON MPOPL.id_permutation = PP.id_permutation - INNER JOIN Shop_Product P ON PP.id_product = P.id_product - INNER JOIN Shop_Product_Category C ON P.id_category = C.id_category - ORDER BY MPOPL.id_order, C.display_order, P.display_order, PP.display_order + SPOPL.id_link + , SPOPL.id_order + , SPOPL.id_permutation + , fn_shop_get_product_permutation_name(SPOPL.id_permutation) AS name_permutation + , SPOPL.id_currency_cost + , SPOPL.id_unit_quantity + , SPOPL.quantity_ordered + , SPOPL.quantity_received + , SPOPL.latency_delivery_days + , SPOPL.display_order + , SPO.cost_total_local_VAT_excl + , SPO.cost_total_local_VAT_incl + , SPO.cost_unit_local_VAT_excl + , SPO.cost_unit_local_VAT_incl + FROM tmp_Manufacturing_Purchase_Order_Product_Link t_SPOPL + INNER JOIN partsltd_prod.Shop_Manufacturing_Purchase_Order_Product_Link SPOPL ON t_SPOPL.id_link = SPOPL.id_link + INNER JOIN tmp_Manufacturing_Purchase_Order t_SPO ON SPOPL.id_order = t_SPO.id_order ; # Errors - SELECT - /* - t_ME.display_order, - t_ME.guid, - t_ME.id_type, - t_ME.msg, - MET.code, - MET.name, - MET.description - */ - * + SELECT * FROM tmp_Msg_Error t_ME - INNER JOIN Shop_Msg_Error_Type MET - ON t_ME.id_type = MET.id_type - WHERE guid = v_guid + INNER JOIN Shop_Msg_Error_Type MET ON t_ME.id_type = MET.id_type ; - /* - # Return arguments for test - SELECT - a_ids_category, - a_get_inactive_category, - a_ids_product, - a_get_inactive_product, - a_get_first_product_only, - a_get_all_product, - a_ids_image, - a_get_inactive_image, - a_get_first_image_only, - a_get_all_image - ; - */ - - # select 'other outputs'; - # select * from tmp_Shop_Product; - - -- Clean up - DROP TABLE IF EXISTS tmp_Shop_Manufacturing_Purchase_Order_Product_Link; - DROP TABLE IF EXISTS tmp_Shop_Manufacturing_Purchase_Order; - DROP TABLE IF EXISTS tmp_Shop_Product; - - DELETE FROM Shop_Calc_User_Temp - WHERE GUID = v_guid - ; + IF a_debug = 1 THEN + SELECT * from tmp_Manufacturing_Purchase_Order_Product_Link; + SELECT * from tmp_Manufacturing_Purchase_Order; + SELECT * from tmp_Manufacturing; + END IF; + + DROP TEMPORARY TABLE IF EXISTS tmp_Manufacturing_Purchase_Order_Product_Link; + DROP TEMPORARY TABLE IF EXISTS tmp_Manufacturing_Purchase_Order; + DROP TEMPORARY TABLE IF EXISTS tmp_Manufacturing; + DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error; + + IF a_debug = 1 THEN + CALL p_debug_timing_reporting( v_time_start ); + END IF; END // DELIMITER ;; @@ -628,31 +371,16 @@ DELIMITER ;; CALL p_shop_get_many_manufacturing_purchase_order ( '', # a_id_user + 1, # a_get_all_manufacturing + 0, # a_get_inactive_manufacturing + '', # a_ids_manufacturing 1, # a_get_all_order -- 0, # a_get_inactive_order - 0, # a_get_first_order_only '', # a_ids_order - 0, # a_get_inactive_category - '', # a_ids_category - 0, # a_get_inactive_product - '', # a_ids_product - 0, # a_get_inactive_permutation '', # a_ids_permutation NULL, # a_date_from NULL # a_date_to + , 0 # a_debug ); -select * from shop_image; -select * from shop_product; -select * from TMP_MSG_ERROR; -DROP TABLE TMP_MSG_ERROR; - -insert into shop_product_change_set (comment) - values ('set product not subscription - test bool output to python'); - update shop_product - set is_subscription = 0, - id_change_set = (select id_change_set from shop_product_change_set order by id_change_set desc limit 1) - where id_product = 1 - - */ diff --git a/static/MySQL/7422_p_shop_get_many_customer.sql b/static/MySQL/7422_p_shop_get_many_customer.sql index 1baeedb4..a68cdcb7 100644 --- a/static/MySQL/7422_p_shop_get_many_customer.sql +++ b/static/MySQL/7422_p_shop_get_many_customer.sql @@ -39,7 +39,7 @@ BEGIN # DECLARE v_ids_product_permission VARCHAR(4000); # DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE v_id_minimum INT; SET v_code_error_type_bad_data = 'BAD_DATA'; diff --git a/static/MySQL/7425_p_shop_get_many_customer_sales_order.sql b/static/MySQL/7425_p_shop_get_many_customer_sales_order.sql index df3abf91..b74dbcc4 100644 --- a/static/MySQL/7425_p_shop_get_many_customer_sales_order.sql +++ b/static/MySQL/7425_p_shop_get_many_customer_sales_order.sql @@ -23,8 +23,8 @@ CREATE PROCEDURE p_shop_get_many_customer_sales_order ( IN a_ids_product VARCHAR(4000), IN a_get_inactive_permutation BIT, IN a_ids_permutation VARCHAR(4000), - IN a_date_from TIMESTAMP, - IN a_date_to TIMESTAMP + IN a_date_from DATETIME, + IN a_date_to DATETIME ) BEGIN -- Argument redeclaration @@ -43,7 +43,7 @@ BEGIN DECLARE v_ids_product_permission VARCHAR(4000); # DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; -- DECLARE v_id_minimum INT; DECLARE v_code_error_data VARCHAR(50); DECLARE v_id_type_error_data INT; diff --git a/static/MySQL/9000_populate.sql b/static/MySQL/9000_populate.sql index 7953450c..3a3a5a19 100644 --- a/static/MySQL/9000_populate.sql +++ b/static/MySQL/9000_populate.sql @@ -37,6 +37,7 @@ VALUES , ('NO_PERMISSION', 'No permission', 'Not authorised') , ('PRODUCT_AVAILABILITY', 'Product not available', 'Product not available') , ('MYSQL_ERROR', 'MySQL error', 'MySQL execution error.') + , ('WARNING', 'Warning', 'Non-breaking error.') ; # File Types diff --git a/static/MySQL/deprecated/000_init_tables_authentication.sql b/static/MySQL/deprecated/000_init_tables_authentication.sql index 72fe463d..6aa48bcf 100644 --- a/static/MySQL/deprecated/000_init_tables_authentication.sql +++ b/static/MySQL/deprecated/000_init_tables_authentication.sql @@ -38,7 +38,7 @@ DROP TABLE IF EXISTS Shop_User_Change_Set; CREATE TABLE Shop_User_Change_Set ( id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY, comment VARCHAR(500), - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); @@ -68,7 +68,7 @@ CREATE TABLE Shop_Access_Level ( priority INT NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Access_Level_id_change_set @@ -158,7 +158,7 @@ CREATE TABLE Shop_Permission_Group ( name VARCHAR(255), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Permission_Group_id_change_set @@ -253,7 +253,7 @@ CREATE TABLE Shop_Permission ( REFERENCES Shop_Access_Level(id_access_level), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Permission_id_change_set @@ -348,7 +348,7 @@ CREATE TABLE Shop_Role ( name VARCHAR(255), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Role_id_change_set @@ -448,7 +448,7 @@ CREATE TABLE Shop_Role_Permission_Link ( REFERENCES Shop_Access_Level(id_access_level) ON UPDATE RESTRICT, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Role_Permission_Link_id_change_set @@ -541,7 +541,7 @@ CREATE TABLE Shop_User ( name VARCHAR(255), is_super_user BIT NOT NULL DEFAULT 0, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_User_id_change_set @@ -635,7 +635,7 @@ CREATE TABLE Shop_User_Role_Link ( REFERENCES Shop_Role(id_role) ON UPDATE RESTRICT, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_User_Role_Link_id_change_set @@ -722,7 +722,7 @@ CREATE TABLE Shop_Address ( city VARCHAR(50) NOT NULL, county VARCHAR(100) NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Address_id_change_set diff --git a/static/MySQL/deprecated/000_init_tables_product.sql b/static/MySQL/deprecated/000_init_tables_product.sql index 8df93a55..214fb6ac 100644 --- a/static/MySQL/deprecated/000_init_tables_product.sql +++ b/static/MySQL/deprecated/000_init_tables_product.sql @@ -56,7 +56,7 @@ DROP TABLE IF EXISTS Shop_Product_Change_Set; CREATE TABLE Shop_Product_Change_Set ( id_change_set INT NOT NULL AUTO_INCREMENT PRIMARY KEY, comment VARCHAR(500), - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); @@ -84,9 +84,9 @@ CREATE TABLE File_Type ( code VARCHAR(50), name VARCHAR(100), extension VARCHAR(50), - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); @@ -110,9 +110,9 @@ CREATE TABLE File_Type_Audit ( name_field VARCHAR(50), value_prev VARCHAR(500), value_new VARCHAR(500), - created_on TIMESTAMP, + created_on DATETIME, created_by INT, - updated_last_on TIMESTAMP, + updated_last_on DATETIME, updated_last_by VARCHAR(100) ); @@ -181,7 +181,7 @@ SELECT * FROM File_Type_Audit; CREATE TABLE Shop_General ( id_general INT NOT NULL AUTO_INCREMENT PRIMARY KEY, quantity_max FLOAT, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_General_id_change_set @@ -254,7 +254,7 @@ CREATE TABLE Shop_Product_Category ( description VARCHAR(4000), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Category_id_change_set @@ -347,7 +347,7 @@ CREATE TABLE Shop_Interval_Recurrence ( code VARCHAR(50), name VARCHAR(255), name_plural VARCHAR(256), - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Interval_Recurrence_id_change_set @@ -448,7 +448,7 @@ CREATE TABLE Shop_Product ( id_stripe_price VARCHAR(100), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_id_change_set @@ -597,7 +597,7 @@ CREATE TABLE Shop_Variation_Type ( name_plural VARCHAR(256), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Variation_Type_id_change_set @@ -690,7 +690,7 @@ CREATE TABLE Shop_Variation ( name VARCHAR(255), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Variation_id_change_set @@ -782,7 +782,7 @@ CREATE TABLE Shop_Product_Variation_Link ( ON UPDATE RESTRICT, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Variation_Link_id_change_set @@ -872,7 +872,7 @@ CREATE TABLE Shop_Image_Type ( name_plural VARCHAR(256), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Image_Type_id_change_set @@ -969,7 +969,7 @@ CREATE TABLE Shop_Image ( url VARCHAR(255), active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Image_id_change_set @@ -1063,7 +1063,7 @@ CREATE TABLE Shop_Product_Image_Link ( REFERENCES Shop_Image(id_image) ON UPDATE RESTRICT, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Image_Link_id_change_set @@ -1154,7 +1154,7 @@ CREATE TABLE Shop_Delivery_Option_Type ( quantity_max INT NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Delivery_Option_Type_id_change_set @@ -1263,7 +1263,7 @@ CREATE TABLE Shop_Delivery_Option ( ON UPDATE RESTRICT, price_GBP FLOAT NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Delivery_Option_id_change_set @@ -1352,7 +1352,7 @@ CREATE TABLE Shop_Delivery_Region ( name VARCHAR(200) NOT NULL, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Delivery_Region_id_change_set @@ -1443,7 +1443,7 @@ CREATE TABLE Shop_Product_Delivery_Region_Link ( REFERENCES Shop_Delivery_Region(id_region) ON UPDATE RESTRICT, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Delivery_Region_Link_id_change_set diff --git a/static/MySQL/deprecated/108_tbl_Shop_Recurrence_Interval.sql b/static/MySQL/deprecated/108_tbl_Shop_Recurrence_Interval.sql index 0f0906b5..1a8341db 100644 --- a/static/MySQL/deprecated/108_tbl_Shop_Recurrence_Interval.sql +++ b/static/MySQL/deprecated/108_tbl_Shop_Recurrence_Interval.sql @@ -11,7 +11,7 @@ CREATE TABLE IF NOT EXISTS Shop_Interval_Recurrence ( name VARCHAR(255), name_plural VARCHAR(256), active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Interval_Recurrence_id_change_set diff --git a/static/MySQL/deprecated/113.1_tbl_Shop_Product_Variation_Type_Link.sql b/static/MySQL/deprecated/113.1_tbl_Shop_Product_Variation_Type_Link.sql index 2e733013..38293389 100644 --- a/static/MySQL/deprecated/113.1_tbl_Shop_Product_Variation_Type_Link.sql +++ b/static/MySQL/deprecated/113.1_tbl_Shop_Product_Variation_Type_Link.sql @@ -19,7 +19,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Variation_Type_Link ( ON UPDATE RESTRICT, active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Variation_Type_Link_id_change_set diff --git a/static/MySQL/deprecated/116_tbl_Shop_Product_Variation_Link.sql b/static/MySQL/deprecated/116_tbl_Shop_Product_Variation_Link.sql index 70ac6e39..7b5ddbc9 100644 --- a/static/MySQL/deprecated/116_tbl_Shop_Product_Variation_Link.sql +++ b/static/MySQL/deprecated/116_tbl_Shop_Product_Variation_Link.sql @@ -26,7 +26,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Variation_Link ( */ active BIT NOT NULL DEFAULT 1, display_order INT NOT NULL, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Variation_Link_id_change_set diff --git a/static/MySQL/deprecated/128_tbl_Shop_Product_Delivery_Region_Link.sql b/static/MySQL/deprecated/128_tbl_Shop_Product_Delivery_Region_Link.sql index 1cb4d874..cc9873b5 100644 --- a/static/MySQL/deprecated/128_tbl_Shop_Product_Delivery_Region_Link.sql +++ b/static/MySQL/deprecated/128_tbl_Shop_Product_Delivery_Region_Link.sql @@ -23,7 +23,7 @@ CREATE TABLE IF NOT EXISTS Shop_Product_Delivery_Region_Link ( REFERENCES Shop_Delivery_Region(id_region) ON UPDATE RESTRICT, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_Product_Delivery_Region_Link_id_change_set diff --git a/static/MySQL/deprecated/170_ish_tbl_ERP_Order.sql b/static/MySQL/deprecated/170_ish_tbl_ERP_Order.sql index 87cd5430..a3855931 100644 --- a/static/MySQL/deprecated/170_ish_tbl_ERP_Order.sql +++ b/static/MySQL/deprecated/170_ish_tbl_ERP_Order.sql @@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS ERP_Order ( code VARCHAR(50), name VARCHAR(100), extension VARCHAR(50), - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_customer INT NOT NULL, CONSTRAINT FK_ERP_Order_id_customer diff --git a/static/MySQL/deprecated/171_tbl_Shop_User_Order.sql b/static/MySQL/deprecated/171_tbl_Shop_User_Order.sql index badaa665..081384ec 100644 --- a/static/MySQL/deprecated/171_tbl_Shop_User_Order.sql +++ b/static/MySQL/deprecated/171_tbl_Shop_User_Order.sql @@ -24,7 +24,7 @@ CREATE TABLE IF NOT EXISTS Shop_User_Order ( REFERENCES Shop_Currency(id_currency) ON UPDATE RESTRICT, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set_user INT, CONSTRAINT FK_Shop_User_Order_id_change_set_user diff --git a/static/MySQL/deprecated/173_tbl_Shop_User_Order_Product_Link.sql b/static/MySQL/deprecated/173_tbl_Shop_User_Order_Product_Link.sql index cd28af28..f2b8c2ed 100644 --- a/static/MySQL/deprecated/173_tbl_Shop_User_Order_Product_Link.sql +++ b/static/MySQL/deprecated/173_tbl_Shop_User_Order_Product_Link.sql @@ -24,7 +24,7 @@ CREATE TABLE IF NOT EXISTS Shop_User_Order_Product_Link ( ON UPDATE RESTRICT, quantity FLOAT NOT NULL, active BIT NOT NULL DEFAULT 1, - created_on TIMESTAMP, + created_on DATETIME, created_by INT, id_change_set INT, CONSTRAINT FK_Shop_User_Order_Product_Link_id_change_set diff --git a/static/MySQL/deprecated/7000_p_shop_get_many_role_permission.sql b/static/MySQL/deprecated/7000_p_shop_get_many_role_permission.sql index 43d0b02f..19ae066a 100644 --- a/static/MySQL/deprecated/7000_p_shop_get_many_role_permission.sql +++ b/static/MySQL/deprecated/7000_p_shop_get_many_role_permission.sql @@ -42,7 +42,7 @@ BEGIN DECLARE v_priority_admin INT; /* DECLARE v_ids_product_permission VARCHAR(500); - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; */ -- Parse arguments + get default values diff --git a/static/MySQL/deprecated/706_p_shop_get_product.sql b/static/MySQL/deprecated/706_p_shop_get_product.sql index 7c034293..6f7c0c86 100644 --- a/static/MySQL/deprecated/706_p_shop_get_product.sql +++ b/static/MySQL/deprecated/706_p_shop_get_product.sql @@ -40,7 +40,7 @@ BEGIN DECLARE v_ids_product_permission VARCHAR(500); DECLARE v_id_access_level_view INT; DECLARE v_has_filter_image BIT; - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE v_id_minimum INT; DECLARE v_code_error_data VARCHAR(50); diff --git a/static/MySQL/deprecated/dump.sql b/static/MySQL/deprecated/dump.sql index 86b1b6de..e8d243df 100644 --- a/static/MySQL/deprecated/dump.sql +++ b/static/MySQL/deprecated/dump.sql @@ -4961,7 +4961,7 @@ BEGIN -- Argument redeclaration -- Variable declaration DECLARE v_has_filter_user BIT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; -- Argument validation + default values @@ -5137,7 +5137,7 @@ BEGIN # DECLARE v_id_user VARCHAR(100); DECLARE v_id_permission_product INT; DECLARE v_ids_permutation_permission VARCHAR(4000); - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; # DECLARE v_quantity_new INT; DECLARE v_change_set_used BIT; DECLARE v_id_change_set INT; @@ -5956,7 +5956,7 @@ BEGIN DECLARE v_ids_product_permission VARCHAR(4000); DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE v_id_minimum INT; SET v_guid := UUID(); @@ -7807,7 +7807,7 @@ BEGIN DECLARE v_priority_access_level_admin INT; DECLARE v_id_access_level INT; DECLARE v_priority_access_level INT; - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE v_ids_row_delete VARCHAR(500); DECLARE v_code_error_data VARCHAR(200); DECLARE v_id_error_data INT; diff --git a/static/MySQL/deprecated/dump2.sql b/static/MySQL/deprecated/dump2.sql index 3fb5cd83..dead8d8b 100644 --- a/static/MySQL/deprecated/dump2.sql +++ b/static/MySQL/deprecated/dump2.sql @@ -4961,7 +4961,7 @@ BEGIN -- Argument redeclaration -- Variable declaration DECLARE v_has_filter_user BIT; - -- DECLARE v_now TIMESTAMP; + -- DECLARE v_now DATETIME; -- Argument validation + default values @@ -5137,7 +5137,7 @@ BEGIN # DECLARE v_id_user VARCHAR(100); DECLARE v_id_permission_product INT; DECLARE v_ids_permutation_permission VARCHAR(4000); - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; # DECLARE v_quantity_new INT; DECLARE v_change_set_used BIT; DECLARE v_id_change_set INT; @@ -5956,7 +5956,7 @@ BEGIN DECLARE v_ids_product_permission VARCHAR(4000); DECLARE v_ids_permutation_permission VARCHAR(4000); DECLARE v_id_access_level_view INT; - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE v_id_minimum INT; SET v_guid := UUID(); @@ -7807,7 +7807,7 @@ BEGIN DECLARE v_priority_access_level_admin INT; DECLARE v_id_access_level INT; DECLARE v_priority_access_level INT; - DECLARE v_now TIMESTAMP; + DECLARE v_now DATETIME; DECLARE v_ids_row_delete VARCHAR(500); DECLARE v_code_error_data VARCHAR(200); DECLARE v_id_error_data INT; diff --git a/static/dist/js/main.bundle.js b/static/dist/js/main.bundle.js index b6ca1f58..4ccc5bf5 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;--i){var a=this.tryEntries[i],u=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),c=n.call(a,"finallyLoc");if(l&&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),F(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;F(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:L(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function m(e,t,r,n,o,i,a){try{var u=e[i](a),l=u.value}catch(e){return void r(e)}u.done?t(l):Promise.resolve(l).then(n,o)}function k(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){m(i,n,o,a,u,"next",e)}function u(e){m(i,n,o,a,u,"throw",e)}a(void 0)}))}}function P(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,i=c.length>3&&void 0!==c[3]?c[3]:null,a=e.getUrlFromHash(r,i),u={method:n,headers:{"Content-Type":"application/json","X-CSRFToken":e.getCsrfToken()}},!o||"POST"!==n&&"PUT"!==n&&"PATCH"!==n||(u.body=JSON.stringify(o)),console.log("API request:",n,a,o),t.prev=7,t.next=10,fetch(a,u);case 10:if((l=t.sent).ok){t.next=13;break}throw new Error("HTTP error! status: ".concat(l.status));case 13:return t.next=15,l.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 g.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:(v=k(b().mark((function t(){var r;return b().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(r={})[keyCallback]=l.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 v.apply(this,arguments)})},{key:"getCategories",value:(h=k(b().mark((function t(){return b().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 h.apply(this,arguments)})},{key:"getCategoriesByFilters",value:(y=k(b().mark((function t(r){return b().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 y.apply(this,arguments)})},{key:"saveCategories",value:(d=k(b().mark((function t(r,n,o){var i;return b().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(i={})[flagFormFilters]=l.convertForm2JSON(n),i[flagProductCategory]=r,i[flagComment]=o,t.next=6,e.request(hashSaveStoreProductCategory,"POST",i);case 6:return t.abrupt("return",t.sent);case 7:case"end":return t.stop()}}),t)}))),function(e,t,r){return d.apply(this,arguments)})},{key:"getProducts",value:(p=k(b().mark((function t(){return b().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 p.apply(this,arguments)})},{key:"getProductsByFilters",value:(f=k(b().mark((function t(r){return b().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 f.apply(this,arguments)})},{key:"saveProducts",value:(s=k(b().mark((function t(r,n,o){var i;return b().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(i={})[flagFormFilters]=l.convertForm2JSON(n),i[flagProduct]=r,i[flagComment]=o,t.next=6,e.request(hashSaveStoreProduct,"POST",i);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:"getProductPermutations",value:(c=k(b().mark((function t(){return b().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 c.apply(this,arguments)})},{key:"getProductPermutationsByFilters",value:(u=k(b().mark((function t(r){return b().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 u.apply(this,arguments)})},{key:"saveProductPermutations",value:(a=k(b().mark((function t(r,n,o){var i;return b().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(i={})[flagFormFilters]=l.convertForm2JSON(n),i[flagProductPermutation]=r,i[flagComment]=o,t.next=6,e.request(hashSaveStoreProductPermutation,"POST",i);case 6:return t.abrupt("return",t.sent);case 7:case"end":return t.stop()}}),t)}))),function(e,t,r){return a.apply(this,arguments)})},{key:"getStockItems",value:(i=k(b().mark((function t(){return b().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 i.apply(this,arguments)})},{key:"getStockItemsByFilters",value:(o=k(b().mark((function t(r){return b().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 o.apply(this,arguments)})},{key:"saveStockItems",value:(n=k(b().mark((function t(r,n,o){var i;return b().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(i={})[flagFormFilters]=l.convertForm2JSON(n),i[flagStockItem]=r,i[flagComment]=o,t.next=6,e.request(hashSaveStoreStockItem,"POST",i);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&&P(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r,n,o,i,a,u,c,s,f,p,d,y,h,v,g}();function w(e){return w="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},w(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[keyForm]=convertForm2JSON(r);var n=[keyNameFull,keyPhoneNumber,keyPostcode,keyAddress1,keyAddress2,keyCity,keyCounty];for(var o in console.log("ajaxData:"),console.log(e),e[keyForm][keyInfoIdentical]=getElementValueCurrent(r.querySelector("#"+keyInfoIdentical)),n)t==idOverlayInfoBilling&&e[keyForm][keyInfoIdentical]?e[keyForm][n[o]]=getElementValueCurrent((void 0).querySelector("#"+n[o])):e[keyForm][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),p.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(){p.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(Ke(e.prototype),"leave",r);return"function"==typeof n?function(e){return n.apply(r,e)}:n}(t,0,this)([])}}])}(F);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)}}])}();function ft(e){return ft="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},ft(e)}function pt(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],i=this.getFormFilters(),a=l.convertForm2JSON(i);n.areEqualDicts(o,a)||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=l.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){this.getTableMain().querySelector("tbody").querySelectorAll("tr").forEach((function(e){e.remove()}));var t=e.data[flagRows];!n.isEmpty(t)&&t.every((function(e){return e.hasOwnProperty("display_order")}))&&(t=t.sort((function(e,t){return e.display_order-t.display_order}))),t.forEach(this.loadRowTable.bind(this)),this.hookupTableMain()}},{key:"getTableMain",value:function(){return document.querySelector(idTableMain)}},{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=l.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=l.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]),bt.show(t[flagMessage]))})).catch((function(e){return console.error("Error:",e)}))}else bt.show("No records to save")}},{key:"getTableRecords",value:function(){var e,t=this,r=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=this.getTableMain(),o=[];return n.querySelectorAll("tbody tr").forEach((function(n){r&&!n.classList.contains(flagDirty)||(e=t.getJsonRow(n),o.push(e))})),o}},{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=l.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]),bt.show(t[flagMessage]))})).catch((function(e){return console.error("Error:",e)}))}else bt.show("No records to save")}},{key:"hookupButtonCancel",value:function(){p.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)})),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.");p.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.handleChangeElementCellTable(e,r)};p.initialiseEventHandler(e,flagInitialised,(function(e){e.addEventListener("change",(function(t){r(t,e)})),t.handleChangeElementCellTable(null,e)}))}},{key:"handleChangeElementCellTable",value:function(e,t){var r=l.getRowFromElement(t),n=l.getCellFromElement(t),o=l.hasDirtyChildrenContainer(r),i=t.classList.contains(flagDirty),a=l.updateAndCheckIsElementDirty(t);if(a!=i){l.handleDirtyElement(n,a);var u=l.hasDirtyChildrenContainer(r);if(u!=o){l.handleDirtyElement(r,u);var c=this.getTableRecords(!0).length>0;this.toggleShowButtonsSaveCancel(c)}}}},{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.handleChangeElementCellTable(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:"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,t){r.hookupTableCellDdls(e,t)};this.hookupEventHandler("click",e,(function(o,i){r.handleClickTableCellDdlPreview(o,i,t,e,(function(e,t){n(e,t)}))}))}},{key:"hookupTableCellDdls",value:function(e){var t=this;this.hookupEventHandler("change",e,(function(e,r){t.handleChangeTableCellDdl(e,r)}))}},{key:"handleClickTableCellDdlPreview",value:function(e,t,r,n){var o=this,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(e,t){o.hookupTableCellDdls(e,t)};if(!t.querySelector("select")){console.log("click table cell ddl preview");var a=t.cloneNode(!0);t.parentNode.replaceChild(a,t);var u=a.getAttribute(attrValueCurrent);a.innerHTML="";var c,s,f=document.createElement("select");l.setElementValuesCurrentAndPrevious(f,l.getElementAttributeValueCurrent(a)),console.log({optionObjectList:r,cellSelector:n}),r.forEach((function(e){c=st.getOptionJsonFromObjectJson(e,u),s=l.createOption(c),f.appendChild(s)})),a.appendChild(f),i(n+" select")}}},{key:"handleChangeTableCellDdl",value:function(e,t){var r=l.getRowFromElement(t),n=l.getCellFromElement(t);console.log("td: ",n);var o=l.hasDirtyChildrenContainer(r),i=t.classList.contains(flagDirty),a=l.updateAndCheckIsElementDirty(t);if(console.log("isDirtyElement: ",a),console.log("wasDirtyElement: ",i),a!=i){l.handleDirtyElement(n,a);var u=t.options[t.selectedIndex];l.setElementAttributeValueCurrent(n,u.value);var c=l.hasDirtyChildrenContainer(r);if(console.log("isNowDirtyRow: ",c),console.log("wasDirtyRow: ",o),c!=o){l.handleDirtyElement(r,c);var s=this.getTableRecords(!0),f=s.length>0;console.log("dirty records:",s),console.log("existsDirtyRecord:",f),this.toggleShowButtonsSaveCancel(f)}}}},{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,i){var a=i.querySelector("div");a&&!a.classList.contains(flagCollapsed)&&r.handleClickTableCellDdlPreview(o,i,t,e,(function(e,t){n(e,t)}))}))}},{key:"hookupProductPermutationVariationFields",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;console.log("click product permutation variations preview"),this.toggleColumnCollapsed(flagProductVariations,!1);var o=this.getElementProductVariations(t),i=document.createElement("table");i.classList.add(flagProductVariations);var a=document.createElement("thead"),u=document.createElement("tr"),l=document.createElement("th");l.textContent="Type";var c=document.createElement("th");c.textContent="Name";var s=document.createElement("button");s.classList.add(flagAdd),s.textContent="+";var f=document.createElement("th");f.appendChild(s),u.appendChild(l),u.appendChild(c),u.appendChild(f),a.appendChild(u),i.appendChild(a);var p=document.createElement("tbody");console.log("variations:",o),n.isEmpty(o)?o=[PageStoreProductPermutations.createOptionUnselectedProductVariation()]:o.forEach((function(e,t){r.addProductPermutationVariationRow(p,e)})),i.appendChild(p);var d=t.parentElement;d.innerHTML="",d.appendChild(i),console.log("tblVariations: ",i);var y=idTableMain+" td."+flagProductVariations+" button."+flagAdd;this.hookupEventHandler("click",y,this.handleClickButtonProductPermutationVariationsAdd);var h=idTableMain+" td."+flagProductVariations+" button."+flagDelete;this.hookupEventHandler("click",h,this.handleClickButtonProductPermutationVariationsDelete)}},{key:"toggleColumnCollapsed",value:function(e,t){this.toggleColumnHasClassnameFlag(e,t,flagCollapsed)}},{key:"getElementProductVariations",value:function(e){var t,r,o,i=e.getAttribute(attrValueCurrent),a=[];return n.isEmpty(i)||(i=i.split(",")).forEach((function(e){2==(t=e.split(":")).length?(console.log("parts: ",t),o=productVariationTypes[t[0].trim()],r=productVariations[t[1].trim()],a.push(kt(kt({},flagProductVariationType,o),flagProductVariation,r))):console.log("error: invalid variation: ",e)})),a}},{key:"addProductPermutationVariationRow",value:function(e,t){var r,n,o,i,a,u,c=Object.keys(productVariations),s=Object.keys(productVariationTypes);console.log("permutationVariation: ",t);var f=t[flagProductVariation],p=t[flagProductVariationType],d=document.createElement("td");d.classList.add(flagProductVariationType),l.setElementAttributesValuesCurrentAndPrevious(d,p[attrIdProductVariationType]);var y=document.createElement("select");y.classList.add(flagProductVariationType),l.setElementAttributesValuesCurrentAndPrevious(y,p[attrIdProductVariationType]),o=l.createOption(null),console.log("optionProductVariationType: ",o),y.appendChild(o),s.forEach((function(e){r=productVariationTypes[e],n=st.getOptionJsonFromObjectJson(r,p[attrIdProductVariationType]),o=l.createOption(n),console.log("optionProductVariationType: ",o),y.appendChild(o)}));var h=document.createElement("td");h.classList.add(flagProductVariation),l.setElementAttributesValuesCurrentAndPrevious(h,f[attrIdProductVariation]);var v=document.createElement("select");v.classList.add(flagProductVariation),l.setElementAttributesValuesCurrentAndPrevious(v,f[attrIdProductVariation]),u=l.createOption(null),console.log("optionProductVariation: ",u),v.appendChild(u),c.forEach((function(e){i=productVariations[e],a=st.getOptionJsonFromObjectJson(i,f[attrIdProductVariation]),u=l.createOption(a),console.log("optionProductVariation: ",u),v.appendChild(u)}));var g=document.createElement("td");g.classList.add(flagDelete);var b=document.createElement("button");b.classList.add(flagDelete),b.textContent="x";var m=document.createElement("tr");d.appendChild(y),m.appendChild(d),h.appendChild(v),m.appendChild(h),g.appendChild(b),m.appendChild(g),e.appendChild(m)}},{key:"handleClickButtonProductPermutationVariationsDelete",value:function(e,t){var r=getRowFromElement(t),n=r.closest("td."+flagProductVariations);r.remove(),this.updateProductPermutationVariations(n)}},{key:"updateProductPermutationVariations",value:function(e){var t=this.getProductPermutationVariationsText(e);e.setAttribute(attrValueCurrent,t),l.isElementDirty(e)}},{key:"getProductPermutationVariationsText",value:function(e){var t,r,n,o,i=e.querySelectorAll("tr"),a="";return i.forEach((function(e,i){t=e.querySelector("td select."+flagProductVariationType),r=e.querySelector("td select."+flagProductVariation),n=t.getAttribute(attrValueCurrent),o=r.getAttribute(attrValueCurrent),a+=n+":"+o+","})),a}},{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]=l.convertForm2JSON(e),this.setLocalStoragePage(r)}},{key:"toggleColumnHasClassnameFlag",value:function(e,t,r){var n=this.getTableMain(),o=n.querySelector("th."+e),i=o.classList.contains(r);if(t!=i){var a=n.querySelectorAll("td."+e);l.toggleElementHasClassnameFlag(o,t,r),a.forEach((function(e){l.toggleElementHasClassnameFlag(e,t,r)}))}}}],[{key:"isDirtyFilter",value:function(e){var t=l.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:"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))}}])}(F);function At(e){return At="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},At(e)}function Ft(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 Dt(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)?Dt(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 i,a=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function Dt(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);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[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.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=l.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=C.getUrlFromHash(e,r);history.pushState({data:t,params:r},"",e),C.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=C.parameteriseUrl(e,t),C.goToUrl(e)}}],[{key:"loadPageBodyFromResponse",value:function(e){console.log(e.data),l.loadPageBody(e.data)}}])}();function un(e){return un="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},un(e)}function ln(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;--i){var a=this.tryEntries[i],u=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var l=n.call(a,"catchLoc"),c=n.call(a,"finallyLoc");if(l&&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),F(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;F(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:L(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function m(e,t,r,n,o,i,a){try{var u=e[i](a),l=u.value}catch(e){return void r(e)}u.done?t(l):Promise.resolve(l).then(n,o)}function k(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){m(i,n,o,a,u,"next",e)}function u(e){m(i,n,o,a,u,"throw",e)}a(void 0)}))}}function P(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,i=c.length>3&&void 0!==c[3]?c[3]:null,a=e.getUrlFromHash(r,i),u={method:n,headers:{"Content-Type":"application/json","X-CSRFToken":e.getCsrfToken()}},!o||"POST"!==n&&"PUT"!==n&&"PATCH"!==n||(u.body=JSON.stringify(o)),console.log("API request:",n,a,o),t.prev=7,t.next=10,fetch(a,u);case 10:if((l=t.sent).ok){t.next=13;break}throw new Error("HTTP error! status: ".concat(l.status));case 13:return t.next=15,l.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 g.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:(v=k(b().mark((function t(){var r;return b().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(r={})[flagCallback]=l.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 v.apply(this,arguments)})},{key:"getCategories",value:(h=k(b().mark((function t(){return b().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 h.apply(this,arguments)})},{key:"getCategoriesByFilters",value:(y=k(b().mark((function t(r){return b().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 y.apply(this,arguments)})},{key:"saveCategories",value:(d=k(b().mark((function t(r,n,o){var i;return b().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(i={})[flagFormFilters]=l.convertForm2JSON(n),i[flagProductCategory]=r,i[flagComment]=o,t.next=6,e.request(hashSaveStoreProductCategory,"POST",i);case 6:return t.abrupt("return",t.sent);case 7:case"end":return t.stop()}}),t)}))),function(e,t,r){return d.apply(this,arguments)})},{key:"getProducts",value:(p=k(b().mark((function t(){return b().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 p.apply(this,arguments)})},{key:"getProductsByFilters",value:(f=k(b().mark((function t(r){return b().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 f.apply(this,arguments)})},{key:"saveProducts",value:(s=k(b().mark((function t(r,n,o){var i;return b().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(i={})[flagFormFilters]=l.convertForm2JSON(n),i[flagProduct]=r,i[flagComment]=o,t.next=6,e.request(hashSaveStoreProduct,"POST",i);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:"getProductPermutations",value:(c=k(b().mark((function t(){return b().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 c.apply(this,arguments)})},{key:"getProductPermutationsByFilters",value:(u=k(b().mark((function t(r){return b().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 u.apply(this,arguments)})},{key:"saveProductPermutations",value:(a=k(b().mark((function t(r,n,o){var i;return b().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(i={})[flagFormFilters]=l.convertForm2JSON(n),i[flagProductPermutation]=r,i[flagComment]=o,t.next=6,e.request(hashSaveStoreProductPermutation,"POST",i);case 6:return t.abrupt("return",t.sent);case 7:case"end":return t.stop()}}),t)}))),function(e,t,r){return a.apply(this,arguments)})},{key:"getStockItems",value:(i=k(b().mark((function t(){return b().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 i.apply(this,arguments)})},{key:"getStockItemsByFilters",value:(o=k(b().mark((function t(r){return b().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 o.apply(this,arguments)})},{key:"saveStockItems",value:(n=k(b().mark((function t(r,n,o){var i;return b().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return(i={})[flagFormFilters]=l.convertForm2JSON(n),i[flagStockItem]=r,i[flagComment]=o,t.next=6,e.request(hashSaveStoreStockItem,"POST",i);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&&P(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,r,n,o,i,a,u,c,s,f,p,d,y,h,v,g}();function w(e){return w="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},w(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),p.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(){p.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(Ke(e.prototype),"leave",r);return"function"==typeof n?function(e){return n.apply(r,e)}:n}(t,0,this)([])}}])}(F);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)}}])}();function ft(e){return ft="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},ft(e)}function pt(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],i=this.getFormFilters(),a=l.convertForm2JSON(i);n.areEqualDicts(o,a)||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=l.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){this.getTableMain().querySelector("tbody").querySelectorAll("tr").forEach((function(e){e.remove()}));var t=e.data[flagRows];!n.isEmpty(t)&&t.every((function(e){return e.hasOwnProperty("display_order")}))&&(t=t.sort((function(e,t){return e.display_order-t.display_order}))),t.forEach(this.loadRowTable.bind(this)),this.hookupTableMain()}},{key:"getTableMain",value:function(){return document.querySelector(idTableMain)}},{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=l.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=l.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]),bt.show(t[flagMessage]))})).catch((function(e){return console.error("Error:",e)}))}else bt.show("No records to save")}},{key:"getTableRecords",value:function(){var e,t=this,r=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=this.getTableMain(),o=[];return n.querySelectorAll("tbody tr").forEach((function(n){r&&!n.classList.contains(flagDirty)||(e=t.getJsonRow(n),o.push(e))})),o}},{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=l.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]),bt.show(t[flagMessage]))})).catch((function(e){return console.error("Error:",e)}))}else bt.show("No records to save")}},{key:"hookupButtonCancel",value:function(){p.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)})),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.");p.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.handleChangeElementCellTable(e,r)};p.initialiseEventHandler(e,flagInitialised,(function(e){e.addEventListener("change",(function(t){r(t,e)})),t.handleChangeElementCellTable(null,e)}))}},{key:"handleChangeElementCellTable",value:function(e,t){var r=l.getRowFromElement(t),n=l.getCellFromElement(t),o=l.hasDirtyChildrenContainer(r),i=t.classList.contains(flagDirty),a=l.updateAndCheckIsElementDirty(t);if(a!=i){l.handleDirtyElement(n,a);var u=l.hasDirtyChildrenContainer(r);if(u!=o){l.handleDirtyElement(r,u);var c=this.getTableRecords(!0).length>0;this.toggleShowButtonsSaveCancel(c)}}}},{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.handleChangeElementCellTable(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:"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,t){r.hookupTableCellDdls(e,t)};this.hookupEventHandler("click",e,(function(o,i){r.handleClickTableCellDdlPreview(o,i,t,e,(function(e,t){n(e,t)}))}))}},{key:"hookupTableCellDdls",value:function(e){var t=this;this.hookupEventHandler("change",e,(function(e,r){t.handleChangeTableCellDdl(e,r)}))}},{key:"handleClickTableCellDdlPreview",value:function(e,t,r,n){var o=this,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:function(e,t){o.hookupTableCellDdls(e,t)};if(!t.querySelector("select")){console.log("click table cell ddl preview");var a=t.cloneNode(!0);t.parentNode.replaceChild(a,t);var u=a.getAttribute(attrValueCurrent);a.innerHTML="";var c,s,f=document.createElement("select");l.setElementValuesCurrentAndPrevious(f,l.getElementAttributeValueCurrent(a)),console.log({optionObjectList:r,cellSelector:n}),r.forEach((function(e){c=st.getOptionJsonFromObjectJson(e,u),s=l.createOption(c),f.appendChild(s)})),a.appendChild(f),i(n+" select")}}},{key:"handleChangeTableCellDdl",value:function(e,t){var r=l.getRowFromElement(t),n=l.getCellFromElement(t);console.log("td: ",n);var o=l.hasDirtyChildrenContainer(r),i=t.classList.contains(flagDirty),a=l.updateAndCheckIsElementDirty(t);if(console.log("isDirtyElement: ",a),console.log("wasDirtyElement: ",i),a!=i){l.handleDirtyElement(n,a);var u=t.options[t.selectedIndex];l.setElementAttributeValueCurrent(n,u.value);var c=l.hasDirtyChildrenContainer(r);if(console.log("isNowDirtyRow: ",c),console.log("wasDirtyRow: ",o),c!=o){l.handleDirtyElement(r,c);var s=this.getTableRecords(!0),f=s.length>0;console.log("dirty records:",s),console.log("existsDirtyRecord:",f),this.toggleShowButtonsSaveCancel(f)}}}},{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,i){var a=i.querySelector("div");a&&!a.classList.contains(flagCollapsed)&&r.handleClickTableCellDdlPreview(o,i,t,e,(function(e,t){n(e,t)}))}))}},{key:"hookupProductPermutationVariationFields",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;console.log("click product permutation variations preview"),this.toggleColumnCollapsed(flagProductVariations,!1);var o=this.getElementProductVariations(t),i=document.createElement("table");i.classList.add(flagProductVariations);var a=document.createElement("thead"),u=document.createElement("tr"),l=document.createElement("th");l.textContent="Type";var c=document.createElement("th");c.textContent="Name";var s=document.createElement("button");s.classList.add(flagAdd),s.textContent="+";var f=document.createElement("th");f.appendChild(s),u.appendChild(l),u.appendChild(c),u.appendChild(f),a.appendChild(u),i.appendChild(a);var p=document.createElement("tbody");console.log("variations:",o),n.isEmpty(o)?o=[PageStoreProductPermutations.createOptionUnselectedProductVariation()]:o.forEach((function(e,t){r.addProductPermutationVariationRow(p,e)})),i.appendChild(p);var d=t.parentElement;d.innerHTML="",d.appendChild(i),console.log("tblVariations: ",i);var y=idTableMain+" td."+flagProductVariations+" button."+flagAdd;this.hookupEventHandler("click",y,this.handleClickButtonProductPermutationVariationsAdd);var h=idTableMain+" td."+flagProductVariations+" button."+flagDelete;this.hookupEventHandler("click",h,this.handleClickButtonProductPermutationVariationsDelete)}},{key:"toggleColumnCollapsed",value:function(e,t){this.toggleColumnHasClassnameFlag(e,t,flagCollapsed)}},{key:"getElementProductVariations",value:function(e){var t,r,o,i=e.getAttribute(attrValueCurrent),a=[];return n.isEmpty(i)||(i=i.split(",")).forEach((function(e){2==(t=e.split(":")).length?(console.log("parts: ",t),o=productVariationTypes[t[0].trim()],r=productVariations[t[1].trim()],a.push(kt(kt({},flagProductVariationType,o),flagProductVariation,r))):console.log("error: invalid variation: ",e)})),a}},{key:"addProductPermutationVariationRow",value:function(e,t){var r,n,o,i,a,u,c=Object.keys(productVariations),s=Object.keys(productVariationTypes);console.log("permutationVariation: ",t);var f=t[flagProductVariation],p=t[flagProductVariationType],d=document.createElement("td");d.classList.add(flagProductVariationType),l.setElementAttributesValuesCurrentAndPrevious(d,p[attrIdProductVariationType]);var y=document.createElement("select");y.classList.add(flagProductVariationType),l.setElementAttributesValuesCurrentAndPrevious(y,p[attrIdProductVariationType]),o=l.createOption(null),console.log("optionProductVariationType: ",o),y.appendChild(o),s.forEach((function(e){r=productVariationTypes[e],n=st.getOptionJsonFromObjectJson(r,p[attrIdProductVariationType]),o=l.createOption(n),console.log("optionProductVariationType: ",o),y.appendChild(o)}));var h=document.createElement("td");h.classList.add(flagProductVariation),l.setElementAttributesValuesCurrentAndPrevious(h,f[attrIdProductVariation]);var v=document.createElement("select");v.classList.add(flagProductVariation),l.setElementAttributesValuesCurrentAndPrevious(v,f[attrIdProductVariation]),u=l.createOption(null),console.log("optionProductVariation: ",u),v.appendChild(u),c.forEach((function(e){i=productVariations[e],a=st.getOptionJsonFromObjectJson(i,f[attrIdProductVariation]),u=l.createOption(a),console.log("optionProductVariation: ",u),v.appendChild(u)}));var g=document.createElement("td");g.classList.add(flagDelete);var b=document.createElement("button");b.classList.add(flagDelete),b.textContent="x";var m=document.createElement("tr");d.appendChild(y),m.appendChild(d),h.appendChild(v),m.appendChild(h),g.appendChild(b),m.appendChild(g),e.appendChild(m)}},{key:"handleClickButtonProductPermutationVariationsDelete",value:function(e,t){var r=getRowFromElement(t),n=r.closest("td."+flagProductVariations);r.remove(),this.updateProductPermutationVariations(n)}},{key:"updateProductPermutationVariations",value:function(e){var t=this.getProductPermutationVariationsText(e);e.setAttribute(attrValueCurrent,t),l.isElementDirty(e)}},{key:"getProductPermutationVariationsText",value:function(e){var t,r,n,o,i=e.querySelectorAll("tr"),a="";return i.forEach((function(e,i){t=e.querySelector("td select."+flagProductVariationType),r=e.querySelector("td select."+flagProductVariation),n=t.getAttribute(attrValueCurrent),o=r.getAttribute(attrValueCurrent),a+=n+":"+o+","})),a}},{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]=l.convertForm2JSON(e),this.setLocalStoragePage(r)}},{key:"toggleColumnHasClassnameFlag",value:function(e,t,r){var n=this.getTableMain(),o=n.querySelector("th."+e),i=o.classList.contains(r);if(t!=i){var a=n.querySelectorAll("td."+e);l.toggleElementHasClassnameFlag(o,t,r),a.forEach((function(e){l.toggleElementHasClassnameFlag(e,t,r)}))}}}],[{key:"isDirtyFilter",value:function(e){var t=l.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:"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))}}])}(F);function At(e){return At="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},At(e)}function Ft(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 Dt(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)?Dt(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 i,a=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(u)throw i}}}}function Dt(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);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[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.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=l.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=C.getUrlFromHash(e,r);history.pushState({data:t,params:r},"",e),C.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=C.parameteriseUrl(e,t),C.goToUrl(e)}}],[{key:"loadPageBodyFromResponse",value:function(e){console.log(e.data),l.loadPageBody(e.data)}}])}();function un(e){return un="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},un(e)}function ln(e,t){for(var r=0;r { if (response.Success) { - this.router.navigateToUrl(response[keyCallback], null, false); // window.app. + this.router.navigateToUrl(response[flagCallback], null, false); // window.app. } else { DOM.alertError("Error", response.Message); } diff --git a/static/js/pages/store/basket.js b/static/js/pages/store/basket.js index 502fd615..262cd6d4 100644 --- a/static/js/pages/store/basket.js +++ b/static/js/pages/store/basket.js @@ -120,16 +120,16 @@ export default class PageStoreBasket extends BasePage { elForm = elOverlay.querySelector('form'); console.log('converting billing form to json\nform ID: ' + elForm.id); - ajaxData[keyForm] = convertForm2JSON(elForm); // formData; // form.serialize(); + ajaxData[flagForm] = convertForm2JSON(elForm); // formData; // form.serialize(); let keys = [keyNameFull, keyPhoneNumber, keyPostcode, keyAddress1, keyAddress2, keyCity, keyCounty]; console.log('ajaxData:'); console.log(ajaxData); - ajaxData[keyForm][keyInfoIdentical] = getElementValueCurrent(elForm.querySelector('#' + keyInfoIdentical)); + ajaxData[flagForm][keyInfoIdentical] = getElementValueCurrent(elForm.querySelector('#' + keyInfoIdentical)); for (var k in keys) { - if (idOverlayInfo == idOverlayInfoBilling && ajaxData[keyForm][keyInfoIdentical]) { - ajaxData[keyForm][keys[k]] = getElementValueCurrent(elFormDelivery.querySelector('#' + keys[k])); + if (idOverlayInfo == idOverlayInfoBilling && ajaxData[flagForm][keyInfoIdentical]) { + ajaxData[flagForm][keys[k]] = getElementValueCurrent(elFormDelivery.querySelector('#' + keys[k])); } else { - ajaxData[keyForm][keys[k]] = getElementValueCurrent(elForm.querySelector('#' + keys[k])); + ajaxData[flagForm][keys[k]] = getElementValueCurrent(elForm.querySelector('#' + keys[k])); } } console.log('ajaxData:'); diff --git a/static/js/pages/store/mixin.js b/static/js/pages/store/mixin.js index ff44c709..ec794962 100644 --- a/static/js/pages/store/mixin.js +++ b/static/js/pages/store/mixin.js @@ -31,7 +31,7 @@ export default class StoreMixinPage { elForm = document.querySelectorAll(idFormCurrency); elSelector.addEventListener("change", function(event) { ajaxData = {}; - ajaxData[keyForm] = convertForm2JSON(elForm); + ajaxData[flagForm] = convertForm2JSON(elForm); console.log('sending data to currency selector controller: '); console.log(ajaxData); ajaxJSONData('select currency', mapHashToController(hashStoreSelectCurrency), ajaxData, function() { window.location.reload() }, false); @@ -84,7 +84,7 @@ export default class StoreMixinPage { elForm = document.querySelectorAll(idFormDeliveryRegion); elSelector.addEventListener("change", function(event) { ajaxData = {}; - ajaxData[keyForm] = convertForm2JSON(elForm); + ajaxData[flagForm] = convertForm2JSON(elForm); console.log('sending data to delivery region selector controller: '); console.log(ajaxData); ajaxJSONData('select delivery region', mapHashToController(hashStoreSelectDeliveryRegion), ajaxData, function() { window.location.reload() }, false); }); @@ -137,7 +137,7 @@ export default class StoreMixinPage { elForm = document.querySelectorAll(idFormIsIncludedVAT); elSelector.addEventListener("change", function(event) { ajaxData = {}; - ajaxData[keyForm] = convertForm2JSON(elForm); + ajaxData[flagForm] = convertForm2JSON(elForm); console.log('sending data to include VAT controller: '); console.log(ajaxData); ajaxJSONData('set include VAT', mapHashToController(hashStoreSetIsIncludedVAT), ajaxData, function() { window.location.reload() }, false); }); diff --git a/templates/layouts/layout.html b/templates/layouts/layout.html index 35e5613e..df9ef8f8 100644 --- a/templates/layouts/layout.html +++ b/templates/layouts/layout.html @@ -61,6 +61,7 @@ var flagAccessLevelRequired = "{{ model.FLAG_ACCESS_LEVEL_REQUIRED }}"; var flagActive = "{{ model.FLAG_ACTIVE }}"; var flagAdd = "{{ model.FLAG_ADD }}"; + var flagCallback = "{{ model.FLAG_CALLBACK }}"; var flagCancel = "{{ model.FLAG_CANCEL }}"; var flagCard = "{{ model.FLAG_CARD }}"; var flagCloseTemporaryElement = "{{ model.FLAG_CLOSE_TEMPORARY_ELEMENT }}"; @@ -85,6 +86,7 @@ var flagExpanded = "{{ model.FLAG_EXPANDED }}"; var flagFailure = "{{ model.FLAG_FAILURE }}"; var flagFilter = "{{ model.FLAG_FILTER }}"; + var flagForm = "{{ model.FLAG_FORM }}"; var flagFormFilters = "{{ model.FLAG_FORM_FILTERS }}"; var flagImageLogo = "{{ model.FLAG_IMAGE_LOGO }}"; var flagInitialised = "{{ model.FLAG_INITIALISED }}"; @@ -181,14 +183,7 @@ var idButtonSave = "#{{ model.ID_BUTTON_SAVE }}"; */ var idCSRFToken = "#{{ model.ID_CSRF_TOKEN }}"; - {# - var idFormCurrency = "#{{ model.ID_FORM_CURRENCY }}"; - var idFormDeliveryRegion = "#{{ model.ID_FORM_DELIVERY_REGION }}"; - #} var idFormFilters = "#{{ model.ID_FORM_FILTERS }}"; - {# - var idFormIsIncludedVAT = "#{{ model.ID_FORM_IS_INCLUDED_VAT }}"; - #} var idLabelError = "#{{ model.ID_LABEL_ERROR }}"; var idOverlayConfirm = "#{{ model.ID_OVERLAY_CONFIRM }}"; var idOverlayError = "#{{ model.ID_OVERLAY_ERROR }}"; @@ -197,12 +192,6 @@ var idTableMain = "#{{ model.ID_TABLE_MAIN }}"; var idTextareaConfirm = "#{{ model.ID_TEXTAREA_CONFIRM }}"; var isUserLoggedIn = "{{ model.output_bool(model.IS_USER_LOGGED_IN) }}"; - {# var keyBasket = "{{ model.KEY_BASKET }}"; #} - var keyCallback = "{{ model.KEY_CALLBACK }}"; - {# var keyCSRFToken = "{{ model.ID_CSRF_TOKEN }}"; #} - var keyData = "{{ model.KEY_DATA }}"; - var keyForm = "{{ model.KEY_FORM }}"; - var keyShared = "shared"; var nameCSRFToken = "{{ model.NAME_CSRF_TOKEN }}"; var _pathHost = "{{ model.get_url_host() }}"; var _rowBlank = null; @@ -216,11 +205,6 @@ -{% set user = model.get_user_session() %} -
@@ -244,11 +228,11 @@ Contact
- {% if model.is_page_store and user.can_admin_store %} + {% if model.is_page_store and model.user.can_admin_store %} - {% if user.can_admin_store %} + {% if model.user.can_admin_store %} @@ -296,18 +280,18 @@
--> {% else %} - {% if user.can_admin_store %} + {% if model.user.can_admin_store %} {% endif %} {% endif %} - {% if user.can_admin_store %} + {% if model.user.can_admin_store %} {% endif %} - {% if user.is_logged_in %} + {% if model.user.is_logged_in %}