
    pi.                     ^   S SK JrJrJrJrJrJrJrJr  S SK	J
r
JrJr  S SKJr  S SKJrJrJrJr  S SKrS SKJrJr  S SKJr  S SKJr  S S	KJrJrJr  S S
K J!r!J"r#J$r%J&r&  S SK'J(r(  \" 5       r) " S S\5      r* " S S\5      r+ " S S\5      r,1 Skr-1 Skr.\)R_                  S\
SS9\" \5      \" SSS9\" S5      4S\S\S\0S\\1   4S jj5       r2\)R_                  SSS 9\" \5      4S\S\4S! jj5       r3\)Ri                  S"S#S 9\" S$5      \" S5      \" \5      4S\S%\0S&\1S-  S\4S' jj5       r5\)R_                  S(\S)S9\" S5      \" S5      \" \5      4S\S*\\1   S+\\1   S\4S, jj5       r6\)Ri                  S-S.S 9\" \5      4S%\0S/\+S\S\4S0 jj5       r7\)Rq                  S-\9S19\" S$5      \" S$5      \" \5      4S\S%\0S/\9S\4S2 jj5       r:\)Ri                  S3S4S 9\" \5      4S%\0S/\*S\S\4S5 jj5       r;\)Rq                  S6\9S19\" S$5      \" \5      4S\S%\0S/\9S\4S7 jj5       r<\)R{                  S8\9S19\" \5      4S\S%\0S\4S9 jj5       r>\)Ri                  S:\9S;S<9\" S$5      \" \5      4S\S%\0S/\9S\4S= jj5       r?\)Ri                  S>\9S?S<9\" S$5      \" \5      4S\S%\0S/\9S\4S@ jj5       r@g)A    )	APIRouterRequestDependsHTTPExceptionFormBodyQueryPath)HTMLResponseRedirectResponseJSONResponse)Session)OptionalListDictAnyN)	BaseModelField)	templates)get_db)current_userrequire_adminrequire_csrf)	auth_crudnotification_crudreservation_crudestadisticas_crud)UserFinancec                   *    \ rS rSr% Sr\\   \S'   Srg)CategoryUpdate   Ncategory )	__name__
__module____qualname____firstlineno__r"   r   str__annotations____static_attributes__r#       >/home/mario/Escritorio/thel4footbal/app/estadisticas/routes.pyr    r       s    "Hhsm"r+   r    c                        \ rS rSr% \\S'   Srg)
RoleUpdate   roler#   N)r$   r%   r&   r'   r(   r)   r*   r#   r+   r,   r.   r.      s    
Ir+   r.   c                   @    \ rS rSr% \" SS9r\\S'   Sr\	\
   \S'   Srg)	MatriculaPayload   r   gematricula_centsaddmoder#   N)r$   r%   r&   r'   r   r6   intr)   r8   r   r(   r*   r#   r+   r,   r2   r2      s     A;OS&D(3-r+   r2   >   adminalumnodocente>   seniorcadetesjuvenilalevinesbenjamin
infantilesprebenjaminz/gestion-usuariosgestion_usuarios)response_classname   r4   requestdbpagesearchc           
        #    [        U 5      nU(       d  [        U R                  S5      SS9$ [        U[        5      (       a  [	        U5      n[        [        U[        5      (       a  UR                  S5      OUS   =(       d    S5      R                  5       nUS:w  a  [        U R                  S5      SS9$ [        R                  " XSUS	9n[        R                  " U5      n[        R                  " S
U UUS   US   UUS.5      $ 7f)Nlogin/  urlstatus_coder0    r:   	dashboardr/   )rJ   per_pagerK   zgestion-usuarios.htmlusers
pagination)rH   userrU   rV   rK   stats)r   r   url_for
isinstancedictr(   getlowerr   get_users_for_managementr   obtener_estadisticas_agregadasr   TemplateResponse)rH   rI   rJ   rK   mer0   
users_datarX   s           r,   rD   rD   "   s      
g	BGOOG$<#NN"d"X*R"6"6vBvJM2NTTVDwGOOK$@cRR33BBW]^J <<R@E%%($\2	

 
s   DDz/api/estadisticas-jugadoresapi_estadisticas_jugadores)rF   c                 $  #    [        U 5      nU(       d
  [        SSS9e[        [        U[        5      (       a  UR                  S5      OUS   =(       d    S5      R                  5       nUS:w  a
  [        SSS9e[        R                  " U5      $ 7f)z5API endpoint to get aggregated player statistics JSON  zAcceso denegadorQ   detailr0   rR   r:   )	r   r   r(   rZ   r[   r\   r]   r   r_   )rH   rI   ra   r0   s       r,   rc   rc   C   sz      
g	B4EFF*R"6"6vBvJM2NTTVDw4EFF;;B??s   BBz/admin/users/deleteadmin_delete_user.user_idnext_urlc                 @  #    [        U 5      nU(       d
  [        SSS9$ [        R                  " U5      (       d
  [	        SSS9e[        R
                  " X15      nU(       d
  [	        SSS9e[        US	   5      [        UR                  5      :X  a
  [	        S
SS9e [        R                  " X15        [        R                  " X15        [        R                  " X15        [        R                  " X15        U(       a
  [        USS9$ [        SSS9$ ! [         a     Nif = f7f)N/loginrN   rO   re   z&Solo un admin puede eliminar usuarios.rf     Usuario no encontrado.id  $No puedes eliminar tu propia cuenta.z	/reservas)r   r   r   is_adminr   get_user_by_idr9   ro   
notif_cruddelete_notifications_by_user	Exceptionres_cruddelete_reservations_by_userdelete_student_entries_by_userdelete_user)rH   ri   rj   rI   ra   targets         r,   rh   rh   P   s      
g	BH#>>b!!4\]]%%b2F4LMM
2d8}FII&4Z[[//<
 ((5++B8 "&H#>>==  s+   BDD 1AD
DDDDz
/api/users	api_usersrolesr0   c                   #    [        U 5      nU(       d
  [        SSS9$ / nU(       aT  UR                  S5       Vs/ s H7  ofR                  5       (       d  M  UR                  5       R	                  5       PM9     nnO&U(       a  UR                  5       R	                  5       /n[
        R                  " X5S9nU Vs/ s H  n[
        R                  " U5      PM     sn$ s  snf s  snf 7f)Nrl   rN   rO   ,)r}   )r   r   splitstripr]   r   get_all_usersuser_to_dict)	rH   r}   r0   rI   rW   
roles_listrrU   us	            r,   r|   r|   v   s       DH#>>J16S1AO1AAWWY'aggioo'1A
O
	jjl((*+
##B9E/45u!I""1%u55 P
 6s#   9C'C"C9AC': C"C'z/api/users/{user_id}/roleapi_users_set_rolepayloadc                 
  #    [        U5        [        R                  " X05      nU(       d
  [        SSS9eUR                  =(       d    SR                  5       R                  5       nU[        ;  a
  [        SSS9e[        UR                  5      R                  5       nUS:H  nU=(       a    US:g  nXe:X  a  SXS	.$ U(       a&  [        R                  " U5      n	U	S
::  a
  [        SSS9e[        R                  " X0U5        SXS	.$ 7f)Nrm   Usuario no encontradorf   rR   rp      Rol inválidor:   T)okri   r0   rG   u"   No puedes quitar al último admin.)r   r   rs   r   r0   r   r]   ALLOWED_ROLESr(   count_adminsset_user_role)
ri   r   rH   rI   r{   new_rolecurrent_role	was_adminis_demoting_adminadmin_counts
             r,   r   r      s     '%%b2F4KLL"))+113H}$ODDv{{#))+L'I!9h'&9wAA ,,R0! S9]^^B27==s   DD)response_modelc                   #    [        U 5        UR                  S5      =(       d    SR                  5       R                  5       nU[        ;  a
  [        SSS9e[        R                  " X15      nU(       d
  [        SSS9e[        R                  " X1U5        [        R                  " X15      nS[        R                  " U5      S	.$ 7f)
Nr0   rR   rp   r   rf   rm   r   T)r   rW   )
r   r\   r   r]   r   r   r   rs   r   r   )rH   ri   r   rI   target_roler{   updateds          r,   api_users_update_roler      s     ';;v&,"335;;=K-'ODD%%b2F4KLLB5&&r3G	 6 6w ?@@s   CCz/api/users/{user_id}/categoryapi_users_set_categoryc                 L  #    [        U5        [        R                  " X05      nU(       d
  [        SSS9eUR                  =(       d    SR                  5       R                  5       nU(       a  U[        ;  a
  [        SSS9e[        R                  " X0U(       a  UOS S9  SXS	.$ 7f)
Nrm   r   rf   rR   rp   u   Categoría no válida)r"   T)r   ri   r"   )	r   r   rs   r   r"   r   r]   ALLOWED_CATEGORIESupdate_user_sports)ri   r   rH   rI   r{   cats         r,   r   r      s     '%%b2F4KLL!r
(
(
*
0
0
2C
s,,4KLL  cstL7<<s   B"B$z/api/users/{user_id}/matriculac                   #    [        U 5        [        UR                  SS5      5      R                  5       nUS;  a
  [	        SSS9eSU;   nSU;   nU(       d  U(       d
  [	        SS	S9eU(       a3   [        [        [        US   5      R                  S
S5      5      S5      nO [        US   5      n[        US-  S5      nUR                  [        5      R                  [        R                  U:H  5      R                  5       n	U	(       d<  [        USS9n	UR                  U	5        UR!                  5         UR#                  U	5        [        U	R$                  =(       d    S5      n
US:X  a  UnO[        X-   S5      nXl        UR!                  5         SU[        [        US-  5      5      S.$ ! [         a    [	        SSS9ef = f! [         a    [	        SSS9ef = f7f)Nr8   set>   r7   r   rp   zmode debe ser 'set' o 'add'.rf   matricula_eurr6   zFalta matricula_eur.r   .   zmatricula_eur invalido.u   matricula_cents inválido.g      Y@g        )ri   r   Td   )r   r   r6   )r   r(   r\   r]   r   roundfloatreplacerv   r9   queryr   filterri   firstr7   commitrefreshr   )rH   ri   r   rI   r8   has_eur	has_centseuroscentsfinancecurrentnew_vals               r,   api_users_update_matricular      s    'w{{65)*002D>!4RSS(G!W,I94JKK	S%GO$< = E Ec3 OPRSTE	V 123E eemQ'hh{#**;+>+>'+IJPPRGgSA
w
		


7G))0S1Gu}+#IIK  uWs]34 3  	SC8QRR	S
  	VC8TUU	Vs7   A.G11F- "G$G 2C;G-GGGGz/api/users/{user_id}c                   #    [        U 5        [        R                  " X!5      nU(       d
  [        SSS9e[	        U 5      n[        US   5      [        UR                  5      :X  a
  [        SSS9e [        R                  " X!5        [        R                  " X!5        [        R                  " X!5        [        R                  " X!5        SSS	.$ ! [         a     NSf = f7f)
Nrm   rn   rf   ro   rp   rq   TzUsuario eliminado correctamenter   message)r   r   rs   r   r   r9   ro   rt   ru   rv   rw   rx   ry   rz   )rH   ri   rI   r{   ra   s        r,   api_users_deleter      s     ' %%b2F4LMM	g	B
2d8}FII&5[\	\//< ((5++B8"&#DEE  s+   A-C0C AC
CCCCz/api/users/{user_id}/mvp90api_users_toggle_mvp90)r   rF   c                 `  #    [        U 5        [        R                  " X15      nU(       d
  [        SSS9e[	        UR                  SS5      5      n[        R                  " X1U5      nU(       d
  [        SSS9e[        R                  " X15      nUb  [	        UR                  5      OUnSUUS	.$ 7f)
u|   
Activa o desactiva el flag MVP-90 para un usuario.
Solo accesible para admin (mismo patrón que el resto de /api/users/*).
rm   r   rf   is_mvp90Fi  zNo se pudo actualizar MVP-90T)r   ri   r   )r   r   rs   r   boolr\   set_user_mvp90r   )	rH   ri   r   rI   r{   valuer   	refreshedr   s	            r,   r   r     s      '%%b2F4KLLZ/0E &&rE:G4RSS ((5I+4+@tI&&'eH  s   B,B.z/api/users/{user_id}/passwordapi_users_reset_passwordc                 :  #    [        U 5        [        R                  " X15      nU(       d
  [        SSS9e[	        UR                  S5      =(       d    S5      R                  5       n[        U5      S:  a
  [        SSS9e[        R                  " X1U5        S	S
S.$ 7f)Nrm   r   rf   passwordrR      rp   u/   La contraseña debe tener al menos 6 caracteresTu%   Contraseña actualizada correctamenter   )	r   r   rs   r   r(   r\   r   lenset_user_password)rH   ri   r   rI   r{   new_passwords         r,   r   r   *  s     '%%b2F4KLLw{{:.4"5;;=L
<14eff\:#JKKs   BB)Afastapir   r   r   r   r   r   r	   r
   fastapi.responsesr   r   r   sqlalchemy.ormr   typingr   r   r   r   jsonpydanticr   r   app.databaser   app.models.baser   app.auth.depsr   r   r   
app.modelsr   r   rt   r   rw   r   app.models.userr   routerr    r.   r2   r   r   r\   r9   r(   rD   rc   postrh   r|   r   patchr[   r   r   r   deleter   r   r   r#   r+   r,   <module>r      s%   W W W J J " , ,  % " " C C r r '	#Y #  y   /  CUV &/aA!$K	  SM	 W@ )0LMELV_ 
@g 
@7 
@ N
@ ")<= 9:&/	">">"> Dj"> 		"> >">J LKH !;+&/	66C=6 3-6 		6 I6( (/CD`ghn`o >c >J > >V] > E>2 )$?AEc\`ad\eu|  ~D  vE A A3 AUY Akr A @A ,3KLhopvhw =# = =QX =^e = M= .tDUYZ]U^nuv|n} -g - -d -dk - E-^ %d;IPQW FG Fc Fw F <F4 )$E]^QUVYQZjqrxjy ' C $ `g  _4 ,THbcSWX[S\lstzl{ LG Lc LD Lbi L dLr+   