From 1d77888bb598bae57788077b38069666b8246b73 Mon Sep 17 00:00:00 2001 From: teddy Date: Tue, 29 Oct 2024 09:38:43 +0000 Subject: [PATCH] Fix: Console outputs suppressed when not in debug mode to fix server errors caused by unnecessary outputs. --- .gitignore | 2 +- app.py | 11 +- .../unit_measurement.cpython-312.pyc | Bin 7204 -> 7295 bytes .../__pycache__/user.cpython-312.pyc | Bin 12637 -> 12837 bytes business_objects/address.py | 3 +- business_objects/region.py | 3 +- .../__pycache__/access_level.cpython-312.pyc | Bin 6639 -> 6730 bytes .../store/__pycache__/basket.cpython-312.pyc | Bin 9850 -> 10000 bytes .../store/__pycache__/image.cpython-312.pyc | Bin 6018 -> 6072 bytes .../store/__pycache__/product.cpython-312.pyc | Bin 28569 -> 28722 bytes .../product_category.cpython-312.pyc | Bin 30382 -> 30535 bytes .../product_permutation.cpython-312.pyc | Bin 40378 -> 40500 bytes .../product_variation.cpython-312.pyc | Bin 10479 -> 10570 bytes .../product_variation_tree.cpython-312.pyc | Bin 8792 -> 8935 bytes .../__pycache__/stock_item.cpython-312.pyc | Bin 18189 -> 18280 bytes business_objects/store/access_level.py | 3 +- business_objects/store/basket.py | 7 +- business_objects/store/image.py | 3 +- .../store/manufacturing_purchase_order.py | 5 +- business_objects/store/plant.py | 3 +- business_objects/store/product.py | 9 +- business_objects/store/product_category.py | 17 +-- business_objects/store/product_permutation.py | 5 +- business_objects/store/product_variation.py | 3 +- .../store/product_variation_tree.py | 9 +- business_objects/store/stock_item.py | 3 +- business_objects/store/storage_location.py | 3 +- business_objects/store/stripe.py | 4 +- business_objects/store/supplier.py | 3 +- business_objects/store/supplier_address.py | 5 +- .../store/supplier_purchase_order.py | 5 +- business_objects/unit_measurement.py | 3 +- business_objects/user.py | 13 +- config.py | 6 +- controllers/__pycache__/core.cpython-312.pyc | Bin 5946 -> 6052 bytes controllers/__pycache__/user.cpython-312.pyc | Bin 8376 -> 8900 bytes controllers/core.py | 2 +- .../store/__pycache__/product.cpython-312.pyc | Bin 6385 -> 6553 bytes .../product_category.cpython-312.pyc | Bin 6305 -> 6420 bytes .../product_permutation.cpython-312.pyc | Bin 6643 -> 6811 bytes .../__pycache__/stock_item.cpython-312.pyc | Bin 6873 -> 7040 bytes .../__pycache__/supplier.cpython-312.pyc | Bin 7044 -> 7211 bytes .../store/manufacturing_purchase_order.py | 12 +- controllers/store/pay_stripe.py | 17 +-- controllers/store/product.py | 28 ++-- controllers/store/product_category.py | 14 +- controllers/store/product_permutation.py | 12 +- controllers/store/stock_item.py | 12 +- controllers/store/supplier.py | 12 +- controllers/store/supplier_purchase_order.py | 12 +- controllers/user.py | 58 ++++---- .../datastore_base.cpython-312.pyc | Bin 11245 -> 12100 bytes .../datastore_store_base.cpython-312.pyc | Bin 13483 -> 14259 bytes .../datastore_store_basket.cpython-312.pyc | Bin 7273 -> 7678 bytes ...ore_store_product_category.cpython-312.pyc | Bin 4321 -> 4516 bytes ..._store_product_permutation.cpython-312.pyc | Bin 3089 -> 3232 bytes ...datastore_store_stock_item.cpython-312.pyc | Bin 6128 -> 6519 bytes .../datastore_user.cpython-312.pyc | Bin 6958 -> 7544 bytes datastores/datastore_base.py | 79 +++++------ datastores/datastore_store_base.py | 57 ++++---- datastores/datastore_store_basket.py | 31 +++-- ...tore_store_manufacturing_purchase_order.py | 29 ++-- datastores/datastore_store_product.py | 19 +-- .../datastore_store_product_category.py | 19 +-- .../datastore_store_product_permutation.py | 15 +- datastores/datastore_store_stock_item.py | 25 ++-- datastores/datastore_store_stripe.py | 29 ++-- datastores/datastore_store_supplier.py | 33 ++--- ...datastore_store_supplier_purchase_order.py | 29 ++-- datastores/datastore_user.py | 57 ++++---- .../__pycache__/helper_app.cpython-312.pyc | Bin 1195 -> 1564 bytes helpers/helper_app.py | 13 +- .../argument_validation.cpython-312.pyc | Bin 34919 -> 36735 bytes lib/argument_validation.py | 131 ++++++++---------- .../model_view_admin.cpython-312.pyc | Bin 1186 -> 1277 bytes .../model_view_base.cpython-312.pyc | Bin 20187 -> 20352 bytes .../model_view_store.cpython-312.pyc | Bin 26057 -> 26617 bytes .../model_view_store_product.cpython-312.pyc | Bin 5499 -> 5694 bytes ...iew_store_product_category.cpython-312.pyc | Bin 3059 -> 3150 bytes ..._store_product_permutation.cpython-312.pyc | Bin 5642 -> 5811 bytes ...odel_view_store_stock_item.cpython-312.pyc | Bin 5973 -> 6142 bytes .../model_view_store_supplier.cpython-312.pyc | Bin 3838 -> 3929 bytes models/model_view_admin.py | 3 +- models/model_view_base.py | 27 ++-- models/model_view_store.py | 51 +++---- ...view_store_manufacturing_purchase_order.py | 3 +- models/model_view_store_product.py | 19 +-- models/model_view_store_product_category.py | 3 +- .../model_view_store_product_permutation.py | 9 +- models/model_view_store_stock_item.py | 11 +- models/model_view_store_supplier.py | 3 +- ...odel_view_store_supplier_purchase_order.py | 3 +- static/MySQL/0000_combine.sql | 1 + static/MySQL/0001_destroy.sql | 1 + static/MySQL/7204_p_shop_get_many_product.sql | 2 +- static/dist/js/core_admin_home.bundle.js | 2 +- static/dist/js/core_contact.bundle.js | 2 +- static/dist/js/core_home.bundle.js | 2 +- static/dist/js/core_services.bundle.js | 2 +- .../legal_accessibility_statement.bundle.js | 2 +- static/dist/js/legal_license.bundle.js | 2 +- static/dist/js/legal_privacy_policy.bundle.js | 2 +- .../js/legal_retention_schedule.bundle.js | 2 +- 103 files changed, 527 insertions(+), 498 deletions(-) diff --git a/.gitignore b/.gitignore index 3242ec7e..861528f2 100644 --- a/.gitignore +++ b/.gitignore @@ -55,7 +55,7 @@ secrets.yaml TODO.md # Ignore all files in a directory -temp_files/ +tmp/ # Ignore all .txt files in the doc/ directory doc/*.txt diff --git a/app.py b/app.py index b2c2cbb2..f284f80e 100644 --- a/app.py +++ b/app.py @@ -18,7 +18,6 @@ Initializes the Flask application, sets the configuration based on the environme # internal from config import app_config, Config # from routes import bp_home -from extensions import db, csrf, cors, mail, oauth """ from forms import Form_Contact, Form_Supplier, Form_Filters_Permutation, Filters_Stock_Item from models.model_view_base import Model_View_Base @@ -48,6 +47,8 @@ from controllers.store.stock_item import routes_store_stock_item from controllers.store.supplier import routes_store_supplier from controllers.store.supplier_purchase_order import routes_store_supplier_purchase_order from controllers.user import routes_user +from extensions import db, csrf, cors, mail, oauth +from helpers.helper_app import Helper_App # external from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session # from flask_appconfig import AppConfig @@ -74,10 +75,10 @@ app.config.from_object(app_config) # for db init with required keys # logging handler = RotatingFileHandler('app.log', maxBytes=10000, backupCount=3) -handler.setLevel(logging.ERROR) +handler.setLevel(logging.DEBUG) app.logger.addHandler(handler) -@app.errorhandler(500) +@app.errorhandler(Exception) def internal_server_error(error): app.logger.error('Server Error: %s', (error)) app.logger.error('Request: %s %s %s %s %s', @@ -88,7 +89,7 @@ def internal_server_error(error): request.headers) app.logger.error('Request data: %s', request.get_data()) app.logger.error('Traceback: %s', traceback.format_exc()) - return "500 Internal Server Error", 500 + return "Internal Server Error", 500 """ @@ -140,5 +141,5 @@ app.register_blueprint(routes_user) @app.template_filter('console_log') def console_log(value): - print(value) + Helper_App.console_log(value) return value \ No newline at end of file diff --git a/business_objects/__pycache__/unit_measurement.cpython-312.pyc b/business_objects/__pycache__/unit_measurement.cpython-312.pyc index 1ac57a3745e1c39c6beb3837b00e950153cd200c..67f8f6dfabe978e92e4b4cfc42e106ca26f5195f 100644 GIT binary patch delta 1319 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 j1GsM?g#0eriS=Q5P$10Mw z`qx@!ZMaYn20dvPmpei3nzfi;XU&%|SmzM9)D2PzwWq#suJN9*D)Q97zn1Tld$vFT z))u9`TAFsNY9^P_RW)AzM{Ko<4v{Dlqbe4Z{%7iqs>vc_JJF9cAVEyhkR;+!2U2(g7BCO|+?x_se zL}xv_;|}_8fBrl!QlubpvQ3h|1HIzUDL8u*j80ipcjc4txYAov&?hY{x&|V7VUbG? zx*oa(#@R=KfG;H!2<%f=)v&S=dHsYJ<}`s=j_5?7e>9BX@mYbR9t4kBHCzwG0z`jZ zWX4PJ$VSZ=&E#~tsKqWc(T$k5ePA);)CUU{t6@8=<#Y5Y)LI45tbj-)LWA%&9K$p} zs^W^G%qyWf-+*gZv-6%7uT=7tY^80}1Jixq$k7}27`y6u;Fn5bNiPkb%ipjsx#{tr zb5WjY%QRtLcQ>SZN&9JQ3NurwO~{fpWvgThz2HxZCB4n9AgQTH7O9J?-k`Hu7b$k# z+ix-R;>NrjC)7hKi3+6bN1o*+@o1_p`qpfH26i;;81qbSIB!_B!a<%YLr#w-Gg);U z1jCthiig(_C|D8b8h~P>>u_vFkxBkWsPPVeLf#8swVwf#!VglEO?d(fMC-hNcEM=v z3^a*7L=fH<*yZI7!sIqUKdzi|4k`dUzSN z6{{Mi5^IO;ZwQH5m}qaZlMQ-6E;**-(@kc1-1Ib@lWAkw5xiyT*#e7Z2sfj_S%pgB z*;SRM$Ed1SJCHd&!vdl2pl93-J>P~ck=6nrQ#v&~s+!E@@_JIwsM5RaB2 z_Un+-k%jJ|QM(y>Ryvt`VC zY_eU`hSJ%rsw#vwz-NBQUVgjyrRE5frIsQQ8&TI$zR-G`*!IJi9SzreUwWuyMuzsW zcfw6%ntdGZC5`1j!^=pr7xjh#ik)H)Fx=zGEVOKJF*lT^_(w3?LI#DlR8mixxgSIw zD?P+@M$$UyB!~12)H(K;`BuOt+d9a*?ESVQ5PJX8TVxgceQE0|zNN^wq=!MlJP;b4 zFD*DWZ!4ADvW?LWa+wWB4}hi5qsL>txSAWX8g=LbUO!b!YZ_#cnzq<$v7p4QRO{<( zEJ3cY4`XZhVbFFdF1iy9?LzDZ7&iVVdKu??5PgVO5Tl4ZLIcbQl!qPLow*(ESz;U7 zGiE*p%OA8~vxpMPJ>|(|Eo5~F$IXZqL@QzmB7$f`EJef+9RS5mkFjr+CgNpxlx-q5 zeIvv+bv3Zvi4L-ojVI#JFfJvwkiXbZi5bZ2h2=#;wlRBGfxO7hbe$a7j%Hl+1ez=& z_+Q{8j!q#?BlzFs42~uclZe+5PZkjtXfeuOT^4e}&)vLQPIk2W%Ly}_^-qM8)}WPs z!~lZ3fz54kU-qGNQHS0{DSAN*h-wO4^cc<&zp>9&{O#froGL!{RnGwFV&RqX2^ZEd z+%63Yg^D0GME%4V-f-RzYIf#R>Fgur$c;X}(*yf+qxn=Jo8CY#f&r{gZ3ys(l@M~* lQcG<20|JT939&grnG>3B3vF{k^F8r6A$9D>mAy9f>_0#n0-XQ= diff --git a/business_objects/address.py b/business_objects/address.py index 364beea4..feda3839 100644 --- a/business_objects/address.py +++ b/business_objects/address.py @@ -15,6 +15,7 @@ import lib.argument_validation as av from business_objects.base import Base from business_objects.region import Region from extensions import db +from helpers.helper_app import Helper_App # external from typing import ClassVar from flask import jsonify @@ -92,7 +93,7 @@ class Address(db.Model, Base): return jsonify(self.to_json()) @classmethod def from_json(cls, json): - print(f'{cls.__name__}.from_json: {json}') + Helper_App.console_log(f'{cls.__name__}.from_json: {json}') address = cls() address.id_address = json[cls.ATTR_ID_ADDRESS], address.region = Region.from_json(json[cls.FLAG_REGION]), diff --git a/business_objects/region.py b/business_objects/region.py index 8f3e744e..b5029e06 100644 --- a/business_objects/region.py +++ b/business_objects/region.py @@ -14,6 +14,7 @@ Business object for address region import lib.argument_validation as av from business_objects.base import Base from extensions import db +from helpers.helper_app import Helper_App # external from typing import ClassVar @@ -61,7 +62,7 @@ class Region(db.Model, Base): } @classmethod def from_json(cls, json): - print(f'{cls.__name__}.from_json: {json}') + Helper_App.console_log(f'{cls.__name__}.from_json: {json}') plant = cls() plant.id_region = json[cls.ATTR_ID_REGION] plant.code = json[cls.FLAG_CODE] diff --git a/business_objects/store/__pycache__/access_level.cpython-312.pyc b/business_objects/store/__pycache__/access_level.cpython-312.pyc index 3ab5f776d2d3496880e60898d62fe7d2553121f7..afffc926b1a43efc603a7df9544706c3bcecb438 100644 GIT binary patch delta 1134 zcmY*YO-vI(6y9k|yJcA@EnR-av#4@G2KfOiVV`cu+4M)Tl8rMx8fR!AbU;H{ZN{^UZs2K6E|p7I#Il zn4{y=eR*+rL##%t8%JYR8q$15Nm`s25$EE@IgP*0X@1>DF1afOhm`k(aEtGJK)dyLiBvBa8`irkHw}(6Y;5;_~ZrL3crbro=U_g6Y-fjCc+68 zT;tPI6VW+!GBFlQFkz0sHlm|5@!1#|E-#lsDXxGxysBoBXy zevZl}uY(H`6AYLC-|u3m9i1UJLoJF#_fjqje}{(}Zu)&*pt;!OvXBuN!1|yE zEJ(59#!Yl`JXdVmC@s{q;kvR+I|F$C0yfhsc@(Z|I0u_K3hUe(KKO#Kf5zAEHT3N? z??`)xhoAFN@;rF6qkRRytL zV$CzmZib;U3@URED~FH(!r590kRMeM)JuA*2iAg@*>ki{6lOJPS%p&Y){2(QWS3Id z3&(l0D;C@YdcY|1f^Bn{1%_mP=lj#9wruEwc%Cky+iWP^M>j&~ldBkczSeN4 lCC^3jTy>sP-g5Odd9L=0cL>$p?%a%QMDEUi<>-Qi{0+vv_?-X% delta 989 zcmY*YO-vI(6rS1sZCkdqba$bMQvN9hEI&q~sQgt@5fr<+m)7dJZ+RRWqoSiepjJv0d zWHP#GYE$~UZuDqcE}yeBt)-lHFJdgy_nsl#PJerruu@(WM;*frEXa0QYehpRXPHgT z0pZW;W`^X7R<4jIjX*~Mniy^ZV9736N(7Y@@8vez%LFuqEd9*8REj=F#lyd^pjRS;_#(9;SC_=%MmC+dav9=+tZr+g2n9n6ZP#=m zs~bFK8xbB4ng57GtA*^EpB^@5s4or#zf}_KaptgizeE|C6E`0B*rhsL<~VAU-X{)+O6vQ@awtfoO|y1 z-^at3My%gjttNqey&p-F7cW~q^LG5gXhxHgs$} zpsRX7&#qD%gQ$jvEA+Zu2#8OU=U`N9FPpnAULWL!cxct`*5PFybv;rjkLpyDT-SqK z7Xuk%lGsOmaH*z^48m76JDB+;$pe0qv`b{-Wx{XD1XX!>w1$!M&VhtHlP<>h6w}$( zX*r*pnwZF>;RQ6Z4}P=O!A?sL^JdZVr-4V)3Jccey7has9W^U?hnvTyl;^(MDBlJ#fn=NhgqtrC${8*qv{my?FMv zy=B$j@`HU_N!-RFO4NE*0`|{|xr-^Oxo(BKj^@s%@Z7^du}x?ej- zcl+_t2*Or`Mg%Mp?Lgr7(IvVEVTi%9Kru;bIr)$vG(pOBqJ|6b2tN|{%1^E^Ar8>H z&v)}Y>gaL2$cu0osWAqX?)o>ky1Tw~2gw<@?`~!uo9jM~ZHyIvo!gYqQn~fV8NFUw zMk`_>m5Res-Da`~+WPI48awJ-q_{Ft?;)CL2NXhXnDNwGrqPk|2WLEuq!&K$>~Ym7 zdYZ^hrWI`_om1nmz~7#Lm#5jtE-23AkT$u>n8TDZ%LYcVafHEmi!HX_nmI%Z85ki220_tFZxPdL#5F0nz;9_SX*KDmj(`( z`j3=CV{78kJN95nik0lKk{BybP2QJ}@w{tQeXlGm8`;v~v=L+(Us7s}QBq-f>YEX^{8Vvy&u!RF?;_39x(%P5&QmEC1E{}6m(k1xQuNgVmghg%Ty_HY80 zf)OKI=L?#m7H;|ja6arOVYnK0x0MTEWO{U(L8SmXnl4a^EwVAps51oj!!E-One4R3>Z&8CYm_eW2%R zH^Sa6!{jq~f6K9R7~e?LO@~o!FTx1ID8fmEeF(hVywbb{ct<>sf&&Qq5l$c^5poE; zU-(9O8IL^eLr5(k;M(R(#i4E$-e(8}xUlu28J(hdj5@*7&}rDrNF@m0H`GC{;f-^( zC;4Bx+^YV@**`4BR4e+44Evu^w;AsizAw1(^%wbrkHwyBJ~f+3_tMwdMXaxk7anK{ pA-`)(ME9ssAPqkY?e~O^d&0myq4SYRAkB{q0`bCVV@QWC{sX+;($fF{ delta 2034 zcmZWpO-x)>6rMZ3kNF42fff3 zW0O{*8FFdbjVrs5*2FYK7bY5Au(2_DF)YYP(3rY$VK7D)P5e3MJYYthWWJnt&pqEc z_nhzE+`yB5*CUt9Zh+s9?;0nX7hC~$eW7t^uQBO9>oyvW8^)!#4dW#bjJU;MIP0M` zJFGbpjt8c#RqwPh=6v{Blr8_lB1WGBmX}!GenpP+30a+#@`iQoZ< zS^u+;H_9nqF6Paf?Ahg6%YGIr#l2;?*TQ{hKZRgMa0|`qbA`cFu);`$2gR?}^{+mQ8ZQLOqI(nnnSt?>lKUdxXGe~9CxH_3h z7tUAXtYw4Zh;tYUK%QmihLsM{BJQ}FDt1_S8z$fB@S3ZcofBsF83-G35AALQFEkJ% z^PWsroyw~6`7Gy&^!aK2G=>(Prdw>dBTN>5yTdHB9QJ&}9G$R5Z(fV|!`rmK1HZeG z&2=HeQ*l*RR6d!Wh?%H2c}dBRsTnn%%8pSo= zYgTgDmmmAO81sl4|6ASECo>rhrY#}I!7fbfuZl366V;V_AbOxO!1|Xj0*c##kXQ+X*+KC*aKb0$Ej*r{NaRh) zL|U)XA&vyAJt(cbWeP^1!gY;^H-hc{0Ibo>6f0QJe)xf;zYGSg*D>`M;)md3t6THN zK5W%uU7EXlRXVUPxis${t?jtBr&n{ISe5$LJYg-;p?Nwqse{CPvxB;1((~hqsQKHY zFS(>-(sFVV1VJY(%sv&0vYc299RyW<8>(ZhQT$$AH#me0qX<(7=MbpN!)Va}&Z31= z_@7pB>@)78apiJC-K}P1OnzHThE>S15e~88gBaC=a0pif z<-!c_!MEZCz$c?Dx9?8ZLf8D9CWWEX@6`sRL2%tMj5DECRoUQCy=qiV;-}h%(F(I+ zmc3$#nFeNTI$c+u*+E*Ab`rw2=V9iFDb7(0g=+{ObU9``TcyY{?vmyExUE|x>w?kJ z+_~JzRcHO0KbSjxxBc$ryQ5lp^R4GMEyj{(HmwG)@1{eqQaq~rAmpk4+d!yAtV0Wb<2T8ar}&xiiL*# z%qPBXxYuL3kOckd&k$*d?mLC<@Dbe;=|Czoo=qlt_zfUo@K<`oO07%g5XX1y{jj}W+X=Q)Crx8nAz__5K?qu+(tvT&G$N43xQC=^w{E?18+L7L zoJ2GdR0571Naw2;^~45R(GCFVku`OLN*Vcx7v6Km)a-~D zz~c;d!xIellsn?Mu)a|+&4N5flr6>(ePzt(av<9K-Kd5qIJ{^w;sTFVhQ`nZ>N#-xD$*?#z}@j z{nYU7X*M}VfnI5Q+kPuBmRehG(?vYI_bHylmk;#!xA11GDT5FgZ@1f?TW{g(JTA|1 zmaR7#i;R~Thgp-MXS^!@?oR@=Gw}04_KLlQ!H1B)AVeXX}=z(p4d0m319+ zG?qS{;Yo)wp5bndK1h$qT;dvio-V*PeV@K6@|emjpOSSM#-o0=iUaI6P_Kzl;2JM?nfsRGT=(kT?seDm9LEN{Bve@| zZygly3QuKp=xlb?^l(Vp5>Gt!*Eg@Hzanq=?Z&p}&f%u;;m6(OWIYK3z|&9+)MvvA%=VRB cU$Ohj_@7FquZ-;L!%+NkexEjm3M!xWZ%Ky)!~g&Q delta 1207 zcmZXTO>7fa5Xbk~>s{OHwe#hK1Okyu60J$d0SE*rZ5s0tDJ8Cxh!7ADgI6YDKhW$Z z5=e-)La04P?@+0NW09(Gsd7OGaYu*)J@oJ-5El+TR81tfaAIcdDoWYIZ+GU+%+CI2 z_VLJ%BjyX!Oe=Ujd!MNvT{XMeud9Q_uXLu=SS{fs-PA%Vde)q@Yb+Q{i7BU*ntoTQ zCGFH&oKh8KArpC1=uO+|QqSuB-tKJVGSHP-i#5Y?H&x60Hs;&*YC@cnTc#~Q)h??rd!s4Yi&W1!zKZ7;r^?hSKcmO*I zlm@*7%7iT83&igVw9|9c6umoYpi?~6N3`f5xxT4a;sYr7mb;0^hr3PP)~)y}xPJ#O0P-cSwt~Ru}BWJMS>m zfs6+s$Q;f@a7F0 z%9Q*a`8C)f#ySpZpkSWfuI@JKbDA3XFi>~h*OEWJXb`)4Bo_Acvtt;lI zMx#xR!}e;H3N2J`yEh+tEo8oMfxgH}{ZDHdU-UvagGW-mg37==mAgo` z*=+Bs?KqrU3>MHE?a|kb9?w!J!58N`2aQNEGOZTzbLWJ3*SY`t4m71|d&@4+UP}!% zqEXOr8$V^@Tfb&IjZKdVZddPOVIBwG>ojb!f+7u=X)JjFQwU&R?J7bX2TWnzpv0w&&b`H`#==naTIx z|J-xVJ@=e@&OQJB@NIVf9cH;~v83tn@6KP84Lx|$Vq?2b&L7{*bUxtT~ z-B!nRsXD!`L+8u;rp}iyXUMiQMv~I$Zd)km1xUBamNSMpwLZ>Yi1fK~`Q8C|cQD&J zDdjka9h5yuxT zC8j!Df;YpvmhALa8m=T*1^=<+7Bt~dO^NWZZ`d1E$ig!G;|)+ZyN3c*XG%9&VeS1FB z>15Wfzpgz#)nWMDdVEx^*8fANvvlZV|H^)dWmS{vS=vP3?&jg3gdqzKM?F!0ICR>;*N`?L zx)w)M_QE~zW_~4m23UbZs5z+TgK(yxyqL7{T?F2ngk<=zpq%{*(rqL(c#AF8XUjJ* zCj^TMSO?ryR5G^>h1As5>zy4^x3kO5U8ISk!`*PHXu-&Qn$L0e_HLFs+a;&V-lP$N*AI|S8r#(n>Q21A}B6rx76S1-ooj4CDGjNoxS3;sk0~eob6qm-Fy`? z+6}6~8&Fi^UL_pj=!NtoH^Bbla`u}T6mMiEaRM1QZ8`8|$q%aOz-R|$BaTipaV!*u zV?4NsYQc~kgSq#p9TzHq zH_Fp7Zjk{Syj8IbzG_I@(WB$E-08U88FASN_j_d|QZ}eozk*ri4GjBapVaT{RVY&_ zgYm&f5RT+bTUv;#@Nh-7I9s$_=bU52p6mu#R@uznK(1oAztTLx*`CiUi1lXvjH+h# z7V)RLU$M50n%lSo0#!aNB4br8mg6WiVHy-vFJ$k)>gu{_-mMr!ws@HM-8i0N620FI z*Q={df5zc>Avo>X&@eCk|0y{!ladptq&!DH-ykzVj z_JpGT=wT`74^6QMyz?7OA0n%gPsYq%K4x7$YF<7~S#gpwz5%(X>Zo4OX!>YEN9u|( z>xxnH3gJB)zyhZuNnADggPtK-LDNL^)BPczd`QxWiO7S|zLb58p(x018nZT?+cy@E z2QK1e5Z_{3l3J}0B!?eaRWqiM6!HY+BbkXKl%RZq^YJ}5j#(Q=&5hIcT%Dv{P4~%) zm-{1B`KIpuzM6$5EWvSIsV!sHmQiyH?){CLh*_vG@I%mBTb7Y*92~D*$j0G`T03*Z zUa#GvUrF}^r|PEdq=QCDR~@}lZR4VJP)(m|MzFq=eF68?Ul4`!GGsdHdPQ06Ce}=X zDgqHa(xK*hd_F0n<+OCb!~LSHC$6ZU5c76~sb&2U_>QB3WkbxdF}~21MOB593t31k zX(6yIwiQ#H`Ojun_$XX&w3$Rg7eMAMHu&1&C2`GPZ%o#lK3(&(jd9ICpIP&1)Lg=f zQ0WGt@W$pzGgGH2!&fz%{4r4n!y?oPZ=9KViL>x{QyD9Rmzy@>5@kznluj-|4OX%z zXo*7j#?r#FgwiKwR{A7Fm(FKZ@S~*(7yokEysk;b))^GfCfk*0*t<{iN9AB*g{Nj- z;XKqf&t(gsqnSKo$+y9|W@nz(8<515gPPLP!0KRWOL?4?x7@dAf>q7H+U+^u@drG+ z0&+a1MN2SIDM{f4a4fg6dRV)BErp`Z22U&xTLy6oEfoj47iwAyOGH6P4fvI)#KQ*_ zO_2fFM2iHwT34_pIMv#QIrCoYc|8{92X3wCAEG5h`uJ%ia%eA&Tm*XvL^efeBvNWW zjYJE{X|#$UKp--#h(_~Z_NwwOktiwAuq5vHVw#}TOZc}7$Eq>PWqE3rTtfO0Yog-B z#W%!`t~$o@grUN+DQ?bet7QYw+EytXbZXt8whXPNW>U?H9*)S0G#v8pAC|dj-i%rS zO%whS)BHJNH;S>vNI9^9f!;P_2^W35CL1gQ!Rn-wXG;=bD5=i{Wv1;mAal zQ%yZl?hg%VK@zQ5N?RD4Wlu=7Wm?Fl6+k${i`}i=C zsaN7h2#ykr=&+mMchK-of_n(=CJ=Y*{WLmB@I8X>6Ff-pV}erzj}SacaGKyO!IK2% z37#RiK=3R9odW(_f)@#{Ak?WANfKsy7^?2OkVSu}2|w1!9Y#{|u>>#IwdzC#aL zYu*zL0xyi+SaZ<`7rR>XJ|L9`6SDDU=@O)Mm$IKiP4~T+A{V-M=-Fk+*|aJ^jc)I1 z{uw^(sam@%?u8uELJ6Z9vGMb8H@$yBKoa~<2zDd?H$K$tJsw5c?GIpkD0#6-918Qp zldQ?#UC(V=&wdxPY))ZCbYi>=A@N7W%Ygsmf7Qdup+Y#`lN*zI_A{v1h~HhaqI2N6 zbtSODV}{Rr)7cy_^_Amov!L&Tq8lj1FC&P45&K9fyjv@I{Bx-5Z)p{qOViT-OJWvh zP1H@XErxc8?=s#;vo8=NHV6;(Z^bX4fA;%K*N{#5E(~sYerwiMbIF*wqZ^xN7s8krH#4hb88oVgW;oHze)dhoo=(fpWe3Ux9i90Z3n$=((j~4 z*#L2*O0Z|^F-*nxxAxg+Lt0pvFy^$@#$nR-ZFAuM@7m_XNWQS`V>ag+vaaSIk-%RF zF2m*RP4g1M`;dh7SD~3G!j$?u4COn@*r){UPBy%uY787Y9Lb{3;6 zuI%h(Jy12U4h13uZPr1WW_%WUM{xampcJ{@9azJBP$LzOIB>q(ZskFI@=<~@1l70; zbDIBw-l;-}oKQ3H3p(oe#xwOlL?^x6Oz=9ritNpxS1UmZ0j;2=2t`eJ>kgzVD!$zb zzn9ch!9kNSYRHRS8hk)+FCkVZfw&gRXyhUgm7dB@yxPQ$d585|o<@Q_RZa6N6QB7c ztj>xKM*^~@V@7e3Gict&uRxt@p!kYL?yh6I;Nb4BFqj91E;9S1N&ib7&&SQ# zXM@L|yHlKBVX?TSsAOo4p4>o~XdMJ3cXMUHnTgLRsaFn0>JzsbyzGB0TMJ)da`@oH z-UTCnB#o~U2tOG7p{N#3;m+4+LTo?;_bR;#Gc(DCN#n>a)zsG6?cBUgvrk01h`23so~wXJv)w ziPiB^r0XW1Y%CxUg_cf>I;$&;eV+ig-c05ow?enZrv}E@b;t=f P8{X8}p)0(`NGARl(GRzH delta 4706 zcmZu#e{|E;70*l3(zH#}LP?vJ(x#<_(9#y97TN}q{(=H6r7f*6=$AD4wg%FqyzjSl zMWw^z(Cus-^=><`BTm!}k*R3d=5~&}ZfF+t=f8XVarjoeF1X%7(l5C25n= z{_**~ci;W>?z`{4n?C;@J9dScFPP2gI{YiRmN`=SpxMUyA6$C1eRTQG2(`) zzJ>Sdd{#MAww*Q-r%t!CQqc2|o-dnE8)DR|7{3ka1+snbP6)7~lf4rd63!Qaq}%WzHDCHP>Jk(4T5I& z`IWJNXHp7rpUin9EjS6*BRGtjY5%y)CnX-bL(@y6d^OZ$Sy?r-XZ11(ewuZa)xZ&p zjb(?QwA{~FE3C|E*ZYj{opn}twrUjKT56UlYH;5!%kZ7AaGdes-{9k|@fFZS|Cj}n=$zLhy1-jsWs&0j)FQn)8L zBJ&;`^HTU~;o`Jj96C~Y6%`8dadKNcsPqV@C{6Tm-uk2PE zDasz^p;2i}=A+}PNA-t-rwn`pX%#9uaFpad-vc%IW$Y~U=GRWElQ6FT%eNPiLhd0L zx=GFljW#=b0e0I+Zv7ft_@ph*z+7-{Q9f&jKQCHb=td#U)V{^NLF#gMw((}tMCZU; zA*W~==0QVI!BiV@We6^JOJ7HSTP!IArN!MP^>?%lh@{ZW)3mnMjy{niTGlkp-P+mF z70nrgX7C0S&A3+y1^G>T)=VNsw0Ix~E*0gl^Wpc4x*6`{({vkbEk0UA`5^LuZ^h9m zCK5nlIL1Q@|YZkwPH^3Vh_sKq~-`%I^ks3>7evll@o#h~21h4!T_@cBN^;5pp zmUZOZjhspDz~B-qJX%)9-a*bHQ|l#*JCf$+af#MEZYPnsi!9DYX56fWIOk z*hPt=_stfCbrlsB`P<&W2ek5ig6J_7FKetwkkm5wk9&fuU!9aj{lVn${Ay_p`w+~P z`EX{5F(s1LIHMxTc-KwF?^t#V`U0uoHbEJIh&1WY7Q(-3 z7naA%{0UmziI7|@<~Dd5zNsr=#ZYqVw%87w^|cAnr;a2sHe{v% zy6X#<#NODa=hpiSk`I)|LS$xT@L7E{_+NC+?7=dJ@+{heqK3TtB)=+;#@#Z*W_qk1|OlrR|P}8deG4Yp};yUvBu}=4nLR$EK-@Avjl}gIp^><6AsUHGH%24T zj_s$>dV+lf;tm$ls2ujV?49B&%~L~?cy$-i0$t8{$Z7AIQRT9ne6LB%M9?gf+6tyz z#7ifnrS_`WjgCY^AsVK6&7lxB8bQ%4MUQM&iKKR%Zz9-Eu$y2Hfe%5;@CH1JGAgUL zhkRTmGW9T`L*aMQ=%8*2@g5r9OK?BIVFK|y9-+|#1V1A93BfUf;{-n=c#ME*8>ceF zPZQ8R=FbtFC7|@@zayY5;C~=^mEd)RD$OiO!cDIn2uPBH@fAoG4V6o@-dr@O1Z%=A z8;Y5Jf`M=2-%}~}+!pTac+qHl2ghLQa^@sv5UsxiySj?m<8W8k5AceZw(ioi*I;;? zYl?o8^tJPUSNmz1>nEL>>?1w zRBTL#CV3yxULlC@4$=m0!_LAp;7k1oIh1?g!oc}<^8=PAjF0wRE?;}GeC?%@hDdQ^ zq_I1)ZGWVjNBGn=ozAUq(|@khwd*(OuhMKY&0P8|^s#j6k;Bvl@85P1Z=7$(b{lyf zJpm?6pTdrdNY(J>j#`!thMjIaw6>j}GV4c3Z|5J=>OTpD=qJ#!tIm!YvlmHNeL1Zt z2uamfg-3ST*-H5Ru6NPyBfBRGNH})%`slGzY)AoA4;JCZw+!~N9yl?$83jHaY_^E9 z!?+P+A-L8_#mF@%ZDd|JDHTnT*If<^58#)-K@dUEj6-;R`9+#jF%apmW#aEr)$fg6 z${R!{y?h?QWtyr488pozNF|8Ig%;?H1l)skg=XJ{mOWbZI%wfC&$D_*5%IVP+yuo0 z%><&FQ)!7+l<;-$xPBmv1cymW_bb!Cnq5fJQq=LWfE?8^r#Q(OqG6}sUz&m5sF~O4 zmEkJpfosDz@D#6(yvSy1-Q3=w3U0++IkFO*7lvmtR_s8$OjIVK5ue#mkZA33JxMP) z67^UPR_?X2{jhoO$pz6vD@Z&vNZGe+>Jo|niNJ-R8R#Db;tWMB-=YQKlQ`11X)1iO zpyPbT6LLaJZSLrD_v{dxik@vDafvcG>saU00s-p{KfN!VWr!0ef};k`2iCBb@by5g zes=~{B~dSBg)bCF@R6fu!%D8?5r~3GnW3e0hOo60dS~U)*J(|o_&=P0ypGqCRpeF< P!--Hcd=T1bB;)@F<@qfDk!Lc2#I`(f*=rsBKlm}CoU|zc=w62U{IS+ z+nDN^Hc1n$rqO6@jp^1*YMRN{AL*yUB&q33nwm~0Gi@hECT;)7B-7q=-!3c*?UZqT zzIV<&zjN=o=bn4sUiqB7dxs?aCO$q^#s0RvXdU>zcrqcKB%CZd-{vIF1b6muPHzrT zsZ|?P&cp{*PNNtlnlEc{xJuP)iBU93Oq0yynxNbol$)45MNA*8hjUsJSV(M?ZA@)X z4V02Mh#|H`bdQKss2dpx{7rpYNAlp&m>g0Wcp;`-qf22_G#~yH7tj^4N7)9GaW=Rf zzlPKX?#34pT``mPtKnQv3X~<*5({_}SC|WMX!Hp6IuGD|c2;5T3E#(B4Q(&taJ|H`3v#+g&LIPR)es z8P#d^Wx`n4A5ls1%9BbZ1!XF@y&@HUot6$+siq`jNS)8-$cCF>IyMK4>3a2q3hG=b z>Inj6h7?i*R}2~I!6k5Xa}NAAwUD&Im#Hfz6X;q-Ajge5+=9#FlN_FYkw!5Q<%>x~ zrJ>*J@p;{%;Pwv4vG+UN2Sg=G@gfFG81@YaK8f;`%Nn=np;jcokn*s}I>*R}=yBRL zN+{cqRL#sZs%YE}+>g`dQr#XV_g#Q#bD7C}E6z3@XFJ<_ReN!CDzD=GxJpP&b0;O$ zm8sq;t1~ueHScH$L+G@b;kmTGTW}e)2SJCh5drs%&qYoHPg`1oUD*-38|6D;Iz5YL z5_P~^%gykn*#O_P#t{$XW^|F_Q>{0kKC?7)j#!UoVZ?AeGuy_K!-*O`eav^hB9w>> z{Dtt6ISV$o$C6RFo7tui8?p++h*=co6Srn%WOL#H)GQ?42S>Ath#wp|8Sr*ixx)EQ zcHx$}$;L!*vR66D;bf_(90kEO>=+P3TQaz~pCRVQrsE?YV9r_c5)2t*3F8Srrh$d5E&x8z{y;j5~7jC`S!z9 z?n?475L+`VmMZq zN(g+KVTSR16EQ$iqY3Wz#F9q%N&d1HosxtJ`y4)D)InXm4)`b@F1if?6IC`1h|-)| zkf|R3hXfR3X$NSQ%U* z{LuQa_~1c3U@s=8183}|L|v?cM14AZw)F9(J3_79( zkt^`#vSy`T6L1WrfOUC~-oo^(+FD_9xg`&?UygCRe3C%D2YnQ42CElghwCUiv?b&k ze6hTSZ^)H2D^t@x1b*;wS(jMJfteDMX@R|LhV`XpC@Hm*>(Eo$LW%=tOMA8TezeCB z(QyWHOmkb^2BD#&v5Chj_}*T(xrv8OHgbJqQ+Gqx#x3`4>}aQzP_ru2kb(@U2>IYx zm9FDKT?f0Wa+7HTiYFM%2KA?_3dtLRKdd@Ow0MbuFl1Ic)iBd$gXh;20Nr7Ngv#jn z;AN^(O%PVx_urR-QbQE8;D4;rA6;SQBe9|cWq1u}l#y5yf>Lx z^p%<5)r$D|ggFi4D2w78iL>_&&SB67Usq(rC(n%xa+H^w;6`P9Jcfb)O^~2wS5RYK zpgFE+NIHC6xm2GKJRV@GDzfwBJjpC563QBOQi8!n*(rp%0O#@mvvSjjW3_`mcIP&; z$GP-@XR4Ow-at_lOY0-5zvz>1>2s#_Ia9e6SEZ|ar!2Ma>+gZvRd-ls-CTPromabR zW?(1uA+!sfhOz2WatAI}TSJH8&(&+QAH;!bC5iainzz?g>sFH)7+zQKU-REkW8v3| ztmpafaxRwsXZW49rzVa33;Z?f^q4pHYFY!Y*W~DU;w8bSH5TLJOinS_^a+GCFxJ`| zF~4P9w?ti@fyf%bGk3NS$kFv)cJ(_vN=3LAIqDD^;Bal>WF8V3`rQtnZ&;M}d7X3v zDtYg~Z_2Isx(mU9AR_ET7((zM>_?Cg4j~*ym_#^=@E8IhJjFncV=ap0>JK`r{sAhU zML2`nctPNE=@;E@L13Fz$fSI;*3%*!WePz~pzod%HQxei3OuoXH8Fe-b!iA@xKUSQ z!+ON3-^(Zo-$8uGb^G%msc%V^!1^YaBnTT=PWbSI9Z`Llnf0jl@kGjchzyvh_v%SpN68y)VU zzmjog!&i-K+Ia=$6sVxv5qR46vL{*N@<^fX2lcEe^*F^tLTEP10nsuIYhJL-A8xu| z*M=*42+p*m!%WkDRv`PE6N#>y4e~bx{bs^T8%o+=Wg zp+^Z0VGSAEHdx=I)dyRl9T3>Wn}nNWH%ztG)bqH_^^y^OFp)!kb|Wh;WxgK=w6|3f z0UmDaz-H#A&dG-O%P|3zWA5aZ4~)y3P{n>y?h+4|}_bHU!79Oj2NoDuQDLK5=B8_b1%JaD*s z74gE$-CLAB!N!pvAp5DUNgL+&9B;(Pb?gu0=MCpVejMUoGrJ!Lx0;C$PHa_zrSqY7 z8Lp9xS@>kENE!T;eH1Ap2y8nW3BbV4dKS$WcTU$ogkv5?BOSeo&$HdB z@}bRdXkNx1VcPkH1aCifaU}KSz(>1G+X6!8I7_gem$aba7MDp>FSpRY#e-{ zPd#7c3@y6{$yqqQyP3^!diV8JoKQ=@!)SsHZdXT7x8eYpkS<6bU>}C5aMPI(h3(aO z_{=e3MV3q0_%x!)lMLqN+f(cV4^0did#QI=K)b7$3|PvKsBR~kXfeFD$F>A%=q-fs zy`lF43IpYtxaYg@(?nNAT8A_a)qyk!;<)i?{opw?L=bbI&THub; zKvwX?wlGvE_lhfjqFd?Tyy2`LsN9fnfv z&xV=7)RUCD&Z$V_-1o}d|%=aK6I0-rm!KT1-(fKPmaJW(RTaS^pR zL0P+p_1*ldM%LADY_IFuuFQ|`>gPC&Z}KgCn%m3I@RfmDH5IV?%*4P|D7ELoCaH?7 z4SY-5NhXu`@n2efrON*T`+<&sZ^`F0r}9Y*?rI1jGwN8P{b#0%K=Y_Y^GB5(#L*`H#rq#n C?HObM delta 5622 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 IQ<2X90O1Yw#{d8T diff --git a/business_objects/store/__pycache__/product_permutation.cpython-312.pyc b/business_objects/store/__pycache__/product_permutation.cpython-312.pyc index f6ef51e860dfe3c9980b9102b032d8becc6eb2d9..7b030a172e4a9802a8b202d60db96b5ebd3cfed3 100644 GIT binary patch delta 5461 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 V5l#H7f&=u@zNK_w-!l1(`42L&hLQjP diff --git a/business_objects/store/__pycache__/product_variation.cpython-312.pyc b/business_objects/store/__pycache__/product_variation.cpython-312.pyc index 84edbaa33aca7fdadb05ae5017587424d734bacd..87211531bc7de8dc6072cf51a31f0f578507aab4 100644 GIT binary patch delta 1938 zcmZuyT}&KR6rQ^*+gX-@0=wJYWnp(&ejHI+`U6F1VP&^17FgIqD#SRB%*c=1o#oCz zTKZ6uny5+B1h3J=q|rw!(U@+cCMGt%m}pJK#Hg8sYT}D;{>8-jB8fJu<3k+*$}tw2V0$9w^`w+XTz6Va{VnbM0{0e^n6jLN~%~a zop7mc5@2t8V&o9J?fH{P?AE?D5@e5yvL_5jX_9?Vb%WAmZcmS#n;1>aDA`;(lcR^hK#w8xvH>YEoxqK?si~=)GLlv%a@q9s@Dz=s zHdLlnhEr3S)7jh%Z2_}fLECVbd&x8kv;&sAC9qpkCpp9JN$*1TFW0QNo(h4T_8?&9 z^dJJ}%oBBz>O~RL;n8^v8U*nsp$Fh&5&&oqJ5?u>X;!Se1HK39zbB-DHTYXReR#5q z_4`}TbMH@}%tQ3!3L8QP5cYHc#ghnegcArnfk9khk#rc~LFAA89YkaI{GY((y%~5R z$V=glAKKOsJVut;NU%+ez-hUK_OR7pvYjVbgHA;NyTY`nU8^W+p zU`vX^H_z$$yrRg2M)0ygVH=c#&ecd?Xp9eFu)rt@W_U zWRyi?kpa1q9s!MAy{hJw#R7OQ%<0sPK9*7MQHw>rpvf*yOiof09}k>f_EYnD@+s?$ z^#MJXW0k~%qp{Y#<2=CLk54u?fC_3yp2{wpTy(~VyI2Po(L|1X&WuDXixofEu=cV*EKwZaXnXK4YCN3vdaqx7=vlJz0Kx zX*Qaa$ro%j+0}?y%;EUm|5d^Qo&NO}yPY&$OCs9}_}S6c&XLO9JUF?i2ettjf!#n@ zC2!2{q-WRW7fnl9Rq3Kb{_-c}M(ecaOE_$fvwvE9n(BWLo4*yCw-Sdx9NaoQycJ7- zCuV-EZQc@_X@q6kUPrdXGXy1A!2{OW4j74i)$v}c}m*jHV~ zKJMFgqbrAkyyq(z>oNkLt94vmMJVH-fjWebSzSk;kCPKcIl`tpj*}zoddKpW`UU=< zVs<%S1(>$eLQS<)KBkcOJ~(E3pay&z_-i5-FKKE4hJbp}=3TUOYQdLX@BDCM5|aQ#YQpZe5RgGl3?R z2&xbWBv8U-g;WHBMXLw|vV;JM-vX(kfU>A6IuaWeED#bZs|tj~yKh31MtE`N-FNTY zd+vSbjlWC(aa_D9iU%z0_seU-+1RESAh$LXD{jFuYRS4@v}E0i6H-=BQYqiEVwlCU z;8k4QEi!k-mSFB~nGef?kNYZ_uS%)hDl@ki{HuagU2>B_Qd$ret;7SL*+Qfp?%4h$ zZU{Pp@SFV<@xrJ>vemJ7XcTT7I0XF;C+UKZ9P`!y+l0GKzEaHj2C0oPOT*mZaG3J= zAdBxK{UEq5lR)Wt7bTgAhbebbzPztmtlku0w$zh2GTivg`?MaX&xaawl1mI)uvJVGqCVn8S)z?Fcu;goT;E_pD+5;QDn2Qq>@fACK z>8mG4;Eu0jo##NphV6t-bA_`eXHFNH8unwVnpZLf`hWBBV1#QapV737ihfSb(kK=P zA`Bu7Ba9-9GcZJ1=D|x!J}=7>q4jtQyum?JMQ)5m2$$aTKSpfW0(C>GDNrJTVWE2- z?FEFV5KbXHjj)KYcMfP{<+TW02n3vMx+_LY$&s}Ubqlzg!ZV{DeJ36MJlJA@J-MkFEXcL%M^=BAu9=7i(HqQ zz#Kc5&!~q?#0#~dqvUfq9_qV)S>gTA?<5YJ;g^FoESxoqXDtZ^xny1tp5z54>)uG3 zd=0NeLNiF2b=}Dxlp^pmL5_yCpj^_a6E{@^w_#Y0N#tADh_$iUuVMl661?4#6LdSwHTMiycMF@kDlanW z>N_Ni%6v}K0CY|s@;+b_~3a3OOF57PR} g(SK3RuH=;gx?!={E%?FI&cM$H8{qGQ<6M&e0&I?gX8-^I diff --git a/business_objects/store/__pycache__/product_variation_tree.cpython-312.pyc b/business_objects/store/__pycache__/product_variation_tree.cpython-312.pyc index ccd1913301c78f6cb64794b314236b394c6e5842..a71bfcfd06304db969851c9274ed81df068a09b5 100644 GIT binary patch delta 1980 zcmZuyO>7%Q6yCAD>$M%*b!^A+zmvA4o3tbjf<|fD67?rPMQKHwwhBMSikHNZ6T7q9 zqJ~na1foJhqJ0G>k9Vp?arHd z-+b?9X7B9(^??7T-|v<1SzO7@oV(4HJulRYc)8}eqdgha(v6$A?=*aw;+S&g8sC;{p<2=nCz^A)91p@*&H_t7o2!e3U~eQ2CtN$W3KoaWA_yFUhlkP2Af3W< z*|m>l;dfUKJp=N|Slx>vwv=M6rZ1E<2M@q2a*PGxUHNgg8E(p1T)iO|LbQzgiI5Q? zDtSi9v#s#9(t#^JQx5iSq7@N>Hi85}24Pv^A^Hvyh)4+{u*Lm^A|~9cFSs?jVO&Jm-L!BYba>I;^Ko@ zz3ZP~d!Z+A`9XC36dm7zfUTn8%L>(awRC#gEHt(hscMSx`QSJkf#qOdo#tNfMr@E6 zKk6O=(5YwnE4kP6&P7G(}x#$O!kv`9e>zLvS)wu~}Dt3Z+-usN8FjtQCXY!;p6;>U4mQ}ooJn#=Z7;pw(c zyVeKLyttie4ezx@*(vz6Z4h}j9m~Rg`jPr0N zVRX|Go2D~+|Dl4?eR6L*THlw<#vFwFkxeCby>4LAIcZLY3*IE`N&09K#*)2EfxH|B zBNm3MNjF|*pCkvx+|S9wYz*?LL{#Clh2@*ZlTfYbg-UgX=V3C{lNVK@7%X3n>u1XP zOQI#H&ny*B){A9sm=AT_jnv@oi#Tn3gz%blS8ZKaGq=>tTF1fL>gb(ld_CHCE86#6 zwEv>FF?lVuG`IBZT6XZZx(ib2>=E_>ICE34Qk5sP2+tBlj-Z3UP0)#e z)uhypeXDk z^hvM{e#?E?B4%hfp?P4XV{F7~ofUsV<5Bxvz@Lt26_1CTZc<<`@YPC3B z$arLkJ_8gtH#t=*7gp@AYnwzj{HArHy=b){rH@C*ST-Tp0)bLIt!Kp=_(bnQtuOWQ z{$|pM5tsxPK@#DrBB=%$Cg2tj#9)hWNaqXv){HMBdO1rWpToDesgj(>YnGI2^8F26z2qVk1NY{a7IRdp+>$st&T#WPbX1F=KEGWd`;I59wUp z5L^$g5reQ8d{?yGI@mNUHn2fpIgnlJ0H=~gUy}3DYx%?=8;-%zdj6Kc8H z@jQ9Z8j_>DBqwjejkr04m+U_Jl>6G4B#ng0ZEJW!7BdxlB74LH$VeIcaWAq->>i;& zK3B7=<&whzB(dK0l?plMT(#&n;bA59R`NPdHuWAECu|&-?MOKaxmY4XD`XR)I3n?K zF1A_hgU@4^S5`-^noA|fiI;o9w3NhX6wn%As}p9s2*Z%MS(Kn+?y9%uJM-*n=A|kR zkRAo9ah&L#QES#dD95{l%z!Zz&-7iwb-f;siz<8(A3;~5_0K~bUvG%drBV8BY&w6k zxKcFtp_X1PfU8kwY~FIYA1!PZfeOZQC))N42R?2qa2yMg*5BJXmiDYzjc(;AdU>W( zk`KVq_CfJBTxhp9)0$4w-amP0#5A_Q?ju}LoaMWMxK=+4;@b3m~pOAvUA5u(susCy=ZbI`#u`j7ZJ`YKN+EgmQ9Ps@RDi$U=Dn14t#G8&IV9? zp=ti`{GNqyX3T1Zm3QFjIIaap(iUt>4~mcAO#1LUG`qc-RWe1sItkJQ%;YXSxxvYD-nLH` zovBKJe@Aj7DGU+3M6i{Bc2Mpk;6)&w%OeDw=rKA`g|bYrnt%e!FmFW<9SM5jXxHr~ zzM;>(86PCOcNJ^duvUX9Dm*q`IEjC=a&e11g`Y$%yC31cR|xUI6AT>b?pW~cA~ diff --git a/business_objects/store/__pycache__/stock_item.cpython-312.pyc b/business_objects/store/__pycache__/stock_item.cpython-312.pyc index 973a93f39238bbff0ff5f88796dcff775307221e..fb27826c8569d55c83f34aa8f91d90fcf996f45e 100644 GIT binary patch delta 3057 zcmbtWeQZ-z6o0qvy0Wd^y0!aWX}7UavJXCVOqg@sCmSDgP>4>=<*~kvj@Q0&-`jA@ zaHwEFJ`%h!Atu5UgW_UBeEzFqOcX+5AefLmKjNRpe?XAL7$e?uUmvZg#Kb23-FwbG z_uPBV{hiYuKY@Ncf!tTz?mU5gj=dk8`2M830+pU@JUWkr7>c>&@0AjAp}3b7)oWU?K0|Meqz7agW%w1(SynQgJOWYM112Dr9_X?_3b!7F6B zSUO`1`}H<7it_U|NODRdIFd@~$8FnPm5t2dY{@oF8QX&gH7U`8aXcB{n^Z9{Y~r+$7f+_9G`veuWDKtqdHuFIL_NXM3J7Bn zakVgK!ya=c2y^u6<7FkV%CtrIwP=n8-TqiwU!0{ECL1g%Gp6l)mSzsk36m=tTD0LTmZSt;4);AOMenrvnQ8;e~x3ktSxOLM^e= zGK1OTtp314f>fQPW1-JcD{ZVz6lCwA3$?4!oAi2Zh%Mf&J?B)wONzc#=j(s~jC|H4 z6H}U~#Ti4Ot5}^#g_Fv%PKv8ooEGD#+}>E+O;GmAO5feekXVvWX!Jr5B@i!oQVFo!e+!%AiF-ev&X2fV_TK;BTW>5EmDL{>WW7)GdCp2*4 z)gN1)=V)qxIUE_bb3z%;J^Ms5p_)!i>K`!OG*YFhE^vj}s*v(u4+!77+(&Y+xyrA( zYEQLYch!Q2-I(7=tK%sd-1uX%H7I2qW?wn_C>Cx0=_WuV{VC zZ3kSFe%4k>SGG2W;!I$sXJN4M9fo6EA&L8xq0hJWp`Yj{t>wF6W7tEc*g&QM_AxLV z{MT|8JDZ0=382%?m0z04Jgn!hYRf6AgQaeO zUVt7t(iZ52f(|3Ym7J0}b$OdJn;CE?Lz;*1Lf6|`?DIU2t6&e*Nw_%sDA2B8VC1I@ zk~f$SK%MC*{UHA5Lzyun1w0P#gNDb>{zGJS!{oY0kyC$X-Dc=?x7QEYkf^WgT#M$% zU}rIj!OpB~fcSqeL@t1raRwG)K!&QAEw@^QS4!Zhlt{5ZSVT$@jH}P0F55h?VoSL3 z0a}nnZ~)!IWCifU@L;S#m%&g8%nLLIvLE0D0Eo%3$CFz6nL%`J(?~oyVFvgTSn;%T zYVmG9pGp3Uunc|H$QkE-V+a&41B3wH1^BmrbY=!PQ9lAZh~2Cv2+*w5^DqOr$-e4c zBnXED{a*JkD4*NFN;pXW=xs+E^|gIDXufzi|Ff#Lm?IWbsr2u5Ow>f)T_lwhuziM8 zn@K^SJZ1OG$H>{N#3Y$_8D1Rx_y_Lwo2w(C#HM7alU!!5*tG<8lEE$dc7KEYJ0VOj J^+$Nw{|QJ_a&Z6v delta 2734 zcmbtWZERCj7`~@p>ss1wZP&G1SK57at8U#u9E6OquIol88#)@I3-PX7??$2REvI)I z8zV)9Ao7v1^Fw0{MvMee!FYf0$A2c0XiQizAznWd|42+U5;Vq0;(5>ACov?(CVTEV z&w1~A&UxSGeeZrckItP(md`B~6Gwkve`=e!biv|5rVEW{{8{&~8*wR=vSd72&#(t^ z8m^B^Sx;~&o8UOOh4@iTLp9^dC|53&zNZB*95?J`tevusWlMd{j3(riyU{R`uWE*j zC`cZd+$bWu%mFR(lWo>Om5;uAw-UfjK`|u9r1X>!a^o^munMS&d}XaRG{TaDlvg{5 z#pdb4xbKF5UX|o4R7M13> zIr7_%N^-Hh#AI8gS~^v#e1%%5VvNPH!cbo%uXDnyw&h(ownH-+v3qO~8TMmb8{<6d zxGjvUUdL@?T+KSJgK-`Pmt+2+=u)qhppnI54gv;R>HQ217eQ zA30j#GsK>a?#8?5u&x*f7S5+;7H*`b7viGk7;dB{8sf*Yt(bdvNBa0kG!fqyQ&X>1 zv}2iqqB~d+b9j&%7C^UtzaK;PmC|u6W_ehgb?%kKu|s@Z60%`Z<0>_bgY`6Nc8xeK z^M-k8e*BiV^+VH@xm(tbFO56o%dQft82MV|>$+lu+Tw12C;-F&!^IV=B=UJIOr?cs zz93=T1S=qGybFNcb4AvVmhrm?KTh8%APP&zH}X6d@|Y(#y)HB-f9I{y&=dXb(`w95 zgL`(Yp@o3gqg1fa(98`*`eOX4)-8n;!T4Is>Q0MG`Yb)lwfU}cQQc8=tf`&3nImDQbXDip7DP7=` zQ^|BDIhqkJlD7JOTGvPGBLOD04d6>lQ=!;+KAFpjOCD(?9pu~k;2={IlNl2&(<{>- z6CBedG*HD56*H6BoKh0cNy3DH)nGrQff#wF!Bgx5dwp+4OiHV1SByPLNl2u#f?61? zua$JuZYCsik5&Q>Qir$~yqd={$wDD3NC(6eejaF$Ez1+m!-z(wg;Oj%&kV;7`FTq2@UQl%7BF?Ueh1_V3 zp}XWktNQ?4FJ#3Mec(xeDGG{?eM@FwegxoE0O1jVTqL`YZTpNzTMXYMG-=ZF*liEqGjJW90OC3&Z=e}Aq)9l zdstf>0rNHh4TX?>?N-3Do@8DsTGo)>2YR&w{kKhF4=oEd>#d4aOTVzI9hQ8s{Yj*k zf80I*jdD{*p9YP{Go4#eaa29s7;L^K8ZiC82g29Ei$GynFEEFym~}5ViE<&!CxmQ1 zywpGW>bJYPG(}LwV5spSS>UVSU;_YC1?WSu^1KB7g@;0*UZ5r5Ie=pTa3@7eKY{A^ zpc|%!y%PN>PN)}r0jyZqnY5tzad9>H$6*e=SkaHOw!ymbi@^E;E(3T0{^kE2H3Cei zGMK>KSsk$ks}|}N-~fK1e}&%>$DQQl&ggw)h9Iz&kdN$$ZA1O?R7{UX&8ei6WIaSE zU^BH*4AM*xgMOab)1F*188~^|S diff --git a/business_objects/store/access_level.py b/business_objects/store/access_level.py index 3cb269b1..12def267 100644 --- a/business_objects/store/access_level.py +++ b/business_objects/store/access_level.py @@ -14,6 +14,7 @@ Business object for product import lib.argument_validation as av from business_objects.store.store_base import Store_Base from extensions import db +from helpers.helper_app import Helper_App # external from pydantic import BaseModel from typing import ClassVar @@ -73,7 +74,7 @@ class Access_Level(db.Model, Store_Base): } @classmethod def from_json(cls, json): - print(f'Access Level.from_json: {json}') + Helper_App.console_log(f'Access Level.from_json: {json}') access_level = cls() access_level.id_access_level = json[cls.ATTR_ID_ACCESS_LEVEL], access_level.code = json[cls.FLAG_CODE], diff --git a/business_objects/store/basket.py b/business_objects/store/basket.py index 40dce177..574033d4 100644 --- a/business_objects/store/basket.py +++ b/business_objects/store/basket.py @@ -27,6 +27,7 @@ from business_objects.store.store_base import Store_Base # from models.model_view_store import Model_View_Store # circular # from datastores.datastore_store import DataStore_Store # circular # from forms import Form_Basket_Add, Form_Basket_Edit # possibly circular +from helpers.helper_app import Helper_App # external # from enum import Enum from flask import jsonify @@ -138,8 +139,8 @@ class Basket(Store_Base): quantities_permutation += ',' ids_permutation += str(product.get_id_permutation()) quantities_permutation += str(basket_item.quantity) - print(f'ids_permutation_basket = {ids_permutation}') - print(f'quantities_permutation_basket = {quantities_permutation}') + Helper_App.console_log(f'ids_permutation_basket = {ids_permutation}') + Helper_App.console_log(f'quantities_permutation_basket = {quantities_permutation}') return ids_permutation, quantities_permutation def to_json_list(self): json_list = [] @@ -170,7 +171,7 @@ class Basket(Store_Base): def __repr__(self): repr = f'Basket:' for basket_item in self.items: - print(f'{basket_item}') + Helper_App.console_log(f'{basket_item}') repr = f'{repr}\n{basket_item}' return repr diff --git a/business_objects/store/image.py b/business_objects/store/image.py index 376c052a..8b4d301c 100644 --- a/business_objects/store/image.py +++ b/business_objects/store/image.py @@ -13,6 +13,7 @@ Business object for product image # internal from business_objects.store.store_base import Store_Base from extensions import db +from helpers.helper_app import Helper_App import lib.argument_validation as av # external from enum import Enum @@ -79,7 +80,7 @@ class Image(db.Model, Store_Base): """ def from_DB_get_many_product_catalogue(query_row): _m = 'Image.from_DB_get_many_product_catalogue' - # print(f'image: {query_row}') + # Helper_App.console_log(f'image: {query_row}') image = Image() image.id_image = query_row[0] image.id_product = query_row[1] diff --git a/business_objects/store/manufacturing_purchase_order.py b/business_objects/store/manufacturing_purchase_order.py index 25b0775b..8e5c0e8e 100644 --- a/business_objects/store/manufacturing_purchase_order.py +++ b/business_objects/store/manufacturing_purchase_order.py @@ -16,6 +16,7 @@ from business_objects.currency import Currency from business_objects.db_base import Get_Many_Parameters_Base from business_objects.store.store_base import Store_Base from extensions import db +from helpers.helper_app import Helper_App # external from pydantic import BaseModel from typing import ClassVar, Optional @@ -89,7 +90,7 @@ class Manufacturing_Purchase_Order(db.Model, Store_Base): } @classmethod def from_json(cls, json): - print(f'{cls.__name__}.from_json: {json}') + Helper_App.console_log(f'{cls.__name__}.from_json: {json}') manufacturing_purchase_order = cls() manufacturing_purchase_order.id_order = json[cls.ATTR_ID_MANUFACTURING_PURCHASE_ORDER] manufacturing_purchase_order.id_currency = json[cls.ATTR_ID_CURRENCY] @@ -199,7 +200,7 @@ class Manufacturing_Purchase_Order_Product_Link(db.Model, Store_Base): } @classmethod def from_json(cls, json): - print(f'{cls.__name__}.from_json: {json}') + Helper_App.console_log(f'{cls.__name__}.from_json: {json}') link = cls() link.id_link = json[cls.ATTR_ID_MANUFACTURING_PURCHASE_ORDER_PRODUCT_LINK] link.id_order = json[cls.ATTR_ID_MANUFACTURING_PURCHASE_ORDER] diff --git a/business_objects/store/plant.py b/business_objects/store/plant.py index ec4d6c8a..d48cd297 100644 --- a/business_objects/store/plant.py +++ b/business_objects/store/plant.py @@ -15,6 +15,7 @@ import lib.argument_validation as av from business_objects.address import Address from business_objects.store.store_base import Store_Base from extensions import db +from helpers.helper_app import Helper_App # external from typing import ClassVar @@ -81,7 +82,7 @@ class Plant(db.Model, Store_Base): } @classmethod def from_json(cls, json): - print(f'{cls.__name__}.from_json: {json}') + Helper_App.console_log(f'{cls.__name__}.from_json: {json}') plant = cls() plant.id_plant = json[cls.ATTR_ID_PLANT], plant.code = json[cls.FLAG_CODE], diff --git a/business_objects/store/product.py b/business_objects/store/product.py index 96b87743..8543788f 100644 --- a/business_objects/store/product.py +++ b/business_objects/store/product.py @@ -28,6 +28,7 @@ from business_objects.store.product_variation_tree import Product_Variation_Tree from extensions import db from forms.base import Form_Base from forms.store.product import Filters_Product +from helpers.helper_app import Helper_App # external from dataclasses import dataclass from typing import ClassVar, List @@ -141,7 +142,7 @@ class Product(SQLAlchemy_ABC, Store_Base): """ if self.index_permutation_selected is None: self.index_permutation_selected = self.permutation_index[permutation.id_permutation] - print(f'setting selected permutation for product {self.id_product} to {self.index_permutation_selected}') # :\n{self.permutations[self.index_permutation_selected]} + Helper_App.console_log(f'setting selected permutation for product {self.id_product} to {self.index_permutation_selected}') # :\n{self.permutations[self.index_permutation_selected]} """ def from_permutations(permutations): _m = 'Product.from_permutations' @@ -273,7 +274,7 @@ class Product(SQLAlchemy_ABC, Store_Base): """ def add_product_variation(self, variation): av.val_instance(variation, 'variation', 'Product.add_product_variation', Product_Variation) - # print(f'variation: {variation}') + # Helper_App.console_log(f'variation: {variation}') index_permutation = self.permutation_index[variation.id_permutation] # self.get_index_permutation_from_id(variation.id_permutation) self.permutations[index_permutation].add_product_variation(variation) def add_product_price(self, price): @@ -493,7 +494,7 @@ class Parameters_Product(Get_Many_Parameters_Base): has_category_filter = not (form.id_category.data == '0' or form.id_category.data == '' or form.id_category.data is None) has_product_filter = not (form.id_product.data == '0' or form.id_product.data == '' or form.id_product.data is None) get_permutations_stock_below_min = av.input_bool(form.is_out_of_stock.data, "is_out_of_stock", "Parameters_Product.from_form") - print(f'form question: {type(form.is_out_of_stock)}\nbool interpretted: {get_permutations_stock_below_min}\ntype form: {type(form)}') + Helper_App.console_log(f'form question: {type(form.is_out_of_stock)}\nbool interpretted: {get_permutations_stock_below_min}\ntype form: {type(form)}') return Parameters_Product( get_all_product_category = not has_category_filter, get_inactive_product_category = False, @@ -727,7 +728,7 @@ class Parameters_Product(Get_Many_Parameters_Base): has_category_filter = not (form.id_category.data is None or form.id_category.data == '0' or form.id_category.data == '') has_product_filter = not (form.id_product.data is None or form.id_product.data == '0' or form.id_product.data == '') get_permutations_stock_below_min = av.input_bool(form.is_out_of_stock.data, "is_out_of_stock", "Parameters_Product.from_form") - print(f'form question: {type(form.is_out_of_stock)}\nbool interpretted: {get_permutations_stock_below_min}\type form: {type(form)}') + Helper_App.console_log(f'form question: {type(form.is_out_of_stock)}\nbool interpretted: {get_permutations_stock_below_min}\type form: {type(form)}') return Parameters_Product( get_all_product_category = not has_category_filter, get_inactive_product_category = False, diff --git a/business_objects/store/product_category.py b/business_objects/store/product_category.py index fc2d5cb7..cd7ca84a 100644 --- a/business_objects/store/product_category.py +++ b/business_objects/store/product_category.py @@ -21,6 +21,7 @@ from business_objects.store.discount import Discount from business_objects.store.stock_item import Stock_Item from business_objects.store.store_base import Store_Base from extensions import db +from helpers.helper_app import Helper_App # external from pydantic import BaseModel from typing import ClassVar @@ -101,7 +102,7 @@ class Product_Category(SQLAlchemy_ABC, Store_Base): # self.product_index[Category.key_product_index_from_ids_product_permutation(product.id_product, product.id_permutation)] = len(self.products) try: self.get_index_product(product) - print(f'category: {self}') + Helper_App.console_log(f'category: {self}') raise ValueError(f"{av.error_msg_str(product, 'product', _m, Product)}\nProduct already in category.") except KeyError: self.product_index[product.id_product] = len(self.products) @@ -141,13 +142,13 @@ class Product_Category(SQLAlchemy_ABC, Store_Base): def get_all_product_variation_trees(self): for product in self.products: if product.has_variations: - print(f'product with id:{product.id_product} has variations') + Helper_App.console_log(f'product with id:{product.id_product} has variations') product.get_variation_trees() """ def index_product_from_ids_product_permutation(self, id_product, id_permutation): key = Category.key_product_index_from_ids_product_permutation(id_product, id_permutation) - print(f'product_index: {self.product_index}') - print(f'Key Error: {key}') + Helper_App.console_log(f'product_index: {self.product_index}') + Helper_App.console_log(f'Key Error: {key}') try: return self.product_index[key] except KeyError: @@ -167,7 +168,7 @@ class Product_Category(SQLAlchemy_ABC, Store_Base): """ def get_permutation_first(self): if not (len(self.products) == 0): - print(f'getting first permutation from product') + Helper_App.console_log(f'getting first permutation from product') return None if len(self.products) == 0 else self.products[0].get_permutation_selected() """ def is_available(self): @@ -204,7 +205,7 @@ class Product_Category(SQLAlchemy_ABC, Store_Base): } @classmethod def from_json(cls, json): - print(f' Category.from_json: {json}') + Helper_App.console_log(f' Category.from_json: {json}') category = cls() category.id_category = json[cls.ATTR_ID_PRODUCT_CATEGORY] category.code = json[cls.FLAG_CODE] @@ -382,9 +383,9 @@ class Product_Category_Container(Store_Base): return f'categories: {self.categories}' """ def get_permutation_first(self): - print(f'getting first permutation from category list') + Helper_App.console_log(f'getting first permutation from category list') if not (len(self.categories) == 0): - print(f'getting first permutation from category') + Helper_App.console_log(f'getting first permutation from category') return None if len(self.categories) == 0 else self.categories[0].get_permutation_first() """ def get_category_count(self): diff --git a/business_objects/store/product_permutation.py b/business_objects/store/product_permutation.py index 36e6307c..2fda84b6 100644 --- a/business_objects/store/product_permutation.py +++ b/business_objects/store/product_permutation.py @@ -25,6 +25,7 @@ from business_objects.store.product_variation import Product_Variation from business_objects.store.product_variation_tree import Product_Variation_Tree from business_objects.unit_measurement import Unit_Measurement from extensions import db +from helpers.helper_app import Helper_App # external from datetime import datetime, timedelta import locale @@ -142,7 +143,7 @@ class Product_Permutation(db.Model, Store_Base): def from_DB_get_many_product_catalogue(cls, query_row): _m = f'{cls.__name__}.from_DB_get_many_product_catalogue' v_arg_type = 'class attribute' - print(f'query_row: {query_row}') + Helper_App.console_log(f'query_row: {query_row}') permutation = cls() permutation.id_permutation = query_row[0] permutation.id_product = query_row[1] @@ -469,7 +470,7 @@ class Product_Permutation(db.Model, Store_Base): Product_Permutation.FLAG_QUANTITY_MAX: self.quantity_max, Product_Permutation.FLAG_COST_LOCAL: f"{self.symbol_currency_cost}{self.cost_local}" } - print('permutation row: ', a) + Helper_App.console_log('permutation row: ', a) return a diff --git a/business_objects/store/product_variation.py b/business_objects/store/product_variation.py index 63f1e2a6..3d92f5c2 100644 --- a/business_objects/store/product_variation.py +++ b/business_objects/store/product_variation.py @@ -21,6 +21,7 @@ import lib.argument_validation as av from business_objects.store.store_base import Store_Base from business_objects.store.product_variation_type import Product_Variation_Type from extensions import db +from helpers.helper_app import Helper_App # external from dataclasses import dataclass from typing import ClassVar @@ -201,7 +202,7 @@ class Product_Variation_Container(BaseModel): list_variations = [] for variation in self.variations: list_variations.append(variation.to_json_option()) - print(f'list_variations: {list_variations}') + Helper_App.console_log(f'list_variations: {list_variations}') return list_variations def to_list_variation_type_options(self): list_variation_types = [] diff --git a/business_objects/store/product_variation_tree.py b/business_objects/store/product_variation_tree.py index c434b746..cc340ccc 100644 --- a/business_objects/store/product_variation_tree.py +++ b/business_objects/store/product_variation_tree.py @@ -13,6 +13,7 @@ Business object for product # internal from business_objects.store.product_variation import Product_Variation from extensions import db +from helpers.helper_app import Helper_App # external @@ -133,16 +134,16 @@ class Product_Variation_Tree(): variations.append(node.variation) return variations def to_preview_str(self): - print(f'Product_Variation_Tree.to_preview_str') + Helper_App.console_log(f'Product_Variation_Tree.to_preview_str') variations = self.get_product_variations() - print(f'variations: {variations}') + Helper_App.console_log(f'variations: {variations}') preview_str = '' for variation in variations: is_first = (preview_str == '') preview_str += f'{variation.variation_type.name_singular}: {variation.name}' if is_first: preview_str += '\n' - print(f'preview_str: {preview_str}') + Helper_App.console_log(f'preview_str: {preview_str}') return preview_str def to_json(self): variations = self.get_product_variations() @@ -179,7 +180,7 @@ class Product_Variation_Container(BaseModel): list_variations = [] for variation in self.variations: list_variations.append(variation.to_json_option()) - print(f'list_variations: {list_variations}') + Helper_App.console_log(f'list_variations: {list_variations}') return list_variations def to_list_variation_type_options(self): list_variation_types = [] diff --git a/business_objects/store/stock_item.py b/business_objects/store/stock_item.py index 20ebebfb..77fabadc 100644 --- a/business_objects/store/stock_item.py +++ b/business_objects/store/stock_item.py @@ -19,6 +19,7 @@ from business_objects.store.product_variation_tree import Product_Variation_Tree from business_objects.store.storage_location import Storage_Location from business_objects.store.store_base import Store_Base from extensions import db +from helpers.helper_app import Helper_App # external from dataclasses import dataclass from typing import ClassVar, Optional @@ -106,7 +107,7 @@ class Stock_Item(db.Model, Store_Base): stock_item.id_permutation = json.get(cls.ATTR_ID_PRODUCT_PERMUTATION, 0) stock_item.id_product = json[cls.ATTR_ID_PRODUCT] stock_item.id_category = json[cls.ATTR_ID_PRODUCT_CATEGORY] - print(f'json: {json}\nhalf stock item: {stock_item}') + Helper_App.console_log(f'json: {json}\nhalf stock item: {stock_item}') stock_item.variation_tree = Product_Variation_Tree.from_json_str(json[cls.FLAG_PRODUCT_VARIATIONS]) stock_item.date_purchased = json[cls.FLAG_DATE_PURCHASED] stock_item.date_received = json[cls.FLAG_DATE_RECEIVED] diff --git a/business_objects/store/storage_location.py b/business_objects/store/storage_location.py index 170291b0..d1831f4e 100644 --- a/business_objects/store/storage_location.py +++ b/business_objects/store/storage_location.py @@ -15,6 +15,7 @@ import lib.argument_validation as av from business_objects.store.plant import Plant from business_objects.store.store_base import Store_Base from extensions import db +from helpers.helper_app import Helper_App # external from typing import ClassVar @@ -74,7 +75,7 @@ class Storage_Location(db.Model, Store_Base): } @classmethod def from_json(cls, json): - print(f'{cls.__name__}.from_json: {json}') + Helper_App.console_log(f'{cls.__name__}.from_json: {json}') location = cls() location.id_location = json[cls.ATTR_ID_STORAGE_LOCATION], location.id_plant = json[cls.ATTR_ID_PLANT], diff --git a/business_objects/store/stripe.py b/business_objects/store/stripe.py index 4dc17f7b..3ed8c54d 100644 --- a/business_objects/store/stripe.py +++ b/business_objects/store/stripe.py @@ -15,7 +15,7 @@ import lib.argument_validation as av from lib import data_types from forms.forms import Form_Basket_Add, Form_Basket_Edit # Form_Product from extensions import db - +from helpers.helper_app import Helper_App # external from datetime import datetime, timedelta import locale @@ -61,7 +61,7 @@ class Stripe_Product(db.Model): av.val_str(id_stripe_product, 'id_stripe_product', _m, max_len=100, v_arg_type=v_arg_type) av.val_str(id_stripe_price, 'id_stripe_price', _m, max_len=100, v_arg_type=v_arg_type) av.full_val_bool(is_subscription, 'is_subscription', _m, v_arg_type=v_arg_type) - print(f'is_subscription: {is_subscription}, {av.input_bool(is_subscription, "is_subscription", _m, v_arg_type=v_arg_type)}') + Helper_App.console_log(f'is_subscription: {is_subscription}, {av.input_bool(is_subscription, "is_subscription", _m, v_arg_type=v_arg_type)}') is_subscription = av.input_bool(is_subscription, "is_subscription", _m, v_arg_type=v_arg_type) if is_subscription: av.val_str(name_recurring_interval, 'name_recurring_interval', _m, max_len=255, v_arg_type=v_arg_type) diff --git a/business_objects/store/supplier.py b/business_objects/store/supplier.py index b4f1481c..4fd39215 100644 --- a/business_objects/store/supplier.py +++ b/business_objects/store/supplier.py @@ -17,6 +17,7 @@ from business_objects.currency import Currency from business_objects.db_base import Get_Many_Parameters_Base from business_objects.store.store_base import Store_Base from extensions import db +from helpers.helper_app import Helper_App # external from pydantic import BaseModel from typing import ClassVar @@ -106,7 +107,7 @@ addresses: {self.addresses} } @classmethod def from_json(cls, json): - print(f'{cls.__name__}.from_json: {json}') + Helper_App.console_log(f'{cls.__name__}.from_json: {json}') supplier = cls() supplier.id_supplier = json[cls.ATTR_ID_SUPPLIER] supplier.id_currency = json[cls.ATTR_ID_CURRENCY] diff --git a/business_objects/store/supplier_address.py b/business_objects/store/supplier_address.py index ddb4013f..8c73f914 100644 --- a/business_objects/store/supplier_address.py +++ b/business_objects/store/supplier_address.py @@ -15,6 +15,7 @@ import lib.argument_validation as av from business_objects.store.store_base import Store_Base from business_objects.region import Region from extensions import db +from helpers.helper_app import Helper_App # external from typing import ClassVar from flask import jsonify @@ -71,7 +72,7 @@ class Supplier_Address(db.Model, Store_Base): {self.FLAG_ACTIVE}: {self.active} ''' def to_json(self): - print(f'{self.__class__.__name__}.to_json\n{self.__dict__}\n{self}') + Helper_App.console_log(f'{self.__class__.__name__}.to_json\n{self.__dict__}\n{self}') return { **self.get_shared_json_attributes(self), self.ATTR_ID_ADDRESS: self.id_address, @@ -88,7 +89,7 @@ class Supplier_Address(db.Model, Store_Base): return jsonify(self.to_json()) @classmethod def from_json(cls, json): - print(f'{cls.__name__}.from_json: {json}') + Helper_App.console_log(f'{cls.__name__}.from_json: {json}') address = cls() address.id_address = json[cls.ATTR_ID_ADDRESS] address.id_supplier = json[cls.ATTR_ID_SUPPLIER] diff --git a/business_objects/store/supplier_purchase_order.py b/business_objects/store/supplier_purchase_order.py index 2c399d8f..4345ccf0 100644 --- a/business_objects/store/supplier_purchase_order.py +++ b/business_objects/store/supplier_purchase_order.py @@ -17,6 +17,7 @@ from business_objects.db_base import Get_Many_Parameters_Base from business_objects.store.store_base import Store_Base from business_objects.store.supplier import Supplier from extensions import db +from helpers.helper_app import Helper_App # external from pydantic import BaseModel from typing import ClassVar, Optional @@ -92,7 +93,7 @@ class Supplier_Purchase_Order(db.Model, Store_Base): } @classmethod def from_json(cls, json): - print(f'{cls.__name__}.from_json: {json}') + Helper_App.console_log(f'{cls.__name__}.from_json: {json}') supplier_purchase_order = cls() supplier_purchase_order.id_order = json[cls.ATTR_ID_SUPPLIER_PURCHASE_ORDER] supplier_purchase_order.id_supplier = json[cls.ATTR_ID_SUPPLIER] @@ -197,7 +198,7 @@ class Supplier_Purchase_Order_Product_Link(db.Model, Store_Base): } @classmethod def from_json(cls, json): - print(f'{cls.__name__}.from_json: {json}') + Helper_App.console_log(f'{cls.__name__}.from_json: {json}') link = cls() link.id_link = json[cls.ATTR_ID_SUPPLIER_PURCHASE_ORDER_PRODUCT_LINK] link.id_order = json[cls.ATTR_ID_SUPPLIER_PURCHASE_ORDER] diff --git a/business_objects/unit_measurement.py b/business_objects/unit_measurement.py index ffa91077..a0b10b11 100644 --- a/business_objects/unit_measurement.py +++ b/business_objects/unit_measurement.py @@ -12,6 +12,7 @@ from business_objects.base import Base from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base from extensions import db # from forms.forms import Form_Filters_User +from helpers.helper_app import Helper_App import lib.argument_validation as av # external from dataclasses import dataclass @@ -78,7 +79,7 @@ class Unit_Measurement(SQLAlchemy_ABC, Base): } @classmethod def from_json(cls, json): - print(f' Unit_Measurement.from_json: {json}') + Helper_App.console_log(f' Unit_Measurement.from_json: {json}') unit = cls() unit.id_unit_measurement = json[cls.ATTR_ID_UNIT_MEASUREMENT] unit.name_singular = json[cls.FLAG_NAME_SINGULAR] diff --git a/business_objects/user.py b/business_objects/user.py index 3674c476..6364fda1 100644 --- a/business_objects/user.py +++ b/business_objects/user.py @@ -12,6 +12,7 @@ from business_objects.base import Base import lib.argument_validation as av from forms.forms import Form_Filters_User from extensions import db +from helpers.helper_app import Helper_App # external from dataclasses import dataclass from typing import ClassVar @@ -64,7 +65,7 @@ class User(db.Model, Base): _m = 'User.from_json' user = User() if json is None: return user - print(f'{_m}\njson: {json}') + Helper_App.console_log(f'{_m}\njson: {json}') user.id_user = json['id_user'] user.id_user_auth0 = json['id_user_auth0'] user.firstname = json['firstname'] @@ -78,16 +79,16 @@ class User(db.Model, Base): user.can_admin_store = av.input_bool(json['can_admin_store'], 'can_admin_store', _m) user.can_admin_user = av.input_bool(json['can_admin_user'], 'can_admin_user', _m) user.is_logged_in = (user.id_user_auth0 is not None) - print(f'user: {user}') + Helper_App.console_log(f'user: {user}') return user - # print(f'user: {user}') + # Helper_App.console_log(f'user: {user}') @staticmethod def from_json_auth0(json): _m = 'User.from_json_auth0' user = User() if json is None: return user - print(f'{_m}\njson: {json}') + Helper_App.console_log(f'{_m}\njson: {json}') user_info = json['userinfo'] user.id_user = None user.id_user_auth0 = user_info['sub'] @@ -102,7 +103,7 @@ class User(db.Model, Base): 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}') + Helper_App.console_log(f'user: {user}') return user def to_json(self): @@ -120,7 +121,7 @@ class User(db.Model, Base): 'can_admin_store': self.can_admin_store, 'can_admin_user': self.can_admin_user } - print(f'as_json: {as_json}') + Helper_App.console_log(f'as_json: {as_json}') return as_json def __repr__(self): diff --git a/config.py b/config.py index cd2a4c35..338a5fb5 100644 --- a/config.py +++ b/config.py @@ -11,6 +11,7 @@ Configuration variables """ # IMPORTS +from lib import argument_validation as av import os from dotenv import load_dotenv, find_dotenv @@ -19,7 +20,7 @@ load_dotenv(find_dotenv()) # CLASSES class Config: # Miscellaneous - DEBUG = False + DEBUG = av.input_bool(os.getenv('DEBUG'), 'DEBUG', 'Config') TESTING = False URL_HOST = os.getenv('URL_HOST') SECRET_KEY = os.getenv('KEY_SECRET_FLASK') # gen cmd: openssl rand -hex 32 @@ -52,7 +53,7 @@ class Config: # id_currency = 1 # id_region_delivery = 1 # Mail - MAIL_DEBUG = True + MAIL_DEBUG = av.input_bool(os.getenv('DEBUG'), 'DEBUG', 'Config') MAIL_SERVER = 'mail.partsltd.co.uk' # 'smtp.gmail.com' MAIL_PORT = 465 # 587 MAIL_USE_TLS = False @@ -83,7 +84,6 @@ elif config_env == 'production': else: raise ValueError("Invalid configuration environment") -# print(f'config: {app_config}\nid auth0 client: {app_config.ID_AUTH0_CLIENT}') # environment variables """ diff --git a/controllers/__pycache__/core.cpython-312.pyc b/controllers/__pycache__/core.cpython-312.pyc index c17381f02f36bc55d23ea2aa8aaa379ea62452ae..d8b344d00cfe44cb26b40e844d8fdaf67bf88c01 100644 GIT binary patch delta 267 zcmdm`w?v=!G%qg~0}wFnlTZJ@k#{jW>_>M-u=5 delta 152 zcmZ3Yze|tzG%qg~0}$}L^QE8M$h(-Gv2XH5_WsEqxWy(HaY%DA<}s!)RRI-DUdJIe z`2@!{7Dk0z43nEUk1@`l?8&9CCMi2#Zl>G@mF;?)^bUj^k2w^x()dDn2%Tk!0rN3tS=6Vop*Fhom^2S(pzgi#gddAF^ZwvF%x%SvK2q=P@zf+PseU8z%sb CGBODO diff --git a/controllers/__pycache__/user.cpython-312.pyc b/controllers/__pycache__/user.cpython-312.pyc index 68f571e2b02af87901ebfd6e1f1971c99e4f6879..0f09b25d3031026ddea1ae89fda272881cf49d05 100644 GIT binary patch delta 1760 zcmZ`(Z)_7~7{9l7*Iw6adtI;Vt=E6hZEV0;2VJ{$|J;E69}6-t+k~kr5Xxl9I7Lk- ze9)vO3v78z+=7Jit#O!ChY=HEa3KVlz*R1`n#G_o@uQ33i&+%!x?MXpUhdxad4JFE zd7j^U_da*C?aqGFve8(C$(P|H@5#?S*G#0Q4+n~lF8)rviqJK9smOlHoFN=(!ZCL^5lB?bwMfMFrxeEWA|JXPkgQ!7 z`krbrQY9Tr_9a_HJ}eQ9S(f{tYqsmd(Tppcc7<;ZWSWN4O~a4bkqiARglQw|X!2-s zK;)Ywq8T0*RR+~W!$~~xn#fm6#ICH#a_RJYr{}h(P30Fl3!y`abBR+T@0W;L@EV+k zjg+ex?u9l(J95H1hB2zciQRP)9X|NYP^p>G%15RQn(0n72p+l_mgo@NC0Y1`HkMn| z*R`-=9Ks^l6rsn2|9<@^cE`RcB1Q;KHArx)R@AFng*k$k%8MrXk<i3Gj2^TN zqBs2)|q6cwYQ)$pgWDJQeRRHDqLh*scLs!#(*P4(+ACHPf1x;uAT<{6rZ zX`^)@D|Sp7VunqMH*?oa-dqLVyazuZ7?s|DA@g7k``Enhdti1dYc5j!KS>Z%ZVRab zHop*PWU4Kk>M6q}cgp8JSA>WlfrodQDqJ&7!Y7P7SMd?!U}n&?=M8)aJBNHqL+99m zh(&E2gbiWSU#SFPbMg*3d4pO^@WVli3;AKfB6oXX%PosY6yJ@DBI-u6DVut<}9=I@qH`w23_>+ zk?25vnK*KN?+qd~xLC9>Ans_ox%W14^L5eJA<>-$&hQO$#^0UxcZ)SWqOVt?`?8$# zDm_nMHpRQMwc+W`_Xjd;by~h=eyq zD~uzo+$6W0UnP(*JDO*Y>ZmXA=hOD=I#+WaX7)>2b z4T!#d621Sa3Da9Mlsiqi6Yd+jTUK+X{$N_Z{m+XvheXeyL>-2ak{!oFzo;4$FI+#A zvMd})c8R{a3?2NI4z8_|8hvPOHGuRdP`-{>UY8nA9TWGCh%de(j*N-ENQOSXw#p)X zYk}lz{*G<|u_SW7UE3SPmh>8Bq}|=E*wXg4GI?>w++Nia!tOS-HS{{Ld%N3c8T`6c z-xI*^Q(Jm!@cUIt}xH=OJf X`38vy!^@5sV&O+e6`~e#{xkA#>V?Rx delta 1601 zcmZ8hUu@H65clUlN$faw;<$<1I8A7iHf`F#Xo0K*l>jYGSwZ5DG+3oQ;0*|@ty)hY zl+Wup|hIKvhRN1 z{qF9&yU+R_4&6<2k6kVXGoQ)d0%sltzv3v|z`;#zgX5GJ+2JhJ)~!$)TEK4NcTn9C z!w{xnS$Z8eN|k|Zi;SCUikAVmiK1fD@Xe8`8@_FkrEF7U;5ycj>W67t%%?asVsn&6 zWF>fLi--!Nk(((s0B(DeD`@4@sB9}_T>%)gJ8{Jc3A@jXP*|9-OQcCg;I@4$-)Xrk zyh4}-U*hDj`eqJwBHL}z8+yGt7;ps933%7>+UuKUP4*d?otd0?Momqhn^2cOrawY+ zv*wuQu^LHGLY4Pj)2?Vaa?OTOOl~M2$@_8%gKS=NU}8WI?7G))ct_^nS*H&dQiX)h zbQxrKMU*}txjwS^emOW$3J&~mq?|fcN}YNlzBfNsCF$Ie!dPKYXW|Cg^OE7O#jnK6 zOsvGjD*kquaZ24xZZtoW|3GJCgA7(U&$aVc&KJ5%Ty*|mJv@^?lRv35A%hIVeWy&( zHH_flFXukwggATJGZe;t3X?;f#ASZ#g~>DLCg2m<=X99;66W{MmlWJ%&!bW3aj7wl z*!VA0-Wu4Q|G+U!!DdMsTR(R^+XO%Ifo4)8)fUTDl`UkRT!IVHTdXxq*+s~5u5{G0 zWIHUhp*5RTz^q;Evg}p?vkuLXjl*3o1rFZFDK@p)a#4F>FQ4QThnlcV*=_Iz-;Vms zDnq>+6*lme=Y~$1P<278dp9v)>M8d)Ja>md^vIGTG_=`}1jaqlrX5y_O#}GM(;M_z zOaz;5o268jwN{YY3~Qb)0$sfWVWAa{3N8567ceD=P!Rb2g-gUq>>_H%)W#IUW{O=_ ziiTd3mTg0;3HVhAq6GXc$jcFLFG3+WDh@B-6hB4iCiM7D`#t$?gAG=_670$ye(n}? zR1GKT4*1$PJ#qq7yi&n)J()XDWj(skX0Yuh$PX{}Evm%>3zruL^_KWj-;%oYp)Tw& z*qwEDbaAd6N|r)Nz4dKf7%^XQ_vQ%}u7(}{|_rO++*23wY5B`LP#eRnvU4S-3&)I#*6)IPX{t_?3cE5-D4$6XWYa}!k=*xtCY>OtU4*v zvg#)4*z3*2h}90Nj^nP(0I`~UgZI#fSmKdw_aQs+7$Flswo|6OY~OkT7McSn0^c{k z78P2<{&$gj;g6OZ$h->!+u)l(Kgz+2z>KSY*NhfYIukR3sVc@h7wi?n}H#V z4aP#yB^)qz7T07CR<+3`93nm`%ry+N8Rjw}j49!VDXU?CiPkdJFl7nA#1V9{NQp3v zS0Xxj7pttcIE!c@bE<^a~o3T)Dh z4U=uya)o({K(4;Uot&RnoS%~#pOc?Hc_Z6Pkp)1}28JgreAii|F0x3?u)4ycHhBfR ztS~=RAa;e#3cU-`mRDG;CSPK=w-LI|A$O5OZh`m;!4=FiYOiqU-Vs;3EUwYZ^ZNrU z6RYO0Vvx(HD?4#99OB}1vS&UdtmI_He8`H`$$qmtM=m&W z!_i&m)HG8__jG<3IRIKt^{45W_Ra(ePGpJ220 WWM@9f$OvSgWM}o{*}O^Ao*4kOBz>*` delta 458 zcmbPf{Lzr_G%qg~0}wdM@ui8fR_Vanp0%qS?VEm9%~lP?j5u~JxIDq(am zLy71lHfcey%RtIh7>bl?8A})^JMv30l`v0^VUuRenOwn^%fWq%wV)_7uVnHMwwD%t zK&1@~PgpoRw63s-eqdr@)x0CFc3s@yqPW2p@$E7jWiE@`b?|)QU|{9y@SUMEL+%2X z#uXOL$*LUoX1o*FXE07E?#R8uAp_KPSzM!+=l2IzCRWW~#o|DNdzBr{7!I0oIw>+A zw3l#_VLl|o>ZG`N0Y@Y&QxePM{TvaKgZXYUN^f@L*JNaro?I`m7Q_*J$;9|_vbIPo zFW&^d88tKVF7WAI;n16WSfm~(!ZRa!hVKPFtt%YblS4%vSb00rdUz)<6rH3l&u~cG qQQcjh;jq24Jdipr&*`DZd|boYLzDT0G9!?ELX*`)Z*!EGJu?7!QEqtv diff --git a/controllers/store/__pycache__/product_category.cpython-312.pyc b/controllers/store/__pycache__/product_category.cpython-312.pyc index a807b8c2c25bbae4453a2432670b7c55e88e93f1..e6c48d09c2a74a8df288acc984130bd4d7e75d8c 100644 GIT binary patch delta 514 zcmZ2zIK_zfG%qg~0}ybpQb_;1k@r3eQyb&t0uCjM6vowzAPEKrMg~rX5>^PCfgy_x z#zN2~958kk*JKk`waI&UMZ{8=YZzuT%w<9`hJSJatGJ>7OgVxs7AX;i@k&G|uV9sp z6^HRtSZkQpu&ri-@PiqY8A^Cyaw-f(I<<@?P^SW&2UP`=2hk}^HH@e(DPf(=$0p6# zI9ZFWQkbU*C!V0gm9cb!G*B8$`vn=33DlUK9L z3iCq+VprI#(7PaQd4O;>8=>nQau+$|7KpD9T){k}_6mpY9dZ53;)cCEzdx`t zu^Rm<26<_^vJ*GMA#P4*2IfN|N>0|yhpbth88!!UM6)uvumHn8Vlx}xb4G52my{-- z;*#3@k3Wu?@#bVd9aeiwL0p=52j6n7Y N0ag#u&DTWjm;nSXQmz01 diff --git a/controllers/store/__pycache__/product_permutation.cpython-312.pyc b/controllers/store/__pycache__/product_permutation.cpython-312.pyc index a212c5724da9b483115c143609a19b2bda4c397a..d0073f6c0540511b116f44b7818e06fe6aed35fc 100644 GIT binary patch delta 589 zcmextJlmA_G%qg~0}ybpQb=#w$m`C^)WSGfoKHzAg>f|_NP>ZZk%5z;gcZVOV8~*d ze34I>n*+}0n!Hg^c=CEy;mN9eB9jlX3S08S8yKFj@Lgw-y2v6m!|n=;)?^6| zSz&&tKEw8XxO?Kk2cNV(NA$O5OZh`m;!4=FiYOiqU-VrytEN;@v^ZNrU z6RYX3VsW66)0LgL7!Gl9I@vQH5>|4uVm@TW3S{463GfdNnf#wuZ1WWkM^?spo5lEy z7)7BW3=CB%pk650?8&c*Luzudz*-!d6b1h?F)=btRuX9u7KS=iZUfJXx(o7lS2*k^ zZx(40g^FKLG~A$n!O-b~yz>w60fz)wZPEQ`@6KvL=?93+_8G-DR?5v(Vo1MfqG6MkWpM7fp delta 511 zcmbPj`q`NGG%qg~0}wdM@ukab^sSR_9%v9Oxn5jVOnZgWxGW>5J3n4K|~ z#l1RszHl(Ga&`F5(3v53flK2Gi{|919QJ0s6WC`kPAKlky}}^_)OA_hq?hOS2UaFl z(_h8nK!bag9nBaHnsGWQG9R>;aFSs@B*W^YxLJTRj+HTKb3UIDBct@@ZTy-*YVsF> zwIGh*e&cH=|}o-UUA0D;#>0{X|>%`7Q`3EResTV0eMg=n9AN z^PCfgy`+ z@)H2pF_OwnmVXF}4En)*o-QrHp&nwQ)NsZ6RPoKPn?W4<5plAcb6BfSfEK(O) zq-NM&VbT1+#KNj`M_lu|xba1C<1OyneKz`B7I*C6`NF}#$`4f-yTWFL-UVsPD=b!% z@3Ol%3ti`syT~E8KzxPZ3g#KLS2%QmCR`TR?&bOYft86>=T|Yvi_?{z_!$oIb2_sy zACgdVvS&VI&kAJUVhQjM4w+ofFSfaaLy?`aZ}K$$4sK{P0E3=y@Rynt71@;p%uVPUA#=m&WbNPVCkyj& YJ8KVn<`b5TK=uiHR!^4A>&3O00kiaw`~Uy| delta 512 zcmZoLziG;QnwOW00SNTu_|l6u@;+qI3Swknn9fiFBq1P$aW$09$iT@^!VDA7VwoJs zCCtb+d4r(LWPUCVmRg{u$u+Ff;=C{=H4HGVwM;cklN$s?_=-hJ1Yy!8!jmts%GQg* z_$jP4OeJD4-Ws;mP`iQ|lo?9Et^~=cFcc}(G9tN;sfKYj!(1kqRg6e(Tn#m>mLZZM zg`t+Qj#N508GT@4IRSU5X$udql= z;*jO#>hPVRGehnIm&O$q&B+EFE@r$F*k>?KDDKF;!Xa}(1kMA=0>M&7{>{Gx z6y^fg(IJqG$MC;M2Oop*{JMm@z-!1p$Qx z@)r~gFYp;%;V|ATB`(aU$>%Q4a7fF^0!STIb~FZ3$Hh54)R>PeSbHckpO9t*vQH?o MdZ=v}=#ra_}H4HHGYME-7CQlR);VTv?5r#>Zh)$lz zDr+hZ#>p@FYv!U%Np zWIi@&#@5MNY$d|HMId+I;!e)bE6&eJjnBzXpS+Ciy~|>tXamC&7QX8&QWsgIW>{Zg zQUAci!m4#gT>ZMZ;YD%7E$Z8KHtJj!x9{Nj!ok4G4^DGELM}xvOC!b zUFVRy$RW2te1+f&<{7nDICOy~To%{t<@x=Am5EjBS24(M)0Lh084mGtIddm)m17<|n_}fIGfes94KA0~V7$#>6oaaW8nf!oTbh4XZ7IxK}HwwnF zFe*&x*PW@^)7^>?enc1qcg6oh!A%bA|NQ!?*uD5kbQ!e6+{YgdMYxXkhb=e VVLmCw2xOm>Vf9qpoF*a13;?I^iwXb$ delta 466 zcmZ2&(PGYbnwOW00SJ!X)F%gv>x0$Q&d9&Or+0-zfAdsvTSjYMcN2y~nobr#>Zp>V wGLSmXs^qTEcU+wv#MWm8ktUp;%*@Aatv&3RPgpPl*(dB+J()N2O3E<<03*k4yZ`_I diff --git a/controllers/store/manufacturing_purchase_order.py b/controllers/store/manufacturing_purchase_order.py index 189d1d20..6445ebd8 100644 --- a/controllers/store/manufacturing_purchase_order.py +++ b/controllers/store/manufacturing_purchase_order.py @@ -30,13 +30,13 @@ routes_store_manufacturing_purchase_order = Blueprint('routes_store_manufacturin @routes_store_manufacturing_purchase_order.route(Model_View_Store_Manufacturing_Purchase_Order.HASH_PAGE_STORE_MANUFACTURING_PURCHASE_ORDERS, methods=['GET']) def manufacturing_purchase_orders(): - print('manufacturing_purchase_orders') + Helper_App.console_log('manufacturing_purchase_orders') try: form_filters = Filters_Manufacturing_Purchase_Order.from_json(request.args) except Exception as e: - print(f'Error: {e}') + Helper_App.console_log(f'Error: {e}') form_filters = Filters_Manufacturing_Purchase_Order() - print(f'form_filters={form_filters}') + Helper_App.console_log(f'form_filters={form_filters}') model = Model_View_Store_Manufacturing_Purchase_Order(form_filters) if not model.is_user_logged_in: return redirect(url_for('routes_core.home')) @@ -80,7 +80,7 @@ def save_manufacturing_purchase_order(): data = Helper_App.get_request_data(request) try: form_filters = Filters_Manufacturing_Purchase_Order.from_json(data[Model_View_Store_Manufacturing_Purchase_Order.FLAG_FORM_FILTERS]) - print(f'form_filters: {form_filters}') + Helper_App.console_log(f'form_filters: {form_filters}') manufacturing_purchase_orders = data[Model_View_Store_Manufacturing_Purchase_Order.FLAG_MANUFACTURING_PURCHASE_ORDER] if len(manufacturing_purchase_orders) == 0: @@ -88,11 +88,11 @@ def save_manufacturing_purchase_order(): Model_View_Store_Manufacturing_Purchase_Order.FLAG_STATUS: Model_View_Store_Manufacturing_Purchase_Order.FLAG_FAILURE, Model_View_Store_Manufacturing_Purchase_Order.FLAG_MESSAGE: f'No stock items.' }) - print(f'manufacturing_purchase_orders={manufacturing_purchase_orders}') + Helper_App.console_log(f'manufacturing_purchase_orders={manufacturing_purchase_orders}') objs_manufacturing_purchase_order = [] for manufacturing_purchase_order in manufacturing_purchase_orders: objs_manufacturing_purchase_order.append(Manufacturing_Purchase_Order.from_json(manufacturing_purchase_order)) - print(f'objs_manufacturing_purchase_order={objs_manufacturing_purchase_order}') + Helper_App.console_log(f'objs_manufacturing_purchase_order={objs_manufacturing_purchase_order}') save_errors = Model_View_Store_Manufacturing_Purchase_Order.save_manufacturing_purchase_orders(data.get('comment', 'No comment'), objs_manufacturing_purchase_order) if len(save_errors) > 0: return jsonify({ diff --git a/controllers/store/pay_stripe.py b/controllers/store/pay_stripe.py index 2a020f7f..9ae08d65 100644 --- a/controllers/store/pay_stripe.py +++ b/controllers/store/pay_stripe.py @@ -11,10 +11,7 @@ Initializes the Flask application, sets the configuration based on the environme """ # IMPORTS -# VARIABLE INSTANTIATION -# METHODS - -# IMPORTS +from helpers.helper_app import Helper_App import os import stripe import json @@ -28,7 +25,7 @@ key_public = os.environ.get("KEY_PUBLIC_STRIPE") # 'pk_test_51OGrxlL7BuLKjoMpfpf # METHODS def create_product_price(): - print(f'stripe.api_key = {stripe.api_key}') + Helper_App.console_log(f'stripe.api_key = {stripe.api_key}') starter_subscription = stripe.Product.create( name="Starter Subscription", description="$12/Month subscription", @@ -42,8 +39,8 @@ def create_product_price(): ) # Save these identifiers - print(f"Success! Here is your starter subscription product id: {starter_subscription.id}") - print(f"Success! Here is your starter subscription price id: {starter_subscription_price.id}") + Helper_App.console_log(f"Success! Here is your starter subscription product id: {starter_subscription.id}") + Helper_App.console_log(f"Success! Here is your starter subscription price id: {starter_subscription_price.id}") return starter_subscription_price.id @@ -54,7 +51,7 @@ def get_file_str(f_address): # Ensure environment variables are set. price = os.getenv('PRICE') if price is None or price == 'price_12345' or price == '': - print('You must set a Price ID in .env. Please see the README.') + Helper_App.console_log('You must set a Price ID in .env. Please see the README.') exit(0) # For sample support and debugging, not required for production: @@ -152,10 +149,10 @@ def webhook_received(): event_type = request_data['type'] data_object = data['object'] - print('event ' + event_type) + Helper_App.console_log('event ' + event_type) if event_type == 'checkout.session.completed': - print('🔔 Payment succeeded!') + Helper_App.console_log('🔔 Payment succeeded!') return jsonify({Model_View_Base.FLAG_STATUS: Model_View_Base.FLAG_SUCCESS}) diff --git a/controllers/store/product.py b/controllers/store/product.py index 9c51ebf0..be96ecdf 100644 --- a/controllers/store/product.py +++ b/controllers/store/product.py @@ -31,21 +31,21 @@ routes_store_product = Blueprint('routes_store_product', __name__) """ @routes_store_product.route(Model_View_Store_Product.HASH_PAGE_STORE_PRODUCTS, methods=['GET']) def products(): - print('products') - print(f'request.args={request.args}') + Helper_App.console_log('products') + Helper_App.console_log(f'request.args={request.args}') user = DataStore_Store_Product.get_user_session() filters = Parameters_Product.get_default(user.id_user) have_changed_filters = False arg_filter_is_not_empty = request.args.get(Model_View_Store_Product.FLAG_IS_NOT_EMPTY, None) have_changed_filters = have_changed_filters or arg_filter_is_not_empty is None - print(f'arg_filter_is_not_empty={arg_filter_is_not_empty}') + Helper_App.console_log(f'arg_filter_is_not_empty={arg_filter_is_not_empty}') filters.is_not_empty = filters.is_not_empty if arg_filter_is_not_empty is None else av.input_bool(arg_filter_is_not_empty, 'is_not_empty', 'filter') arg_filter_active = request.args.get(Model_View_Store_Product.FLAG_ACTIVE, None) have_changed_filters = have_changed_filters or arg_filter_active is None - print(f'arg_filter_active={arg_filter_active}') + Helper_App.console_log(f'arg_filter_active={arg_filter_active}') filters.active = filters.active if arg_filter_active is None else av.input_bool(arg_filter_active, 'active', 'filter') if have_changed_filters: - print('redirecting') + Helper_App.console_log('redirecting') return redirect(url_for('routes_store_product.products', **filters.to_json())) model = Model_View_Store_Product(filters) return render_template('pages/store/_products.html', model = model) @@ -76,7 +76,7 @@ def get_Filters_Product(data_request): def save(): data = Helper_App.get_request_data(request) # form_filters = None - print(f'data={data}') + Helper_App.console_log(f'data={data}') try: form_filters = get_Filters_Product(data) if not form_filters.validate_on_submit(): @@ -90,11 +90,11 @@ def save(): for category in categories: objsCategory.append(Product.from_json(category)) # model_save = Model_View_Store_Product() # filters_product=filters_form) - print(f'objsCategory={objsCategory}') + Helper_App.console_log(f'objsCategory={objsCategory}') Model_View_Store_Product.save_categories(data.get('comment', 'No comment'), objsCategory) model_return = Model_View_Store_Product(filters=filters_form) - print('nips') + Helper_App.console_log('nips') return jsonify({Model_View_Store_Product.FLAG_STATUS: Model_View_Store_Product.FLAG_SUCCESS, 'Success': True, Model_View_Store_Product.FLAG_DATA: model_return.category_list.to_json()}) except Exception as e: return jsonify({Model_View_Store_Product.FLAG_STATUS: Model_View_Store_Product.FLAG_FAILURE, Model_View_Store_Product.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'}) @@ -103,13 +103,13 @@ def save(): @routes_store_product.route(Model_View_Store_Product.HASH_PAGE_STORE_PRODUCTS, methods=['GET']) def products(): - print('products') + Helper_App.console_log('products') try: form_filters = Filters_Product.from_json(request.args) except Exception as e: - print(f'Error: {e}') + Helper_App.console_log(f'Error: {e}') form_filters = Filters_Product() - print(f'form_filters={form_filters}') + Helper_App.console_log(f'form_filters={form_filters}') model = Model_View_Store_Product(form_filters) if not model.is_user_logged_in: # return redirect(url_for('routes_user.login', data = jsonify({ Model_View_Store_Product.FLAG_CALLBACK: Model_View_Store_Product.HASH_PAGE_STORE_PRODUCTS }))) @@ -150,7 +150,7 @@ def save_product(): Model_View_Store_Product.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}' }) # filters_form = Filters_Product.from_form(form_filters) - print(f'form_filters: {form_filters}') + Helper_App.console_log(f'form_filters: {form_filters}') products = data[Model_View_Store_Product.FLAG_PRODUCT] if len(products) == 0: @@ -162,13 +162,13 @@ def save_product(): for product in products: objsProduct.append(Product.from_json(product)) # model_save = Model_View_Store_Product() # filters_product=filters_form) - print(f'objsProduct={objsProduct}') + Helper_App.console_log(f'objsProduct={objsProduct}') save_errors = Model_View_Store_Product.save_products(data.get('comment', 'No comment'), objsProduct) model_return = Model_View_Store_Product(form_filters=form_filters) if not model_return.is_user_logged_in: raise Exception('User not logged in') - print('nips') + Helper_App.console_log('nips') return jsonify({ Model_View_Store_Product.FLAG_STATUS: Model_View_Store_Product.FLAG_SUCCESS, Model_View_Store_Product.FLAG_DATA: model_return.category_list.to_json() diff --git a/controllers/store/product_category.py b/controllers/store/product_category.py index 9579999a..9f071102 100644 --- a/controllers/store/product_category.py +++ b/controllers/store/product_category.py @@ -30,27 +30,27 @@ routes_store_product_category = Blueprint('routes_store_product_category', __nam @routes_store_product_category.route(Model_View_Store_Product_Category.HASH_PAGE_STORE_PRODUCT_CATEGORIES, methods=['GET']) def categories(): - print('categories') + Helper_App.console_log('categories') # data = Helper_App.get_request_data(request) try: form_filters = Filters_Product_Category.from_json(request.args) except Exception as e: - print(f'Error: {e}') + Helper_App.console_log(f'Error: {e}') form_filters = Filters_Product_Category() - print(f'form_filters={form_filters}') + Helper_App.console_log(f'form_filters={form_filters}') """ filters = Filters_Product_Category.get_default() have_changed_filters = False arg_filter_is_not_empty = request.args.get(Model_View_Store_Product_Category.FLAG_IS_NOT_EMPTY, None) have_changed_filters = have_changed_filters or arg_filter_is_not_empty is None - print(f'arg_filter_is_not_empty={arg_filter_is_not_empty}') + Helper_App.console_log(f'arg_filter_is_not_empty={arg_filter_is_not_empty}') filters.is_not_empty = filters.is_not_empty if arg_filter_is_not_empty is None else av.input_bool(arg_filter_is_not_empty, 'is_not_empty', 'filter_category') arg_filter_active = request.args.get(Model_View_Store_Product_Category.FLAG_ACTIVE, None) have_changed_filters = have_changed_filters or arg_filter_active is None - print(f'arg_filter_active={arg_filter_active}') + Helper_App.console_log(f'arg_filter_active={arg_filter_active}') filters.active = filters.active if arg_filter_active is None else av.input_bool(arg_filter_active, 'active', 'filter_category') if have_changed_filters: - print('redirecting') + Helper_App.console_log('redirecting') return redirect(url_for('routes_store_product_category.categories', **filters.to_json())) """ model = Model_View_Store_Product_Category(form_filters) @@ -107,7 +107,7 @@ def save_category(): for category in categories: objsCategory.append(Product_Category.from_json(category)) # model_save = Model_View_Store_Product_Category() # filters_product=filters_form) - print(f'objsCategory={objsCategory}') + Helper_App.console_log(f'objsCategory={objsCategory}') Model_View_Store_Product_Category.save_categories(data.get('comment', 'No comment'), objsCategory) model_return = Model_View_Store_Product_Category(form_filters=form_filters) diff --git a/controllers/store/product_permutation.py b/controllers/store/product_permutation.py index 3b0a9195..87e70084 100644 --- a/controllers/store/product_permutation.py +++ b/controllers/store/product_permutation.py @@ -88,13 +88,13 @@ def permutation_save(): @routes_store_product_permutation.route(Model_View_Store_Product_Permutation.HASH_PAGE_STORE_PRODUCT_PERMUTATIONS, methods=['GET']) def permutations(): - print('permutations') + Helper_App.console_log('permutations') try: form_filters = Filters_Product_Permutation.from_json(request.args) except Exception as e: - print(f'Error: {e}') + Helper_App.console_log(f'Error: {e}') form_filters = Filters_Product_Permutation() - print(f'form_filters={form_filters}') + Helper_App.console_log(f'form_filters={form_filters}') model = Model_View_Store_Product_Permutation(form_filters) if not model.is_user_logged_in: # return redirect(url_for('routes_user.login', data = jsonify({ Model_View_Store_Product_Permutation.FLAG_CALLBACK: Model_View_Store_Product_Permutation.HASH_PAGE_STORE_PRODUCT_PERMUTATIONS }))) @@ -135,7 +135,7 @@ def save_permutation(): Model_View_Store_Product_Permutation.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}' }) # filters_form = Filters_Product_Permutation.from_form(form_filters) - print(f'form_filters: {form_filters}') + Helper_App.console_log(f'form_filters: {form_filters}') permutations = data[Model_View_Store_Product_Permutation.FLAG_PRODUCT_PERMUTATION] if len(permutations) == 0: @@ -147,13 +147,13 @@ def save_permutation(): for permutation in permutations: objsPermutation.append(Product_Permutation.from_json(permutation)) # model_save = Model_View_Store_Product_Permutation() # filters_product=filters_form) - print(f'objsPermutation={objsPermutation}') + Helper_App.console_log(f'objsPermutation={objsPermutation}') Model_View_Store_Product_Permutation.save_permutations(data.get('comment', 'No comment'), objsPermutation) model_return = Model_View_Store_Product_Permutation(form_filters=form_filters) if not model_return.is_user_logged_in: raise Exception('User not logged in') - print('nips') + Helper_App.console_log('nips') return jsonify({ Model_View_Store_Product_Permutation.FLAG_STATUS: Model_View_Store_Product_Permutation.FLAG_SUCCESS, Model_View_Store_Product_Permutation.FLAG_DATA: model_return.category_list.to_json() diff --git a/controllers/store/stock_item.py b/controllers/store/stock_item.py index b39a2c84..e71142c7 100644 --- a/controllers/store/stock_item.py +++ b/controllers/store/stock_item.py @@ -30,13 +30,13 @@ routes_store_stock_item = Blueprint('routes_store_stock_item', __name__) @routes_store_stock_item.route(Model_View_Store_Stock_Item.HASH_PAGE_STORE_STOCK_ITEMS, methods=['GET']) def stock_items(): - print('stock_items') + Helper_App.console_log('stock_items') try: form_filters = Filters_Stock_Item.from_json(request.args) except Exception as e: - print(f'Error: {e}') + Helper_App.console_log(f'Error: {e}') form_filters = Filters_Stock_Item() - print(f'form_filters={form_filters}') + Helper_App.console_log(f'form_filters={form_filters}') model = Model_View_Store_Stock_Item(form_filters) if not model.is_user_logged_in: # return redirect(url_for('routes_user.login', data = jsonify({ Model_View_Store_Stock_Item.FLAG_CALLBACK: Model_View_Store_Stock_Item.HASH_PAGE_STORE_STOCK_ITEMS }))) @@ -108,7 +108,7 @@ def save_stock_item(): }) """ # filters_form = Filters_Stock_Item.from_form(form_filters) - print(f'form_filters: {form_filters}') + Helper_App.console_log(f'form_filters: {form_filters}') stock_items = data[Model_View_Store_Stock_Item.FLAG_STOCK_ITEM] if len(stock_items) == 0: @@ -116,12 +116,12 @@ def save_stock_item(): Model_View_Store_Stock_Item.FLAG_STATUS: Model_View_Store_Stock_Item.FLAG_FAILURE, Model_View_Store_Stock_Item.FLAG_MESSAGE: f'No stock items.' }) - print(f'stock_items={stock_items}') + Helper_App.console_log(f'stock_items={stock_items}') objs_stock_item = [] for stock_item in stock_items: objs_stock_item.append(Stock_Item.from_json(stock_item)) # model_save = Model_View_Store_Stock_Item() # filters_product=filters_form) - print(f'objs_stock_item={objs_stock_item}') + Helper_App.console_log(f'objs_stock_item={objs_stock_item}') save_errors = Model_View_Store_Stock_Item.save_stock_items(data.get('comment', 'No comment'), objs_stock_item) if len(save_errors) > 0: return jsonify({ diff --git a/controllers/store/supplier.py b/controllers/store/supplier.py index 2242ab57..e546ad64 100644 --- a/controllers/store/supplier.py +++ b/controllers/store/supplier.py @@ -30,13 +30,13 @@ routes_store_supplier = Blueprint('routes_store_supplier', __name__) @routes_store_supplier.route(Model_View_Store_Supplier.HASH_PAGE_STORE_SUPPLIERS, methods=['GET']) def suppliers(): - print('suppliers') + Helper_App.console_log('suppliers') try: form_filters = Filters_Supplier.from_json(request.args) except Exception as e: - print(f'Error: {e}') + Helper_App.console_log(f'Error: {e}') form_filters = Filters_Supplier() - print(f'form_filters={form_filters}') + Helper_App.console_log(f'form_filters={form_filters}') model = Model_View_Store_Supplier(form_filters) if not model.is_user_logged_in: return redirect(url_for('routes_core.home')) @@ -80,7 +80,7 @@ def save_supplier(): data = Helper_App.get_request_data(request) try: form_filters = Filters_Supplier.from_json(data[Model_View_Store_Supplier.FLAG_FORM_FILTERS]) - print(f'form_filters: {form_filters}') + Helper_App.console_log(f'form_filters: {form_filters}') suppliers = data[Model_View_Store_Supplier.FLAG_SUPPLIER] if len(suppliers) == 0: @@ -88,11 +88,11 @@ def save_supplier(): Model_View_Store_Supplier.FLAG_STATUS: Model_View_Store_Supplier.FLAG_FAILURE, Model_View_Store_Supplier.FLAG_MESSAGE: f'No stock items.' }) - print(f'suppliers={suppliers}') + Helper_App.console_log(f'suppliers={suppliers}') objs_supplier = [] for supplier in suppliers: objs_supplier.append(Supplier.from_json(supplier)) - print(f'objs_supplier={objs_supplier}') + Helper_App.console_log(f'objs_supplier={objs_supplier}') save_errors = Model_View_Store_Supplier.save_suppliers(data.get('comment', 'No comment'), objs_supplier) if len(save_errors) > 0: diff --git a/controllers/store/supplier_purchase_order.py b/controllers/store/supplier_purchase_order.py index 2c0dfaae..feadad88 100644 --- a/controllers/store/supplier_purchase_order.py +++ b/controllers/store/supplier_purchase_order.py @@ -30,13 +30,13 @@ routes_store_supplier_purchase_order = Blueprint('routes_store_supplier_purchase @routes_store_supplier_purchase_order.route(Model_View_Store_Supplier_Purchase_Order.HASH_PAGE_STORE_SUPPLIER_PURCHASE_ORDERS, methods=['GET']) def supplier_purchase_orders(): - print('supplier_purchase_orders') + Helper_App.console_log('supplier_purchase_orders') try: form_filters = Filters_Supplier_Purchase_Order.from_json(request.args) except Exception as e: - print(f'Error: {e}') + Helper_App.console_log(f'Error: {e}') form_filters = Filters_Supplier_Purchase_Order() - print(f'form_filters={form_filters}') + Helper_App.console_log(f'form_filters={form_filters}') model = Model_View_Store_Supplier_Purchase_Order(form_filters) if not model.is_user_logged_in: return redirect(url_for('routes_core.home')) @@ -80,7 +80,7 @@ def save_supplier_purchase_order(): data = Helper_App.get_request_data(request) try: form_filters = Filters_Supplier_Purchase_Order.from_json(data[Model_View_Store_Supplier_Purchase_Order.FLAG_FORM_FILTERS]) - print(f'form_filters: {form_filters}') + Helper_App.console_log(f'form_filters: {form_filters}') supplier_purchase_orders = data[Model_View_Store_Supplier_Purchase_Order.FLAG_SUPPLIER_PURCHASE_ORDER] if len(supplier_purchase_orders) == 0: @@ -88,11 +88,11 @@ def save_supplier_purchase_order(): Model_View_Store_Supplier_Purchase_Order.FLAG_STATUS: Model_View_Store_Supplier_Purchase_Order.FLAG_FAILURE, Model_View_Store_Supplier_Purchase_Order.FLAG_MESSAGE: f'No stock items.' }) - print(f'supplier_purchase_orders={supplier_purchase_orders}') + Helper_App.console_log(f'supplier_purchase_orders={supplier_purchase_orders}') objs_supplier_purchase_order = [] for supplier_purchase_order in supplier_purchase_orders: objs_supplier_purchase_order.append(Supplier_Purchase_Order.from_json(supplier_purchase_order)) - print(f'objs_supplier_purchase_order={objs_supplier_purchase_order}') + Helper_App.console_log(f'objs_supplier_purchase_order={objs_supplier_purchase_order}') save_errors, save_warnings = Model_View_Store_Supplier_Purchase_Order.save_supplier_purchase_orders(data.get('comment', 'No comment'), objs_supplier_purchase_order) if len(save_errors) > 0: return jsonify({ diff --git a/controllers/user.py b/controllers/user.py index 027d5cc4..862d6ac3 100644 --- a/controllers/user.py +++ b/controllers/user.py @@ -38,27 +38,27 @@ def login(): data = request.json except: data = {} - print(f'data={data}') + Helper_App.console_log(f'data={data}') # callback_login = F'{Model_View_Base.HASH_CALLBACK_LOGIN}{data.get(Model_View_Base.FLAG_CALLBACK, Model_View_Base.HASH_PAGE_HOME)}' # encoded_path = quote(data.get(Model_View_Base.FLAG_CALLBACK, Model_View_Base.HASH_PAGE_HOME)) uri_redirect = url_for('routes_user.login_callback', _external=True) # , subpath=encoded_path # uri_redirect = f'{current_app.URL_HOST}/login_callback?subpath={data.get(Model_View_Base.FLAG_CALLBACK, Model_View_Base.HASH_PAGE_HOME)}' - print(f'redirect uri: {uri_redirect}') + Helper_App.console_log(f'redirect uri: {uri_redirect}') hash_callback = data.get(Model_View_Base.FLAG_CALLBACK, Model_View_Base.HASH_PAGE_HOME) - print(f'hash_callback: {hash_callback}') + Helper_App.console_log(f'hash_callback: {hash_callback}') red = oauth.auth0.authorize_redirect( redirect_uri = uri_redirect, state = quote(hash_callback) ) - print(f'redirect: {red}') + Helper_App.console_log(f'redirect: {red}') headers = red.headers['Location'] - print(f'headers: {headers}') + Helper_App.console_log(f'headers: {headers}') parsed_url = urlparse(headers) query_params = parse_qs(parsed_url.query) - print(f""" + Helper_App.console_log(f""" OAuth Authorize Redirect URL: Base URL: {parsed_url.scheme}://{parsed_url.netloc}{parsed_url.path} @@ -76,25 +76,25 @@ def login_callback(): if has_error: error_description = request.args.get(Model_View_User.FLAG_ERROR_DESCRIPTION_OAUTH) error_text = f'Error: {error_state}: {error_description}' - print(error_text) + Helper_App.console_log(error_text) return login() - # print(f'code: {code}') + # Helper_App.console_log(f'code: {code}') token = None try: token = oauth.auth0.authorize_access_token() except Exception as e: # Log the error for debugging - print(f"Error: {str(e)}") + Helper_App.console_log(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}') + Helper_App.console_log(f'str(type(token)) = {str(type(token))}') + Helper_App.console_log(f'token = {token}') userinfo = token.get('userinfo') - print(f'user info: {userinfo}') + Helper_App.console_log(f'user info: {userinfo}') # id_user = token.get('sub') id_user = userinfo.get('sub') - print(f'user ID: {id_user}') + Helper_App.console_log(f'user ID: {id_user}') """ user = User.from_json_auth0(token) # datastore_user.get_user_auth0() user_filters = User_Filters.from_user(user) @@ -102,30 +102,30 @@ def login_callback(): 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.FLAG_USER}') + Helper_App.console_log('User logged in') + Helper_App.console_log(f'user ({str(type(user))}): {user}') + Helper_App.console_log(f'user key: {Model_View_Base.FLAG_USER}') user_json = user.to_json() session[Model_View_Base.FLAG_USER] = user_json - print(f'user stored on session') + Helper_App.console_log(f'user stored on session') except: - print(f'User not found: {user_filters}\nDatabase query error: {errors}') + Helper_App.console_log(f'User not found: {user_filters}\nDatabase query error: {errors}') try: hash_callback = token.get('hash_callback') if hash_callback is None: - print('hash is none') + Helper_App.console_log('hash is none') state = request.args.get('state') - print(f'state: {state}') + Helper_App.console_log(f'state: {state}') hash_callback = state # .get('hash_callback') - print(f'hash_callback: {hash_callback}') + Helper_App.console_log(f'hash_callback: {hash_callback}') except: - print("get hash callback failed") + Helper_App.console_log("get hash callback failed") # id_user = get_id_user() # 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.FLAG_USER]}') + Helper_App.console_log(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}'}) @@ -141,7 +141,7 @@ def logout(): # quote_via=quote_plus, ) current_app.logger.debug(f"Redirecting to {url_logout}") - print(f"Redirecting to {url_logout}") + Helper_App.console_log(f"Redirecting to {url_logout}") return redirect(url_logout) @routes_user.route("/logout_callback") # / @@ -153,18 +153,18 @@ def logout_callback(): try: hash_callback = token.get('hash_callback') if hash_callback is None: - print('hash is none') + Helper_App.console_log('hash is none') state = request.args.get('state') - print(f'state: {state}') + Helper_App.console_log(f'state: {state}') hash_callback = state # .get('hash_callback') - print(f'hash_callback: {hash_callback}') + Helper_App.console_log(f'hash_callback: {hash_callback}') except: - print("get hash callback failed") + Helper_App.console_log("get hash callback failed") # id_user = get_id_user() # 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.FLAG_USER]}') + Helper_App.console_log(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}'}) diff --git a/datastores/__pycache__/datastore_base.cpython-312.pyc b/datastores/__pycache__/datastore_base.cpython-312.pyc index bd525007b83a4854682f9c82d77a3645b7130046..ba38235c7b8d5853b715a61b849748fea6d98ced 100644 GIT binary patch delta 3881 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 delta 3238 zcmd^BYit|G5xzT$?!L zhTm%Zv;|geE+*3mtTu43b6DE~=e3t;5dv(tNkHc{^^`Q8FG^%vk_e~RDBT2?*kg1z z{DtkJz2K}L(i}u(frCW-OO1TlRIV$3Y30bup6jgKe?;DWR2Gg^*%9c{^;q~aTd`GG zS@2icrgsh21zz$&N!O@5haQ%x5|yFhMb2T8I*OZ{qj2pgRueJ&OV=4|pP^=`2s3h4 z%%{)zq;z3ATl5vu#h5Rml6H_)b`t18h|p3u{uM9;luz=)n11I#mI%5K&Qb3Qmc{&q zd{ywQaYoq^TzTYb;!5IHs8^u76!c8LY(Sw&1~quIU?@A29GweH3sIq6F2lnap$&c_e2#B;$72JbK?i2T%O-9k zM0?PM5+JDu-Z!*s?4-XJ9AYQE3l58MeeABm09+Fv)OfL9b3v!U1r}qwW(vE7lW@S; zD+py>Wk_~JWudjow!xCoqv01OtE>lpVH_S2%3LL0K^{b^Y;=va-DbmYvf-7}Rkq_# zERRD6D;*okw~dzD#>kt-$ZDIs`}i&6LkpU>jrL{tl6yh3#%{Vym>v*?a($(_(kKgo zDjP(XFch@G8z!B`hl@&5@RZKtn#blcRou)9A=14J!I0a-6t(b})x{JUxZmu8ubcZC z#Er;kab&Ij328Ey$P^~?$ot=${j>}2m>a}a)JbgwA_St)Xc@p`@UW%#(TgZ3G$Wj& za9^^}S!KJ{4CcirFFbi^?DE936F&@I>v+E7mZ$%gAttji$%nSdyF|y127jdg;V`0d zY*k2#Pc1>%X*JUf+~;<|Ppy`^!cJT?>7=Yym1DDg$ZT;*+_wGJ-P`XBg+>Y7WrNKM zzYdvAC2C7KTUV+(C*m|`ZC-;JCs)3dcAhG#z#DeM32i-Gw^`tiHV;_rR=)ABO?}Y` zy>>6%2ani2uwdU@B9n2$&+T4ye;t`sS+m`O>@#%xwuS~NY1b@!Z>=TOMJlB)u@|Z5 zR9g$9H%Bv>0Gz^gJlF7V4D_YOJ@m^^Ydm1A(YlCfBVn7>sn5~c^i`aqrow_y(~jp0 zQ|Tl&l9So#T)rT+qfY98dB-R+{LhXc-4A-F3!Sz&+q$ozvM`El!OFl#78vB4Qp=9X zLQ|CuU{@Bya`S*39+ZVWRdxuLoFT1IHnmi_2)yD9n~dfCva?fmbje)@WYfVacL-=# zNW|KLfo&v?TWf`Mz%Fq#TJ-#^^3;xL*?NLQ|Yb*%57E73pZW< z##ego@7U+3UiH`S_o`lvcI|hlUUR6i4U<6|&4SzgH2lcz5>wl9jpb4gOS~DTLL$w< zQz4I-(%cJbNu4oZHFd%}Aw7K8URgTz`(^a!5M|=2z#Aq^^E)){k^yzd~IzaTw4blN`_=6)G^^gb; zBSd)V2x-p|*o9EzN2RgpTsmJ&q{fp)Xd{+e`=B}C32v0Vbq&?vS)N;(yJc@#;1o6nR*tR=$wE(+ z-2u~q5uV37`&eaUvj~40?F|i<)oY?cwX3=-x=Lwv$LjR8ndfI#CuCdfEpcF7Me~D@ zXm!F@g0?!&wQn!vgZBSRURi-}>C!9NJ%?#I8-)*i4)}3I1gRx}ocmsjFZK;oNDP6e z36KjWVv#t~COnj$A#k3+XQ>AtwFKt25scW>5m+E_fxtHj{1?ti-y%kzVVZh6KVC$J zp{mB>qbNc8(zl7_B7rhOfu|@~ju^1kU5y;nd_qJM@KNORh!?A}18_Y01;mT44zA*j z-Ct#6a5;MTe;{6~<~wAGDJZw@m?QO~#^EV0jwf^J;>pRBq@3QpM6OR}M+=2b@xx@$ zD1li5O9UziH9nD0?2_qhHj%&wpa-SO1MohHJYO~fOrpG#D87&I@jP`$Q>SMC(Jr!T zZrwy_On+zm>edfc*jgv8_5Cz9?=XxywkgCGoNCMQJ{+&Oj5JG^;Dfdvy7`8u9iP|_ zc9`Zc_q(xsq#|;>^@|eoV3uiIsrD6jG0sSA?>;PuRiSWNJE_9+F<9C@nrjaf^?`A3A!$ L(%Dw$!|s0o{hl6G diff --git a/datastores/__pycache__/datastore_store_base.cpython-312.pyc b/datastores/__pycache__/datastore_store_base.cpython-312.pyc index 8e01e1fb6ee6e664ff0d742a4f2c1f6c0e46f15d..ee74182a2de1fcdefb861b27497194b0bd416601 100644 GIT binary patch delta 4194 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 diff --git a/datastores/__pycache__/datastore_store_basket.cpython-312.pyc b/datastores/__pycache__/datastore_store_basket.cpython-312.pyc index 6dd4986506e3993d92b6034690a89a63f67f1ffc..d5c5b5616504c9a20129e2cdc42e85f824b88e3e 100644 GIT binary patch delta 1818 zcmZuxTWl0n7@jj_%k0j~-e&KYZnsOjU7>8Rw0oi5a#0d)g%G17Wzy^}rNivS+0js$ zicu3aA%GqeNCMr8hCUzUsG8|NQ^= z-_C!|`EBe`#`-NyTQF_i|G0B@Z}?rS4~RG81UTmslBIsOA7BMgz=Z*JK<9((pvK+8 zP-&PQE{(7wr5)@J9pe#3OJnR*MUk7VR-2F7{s3Srd|=uFMw(1} z8MOCk-eMfSwYd(Gu$R~a#$bu~IV)_&u*+K63uX!E88pJXU&C*-Pymxm z@N9bsUNSqts`QyTOqvZ3iG(>z;5`dXKl^xK=-A9aza`lDe>tQly}Pxz`^YeS!xDHR zZo?9%lN*CFW_i<9Y(ss>nY11>~`CY{W|9vz2FbXUf|ZHA4xCH z<48<8*N;LbdC$6&AuUjn-;ntLJZ}rZamv|pZ(}4gJVwPp7*?%;P>qx#2DacbBEJq~ zijTre)*$?bB3qvDF69INNsTLu>JFS)HS!MpD^pbY8HX-lN^u=Vb35?4l!&&tiFe+KbwiQU)64Y%b`s z`5gnA-nX%UNKp3iSp&PywQC&GEaULFEovLm3SXa5u6f=z2EbtREBmW}iHZTuYlX~L z%C(A6bHCFMKnfO_rxV*Wqd1Pp1R|4&>_TKWB56c2h@_y(Yyr>1znHl8IE~PuI zWDY6m!%A#QrH_Jp9h#EBo(Ky$>CP zIq|0pGc&Cd@HKiGJ|!}!5<{@$4Lp`jXq-?YS(Vrc-}esm9R!z5_w0dXd(UlqPs6+D zz7@C`SfrMAe_{IC{H1y6tPJCx*yTjjY%> zZl+wWNHfx$HgAp-w;~g|KjIl=r#UV!%+zZ6q9AZw0*Ko+Z4G^fIWdV)`u~bZKfLT4 zAkjn8b%}9!$2SJ1nv_3znQ-qPCy(Wos)#3_XsjZlFAF%`FM&F6pi4a6}zA#gk=JH}xznfi1 z*)Gjj=gPCIC$I%!^#&41(rZUe{Y_*`mBLFxaa_EjZBe(im*Iop-nO5x1RM$tZbHz1 E0lV6uW&i*H delta 1512 zcmY*ZU2M}<6uvi2QrEE^CynF$HneG*riCWy4^7k3G1Re*l}=3BG(|8#ae#&-?Hr>m zn!8rhB;W;t4uVMRCuo}1l}X!_*F9`66A~|$@FWx=ZHTA+Jn%ZCq4|bdp?>)8Ip00! zo*$okpUwT5=I*g9jg0T@zv;8V&^6A7&-@spaL!UpWD^pWEX8CtX{?@Nsx*t;h-032r5X#O~ zE%89}3%qJ+2Ce^KJPMS35KlGt*~{2IWLU_&uPa}dO<$!4JanwbYdXQ0G+_*sx z;VyV&55WUExXb04;WA{n%sYZR7K$U%X13eRPjna_JKO?ihUu&Y7tqWc?uEn5Xi{=_ za#kG$PshxZ))_@K<$@2k`4DJ~+bZ=c-SCu&;vn>~VSm^(kv!&spJ0_KM2y`4lvySt z399oJ+SQ|e(@CXNyV`C3mUUirE}|1(A++vN*+LZVvN1dePuMVy0msE+Bc@+xRXu(~ zSr?QslPm0n<6J}-H}%e1NJ5Ppwo0Pvg7;{jSMsUe-I=L;VG?*}#P+on8BKo88E%&u zfK8_jKQF1_WR|3WD(-evrp+*_X!b#Jo?kR3X;~E)(N$N@au($*CybV^yObHzx{wBj z9}{8*>+6h_6jXhM44mTqaFQ3`3eP&@Mnaw6vC!P+(-^0kk6j;QYER3yCa;v0rqb)j zI1N`khvTFj@&N)11P&5-nZO|evjj2(((s>W5WfopLd=-+Bf>|<%>OD(MTl)>uQ9xv z=npn=$?}k5Ywnu0c2wgAbSerF@3E*$^Tf5$16q7RbHAiB2Ol!7>(T3y7979tP26`U zbtVO0dZ&5AE}a*VZJGX*$R^x_sDh5A`!z^24>e>2|#>I7N6#f;jgpHF&wtBa0ntNPl5=Q*m(Z*OK zthp09lY}39!W37d>fSn~as4_q@WhUKoL9NaoKE>3h~b+X*Ea5pBbOLb98*7DU)H!W zo!SdFe`;vHW_!pB_3no48~Qd~SGOj&E_`48wz_p*^JaeI=bm(7b{=y6e%n1Rw3L9$ z{(X*N($N6|$KV&g;20(19DxtukzWYxGsFscDh|qIJmvOFLm&ZsAmvDyTznpu0%`l3 zhTaOpsgT&b9SB=C==_IDzFb*ZEm!0K+2hX?Pgl;Lth`@5UCf=!m#T7*(DVyLh!FOQ zBCo9FTb9*I%hvXh$-R~P2tQa&b diff --git a/datastores/__pycache__/datastore_store_product_category.cpython-312.pyc b/datastores/__pycache__/datastore_store_product_category.cpython-312.pyc index 3869955d50251a6d9bf6b37dd063ce0f2632af98..802be6c88176a28bc4fdb2be37aa766d4486e358 100644 GIT binary patch delta 1097 zcmaiyO>7fK6vt;a@p`@f$i@)zVJD6gh*>^jg(M_)KAc<%qAhT%w4xdr@8a0(dY9Ry zA}DDhltZOnKyv^=Dp?g0fuJgo3!LEI9*pEFlEooa@0AerL!3IZjsua9n8SNBzkP4s z`@fw(;`jSQzXpRMpzHmk-uwgUR;UBsc#`OVOKtiIV^|r6K!qx&k0>LqA5})FKcJs9 z#*{H*Tp2e~O3ICC*VD#?GGR!0w{$OAaxXZ`=p2p`QPyXT~!Dh#|OGHXyFi1jP zxzzw*(dV@6ev`;)Zybh6(JLo+GfI7*F5Spdg$1z~Cck(O)hEvQg16XCw!N`2vl)CQ z+qdAo2Y%w#cjQ6f15PKI5u&0KYLpovNr^bF`9Opwq_P^s1V4iS~OL*;n+eo}1H*dCY!jP5cPN7~pLO z7c8yDnRdXt{~v6B1Q-AS delta 861 zcmYk2yKfUg5Qld!_Idp{V}qRdl^Dmd%!R~xznz2%BqSmlgmfSs=I-Ly+}Y0F1z{;s zC{jcS38O8D1O){J5fKli;vb-a!i8z96hY8YA%cjg*tIdR#q7+tGqb;$XNga7?|VUT z0eY@{b>%*vc<2qn+iy}qsBrqIG^#?C)5oMSdI$7zV?vrRCZ$PZN}7UzvQB;4n2~0T zS!uQzcj}8xUS~x;08*T+_Sxb|1Yk3tX ziSByKXDG+hZO{uw~i7lbnc{fLQm7L z!>>Ix?|dCCkbtLnDo_iG&l9hPc86->Y^`&y?#qxTo*s|4%2%!G@^-0?ddLUQb*E7C zraq!GI8CO6{>}cDFgPd!-Le~RNJt~3{!Kw z1&%mqj~v>4-?$OG_`L)0{v+n$bURsGY&c|DEh)0x=+g5y)BA@)jw3gGq0Q!oT-qH= zE1LOI(Zo?&)bK4+6}Mz_RnO|mie^-BH^Z*~Ko0}FY2kcXYj7pAVQ<#p82j`zGjW!I z$`v(RwDJn>Wh}uMZ&k|qVh;BKFaU6paW>a3Xenl+{X!X|q^{}O0xr{#ZNOY3eg2DN R)t~f=wba}XFacX5{szp7(Gmav diff --git a/datastores/__pycache__/datastore_store_product_permutation.cpython-312.pyc b/datastores/__pycache__/datastore_store_product_permutation.cpython-312.pyc index b1837090c332cbf9747cff60c24a58909159d9a1..91742da22e32da17b74708cef0d7ac46272c7248 100644 GIT binary patch delta 855 zcmY+C%}*0S6u@_uc6Ynm(y~zcxov@fv?|1t2?EiW2#JAk@U)k4(_LumYxT2F_1QlF$+K^Z%%XYHJxv-5gB+!IFyyQmj!P1iy{ zfl78+FNgLhs@N610yv&qlSh?4DYyZ{{jCM2pO8Ne~pw!X5DBv1j>AJ<)pUygS!jBpy@xXsm=QU delta 683 zcmYk4J8u&~5XW~f_WFGG`5`~f=NBO5fsH{51)@L}0znXjFK`l^j=PQRWY3SiON5aL z4Mjv{YrjAW3Q$CW+|p26LMcdd9Zd>aprK;dr$}ruGy9vFo&B%&Sf7>Dg{mrmuXi7` zPJE{7@Y`%-XiFq#{x6B}_!73X?bL=M4@=o*whDit}a1xoI-8vhg3cSK?jvXV7Ezn{;8%Wkc z5IeAl>G_n#cuSDBDYkrUcJ_PDl4jYL*j6lv4r#CNvx5AH&v`Bv(FU)ktL&Bh5bEr! z{1jc~z&mI8_+c_NMN@yeb2Rua*V+5{8dAgXEPg$%o~D{-@-h-o$;Es4X0rn^+grnw8V%3dqF*7~&qQ1-Xfj<#s|BGtIeJ}I}k z=5yufjn>6vh^coY^rrK|bjRL^gsK(%(#L(TH|Tp*=KVothhJ&WUjU@rUaTaUc!6AiC_K2{At@j4CSR;n=bI5B#1@Qv#+1ME-c#>vw2IkgPC5&_@tn oUMT!4-*E@dKEZ9e&9_3j_n19N*4SQhJ>5EOw*P?p5QcL90T2nWBme*a diff --git a/datastores/__pycache__/datastore_store_stock_item.cpython-312.pyc b/datastores/__pycache__/datastore_store_stock_item.cpython-312.pyc index 4f7aca6a5342fe51378e4aa1bb71dc23b20f84d2..56e9a0effa9137881ebf1fd41d72ae053ba3492f 100644 GIT binary patch delta 2049 zcmb_dTWl0n7@pb7?99$>yVq`ayB7*=x0IG{sZ<17qy>aR_Q3~T1LHa~v^&gRJTnUv zx0V=VfM~QiF&az^ULHz_$s#7=3(=V9gD(r#KsE#uAB;Xp;)BM-%Q>^Vz3}Y+@Sp#D z^Z#?s`Ty_y=i%@lY2iDbcN0k1Yl+!Sol8O|`CzHfTy*RHLLeI;358T_dN3Qb#!xnd zMpo}EgtOs7SGKDV$wn+6PLCG4v)zSQHfGIvJzhv;6P7LL$wD%lBncaFkWj=|3B{wb z*X(#zg2--~x1~DH{p!wulBUY$t^|_I4S}2>S@$7TFRMV>S1#W;Y`aTRohaa354`S+ zFp`un=1oaT!6S|l+h!Yl*>MNDL_f?pd#&-bGir@}9^Ou9KKP-thxEg5oH2~D3VV&T z)+b0%PleGG#NeNu#vOGn5E%+iNk+YoFB zB)m$Or@VLR*ljviPo`@V_4NLFd}@WBzBe{?fv*QgZqw=ebj#yPyw+V4>+#7IdfzHo zk58}A2jCGV#Si>!{lc?+6ii&ONv>?0t8f6yYs*IQ~qPnj+qG$hKLu>hTakEI7=L)gO9W zKV)_+*j*lQm+H4U6m0{hU+QEtw&aj=7LRD!k2s3Q5W7I(~go&A9 zNvn2mv#)uD27OXB<++@$Tg3w@*v~x|!gT>S?I{Lq#r6%M3%3g)+h=w}@j+M-9&+01X;HC`i;)!Guq7HU^dn*lZ9t2m%n$Uh4{v`` zoU8YNsFGDjmC_RMN3omifq#nw8&`~bLgCHrz_oFKt8!W&eBRw{=d=_&?~cGr9(H5s z8=g2~|0fx+Ai8o>;JEGT%_U%0}0sS9iQBZ&2g+AM=BKsJ!ojSPUm#VFacoj zOq79|GgWD}l2;8Hl|{2X*xH5FUaT<9!30*5 zSnb1Vjhdc@UDge72%!zuFiY|&DQ~I;0}Nxo3|7amLRW@pI6&!)(QvQ1f&B;`Xn1pA zwo*`wrljO$Q_}P37^67K+Rrq$a7w@dc-|LA{phmqNlHV2@e%yVSM~au?dVEy*>UA` zvzKW8u8qy*l0VJ2+gALE6?!-P+TZg((f?Q=;TVV>3_uX*pTUI&V^|F$h5E3bGmL_2 z&XpAKEJk=qvM^cIb@VKdpbMb}Zt|1By3kf~vDyNE4s2)fO|cT5>Ve7NI3jvBxUlG* zvz{Dds5wfxa=F>~Lyvqwt-mmDyr?&6;a1O@YSGA}#{uBywBb34_IFA`4mn+(Qw#He z#jtxFz+r$wCCQi7hOJ~YoG0}YCjPjY|v z`+ny;|9;PX%twM5 z@iJbU2_wtDW+9YQVS?|#emKTQ;J#OY5BR^a1S`&Gopr}7nJ!qM2~pa=OX%f;bQIAc zFC5Ujs9EQ;gcONsGA&{c8)=2>!V}JJN}Bf&L|n7aNmZq7d0VxuzbX&Zgu&IJk$I`w zvi*k8e_N0iyvx$kTvgsy6Z)uIl?Q9W(5f%+jj!v5udA9E{Yt;-J2KC&`qXp!qCU^l zp!s4=h`^t&0UUxpw`Thp!;|iQSaj>~vR8+zqMNTc$~fnOZ{6)!1S}pL$=J*MdGxkz zLxxFIaat1HXQP$*^_~njGeS=~R^~_0n_Sv9iPE;?Dnb{_6MdV=*JH3(%K zWg*uD_eG6LrFq)8IEP&D0w04HJ#R=-U6{yP>8WwUAf0f}b5v#e6Q)qyMVOSNhe0n) zNke!5-jOuEl@STJDh+iXpr-jdg)?YX+B5w=CMuY88Ib`72jH4t!>#axe?LD>3G+4R z36wqZ0>5A_Osw6jPXn#|gDZ9?(C?&Iva2Q}Al9<^f0x!LEiuj(KDZgaYw3K7<%A3} zU@5GNX=B_p^I2=Em?6(IMoOg`TsmtQsZ<;jR$wN3zV?yE#b{{7U<*8>_K6{CHS~+O z!C7@D-UMH&6*wByb_=wp?#`aFvITRxSTKo;5y}KzaVBNHVvHNY-0985SaxCv!%>>g5}E<1*K2%=gH_G{ZY7WNNZ4Tt0a diff --git a/datastores/__pycache__/datastore_user.cpython-312.pyc b/datastores/__pycache__/datastore_user.cpython-312.pyc index 841398e066913313849f98f555d8575969f54709..2d12bcc0c6f5f8e1ec4e2c6abb33ddde8474e023 100644 GIT binary patch delta 2770 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 Ppw{RXG!gB$619H-b5;_p diff --git a/datastores/datastore_base.py b/datastores/datastore_base.py index ea45fddd..fad8f9e4 100644 --- a/datastores/datastore_base.py +++ b/datastores/datastore_base.py @@ -35,6 +35,7 @@ from business_objects.user import User, User_Filters, User_Permission_Evaluation from extensions import db from forms.access_level import Filters_Access_Level from forms.unit_measurement import Filters_Unit_Measurement +from helpers.helper_app import Helper_App # external # from abc import ABC, abstractmethod, abstractproperty from flask_sqlalchemy import SQLAlchemy @@ -86,7 +87,7 @@ class DataStore_Base(BaseModel): proc_string += f'{"" if i == 0 else ", "}:{arg_keys[i]}' proc_string += ')' proc_string = text(proc_string) - print(f'{_m}\nproc_string: {proc_string}\nargs: {argument_dict_list}') + Helper_App.console_log(f'{_m}\nproc_string: {proc_string}\nargs: {argument_dict_list}') # with self.db.session.begin() as session: # conn = Helper_DB_MySQL(self.app).get_db_connection() @@ -95,20 +96,20 @@ class DataStore_Base(BaseModel): result = db.session.execute(proc_string, argument_dict_list) else: result = db.session.execute(proc_string) - print(f'result: {result}') + Helper_App.console_log(f'result: {result}') # conn.session.remove() return result cursor = result.cursor result_set_1 = cursor.fetchall() - print(f'categories: {result_set_1}') + Helper_App.console_log(f'categories: {result_set_1}') cursor.nextset() result_set_2 = cursor.fetchall() - print(f'products: {result_set_2}') + Helper_App.console_log(f'products: {result_set_2}') @staticmethod def db_cursor_clear(cursor): while cursor.nextset(): - print(f'new result set: {cursor.fetchall()}') + Helper_App.console_log(f'new result set: {cursor.fetchall()}') @classmethod def get_many_region_and_currency(cls): _m = 'DataStore_Base.get_many_region_and_currency' @@ -122,10 +123,10 @@ class DataStore_Base(BaseModel): 'a_get_inactive_currency': 0 } - print(f'executing {_m_db_currency}') + Helper_App.console_log(f'executing {_m_db_currency}') result = cls.db_procedure_execute(_m_db_currency, argument_dict_list_currency) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') # cursor.nextset() result_set_1 = cursor.fetchall() @@ -133,13 +134,13 @@ class DataStore_Base(BaseModel): for row in result_set_1: currency = Currency.make_from_DB_currency(row) currencies.append(currency) - print(f'currencies: {currencies}') + Helper_App.console_log(f'currencies: {currencies}') DataStore_Base.db_cursor_clear(cursor) - print(f'executing {_m_db_region}') + Helper_App.console_log(f'executing {_m_db_region}') result = cls.db_procedure_execute(_m_db_region, argument_dict_list_region) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') # cursor.nextset() result_set_1 = cursor.fetchall() @@ -147,25 +148,25 @@ class DataStore_Base(BaseModel): for row in result_set_1: region = Region.make_from_DB_region(row) regions.append(region) - print(f'regions: {regions}') + Helper_App.console_log(f'regions: {regions}') DataStore_Base.db_cursor_clear(cursor) cursor.close() return regions, currencies @staticmethod def get_user_session(): - print('DataStore_Base.get_user_session') + Helper_App.console_log('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]}') + Helper_App.console_log(f'user session: {session[self.app.ID_TOKEN_USER]}') info_user = session[self.app.ID_TOKEN_USER].get('userinfo') - print(f'info_user: {info_user}') + Helper_App.console_log(f'info_user: {info_user}') user.is_logged_in = ('sub' in list(info_user.keys()) and not info_user['sub'] == '' and not str(type(info_user['sub'])) == " 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}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_Base.db_cursor_clear(cursor) cursor.close() @@ -256,15 +257,15 @@ class DataStore_Base(BaseModel): argument_dict = filters.to_json() # user = cls.get_user_session() # argument_dict['a_id_user'] = 1 # 'auth0|6582b95c895d09a70ba10fef' # id_user - print(f'argument_dict: {argument_dict}') - print('executing p_shop_get_many_unit_measurement') + Helper_App.console_log(f'argument_dict: {argument_dict}') + Helper_App.console_log('executing p_shop_get_many_unit_measurement') result = cls.db_procedure_execute('p_shop_get_many_unit_measurement', argument_dict) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') # units of measurement result_set_1 = cursor.fetchall() - print(f'raw units of measurement: {result_set_1}') + Helper_App.console_log(f'raw units of measurement: {result_set_1}') units = [] for row in result_set_1: new_unit = Unit_Measurement.from_DB_unit_measurement(row) @@ -273,12 +274,12 @@ class DataStore_Base(BaseModel): # Errors cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(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}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_Base.db_cursor_clear(cursor) cursor.close() diff --git a/datastores/datastore_store_base.py b/datastores/datastore_store_base.py index 764e77d7..e7802e6d 100644 --- a/datastores/datastore_store_base.py +++ b/datastores/datastore_store_base.py @@ -27,6 +27,7 @@ from business_objects.user import User, User_Filters, User_Permission_Evaluation from business_objects.store.product_variation import Product_Variation_Type, Product_Variation, Product_Variation_Filters, Product_Variation_Container from datastores.datastore_base import DataStore_Base from extensions import db +from helpers.helper_app import Helper_App from helpers.helper_db_mysql import Helper_DB_MySQL import lib.argument_validation as av # from models.model_view_store_checkout import Model_View_Store_Checkout # circular! @@ -70,38 +71,38 @@ class DataStore_Store_Base(DataStore_Base): , **argument_dict , 'a_debug': 0 } - print(f'argument_dict: {argument_dict}') - print('executing p_shop_get_many_product') + Helper_App.console_log(f'argument_dict: {argument_dict}') + Helper_App.console_log('executing p_shop_get_many_product') result = cls.db_procedure_execute('p_shop_get_many_product', argument_dict) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') category_list = Product_Category_Container() - print(f'initial category_list: {category_list}') + Helper_App.console_log(f'initial category_list: {category_list}') # Categories result_set_1 = cursor.fetchall() - print(f'raw categories: {result_set_1}') + Helper_App.console_log(f'raw categories: {result_set_1}') for row in result_set_1: new_category = Product_Category.from_DB_get_many_product_catalogue(row) - print(f'new_category: {new_category}') + Helper_App.console_log(f'new_category: {new_category}') category_list.add_product_category(new_category) - print(f'category-loaded category_list: {category_list}') + Helper_App.console_log(f'category-loaded category_list: {category_list}') # Products cursor.nextset() result_set_2 = cursor.fetchall() - print(f'raw products: {result_set_2}') + Helper_App.console_log(f'raw products: {result_set_2}') for row in result_set_2: - print(f'row: {row}') + Helper_App.console_log(f'row: {row}') new_product = Product.from_DB_get_many_product_catalogue(row) - print(f'new_product: {new_product}') + Helper_App.console_log(f'new_product: {new_product}') try: category_list.add_product(new_product) except Exception as e: - print(f'Error adding product: {e}') + Helper_App.console_log(f'Error adding product: {e}') # Permutations cursor.nextset() @@ -111,7 +112,7 @@ class DataStore_Store_Base(DataStore_Base): try: category_list.add_product_permutation(new_permutation) except Exception as e: - print(f'Error adding permutation: {e}') + Helper_App.console_log(f'Error adding permutation: {e}') # Product_Variations cursor.nextset() @@ -121,7 +122,7 @@ class DataStore_Store_Base(DataStore_Base): try: category_list.add_product_variation(new_variation) except Exception as e: - print(f'Error adding variation: {e}') + Helper_App.console_log(f'Error adding variation: {e}') # Images cursor.nextset() @@ -133,20 +134,20 @@ class DataStore_Store_Base(DataStore_Base): # Errors cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(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}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") category_list.get_all_product_variation_trees() """ for category in category_list.categories: - print(f'category: {category.name}') + Helper_App.console_log(f'category: {category.name}') for product in category.products: permutation = product.get_permutation_selected() - print(f'product: {product.name}\nselected permutation: {permutation}') + Helper_App.console_log(f'product: {product.name}\nselected permutation: {permutation}') """ if len(errors) > 0: @@ -168,7 +169,7 @@ class DataStore_Store_Base(DataStore_Base): DataStore_Store_Base.db_cursor_clear(cursor) cursor.close() - print(f'get many category_list: {category_list}') + Helper_App.console_log(f'get many category_list: {category_list}') return category_list, errors # categories, category_index """ @@ -201,10 +202,10 @@ class DataStore_Store_Base(DataStore_Base): 'a_get_inactive_currency': 0 } - print(f'executing {_m_db_currency}') + Helper_App.console_log(f'executing {_m_db_currency}') result = cls.db_procedure_execute(_m_db_currency, argument_dict_list_currency) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') # cursor.nextset() result_set_1 = cursor.fetchall() @@ -212,7 +213,7 @@ class DataStore_Store_Base(DataStore_Base): for row in result_set_1: currency = Currency.from_DB_currency(row) currencies.append(currency) - print(f'currencies: {currencies}') + Helper_App.console_log(f'currencies: {currencies}') DataStore_Store_Base.db_cursor_clear(cursor) return currencies @@ -226,10 +227,10 @@ class DataStore_Store_Base(DataStore_Base): 'a_get_inactive_currency': 0 } - print(f'executing {_m_db_region}') + Helper_App.console_log(f'executing {_m_db_region}') result = cls.db_procedure_execute(_m_db_region, argument_dict_list_region) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') # cursor.nextset() result_set_1 = cursor.fetchall() @@ -237,7 +238,7 @@ class DataStore_Store_Base(DataStore_Base): for row in result_set_1: region = Region.from_DB_region(row) regions.append(region) - print(f'regions: {regions}') + Helper_App.console_log(f'regions: {regions}') DataStore_Store_Base.db_cursor_clear(cursor) cursor.close() @@ -253,7 +254,7 @@ class DataStore_Store_Base(DataStore_Base): @classmethod def get_many_product_variation(cls, variation_filters): _m = 'DataStore_Store_Base.get_many_product_variation' - print(_m) + Helper_App.console_log(_m) av.val_instance(variation_filters, 'variation_filters', _m, Product_Variation_Filters) guid = Helper_DB_MySQL.create_guid() @@ -290,7 +291,7 @@ class DataStore_Store_Base(DataStore_Base): variation_types.append(new_variation_type) variation_types_dict[new_variation_type.id_type] = new_variation_type - print(f'variation_types_dict: {variation_types_dict}') + Helper_App.console_log(f'variation_types_dict: {variation_types_dict}') # Product_Variations cursor.nextset() @@ -306,11 +307,11 @@ class DataStore_Store_Base(DataStore_Base): errors = [] cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(f'raw errors: {result_set_e}') if len(result_set_e) > 0: errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # [SQL_Error(row[0], row[1]) for row in result_set_e] for error in errors: - print(f"Error [{error.code}]: {error.msg}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_Store_Base.db_cursor_clear(cursor) diff --git a/datastores/datastore_store_basket.py b/datastores/datastore_store_basket.py index 184636bf..1b07a576 100644 --- a/datastores/datastore_store_basket.py +++ b/datastores/datastore_store_basket.py @@ -27,6 +27,7 @@ from business_objects.store.stock_item import Stock_Item from business_objects.user import User, User_Filters, User_Permission_Evaluation from business_objects.store.product_variation import Product_Variation, Product_Variation_Filters, Product_Variation_Container from datastores.datastore_store_base import DataStore_Store_Base +from helpers.helper_app import Helper_App # from helpers.helper_db_mysql import Helper_DB_MySQL # from models.model_view_store_checkout import Model_View_Store_Checkout # circular! from extensions import db @@ -65,7 +66,7 @@ class DataStore_Store_Basket(DataStore_Store_Base): def edit_basket(self, ids_permutation_basket, quantities_permutation_basket, id_permutation_edit, quantity_permutation_edit, sum_not_edit, id_currency, id_region_delivery, is_included_VAT): # redundant argument validation? _m = 'DataStore_Store_Base.edit_basket' - print(f'{_m}\nstarting...') + Helper_App.console_log(f'{_m}\nstarting...') # av.val_instance(filters, 'filters', _m, Parameters_Product_Category) # av.val_str(ids_product_basket, 'ids_product_basket', _m) av.val_str(ids_permutation_basket, 'ids_permutation_basket', _m) @@ -75,24 +76,24 @@ class DataStore_Store_Basket(DataStore_Store_Base): if id_product_edit == 'None': id_product_edit = None else: - print(f'id_product_edit: {id_product_edit}') + Helper_App.console_log(f'id_product_edit: {id_product_edit}') av.val_int(id_product_edit, 'id_product_edit', _m) """ if id_permutation_edit == 'None' or str(type(id_permutation_edit)) =="": id_permutation_edit = None else: - print(f'id_permutation_edit: {id_permutation_edit}') - print(str(type(id_permutation_edit))) + Helper_App.console_log(f'id_permutation_edit: {id_permutation_edit}') + Helper_App.console_log(str(type(id_permutation_edit))) av.val_int(id_permutation_edit, 'id_permutation_edit', _m) if quantity_permutation_edit == 'None' or str(type(quantity_permutation_edit)) =="": quantity_permutation_edit = None else: - print(f'quantity_permutation_edit: {quantity_permutation_edit}') + Helper_App.console_log(f'quantity_permutation_edit: {quantity_permutation_edit}') av.val_int(quantity_permutation_edit, 'quantity_permutation_edit', _m) if sum_not_edit == 'None': sum_not_edit = None else: - print(f'sum_not_edit: {sum_not_edit}') + Helper_App.console_log(f'sum_not_edit: {sum_not_edit}') av.val_bool(sum_not_edit, 'sum_not_edit', _m) argument_dict_list = { @@ -110,21 +111,21 @@ class DataStore_Store_Basket(DataStore_Store_Base): } result = self.db_procedure_execute('p_shop_edit_user_basket', argument_dict_list) - print('data received') + Helper_App.console_log('data received') cursor = result.cursor # categories, category_index = DataStore_Store_Base.input_many_product(cursor) category_list, errors = DataStore_Store_Base.input_many_product(cursor) - print(f'cursor: {str(cursor)}') + Helper_App.console_log(f'cursor: {str(cursor)}') # Basket if not cursor.nextset(): raise Exception("No more query results! Cannot open basket contents") result_set = cursor.fetchall() - print(f'raw basket: {result_set}') - # print(f'variations: {result_set_3}') + Helper_App.console_log(f'raw basket: {result_set}') + # Helper_App.console_log(f'variations: {result_set_3}') # variations = [Product_Variation(**row) for row in result_set_3] basket = Basket(is_included_VAT, id_currency, id_region_delivery) for row in result_set: @@ -133,20 +134,20 @@ class DataStore_Store_Basket(DataStore_Store_Base): index_product = category.get_index_product_from_id(row[1]) product = category.products[index_product] basket_item = Basket_Item.from_product_and_quantity_and_VAT_included(product, row[7], self.app.is_included_VAT) - print(f'adding basket item: {row}') - print(f'basket item: {basket_item}') + Helper_App.console_log(f'adding basket item: {row}') + Helper_App.console_log(f'basket item: {basket_item}') basket.add_item(basket_item) # basket.append(basket_item) # Basket_Item(category.name, product, row[4])) - print(f'basket: {basket}') + Helper_App.console_log(f'basket: {basket}') # Errors cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(f'raw errors: {result_set_e}') if len(result_set_e) > 0: errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # [SQL_Error(row[0], row[1]) for row in result_set_2] for error in errors: - print(f"Error [{error.code}]: {error.msg}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_Store_Base.db_cursor_clear(cursor) diff --git a/datastores/datastore_store_manufacturing_purchase_order.py b/datastores/datastore_store_manufacturing_purchase_order.py index 791ee525..f0840480 100644 --- a/datastores/datastore_store_manufacturing_purchase_order.py +++ b/datastores/datastore_store_manufacturing_purchase_order.py @@ -16,6 +16,7 @@ import lib.argument_validation as av from business_objects.sql_error import SQL_Error from business_objects.store.manufacturing_purchase_order import Manufacturing_Purchase_Order, Manufacturing_Purchase_Order_Product_Link, Parameters_Manufacturing_Purchase_Order, Manufacturing_Purchase_Order_Temp, Manufacturing_Purchase_Order_Product_Link_Temp from datastores.datastore_store_base import DataStore_Store_Base +from helpers.helper_app import Helper_App from helpers.helper_db_mysql import Helper_DB_MySQL from extensions import db # external @@ -45,15 +46,15 @@ class DataStore_Store_Manufacturing_Purchase_Order(DataStore_Store_Base): , **argument_dict , 'a_debug': 0 } - print(f'argument_dict: {argument_dict}') - print('executing p_shop_get_many_manufacturing_purchase_order') + Helper_App.console_log(f'argument_dict: {argument_dict}') + Helper_App.console_log('executing p_shop_get_many_manufacturing_purchase_order') result = self.db_procedure_execute('p_shop_get_many_manufacturing_purchase_order', argument_dict) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') # Manufacturing_Purchase_Orders result_set_1 = cursor.fetchall() - print(f'raw manufacturing_purchase_orders: {result_set_1}') + Helper_App.console_log(f'raw manufacturing_purchase_orders: {result_set_1}') manufacturing_purchase_orders = [] indices_manufacturing_purchase_order = {} for row in result_set_1: @@ -64,7 +65,7 @@ class DataStore_Store_Manufacturing_Purchase_Order(DataStore_Store_Base): # Manufacturing_Purchase_Orders Items cursor.nextset() result_set_1 = cursor.fetchall() - print(f'raw manufacturing_purchase_order_product_links: {result_set_1}') + Helper_App.console_log(f'raw manufacturing_purchase_order_product_links: {result_set_1}') order_product_links = [] for row in result_set_1: new_link = Manufacturing_Purchase_Order_Product_Link.from_DB_manufacturing_purchase_order(row) @@ -74,12 +75,12 @@ class DataStore_Store_Manufacturing_Purchase_Order(DataStore_Store_Base): # Errors cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(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}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_Store_Manufacturing_Purchase_Order.db_cursor_clear(cursor) @@ -98,9 +99,9 @@ class DataStore_Store_Manufacturing_Purchase_Order(DataStore_Store_Base): row = Manufacturing_Purchase_Order_Temp.from_manufacturing_purchase_order(manufacturing_purchase_order) row.guid = guid rows_order.append(row) - print(f'order rows: {rows_order}') + Helper_App.console_log(f'order rows: {rows_order}') DataStore_Store_Base.upload_bulk(Manufacturing_Purchase_Order_Temp.__tablename__, rows_order, 1000) - print('bulk uploaded orders') + Helper_App.console_log('bulk uploaded orders') rows_link = [] for manufacturing_purchase_order in manufacturing_purchase_orders: @@ -108,9 +109,9 @@ class DataStore_Store_Manufacturing_Purchase_Order(DataStore_Store_Base): row = Manufacturing_Purchase_Order_Product_Link_Temp.from_manufacturing_purchase_order_product_link(link) row.guid = guid rows_link.append(row) - print(f'link rows: {rows_link}') + Helper_App.console_log(f'link rows: {rows_link}') DataStore_Store_Base.upload_bulk(Manufacturing_Purchase_Order_Product_Link_Temp.__tablename__, rows_link, 1000) - print('bulk uploaded links') + Helper_App.console_log('bulk uploaded links') argument_dict_list = { 'a_comment': comment, @@ -119,18 +120,18 @@ class DataStore_Store_Manufacturing_Purchase_Order(DataStore_Store_Base): 'a_debug': 0 } result = cls.db_procedure_execute('p_shop_save_manufacturing_purchase_order', argument_dict_list) - print('saved manufacturing purchase orders') + Helper_App.console_log('saved manufacturing purchase orders') # Errors cursor = result.cursor cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(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] for error in errors: - print(f"Error [{error.code}]: {error.msg}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_Store_Manufacturing_Purchase_Order.db_cursor_clear(cursor) return errors diff --git a/datastores/datastore_store_product.py b/datastores/datastore_store_product.py index 6fcc8dc5..7dea7b47 100644 --- a/datastores/datastore_store_product.py +++ b/datastores/datastore_store_product.py @@ -15,6 +15,7 @@ import lib.argument_validation as av from business_objects.sql_error import SQL_Error from business_objects.store.product import Product, Product_Permutation, Product_Price, Parameters_Product, Product_Temp from datastores.datastore_store_base import DataStore_Store_Base +from helpers.helper_app import Helper_App from helpers.helper_db_mysql import Helper_DB_MySQL # from models.model_view_store_checkout import Model_View_Store_Checkout # circular! from extensions import db @@ -86,8 +87,8 @@ class DataStore_Store_Product(DataStore_Store_Base): @classmethod def save_products(cls, comment, products): _m = 'DataStore_Store_Product.save_products' - print(f'{_m}\nstarting...') - print(f'comment: {comment}\nproducts: {products}') + Helper_App.console_log(f'{_m}\nstarting...') + Helper_App.console_log(f'comment: {comment}\nproducts: {products}') guid = Helper_DB_MySQL.create_guid() user = cls.get_user_session() @@ -99,11 +100,11 @@ class DataStore_Store_Product(DataStore_Store_Base): id_product_new -= 1 row.id_product = id_product_new else: - print(f'row.id_product: {row.id_product}') + Helper_App.console_log(f'row.id_product: {row.id_product}') row.guid = guid rows.append(row) - print(f'rows: {rows}') + Helper_App.console_log(f'rows: {rows}') DataStore_Store_Base.upload_bulk(Product_Temp.__tablename__, rows, 1000) argument_dict_list = { @@ -115,24 +116,24 @@ class DataStore_Store_Product(DataStore_Store_Base): save_result = cls.db_procedure_execute('p_shop_save_product', argument_dict_list) cursor = save_result # .cursor - print('data received') + Helper_App.console_log('data received') # Errors # cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(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}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") try: DataStore_Store_Base.db_cursor_clear(cursor) except Exception as e: - print(f'Error clearing cursor: {e}') + Helper_App.console_log(f'Error clearing cursor: {e}') cursor.close() save_result.close() - print('save procedure executed') + Helper_App.console_log('save procedure executed') return errors diff --git a/datastores/datastore_store_product_category.py b/datastores/datastore_store_product_category.py index ba0794c6..f72ee7d5 100644 --- a/datastores/datastore_store_product_category.py +++ b/datastores/datastore_store_product_category.py @@ -27,6 +27,7 @@ from business_objects.user import User, User_Filters, User_Permission_Evaluation from business_objects.store.product_variation import Product_Variation, Product_Variation_Filters, Product_Variation_Container # from datastores.datastore_base import Table_Shop_Product_Category, Table_Shop_Product_Category_Temp from datastores.datastore_store_base import DataStore_Store_Base +from helpers.helper_app import Helper_App 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 @@ -48,8 +49,8 @@ class DataStore_Store_Product_Category(DataStore_Store_Base): @classmethod def save_categories(cls, comment, categories): _m = 'DataStore_Store_Product_Category.save_categories' - print(f'{_m}\nstarting...') - print(f'comment: {comment}\ncategories: {categories}') + Helper_App.console_log(f'{_m}\nstarting...') + Helper_App.console_log(f'comment: {comment}\ncategories: {categories}') # av.val_str(comment, 'comment', _m) # av.val_list_instances(categories, 'categories', _m, Product_Category, 1) @@ -66,25 +67,25 @@ class DataStore_Store_Product_Category(DataStore_Store_Base): id_category_new -= 1 row.id_category = id_category_new else: - print(f'row.id_category: {row.id_category}') + Helper_App.console_log(f'row.id_category: {row.id_category}') row.guid = guid # row.created_on = now # row.created_by = user.id_user rows.append(row) - print(f'rows: {rows}') + Helper_App.console_log(f'rows: {rows}') """ cursor = db.cursor() - print('cursor created') + Helper_App.console_log('cursor created') cursor.executemany( 'INSERT INTO Shop_Product_Category_Temp (id_category, code, name, description, active, display_order, guid, created_on, created_by) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)', categories ) - print('bulk upload executed') + Helper_App.console_log('bulk upload executed') db.commit() - print('bulk upload committed') + Helper_App.console_log('bulk upload committed') cursor.close() - print('cursor closed') + Helper_App.console_log('cursor closed') """ DataStore_Store_Base.upload_bulk(Product_Category_Temp.__tablename__, rows, 1000) @@ -95,5 +96,5 @@ class DataStore_Store_Product_Category(DataStore_Store_Base): } save_result = cls.db_procedure_execute('p_shop_save_product_category', argument_dict_list) save_result.close() - print('save procedure executed') + Helper_App.console_log('save procedure executed') diff --git a/datastores/datastore_store_product_permutation.py b/datastores/datastore_store_product_permutation.py index 0d279cb9..c5c345a6 100644 --- a/datastores/datastore_store_product_permutation.py +++ b/datastores/datastore_store_product_permutation.py @@ -15,6 +15,7 @@ import lib.argument_validation as av from business_objects.store.store_base import Store_Base from business_objects.store.product_permutation import Product_Permutation, Product_Permutation_Temp from datastores.datastore_store_base import DataStore_Store_Base +from helpers.helper_app import Helper_App from helpers.helper_db_mysql import Helper_DB_MySQL # from models.model_view_store_checkout import Model_View_Store_Checkout # circular! from extensions import db @@ -53,11 +54,11 @@ class DataStore_Store_Product_Permutation(DataStore_Store_Base): row.guid = guid rows.append(row) - print(f'rows: {rows}') + Helper_App.console_log(f'rows: {rows}') """ cursor = db.cursor() - print('cursor created') + Helper_App.console_log('cursor created') cursor.executemany( '''INSERT INTO Shop_Product_Permutation_Temp ( id_permutation, @@ -85,14 +86,14 @@ class DataStore_Store_Product_Permutation(DataStore_Store_Base): VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)''', rows ) - print('cursor executed') + Helper_App.console_log('cursor executed') db.commit() - print('cursor committed') + Helper_App.console_log('cursor committed') cursor.close() - print('cursor closed') + Helper_App.console_log('cursor closed') """ DataStore_Store_Base.upload_bulk(Product_Permutation_Temp.__tablename__, rows, 1000) - print('bulk uploaded') + Helper_App.console_log('bulk uploaded') argument_dict_list = { 'a_comment': comment, @@ -100,4 +101,4 @@ class DataStore_Store_Product_Permutation(DataStore_Store_Base): 'a_id_user': user.id_user, } cls.db_procedure_execute('p_shop_save_product_permutation', argument_dict_list) - print('saved product permutations') + Helper_App.console_log('saved product permutations') diff --git a/datastores/datastore_store_stock_item.py b/datastores/datastore_store_stock_item.py index a629b7aa..fbc933e4 100644 --- a/datastores/datastore_store_stock_item.py +++ b/datastores/datastore_store_stock_item.py @@ -16,6 +16,7 @@ import lib.argument_validation as av from business_objects.sql_error import SQL_Error from business_objects.store.stock_item import Stock_Item, Parameters_Stock_Item, Stock_Item_Temp from datastores.datastore_store_base import DataStore_Store_Base +from helpers.helper_app import Helper_App from helpers.helper_db_mysql import Helper_DB_MySQL # from models.model_view_store_checkout import Model_View_Store_Checkout # circular! from extensions import db @@ -53,13 +54,13 @@ class DataStore_Store_Stock_Item(DataStore_Store_Base): , 'a_debug': 0 } ids_permutation = category_list.get_csv_ids_permutation() - print(f'ids_permutation: {ids_permutation}') + Helper_App.console_log(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_stock_item') + Helper_App.console_log(f'argument_dict: {argument_dict}') + Helper_App.console_log('executing p_shop_get_many_stock_item') result = self.db_procedure_execute('p_shop_get_many_stock_item', argument_dict) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') category_list, errors = DataStore_Store_Stock_Item.input_many_stock_item(cursor, category_list) DataStore_Store_Stock_Item.db_cursor_clear(cursor) @@ -69,7 +70,7 @@ class DataStore_Store_Stock_Item(DataStore_Store_Base): def input_many_stock_item(cursor, category_list): _m = 'DataStore_Store_Stock_Item.input_many_stock_item' result_set_1 = cursor.fetchall() - print(f'raw categories: {result_set_1}') + Helper_App.console_log(f'raw categories: {result_set_1}') for row in result_set_1: new_stock_item = Stock_Item.from_DB_stock_item(row) category_list.add_stock_item(new_stock_item) # , row) @@ -77,12 +78,12 @@ class DataStore_Store_Stock_Item(DataStore_Store_Base): # Errors cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(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}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") """ if len(errors) > 0: for error in errors: @@ -117,10 +118,10 @@ class DataStore_Store_Stock_Item(DataStore_Store_Base): row.guid = guid rows.append(row) - print(f'rows: {rows}') + Helper_App.console_log(f'rows: {rows}') DataStore_Store_Base.upload_bulk(Stock_Item_Temp.__tablename__, rows, 1000) - print('bulk uploaded') + Helper_App.console_log('bulk uploaded') argument_dict_list = { 'a_comment': comment, @@ -129,17 +130,17 @@ class DataStore_Store_Stock_Item(DataStore_Store_Base): 'a_debug': 0 } result = cls.db_procedure_execute('p_shop_save_stock_item', argument_dict_list) - print('saved product permutations') + Helper_App.console_log('saved product permutations') # Errors cursor = result.cursor cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(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}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_Store_Stock_Item.db_cursor_clear(cursor) return errors diff --git a/datastores/datastore_store_stripe.py b/datastores/datastore_store_stripe.py index 4cae7b7f..c86b3b16 100644 --- a/datastores/datastore_store_stripe.py +++ b/datastores/datastore_store_stripe.py @@ -30,6 +30,7 @@ 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 +from helpers.helper_app import Helper_App # external # from abc import ABC, abstractmethod, abstractproperty from flask_sqlalchemy import SQLAlchemy @@ -72,10 +73,10 @@ class DataStore_Store_Stripe(DataStore_Store_Base): 'a_id_user': self.info_user } - print(f'executing {_m_db}') + Helper_App.console_log(f'executing {_m_db}') result = self.db_procedure_execute(_m_db, argument_dict_list) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') # Products @@ -85,16 +86,16 @@ class DataStore_Store_Stripe(DataStore_Store_Base): for row in result_set_1: new_product = Product.from_DB_Stripe_product(row) # Product(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19]) products.append(new_product) - print(f'products: {products}') + Helper_App.console_log(f'products: {products}') # Errors cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(f'raw errors: {result_set_e}') if len(result_set_e) > 0: errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # [SQL_Error(row[0], row[1]) for row in result_set_e] for error in errors: - print(f"Error [{error.code}]: {error.msg}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_Store_Stripe.db_cursor_clear(cursor) @@ -110,10 +111,10 @@ class DataStore_Store_Stripe(DataStore_Store_Base): 'a_id_user': self.info_user } - print(f'executing {_m_db}') + Helper_App.console_log(f'executing {_m_db}') result = self.db_procedure_execute(_m_db, argument_dict_list) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') # Products @@ -123,16 +124,16 @@ class DataStore_Store_Stripe(DataStore_Store_Base): for row in result_set_1: new_product = Product.from_DB_Stripe_price(row) # Product(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14], row[15], row[16], row[17], row[18], row[19]) products.append(new_product) - print(f'products: {products}') + Helper_App.console_log(f'products: {products}') # Errors cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(f'raw errors: {result_set_e}') if len(result_set_e) > 0: errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # [SQL_Error(row[0], row[1]) for row in result_set_e] for error in errors: - print(f"Error [{error.code}]: {error.msg}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_Store_Stripe.db_cursor_clear(cursor) @@ -161,14 +162,14 @@ class DataStore_Store_Stripe(DataStore_Store_Base): # av.val_str(product_description, 'product_description', _m) av.val_instance(product, 'product', _m, Product) - print(f'stripe.api_key = {stripe.api_key}') + Helper_App.console_log(f'stripe.api_key = {stripe.api_key}') new_product = stripe.Product.create( name = product.name, description = product.description, ) # Save these identifiers - print(f"Success! Here is your new Stripe product id: {new_product.id}") + Helper_App.console_log(f"Success! Here is your new Stripe product id: {new_product.id}") return new_product.id @@ -188,7 +189,7 @@ class DataStore_Store_Stripe(DataStore_Store_Base): av.val_instance(product, 'product', _m, Product) av.val_str(currency, 'currency', _m) - print(f'stripe.api_key = {stripe.api_key}') + Helper_App.console_log(f'stripe.api_key = {stripe.api_key}') new_product_price = stripe.Price.create( unit_amount = product.unit_price, @@ -198,7 +199,7 @@ class DataStore_Store_Stripe(DataStore_Store_Base): ) # Save these identifiers - print(f"Success! Here is your Stripe product price id: {new_product_price.id} for {product.name}") + Helper_App.console_log(f"Success! Here is your Stripe product price id: {new_product_price.id} for {product.name}") return new_product_price.id \ No newline at end of file diff --git a/datastores/datastore_store_supplier.py b/datastores/datastore_store_supplier.py index 56cfa9ff..1a9538ea 100644 --- a/datastores/datastore_store_supplier.py +++ b/datastores/datastore_store_supplier.py @@ -17,6 +17,7 @@ from business_objects.sql_error import SQL_Error from business_objects.store.supplier_address import Supplier_Address, Supplier_Address_Temp from business_objects.store.supplier import Supplier, Parameters_Supplier, Supplier_Temp from datastores.datastore_store_base import DataStore_Store_Base +from helpers.helper_app import Helper_App from helpers.helper_db_mysql import Helper_DB_MySQL from extensions import db # external @@ -47,15 +48,15 @@ class DataStore_Store_Supplier(DataStore_Store_Base): , **argument_dict , 'a_debug': 0 } - print(f'argument_dict: {argument_dict}') - print('executing p_shop_get_many_supplier') + Helper_App.console_log(f'argument_dict: {argument_dict}') + Helper_App.console_log('executing p_shop_get_many_supplier') result = cls.db_procedure_execute('p_shop_get_many_supplier', argument_dict) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') # Suppliers result_set_1 = cursor.fetchall() - print(f'raw suppliers: {result_set_1}') + Helper_App.console_log(f'raw suppliers: {result_set_1}') suppliers = [] supplier_indexes = {} for row in result_set_1: @@ -66,7 +67,7 @@ class DataStore_Store_Supplier(DataStore_Store_Base): # Supplier Addresses cursor.nextset() result_set_1 = cursor.fetchall() - print(f'raw supplier addresses: {result_set_1}') + Helper_App.console_log(f'raw supplier addresses: {result_set_1}') for row in result_set_1: new_address = Supplier_Address.from_DB_supplier(row) index_supplier = supplier_indexes[new_address.id_supplier] @@ -75,12 +76,12 @@ class DataStore_Store_Supplier(DataStore_Store_Base): # Errors cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(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}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_Store_Supplier.db_cursor_clear(cursor) @@ -89,7 +90,7 @@ class DataStore_Store_Supplier(DataStore_Store_Base): @classmethod def save_suppliers(cls, comment, suppliers): _m = 'DataStore_Store_Supplier.save_suppliers' - print(f'{_m}\n{suppliers}') + Helper_App.console_log(f'{_m}\n{suppliers}') av.val_str(comment, 'comment', _m) guid = Helper_DB_MySQL.create_guid_str() @@ -101,22 +102,22 @@ class DataStore_Store_Supplier(DataStore_Store_Base): row = Supplier_Temp.from_supplier(supplier) row.guid = guid rows.append(row) - print(f'rows: {rows}') + Helper_App.console_log(f'rows: {rows}') DataStore_Store_Base.upload_bulk(Supplier_Temp.__tablename__, rows, 1000) - print('bulk uploaded suppliers') + Helper_App.console_log('bulk uploaded suppliers') rows = [] for supplier in suppliers: - print(f'supplier: {supplier}') + Helper_App.console_log(f'supplier: {supplier}') for supplier_address in supplier.addresses: row = Supplier_Address_Temp.from_supplier_address(supplier_address) row.guid = guid rows.append(row) - print(f'rows: {rows}') + Helper_App.console_log(f'rows: {rows}') DataStore_Store_Base.upload_bulk(Supplier_Address_Temp.__tablename__, rows, 1000) - print('bulk uploaded supplier addresses') + Helper_App.console_log('bulk uploaded supplier addresses') argument_dict_list = { 'a_comment': comment, @@ -125,18 +126,18 @@ class DataStore_Store_Supplier(DataStore_Store_Base): 'a_debug': 0 } result = cls.db_procedure_execute('p_shop_save_supplier', argument_dict_list) - print('saved suppliers') + Helper_App.console_log('saved suppliers') # Errors cursor = result.cursor cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(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}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_Store_Supplier.db_cursor_clear(cursor) return errors diff --git a/datastores/datastore_store_supplier_purchase_order.py b/datastores/datastore_store_supplier_purchase_order.py index 4c128e87..03e2854b 100644 --- a/datastores/datastore_store_supplier_purchase_order.py +++ b/datastores/datastore_store_supplier_purchase_order.py @@ -16,6 +16,7 @@ import lib.argument_validation as av from business_objects.sql_error import SQL_Error from business_objects.store.supplier_purchase_order import Supplier_Purchase_Order, Supplier_Purchase_Order_Product_Link, Parameters_Supplier_Purchase_Order, Supplier_Purchase_Order_Temp, Supplier_Purchase_Order_Product_Link_Temp from datastores.datastore_store_base import DataStore_Store_Base +from helpers.helper_app import Helper_App from helpers.helper_db_mysql import Helper_DB_MySQL from extensions import db # external @@ -45,15 +46,15 @@ class DataStore_Store_Supplier_Purchase_Order(DataStore_Store_Base): , **argument_dict , 'a_debug': 0 } - print(f'argument_dict: {argument_dict}') - print('executing p_shop_get_many_supplier_purchase_order') + Helper_App.console_log(f'argument_dict: {argument_dict}') + Helper_App.console_log('executing p_shop_get_many_supplier_purchase_order') result = self.db_procedure_execute('p_shop_get_many_supplier_purchase_order', argument_dict) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') # Supplier_Purchase_Orders result_set_1 = cursor.fetchall() - print(f'raw supplier_purchase_orders: {result_set_1}') + Helper_App.console_log(f'raw supplier_purchase_orders: {result_set_1}') supplier_purchase_orders = [] indices_supplier_purchase_order = {} for row in result_set_1: @@ -64,7 +65,7 @@ class DataStore_Store_Supplier_Purchase_Order(DataStore_Store_Base): # Supplier_Purchase_Orders Items cursor.nextset() result_set_2 = cursor.fetchall() - print(f'raw supplier_purchase_order_product_links: {result_set_2}') + Helper_App.console_log(f'raw supplier_purchase_order_product_links: {result_set_2}') order_product_links = [] for row in result_set_2: new_link = Supplier_Purchase_Order_Product_Link.from_DB_supplier_purchase_order(row) @@ -75,12 +76,12 @@ class DataStore_Store_Supplier_Purchase_Order(DataStore_Store_Base): # Errors cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(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}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_Store_Supplier_Purchase_Order.db_cursor_clear(cursor) @@ -99,9 +100,9 @@ class DataStore_Store_Supplier_Purchase_Order(DataStore_Store_Base): row = Supplier_Purchase_Order_Temp.from_supplier_purchase_order(supplier_purchase_order) row.guid = guid rows_order.append(row) - print(f'order rows: {rows_order}') + Helper_App.console_log(f'order rows: {rows_order}') DataStore_Store_Base.upload_bulk(Supplier_Purchase_Order_Temp.__tablename__, rows_order, 1000) - print('bulk uploaded orders') + Helper_App.console_log('bulk uploaded orders') rows_link = [] for supplier_purchase_order in supplier_purchase_orders: @@ -109,9 +110,9 @@ class DataStore_Store_Supplier_Purchase_Order(DataStore_Store_Base): row = Supplier_Purchase_Order_Product_Link_Temp.from_supplier_purchase_order_product_link(link) row.guid = guid rows_link.append(row) - print(f'link rows: {rows_link}') + Helper_App.console_log(f'link rows: {rows_link}') DataStore_Store_Base.upload_bulk(Supplier_Purchase_Order_Product_Link_Temp.__tablename__, rows_link, 1000) - print('bulk uploaded links') + Helper_App.console_log('bulk uploaded links') argument_dict_list = { 'a_comment': comment, @@ -120,13 +121,13 @@ class DataStore_Store_Supplier_Purchase_Order(DataStore_Store_Base): 'a_debug': 0 } result = cls.db_procedure_execute('p_shop_save_supplier_purchase_order', argument_dict_list) - print('saved supplier purchase orders') + Helper_App.console_log('saved supplier purchase orders') # Errors cursor = result.cursor cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(f'raw errors: {result_set_e}') errors = [] warnings = [] if len(result_set_e) > 0: @@ -136,7 +137,7 @@ class DataStore_Store_Supplier_Purchase_Order(DataStore_Store_Base): warnings.append(new_error) else: errors.append(new_error) - print(f"Error [{new_error.code}]: {new_error.msg}") + Helper_App.console_log(f"Error [{new_error.code}]: {new_error.msg}") cls.db_cursor_clear(cursor) return errors, warnings diff --git a/datastores/datastore_user.py b/datastores/datastore_user.py index b8c65261..a96fcd53 100644 --- a/datastores/datastore_user.py +++ b/datastores/datastore_user.py @@ -17,6 +17,7 @@ from business_objects.sql_error import SQL_Error from business_objects.store.stock_item import Stock_Item from business_objects.user import User, User_Filters, User_Permission_Evaluation from datastores.datastore_base import DataStore_Base +from helpers.helper_app import Helper_App from helpers.helper_db_mysql import Helper_DB_MySQL # from models.model_view_store_checkout import Model_View_Store_Checkout # circular! from extensions import db @@ -57,16 +58,16 @@ class DataStore_User(DataStore_Base): cursor = result.cursor result_set_1 = cursor.fetchall() - print(f'raw user data: {result_set_1}') + Helper_App.console_log(f'raw user data: {result_set_1}') # Errors cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(f'raw errors: {result_set_e}') if len(result_set_e) > 0: errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # [SQL_Error(row[0], row[1]) for row in result_set_2] for error in errors: - print(f"Error [{error.code}]: {error.msg}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_User.db_cursor_clear(cursor) @@ -85,10 +86,10 @@ class DataStore_User(DataStore_Base): 'a_id_checkout_session': id_checkout_session } - print('executing p_shop_get_many_user_order') + Helper_App.console_log('executing p_shop_get_many_user_order') result = self.db_procedure_execute('p_shop_get_many_user_order', argument_dict_list) cursor = result.cursor - print('data received') + Helper_App.console_log('data received') # Discount Delivery Regions @@ -98,16 +99,16 @@ class DataStore_User(DataStore_Base): for row in result_set_1: new_order = Order(row[0], row[1], row[2], row[3], row[4], row[5], row[6]) orders.append(new_order) - print(f'orders: {orders}') + Helper_App.console_log(f'orders: {orders}') # Errors cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(f'raw errors: {result_set_e}') if len(result_set_e) > 0: errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # [SQL_Error(row[0], row[1]) for row in result_set_e] for error in errors: - print(f"Error [{error.code}]: {error.msg}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_User.db_cursor_clear(cursor) @@ -116,7 +117,7 @@ class DataStore_User(DataStore_Base): def get_many_user(self, user_filters, user=None): _m = 'DataStore_User.get_many_user' - print(_m) + Helper_App.console_log(_m) # av.val_str(user_filters, 'user_filters', _m) # av.val_list(permutations, 'list_permutations', _m, Product_Permutation, 1) av.val_instance(user_filters, 'user_filters', _m, User_Filters) @@ -150,33 +151,33 @@ class DataStore_User(DataStore_Base): """ cursor = result.cursor result_set = cursor.fetchall() - print(f'raw users: {result_set}') - print(f'type result set: {str(type(result_set))}') - print(f'len result set: {len(result_set)}') + Helper_App.console_log(f'raw users: {result_set}') + Helper_App.console_log(f'type result set: {str(type(result_set))}') + Helper_App.console_log(f'len result set: {len(result_set)}') """ user_permission_evals = [] for row in result_set: user_permission_eval = User_Permission_Evaluation.from_DB_user_eval(row) user_permission_evals.append(user_permission_eval) - print(f'user_permission_evals: {user_permission_evals}') + Helper_App.console_log(f'user_permission_evals: {user_permission_evals}') """ users = [] if len(result_set) > 0: for row in result_set: - print(f'row: {row}') + Helper_App.console_log(f'row: {row}') user = User.from_DB_user(row) users.append(user) - print(f'user {str(type(user))}: {user}') - print(f'type users: {str(type(users))}\n type user 0: {str(type(None if len(users) == 0 else users[0]))}') + Helper_App.console_log(f'user {str(type(user))}: {user}') + Helper_App.console_log(f'type users: {str(type(users))}\n type user 0: {str(type(None if len(users) == 0 else users[0]))}') # error_list, cursor = self.get_error_list_from_cursor(cursor) errors = [] cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(f'raw errors: {result_set_e}') if len(result_set_e) > 0: errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # [SQL_Error(row[0], row[1]) for row in result_set_e] for error in errors: - print(f"Error [{error.code}]: {error.msg}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_User.db_cursor_clear(cursor) @@ -184,7 +185,7 @@ class DataStore_User(DataStore_Base): def get_many_user(self, user_filters, user=None): _m = 'DataStore_User.get_many_user' - print(_m) + Helper_App.console_log(_m) # av.val_str(user_filters, 'user_filters', _m) # av.val_list(permutations, 'list_permutations', _m, Product_Permutation, 1) av.val_instance(user_filters, 'user_filters', _m, User_Filters) @@ -218,33 +219,33 @@ class DataStore_User(DataStore_Base): """ cursor = result.cursor result_set = cursor.fetchall() - print(f'raw users: {result_set}') - print(f'type result set: {str(type(result_set))}') - print(f'len result set: {len(result_set)}') + Helper_App.console_log(f'raw users: {result_set}') + Helper_App.console_log(f'type result set: {str(type(result_set))}') + Helper_App.console_log(f'len result set: {len(result_set)}') """ user_permission_evals = [] for row in result_set: user_permission_eval = User_Permission_Evaluation.from_DB_user_eval(row) user_permission_evals.append(user_permission_eval) - print(f'user_permission_evals: {user_permission_evals}') + Helper_App.console_log(f'user_permission_evals: {user_permission_evals}') """ users = [] if len(result_set) > 0: for row in result_set: - print(f'row: {row}') + Helper_App.console_log(f'row: {row}') user = User.from_DB_user(row) users.append(user) - print(f'user {str(type(user))}: {user}') - print(f'type users: {str(type(users))}\n type user 0: {str(type(None if len(users) == 0 else users[0]))}') + Helper_App.console_log(f'user {str(type(user))}: {user}') + Helper_App.console_log(f'type users: {str(type(users))}\n type user 0: {str(type(None if len(users) == 0 else users[0]))}') # error_list, cursor = self.get_error_list_from_cursor(cursor) errors = [] cursor.nextset() result_set_e = cursor.fetchall() - print(f'raw errors: {result_set_e}') + Helper_App.console_log(f'raw errors: {result_set_e}') if len(result_set_e) > 0: errors = [SQL_Error.from_DB_record(row) for row in result_set_e] # [SQL_Error(row[0], row[1]) for row in result_set_e] for error in errors: - print(f"Error [{error.code}]: {error.msg}") + Helper_App.console_log(f"Error [{error.code}]: {error.msg}") DataStore_User.db_cursor_clear(cursor) diff --git a/helpers/__pycache__/helper_app.cpython-312.pyc b/helpers/__pycache__/helper_app.cpython-312.pyc index 13087f28e930b0da529a131e726a018ec8243258..9213c9d45cdc1780f4ba060362f70c51b84ce314 100644 GIT binary patch delta 871 zcmZ`$&rcIU7@Z$G-7VchT4+OoRz#(4FsQ)`3dSWEIQ1rp>tWM$mj>Oo>+BL~W5h!b zTudN)fCC2(9x(kMOnNinB8CLA(Zqv#E-A)DFU~Bj(StMDH*dc8ec#N!X@qy>=s`5v z1K5~qj20VP(bT=$Y_kmvpaBCK$bu!Lp%T_Gw{(f$E^q32LN@6~WWs*vK~)+6Hb% z0N`=w6dv&E@RIixCX)Y=-@>d%P}2Jad!Xcn(9P?MYxp5}1{IvENz{D0YC7(0jTm`1 zKdTTbvYzb5m9kT@Ox>y!y+J8i^vKmLt z800*T)Ctl|$m*ETya+iTL+ZHLyi7P(2+JuzR^J`m3;wm|82sZ>*WPX>TMd|ExK3r4 zbfeEfqtgz8Dw_(*`DFh7+=B%LQ=a9Am>bJ0MW5JorR=f?6-%b$w0ZBkve?a99^yuvhRgaI=zl01&2(}$7tPVqxz{G%M(%)ZLCFp#rtmH=`}$UDGO z>wSy|J>LMD;5;~lKThyMaYmf04C>%BiJhWeGSJ2#6mN0X8fEMhAu=4q0(Rbn*XI<` z7j@mJ6m;E}?5dG3yDJ6CEu;bipDbJXCFe=-@4;boh--gt@l%>9Rg6{3yh}4o;2t=f ev@nG56p2vyF$mzqCy+jql5lu4^&PM!sQ(S+c(vC6 delta 521 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 delta 9446 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 diff --git a/lib/argument_validation.py b/lib/argument_validation.py index aa25e46c..dc1746ba 100644 --- a/lib/argument_validation.py +++ b/lib/argument_validation.py @@ -7,24 +7,7 @@ Created on Thu Apr 27 12:33:59 2023 Argument Validation """ -# CLASSES -# ATTRIBUTE DECLARATION -# METHODS - # FUNCTION - # ARGUMENTS - # ARGUMENT VALIDATION - # ATTRIBUTE + VARIABLE INSTANTIATION - # METHODS - # RETURNS - -# NORMAL METHODS -# FUNCTION -# ARGUMENTS -# ARGUMENT VALIDATION -# VARIABLE INSTANTIATION -# METHODS -# RETURNS - +from helpers.helper_app import Helper_App from typing import Optional def error_msg_str(v, v_name, method, v_type, suppress_errors = False, suppress_console_outputs = False, v_arg_type = 'argument'): @@ -454,7 +437,7 @@ def input_bool(v_input, v_name, method, suppress_errors = False, suppress_consol val_bool(suppress_errors, 'suppress_errors', my_f) # suppress_console_outputs if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) return None # v_name if not val_str(v_name, 'v_name', my_f, 1, -1, suppress_errors, suppress_console_outputs): return None @@ -510,7 +493,7 @@ def full_val_bool(v_input, v_name, method, suppress_errors = False, suppress_con my_f = 'full_val_bool' val_bool(suppress_errors, 'suppress_errors', my_f) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) return False # method if not val_str(method, 'method', my_f, 1, -1, suppress_errors, suppress_console_outputs): return False @@ -539,7 +522,7 @@ def input_int(v_input, v_name, method, v_min = None, v_max = None, suppress_erro my_f = 'input_int' val_bool(suppress_errors, 'suppress_errors', my_f) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) return None # method if not val_str(method, 'method', my_f, 1, -1, suppress_errors, suppress_console_outputs): return None @@ -564,20 +547,20 @@ def input_int(v_input, v_name, method, v_min = None, v_max = None, suppress_erro except: if suppress_errors: if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return None int(v_input) if not str(type(v_min)) == "": if my_int < v_min: if suppress_errors: if not suppress_console_outputs: - print(f"{error_msg}\nInt input less than minimum value. Value = {v_input}, minimum = {v_min}.") + Helper_App.console_log(f"{error_msg}\nInt input less than minimum value. Value = {v_input}, minimum = {v_min}.") return None if not str(type(v_max)) == "": if my_int > v_max: if suppress_errors: if not suppress_console_outputs: - print(f"{error_msg}\nInt input greater than maximum value. Value = {v_input}, maximum = {v_max}.") + Helper_App.console_log(f"{error_msg}\nInt input greater than maximum value. Value = {v_input}, maximum = {v_max}.") return None # RETURNS return my_int @@ -599,7 +582,7 @@ def full_val_int(v_input, v_name, method, v_min = None, v_max = None, suppress_e my_f = 'full_val_int' val_bool(suppress_errors, 'suppress_errors', my_f) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) return False # v_name if not val_str(v_name, 'v_name', my_f, 1, -1, suppress_errors, suppress_console_outputs): return False @@ -633,7 +616,7 @@ def input_float(v_input, v_name, method, v_min = None, v_max = None, suppress_er my_f = 'input_float' val_bool(suppress_errors, 'suppress_errors', my_f) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) return None # method if not val_str(method, 'method', my_f, 1, -1, suppress_errors, suppress_console_outputs): return None @@ -658,20 +641,20 @@ def input_float(v_input, v_name, method, v_min = None, v_max = None, suppress_er except: if suppress_errors: if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return None float(v_input) if not str(type(v_min)) == "": if v_input < v_min: if suppress_errors: if not suppress_console_outputs: - print(f"{error_msg}\nInt input less than minimum value. Value = {v_input}, minimum = {v_min}.") + Helper_App.console_log(f"{error_msg}\nInt input less than minimum value. Value = {v_input}, minimum = {v_min}.") return None if not str(type(v_max)) == "": if v_input > v_max: if suppress_errors: if not suppress_console_outputs: - print(f"{error_msg}\nInt input greater than maximum value. Value = {v_input}, maximum = {v_max}.") + Helper_App.console_log(f"{error_msg}\nInt input greater than maximum value. Value = {v_input}, maximum = {v_max}.") return None # RETURNS return my_float @@ -692,7 +675,7 @@ def full_val_float(v_input, v_name, method, v_min = None, v_max = None, suppress my_f = 'full_val_float' val_bool(suppress_errors, 'suppress_errors', my_f) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) return False # method if not val_str(method, 'method', my_f, 1, -1, suppress_errors, suppress_console_outputs): return False @@ -746,7 +729,7 @@ def val_type(v_input, v_name, method, v_type, suppress_errors = False, suppress_ my_f = 'val_type' val_bool(suppress_errors, 'suppress_errors', my_f) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) return False # method if not val_str(method, 'method', my_f, 1, -1, suppress_errors, suppress_console_outputs): return False @@ -765,7 +748,7 @@ def val_type(v_input, v_name, method, v_type, suppress_errors = False, suppress_ if not mytype == v_type: # f"": if suppress_errors: if not suppress_console_outputs: - print(error_message) + Helper_App.console_log(error_message) return False raise ValueError(error_message) # RETURNS @@ -787,7 +770,7 @@ def val_instance(v_input, v_name, method, v_type, suppress_errors = False, suppr my_f = 'val_type' val_bool(suppress_errors, 'suppress_errors', my_f) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) return False # method if not val_str(method, 'method', my_f, 1, -1, suppress_errors, suppress_console_outputs): return False @@ -801,7 +784,7 @@ def val_instance(v_input, v_name, method, v_type, suppress_errors = False, suppr if not isinstance(v_type, type): # mytype == v_type: # f"": if suppress_errors: if not suppress_console_outputs: - print(error_message) + Helper_App.console_log(error_message) return False raise ValueError(error_message) # val_str(v_type, 'v_type', my_f, 6, -1, suppress_errors, suppress_console_outputs): return False # v_input @@ -811,7 +794,7 @@ def val_instance(v_input, v_name, method, v_type, suppress_errors = False, suppr if not isinstance(v_input, v_type): # mytype == v_type: # f"": if suppress_errors: if not suppress_console_outputs: - print(error_message) + Helper_App.console_log(error_message) return False raise ValueError(error_message) # RETURNS @@ -836,7 +819,7 @@ def val_list(v_input, v_name, method, v_type = '', min_len = -1, max_len = -1, s my_f = 'val_list' val_bool(suppress_errors, 'suppress_errors', my_f) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) return False # method if not val_str(method, 'method', my_f, 1, -1, suppress_errors, suppress_console_outputs): return False @@ -865,20 +848,20 @@ def val_list(v_input, v_name, method, v_type = '', min_len = -1, max_len = -1, s if not str(type(v_input)) == "": if suppress_errors: if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) L = len(v_input) if max_len > -1 and L > max_len: if suppress_errors: if not suppress_console_outputs: - print(error_msg + f'\nInvalid list length. Maximum = {max_len}, length = {L}') + Helper_App.console_log(error_msg + f'\nInvalid list length. Maximum = {max_len}, length = {L}') return False raise ValueError(error_msg + f'\nInvalid list length. Maximum = {max_len}, length = {L}') if L < min_len: if suppress_errors: if not suppress_console_outputs: - print(error_msg + f"Invalid list length. Minimum = {min_len}, length = {L}") + Helper_App.console_log(error_msg + f"Invalid list length. Minimum = {min_len}, length = {L}") return False raise ValueError(error_msg + f'\nInvalid list length. Minimum = {min_len}, length = {L}') if v_type != '' and L > 0: @@ -888,7 +871,7 @@ def val_list(v_input, v_name, method, v_type = '', min_len = -1, max_len = -1, s error_msg = error_msg + '\n' + error_msg_str(v_input[i], f'{v_name}[{i}]', my_f, v_type, False, False, 'list element') if suppress_errors: if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) # RETURNS @@ -913,7 +896,7 @@ def val_list_instances(v_input, v_name, method, v_type = None, min_len = -1, max my_f = 'val_list_instances' val_bool(suppress_errors, 'suppress_errors', my_f) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "", suppress_errors)) return False # method if not val_str(method, 'method', my_f, 1, -1, suppress_errors, suppress_console_outputs): return False @@ -942,20 +925,20 @@ def val_list_instances(v_input, v_name, method, v_type = None, min_len = -1, max if not str(type(v_input)) == "": if suppress_errors: if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) L = len(v_input) if max_len > -1 and L > max_len: if suppress_errors: if not suppress_console_outputs: - print(error_msg + f'\nInvalid list length. Maximum = {max_len}, length = {L}') + Helper_App.console_log(error_msg + f'\nInvalid list length. Maximum = {max_len}, length = {L}') return False raise ValueError(error_msg + f'\nInvalid list length. Maximum = {max_len}, length = {L}') if L < min_len: if suppress_errors: if not suppress_console_outputs: - print(error_msg + f"Invalid list length. Minimum = {min_len}, length = {L}") + Helper_App.console_log(error_msg + f"Invalid list length. Minimum = {min_len}, length = {L}") return False raise ValueError(error_msg + f'\nInvalid list length. Minimum = {min_len}, length = {L}') if v_type != '' and L > 0: @@ -965,7 +948,7 @@ def val_list_instances(v_input, v_name, method, v_type = None, min_len = -1, max error_msg = error_msg + '\n' + error_msg_str(v_input[i], f'{v_name}[{i}]', my_f, v_type, False, False, 'list element') if suppress_errors: if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) # RETURNS @@ -995,7 +978,7 @@ def val_nested_list(v_input, v_name, method, depth_i, depth_max, v_type = '', v_ my_f = 'val_nested_list' val_bool(suppress_errors, 'suppress_errors', my_f) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "")) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "")) return False # method if not val_str(method, 'method', my_f, 1, -1, suppress_errors, suppress_console_outputs): return False @@ -1015,14 +998,14 @@ def val_nested_list(v_input, v_name, method, depth_i, depth_max, v_type = '', v_ if not (val_list(v_mins, 'v_mins', my_f, "", depth_max + 1, depth_max + 1, True, True) or v_mins == []): error_msg = error_msg_str(v_mins, 'v_mins', my_f, "") if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) # v_maxs if not (val_list(v_maxs, 'v_maxs', my_f, "", depth_max + 1, depth_max + 1, True, True) or v_maxs == []): error_msg = error_msg_str(v_maxs, 'v_maxs', my_f, "") if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) # allow_nuns @@ -1032,7 +1015,7 @@ def val_nested_list(v_input, v_name, method, depth_i, depth_max, v_type = '', v_ error_msg = error_msg_str(v_input, v_name, method, mytype, suppress_errors, suppress_console_outputs, v_arg_type) if not val_list(v_input, v_name, method, mytype, v_min, v_max, suppress_errors, suppress_console_outputs, allow_nuns, v_arg_type): if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False # METHODS L = len(v_input) @@ -1040,7 +1023,7 @@ def val_nested_list(v_input, v_name, method, depth_i, depth_max, v_type = '', v_ if v_min > -1: if suppress_errors: if not suppress_console_outputs: - print(error_msg + f'\nMinimum length {v_min} not met.') + Helper_App.console_log(error_msg + f'\nMinimum length {v_min} not met.') return False raise ValueError(error_msg + f'\nMinimum length {v_min} not met.') elif depth_i < depth_max: @@ -1048,22 +1031,22 @@ def val_nested_list(v_input, v_name, method, depth_i, depth_max, v_type = '', v_ if not (v_mins == [] or v_maxs == []): if not val_nested_list(v_input[i], v_name, method, depth_i + 1, depth_max, v_type, v_mins[depth_i + 1], v_mins, v_maxs[depth_i + 1], v_maxs, suppress_errors, suppress_console_outputs, v_arg_type): if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False elif not v_mins == []: if not val_nested_list(v_input[i], v_name, method, depth_i + 1, depth_max, v_type, v_mins[depth_i + 1], v_mins, -1, v_maxs, suppress_errors, suppress_console_outputs, v_arg_type): if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False elif not v_maxs == []: if not val_nested_list(v_input[i], v_name, method, depth_i + 1, depth_max, v_type, -1, v_mins, v_maxs[depth_i + 1], v_maxs, suppress_errors, suppress_console_outputs, v_arg_type): if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False else: if not val_nested_list(v_input[i], v_name, method, depth_i + 1, depth_max, v_type, -1, v_mins, -1, v_maxs, suppress_errors, suppress_console_outputs, v_arg_type): if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False # RETURNS return True @@ -1092,7 +1075,7 @@ def val_nested_list_instances(v_input, v_name, method, depth_i, depth_max, v_typ my_f = 'val_nested_list' val_bool(suppress_errors, 'suppress_errors', my_f) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "")) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "")) return False # method if not val_str(method, 'method', my_f, 1, -1, suppress_errors, suppress_console_outputs): return False @@ -1112,14 +1095,14 @@ def val_nested_list_instances(v_input, v_name, method, depth_i, depth_max, v_typ if not (val_list(v_mins, 'v_mins', my_f, "", depth_max + 1, depth_max + 1, True, True) or v_mins == []): error_msg = error_msg_str(v_mins, 'v_mins', my_f, "") if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) # v_maxs if not (val_list(v_maxs, 'v_maxs', my_f, "", depth_max + 1, depth_max + 1, True, True) or v_maxs == []): error_msg = error_msg_str(v_maxs, 'v_maxs', my_f, "") if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) # allow_nuns @@ -1129,7 +1112,7 @@ def val_nested_list_instances(v_input, v_name, method, depth_i, depth_max, v_typ error_msg = error_msg_str(v_input, v_name, method, mytype, suppress_errors, suppress_console_outputs, v_arg_type) if not val_list_instances(v_input, v_name, method, mytype, v_min, v_max, suppress_errors, suppress_console_outputs, allow_nuns, v_arg_type): if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False # METHODS L = len(v_input) @@ -1137,7 +1120,7 @@ def val_nested_list_instances(v_input, v_name, method, depth_i, depth_max, v_typ if v_min > -1: if suppress_errors: if not suppress_console_outputs: - print(error_msg + f'\nMinimum length {v_min} not met.') + Helper_App.console_log(error_msg + f'\nMinimum length {v_min} not met.') return False raise ValueError(error_msg + f'\nMinimum length {v_min} not met.') elif depth_i < depth_max: @@ -1145,22 +1128,22 @@ def val_nested_list_instances(v_input, v_name, method, depth_i, depth_max, v_typ if not (v_mins == [] or v_maxs == []): if not val_nested_list(v_input[i], v_name, method, depth_i + 1, depth_max, v_type, v_mins[depth_i + 1], v_mins, v_maxs[depth_i + 1], v_maxs, suppress_errors, suppress_console_outputs, allow_nuns, v_arg_type): if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False elif not v_mins == []: if not val_nested_list(v_input[i], v_name, method, depth_i + 1, depth_max, v_type, v_mins[depth_i + 1], v_mins, -1, v_maxs, suppress_errors, suppress_console_outputs, allow_nuns, v_arg_type): if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False elif not v_maxs == []: if not val_nested_list(v_input[i], v_name, method, depth_i + 1, depth_max, v_type, -1, v_mins, v_maxs[depth_i + 1], v_maxs, suppress_errors, suppress_console_outputs, allow_nuns, v_arg_type): if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False else: if not val_nested_list(v_input[i], v_name, method, depth_i + 1, depth_max, v_type, -1, v_mins, -1, v_maxs, suppress_errors, suppress_console_outputs, allow_nuns, v_arg_type): if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False # RETURNS return True @@ -1183,7 +1166,7 @@ def val_url(v_input, v_name, method, min_len = 12, max_len = -1, suppress_errors v_type = "" val_bool(suppress_errors, 'suppress_errors', _m) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', _m, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', _m, "")) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', _m, "")) return False # method if not val_str(method, 'method', _m, -1, -1, suppress_errors, suppress_console_outputs): return False @@ -1203,7 +1186,7 @@ def val_url(v_input, v_name, method, min_len = 12, max_len = -1, suppress_errors if not (v_input[:8] == r'https://' or v_input[:7] == r'http://'): if suppress_errors: if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) # RETURNS @@ -1243,7 +1226,7 @@ def val_DataFrame(v_input, v_name, method, v_types=[], min_col=-1, max_col=-1, c my_f = 'val_DataFrame' val_bool(suppress_errors, 'suppress_errors', my_f) if not val_bool(suppress_console_outputs, 'suppress_console_outputs', my_f, suppress_errors): - print(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "")) + Helper_App.console_log(error_msg_str(suppress_console_outputs, 'suppress_console_outputs', my_f, "")) return False # method if not val_str(method, 'method', my_f, 1, -1, suppress_errors, suppress_console_outputs): return False @@ -1264,14 +1247,14 @@ def val_DataFrame(v_input, v_name, method, v_types=[], min_col=-1, max_col=-1, c if not (val_list(v_types, 'v_types', my_f, "", min_col, max_col, True, True, True) or v_types == []): error_msg = error_msg_str(v_types, 'v_types', my_f, str) if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) # cols if not (val_list(cols, 'cols', my_f, "", min_col, max_col, True, True) or cols == []): error_msg = error_msg_str(cols, 'cols', my_f, "") if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) # v_input @@ -1282,14 +1265,14 @@ def val_DataFrame(v_input, v_name, method, v_types=[], min_col=-1, max_col=-1, c if (min_col > 0 and n_c < min_col) or (max_col > 0 and n_c > max_col): if suppress_errors: if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) my_sz = len(v_input.index) if (min_sz > 0 and my_sz < min_sz) or (max_sz > 0 and my_sz > max_sz): if suppress_errors: if not suppress_console_outputs: - print(error_msg) + Helper_App.console_log(error_msg) return False raise ValueError(error_msg) if not v_types == []: @@ -1297,7 +1280,7 @@ def val_DataFrame(v_input, v_name, method, v_types=[], min_col=-1, max_col=-1, c if not (v_types[col_i] == None or str(type(v_types[col_i])) == "" and val_type(v_input.at[0, v_input.columns[col_i]], 'v_input.at[0, v_input.columns[col_i]]', my_f, v_types[col_i], True, False) or val_instance(v_input.at[0, v_input.columns[col_i]], 'v_input.at[0, v_input.columns[col_i]]', my_f, v_types[col_i], True, False)): # str(type(v_input[v_input.columns[col_i]][0])) == v_types[col_i] or v_types[col_i] == '': if suppress_errors: if not suppress_console_outputs: - print(error_msg + f'\nInvalid data type {str(type(v_input.at[0, v_input.columns[col_i]]))} in column {v_input.columns[col_i]}') + Helper_App.console_log(error_msg + f'\nInvalid data type {str(type(v_input.at[0, v_input.columns[col_i]]))} in column {v_input.columns[col_i]}') return False raise ValueError(error_msg + f'\nInvalid data type {str(type(v_input.at[0, v_input.columns[col_i]]))} in column {v_input.columns[col_i]}') if not cols == []: @@ -1305,7 +1288,7 @@ def val_DataFrame(v_input, v_name, method, v_types=[], min_col=-1, max_col=-1, c if not v_input.columns[col_i] == cols[col_i] or cols[col_i] == '': if suppress_errors: if not suppress_console_outputs: - print(error_msg + f'\nInvalid column heading for column {v_input.columns[col_i]}') + Helper_App.console_log(error_msg + f'\nInvalid column heading for column {v_input.columns[col_i]}') return False raise ValueError(error_msg + f'\nInvalid column heading for column {v_input.columns[col_i]}') # RETURNS @@ -1314,5 +1297,5 @@ def val_DataFrame(v_input, v_name, method, v_types=[], min_col=-1, max_col=-1, c if __name__ == '__main__': - print(input_bool('true', 'input_bool', 'test')) - print(input_bool(None, 'input_bool', 'test')) \ No newline at end of file + Helper_App.console_log(input_bool('true', 'input_bool', 'test')) + Helper_App.console_log(input_bool(None, 'input_bool', 'test')) \ No newline at end of file diff --git a/models/__pycache__/model_view_admin.cpython-312.pyc b/models/__pycache__/model_view_admin.cpython-312.pyc index b3c78373683e14ebfa0b71f26c6714ee6a9d4286..0fcbd85c6f5a62557a14d6e468fbb2b3a7085eba 100644 GIT binary patch delta 511 zcmZ3)`InRTG%qg~0}!~bR!BcJkynz@Z=$-cS_)$dYYuxZM-&Gm0~3QgLke39LkfE; z%W7tjS_XzF&PonV&WU;dxVb!1a|%+6;vEYLCTBAC`NRNar!r1wNMWpHE@1>K1`=6J zFcyNYVV=#9!Zep@HB=QNLkTNPwv(lXp_gZ}K2xwTOA*M65#d zq!_s-FJ+p*$T!)HSx!wHsG`^yNc?DExWTK@!E}d1=sJhoMGm-SA1w^uS(sTp z7(Xz8$RZJ#3O`M*TkP@iDf!9q@wbFBz@bsB2chE=3ko347t760NzEzNs|VBZWtpkv z@kxorsYNV6b8c}IRHh{6m1HItfkNOGTS;X>W?p&`8_bR(ZV(G>CCGWdIBbB%l;)(` z70Cg)Aa@sQ0ErLGjEsyQnYb8PzDhALYTacp`pU+@D1Vnh`U?vyqX*-J`mbCJAO_ed E06Xt>w*UYD delta 421 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 diff --git a/models/__pycache__/model_view_store.cpython-312.pyc b/models/__pycache__/model_view_store.cpython-312.pyc index fabac8d754d1227af547b983981bb57d9d5d757f..f9cb0397c3a090b7c83118cca45ecc285b085745 100644 GIT binary patch delta 3677 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 delta 1480 zcma)6Ux*t;7@yf>v%9(M-saEd{-n9)vc_C4t(baHTfA~ji?&x!5PKFY=X&n$#f1Dh zX6I-R66ixgeW+d?q=*#z;EUXo^huBdMWG_d2CtkAf*>e9)>f#e4?2_FHo*sR9=`eJ z`+ncd_iw(f1Ak2`-^g+h(8a5K>DBmEWfWe%ntdg&LSR8ls)lQk^AQLnz=3Cg6}$|r zAzR+`F$)0BN7uz%=#$Sbz?;XpI~-gj34ZFyDi6SW@EWym`7rDu0ciR@02X(h+uV~t zfH_b1R;UTCNaP(}(*#e}-?2nK387+Qdm)h{91)2*%<|;{de8rhpS3tSMIZ(M!k4=Yg1N@dJv!B~xdG z5l!=q`a71%3xWSxCqqCTYdeE6ASRmLAod)WSd5mp}QpFD2Bx)9V7 zqREwj$t~$D5S)F85-VvIhM&eWMGC$s*%BjT5l=nf4lM{xBXxneLX4q7uMIg+Om+BGRIX$4YiOy+;zI#SI%>(rMs2yiZmgn)wPs?( zTB#E>m$6-Hpt9|Bd{w*N5%<&%dW_jBWFngPDU&rsOw;g6qRd%ee7HyKPr!= zUZSk?F8w2aTms+AkH5+NAj%t&4gbc1tE9I@o#cn#&&jTu`Y3wi>`vxzJ9Bs^Q*397 z-%XxyQzzY%i|&i2yJ)$Jy)CYg`@_#C6jx2(nAy>1+xqN|eyXjXa?__>Wqw;cLu}QW zq_=hTGi{xs=Gyw)zfpJ9E9d^-o43W4-Fsnh=q$H;PXyU#x!s>qFFT_&sIQJp&1c11 zqv81j{#(<2O1~Z(nJA_1uLv3PrOVWmycqp{! zf`T4AED!M@LKVE&^&orkZ%~mH1efCe4GOv-o_sIa;5)qe=9_unOlI;+{j6m^%CZRb zJe*WIvbdSi(3{O8y+$5^iA>R+b(Cfyz>+=Zs7*D%Xx@u7!<;>u$f|rU=!@C|=hNA%Lgo87(r3`4oqz%aM)5?7i4? zFu51p z#r<4FcJr*M7<3iVN|cdGy(N?;uM>urr#ZTe)6`6*cE9KKZOgFx9g^ek=qxzRb}Zj; zTD^hc;=Xye?PI2^3%EcHW+`}{jQOkl9D|GGC%;lVN})HR*Pr{aE1!A9eHZfIgwhwG zG_H=7@y(s`@vp)OaxvLL8hM%gq*U1hHlhkWI8f5bhHwg^3RlVYX5#2%fSsKbX+48h*{L>$ZUBczS#hdvYD`sC3@tW%P)rzt7;*yzxT%M$KVq zC=WM2=Ifv71$?S*5(mGl@5>89D)ThYgQdfocucR8tN4drp$@-s3v3ZDYjdQ48`@br z^;S7QrhV4y2P_`23MSg6TVji`z7=jpQ74EW^nBJ7jOlqPw-tn;=edM6I2(zluTBib zFENqk@RxR97oKV9){gGx>IC=o<(md4$Juz$-|g-&@ztqhQSJ3 S<)yHQR!}iqTrz61ko^a*n|TfZ diff --git a/models/__pycache__/model_view_store_product_permutation.cpython-312.pyc b/models/__pycache__/model_view_store_product_permutation.cpython-312.pyc index ebeed7d23e1a78b71fa0b3a67f174f3ff97bfcea..e04f3cd9772595923bdb885c386abfaa1f26b7af 100644 GIT binary patch delta 1422 zcmah}Uuaup6#u^4{JFV*(%dAsS&}wMn>B0d+K%Q9>n5d>4QJ^x=X_aQi8Z-qx#S;T zZo!OX_F;${2#$j&2ohhdNTp9>AU=p=3X(t}687M`559^Z`h7`mGep>ZIN$lsIluGg zJLjJJrw^CppJiD<^t-noEBx_54&pB!oOC8Fj#mrKxft z6TpZ=ucEwk7v*K0+n-==5XzirxRUN~zxxrplejNj)=M>=WG~cehj%&q1YU&u_Jz6I zc7#5`pVA<$2@?;22pOEkAq3ys!;3cSeotzmk7R_JToZpiu|KlI$aIY?pv$YaCNd<5 zIA#Kq7H)sUwCqj0p}-rCc-%sumV?PG%kgQt;4?=Yu+s;>ID#vprD-|;KT}Je=V|;Y zIOj~jf>Xf~Eb|H5d)SzUJ;l$BG;OCMMlD2>hYj8j9jAz6@YFfKJvXk((phD8+#!*;vrR3u( zsLLcxA~biC&PEeuRSQe`vYl~0WI#u?^R5prAs<+yFyrk2nYj8(7+^K$4J zyB7z@>1QNs6giL2v%t_6WE_ESggvYtu80QqMG5O?U(8i2^=e7amZ}B#Qd-9<{3eA( z57m(~j40rcU&B-Ix_tUg7LEiNELhOZYEf}va@i?kVr>@sTbcY0tI&?d?u9b;N7XaeqGR8_GMgse_9>E#1}9J?%zU zyU|HyI?=a|_?z&-Wd76$J+ivg)h_k4YhCTye{DriFnnygdZ6`ETiw)FXZ1=anm*#M z!b_gNXMT_tHk170cxZE(f5I!9Dch5fjnbc7fz36zt~~NxWa+a75sSshpsX~^de7tQ zulG>VNL4uHBzP9 z#%z!%NWK;SStgX~=8jp+m38x0HBZuT)u)EGsG`pH&c-kswlD}I({RW4P>fmEWbp76 z|0Gtuw+3shzC1j$JGB}S;flI(j{PlthuNqVD+NL~)X)uK14&|xuxkI}UoKbkyCr>{ W6zG)&uCK#mHGz}xyBfB|sNi4HKOwIG delta 1401 zcmZ`(TWBLy7(OS><>WHS}OKCFV;?T^SJ$RfT~7Nk$2Z_AcdADmzzOHlNAAH)Y2MG!n^+Q}9#^YEYleCPYG z=RdPwcxOTQRuDXheVcoMt?iq_6yCi#yLmo{Q59F+jZibZ9yWDPBhr-CC5&w71yuFE zg{r=qZEu2`BD5aulDzQwHwSqCW1C|F=iyVwod2`~p%3tf%u|0t$MB0Iv0^*oBlNbf zhu(D~)U);QXA^tJI7Yh5VyMK@95L=L(XvbaMdH?bI|h42vaA{&YSGS3FK*${S#w93%`11 zaS|rI+c>g+%d29N8aX<&-qIl|lxBGj)Xv06+^XqHbEDN&I<#HAR?#V+33`?b5#AIo zV+rmF3r-%HPQvfPbS%p40(DKf)~f4D`&C7+H)}Ko1%K=u@9xO2w-r@ux0H5AueVz? z#K62jpWrUc$QjPEDNPy%-QV@{o2H9QyitIzV+N7|k}j~VcAd@sAKU1Guz17v0}*yY zJNBJ5!=F7QGOPwZO85;idwX#xFAe0Sp?ql|Uox_n4S)HNtb$9dz9<}@FAikJS{}&D z|6o1H%?)#? zm>d-2Whc3x4wk+4`%l`L{5lgWi|}*s%kTm*5FR4h+l$-p$wh|U->Rp!LHzgEG(k+VFHy%);z6lmZLA-a;X(|ZL!@b}6 z&bjBFpF8Kfqkm8Ow*|qA=yz>%Xk{pR)!&OhygIr(D`Hf@1&#%GZ#W{;s_*teS_IC!CKG+O+}Vw|jkSJi z(+^*{#JdAFx9<8M&+w%?3<}TDC<9o8Np~c6xDd9Vg0qgaVR+t?hIcs;`zey(HBO4X zfVDB(sIwm!|LhipahtDmS{mHk0G@ypmpT%%`Ty>Ltu1s@ZwD7Tv@uZJBbdb^;Yq8& zyIiyrkwZHM1D<%ab1QEgw|!|@IOR$H+xTtI0KONtJQKddiNhVwNZT$tWuNZsENhUx zDLf9Rycyvj6B_CLG^AvF(6*(GPuQ3?18K7?&gu^iJ)1)!tqn0gxsZy?0bXCzSE3oAo#}W9^SCrVpYw;_p zp%m2R{Hkt{ASl9nPq8ONVoce`l%;%mO<64$DN^&bRic*EvO#*8K2WT+HI-$>D3(;h zUSvx=IJLA&h+1A+BN8n5LqS#;IY3x72z$$91TOh+xmZPr3=aq7^brbc$LQbt$IIw@ zA#=s?0~c&^gAHzQV|XL9ao$X1cDO8D34EQD+Ps;Zx*2LtpKeT_ZcbllOkXgk6f^PM z4wnbLr!cyI+Dv9{oM>j}8`=40cA=47XlBngvS-cAqM10i!#xYX_I%L4?{Q=BhVS}| z=7VRGA|@bj9H#NyO*i3n{~~Zp(cn2fs^$_pm;YZo0GrijpsvD@NWZ(vB$# z2{IKM1udsutQmw=knnIa)Grd&rWRKv6*|+5H8KRXPgB)_ERYqgSUT&xrbyT2tU zip4Fdx~?cPCMPLdW5aHy9c2%Ngf0DWC-gbb;y#kpYG*FRTcEau1X$g;iaBh^$bN-CLW1o@jbl-bHuqxe!k5 UqWEvlIgFpd=J4@7WFgDJKV!>JY5)KL delta 1409 zcmah}O>7%Q6rS0v?X}mtw&TAzZfeI)Vw>itGz}`KBvz!-q>X_i3Qb2=?WA7(6J{q; zf*gedNN}i>^7!cqnnMv%5C~NQdPQ79B(#=-f-EG&g#!X{LgGh4%sAONH|Fr>y>H&U z_r5p#_TP!`#`S$o^B}%%?)p~lNABu<_}#mi<*8nbO1R{%25X_kP)GMv!?nm_1S1Ju zMJ4q$RPvUk-5zllp~dKilG8r>_DlTmZRr;YXJN~c)t8+Jy@TK5kv4l6hCN4oOgi#M z=uN$e?zj!4;H@F^IVzKT0DRC7t{7tOtMz5Fw$5itWqn} zKKMkBW_rb$&Kkrp8+FoHWtB#q3aU9D75r#Oh!p&)f29hJly@J!G6YMGGg(3^A|M&% zklDxQ=+9Tt_uAwe(hrKZ-McMs7c4z>proP4zZcgnf950kFgx4I&K_n9t!%-{JZtIC z9VpMkZ~oGtX8BY1FCL~Zw$fbYTj~5^dajk8vr_Yxe(gZH4(oxPh`z1gYu>9{qgSkF zUbL>tR_)(Gifx60KjAvsL1anuw;nm=MCelS#sINT0DQj@ls>x0qA zKah`JeoD+i+sQUoEAR@&w_YRFBQbc;_D(Fy(mZz#rczNJBNS1|C{fh|1q^~xpI5bpN|iH>#?~)9=f#KFh<_|+dl0&ZAMlG?UJG{v5vp<4U99L&pY*xj zt+0)5iwM~s8$a>3_jDN9*hb2}$`V|CEyAAplLg}X2YY)jTgzv~T(-RjT7KJKlh}?w zFNNH*Rv?6IR79 zyF-q}6CBC{9RLP$(joSNTnVHB=GcYM=n)fvpJ>c#b_6rb&jM$b)p2 z{TA{o5$;fU3CC+%)QKrdN!Jal1O=PCO&B?aNmF=A$EQ`f47%%f69*Io107Kq2kirs z;>IBjYVfI9O*+V~MMipaKni88WSVu=S}`iLz&0bvfuo!^;nSS%RttZCf=RI-k?#T& z+;QbNdm}zf##cHY-kj|2N~zJHge^tqC!mpzlJ*1Y1VaBiWUg*hRyB2=E^-%AnN#d_ aG?SLUqLH5{{l_?WJtZGPIA+Vn3iO$xP?77;DQLbXK@m3k_LF?2(_A=!CK}e3SJ6&&_(d(QM?G^L7bP(TAah1_rCYdd-J`S&x3#R%6mnL zBfggJB{yH~DLGu-n>b%eV5DPRtSNPMO~pt+%Se}QAw5_l8M92+2MY`}zXm=5e9M1FC-MEV$#5hNA@qVb?#W8ZR zi%7Q@LJnv6tJ=A45c#`{s?m-&{U08*YlR&pNVL07E8<3~8Y@N%Nh!#+qA|ovrP+Ek z?@t9X9LccT(Q%w*`_YM9B48UlL;lru5xXX29*S~qARrv=wCGCJ0X8O%;~`$8!0Muu z?LW!~9%l`+`(hp!;0id!-igL=if2n{FVdif>39))yHTN@M2KM;4k0wj)}>Rk8BX$& zn-z!D%Vv{oY*Sh>H=0xfTy-o`wJnoa4acxd+QUJrvbWO7R2quQGzSPYqJvC}U6sm z;_3>yytsUhtX{pu4iicm2H?pXwX$v3E6$ds(>eAd(c3@6aT~t!SzitOND8Kp4Jlt` z(9sD?JuId^VK3FwQ=p`S(PQ9sC@_iN(tO?0w`-LJdVz;f)ShA^TAnRxnK01)0&>H! AQ~&?~ diff --git a/models/model_view_admin.py b/models/model_view_admin.py index 59994d84..9e87f03d 100644 --- a/models/model_view_admin.py +++ b/models/model_view_admin.py @@ -11,6 +11,7 @@ Data model for store permutations view """ # internal +from helpers.helper_app import Helper_App from models.model_view_base import Model_View_Base # external @@ -21,5 +22,5 @@ class Model_View_Admin(Model_View_Base): def __init__(self, hash_page_current, **kwargs): _m = 'Model_View_Admin.__init__' - print(f'{_m}\nstarting') + Helper_App.console_log(f'{_m}\nstarting') super().__init__(hash_page_current=hash_page_current, **kwargs) \ No newline at end of file diff --git a/models/model_view_base.py b/models/model_view_base.py index 75476cf3..7fd72e6f 100644 --- a/models/model_view_base.py +++ b/models/model_view_base.py @@ -17,15 +17,16 @@ Base data model for views # IMPORTS # internal # from routes import bp_home -import lib.argument_validation as av -from forms.forms import Form_Is_Included_VAT, Form_Delivery_Region, Form_Currency -from datastores.datastore_base import DataStore_Base -from datastores.datastore_user import DataStore_User from business_objects.base import Base from business_objects.store.product_category import Product_Category -from forms.access_level import Filters_Access_Level -from forms.unit_measurement import Filters_Unit_Measurement from business_objects.user import User, User_Filters +from datastores.datastore_base import DataStore_Base +from datastores.datastore_user import DataStore_User +from forms.access_level import Filters_Access_Level +from forms.forms import Form_Is_Included_VAT, Form_Delivery_Region, Form_Currency +from forms.unit_measurement import Filters_Unit_Measurement +from helpers.helper_app import Helper_App +import lib.argument_validation as av # external from abc import ABC, abstractmethod from flask_sqlalchemy import SQLAlchemy @@ -243,7 +244,7 @@ class Model_View_Base(BaseModel, ABC): # Initialiser - validation _m = 'Model_View_Base.__new__' v_arg_type = 'class attribute' - print(f'{_m}\nstarting') + Helper_App.console_log(f'{_m}\nstarting') # return super().__new__(cls, *args, **kwargs) av.val_instance(db, 'db', _m, SQLAlchemy, v_arg_type=v_arg_type) return super(Model_View_Base, cls).__new__(cls) @@ -253,7 +254,7 @@ class Model_View_Base(BaseModel, ABC): """ _m = 'Model_View_Base.__init__' v_arg_type = 'class attribute' - print(f'{_m}\nstarting') + Helper_App.console_log(f'{_m}\nstarting') av.val_instance(db, 'db', _m, SQLAlchemy, v_arg_type=v_arg_type) """ BaseModel.__init__(self, hash_page_current=hash_page_current, **kwargs) @@ -261,9 +262,9 @@ class Model_View_Base(BaseModel, ABC): self.db = db self.session = session info_user = self.get_info_user() - print(f'info_user: {info_user}\ntype: {str(type(info_user))}') + Helper_App.console_log(f'info_user: {info_user}\ntype: {str(type(info_user))}') self.is_user_logged_in = ('sub' in list(info_user.keys()) and not info_user['sub'] == '' and not str(type(info_user['sub'])) == " 0: # not (categories is None): for category in category_list.categories: @@ -404,8 +405,8 @@ class Model_View_Store(Model_View_Base): if len(items) > 0: for index_item in range(len(items)): """ - print(f'basket data: {json_data}') - print(f'basket: {self.basket}') + Helper_App.console_log(f'basket data: {json_data}') + Helper_App.console_log(f'basket: {self.basket}') # ids_permutation_unavailable_region_or_currency = [] # id_permutation_unavailable_otherwise = [] @@ -445,11 +446,11 @@ class Model_View_Store(Model_View_Base): def import_JSON_basket_item(self, json_data, form_basket = None): _m = 'Model_View_Store.import_JSON_basket_item' - print(f'starting {_m}') - # print('getting product id') + Helper_App.console_log(f'starting {_m}') + # Helper_App.console_log('getting product id') # product_id = av.input_int(json_data[self.key_id_product], self.key_id_product, _m) - # print(f'product id: {product_id}, type: {str(type(product_id))}') + # Helper_App.console_log(f'product id: {product_id}, type: {str(type(product_id))}') try: permutation_id = json_data[self.KEY_ID_PERMUTATION] av.full_val_int(permutation_id, self.KEY_ID_PERMUTATION, _m) @@ -457,21 +458,21 @@ class Model_View_Store(Model_View_Base): except: permutation_id = None if not permutation_id == 'None': - print(f'permutation_id invalid: {permutation_id}') + Helper_App.console_log(f'permutation_id invalid: {permutation_id}') raise ValueError("Invalid permutation id") - print(f'permutation_id: {permutation_id}') + Helper_App.console_log(f'permutation_id: {permutation_id}') try: - print(f'form_basket: {form_basket}') - print('getting quantity') - print(f'form_basket.quantity: {form_basket.quantity}') - print(f'form_basket.quantity.data: {form_basket.quantity.data}') + Helper_App.console_log(f'form_basket: {form_basket}') + Helper_App.console_log('getting quantity') + Helper_App.console_log(f'form_basket.quantity: {form_basket.quantity}') + Helper_App.console_log(f'form_basket.quantity.data: {form_basket.quantity.data}') quantity = int(form_basket.quantity.data) except: quantity = 0 - print(f'quantity: {quantity}') + Helper_App.console_log(f'quantity: {quantity}') - print(f'permutation_id: {permutation_id}\nquantity: {quantity}') + Helper_App.console_log(f'permutation_id: {permutation_id}\nquantity: {quantity}') return permutation_id, quantity diff --git a/models/model_view_store_manufacturing_purchase_order.py b/models/model_view_store_manufacturing_purchase_order.py index 92658044..0c5693a1 100644 --- a/models/model_view_store_manufacturing_purchase_order.py +++ b/models/model_view_store_manufacturing_purchase_order.py @@ -17,6 +17,7 @@ from business_objects.store.product import Product, Parameters_Product from business_objects.store.product_category import Product_Category_Container from business_objects.store.manufacturing_purchase_order import Manufacturing_Purchase_Order, Parameters_Manufacturing_Purchase_Order, Manufacturing_Purchase_Order_Product_Link from forms.store.manufacturing_purchase_order import Filters_Manufacturing_Purchase_Order +from helpers.helper_app import Helper_App import lib.argument_validation as av # external from typing import ClassVar @@ -41,7 +42,7 @@ class Model_View_Store_Manufacturing_Purchase_Order(Model_View_Store): def __init__(self, form_filters_old, hash_page_current=Model_View_Store.HASH_PAGE_STORE_MANUFACTURING_PURCHASE_ORDERS): _m = 'Model_View_Store_Manufacturing.__init__' - print(f'{_m}\nstarting...') + Helper_App.console_log(f'{_m}\nstarting...') super().__init__(hash_page_current = hash_page_current, form_filters_old = form_filters_old) self.form_filters = form_filters_old # Filters_Manufacturing_Purchase_Order.from_json(form_filters_old.to_json()) parameters_manufacturing_purchase_order = Parameters_Manufacturing_Purchase_Order.from_filters_manufacturing_purchase_order(form_filters_old) diff --git a/models/model_view_store_product.py b/models/model_view_store_product.py index e5c42ed2..7f61251e 100644 --- a/models/model_view_store_product.py +++ b/models/model_view_store_product.py @@ -21,6 +21,7 @@ from business_objects.store.product_category import Product_Category_Container from datastores.datastore_store_product import DataStore_Store_Product from forms.access_level import Filters_Access_Level from forms.store.product import Filters_Product +from helpers.helper_app import Helper_App from models.model_view_store import Model_View_Store # from routes import bp_home import lib.argument_validation as av @@ -40,9 +41,9 @@ class Model_View_Store_Product(Model_View_Store): def __init__(self, id_permutation, id_currency, id_region_delivery, is_included_VAT, hash_page_current=Model_View_Store.HASH_PAGE_STORE_PRODUCTS): # Constructor _m = 'Model_View_Store_Product.__init__' - print(f'{_m}\nstarting...') + Helper_App.console_log(f'{_m}\nstarting...') super().__init__(hash_page_current=hash_page_current, id_currency=id_currency, id_region_delivery=id_region_delivery, is_included_VAT=is_included_VAT) - print('supered') + Helper_App.console_log('supered') category_list = DataStore_Store_Base().get_many_product(Parameters_Product( self.info_user['sub'], @@ -54,7 +55,7 @@ class Model_View_Store_Product(Model_View_Store): False, str(id_currency), False, True, '', False )) # product_ids=str(id_product), permutation_ids=str(id_permutation)) - print('connection to db successful') + Helper_App.console_log('connection to db successful') # self.categories = categories # self.category_index = category_index "" @@ -62,7 +63,7 @@ class Model_View_Store_Product(Model_View_Store): self.product = category_list.get_permutation_first() else: self.product = None - print('selected permutation selected') + Helper_App.console_log('selected permutation selected') "" """ @@ -88,7 +89,7 @@ class Model_View_Store_Product(Model_View_Store): def __init__(self, form_filters, hash_page_current=Model_View_Store.HASH_PAGE_STORE_PRODUCTS): _m = 'Model_View_Store_Product.__init__' - print(f'{_m}\nstarting...') + Helper_App.console_log(f'{_m}\nstarting...') super().__init__(hash_page_current=hash_page_current, form_filters=form_filters) self.access_levels = self.get_many_access_level(Filters_Access_Level()) parameters_product = Parameters_Product.from_form_filters_product(self.form_filters) @@ -97,7 +98,7 @@ class Model_View_Store_Product(Model_View_Store): countProducts = 0 for category in self.category_list.categories: countProducts += len(category.products) - print(f'category count: {len(self.category_list.categories)}\nproduct count: {countProducts}') + Helper_App.console_log(f'category count: {len(self.category_list.categories)}\nproduct count: {countProducts}') self.category_list_filters, errors_filters = datastore_store.get_many_product( Parameters_Product( get_all_product_category = True, @@ -115,16 +116,16 @@ class Model_View_Store_Product(Model_View_Store): get_products_quantity_stock_below_min = parameters_product.get_products_quantity_stock_below_min ) ) - print(f'category filters: {self.category_list_filters.categories}') + Helper_App.console_log(f'category filters: {self.category_list_filters.categories}') self.form_filters.id_category.choices += [(str(category.id_category), category.name) for category in self.category_list_filters.categories] - print(f'category options: {self.form_filters.id_category.choices}') + Helper_App.console_log(f'category options: {self.form_filters.id_category.choices}') self.variation_types, self.variations, errors = self.get_many_product_variation() self.units_measurement = self.get_many_unit_measurement() self.units_measurement_time = [unit_measurement for unit_measurement in self.units_measurement if unit_measurement.is_unit_of_time] self.currencies = self.get_many_currency() self.currency_options = [currency.to_json_option() for currency in self.currencies] - print(f'category count: {len(self.category_list.categories)}\nproduct count: {countProducts}') + Helper_App.console_log(f'category count: {len(self.category_list.categories)}\nproduct count: {countProducts}') @staticmethod def save_products(comment, list_products): _m = 'Model_View_Store_Product.save_products' diff --git a/models/model_view_store_product_category.py b/models/model_view_store_product_category.py index 58d55f10..92a78ac8 100644 --- a/models/model_view_store_product_category.py +++ b/models/model_view_store_product_category.py @@ -21,6 +21,7 @@ from forms.store.product_category import Filters_Product_Category # from routes import bp_home from business_objects.store.product import Product, Parameters_Product, Product_Permutation from business_objects.store.product_variation import Product_Variation_Container +from helpers.helper_app import Helper_App import lib.argument_validation as av # external @@ -40,7 +41,7 @@ class Model_View_Store_Product_Category(Model_View_Store): def __init__(self, form_filters, hash_page_current=Model_View_Store.HASH_PAGE_STORE_PRODUCT_CATEGORIES): _m = 'Model_View_Store_Product_Category.__init__' - print(f'{_m}\nstarting...') + Helper_App.console_log(f'{_m}\nstarting...') super().__init__(hash_page_current=hash_page_current, form_filters=form_filters) # filters_category=filters_category) # BaseModel.__init__(self, app=app, filters_product=filters_product, **kwargs) self.access_levels = self.get_many_access_level(Filters_Access_Level()) diff --git a/models/model_view_store_product_permutation.py b/models/model_view_store_product_permutation.py index 70bfea99..d43724a4 100644 --- a/models/model_view_store_product_permutation.py +++ b/models/model_view_store_product_permutation.py @@ -18,6 +18,7 @@ from forms.store.product_permutation import Filters_Product_Permutation # from routes import bp_home from business_objects.store.product import Product, Parameters_Product, Product_Permutation from business_objects.store.product_variation import Product_Variation_Container +from helpers.helper_app import Helper_App import lib.argument_validation as av # external @@ -44,7 +45,7 @@ class Model_View_Store_Product_Permutation(Model_View_Store): def __init__(self, form_filters, hash_page_current=Model_View_Store.HASH_PAGE_STORE_PRODUCT_PERMUTATIONS): _m = 'Model_View_Store_Permutation.__init__' - print(f'{_m}\nstarting...') + Helper_App.console_log(f'{_m}\nstarting...') super().__init__(hash_page_current=hash_page_current, form_filters=form_filters) # self.form_filters = Filters_Product_Permutation() filters_product = Parameters_Product.from_form_filters_product_permutation(self.form_filters) @@ -67,11 +68,11 @@ class Model_View_Store_Product_Permutation(Model_View_Store): get_products_quantity_stock_below_min = filters_product.get_products_quantity_stock_below_min ) ) - print(f'category filters: {self.category_list_filters.categories}') + Helper_App.console_log(f'category filters: {self.category_list_filters.categories}') self.form_filters.id_category.choices += [(str(category.id_category), category.name) for category in self.category_list_filters.categories] - print(f'category options: {self.form_filters.id_category.choices}') + Helper_App.console_log(f'category options: {self.form_filters.id_category.choices}') self.list_options_product = self.category_list_filters.to_product_option_list() - print(f'product options: {self.list_options_product}') + Helper_App.console_log(f'product options: {self.list_options_product}') self.form_filters.id_product.choices += [(str(product['value']), product['text']) for product in self.list_options_product] self.variation_types, self.variations, errors = self.get_many_product_variation() self.units_measurement = self.get_many_unit_measurement() diff --git a/models/model_view_store_stock_item.py b/models/model_view_store_stock_item.py index 0b6c726a..74b7b237 100644 --- a/models/model_view_store_stock_item.py +++ b/models/model_view_store_stock_item.py @@ -18,6 +18,7 @@ from business_objects.store.product_category import Product_Category_Container from business_objects.store.product import Product, Parameters_Product, Product_Permutation from business_objects.store.stock_item import Stock_Item, Parameters_Stock_Item from forms.store.stock_item import Filters_Stock_Item +from helpers.helper_app import Helper_App import lib.argument_validation as av # external @@ -43,7 +44,7 @@ class Model_View_Store_Stock_Item(Model_View_Store): def __init__(self, filters_stock_item, hash_page_current=Model_View_Store.HASH_PAGE_STORE_STOCK_ITEMS): _m = 'Model_View_Store_Stock_Item.__init__' - print(f'{_m}\nstarting...') + Helper_App.console_log(f'{_m}\nstarting...') super().__init__(hash_page_current=hash_page_current, filters_stock_item=filters_stock_item) # BaseModel.__init__(self, app=app, filters_stock_item=filters_stock_item, **kwargs) self.form_filters = Filters_Stock_Item.from_json(filters_stock_item.to_json()) # .from_form_stock_item(filters_stock_item) @@ -68,17 +69,17 @@ class Model_View_Store_Stock_Item(Model_View_Store): ) """ - print(f'category_list_filters: {self.category_list_filters.categories}') + Helper_App.console_log(f'category_list_filters: {self.category_list_filters.categories}') self.form_filters.id_category.choices += [(str(category.id_category), category.name) for category in self.category_list_filters.categories] # [Filters_Stock_Item.get_choice_all()] + - print(f'category options: {self.form_filters.id_category.choices}') + Helper_App.console_log(f'category options: {self.form_filters.id_category.choices}') product_list = self.category_list_filters.to_product_option_list() filtered_product_list = [] if product_list is not None: for product in product_list: - # print(f'product: {product}\n{product[Stock_Item.ATTR_ID_PRODUCT_CATEGORY]}\n{self.form_filters.id_category.data}\n{str(type(product[Stock_Item.ATTR_ID_PRODUCT_CATEGORY]))}\n{str(type(self.form_filters.id_category.data))}') + # Helper_App.console_log(f'product: {product}\n{product[Stock_Item.ATTR_ID_PRODUCT_CATEGORY]}\n{self.form_filters.id_category.data}\n{str(type(product[Stock_Item.ATTR_ID_PRODUCT_CATEGORY]))}\n{str(type(self.form_filters.id_category.data))}') if (self.form_filters.id_category.data == '' or str(product[Stock_Item.ATTR_ID_PRODUCT_CATEGORY]) == self.form_filters.id_category.data): filtered_product_list.append(product) - print(f'product_list: {product_list}\nfiltered_product_list: {filtered_product_list}') + Helper_App.console_log(f'product_list: {product_list}\nfiltered_product_list: {filtered_product_list}') self.form_filters.id_product.choices += [(str(product['value']), product['text']) for product in filtered_product_list] # [Filters_Stock_Item.get_choice_all()] + # self.form_filters.import_values(filters_stock_item) self.variation_types, self.variations, errors = self.get_many_product_variation() diff --git a/models/model_view_store_supplier.py b/models/model_view_store_supplier.py index d9bf074a..f44cae90 100644 --- a/models/model_view_store_supplier.py +++ b/models/model_view_store_supplier.py @@ -15,6 +15,7 @@ from models.model_view_store import Model_View_Store from datastores.datastore_store_supplier import DataStore_Store_Supplier from business_objects.store.supplier import Supplier, Parameters_Supplier from forms.store.supplier import Filters_Supplier +from helpers.helper_app import Helper_App import lib.argument_validation as av # external from typing import ClassVar @@ -39,7 +40,7 @@ class Model_View_Store_Supplier(Model_View_Store): def __init__(self, form_filters_old, hash_page_current=Model_View_Store.HASH_PAGE_STORE_SUPPLIERS): _m = 'Model_View_Store_Supplier.__init__' - print(f'{_m}\nstarting...') + Helper_App.console_log(f'{_m}\nstarting...') super().__init__(hash_page_current = hash_page_current, form_filters_old = form_filters_old) self.form_filters = form_filters_old # Filters_Supplier.from_json(form_filters_old.to_json()) parameters_supplier = Parameters_Supplier.from_filters_supplier(self.form_filters) diff --git a/models/model_view_store_supplier_purchase_order.py b/models/model_view_store_supplier_purchase_order.py index 17ed23ef..86b0e3d1 100644 --- a/models/model_view_store_supplier_purchase_order.py +++ b/models/model_view_store_supplier_purchase_order.py @@ -19,6 +19,7 @@ from business_objects.store.product_category import Product_Category_Container from business_objects.store.supplier import Supplier, Parameters_Supplier from business_objects.store.supplier_purchase_order import Supplier_Purchase_Order, Parameters_Supplier_Purchase_Order from forms.store.supplier_purchase_order import Filters_Supplier_Purchase_Order +from helpers.helper_app import Helper_App import lib.argument_validation as av class Model_View_Store_Supplier_Purchase_Order(Model_View_Store): @@ -40,7 +41,7 @@ class Model_View_Store_Supplier_Purchase_Order(Model_View_Store): def __init__(self, form_filters_old, hash_page_current=Model_View_Store.HASH_PAGE_STORE_SUPPLIER_PURCHASE_ORDERS): _m = 'Model_View_Store_Supplier.__init__' - print(f'{_m}\nstarting...') + Helper_App.console_log(f'{_m}\nstarting...') super().__init__(hash_page_current = hash_page_current, form_filters_old = form_filters_old) self.form_filters = form_filters_old # Filters_Supplier_Purchase_Order.from_json(form_filters_old.to_json()) parameters_supplier_purchase_order = Parameters_Supplier_Purchase_Order.from_filters_supplier_purchase_order(self.form_filters) diff --git a/static/MySQL/0000_combine.sql b/static/MySQL/0000_combine.sql index 72546d6d..92f5ec7f 100644 --- a/static/MySQL/0000_combine.sql +++ b/static/MySQL/0000_combine.sql @@ -185,6 +185,7 @@ DROP TABLE IF EXISTS Shop_Interval_Recurrence; DROP TABLE IF EXISTS Shop_Product_Audit; DROP TABLE IF EXISTS Shop_Product; +DROP TABLE IF EXISTS Shop_Product_Temp; DROP TABLE IF EXISTS Shop_Product_Category_Temp; DROP TABLE IF EXISTS Shop_Product_Category_Audit; diff --git a/static/MySQL/0001_destroy.sql b/static/MySQL/0001_destroy.sql index b6db35f0..09004599 100644 --- a/static/MySQL/0001_destroy.sql +++ b/static/MySQL/0001_destroy.sql @@ -185,6 +185,7 @@ DROP TABLE IF EXISTS Shop_Interval_Recurrence; DROP TABLE IF EXISTS Shop_Product_Audit; DROP TABLE IF EXISTS Shop_Product; +DROP TABLE IF EXISTS Shop_Product_Temp; DROP TABLE IF EXISTS Shop_Product_Category_Temp; DROP TABLE IF EXISTS Shop_Product_Category_Audit; diff --git a/static/MySQL/7204_p_shop_get_many_product.sql b/static/MySQL/7204_p_shop_get_many_product.sql index 46308a04..3edba3cd 100644 --- a/static/MySQL/7204_p_shop_get_many_product.sql +++ b/static/MySQL/7204_p_shop_get_many_product.sql @@ -486,7 +486,7 @@ CALL partsltd_prod.p_shop_get_many_product ( , 0 # a_get_inactive_image , '' # a_ids_image , 0 # a_get_products_quantity_stock_below_minimum - , 1 # a_debug + , 0 # a_debug ); select * FROM partsltd_prod.Shop_Calc_User_Temp; diff --git a/static/dist/js/core_admin_home.bundle.js b/static/dist/js/core_admin_home.bundle.js index 0b10a0f4..00f64005 100644 --- a/static/dist/js/core_admin_home.bundle.js +++ b/static/dist/js/core_admin_home.bundle.js @@ -1 +1 @@ -(()=>{"use strict";var r,e={561:()=>{},711:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={780:0,466:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(711)));var a=t.O(void 0,[466],(()=>t(561)));a=t.O(a)})(); \ No newline at end of file +(()=>{"use strict";var r,e={497:()=>{},647:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={780:0,564:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(647)));var a=t.O(void 0,[564],(()=>t(497)));a=t.O(a)})(); \ No newline at end of file diff --git a/static/dist/js/core_contact.bundle.js b/static/dist/js/core_contact.bundle.js index d4d47ca1..f21b4165 100644 --- a/static/dist/js/core_contact.bundle.js +++ b/static/dist/js/core_contact.bundle.js @@ -1 +1 @@ -(()=>{"use strict";var r,e={278:()=>{},711:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={775:0,466:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(711)));var a=t.O(void 0,[466],(()=>t(278)));a=t.O(a)})(); \ No newline at end of file +(()=>{"use strict";var r,e={206:()=>{},647:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={775:0,564:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(647)));var a=t.O(void 0,[564],(()=>t(206)));a=t.O(a)})(); \ No newline at end of file diff --git a/static/dist/js/core_home.bundle.js b/static/dist/js/core_home.bundle.js index 332e8af7..d8e2bb30 100644 --- a/static/dist/js/core_home.bundle.js +++ b/static/dist/js/core_home.bundle.js @@ -1 +1 @@ -(()=>{"use strict";var r,e={805:()=>{},711:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={664:0,466:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(711)));var a=t.O(void 0,[466],(()=>t(805)));a=t.O(a)})(); \ No newline at end of file +(()=>{"use strict";var r,e={469:()=>{},647:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={664:0,564:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(647)));var a=t.O(void 0,[564],(()=>t(469)));a=t.O(a)})(); \ No newline at end of file diff --git a/static/dist/js/core_services.bundle.js b/static/dist/js/core_services.bundle.js index ca86d769..392a8ef6 100644 --- a/static/dist/js/core_services.bundle.js +++ b/static/dist/js/core_services.bundle.js @@ -1 +1 @@ -(()=>{"use strict";var r,e={188:()=>{},711:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={405:0,466:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(711)));var a=t.O(void 0,[466],(()=>t(188)));a=t.O(a)})(); \ No newline at end of file +(()=>{"use strict";var r,e={396:()=>{},647:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={405:0,564:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(647)));var a=t.O(void 0,[564],(()=>t(396)));a=t.O(a)})(); \ No newline at end of file diff --git a/static/dist/js/legal_accessibility_statement.bundle.js b/static/dist/js/legal_accessibility_statement.bundle.js index 7e20a39a..e053da60 100644 --- a/static/dist/js/legal_accessibility_statement.bundle.js +++ b/static/dist/js/legal_accessibility_statement.bundle.js @@ -1 +1 @@ -(()=>{"use strict";var r,e={780:()=>{},359:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={841:0,416:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(359)));var a=t.O(void 0,[416],(()=>t(780)));a=t.O(a)})(); \ No newline at end of file +(()=>{"use strict";var r,e={132:()=>{},807:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={841:0,830:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(807)));var a=t.O(void 0,[830],(()=>t(132)));a=t.O(a)})(); \ No newline at end of file diff --git a/static/dist/js/legal_license.bundle.js b/static/dist/js/legal_license.bundle.js index 3ace2e9c..db4b3bc8 100644 --- a/static/dist/js/legal_license.bundle.js +++ b/static/dist/js/legal_license.bundle.js @@ -1 +1 @@ -(()=>{"use strict";var r,e={623:()=>{},359:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={690:0,416:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(359)));var a=t.O(void 0,[416],(()=>t(623)));a=t.O(a)})(); \ No newline at end of file +(()=>{"use strict";var r,e={527:()=>{},807:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={690:0,830:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(807)));var a=t.O(void 0,[830],(()=>t(527)));a=t.O(a)})(); \ No newline at end of file diff --git a/static/dist/js/legal_privacy_policy.bundle.js b/static/dist/js/legal_privacy_policy.bundle.js index a1769ac5..f57bdd1c 100644 --- a/static/dist/js/legal_privacy_policy.bundle.js +++ b/static/dist/js/legal_privacy_policy.bundle.js @@ -1 +1 @@ -(()=>{"use strict";var r,e={713:()=>{},359:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={364:0,416:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(359)));var a=t.O(void 0,[416],(()=>t(713)));a=t.O(a)})(); \ No newline at end of file +(()=>{"use strict";var r,e={649:()=>{},807:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={364:0,830:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(807)));var a=t.O(void 0,[830],(()=>t(649)));a=t.O(a)})(); \ No newline at end of file diff --git a/static/dist/js/legal_retention_schedule.bundle.js b/static/dist/js/legal_retention_schedule.bundle.js index db92da46..2aece662 100644 --- a/static/dist/js/legal_retention_schedule.bundle.js +++ b/static/dist/js/legal_retention_schedule.bundle.js @@ -1 +1 @@ -(()=>{"use strict";var r,e={930:()=>{},359:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={607:0,416:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(359)));var a=t.O(void 0,[416],(()=>t(930)));a=t.O(a)})(); \ No newline at end of file +(()=>{"use strict";var r,e={954:()=>{},807:()=>{}},o={};function t(r){var a=o[r];if(void 0!==a)return a.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,t),n.exports}t.m=e,r=[],t.O=(e,o,a,n)=>{if(!o){var i=1/0;for(f=0;f=n)&&Object.keys(t.O).every((r=>t.O[r](o[v])))?o.splice(v--,1):(p=!1,n0&&r[f-1][2]>n;f--)r[f]=r[f-1];r[f]=[o,a,n]},t.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={607:0,830:0};t.O.j=e=>0===r[e];var e=(e,o)=>{var a,n,[i,p,v]=o,s=0;if(i.some((e=>0!==r[e]))){for(a in p)t.o(p,a)&&(t.m[a]=p[a]);if(v)var f=v(t)}for(e&&e(o);st(807)));var a=t.O(void 0,[830],(()=>t(954)));a=t.O(a)})(); \ No newline at end of file