
    U+i               
       b   d Z ddl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 ddlmZ ddlmZmZmZ dd	lmZ  ed
dg      Zej/                  d       ee       ee      fdede	fd       Zej/                  d       edd       edd       ee       ee      fdee   dedede	fd       Zej/                  d       edd       ee       ee      fdededede	fd       Zej/                  d       ee       ee      fd edede	fd!       Zej=                  d"       ee       ee      fd#edede	fd$       ZejA                  d       ee       ee      fd ed#edede	fd%       Z!ejE                  d       edd&       ee       ee      fd ed'edede	fd(       Z#y))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                     	 t        |      j                         }t        t        j                  dd|d      S # t
        $ r2}t        t        j                  dt        |      g d      cY d}~S d}~ww xY w)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       @/var/www/pie360backend.cl/public_html/app/backend/routes/cesp.pylist_period_typesr%      so    

}--/**"tTB
 	
  
=="s1vrB
 	

s   7: 	A5'A0*A50A5 NzFiltrar por estudiante)descriptionFzIncluir eliminados (soft)
student_idinclude_deletedc           	         	 t        |      j                  | |      }|j                  d      dk(  r/t        t        j                  d|j                  dd      g d      S t        t        j
                  d	d
|j                  dg       d      S # t        $ r2}t        t        j                  dt        |      g d      cY d}~S d}~ww xY w)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'C CCz/by_student/{student_id}Tu   Solo el más recientelatest_onlyc                    	 t        |      j                  | |      }|j                  d      dk(  r/t        t        j
                  d|j                  dd      dd	      S t        t        j                  d
d|j                  d      d	      S # t        $ r2}t        t        j
                  dt        |      dd	      cY d}~S d}~ww xY w)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0JT_0`::h7*"AA#&6::i3Q[_`  **"tVZZ=OP
 	
  
=="s1vtD
 	

s$   AB !-B 	C
'C?C
C
z/{id}idc                    	 t        |      j                  |       }|j                  d      dk(  r/t        t        j
                  d|j                  dd      dd      S t        t        j                  d	d
|j                  d      d      S # t        $ r2}t        t        j                  dt        |      dd      cY d}~S d}~ww xY w)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'C=CCz/storer   c           	         	 | j                         }|j                  d      /| j                  xs g D cg c]  }|j                          c}|d<   |j                  d      +| j                  r| j                  j                         nd|d<   |j                  d      /| j                  xs g D cg c]  }|j                          c}|d<   t        |      j                  |      }|j                  d      dk(  r/t        t        j                  d|j                  dd	      dd
      S t        t        j                  d|j                  dd      |j                  d      |j                  d      d      S c c}w c c}w # t        $ r2}t        t        j                  dt        |      dd
      cY d}~S d}~ww xY w)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#SqALLN#SGK ;;12>`d`}`}$2O2O2Z2Z2\  DHG./;;-.:HLHaHaHgeg.i!q||~.iG*+2$$W-::h7*"77#&6::iIY3Zdhi  //"vzz)X/NX^XbXbciXjrxr|r|  ~B  sC  D
 	
 $T /j  
=="s1vtD
 	

sC   3F E9A%F 1E>A"F +AF 9
F 	F>'F93F>9F>c                 4   	 |j                  d      }d|v r4|d   /|j                  xs g D cg c]  }|j                          c}|d<   d|v r0|d   +|j                  r|j                  j                         nd|d<   d|v r4|d   /|j                  xs g D cg c]  }|j                          c}|d<   t	        |      j                  | |      }|j                  d      dk(  r.t        t        j                  d	|j                  d
d      d      S t        t        j                  d|j                  d
d      |j                  d      d      S c c}w c c}w # t        $ r1}t        t        j                  dt        |      d      cY d}~S d}~ww xY w)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#SqALLN#SGK %0W=W5X5d`d`}`}$2O2O2Z2Z2\  DHG./!W,9O1P1\HLHaHaHgeg.i!q||~.iG*+2%%b'2::h7*"55#&6::i3YZ  **"vzz)]/S[a[e[efj[kl
 	
 $T /j  
=="s1v6
 	

sB   -E EAE E2A"E =E 
E 	F&&FFFz!True = soft delete (deleted_date)softc                    	 t        |      j                  | |      }|j                  d      dk(  r.t        t        j
                  d|j                  dd      d      S t        t        j                  d	|j                  dd
      d      S # t        $ r1}t        t        j                  dt        |      d      cY d}~S d}~ww xY w)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%%bt%4::h7*"55#&6::i3YZ  **"vzz)[/QR
 	
  
=="s1v6
 	

s$   AB  -B 	C&C=CC)$__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   