
    &6j6                        S SK Jr  S SKJrJrJrJrJrJr  S SK	J
r
  S SKJr  S SKJr  S SKJrJrJrJr  S SKJrJr  S SKJr  S S	KJr  S S
KJr  S\S\\   4S jrS4S\S\\   S\\   4S jjrS4S\4S jjr \" SS/S9r!\!RE                  S5      \" \5      \" \5      4S\S\S\4S jj5       r#\!RE                  S5      \" \5      \" \5      \" SS94S\S\S\\$   4S jj5       r%\!RM                  S5      \" SSS9\" SS S9\" \5      \" \5      4S!\\   S"\\   S\S\4S# jj5       r'\!RE                  S$5      \" \5      \" \5      \" SS94S\S\S\\$   4S% jj5       r(\!RE                  S&5      \" \5      \" \5      4S'\S\S\4S( jj5       r)\!RM                  S)5      \" SS*S9\" \5      \" \5      4S"\S!\\   S\S\4S+ jj5       r*\!RM                  S,5      \" SS-S9\" \5      \" \5      4S.\S!\\   S\S\4S/ jj5       r+\!RY                  S05      \" SS-S9\" \5      \" \5      4S.\S!\\   S\S\4S1 jj5       r,\!R[                  S25      \" SS-S9\" \5      \" \5      4S.\S'\S!\\   S\S\4
S3 jj5       r.g)5    )Optional)	APIRouterBodyDependsHTTPExceptionQuerystatus)JSONResponse)get_db)Session)ProfessionalListStoreProfessionalUpdateProfessional	UserLogin)ProfessionalClasssession_restricted_user_id)SchoolClass)get_current_active_user)resolve_period_year_for_sessiondbreturnc                 4   U(       a  [        USS5      OSnU(       a  [        USS5      OSnUch  U(       aa  [        U 5      R                  SUS9n[        U[        5      (       a3  [        U5      S:  a$  US   R                  S5      nUb  [        U5      OSnU$ )u_   Colegio de la sesión o, si falta, primer colegio del cliente (igual que POST /professionals/).customer_idN	school_idr   )pager   id)getattrr   get_all
isinstancelistlengetint)r   session_userr   r   schools_listsids         RC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\routes\professionals.py _session_school_id_with_fallbackr(      s    @L',t<RVK<Hk48dI["2..A;.OlD))c,.?!.Cq/%%d+C$'OCI    Nrequested_school_idc                 t    Ub   [        U5      nUS:  a  U$  [        X5      $ ! [        [        4 a     Nf = f)Nr   )r#   	TypeError
ValueErrorr(   )r   r$   r*   r&   s       r'   "_school_id_from_request_or_sessionr.      sO    &	)*CQw
  ,B== :& 		s   $ 77target_user_idc                     [        XU5      nUc  gUS:  a  [        [        R                  SS9eUS:  a  X$:w  a  [        [        R                  SS9egg)zRSi no es rol institucional permitido, solo puede acceder a su propio ``users.id``.Nr   z-No tiene un registro de profesional asociado.status_codedetailz7No puede ver ni modificar datos de otros profesionales.)r   r   r	   HTTP_403_FORBIDDEN)r   r$   r/   explicit_period_yearscopes        r'   _ensure_professional_self_onlyr7   '   se    &r9MNE}qy11B
 	
 qy^,11L
 	
 -yr)   z/professionalsProfessionals)prefixtags/professional_listr$   c                 x   U R                   c  SOU R                   n[        X!U R                  5      n[        X!U R                  5      n[        U5      R                  UU R                  U R                  U R                  UU R                  US S9nU R                   c  SOSn[        [        R                  SUUS.S9$ )Nr   )r   items_per_pageidentification_numbernamesr   period_yearonly_professional_idsession_rol_idz2Complete professionals list retrieved successfullyz$Professionals retrieved successfully   r	   messagedatar2   content)r   r   rA   r.   r   r   r   per_pager?   r@   r
   r	   HTTP_200_OK)r<   r$   r   
page_valueonly_uidr   resultrF   s           r'   indexrO   <   s    ',,4:K:P:PJ)"<M<Y<YZH22EVE`E`aIr"**(11/EE%%%11% + 	F GXF\F\FdB  kQG&&
 r)   z/list)defaultbodyc                    U=(       d    0 nUR                  S5      n[        XU5      n[        XR                  S5      5      n[        XU5      n[	        U5      R                  SUUUS S9n[        [        R                  SSUS.S9$ )	Nr   rA   r   r   r   rA   rB   rC   rD   )Professionals list retrieved successfullyrE   rH   )	r"   r.   r   r   r   r   r
   r	   rK   )r$   r   rQ   r*   r   pyrM   rN   s           r'   list_professionalsrV   Y   s     :2D((;/22EXYI	(xx7N	OB)"B?Hr"**% + F &&B
 r)   u   Filtrar por año (ej. 2026))descriptionzFiltrar por colegiorA   r   c                    [        X2U5      nUc  [        [        R                  SS/ S.S9$ [	        X 5      n[        X2U5      n[        U5      R                  SUUUS S9n[        U[        5      (       aA  UR                  S5      S:X  a,  [        [        R                  S	UR                  S
S5      S S.S9$ [        [        R                  SSUS.S9$ )NrD   rT   rE   rH   r   rS   r	   error  rF   Error)r.   r
   r	   rK   r   r   r   r   r   dictr"   HTTP_404_NOT_FOUND)rA   r   r$   r   rU   rM   rN   s          r'   get_all_listr^   u   s     32YOI**F
 	
 
)	CB)"B?Hr"**% + F &$FJJx$8G$C11!::i9
 	
 &&B
 r)   z/totalsc                 
   U=(       d    0 nU (       a  U R                   OS n[        XUR                  S5      5      nU (       a  U R                  OS n[	        XR                  S5      5      n[        XU5      n[        U5      R                  UUUUUS9n[        U[        5      (       aA  UR                  S5      S:X  a,  [        [        R                  SUR                  SS5      S S	.S
9$ [        [        R                  SSUS	.S
9$ )Nr   rA   )r   r   rol_idrB   rA   r	   rY     rF   zError getting totalsrE   rH   rD   z+Professionals totals retrieved successfully)r   r.   r"   r`   r   r   r   
get_totalsr   r\   r
   r	   HTTP_500_INTERNAL_SERVER_ERRORrK   )	r$   r   rQ   r   r   r`   rU   rM   rN   s	            r'   totalsrd      s     :2D.:,**K22TXXkEZ[I$0\  dF	(xx7N	OB)"B?Hr"--% . F &$FJJx$8G$C==!::i1GH
 	
 &&D
 r)   z/storeprofessionalc                    [        X!U R                  5      b  [        [        R                  SS9eU R                  5       n[        X!U R                  5      n[        U5      R                  X4S9n[        U[
        5      (       aA  UR                  S5      S:X  a,  [        [        R                  SUR                  SS5      S S	.S
9$ [        [        R                  SSUS	.S
9$ )Nz@Solo coordinadores o administradores pueden crear profesionales.r1   )r   r	   rY   ra   rF   zError creating professionalrE   rH      z*Professional and user created successfully)r   rA   r   r	   r4   r\   r.   r   r   storer   r"   r
   rc   HTTP_201_CREATED)re   r$   r   professional_inputsr   rN   s         r'   rh   rh      s    !"L4L4LMY11U
 	
 '++-22\E[E[\Ir"(()<(RF&$FJJx$8G$C==!::i1NO
 	
 ++C
 r)   z/coordinators/{school_id}u   Año período escolarc           	      Z   [        X!5      n[        U5      R                  XS9n[        U[        5      (       aA  UR                  S5      S:X  a,  [        [        R                  SUR                  SS5      / S.S9$ [        [        R                  S	S
[        U[        5      (       a  UO/ S.S9$ )zqLista de coordinadores del colegio: filtra por school_id y rol 'Coordinador' (el rol_id es distinto por escuela).)rA   r	   rY   ra   rF   zError al listar coordinadoresrE   rH   rD   zCoordinadores del colegio)r   r   get_coordinators_by_schoolr   r\   r"   r
   r	   rc   rK   r    )r   rA   r$   r   rU   rN   s         r'   rl   rl      s     
)	CBr"==i=XF&$FJJx$8G$C==!::i1PQ
 	
 &&2(66FB
 r)   z
/edit/{id}u"   Año período escolar (users_rols)r   c                    [        X!5      n[        X2X5        [        X2S 5      n[        U5      R	                  XUS9n[        U[        5      (       ao  UR	                  S5      (       d  UR	                  S5      S:X  aD  [        [        R                  SUR	                  S5      =(       d    UR	                  SS5      S S.S9$ [        [        R                  S	S
US.S9$ )Nr   rA   rY   r	   rZ   rF   Professional not foundrE   rH   rD   z#Professional retrieved successfully)r   r7   r.   r   r"   r   r\   r
   r	   r]   rK   r   rA   r$   r   rU   r&   rN   s          r'   editrq   	  s     
)	CB"2R<
,Rt
DCr"&&rb&IF&$VZZ%8%8FJJx<PT[<[11!::g.a&**YH`2a
 	
 &&<
 r)   z/delete/{id}c                 ^   [        X!5      n[        X2X5        [        X2S 5      n[        U5      R	                  XUS9n[        U[        5      (       aA  UR                  S5      S:X  a,  [        [        R                  SUR                  SS5      S S.S9$ [        [        R                  S	S
US.S9$ )Nrn   r	   rY   rZ   rF   ro   rE   rH   rD   z!Professional deleted successfully)r   r7   r.   r   deleter   r\   r"   r
   r	   r]   rK   rp   s          r'   rs   rs   (  s     
)	CB"2R<
,Rt
DCr"))")LF&$FJJx$8G$C11!::i1IJ
 	
 &&:
 r)   z/update/{id}c                    [        UUb  UOUR                  5      n[        XCX5        UR                  SS9nSU;  a  [	        XCS 5      US'   [	        XCUR                  S5      5      n[        U5      R                  XXuS9n[        U[        5      (       aA  UR                  S5      S:X  a,  [        [        R                  SUR                  SS	5      S S
.S9$ [        [        R                  SSUS
.S9$ )NT)exclude_unsetr   rn   r	   rY   ra   rF   zError updating professionalrE   rH   rD   z!Professional updated successfully)r   rA   r7   r\   r.   r"   r   updater   r
   r	   rc   rK   )	r   re   rA   r$   r   rU   rj   r&   rN   s	            r'   rv   rv   G  s    
)".L4L4L
B #2R<&++$+? --+Mb`d+eK(
,R?R?V?VWb?c
dCr"))"S)aF&$FJJx$8G$C==!::i1NO
 	
 &&:
 r)   )N)/typingr   fastapir   r   r   r   r   r	   fastapi.responsesr
   app.backend.db.databaser   sqlalchemy.ormr   app.backend.schemasr   r   r   r   &app.backend.classes.professional_classr   r    app.backend.classes.school_classr   app.backend.auth.auth_userr   "app.backend.utils.users_rol_periodr   r#   r(   r.   r7   professionalspostrO   r\   rV   r"   r^   rd   rh   rl   rq   rs   putrv    r)   r'   <module>r      s    J J * * " b b 9 > N	 	8C= 	>7 >W_`cWd >pxy|p} >
S 
  
	
 CIPQhIi  zA  BH  zI - Y ov  8 G%&=>&/- 4. 6 7!&t9V!W$T7LM%&=>&/	-#-}- - 		- -^ I%&=>&/-$$$ 4.$ $L HELMdEeu|  ~D  vE )  kr  > ./ "'t9P!Q%&=>&/	#  		 08 <  "'t9]!^%&=>&/	#  		 !< n% "'t9]!^%&=>&/	#  		 &< >" "'t9]!^%&=>&/&&$& #& 	&
 	& #&r)   