From b19d5db8db7688711c3425481e06ff9c3f26007e Mon Sep 17 00:00:00 2001 From: cedrick2711 Date: Tue, 14 Jul 2026 18:46:45 -0400 Subject: [PATCH] =?UTF-8?q?ajout=20des=20disponibilit=C3=A9s=20de=20joueur?= =?UTF-8?q?s=20et=20ajouts=20d'un=20tableau=20qui=20montre=20les=20dispo?= =?UTF-8?q?=20des=20joueurs=20lors=20de=20la=20cr=C3=A9ation=20d'un=20matc?= =?UTF-8?q?h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/app.cpython-313.pyc | Bin 2965 -> 3022 bytes __pycache__/models.cpython-313.pyc | Bin 17586 -> 18761 bytes __pycache__/seed.cpython-313.pyc | Bin 0 -> 16718 bytes app.py | 6 +- c | 147 ------ instance/team_tryouts.db | Bin 69632 -> 126976 bytes models.py | 14 + requirements.txt | Bin 0 -> 1050 bytes routes/__pycache__/matches.cpython-313.pyc | Bin 22820 -> 26566 bytes routes/__pycache__/users.cpython-313.pyc | Bin 10077 -> 18080 bytes routes/matches.py | 114 ++++- routes/users.py | 181 ++++++- seed.py | 64 ++- static/css/style.css | 149 ++++++ templates/pages/create_match.html | 520 +++++++++++++++++++-- templates/pages/edit_match.html | 495 +++++++++++++++++++- templates/pages/edit_profile.html | 234 ++++++++++ 17 files changed, 1706 insertions(+), 218 deletions(-) create mode 100644 __pycache__/seed.cpython-313.pyc delete mode 100644 c create mode 100644 requirements.txt diff --git a/__pycache__/app.cpython-313.pyc b/__pycache__/app.cpython-313.pyc index 6b5d54a78b43977049d752a996a752a75e9d361f..c56d9c3ac77bc9c318fc9b52d7152e5835994181 100644 GIT binary patch delta 464 zcmbO#eombCGcPX}0}!}Q56e2gk(Y~+v2U{k<3%PBFPS_p1qL~WXdaL>2n1P8{>UOM zY75~ZlhO8*6v8W_7IkO-! zucXR6*wx3?IYc2nF*mhXN1-G&F*m+AGbL5QEy&+jAs3`Pz5tpdBbeAU2WJeB7Nev*gNDM@Xg9wmJF(?caCf9PfF`8^X!okC+bf3fU0~05w z%ojEWUjBZsPOs}cau<2z=9FAeiM=czcZDZ@@+ZzZJzft}=A+uS?y^kBG_-;2E3%*L#O=>w2NVPVHpg)R delta 392 zcmX>nK2@CeGcPX}0}wQ3hhd7)9+v_`DA(kzEXs@ylW(#}i()g@ zc`_%fI-?8FKuw6Tn=4t(8RZ#ov4j?<7FEdyyZX2~hbW{c=B5@axCQz9DwG1nC;w!V zW>lXn%Kmq0?vb@_B9{0)GTy=Wf9>&Z^HErFcnU1Mx1KG!=9fdp$SWoCO0XZl189{6VW)Rz$ z%advHbuJ@D$;n*YZra8mYa~E~A&|JmTvVF3lHoIu$xvhj65z1O%}*)KNwq7on_SK9 J&teM{1OU*jPksOZ diff --git a/__pycache__/models.cpython-313.pyc b/__pycache__/models.cpython-313.pyc index 8822d0cc02d3fe2466000eeb069dbe9c8131e28d..4e4b0093769c266096c1c415f70b7c559b325c53 100644 GIT binary patch delta 754 zcmdng$#`-SBj0CUUM>b8STP|it6Fy=p9B*d(?*Ruj9d~7N({l0QVhXTlP56Bvx=lk zYszfqVEUlJxN`DOt#-zBn;W%%^D!RTTx)fTiS07bh@xwgeQhP!PJ);xH)q@4WMn)! z`M#kflLXV`LS>Q3T@s;_`7LxNf3>&g2xbrFuw*LYnVcXg%_uc_p{y`FM1&6^!pJ`P zf`j+u4Js^*!XVMf%gux*vp9+Yu{bA}C3BHT3|o-aRr zkr2rLZ9u}UNCL!^0}*RL1V50t#Shkj&`>mGa)h+}%N0 zvx{zk^xXszw^G;Z*^!7tcf*;P41XukMN z@fD^Q`3)O9CO61POm4OlRz9I|UjL;2MZu^BuLr#R{qbG#Gr}(D+Fj(eZ+0uP0oq#h z5ER9mWHa^MMhOYFG3T$YliL;>VM3Iv-QzW^`bjp)_A( brp6Zr5c`V^7o+NgqUjYAE50%SnP4*jtP|?v delta 194 zcmX>(iE&dWBj0CUUM>b8xLOgGHBoCKp9Iq##*G?x7+KOKHKjHiF@4Zr)SRrW-Ojjn z^J?wie2j-TFSk0y#CZv*rRXY`MHzh8Ra1n^OGx?R<9(EARPg7*_TK9U0LFXr%d&qLV0tzz% eaq-2;aUREnxfoR^6iu&~Sn-ts$Skq}$^ZZ%oIt|> diff --git a/__pycache__/seed.cpython-313.pyc b/__pycache__/seed.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c9badea54d8ff46ef8a1d532cfa6263f0a20736 GIT binary patch literal 16718 zcmd6OYgioFbzsrm^oxG+enSD0pd}vSB?L1_LV!RZki=C9Nl4REbQjQ4cQvYNgeZGv z@Fp9hI2*z2B-5J7u6mN)1l!44o*l2XNu0=u6OR*T-93$mb`4(V`{F+;e44tP zUrn_qCM4ut&Kqk;G*Sw+Uqb(F(N0(`g6iUU@j=< zDCHP8?G=Lp8}tTv+1!7F_01`D-8qi+%Vzu>;rx?8X*exR6JYKcAG^Q_eO_@kz>aa&*f)Q>_7FX`WNsgS;zu^R%AnV#?D(Xf@&{1>@^$^H$)QkF1KRSU1 z&>(@FL_=s8okAmM6rCoJGw3WDLkOKi3_4FB)-cqV zRqfv@87-Q_4hp1j1M2g*4&_Y(TVOOuvQw=ZfP5j*^TkB@MxuO^V7}Fu)H_X$Kzz#r z@7_f5I);Kde4V0r?Sx$&6}VY2m1-e;<^=Yr3&t1J@pkF|wdeHz`g8jKt=f-%qtndmpA!}Gx8|7#8FT53&306eQ)>bybJ9Hc~STcFXv{20W*oj=Cl(u{yk zu@&$}-oO}97S<(if?77InW0udYFSV#A(}R#%0yX%%O)*vfxcRTWt}KjM?tsHZ>qY6 z`DjE?gnqkGi*7^vR!Vyr+AAsT zw-Ln<%qAUg2WxgPc3AZ^vF1v3Hejd!p3rDfDK6DahXv_CAAyb0D)v@+Is>?C(L0zX zT|fGrPA#AP9POsFqHNU;L0^uvR+NG<;{BCbkwcvaSkdpMS`m78qFR;1*dDdERc_^z z6SXQ7h0vYOj0Vs!dJnyievdIT4n>#fKY)M!k1xRSF5w6RpfLIX{XXIN2Ur_~<9~W# zj(Cp$8T}#pBPI*xNbHGlTzvtKE6G)V6@3j>jX4sF#T>yZbHFNdnH;dn-yl}$ROJPh z_4R~R{xPwz18UD!sYY4A{gVXle@T?zz$Lo(Ec=AMZ(^(+_D*2w>>1lT`moc;=e>YU z=c%>?Hl3T+rc*FRmVRY6ovY3RZ2G^Z+BB1!@GLf1HW&x8A+6*dDn=j;xm?CJ;fOd-~k|!~yFr9>%;&jjnINvG1v4d)D ztE`47jlO+0c?v=I!RwT~fQCv`$$*9m(rPFLW8|u$p^+QEGEEhz^8ro$_f$=Rj7vf4 zL`%8UK*r!nEL+Ax>PMhnmLjpF>{2DB?i=){UGGqo2ePXXhz2QCEnC=Xt(roAhD0@L z@#X(2?26}N|3M1x%I9K-Qn2ZN6?WBxx_F8yXDYBkGL_^>lV=rvqEG{5qUcs~wbfu_ ze||QDubJpj<)QAEbQYW5j+wHwxG)Q*lA)O@rkbfn-@zJTK_lodz~B5O=>7pfzmate$NZ+h&?I?*b${^cSH)tK*mUqvKOFsN~sYm1#dwt z6CxqDQn1^V1O)Q6ZMK@;>QXJ^`Bs;T{mZtxRQrFv)um$pGOdpI;k1^N)_Z;~tNSQv zU*7}!`Wvvizirk0e`sN4NekQmEAzXhs?~!OzMtxMCpuI1{;pa;A2X(O+Ce{nxU~0k z^7y-F@YwePJ9)3Vrsv*eq|3+meQxS!p4FJW>Er@Ff}Cj5^`XCS)9y+|a+9=FKYRw& z?t1%&XHbz$C+%4O1E}_;>w$Is8O|=#^&vdN-KavlQh_v@^n5K-3;9$tZxkuGJWS5DP5I~4lw?T-;2qck> zBBG6L5F+Vq5F$kaA@socTUf5!Am33SO-8<+sRxg72tOgTB9kzJn<~dADf!Q8H_3PQiw} zaOba@Vj3qPW-C9YIpzMOQ5{$1rIvgP(*kq(LPAoleA`5Cl0z%gmc(mk+R!IBm*NjG zt$YV_2*tYo95Nd?TjF{H$QpV&(5(h5)H+hQ0B(}Y;fekv_w>>2Ak)qqMr)lqzVkVn zNaxu))pbIK)08&DNx>L-L(%xi_Y>t$Ufu$BxxZ>s=LIq7$J=5M$W8g7PgNYS!7b=| zT4+2i^e1Vda$4wTX`vfwp+8Lv{hwRVX}Im8;g2^=sWr_M<^0*GRNdEqs{dR+ePZnN z2t7;Qak)GxFS)#&C{?85_}QQvzhV=DUblCa<%6P>`&2&=6{P}$@J7w$C$H2*DSKy+ zC>5rHxa12tQKC~jg5)ipOGtTrw_|VxLzMDU$pXT(3r}Fj$aC;!P?Sxx0w;Ps93Pa8 zvx)bHk`=K6J3|izW_U5cOW7iB9>Y9lg+QY_;FpZ;?d=T*n-4ZS^|BFj;#of@`Z{?WTT(u*=bH_mJNxTWF7Hd<8?wMvela!LJ7dPp1GXeiBUR^E$HwM#E zw}qQAaqRRQ7Z4k#r<;^9n^NeU1|biOKq$Zu z>?GvOX*>g28x(li06WVKFQ#Ra!o?L3lQSn8^|SN?|QtXEeeTQTl5p>s`7OXhxP4%D=@wYNxnpE2z%s^lbECG#n;LHf85nCB%Mw#Sq? ziHq_xy1cV^(4RW#tqfKH8*A%ZXI9_wO`CzNG=NY3XiIRi2NoEw7o$<0T1SdH} zQcoE^?=+afJa#{H%huv83Z9SST!DGXqHs7>)7sk7@yzj)WXbW{rL55aZ2NQU0+@(o zm?lW*UBV&BjQO3bIdrJG?U|a`qDoHYkYqjW z^WFeqC_7Ga1V}SwLIq<1_cbmE(!v&5pVWt4!Ss`z>JogCMd373)6&v;SgL)7Qc@|C zQ|SO-6P#gry4S}F*CacK8!7Y1R}HZ~)jnh!!E<98*A3Q}VA5OD(b3lWOlfSG2t`H_6K0NZlFLPw$MKnvyL*GLMN}zJQPL8n0<@Kh!MMJVO{NO>!2Ul6iy$ zuR;&9KA&Xw<9do5N_qi|H)!8naG`#ia%3w(o&f}xJK&MB2%o{4=H|nl&$QAcnQT%$ z+(F59Qe-DNpO2+`JUC$FcoXfE$>gMNmcBrc1qbI)@mNfTw@Z>!54elg4yo=L;@C#K z327z%_$E^ff|(JYC+ih=xaIpKy%Hs5?ZFn0fM44Pd+}o*e&F{sPP5`IaoiMey0}Fv z6yYYOkuBglU22S#9SI-01<6i2Qx}BiDX))Hcwr7QCE!F{IEo*~;E@z z8%f#V#`M_549)T0fIufuB|FpHM)z?yIA37a4=Kqerj@b~=i}T#8h?i*3;;wJBrHi? zHj?n|@_J-5Vas`3lM7NV4OtJ%dnNK=6Ro5_`Dj+~^3ycph!razLy4RCP=>#w@~{h{ zWElacMx!9>@y_|Bo&*j(1+xs!aI~m!fD~vJK6?s6V5UXFtl-#-%x|RH5M>lntR4*GK5YDrZ zWEn@io++#n+0e&LalFXM`hfuJ^Md(-V5eohVkVmgAe1u)@TQb?0|D^QHhPv5z~&)C zcXN%jWW%BtX|Q9zSL7NcdX(clBJIWJfg2p&sx<5x5e%MYfsNSc%o14ODokS5mc)rB zAmH_6iL*fL!igXx4D2-dlrYh>2RZi)@4Y_9B>*;TrtmG}HMI?b@&@NTYQGhR7jRTj z*nu+?59lfy0j}{FsIZsNR5Ag%wJ~ zV^pUqy}Hf2wj^w)0R-muPI=vm8>8pFun!fZpy9;ko#x4somQu26TTp!6pyPBB&cuV z>mz{Yq`<$3>u{lh;Uw}953Ld4wn2ppObR}!C-6y-O5ne_g}+Ji{RI526gWNtkok}S zH{mlU%BfS9ody2Z6_|3(bKEuAOya1Ed`W7Aoj__*p}NeSC-OS;1Y&x7`w_YVC%_;( ziQR|@W(7e>oO8Ru*W&Z%LX}iv?(XiUPX(sIJ|S%3gD!TMG(e@cGwRv5i^MS;p}K36 z2jbd#S`Cr_O`MHurPdMU0NX{=DOBpIb{C?PX6lfvZ3Jwg0D@w}QC7Vfh{MkA70kRhQ zK`C%9BKQKy3o}V%kPV5L0H2hr(Lgq;ae#zM5&>jG!uLajRMRfmOjyDu7ZxDZ0xt_! zDY$5nvx(15+`%b>V&M~CBrM=LX@Y(^PhGSt#k0yr6)KythjNL&0E8I(4zDC@!K2A0 zFth}M1#Cd%_(V%L6PSZf@j=JfI)4q1XvUsS0m#JbVHDxlaaV>%gzr!(>@QyICpWme zE;IO!?{Y8X72eBz0XJ*`h>e%ABpMP5yo|kO`aC4!{FGU#UPmcBK32f z{>wvO8d}#CM0Ex41S4g~Vud|xy5k!=;jhLDyVrC_o`N^W3R~86txv%Z#R@ytbcdgU zH^mAMuIZYeg15&C53T7so`N5V6&_vF9eWDC+qkW@~&#}^8Aq#=OgSJ03Xl*1B!BM0=Rfn!x5}0g5`_! zGm+QlF}3D2?!K&X z$~DbAE>39u1d}J2fym&c2&c>~u>uie9oJqXSU!~>jJg2uUJb(CuWS6c_@c&5usj6o z+Jn;ob7l16u2Y~TD5h0`OcBIsf(T39DUex={8oxU=t$Gi$k1yMuQIobxPMA>0~h_; z0AV((eVCt>t6v;`QbOgGhbHc6)^b~K8J05Q#+-Fyanx8GFDeUNiWb$~yZUimytq7c zEn2+)-nsj=-@NkijmY`&$c2drb2&0{C7xd#s$IEqukU{TH;3c&p76yF><>I2zY;w$ z{>YSBYW`nTrYY-@mda~;=%B3j#s1G6B}=-EysGe?uoSIsiRHB}nKtaXn9u%b{@!>= zO*}h)d1|FBUQiNxC0bA$&nZ}*Uul5i-MW>!P)GQ9EC&OXRxGCmrgyjKPEoiqR@@vf zuey8T&V|Un!?E(tct!QynL9I)+OAl|E06NC9Ofn6lOoELb=!Q)eA{-*wj5kDmc@6F<#V4JOCD8H*`-ftD$}5Np2SZ4xz4mS@_RKQ?*09tvhewcxqeO8@JLV9HN@-< zzdskQde^*S4)wfk{a|i!Fk)|rJBmW3QODlJlW}`t$Q-rTEDmn38Kd^9@Zr_LXifXQ zn-7f9j*}7F(BeSclDB*zYN=T4-#FNQkG-GsktJs9{?M}89I6dhg>ysJHT%AAS{4T) zwr+3_Ii=z8)w3U5x_>fiJQ2^XS{=C8^VOjTol)aRJiB^z{NCBGUU~q1qw(yD)x7)8 zsIl*%DYHPoIQq~=W#=xQ{LE1S%CP3CB6l{dPJg3(`5ad1dj8%|^7r2Fix-xLPOiMQ zUg(S#Iv*KyHuI9^i8)n@!kV!pZp>ac7DbIkp`1^RWsmGscI6YtPC0HQ7lXR9 zIw;0;NC)m>Pqyc%E^UU__RS> z^y@}3r_;JKm_&zg5i;9Wy^YH`zMv{k+JiSvQ1X=QpS_KR8?PJ1J_`*lg)GeQ)BU?Vk)~FoXCz1 zqbhp({rXTv_-4e6<0`1xoV}cVt7LgRG!|l)CnCnGxXGbFBF6G${psG&+0gan%MoKW z2%tnC(G`FMEVjkI&nlav#?mGIa@J=BRZAx}a`wba=)2B4&P1_MSpM!CZ@=-$-r-o` zDX`sK+fpysuGM~f=+@Bf(OaXT)-_9I+~T-Bd}}zQ{nS$S*iIEzgTJC%p5*MdD$o1Q zP-%EHVs2g2wLR36o%D}6#i8m@^E(HY^c(qQOZ^-6{M&E*<{MvmE1dgd`<{)Wio3S= zY~kyx)v=<6<;)G3W#fB|tJ$l^V$$PO&g_EcaOYxWVLE_ zELM7O+4xkuq%xepTKGZbz0PRWtM_k4s|G%Amr4XM9gXyygJ@AL<8M?w$SmD<2r{pNLfU zJ~$GY@<(Q`$EL1F$0orbZ)T9tG?p=eZMNdFW~0948zWyEx$lhC_dP1KROBq1!5Xr2 zu|s^==I~@J&k5~wy=VJxqO9OJzd0SKZlvx8Y8MYE0$T zIH<(Ssz8!)+8M8`#s5QHk=C8z`vZ~EzDVD6qz1;p1!C;FrS3@sBzi<5Pg-`fImKnJmPO1s6@8+otl1C>o9}ep?Y`5! z`o)h;KeGJ5616Z8IV_IddX&WZ%cEZ!U2b2~6(MDUg>(b zd!;+)402HcxW{g!Bb!ENM23=44D4a2(GBToBUJZYg3OT+^Mzt|)i8`BvHTeCYa$1db(c%K3lV zewb}4gH;th&ZEk~hZQXum-oestL~QG0eAM>Hn4{B=Hvk=p^slc#2?Wt4#f+K7Ek|E zPVtid=eb3p?B6}S)VsAMs$xa;V8`G zSeA9mQyb-wgstjh#-yG?jsaWnW;>M?*Q;cp4@t1#@Gk2@lK0!{p;OneO<549N?89${; ze@4~)j0&t%ffyC|8Pyo28b70~ztEr8W%Oh`oHbH9%aRn+7XMUN@e_02SLzpg<0i}P y%3GB`HkJIunEzY$f7Vjw(uk?#p@Gts{Ieb!(DT2E^uAkY>~U(p>ooUt82&FC@n#?Z literal 0 HcmV?d00001 diff --git a/app.py b/app.py index 736775d..051882c 100644 --- a/app.py +++ b/app.py @@ -32,11 +32,11 @@ def create_app(): with app.app_context(): import models - from models import User + from models import User, MatchParticipant try: # Check if the database schema is up to date by testing a query - # that uses all model columns - db.session.execute(text('SELECT games FROM users LIMIT 1')) + # that uses all model columns including team_side for match participants + db.session.execute(text('SELECT games, team_side FROM match_participants LIMIT 1')) db.create_all() except Exception: # If there's a schema mismatch, drop and recreate all tables diff --git a/c b/c deleted file mode 100644 index f9702d0..0000000 --- a/c +++ /dev/null @@ -1,147 +0,0 @@ -{% extends "layouts/base.html" %} -{% block title %}My Profile - TryoutPro{% endblock %} -{% block page_title %}My Profile{% endblock %} -{% block breadcrumb %}Home / Profile{% endblock %} - -{% block header_actions %} - -{% endblock %} - -{% block content %} -
-
-
-

Account Information

-
-
-
-
{{ user.full_name[:2] | upper }}
-
-

{{ user.full_name }}

- {{ user.role | capitalize }} -

Member since {% if user.created_at %}{{ user.created_at.strftime('%B %Y') }}{% else %}Unknown{% endif %}

-
-
-
-
- Username - {{ user.username }} -
-
- Email - {{ user.email }} -
-
- Phone - {{ user.phone or 'Not provided' }} -
-
- Account Status - - {% if user.is_active_account %} - Active - {% else %} - Inactive - {% endif %} - -
-
-
-
- - -
-
-

E-Sports Profile

-
-
-
-
- Games - - {% set games_list = user.get_games_list() %} - {% if games_list %} - {% for game in games_list %} - {{ game }} - {% endfor %} - {% else %} - Not specified - {% endif %} - -
-
- TRN (Tracker Network) - - {% if user.trn_username %} - - {{ user.trn_username }} - - {% else %} - Not connected - {% endif %} - -
-
- Discord - - {% if user.discord_username %} - {{ user.discord_username }} - {% else %} - Not connected - {% endif %} - -
-
- League OS - - {% if user.league_os_profile %} - - {{ user.league_os_profile }} - - {% else %} - Not connected - {% endif %} - -
-
-
-
- -
-
-

My Statistics

-
-
- {% if user.role == 'player' %} -
-
-

{{ user.tryout_registrations.count() }}

-

Tryouts Registered

-
-
-

{{ user.evaluations_received.count() }}

-

Evaluations Received

-
-
-

{{ user.team_assignments.count() }}

-

Team Assignments

-
-
- {% elif user.can_evaluate() %} -
-
-

{{ user.evaluations_given.count() }}

-

Evaluations Given

-
-
- {% else %} -

No statistics available for this role.

- {% endif %} -
-
-
-{% endblock %} \ No newline at end of file diff --git a/instance/team_tryouts.db b/instance/team_tryouts.db index 9723cc83854f395b25bc7fcdaf5af3f32ffb9392..87215832f26f8d8f65bd50b08fb8b86b4f16abce 100644 GIT binary patch literal 126976 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 z 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 R_5$D&g%7lBaGc4Y{{N?RvpN6( literal 69632 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 literal 0 HcmV?d00001 diff --git a/routes/__pycache__/matches.cpython-313.pyc b/routes/__pycache__/matches.cpython-313.pyc index 1a5d5a1896615658fecd145c5a01b9d73291d4a7..36f6716fb365fdf7ae2cbddcc19024926288f487 100644 GIT binary patch delta 8742 zcmb7JdvIG_rsDb>wP854>|SQas5b~II&~Lj+4~aN}VcH$hI6Sb!6vANvEMj zS!QQ3%a%HvEu~x7CJQVMEF{H+W_Ms(hF96LREpcmXtUGo3Mh zJ0>k~#{TI%zVklk`+eWJU;GC9!`E5E9lc(|KyZKS*r|_(FB+;OZIX-ir#eO|NhQbd z3@;zGkJyQQq>5CHIEaH|POt%nSDbM2N?z41B`#j=WQhBOYrL1fAh%r1adK}dLDeiL z_mxv$->;@4tX<3TCaB^s=V#b}JWx*kGo-4^sXHvE4f0NquPNslJJjwIYToT+cH+<> zlzvI=Nl(a2t0d=GHGN8QtgT=uOokwq|9mBtThtE&EYgFAuWZ>X^KdW&d*ZBZ}{_^5>eFq>AoQ zb*P4SGfYw)R?}F&_0u-BypmzW1a;I}HAh(9kko`#<5HT_SZXvoS?C7>$BgY^7%lvU zRrO*P6EiamZyfiaq*+yxgceLm#pEwUo;xR$w!h4k0v>B)96uMtGgL`AuR~400qtISbBOc zntp6CPTJ__bq{4aunZ3X=|lllDoti_H_6>Ki33FrpolyjkDYEU$dWPGe<9IUkeymc zB*_RCOJno%1;wIpZVKwzv-9&&lqAF0z(E8xKuBLu#LvZ(73ow#nI@0Hfk}}DEFGjv z`c98dY(S`*DzJ+M?UoGsQ@yWI55nBmAf72rY%vkVmZ7~5g9w}hCiR6?hhZ;!kP9s9 z)*arwV@J-hBkyR=Ihx;cv@Z9rcXhw4dRcYJ|KcYD5z4W%qshg27%orYS?RXuYP$?E%R$Ay2l@|JBjmiK=8m z)>G;ZEAeIum#o`SsrLvMOO42T=?O=-+!t1X%qtEby`)jlmmME-n8IeBYf|xsyDph@ zjHeGd-I9=>e#Y6a;-Q6*1TM?lPFn_5#Cg?(a9n#h5`v_7Xm?=jJ_PKMG$FJj^Z*o0 z#j|@Z6%}Iy_LL#J5MZyEcTgK$VGC-!SRTWN|7nd5t<#xY$+&l;Zl=BSWs3bWDJw^Dk z$?ets@diObnLPAYzNUjN&(fhSWK=v$^199|PN);q+~0q#HTJj+yY@1EPP=vHI?A*I6&YeYN%A-15I zCULM1X7DU|>38dES)Tr?K2nM2B_t_Gnpz6%=@g!Cj)P@B9@@j+qR)nQ%yW=M349zhTo%Yw0afPz(Ik0^41}6#`$$+q+p*V4$vz4hP9gdw~Jz2K=8!Z^p!CtE6L zywjrNy`}m|3+%NIGXuP@oM{bPEX?p;SR-3xv{;`Bo9JSjwRX$6ZKVo4$NRgb$;xeO zBCJ`cvLppeyRT@6TK~M}1MlBFSd$O$w5zLy3C{>?UYt&_)Nj%rwnKkFG=Dgq;60~P z(=EC8WIS6Z1MGwr$hJw3;X$AmI`z_8zK$+;wr1{mIs8lnsZDO@So za53%|% z4WiL47}lF~CK4ht^LuT4I!4kQn%i6=#gX`#vk4NPX#xX29!tf!RD3=@o#tYqL~4G4 zM!UQj!Ace=PYb4YncUDAdCz(PqIY(_ zEGzV1lntpx)%pITH{z58!{Skl_0U^gRqQnV->!N)oH6E#RJ1jwuy7XPB<0~9Q*T*;hbZ5%`vhx@(ZKurmH&dy6=YT zzLgVD>e`=o4d-0LYp#)ts&^HPJD7LvxZ&Ed0y+K5s&$9|iwCbw<$~QgNB6Q~-Q|D2 z_u1a(c3)h5eb;L&o1xG3wX+<3y|1xp2MqW}&Mv;4dDY%;p5T}thuQ$w+Uq7f(l^{J zBIggwq;E>uu#5)xG)jJTc%K;E-&<5S1vKXPmQhgh&4)L43OQw;8;p6&?`ea z9TEX}nUEJ5r?&%c`qjNwsvWY+xo&nmEGXyxAwT;dPC)A~4;VbF13od=9w_I6H&tY+ ziU?1?cF-L^WPz&)?Q~AZLOgiM#AV5&{k~qRi zgeMWoitU~Z)Pf>{2m3Vj9`bbIO%R>gvT7_;OrIqLo>Gb=6HUyd2t_%V7DGOR@C=t3dL3l=^!F)Pm#^{q7Zf>rQBi2kbzWB-8g1%xjmY_1p*4fzs6C&E7>d>KKY zA!M9Q79cB_tU_pJGJwL;3KaQIm|0$zq8AMhrEze!zlLQxgewSNLHIgA$R@7aJvKz} zYRTOzLat)PvP0Xp#o>MdOTK}yIfPYAzK9?&kqu(VM7|OaY2q`9bdiO=1BHiJU?I7D z_2S{*vE#qf-GhO8Ua84GJiWm%n6H9bWStT^f8t=l%u#`cY5s(}u0QGkA66%E)zjzH2zw1srtn4>`zR_hr{**B3m? z@~2mSa#Svn@DjQG`(COKrtp2nHd!P40bqmdhk(tpe>F8s zb}+9w`(4Ka%uhP|b?~#^QGeVg{h60V3}}wGNPpJM9&cGq@)n6=85is&`th)TNBO)G zyn-Ra2cJjF$mR}z8ymqL7F^g+(NHRHb4m(D@cdA;2gFlS+=-W==u5Qa*mHh#fTkq? zrGV!cYuq@)o;->;t2HcL>Uy`O+iLek|}0^luD2?gyCtv*;;BtiXRu6gc9TA z+bPLzNe?K#80_nv)4jDRin&s3>5xa^pD2= zyXf?(gADj4xRpYPXi71`>w)p(Ywq2?Oh|YBjiGp&n}=5qZef-aUlzH811T& zP0h!-7#rSk$HZd(Y1sN`uoDm#~CXJ?_oJ{p-;LHg{X!-VV1L!#<9l>&fr}9s-PUoY=U}kd zyhdcDeprG6+eq-Ni}WTi8xP3|c#!3=*qlg3W7Fxxxj6hxFPu%Lp=1h6v@@~Cq6@Rp zN8|BF-q{5?A*u!d6H*;K(?Uazv#hpSOA&TRQSmx!kdGR%PH0b#G8eehi{4lYU|Q~Cr1D=mC& z!``&`fB&nREI;vM{o25>HOqq+4z24QdA&cU_pj-zFC2iE zREy)nC@_i9^3i}EWBr<;Q3>-SNyU&|`lCt~@O-ctKA1Ic?r`z2HSfX$+1I=ax4Z8y z!a)lN75Sa(v{_mm2$Vk`*Fz?T8L%oNVia&(M*m{KnnBYFLsuSNPd2Q|IvdSobpBZ8VSl|frC>lD#i@?V71tc z^W@-(CEZkz#|c>=1zk89JDZ+cAc^x}6Hz$m1?%>8LW?*g7alMQrs-G`=sFoY8IR(( zh*ZIfIjQNn_{`bNd|agRcuM?Kf;R|E0KvKx6p>(#;kv?Q6z`x7KV@$3F-2~I%rEio zJpd8$TX|JpTYp1apVv0zv<)xr%C}G4XrIWpAIr5LyJ@Watn!k#HEVBKGqzr9&l)?k zs?MLAn^w|m<{r3i+KQ~TVPzz1xqnUDm6de~-!Bh`>gbJQf1@PA(5h(UL1!ii-4*1* zr+wjjJ^3(Xkh2J*2;W3NlaZjcBB%&qti+GW075lDLAC4j!pzzEcpv#WBw-><>aPId zoU-iO%w!(?X=d_mrsF>t$J@-~dFJsqnaAH|nxr|ViT?V*qwvv$b={FN5)*=dLx$;% zqx9&ct#Wp2QR{{b)4v_3ADIj~A}sp|TdsD1-2f{GayA~P*C)M>36`CfmP_|TsgSdg zq`#SL=-!a&*n{kEy-loVV~S-Yx;$&nvG5MlwZ?X@v&P#J1>0S&-E&(8NnyhO50P;C A=Kufz delta 5724 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 diff --git a/routes/__pycache__/users.cpython-313.pyc b/routes/__pycache__/users.cpython-313.pyc index 56c426d21e65128bf08c0897e1455cf6a3ab1295..a0aac6dcc5d36c07de4eafa16168f100f8d4b4de 100644 GIT binary patch literal 18080 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.description}" if match.description else '') else: # Player scrim - show all participants - player_names = [p.player.full_name for p in match.participants.all()] + player_names = [] + for p in match.participants.all(): + player_name = p.player.full_name if p.player else 'Unknown Player' + player_names.append(player_name) participants_str = ', '.join(player_names) if player_names else 'No players' match_desc = participants_str + (f"
{match.description}" if match.description else '') @@ -153,14 +156,23 @@ def api_events_for_tryout(tryout_id): participants_str = f"{' vs '.join(teams)}" elif match.match_type == 'player_vs_player': # Get players grouped by team side - team1_players = [p.player.full_name for p in match.participants.filter_by(team_side=1).all()] - team2_players = [p.player.full_name for p in match.participants.filter_by(team_side=2).all()] + team1_players = [] + for p in match.participants.filter_by(team_side=1).all(): + if p.player: + team1_players.append(p.player.full_name) + team2_players = [] + for p in match.participants.filter_by(team_side=2).all(): + if p.player: + team2_players.append(p.player.full_name) if team1_players and team2_players: participants_str = f"{', '.join(team1_players)} vs {', '.join(team2_players)}" else: participants_str = 'TBD vs TBD' else: - player_names = [p.player.full_name for p in match.participants.all()] + player_names = [] + for p in match.participants.all(): + player_name = p.player.full_name if p.player else 'Unknown Player' + player_names.append(player_name) participants_str = ', '.join(player_names) if player_names else 'No players' # Include time for calendar display @@ -244,6 +256,11 @@ def create_match(tryout_id): location = request.form.get('location') match_type = request.form.get('match_type') + # Start time is now mandatory + if not start_time_str: + flash('Start time is required. Please select a time slot.', 'danger') + return render_template('pages/create_match.html', tryout=tryout, teams=teams, all_players=all_players) + try: date_obj = datetime.strptime(date_str, '%Y-%m-%d').date() if date_str else tryout.date except (ValueError, TypeError): @@ -253,10 +270,15 @@ def create_match(tryout_id): start_time = None end_time = None try: - if start_time_str: - start_time = datetime.strptime(start_time_str, '%H:%M').time() + start_time = datetime.strptime(start_time_str, '%H:%M').time() + # Auto-calculate end time if not provided (start + 30 minutes) if end_time_str: end_time = datetime.strptime(end_time_str, '%H:%M').time() + else: + # Auto-calculate end time as start + 30 minutes + start_dt = datetime.combine(date_obj, start_time) + end_dt = start_dt + timedelta(minutes=30) + end_time = end_dt.time() except ValueError: flash('Invalid time format.', 'danger') return render_template('pages/create_match.html', tryout=tryout, teams=teams, all_players=all_players) @@ -340,11 +362,21 @@ def edit_match(match_id): flash('Invalid date format.', 'danger') return render_template('pages/edit_match.html', match=match, tryout=tryout, teams=teams, all_players=all_players, current_player_ids=current_player_ids) + # Start time is now mandatory + if not start_time_str: + flash('Start time is required. Please select a time slot.', 'danger') + return render_template('pages/edit_match.html', match=match, tryout=tryout, teams=teams, all_players=all_players, current_player_ids=current_player_ids) + try: - if start_time_str: - match.start_time = datetime.strptime(start_time_str, '%H:%M').time() + match.start_time = datetime.strptime(start_time_str, '%H:%M').time() + # Auto-calculate end time if not provided (start + 30 minutes) if end_time_str: match.end_time = datetime.strptime(end_time_str, '%H:%M').time() + else: + # Auto-calculate end time as start + 30 minutes + start_dt = datetime.combine(match.date, match.start_time) + end_dt = start_dt + timedelta(minutes=30) + match.end_time = end_dt.time() except ValueError: pass @@ -400,4 +432,64 @@ def delete_match(match_id): db.session.delete(match) db.session.commit() flash('Match deleted successfully.', 'success') - return redirect(url_for('tryouts.view_tryout', tryout_id=tryout.id)) \ No newline at end of file + return redirect(url_for('tryouts.view_tryout', tryout_id=tryout.id)) + + +def get_players_available_at_time(date_str, time_str): + """Get list of player IDs available at a specific date and time. + + Args: + date_str: Date in YYYY-MM-DD format + time_str: Time in HH:MM format + + Returns: + List of player IDs who are available at that time + """ + try: + date_obj = datetime.strptime(date_str, '%Y-%m-%d').date() + time_obj = datetime.strptime(time_str, '%H:%M').time() + except (ValueError, TypeError): + return [] + + # Calculate day of week (Python: 0=Monday, 6=Sunday) + # JavaScript: 0=Sunday, 6=Saturday, so we convert + date_parts = date_str.split('-') + date_for_day = datetime(int(date_parts[0]), int(date_parts[1]), int(date_parts[2])) + js_day = date_for_day.weekday() + + # Convert Python weekday (Mon=0) to our format (Mon=0) + day_of_week = js_day + + # Get all active players + players = User.query.filter_by(role='player', is_active_account=True).all() + + available_players = [] + for player in players: + # Check if player has disponibility at this time + disponibilities = PlayerDisponibility.query.filter_by( + player_id=player.id, + day_of_week=day_of_week + ).all() + + for disp in disponibilities: + # Check if time falls within disponibility block + disp_start = disp.start_time.hour * 60 + disp.start_time.minute + disp_end = disp.end_time.hour * 60 + disp.end_time.minute + match_time = time_obj.hour * 60 + time_obj.minute + + if disp_start <= match_time < disp_end: + available_players.append(player.id) + break + + return available_players + + +@matches_bp.route('/api/available_players//
-
+ -
+
+
+ + +
+
-
- - -
+
+ + +
+
+ + + {% if current_user.can_manage_teams() or current_user.can_schedule_matches() %} +
+

Select Match Time

+

Click time slots consecutively to set match duration. Available players will be auto-selected below.

+ + + +
+

Loading availability...

- + + +
+
+ + +
+
+ {% else %} + +
+
+
- +
- -
- - -
+ {% endif %}
@@ -85,25 +114,43 @@

Select Players

+ +
+
+ + + vs + 0 + +
+

Select players then click Randomize to split them into teams.

+
+ +

Green indicators show player availability for the match date/time

+
-
+
{% for player in all_players %} -
-
+
{% for player in all_players %} -
@@ -116,13 +163,16 @@

Select Players

+

Green indicators show player availability for the match date/time

+
-
+
{% for player in all_players %} -
@@ -144,6 +194,388 @@ {% block scripts %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/templates/pages/edit_match.html b/templates/pages/edit_match.html index 346eeba..c08faa0 100644 --- a/templates/pages/edit_match.html +++ b/templates/pages/edit_match.html @@ -9,7 +9,7 @@

Edit Match

- +
@@ -32,6 +32,34 @@
+ + {% if current_user.can_manage_teams() or current_user.can_schedule_matches() %} +
+

Select Match Time

+

Click time slots consecutively to set match duration. Available players will be auto-selected below.

+ + + +
+

Loading...

+
+ +
+
+ + +
+
+ + +
+
+ {% else %} +
@@ -42,6 +70,7 @@
+ {% endif %}
@@ -53,7 +82,7 @@
- + {% if match.match_type == 'team_vs_team' %}

Teams

@@ -86,7 +115,7 @@
{{ match.team1.name }} Players
    {% for member in match.team1.members %} -
  • {{ member.player.full_name }}{% if member.position %} {{ member.position }}{% endif %}
  • +
  • {{ member.player.full_name if member.player else 'Unknown Player' }}{% if member.position %} {{ member.position }}{% endif %}
  • {% else %}
  • No players assigned
  • {% endfor %} @@ -98,7 +127,7 @@
    {{ match.team2.name }} Players
      {% for member in match.team2.members %} -
    • {{ member.player.full_name }}{% if member.position %} {{ member.position }}{% endif %}
    • +
    • {{ member.player.full_name if member.player else 'Unknown Player' }}{% if member.position %} {{ member.position }}{% endif %}
    • {% else %}
    • No players assigned
    • {% endfor %} @@ -112,25 +141,45 @@

      Select Players

      + +
      +
      + + + vs + 0 + +
      +

      Select players then click Randomize to split them into teams.

      +
      + + {% if current_user.can_manage_teams() or current_user.can_schedule_matches() %} +

      Green indicators show player availability for the match date/time

      + {% endif %} +
      -
      +
      {% for player in all_players %} -
      -
      +
      {% for player in all_players %} -
      @@ -142,13 +191,18 @@

      Select Players

      + {% if current_user.can_manage_teams() or current_user.can_schedule_matches() %} +

      Green indicators show player availability for the match date/time

      + {% endif %} +
      -
      +
      {% for player in all_players %} -
      @@ -170,18 +224,433 @@ {% block scripts %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/templates/pages/edit_profile.html b/templates/pages/edit_profile.html index d753c60..ca97748 100644 --- a/templates/pages/edit_profile.html +++ b/templates/pages/edit_profile.html @@ -65,6 +65,26 @@
      + + {% if user.role == 'player' %} +
      +

      My Disponibilities

      +

      Select your available time blocks for matches (5pm to 12am). Green = selected, Gray = available to select.

      + +
      +

      Loading...

      +
      + +
      + + +
      + {% endif %} +
      Cancel @@ -72,4 +92,218 @@
      + + + + {% endblock %} \ No newline at end of file