From aa2fb21444d633a783f8e6335d54b8cb048fabec Mon Sep 17 00:00:00 2001 From: kerem Date: Wed, 11 Oct 2023 10:35:38 +0200 Subject: [PATCH] Added database connection, Person and COmpany registrations forms and Admin panels aswel --- webinterface/minibase/__init__.py | 11 +- .../__pycache__/__init__.cpython-311.pyc | Bin 2283 -> 2404 bytes .../__pycache__/models.cpython-311.pyc | Bin 15330 -> 20299 bytes .../{administration => admin}/__init.py__ | 0 .../admin/__pycache__/forms.cpython-311.pyc | Bin 0 -> 5329 bytes .../admin/__pycache__/routes.cpython-311.pyc | Bin 0 -> 6283 bytes .../admin/__pycache__/utils.cpython-311.pyc | Bin 0 -> 177 bytes webinterface/minibase/admin/forms.py | 69 ++++ webinterface/minibase/admin/routes.py | 123 +++++++ webinterface/minibase/admin/utils.py | 1 + .../__pycache__/forms.cpython-311.pyc | Bin 2065 -> 0 bytes .../__pycache__/routes.cpython-311.pyc | Bin 4104 -> 0 bytes .../__pycache__/utils.cpython-311.pyc | Bin 468 -> 0 bytes webinterface/minibase/administration/forms.py | 31 -- .../minibase/administration/routes.py | 77 ----- webinterface/minibase/administration/utils.py | 11 - .../company/__pycache__/forms.cpython-311.pyc | Bin 2817 -> 3005 bytes .../__pycache__/routes.cpython-311.pyc | Bin 3000 -> 3008 bytes webinterface/minibase/company/forms.py | 34 +- webinterface/minibase/company/routes.py | 21 +- .../__pycache__/utils.cpython-311.pyc | Bin 0 -> 5515 bytes webinterface/minibase/database/utils.py | 133 ++++++++ .../main/__pycache__/routes.cpython-311.pyc | Bin 1884 -> 2400 bytes webinterface/minibase/main/routes.py | 10 + webinterface/minibase/models.py | 130 ++++++-- .../person/__pycache__/forms.cpython-311.pyc | Bin 0 -> 3324 bytes .../person/__pycache__/routes.cpython-311.pyc | Bin 0 -> 3292 bytes webinterface/minibase/person/forms.py | 33 ++ webinterface/minibase/person/routes.py | 50 +++ webinterface/minibase/person/utils.py | 0 webinterface/minibase/site.db | Bin 274432 -> 290816 bytes .../minibase/static/pics/default_company.jpg | Bin 0 -> 10994 bytes .../minibase/static/pics/default_person.jpg | Bin 0 -> 10994 bytes .../company_register_industry.html} | 0 .../company_register_legal_entity.html} | 0 .../company_register_relation.html} | 2 + .../admin/person_register_competence.html | 46 +++ .../templates/admin/person_register_role.html | 46 +++ .../minibase/templates/company_register.html | 308 +++++++++--------- webinterface/minibase/templates/layout.html | 38 +-- .../minibase/templates/person_register.html | 198 +++++++++++ 41 files changed, 1027 insertions(+), 345 deletions(-) rename webinterface/minibase/{administration => admin}/__init.py__ (100%) create mode 100644 webinterface/minibase/admin/__pycache__/forms.cpython-311.pyc create mode 100644 webinterface/minibase/admin/__pycache__/routes.cpython-311.pyc create mode 100644 webinterface/minibase/admin/__pycache__/utils.cpython-311.pyc create mode 100644 webinterface/minibase/admin/forms.py create mode 100644 webinterface/minibase/admin/routes.py create mode 100644 webinterface/minibase/admin/utils.py delete mode 100644 webinterface/minibase/administration/__pycache__/forms.cpython-311.pyc delete mode 100644 webinterface/minibase/administration/__pycache__/routes.cpython-311.pyc delete mode 100644 webinterface/minibase/administration/__pycache__/utils.cpython-311.pyc delete mode 100644 webinterface/minibase/administration/forms.py delete mode 100644 webinterface/minibase/administration/routes.py delete mode 100644 webinterface/minibase/administration/utils.py create mode 100644 webinterface/minibase/database/__pycache__/utils.cpython-311.pyc create mode 100644 webinterface/minibase/database/utils.py create mode 100644 webinterface/minibase/person/__pycache__/forms.cpython-311.pyc create mode 100644 webinterface/minibase/person/__pycache__/routes.cpython-311.pyc create mode 100644 webinterface/minibase/person/forms.py create mode 100644 webinterface/minibase/person/routes.py create mode 100644 webinterface/minibase/person/utils.py create mode 100644 webinterface/minibase/static/pics/default_company.jpg create mode 100644 webinterface/minibase/static/pics/default_person.jpg rename webinterface/minibase/templates/{administration_company_industry.html => admin/company_register_industry.html} (100%) rename webinterface/minibase/templates/{administration_company_legal_entity.html => admin/company_register_legal_entity.html} (100%) rename webinterface/minibase/templates/{administration_company_relation.html => admin/company_register_relation.html} (99%) create mode 100644 webinterface/minibase/templates/admin/person_register_competence.html create mode 100644 webinterface/minibase/templates/admin/person_register_role.html create mode 100644 webinterface/minibase/templates/person_register.html diff --git a/webinterface/minibase/__init__.py b/webinterface/minibase/__init__.py index 21548bdf..16b9eb04 100644 --- a/webinterface/minibase/__init__.py +++ b/webinterface/minibase/__init__.py @@ -30,17 +30,20 @@ def create_minibase(config_class=Config): # (EMAIL AGENT) Initialisation mail.init_app(app) # (FLASK) Importing and then registering Blueprints (Wievs) + from minibase.users.routes import users from minibase.posts.routes import posts from minibase.main.routes import main - from minibase.errors.handlers import errors from minibase.company.routes import company - from minibase.administration.routes import administration + from minibase.admin.routes import admin + from minibase.person.routes import person + from minibase.errors.handlers import errors app.register_blueprint(users) app.register_blueprint(posts) app.register_blueprint(main) - app.register_blueprint(errors) app.register_blueprint(company) - app.register_blueprint(administration) + app.register_blueprint(admin) + app.register_blueprint(person) + app.register_blueprint(errors) # Returnr The created app return app diff --git a/webinterface/minibase/__pycache__/__init__.cpython-311.pyc b/webinterface/minibase/__pycache__/__init__.cpython-311.pyc index 030a66aaf192f3b021a9f413ae22a89203ba17a6..61e43c24f83ef678fefa552cd462a76bfd0e6b60 100644 GIT binary patch delta 522 zcmaDY_(X_rIWI340}%XE*IWf2##AukL07y~-E(x(sFC#H8B?st)B0-R}P*G}nW^qYs5l?(lPHAdE zQD$C=Cg)^-Rzq&Ef?`gfDuv0dtRY;gK$Zv)7uQXG%v!+ufsKJxXL1;uyNUJ%78G=Y zMfUIn= zy?}})Td>Pbc4F6TZlX-=wLk>2D+jzfx4jQk%Ma1dZ^05KkP(f|Me diff --git a/webinterface/minibase/__pycache__/models.cpython-311.pyc b/webinterface/minibase/__pycache__/models.cpython-311.pyc index 331d646898a26f93ceb425eea6fac0b373109ecf..c2734476d622fb453d15b7493943939af706fdb6 100644 GIT binary patch delta 5317 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 Nkc6&rl^#2A{{^?qy7B-3 delta 2665 zcmbtWZA@Eb6z*GE`a!>2*Dv}xHYkjt%&{>UusMOrKtO(MWXekK-MF)B@wRhg&cJlb z&|Yr^s;-4(g+tCjd0dtg5jL+iv>P?evX&B59jV*1}2ep$Mn~x=hWdCY`YYheA&eGNJgIynzw25Rm$#?e%(Ws<}P{OQf z>WkArv^x^#W`ppJ!&{|`#P`RNVt;p{SLmBdW%g_;Gp|cU4}_dvIOp)dVW$H=bgpid zv<-2Q7xu)O`F=^An=-XTJ{nF6@tCArIAgJeu28ffm=NxogPW<5xFCmbYaQU#SHOF2 zA3W_2z%IAnVfT-SC;L;DQ?3a9siB|mFrd*D%=2n6xR-1 zG&+XF6aAx>F<0uIRL7}%(rcPBE4F4=Y)yCWNE^E{#;&ZfYq05G^Q?sLRW9~y+p^d*-NZaZ10R$G09CbIV^*+&Xnpl z_%oFhMBEc*P={h00$M^neJV4}7{Fa{<|z#LDI9|Pm%H;?Lw=^XK#>myit5&C_JxIL zcb^#FEzOz21ClDIE=kEWDJf8nk_MHCI)terXN%Z~mFaq9ViQ6SLIi=MfF;;IASuLn zlwYhI0eJ{_(kn4Kr<_9gwbTm7R+QmADQ9aUevMc4GdiA6$>N0`)Y@q&=wdsQPOhJ3L zpnY%)p0j&^0Mq5p$y8Z0f$@-yeoCf82PtkS?b2L(7%{15`}HLcCfjdYLkge8R3n0%LP#Z!p{+)E4pKGC$&2uD&1Uj4s5XAD zleEIV@E*Q^yRjhhf(LXHkQT8Ql9lf7|HJWXBf6%}9+gr_FIt`+5~C#l&fj=;@#*r0b)GdTlq zZ`w%ShhH}BxaBS6F6#bC>XQ_m{J|u4ek@5paZCqnxj2FmD~bqj(kt-}OqV)gs-c`V zXd%dN-&u&E){tG&3CRQ(j_u*a`2K`Q|0u}BF?hZCUY~#_YbDkR>^-u#!sh-Y)Nb== zrznT&UzS)4{I+)o>?A@i$!?5PLcNz+?8-vMtv1p@b8d`79VfP5X0a;^8LPF#dr7tw z21bG>OD<#J%6znNDUapSujIkST-X2Ox>(`S%CYrJ3d7OXs%j0{cuBSt=q^ALsQ=0h If=qLN0r|-RGXMYp diff --git a/webinterface/minibase/administration/__init.py__ b/webinterface/minibase/admin/__init.py__ similarity index 100% rename from webinterface/minibase/administration/__init.py__ rename to webinterface/minibase/admin/__init.py__ diff --git a/webinterface/minibase/admin/__pycache__/forms.cpython-311.pyc b/webinterface/minibase/admin/__pycache__/forms.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7c9140802601e7bc6ffacc944cd292ca8523b62 GIT binary patch literal 5329 zcmd^DO>7fK6yEh;{F|TU*VImor2=kA(zJxMI7*}vLQ^|Yu~BGEl9lm}!-iekj2)sN zDn+OVj=7N|r<4e;m8jI-d#I{iYmu#$kSg`mTdMTLsq<#N#wMEx)K;Qpv->hL@6F7c zH}9J_&))_DUWPoI(Ra~W7sLDp74va63OhO}+-C$vU?oOoGb{^bn`D#i8N2MrIB4B2 zIb~PIC3j>xXx$;XWlzQ0_+!nUu2S8Sv7V;TS#z|%EuO#atQXPV0lO-dN zuQ7rfwld=pT*QzadN*h~)mR-EQg_T`WwgcW-dl!|iny%%CQvzt#S&QTc25c|iscHz z5wl;esUMjG)(8%=^9v#OnF^uiv((h$L2D0_-7ed7vImZ)Kuh5cyJT9EX`9nk$c7UM-=BSdL^RjIzRN1UGDh zgqRz9$Z)#z<}xCV%?cnuCZPU0 zm?xWD9w@EqfyM?S9#p#B`?4ntwDCL1+&c?|tTE4mF)cV)3!be8&psWwsEs6RBdO|0 zN=aYQ(sSy_yf!kg1{bv8LMSoVm*?f8uq+``_VdIPSqT*8c?^z$VSf#C`GglPU@2V0!tp@tFK>yn0w#)8>g;`TW9nj>z za7LsW=N+687?6UyfpCPhoCv1W+jk0yzW(P>zoPISM2Q#5e}F3WO?mvdM&|H{3lBz`>P- zuzi6>Z7UBw)QnkFFk(o)O3CWj|FSl|P#s@T_?*UHSI0$dTvWqLT6n1zE>*)NHH@_|R@}$x zzAyxnX(P@gR4%D;NyVRpI5SP-%rv_X6#8NLK#qeh|8Q*hKn)COfgvL{fHHQc6*Xc5 zDDj4aud_sNzbSJ0wZPr;KofT$@iyV@1jUGTrwc%McbVUnYsfFgN zp?NjLYaw272kX8Npe$*i>~ob%Xk0?^Cjezhin8Q>C>w%R0~r8CZc;_eJJ{d6fo=4u zftVJE86X2)>`p6cfDCka!$Ee?*vRwEq|yRv_(NDnYg+X`PsI9L0d~GvD4`Xaa9iUH zpCRUn*;}qvM;Z`y3C{o;gbzc+!l{Nr%N##-+ms0#G092X+D!m_| zMu-L&NE}r87Xbyj*qv6?02Jsj6FZ=L^6=vfzf#F#J89B8NC|RJBW zF!DLL1nXU9Vmm+IdyxP0%^0JT^TGRE_KPczVR{k+-S!0a7 zdcf7f%UaQm7|b!v!W>OLnFG#AYr6gw^hnYkO)1g?9Ko7yd;&evw1<@xb(g;YrW$uC literal 0 HcmV?d00001 diff --git a/webinterface/minibase/admin/__pycache__/routes.cpython-311.pyc b/webinterface/minibase/admin/__pycache__/routes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2bbeefeecba10657b5323979582ae39d07d028cf GIT binary patch literal 6283 zcmeI0+ix4i8o+0L+ljBa-!>Q5q;cGonA3lQm^(D>{3P&6sI`WR^ z`pxXl_nU9N`6d<%BM8>pv*h9+LO-&M8-k6*<9`bXeTfvL2qmNnvY`58pX!(WYCsOC zK{=>~Q@Kk z0d-IwREOjtbyyx&N8}L!`49;yAu@W~htNHEoFI>pv0LMAuKiyT6|D5E`|gK3dnl2Q z&~0dVui03ZJY_^ZWW>5;OnAzOd&o$1$(Zz%(d!|juS>?1r;L6N83SE1rj^0VC^PgQ z_JuMbJ3&cVAvC8Gb+eS$i7i%XDYsUkc5tnf*EVcSiBhDbpxYuP?^cPX+dU^sRkBHo zWj!Od@k(AJAXhw9Q8)ADExWgo$Q8>?H#S53; zgbyLAMBk_=TA`_dkO;x!hv)H4PM8j{8#=Z18rng(+G^caXrEToPj#1CXtIN@GU+^A z4Y(;NZMJEZ-WNKFxhCjQw+BL3MK^s5yQ%j79pN_2?p||-0`lnH)85NXcfKq19dc_B z>?vO(#oswMXfe{(BA^8I(N=y3-4ES{x4qYV$3ypyh`kdLbL)cZZh55 zPBK-1B~NngN;>M5bl0CKM{H56779euw&%E({I-rPZ0Krfd-764e-4y>*KY@b1km*$ zhsh4CfjVbmv=83d?td>|Dk=bI4v5gISJa|TV^BdSSZx4m@^q5r*_VgO!OR##{=A~t zA<$peo~Z+6nnIZ|$oOcAwT(8ko4={XHs56O*VXJsMJ3sH$X0f}sAmBK4tDl^as{v_ zbS+;Xty2C4fDFpP&C*I$C)&d1mOc5KwqM9nY9}#=tYXID9kw10H*b$Ld%zv1DNBCmb{SUNqwWsBP8piiuYYyt12^GN#X2 zv#YzaFIq=4d!oO0{t<%cXBO=tf6x3cVHA}NY1K-t?548Tk)zNknubQvG&G8)p;0jX z7+wc$k9X^YySF{v9oQG@41derfl4sR?Fn}`aLr2lPC%zvlNpa)z+G`?2N>(x0bGf6 z8l(X1{qRShVNsk#jBYx^q9)w*D9g^WD9xgSsZKP=bLBU{rWxpBk9A?`PLnP`J=+$V zNJ{m{q#2p?Kyv)p0Z2*=Nr@pTWp5J(#~nD~T&PjDnx zt=W}BkzBD-C%loQ^YBs!A?Y4Vo+1e!XkYjnBPqE^o^wu>zn@5V!M%ud4~j041MpEC zBH2Od&lBm&KZHnkn)G=X^%Z#jZ$vH_@#kupI$kpIl7W~0w?qzQouhZ_Y|W1QPho@w z-xvOJ7{$X*+ZlY`v5zB;bCzWOR5yszj%hq-ogD@Tn^w`0!#zHZ-}e40J_MLaxWi~b znP90uY$n6btk}dmcx*U?omxp>g0U{b(?oHs9+Aw5-UzoF z$L%^!nK)(Ol&5h#X2g%*Dc13#i5CsL$WeUFnq4~7I4)VK#lwuF)P*8DCOH1^Qy^j4 z_l3V4$V1&KyuuvZ6Vp3DSa8nU57{e9wO#QPS+zx%*YWBFs0)MfH}dyoM2#1WDPvpMy4^6 zuH!iq&lz~m6V2z0_zSgjb-ZliWdkpBG|yPGCl5vQq?KAe1kLlAq;nnjj^nn5rMy;L=YGH4Dpe~ADQT3s;FKS3_>BU0JovWCmeU?= z3gHT~z-}cpektKNEBt)K_hY69HqPbPbxJNrhgmkrF9W!z&wUGioZ%ZOU$nc3AI!O1 z@+)3~2~|sEnZ5>H*(HcUx5IJ@T?5a8YbqDOw@dtGQ29dGu? z)K(w-v-T?Mamo}WVAFZF)`(_vEZ literal 0 HcmV?d00001 diff --git a/webinterface/minibase/admin/__pycache__/utils.cpython-311.pyc b/webinterface/minibase/admin/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e54c266205607436ded05e8c07be90f98b869e20 GIT binary patch literal 177 zcmZ3^%ge<81oB^1QW=5tV-N=hKms7}nGHxxXGmcPX3%8xTggzw1QGPtPpT&&|xsOiCAmS6t|Ph=j9LtTBzs;jOkZsCq$}FB@lr!qys1nr)$m$r`}ys-=$R$Lk5P9 z+1iN(DKu*TfFiN+4_u@S(M?E9Y(-`2grD=(CK(ty)Mvl5-|y#Vzi0b>m839Y<;#y* z;`$K!1%qB;V_wcbv)=(yk&1O>;4H?__vjwOoAnw(R^Vf=?lb&ZKSmz(0;$3$r1}W1 zdl5Qjty8iAj`K}MRj17LR4J8#bek&=djO8#`?*+ zGylvH6HPJE5);*pc66q;aA=%PpH6?9{XXkFed$C~&1k9>O;umDr3d@(oT-}B0 z?ypHf(Vv^PX7d|A9Ds@b{pQ3+9p?BTJOsBvKya*UzFJS3(n?EOxqP)?sT&*IaEVZ> zXl9B!8IGyck13$zV>tt{1OZN3Zl-lwvI@b~%)=QaUEOp*$pXdC$&MFH^Yz z)`QH^$yPioMZ2oyK}zIltdm*zL*N&IdvNucTm;uT$#9)MX4WAATaeq%ycpv)nsct! zHd=JX)izpiuGTZZfS1qEsHj!`fcEbIx;0AT6UQ=F0U8#EF|fG`HoFkBISa zL_y-vL)9Xc15yvYa7r761Ajs!E=awsktJ3mYKIK@d6f5QI!Lu-M4Sv zzW4Uc%=Q%hdr}(H} z@za13ki>hBCR40noA+vcG^hk^-lv6VSP9dJ5}{EgN@GgQmix6hO(+T4uk_OaWk5n6 zL;`An?A!Dpv<-J_C`ppMvEP|>KUG=9YTvTwX3%Y+hJHYspt#*pRt9_e2>0+2dB(?3 zPan}9K4Q=KNU8A!luP_ABFhDMjFE~;SivB4RVx~V%QdDIma2^Vm$ah3!Z9OinURvg zWk$ZO5#8W@A89qR%E}cZCvlIu2sC1>5K6u%SIUb;o#cF6{C-BsJT8RuZKXZQ>9%`Y5-q9} zVu8=uuGYu$Zb3o#fanUY5WJtwo#VbQ&n}#U70HwsD^*o5b&e320Nh@9s~V)9sRoWmmIf~X{5U+=h#*lx1kzbnkPgtX1hTEblii|Kl3xDgueg~f^2jm5kfegD>}I-Y6Z857UgSe&!QXJ3fLS!;Br zHx}7ZSX6H;I!(q~EW$QDHQrz>rX4JvZuN*S4@Kv|dqL4@3mqsXU{hL96y4H)2}LI| zb__mr3hw_6ic@Cvy<53Do^If26HmWZD4xk3X#G>T)M`jX57(+*0l|qjl!*?MW2g0K zH8wG4I#sGxmdeX^C&Txow5k$KXQG{8_DR`2k|>{ixMS)rf>WZ+((Nv*RdK~xb6hBh zuCP#G{bK63dm6h{v1_D#I$OvtD|Tspf~VozHI018PJn^vko5~dn_fwhEOgd(cp#biU~skf5~z^1zEcUr8O&u`Z(zc23+G-^trX^9^aK5XRVR3n%InZgXjpPhijbcPbJAcV*Q+6Vy)V0OU-!1OX8 zxf(7~%TU7rw2#qGleq|F;4Rj|($u2LTg-_$IY8^#lQZ%&lT(X}L53>)a?#Jo&rQ|O zPOa2W&n(f;&CJV8N-R#*FHcR%%qvMPN=r;mMTjP*fD{y$6eX5q=I7~`mSpA>>lIYq z;!g(qsWKjFco8SiaCRUrmI4wD40rj&d-AXIDPH1JyvV0~g-^M`{RX#CgWqSMECbM? zxA*eOBq~;WZT@E&7B|{M?=!-aj#4ipTpmb?Ys$CH;kPGrbu>p|yz|6?Vc!NRp S0xJ5z!^9~3fdP{Mn+O0B?P_}f diff --git a/webinterface/minibase/administration/forms.py b/webinterface/minibase/administration/forms.py deleted file mode 100644 index 8c3484d9..00000000 --- a/webinterface/minibase/administration/forms.py +++ /dev/null @@ -1,31 +0,0 @@ -from flask_wtf import FlaskForm -from wtforms import StringField, SubmitField -from wtforms.validators import DataRequired - - -class compIndustryForm(FlaskForm): # Defines the form class to be used for the user registretion - # Decalarion of the fields for the form and it's propereties - name = StringField('Name', validators=[DataRequired()]) - description = StringField('Description', validators=[DataRequired()]) - submit = SubmitField('Register Industry') - - -class compRelationForm(FlaskForm): # Defines the form class to be used for the user registretion - # Decalarion of the fields for the form and it's propereties - name = StringField('Name', validators=[DataRequired()]) - description = StringField('Description', validators=[DataRequired()]) - submit = SubmitField('Register Relation') - - -class compLegalEntityForm(FlaskForm): # Defines the form class to be used for the user registretion - # Decalarion of the fields for the form and it's propereties - name = StringField('Name', validators=[DataRequired()]) - description = StringField('Description', validators=[DataRequired()]) - submit = SubmitField('Register Legal Entity') - - -class personRole(FlaskForm): # Defines the form class to be used for the user registretion - # Decalarion of the fields for the form and it's propereties - name = StringField('Name', validators=[DataRequired()]) - description = StringField('Description', validators=[DataRequired()]) - submit = SubmitField('Register Role') diff --git a/webinterface/minibase/administration/routes.py b/webinterface/minibase/administration/routes.py deleted file mode 100644 index 93cacaf2..00000000 --- a/webinterface/minibase/administration/routes.py +++ /dev/null @@ -1,77 +0,0 @@ -from flask import render_template, url_for, flash, redirect, request, Blueprint -from minibase import db -from minibase.config import themeMinibase -from minibase.models import Company, Company_industry, Company_legal_entity, Company_relation -from minibase.administration.forms import compLegalEntityForm, compRelationForm, compIndustryForm - -# Declaring a blueprint -administration = Blueprint('administration', __name__) - - -@administration.route("/administration_company_legal_entity", methods=['GET', 'POST']) -def administration_company_legal_entity(): - form = compLegalEntityForm() - if form.validate_on_submit(): - companyLegal = Company_legal_entity( - name=form.name.data, - description=form.description.data) - # Here we need to give the id of thr role as this is a foreign key - db.session.add(companyLegal) - db.session.commit() - - flash(f'{"Company Legal Entity registered!"}', 'success') - return render_template('administration_company_legal_entity.html', - title='Register Company Legal Entity', - theme=themeMinibase, - form=form) - - return render_template('administration_company_legal_entity.html', - title='Register Company Legal Entity', - theme=themeMinibase, - form=form) - - -@administration.route("/administration_company_relation", methods=['GET', 'POST']) -def administration_company_relation(): - form = compRelationForm() - if form.validate_on_submit(): - companyLegal = Company_relation( - name=form.name.data, - description=form.description.data) - # Here we need to give the id of thr role as this is a foreign key - db.session.add(companyLegal) - db.session.commit() - - flash(f'{"Company Relation registered!"}', 'success') - return render_template('administration_company_relation.html', - title='Register Company Relation', - theme=themeMinibase, - form=form) - - return render_template('administration_company_relation.html', - title='Register Company Relation', - theme=themeMinibase, - form=form) - - -@administration.route("/administration_company_industry", methods=['GET', 'POST']) -def administration_company_industry(): - form = compIndustryForm() - if form.validate_on_submit(): - companyLegal = Company_industry( - name=form.name.data, - description=form.description.data) - # Here we need to give the id of thr role as this is a foreign key - db.session.add(companyLegal) - db.session.commit() - - flash(f'{"Company Idustry registered!"}', 'success') - return render_template('administration_company_industry.html', - title='Register Company Industry', - theme=themeMinibase, - form=form) - - return render_template('administration_company_industry.html', - title='Register Company Industry', - theme=themeMinibase, - form=form) diff --git a/webinterface/minibase/administration/utils.py b/webinterface/minibase/administration/utils.py deleted file mode 100644 index 94e89257..00000000 --- a/webinterface/minibase/administration/utils.py +++ /dev/null @@ -1,11 +0,0 @@ -from minibase.models import Countries - -# Retunrs the query of all awailable Country names on the table named Countries -# Note that the formating is done during the SQLAlchemy Table declaration. -# Important note This table is ImporteD externally from a modifier SQL version of -# Github : https://github.com/dr5hn/countries-states-cities-database -def country_choices(): - choices = Countries.query.all() - return choices - - diff --git a/webinterface/minibase/company/__pycache__/forms.cpython-311.pyc b/webinterface/minibase/company/__pycache__/forms.cpython-311.pyc index 4401a534af25a145bce7679f8fb05e7a923e31b1..f283baf0dd3bf7ad39934371a51ba74f00781137 100644 GIT binary patch literal 3005 zcmb7GO>7fK6rT0J<3F$=F)1xU1%V-PDq2xQoP;(Z2!TQ&FYi@-yifJ>el@@c zY`Iqnsv$n4hWW7C!nddqK4Qy#N>q*UF?;P-;%XxA;gGt8-^w8mI)S9XZ6pOTch`&1 zJ$RhKCnf&~%7mUXHp9{IkRs}HLnTek_-JIr(BxuaNXCi;%)*o^8x9jaSu}6~Ywi|S zaNgMhv*@5`i0AN?1zE!q4V=csf-yrAW1=EUq9K=x$2F~_(a@QB#)t}p4Gxsld9k=S zoNt`V{s}dh7ex=t4@NvEA>QLb*eh{BeRo0OUef|3e#s+wYreane-9pK6g)NmW(gkv z-Jle}q1mvj^?!c_t`>YFTP?O-2<##sWfuiIuM`Fvd+V87KH$u8J9Y$OCq63n7CSaO z!5jI4_j@xhTW#Ig2k9n3D}w-vO4(pJbx+ehUj4R$-E z}cp5R%{H=;5eSrWdlE#m>dAGP&Bkf>K`#g z15@7sSW_=A&(i>)5MzUShD+4i&);joNU43jW+xUw$KMHOk^_qx`ZiNQQ(Rl zPGhYe8lX?d%CxqZIgYu;P5{uf`<%{F+5zKbZ}&_|#ocpwvAZA}-B48Wl&ItGYj{eA z9;;1@dHhP+Fz=p*n$)xNi*$RV^043rVy9f%-QZa5X5XsP4hPV$1F4{A>0Lj^o~ApW zq&t5duT4Jf>VMMJ|Hx+@J8K;qGrPvEu5mLxVWlUQWA(N@8^{|T;~cttqMm5|vAlsi zu`#ZmYPVARs$bP|*1_D9RF0%_&)PHOz!=`HSr8TWHiDqBbZM+GG}f=})M~6|XmD_9)Q}aO?sVT@Vek{M4L_lQ zJ(}1gl_i>X)wKp5o2rqfM3ywxA%z+7OV1gX_o}_p)#ak)9a=PBSdu8rU_TfJ3=p~|D zhiNKHma;_Veju%7v$brsmMdrK$xl}fuFkISvksjjmlc@i<)U@DNQ4qe&YQ`3D>+{| zRgdpjo?FeVr`OZ>+aI()9D6wSn0u^~-Vw8R#OfU(Uz{iLQ8PYj#YZbA8roH;szGx0 zB24qFV4W4ncb7?AG~=Qb7eOo9wtQ+eSe>j+u3f5KBAq!B?KPvlRjR`^KeTPGFM)q<5BCX+KT&B_A)6kmpN4p95Fld!?QD*Eq0HoP3i)zL1pdDhVh^1fL|!{mLljy@-wXB}n8JLX2H Vm1DVoJ6*~AW$*m+j(z)G{{!0lDXRbg delta 1513 zcmZ`(O-vg{6rQ!$Uhvvpu*ve1LY!8CECixPfvPp2wm@jq6hR1~n8RxEjGcvDJKZ0M z)1FX4L0MZJpMl(@0mWlcMkP=t9Y=8o4 zOQxl!X;l+7O_BluFb!b%0e}pm_JROBA+tI%Z9Cu3Qo)_0zHTAlG80Ahwp1v&Ej2;Z zkRlm!v0z=K+NpkPn);PtU^9xX#x0i`WVir8K^U>(!E;QDFSEYfO5_BLdNP%?4gv$A zHcw-{3iPq3h{Qk+HLddA8Ds5a-vL|pD3TYMwY)lE>jRMKf{A$`BwaRJP3%fhQ(byS zQqgO#gxAn=g432jkMndrlB}M|n@5kV`}DhQ_o&rIy-%s?f2^PAp3Obt^MuUmxKH1s zHO^q`djMeIcv9a`5Ri0&GXmw(1(L+w%QtRGMydu@>LW$b5GksDR%_g}3 zO#)>}^Pq9Vy1Amth9;2BW1#huMLX}Yc%3y9LH~|i!*b($#qwL}?e+c9{n5wcPsg8) zJRA8%`fVPk=j`;Hlb*x<*D*V9v-1u+U!JTad$!ZNUmcjvdrLT**KuCA^QMzGac&(a zH|*qwliVm@t8iUgU+#XeZ#ox0!^?R>_Ok3O%Q&-&xiy%$n)xMc=?@^Nn`xSrRE$zuGKD)m}+N6iFD@wcKzElTD?i*+7z*P zkB0uI^;hJ>%}ESSqzV|uZ=wq5#V1e&T*4>NVYrp@z&pl=8mevKZ{PIKafgQ8FXlg4 C%gY1+ diff --git a/webinterface/minibase/company/__pycache__/routes.cpython-311.pyc b/webinterface/minibase/company/__pycache__/routes.cpython-311.pyc index 5d490087554e9888f83f1f46573d4a0d352d3377..479f15ea943517a946df05b6b64216e203453f06 100644 GIT binary patch delta 1113 zcmb7?OK1~87{_Px+N62EH_c|7N1Mi4d^A;QO?UU_QS2{r@xnWq03sKY1-L z%;r9TOT0NGyrJJ(-ci&#+@-ErHzlpY4~zH0py~r+ZMXMlHZs{nX~*I{AD+0Kj|F5WGTb@yxFwP#y{{dgVL!vFX^_{;)0!CY@^ z3Ylf0P2U&pmU0rD*A8nfE5(uoH?*mv329>^#$16fmn3mDo#Wd^QOIYcT(O{Rta)KE zlTQl;DJLl^4CsP}HeD)bvqGr^v$`bJ54UxkuWiZ}msc`{)ig=e@EIv1y6|(r&$^k> z5FXm*MM0WBy89|Gh81SRY)*-|OcF4Tz)5-#-lL0^No+9TRkGo?wgG+^J&&iJOl{1z zXyaF!`$BU~I*91tKJaU!dk&ur?9LlhZ*SS%$R0-a;f8%!Rx9dv7gL)WgK|HWb+K`d`A#G;@!Hh&r zG%-qiJCHaMPiT|_UJMr#jR!oKxS1y45)v=mOAHsh_}Vcx4*t^q-tT=szhA%Ud!M}< zUh5l+#RO1%{6X_y3?Hl;7`6yEv75F>l3vxT!TBJg`vfoRJn)b1pHv6;-fEz!o>~on)LXAP_bP@uF&M=?{i8rS(|}0M zBb}}97r>f#6-UkJt;Q&bP`4|1CXt2{`Yysgn-!%*3O?4~I;ywy;dWy(!{tOtn5!5C zK9!J?*-WJ+#ZMPc2`L=y13;S$NHTgx;rjU2iUb3!|0 z2oKf)`-qUipw8fMoDlODP^n(D_!phZBG@&1p2nWV7O!m+<}HH$Nzi42kqKrGc=fRz zC#3+pYZza`5&;rnB%(5?B@`V+PCRss{DfSiFWmd6if*ttjBP)j{IqOy~ zO>oz(NKNq6oxG}$SA30Dl-A_0TLn~MKL|VlnGC;mueHjNfilU;BwHd`rB$Q!e`uRV z8Q^b|sh)LQj$W3dH_FtYObwQ(L8V>A_!DA31gDy#eM2Sd(E7N1?mAkl&$md~I3^p% zO2)Arn|FmMG5uxVfb1J6+gRDgmW=GK*$+3HH?dy$!bG;IS1E+m)UT%VC>00-_|^0)L}Q%_KxwZD=wdR)D!Q7Y$=c*U-xL`V diff --git a/webinterface/minibase/company/forms.py b/webinterface/minibase/company/forms.py index a4028958..7842ccb9 100644 --- a/webinterface/minibase/company/forms.py +++ b/webinterface/minibase/company/forms.py @@ -1,27 +1,31 @@ from flask_wtf import FlaskForm from wtforms import StringField, SubmitField, IntegerField, SelectField -from wtforms.validators import DataRequired, Length, ValidationError -from minibase.models import Company, Company_relation -import minibase.company.utils as utils -import minibase.administration.utils as adminUtils +from wtforms.validators import DataRequired, Length, ValidationError, Optional +from minibase.models import Company +import minibase.database.utils as DbUtils -class companyForm(FlaskForm): # Defines the form class to be used for the user registretion +# Defines the form class to be used for the user registretion +class companyForm(FlaskForm): # Decalarion of the fields for the form and it's propereties - name = StringField('Name', validators=[DataRequired(), Length(min=3, max=100)]) - legal_entity = SelectField('Legal Entity', choices=utils.company_legal_entity_choices, validators=[DataRequired()]) - relation = SelectField('Relation', choices=utils.company_relation_choices, validators=[DataRequired()]) - country = SelectField('Country', choices=adminUtils.country_choices, validators=[DataRequired()]) + company_name = StringField('Name', validators=[DataRequired(), Length(min=3, max=20)]) + legal_entity_id = SelectField('Legal Entity', choices=DbUtils.company_legal_entity_choices, validators=[DataRequired()]) + relation_id = SelectField('Relation', choices=DbUtils.company_relation_choices, validators=[DataRequired()]) + website = StringField('Website', validators=[Optional(), Length(min=3, max=100)]) + country = SelectField('Country', choices=DbUtils.country_choices,validators=[DataRequired()]) state = StringField('State', validators=[DataRequired()]) city = StringField('City', validators=[DataRequired()]) post = IntegerField('Zip', validators=[DataRequired()]) street = StringField('Street', validators=[DataRequired()]) no = IntegerField('No', validators=[DataRequired()]) - industry = SelectField('Area', choices=utils.company_industry_choices, validators=[DataRequired()]) + industry_id = SelectField('Area', choices=DbUtils.company_industry_choices, validators=[DataRequired()]) submit = SubmitField('Register Company') - def validate_company_duplicate(self, name, country, relation): - companyName = Company.query.filter_by(name=name.data).first() - if companyName: - raise ValidationError('That Company Allredy Exitst Please modify it instead') - + # Queries to be made in order to validate the form : If Company name exitst within the same country + # Case Insensistive + def validate_company_name(self, company_name): + company_query = Company.query.filter(Company.name.ilike(self.company_name.data)) # Database Querry ilike means case insessitive + for company in company_query: + if company.name: + if company.country_bill == self.country.data: + raise ValidationError('This company in this contry alredy exist') diff --git a/webinterface/minibase/company/routes.py b/webinterface/minibase/company/routes.py index ea3cc99e..32081747 100644 --- a/webinterface/minibase/company/routes.py +++ b/webinterface/minibase/company/routes.py @@ -14,28 +14,33 @@ def company_register(): form = companyForm() if form.validate_on_submit(): company = Company( - name=form.name.data, + name=form.company_name.data, + website=form.website.data, country_bill=form.country.data, state_bill=form.state.data, city_bill=form.city.data, - postal_code_bill=form.post.data, + post_code_bill=form.post.data, street_bill=form.street.data, street_no_bill=form.no.data, country_ship=form.country.data, state_ship=form.state.data, city_ship=form.city.data, - postal_code_ship=form.post.data, + post_code_ship=form.post.data, street_ship=form.street.data, street_no_ship=form.no.data, - industry=utils.getIndustryId(form.industry.data), - relation=utils.getRelationId(form.relation.data), - legal_entity=utils.getLegalEntityId(form.legal_entity.data)) + industry_id=utils.getIndustryId(form.industry_id.data), + relation_id=utils.getRelationId(form.relation_id.data), + legal_entity_id=utils.getLegalEntityId(form.legal_entity_id.data)) # Here we need to give the id of thr role as this is a foreign key db.session.add(company) db.session.commit() - flash(f'{"Company succesfull registered!"} { company.industry} ', 'success') - return redirect(url_for('company.company_register')) + flash(f'{"Company succesfull registered!"}', 'success') + return render_template('company_register.html', + title='Register Company', + theme=themeMinibase, + form=form) +# return redirect(url_for('company.company_register')) return render_template('company_register.html', title='Register Company', diff --git a/webinterface/minibase/database/__pycache__/utils.cpython-311.pyc b/webinterface/minibase/database/__pycache__/utils.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..137541b75d72d43d45e3f3d0003f31f66448ae22 GIT binary patch literal 5515 zcmdT|%}?A$6u0*SSQduiD?pOMZWaOy(Gn`6C?!clArMlsO+!yBRcP5UiIe>xW21JZ zR6ScIHWTv!U)VZo?PQ!hLYhW6!o|kzkuQ=^) zB?ted=t?oCk3Z~!5m)_!( zBxNV8t>slc8E|@6OT3WP73L0qNy#fYK`5jvKk6FV$71hpjz20Dl<_A@dHkWOj~CRU zx{}qD@gI~GwWuq6HJejvtt_i&MfbX{=C#yX*=c#G=Gi5zQ0Wm6o^T1KL2Jsv|rArvQmi83IKc2iTDQqUS6cx9ONk$KLc+=$JvL zEIMV=X_HPHbjG4H8w=afuFdO}P!ET7SZA8?ZWt1%g|UM7AoL=jgYvTo=K$VQq}x{n z{ieDyK$jTUAw6H0xJ8F;I$_d@H{}YQFzB>Jr)@fK(s_d}SahMTbrHTK6aaD17x#(d zwB$tiC@-(5`8>K3#tDc?AjM}WLv?*tov6LG$f`l7%rAlsitNkP^INM;hfO;C>RN>k z8}y1ruh?|Tq*DgHVbL2xEh`$YgyQw+Mi+p~*5OJ;Auub7E`;KP`?bLZ=7l&N;vF9a zivcLR-U9nTWnz_3tX`El!iOR`*ouzOh17JJ0V|#YNrq6okCdgq66*h-$wJmjn!cPX zG35wtI%?Y72h$m_7#L`N`F2*Op7DeEwLcKCN zVj&PWL=;OW&$vsu#IFKREc|nyFkJWt24D=_yI%o(TspEZ&4A<%k_$PV42q;e>;z6Q z3t?Y&8gq|IYEIEK%y44WaNoHm(n*mxX()1FP?m}P0}W%kC|^C@9p>P`*9fkk%;a@A|V8J zw04!QO5Nxze%ZagyhIR@4Al%4gBS^jibSTNZ2_TOxW`ru)9}_*_icKazr*P1mjt#k zFyI~=Q9EcG++DXO%(RM;b9uoDUTDA@3ZY{3TyA)RJ9UOTO~V^8v^EgiijP!JIV3V6 z6Fno7Ak$A#CgwiFkCY7d1XBL^9)HIQ9|cReuf)7O2X4qc6o2Bl`$@W#oad<&fG6u^ ztKqOT_!r&Zl7{EqY5B#?EBphE!vcpz4kskF(y$%Nq>NpI#ASC!*6#4Er&McIhm=n0ig}-T0%00$Abb7wjdZ7X&{2f$AA$LplPwGWtmmCHN8f(hm7hD zwY7Cd?dKZN9lfmEw3&PiHC1(^+N4AybX{*4j+T9p&qz##A9yMOg_3Rng# z>MyE zi8}wO_e_g440@lf0F{s2z6;nFF~$dIrFU{%OSzpmKr_AZ^Juxf&s-V delta 454 zcmaDLbcc^`IWI340}#yZl1r^+p2#P`XfjdVP=<*il{tkam17wb1H)<{hJYx}RL%ul zlO35vg;|#|0%d?00$}13r}8tUuunWE&&mxGQs+Qbn!?$_uneecHB2u<6c0?TCKsAo zZVa`&DLlapn!J-YF}iO4%Xp8GjT>lAk>KQq%zmuWKqlv86P8B?0zlR+){@MUoYa*} zMa&>2>_B2ALy-)KEd`cNOv*1UDN+WqMJBtkDlp1SPG`;5l>;e|2N8-OLJ345G;t)C z7MJAbrWO^c0wp9T|7TTT2g&+r@=Y#bcL|7(&r8frjgK$l01Dn>Edtt*S_E>> company.query.all() + # [1, ComanyName, CompanyCounntry] (Do not change this presentation + # it will corrupt: the getCompanyId function in minibase.dabase.utils + def __repr__(self): + return f"{self.name}, {self.country_bill}, {self.id}" class Person(db.Model): id = db.Column(db.Integer, nullable=False, primary_key=True) name = db.Column(db.String(50), nullable=False) last_name = db.Column(db.String(50), nullable=False) - date_of_birth = db.Column(db.Date, nullable=False) + date_of_birth = db.Column(db.Date, nullable=True, default='') + + company_id = db.Column(db.Integer, db.ForeignKey('company.id'), nullable=False) + role_id = db.Column(db.Integer, db.ForeignKey('person_role.id'), nullable=False) + competence_id = db.Column(db.Integer, db.ForeignKey('person_competence.id'), nullable=False) + + mail_prof = db.Column(db.String(320), nullable=False) + mail_priv = db.Column(db.String(320), nullable=True, default='') tel_prof_fix = db.Column(db.String(30), nullable=True, default='') tel_prof_mobile = db.Column(db.String(30), nullable=True, default='') tel_priv_fix = db.Column(db.String(30), nullable=True, default='') tel_priv_mobile = db.Column(db.String(30), nullable=True, default='') - mail_prof = db.Column(db.String(320), nullable=False) - mail_priv = db.Column(db.String(320), nullable=True, default='') - country = db.Column(db.String(75), nullable=False) - state = db.Column(db.String(75), nullable=True, default='') - city = db.Column(db.String(75), nullable=True, default='') - post_code = db.Column(db.String(10), nullable=True, default='') + street_name = db.Column(db.String(150), nullable=True, default='') street_no = db.Column(db.Integer, nullable=True, default='') + city = db.Column(db.String(75), nullable=True, default='') + post_code = db.Column(db.String(10), nullable=True, default='') + state = db.Column(db.String(75), nullable=True, default='') + country = db.Column(db.String(75), nullable=True, default='') + + notes = db.relationship('Person_note', backref='concerns', lazy=True) + + image_file = db.Column(db.String(20), nullable=False, default='default_person.jpg') upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) - company = db.Column(db.Integer, db.ForeignKey('company.id'), nullable=False) - role = db.Column(db.Integer, db.ForeignKey('person_role.id'), nullable=False) class Person_role(db.Model): @@ -100,6 +125,7 @@ class Person_role(db.Model): description = db.Column(db.String(300), nullable=False) upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) + # returns a more information-rich, or official, string representation of an object # >>> Company_industry.query.all() # >>> [('1', 'Indsutrial'), ('2', 'Consumer')] @@ -107,6 +133,19 @@ class Person_role(db.Model): return f"{self.name}" +class Person_competence(db.Model): + id = db.Column(db.Integer, nullable=False, primary_key=True) + name = db.Column(db.String(50), nullable=False) + description = db.Column(db.String(300), nullable=False) + upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) + + # returns a more information-rich, or official, string representation of an object + # >>> Company_industry.query.all() + # >>> [('1', 'Indsutrial'), ('2', 'Consumer')] + def __repr__(self): + return f"{self.name}" + class Company_industry(db.Model): id = db.Column(db.Integer, nullable=False, primary_key=True) @@ -114,6 +153,8 @@ class Company_industry(db.Model): description = db.Column(db.String(300), nullable=False) upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) + companies = db.relationship('Company', backref='companies', lazy=True) + # returns a more information-rich, or official, string representation of an object # >>> Company_industry.query.all() # >>> [('1', 'Indsutrial'), ('2', 'Consumer')] @@ -127,6 +168,7 @@ class Company_relation(db.Model): description = db.Column(db.String(300), nullable=False) upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) + # returns a more information-rich, or official, string representation of an object # >>> Company_industry.query.all() # >>> [('1', 'Indsutrial'), ('2', 'Consumer')] @@ -140,6 +182,21 @@ class Company_legal_entity(db.Model): description = db.Column(db.String(300), nullable=False) upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) + + # returns a more information-rich, or official, string representation of an object + # >>> Company_industry.query.all() + # >>> [('1', 'Indsutrial'), ('2', 'Consumer')] + def __repr__(self): + return f"{self.name}" + + +class Status(db.Model): + id = db.Column(db.Integer, nullable=False, primary_key=True) + name = db.Column(db.String(50), nullable=False) + description = db.Column(db.String(300), nullable=False) + upload_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + last_update_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) + # returns a more information-rich, or official, string representation of an object # >>> Company_industry.query.all() # >>> [('1', 'Indsutrial'), ('2', 'Consumer')] @@ -177,6 +234,7 @@ class User(db.Model, UserMixin): class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) + date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) content = db.Column(db.Text, nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) @@ -184,3 +242,31 @@ class Post(db.Model): # returns a more information-rich, or official, string representation of an object def __repr__(self): return f"User('{self.title}', '{self.date_posted}')" + + +class Person_note(db.Model): + id = db.Column(db.Integer, primary_key=True) + title = db.Column(db.String(100), nullable=False) + content = db.Column(db.Text, nullable=False) + status = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + date_due = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + person_id = db.Column(db.Integer, db.ForeignKey('person.id'), nullable=False) + + # returns a more information-rich, or official, string representation of an object + def __repr__(self): + return f"{self.title}, {self.status}, {self.content}" + + +class Company_note(db.Model): + id = db.Column(db.Integer, primary_key=True) + title = db.Column(db.String(100), nullable=False) + content = db.Column(db.Text, nullable=False) + status = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + date_due = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + company_id = db.Column(db.Integer, db.ForeignKey('company.id'), nullable=False) + + # returns a more information-rich, or official, string representation of an object + def __repr__(self): + return f"{self.title}, {self.status}, {self.content}" diff --git a/webinterface/minibase/person/__pycache__/forms.cpython-311.pyc b/webinterface/minibase/person/__pycache__/forms.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cee55a9b09f1e184f5cc5ac56f0d335d50ddcd9c GIT binary patch literal 3324 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 QR@8gJhTXz@d#v7n0JJdF8UO$Q diff --git a/webinterface/minibase/static/pics/default_company.jpg b/webinterface/minibase/static/pics/default_company.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38f286f635abe00850f6faf44c5d4e11adfa9d7f GIT binary patch literal 10994 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 literal 0 HcmV?d00001 diff --git a/webinterface/minibase/static/pics/default_person.jpg b/webinterface/minibase/static/pics/default_person.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38f286f635abe00850f6faf44c5d4e11adfa9d7f GIT binary patch literal 10994 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 literal 0 HcmV?d00001 diff --git a/webinterface/minibase/templates/administration_company_industry.html b/webinterface/minibase/templates/admin/company_register_industry.html similarity index 100% rename from webinterface/minibase/templates/administration_company_industry.html rename to webinterface/minibase/templates/admin/company_register_industry.html diff --git a/webinterface/minibase/templates/administration_company_legal_entity.html b/webinterface/minibase/templates/admin/company_register_legal_entity.html similarity index 100% rename from webinterface/minibase/templates/administration_company_legal_entity.html rename to webinterface/minibase/templates/admin/company_register_legal_entity.html diff --git a/webinterface/minibase/templates/administration_company_relation.html b/webinterface/minibase/templates/admin/company_register_relation.html similarity index 99% rename from webinterface/minibase/templates/administration_company_relation.html rename to webinterface/minibase/templates/admin/company_register_relation.html index 460f58a3..0065e310 100644 --- a/webinterface/minibase/templates/administration_company_relation.html +++ b/webinterface/minibase/templates/admin/company_register_relation.html @@ -1,4 +1,6 @@ {% extends "layout.html" %} + + {% block content %}
diff --git a/webinterface/minibase/templates/admin/person_register_competence.html b/webinterface/minibase/templates/admin/person_register_competence.html new file mode 100644 index 00000000..d3c1aeef --- /dev/null +++ b/webinterface/minibase/templates/admin/person_register_competence.html @@ -0,0 +1,46 @@ +{% extends "layout.html" %} +{% block content %} +
+ + {{ form.hidden_tag() }} +
+ Register Person Competence + + +
+ {{ form.name.label(class="form-control-label") }} + {% if form.name.errors %} + {{ form.name(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.name.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.name(class="form-control form-control-lg") }} + {% endif %} +
+ + +
+ {{ form.description.label(class="form-control-label") }} + {% if form.description.errors %} + {{ form.description(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.description.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.description(class="form-control form-control-lg") }} + {% endif %} +
+ + +
+ {{ form.submit(class="btn btn-outline-info") }} +
+ + +
+{% endblock content %} diff --git a/webinterface/minibase/templates/admin/person_register_role.html b/webinterface/minibase/templates/admin/person_register_role.html new file mode 100644 index 00000000..683a71a4 --- /dev/null +++ b/webinterface/minibase/templates/admin/person_register_role.html @@ -0,0 +1,46 @@ +{% extends "layout.html" %} +{% block content %} +
+
+ {{ form.hidden_tag() }} +
+ Register Person Role + + +
+ {{ form.name.label(class="form-control-label") }} + {% if form.name.errors %} + {{ form.name(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.name.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.name(class="form-control form-control-lg") }} + {% endif %} +
+ + +
+ {{ form.description.label(class="form-control-label") }} + {% if form.description.errors %} + {{ form.description(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.description.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.description(class="form-control form-control-lg") }} + {% endif %} +
+ + +
+ {{ form.submit(class="btn btn-outline-info") }} +
+ +
+
+{% endblock content %} diff --git a/webinterface/minibase/templates/company_register.html b/webinterface/minibase/templates/company_register.html index b462319c..98cae679 100644 --- a/webinterface/minibase/templates/company_register.html +++ b/webinterface/minibase/templates/company_register.html @@ -3,165 +3,179 @@
{{ form.hidden_tag() }} -
- Register Company +
+ Register Company - -
- {{ form.name.label(class="form-control-label") }} - {% if form.name.errors %} - {{ form.name(class="form-control form-control-lg is-invalid") }} -
- {% for error in form.name.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ form.name(class="form-control form-control-lg") }} - {% endif %} -
- - -
- {{ form.legal_entity.label(class="form-control-label") }} - {% if form.legal_entity.errors %} - {{ form.legal_entity(class="form-control form-control-lg is-invalid") }} -
- {% for error in form.legal_entity.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ form.legal_entity(class="form-control form-control-lg") }} - {% endif %} -
- - -
- {{ form.relation.label(class="form-control-label") }} - {% if form.relation.errors %} - {{ form.relation(class="form-control form-control-lg is-invalid") }} -
- {% for error in form.relation.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ form.relation(class="form-control form-control-lg") }} - {% endif %} -
- - -
- {{ form.industry.label(class="form-control-label") }} - {% if form.industry.errors %} - {{ form.industry(class="form-control form-control-lg is-invalid") }} -
- {% for error in form.industry.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ form.industry(class="form-control form-control-lg") }} - {% endif %} -
- - -
- {{ form.street.label(class="form-control-label") }} - {% if form.street.errors %} - {{ form.street(class="form-control form-control-lg is-invalid") }} -
- {% for error in form.street.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ form.street(class="form-control form-control-lg") }} - {% endif %} -
+ +
+ {{ form.company_name.label(class="form-control-label") }} + {% if form.company_name.errors %} + {{ form.company_name(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.company_name.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.company_name(class="form-control form-control-lg") }} + {% endif %} +
+ + +
+ {{ form.legal_entity_id.label(class="form-control-label") }} + {% if form.legal_entity_id.errors %} + {{ form.legal_entity_id(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.legal_entity_id.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.legal_entity_id(class="form-control form-control-lg") }} + {% endif %} +
+ + +
+ {{ form.relation_id.label(class="form-control-label") }} + {% if form.relation_id.errors %} + {{ form.relation_id(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.relation_id.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.relation_id(class="form-control form-control-lg") }} + {% endif %} +
+ + +
+ {{ form.industry_id.label(class="form-control-label") }} + {% if form.industry_id.errors %} + {{ form.industry_id(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.industry_id.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.industry_id(class="form-control form-control-lg") }} + {% endif %} +
+ + +
+ {{ form.website.label(class="form-control-label") }} + {% if form.website.errors %} + {{ form.website(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.website.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.website(class="form-control form-control-lg") }} + {% endif %} +
- -
- {{ form.no.label(class="form-control-label") }} - {% if form.no.errors %} - {{ form.no(class="form-control form-control-lg is-invalid") }} -
- {% for error in form.no.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ form.no(class="form-control form-control-lg") }} - {% endif %} -
+ +
+ {{ form.street.label(class="form-control-label") }} + {% if form.street.errors %} + {{ form.street(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.street.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.street(class="form-control form-control-lg") }} + {% endif %} +
+ +
+ {{ form.no.label(class="form-control-label") }} + {% if form.no.errors %} + {{ form.no(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.no.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.no(class="form-control form-control-lg") }} + {% endif %} +
- -
- {{ form.city.label(class="form-control-label") }} - {% if form.city.errors %} - {{ form.city(class="form-control form-control-lg is-invalid") }} -
- {% for error in form.city.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ form.city(class="form-control form-control-lg") }} - {% endif %} -
- -
- {{ form.state.label(class="form-control-label") }} - {% if form.state.errors %} - {{ form.state(class="form-control form-control-lg is-invalid") }} -
- {% for error in form.state.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ form.state(class="form-control form-control-lg") }} - {% endif %} -
+ +
+ {{ form.city.label(class="form-control-label") }} + {% if form.city.errors %} + {{ form.city(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.city.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.city(class="form-control form-control-lg") }} + {% endif %} +
- -
- {{ form.post.label(class="form-control-label") }} - {% if form.post.errors %} - {{ form.post(class="form-control form-control-lg is-invalid") }} -
- {% for error in form.post.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ form.post(class="form-control form-control-lg") }} - {% endif %} -
+ +
+ {{ form.state.label(class="form-control-label") }} + {% if form.state.errors %} + {{ form.state(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.state.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.state(class="form-control form-control-lg") }} + {% endif %} +
- -
- {{ form.country.label(class="form-control-label") }} - {% if form.country.errors %} - {{ form.country(class="form-control form-control-lg is-invalid") }} -
- {% for error in form.country.errors %} - {{ error }} - {% endfor %} -
- {% else %} - {{ form.country(class="form-control form-control-lg") }} - {% endif %} -
+ +
+ {{ form.post.label(class="form-control-label") }} + {% if form.post.errors %} + {{ form.post(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.post.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.post(class="form-control form-control-lg") }} + {% endif %} +
+ +
+ {{ form.country.label(class="form-control-label") }} + {% if form.country.errors %} + {{ form.country(class="form-control form-control-lg is-invalid") }} +
+ {% for error in form.country.errors %} + {{ error }} + {% endfor %} +
+ {% else %} + {{ form.country(class="form-control form-control-lg") }} + {% endif %} +
+
{{ form.submit(class="btn btn-outline-info") }}
-
{% endblock content %} diff --git a/webinterface/minibase/templates/layout.html b/webinterface/minibase/templates/layout.html index adae139a..193ae3b6 100644 --- a/webinterface/minibase/templates/layout.html +++ b/webinterface/minibase/templates/layout.html @@ -12,10 +12,9 @@ MiniBase {% endif %} - + -
@@ -46,11 +45,12 @@