
    Bj(5                        d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZmZmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ dedee   fdZd4dedee   dee   fdZd4defdZ  eddg      Z!e!jE                  d       ee       ee      fdededefd       Z#e!jE                  d       ee       ee       ed      fdededee$   fd       Z%e!jM                  d       edd       edd        ee       ee      fd!ee   d"ee   dedefd#       Z'e!jE                  d$       ee       ee       ed      fdededee$   fd%       Z(e!jE                  d&       ee       ee      fd'ededefd(       Z)e!jM                  d)       edd*       ee       ee      fd"ed!ee   dedefd+       Z*e!jM                  d,       edd-       ee       ee      fd.ed!ee   dedefd/       Z+e!jY                  d0       edd-       ee       ee      fd.ed!ee   dedefd1       Z,e!j[                  d2       edd-       ee       ee      fd.ed'ed!ee   dedef
d3       Z.y)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                    |rt        |dd      nd}|rt        |dd      nd}|_|r]t        |       j                  d|      }t        |t              r1t        |      dkD  r#|d   j                  d      }|t        |      nd}|S )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         I/var/www/pie360backend.cl/public_html/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                 p    |	 t        |      }|dkD  r|S 	 t        | |      S # t        t        f$ r Y w xY w)Nr   )r#   	TypeError
ValueErrorr(   )r   r$   r*   r&   s       r'   "_school_id_from_request_or_sessionr.      sQ    &	)*CQw
  ,B== :& 		s   # 55target_user_idc                     t        | ||      }|y|dk  rt        t        j                  d      |dkD  r!||k7  rt        t        j                  d      yy)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   '   si    &r<9MNE}qy11B
 	
 qy^u,11L
 	
 -yr)   z/professionalsProfessionals)prefixtags/professional_listr$   c           
         | j                   dn| j                   }t        ||| j                        }t        ||| j                        }t        |      j                  || j                  | j                  | j                  || j                  |d       }| j                   dnd}t        t        j                  d||d      S )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)"l<M<Y<YZH22|EVE`E`aIr"**(11/EE%%%11% + 	F GXF\F\FdB  kQG&&
 r)   z/list)defaultbodyc                    |xs i }|j                  d      }t        || |      }t        | |j                  d            }t        || |      }t	        |      j                  d|||d       }t        t        j                  dd|d      S )	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((;/22|EXYI	(txx7N	OB)"lB?Hr"**% + F &&B
 r)   u   Filtrar por año (ej. 2026))descriptionzFiltrar por colegiorA   r   c                    t        |||      }|t        t        j                  ddg d      S t	        ||       }t        |||      }t        |      j                  d|||d       }t        |t              rC|j                  d      dk(  r/t        t        j                  d	|j                  d
d      d d      S t        t        j                  dd|d      S )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     32|YOI**F
 	
 
){	CB)"lB?Hr"**% + F &$FJJx$8G$C11!::i9
 	
 &&B
 r)   z/totalsc                    |xs i }| r| j                   nd }t        || |j                  d            }| r| j                  nd }t	        | |j                  d            }t        || |      }t        |      j                  |||||      }t        |t              rC|j                  d      dk(  r/t        t        j                  d|j                  dd      d d	
      S t        t        j                  dd|d	
      S )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22|TXXkEZ[I$0\  dF	(txx7N	OB)"lB?Hr"--% . F &$FJJx$8G$C==!::i1GH
 	
 &&D
 r)   z/storeprofessionalc                    t        ||| j                        t        t        j                  d      | j                         }t        ||| j                        }t        |      j                  ||      }t        |t
              rC|j                  d      dk(  r/t        t        j                  d|j                  dd      d d	
      S t        t        j                  dd|d	
      S )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    !"lL4L4L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   t        ||      }t        |      j                  | |      }t        |t              rC|j                  d      dk(  r/t        t        j                  d|j                  dd      g d      S t        t        j                  d	d
t        |t              r|ng d      S )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"==iUW=XF&$FJJx$8G$C==!::i1PQ
 	
 &&2(6FB
 r)   z
/edit/{id}u"   Año período escolar (users_rols)r   c                    t        ||      }t        ||| |       t        ||d       }t        |      j	                  | ||      }t        |t              rg|j	                  d      s|j	                  d      dk(  rBt        t        j                  d|j	                  d      xs |j	                  dd      d d      S t        t        j                  d	d
|d      S )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"2|R<
,Rt
DCr"&&rSb&IF&$VZZ%8FJJx<PT[<[11!::g.a&**YH`2a
 	
 &&<
 r)   z/delete/{id}c                 n   t        ||      }t        ||| |       t        ||d       }t        |      j	                  | ||      }t        |t              rC|j                  d      dk(  r/t        t        j                  d|j                  dd      d d      S t        t        j                  d	d
|d      S )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"2|R<
,Rt
DCr"))")LF&$FJJx$8G$C11!::i1IJ
 	
 &&:
 r)   z/update/{id}c                    t        |||n|j                        }t        ||| |       |j                  d      }d|vrt	        ||d       |d<   t	        |||j                  d            }t        |      j                  | |||      }t        |t              rC|j                  d      dk(  r/t        t        j                  d|j                  dd	      d d
      S t        t        j                  dd|d
      S )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 #2|R<&++$+? --+MbR^`d+eK(
,R?R?V?VWb?c
dCr"))".AS^`)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)   