
    ;i!              
       `   S r SSK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  SSKJr  SSKJrJrJr  SS	KJr  \" S
S/S9r\R/                  S5      \" \5      \" \5      4S\S\	4S jj5       r\R/                  S5      \" SSS9\" SSS9\" \5      \" \5      4S\\   S\S\S\	4S jj5       r\R/                  S5      \" SSS9\" \5      \" \5      4S\S\S\S\	4S jj5       r\R/                  S5      \" \5      \" \5      4S \S\S\	4S! jj5       r\R=                  S"5      \" \5      \" \5      4S#\S\S\	4S$ jj5       r\RA                  S5      \" \5      \" \5      4S \S#\S\S\	4S% jj5       r!\RE                  S5      \" SS&S9\" \5      \" \5      4S \S'\S\S\	4S( jj5       r#g))u;   Document 20 – Community Education Support Program (CESP).    )	APIRouterDependsQuerystatus)JSONResponse)Session)Optional)get_current_active_user)get_db)	UserLoginStoreCespDocumentUpdateCespDocument)	CespClassz/cespu:   CESP (Document 20 – Community Education Support Program))prefixtagsz/period_typessession_userdbc                      [        U5      R                  5       n[        [        R                  SSUS.S9$ ! [
         a/  n[        [        R                  S[        U5      / S.S9s SnA$ SnAff = f)u.   Lista tipos de período (ej. Anual) para CESP.   OKr   messagedatastatus_codecontent  N)r   get_period_typesr   r   HTTP_200_OK	ExceptionHTTP_500_INTERNAL_SERVER_ERRORstr)r   r   r   es       IC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\routes\cesp.pylist_period_typesr%      so    

}--/**"tTB
 	
  
=="s1vrB
 	

s   47 
A0$A+%A0+A0 NzFiltrar por estudiante)descriptionFzIncluir eliminados (soft)
student_idinclude_deletedc           	          [        U5      R                  XS9nUR                  S5      S:X  a,  [        [        R                  SUR                  SS5      / S.S9$ [        [        R
                  S	S
UR                  S/ 5      S.S9$ ! [         a/  n[        [        R                  S[        U5      / S.S9s SnA$ SnAff = f)z4Lista documentos CESP; opcionalmente por student_id.)r(   r)   r   errorr   r   Errorr   r   r   r   r   N)r   getr   r   r!   r   r    r"   )r(   r)   r   r   resultr#   s         r$   	list_cespr/   &   s    
2""j"Z::h7*"AA#&6::i3Q[]^  **"tVZZPR=ST
 	
  
=="s1vrB
 	

s$   AB +B 
C $B;5C ;C z/by_student/{student_id}Tu   Solo el más recientelatest_onlyc                     [        U5      R                  XS9nUR                  S5      S:X  a,  [        [        R
                  SUR                  SS5      SS.S	9$ [        [        R                  S
SUR                  S5      S.S	9$ ! [         a/  n[        [        R
                  S[        U5      SS.S	9s SnA$ SnAff = f)uS   Obtiene CESP(s) por student_id. Si latest_only=True devuelve solo el más reciente.)r(   r0   r   r+   r   r   r,   Nr   r   r   r   r   )	r   get_by_student_idr-   r   r   r!   r   r    r"   )r(   r0   r   r   r.   r#   s         r$   get_cesp_by_studentr3   @   s    
200J0`::h7*"AA#&6::i3Q[_`  **"tVZZ=OP
 	
  
=="s1vtD
 	

s$   AB *B 
B?$B:4B?:B?z/{id}idc                     [        U5      R                  U 5      nUR                  S5      S:X  a,  [        [        R
                  SUR                  SS5      SS.S9$ [        [        R                  S	S
UR                  S5      S.S9$ ! [         a/  n[        [        R                  S[        U5      SS.S9s SnA$ SnAff = f)zWObtiene un CESP por id (con guardians, participant_professional, support_team_members).r   r+     r   No encontradoNr   r   r   r   r   r   )
r   	get_by_idr-   r   r   HTTP_404_NOT_FOUNDr   r    r!   r"   )r4   r   r   r.   r#   s        r$   get_cespr:   Z   s    
2((,::h7*"55#&6::i3Ycgh  **"tVZZ=OP
 	
  
=="s1vtD
 	

s$   AB *B 
C$B<6C<Cz/storer   c           	          U R                  5       nUR                  S5      b6  U R                  =(       d    /  Vs/ s H  oDR                  5       PM     snUS'   UR                  S5      b0  U R                  (       a  U R                  R                  5       OSUS'   UR                  S5      b6  U R                  =(       d    /  Vs/ s H  oUR                  5       PM     snUS'   [        U5      R                  U5      nUR                  S5      S:X  a,  [        [        R                  SUR                  SS	5      SS
.S9$ [        [        R                  SUR                  SS5      UR                  S5      UR                  S5      S.S9$ s  snf s  snf ! [         a/  n[        [        R                  S[        U5      SS
.S9s SnA$ SnAff = f)zeCrea un documento CESP (opcionalmente con guardians, participant_professional, support_team_members).	guardiansNparticipant_professionalsupport_team_membersr   r+   i  r   zError al crearr   r      Creador   r4   )r   r   r   r4   r   )
model_dumpr-   r<   r=   r>   r   storer   r   HTTP_400_BAD_REQUESTHTTP_201_CREATEDr    r!   r"   )r   r   r   payloadgmr.   r#   s           r$   
store_cesprH   s   s   
//#;;{#/=A^^=Qr=Q#S=QqLLN=Q#SGK ;;12>`d`}`}$2O2O2Z2Z2\  DHG./;;-.:HLHaHaHgegHg.iHg!||~Hg.iG*+2$$W-::h7*"77#&6::iIY3Zdhi  //"vzz)X/NX^XbXbciXjrxr|r|  ~B  sC  D
 	
 $T /j  
=="s1vtD
 	

sC   9F F
A1F FA F ?A
F 

F 
G$GGGc                 V    UR                  SS9nSU;   a<  US   b6  UR                  =(       d    /  Vs/ s H  oUR                  5       PM     snUS'   SU;   a6  US   b0  UR                  (       a  UR                  R                  5       OSUS'   SU;   a<  US   b6  UR                  =(       d    /  Vs/ s H  ofR                  5       PM     snUS'   [	        U5      R                  X5      nUR                  S5      S:X  a+  [        [        R                  S	UR                  S
S5      S.S9$ [        [        R                  SUR                  S
S5      UR                  S5      S.S9$ s  snf s  snf ! [         a.  n[        [        R                  S[        U5      S.S9s SnA$ SnAff = f)uZ   Actualiza un CESP por id (guardians/participant/support_team se reemplazan si se envían).T)exclude_unsetr<   Nr=   r>   r   r+   r6   r   r7   r   r   r   r   Actualizador4   )r   r   r4   r   )rA   r<   r=   r>   r   updater-   r   r   r9   r   r    r!   r"   )	r4   r   r   r   rE   rF   rG   r.   r#   s	            r$   update_cesprN      s   
///5'!gk&:&F=A^^=Qr=Q#S=QqLLN=Q#SGK %0W=W5X5d`d`}`}$2O2O2Z2Z2\  DHG./!W,9O1P1\HLHaHaHgegHg.iHg!||~Hg.iG*+2%%b2::h7*"55#&6::i3YZ  **"vzz)]/S[a[e[efj[kl
 	
 $T /j  
=="s1v6
 	

sB   2E0 E&A%E0 2E+AE0 +:E0 &
E0 0
F(:#F#F(#F(z!True = soft delete (deleted_date)softc                     [        U5      R                  XS9nUR                  S5      S:X  a+  [        [        R
                  SUR                  SS5      S.S9$ [        [        R                  S	UR                  SS
5      S.S9$ ! [         a.  n[        [        R                  S[        U5      S.S9s SnA$ SnAff = f)u(   Elimina un CESP por id (soft o físico).)rO   r   r+   r6   r   r7   rK   r   r   	Eliminador   N)
r   deleter-   r   r   r9   r   r    r!   r"   )r4   rO   r   r   r.   r#   s         r$   delete_cesprS      s    
2%%b%4::h7*"55#&6::i3YZ  **"vzz)[/QR
 	
  
=="s1v6
 	

s$   AB *B 
B=#B82B=8B=)$__doc__fastapir   r   r   r   fastapi.responsesr   sqlalchemy.ormr   typingr	   app.backend.auth.auth_userr
   app.backend.db.databaser   app.backend.schemasr   r   r   app.backend.classes.cesp_classr   cespr-   r%   intboolr/   r3   r:   postrH   putrN   rR   rS        r$   <module>rd      s   A 5 5 * "  > * P P 4
F	G /%&=>&/


 
$ " %d8P Q!%5PQ%&=>&/	


 
 		
 
2 
$% d0GH%&=>&/	


 
 		
 &
2 ' &&=>&/


 	
 
0 8 &&=>&/



 	
 
> ' &&=>&/	



 
 		
 
@ W t)LM%&=>&/	



 
 		
 
rc   