
    ;i?                     :   S r SSKJ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JrJr  \" S
S/S9rS\4S jr\R5                  S5      \" SSS9\" SSS9\" SSS9\" SSSSS9\" \5      \" \5      4S\S\S\\   S\S\S \4S! jj5       r\R5                  S"5      \" SS#S$S%9\" SS&S9\" \5      \" \5      4S'\S\\   S\S \4S( jj5       r\R5                  S)5      \" SSSS*S9\" \5      \" \5      4S+\S\S\S \4S, jj5       r\R5                  S-5      \" SSSS*S9\" \5      \" \5      4S+\S.\S\S\S \4
S/ jj5       r \RC                  S05      \" SSSS*S9\" \5      \" \5      4S+\S1\S\S\S \4
S2 jj5       r"\RC                  S35      \" SSSS*S9\" \5      \" \5      4S+\S1\S\S\S \4
S4 jj5       r#\R5                  S55      \" SS#S6S%9\" SSSS*S9\" \5      \" \5      4S+\S7\S\S\S \4
S8 jj5       r$\RK                  S-5      \" SSSS*S9\" \5      \" \5      4S+\S.\S\S\S \4
S9 jj5       r&\R5                  S:5      \" SSSS*S9\" \5      \" \5      4S;\S\S\S \4S< jj5       r'\RC                  S=5      \" \5      \" \5      4S>\S\S \4S? jj5       r(\RS                  S:5      \" \5      \" \5      4S;\S>\S\S \4S@ jj5       r*\RK                  S:5      \" SSSS*S9\" \5      \" \5      4S;\S\S\S \4SA jj5       r%g)Bu'   formularios dinámicos (dynamic_forms).    )Optional)	APIRouterDependsQuerystatus)JSONResponse)Session)get_current_active_user)DynamicFormClass)get_db)ResendFormWhatsAppStoreDynamicFormSubmitDynamicFormAnswersUpdateDynamicForm	UserLoginz/dynamic_formszDynamic Forms)prefixtagsuserc                     U R                   $ )N)	school_id)r   s    RC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\routes\dynamic_forms.py
_school_idr      s    >>     u   0 = sin paginación)descriptiond   u   Registros por páginaNu   Buscar en nombre o descripción.i  i4  u'   Año del período escolar (obligatorio))geler   pageper_pageqperiod_yearsession_userdbc                     [        U5      n[        U5      R                  U =(       d    SU=(       d    S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
9$ [        [        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)zWLista formularios del colegio del usuario (school_id en token). Filtra por period_year.r   r   )r   items_per_pagesearchr   r"   r   error  messageErrorr   r*   datastatus_codecontent   OKN)r   r   get_all
isinstancedictgetr   r   HTTP_500_INTERNAL_SERVER_ERRORHTTP_200_OK	Exceptionstr)	r   r    r!   r"   r#   r$   sidresultes	            r   get_listr>      s    
&!"%--#?s# . 
 fd##

8(<(G"AA#&6::i3Q[]^  **"tVD
 	
  
=="s1vrB
 	

s$   BB- B- -
C&7$C!C&!C&z/course_recipients   zID del curso)r   r   u$   Año del período escolar (opcional)	course_idc           	          [        U5      R                  U UR                  UR                  U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)zREstudiantes del curso con RUT y datos del apoderado (celular) para notificaciones.r"   r   r(     r*   r+   r,   r.   r1   r2   r-   r)   N)r   get_course_recipientsr   customer_idr6   r   r   HTTP_400_BAD_REQUESTr8   r9   r7   r:   )r@   r"   r#   r$   r<   r=   s         r   rD   rD   A   s    
!"%;;""$$#	 < 
 ::h7*"77#&6::i3Q[]^  **"tVZZPR=ST
 	
  
=="s1vrB
 	

s$   A/B 2+B 
C($CCCz/{form_id}/students_statusu   Año del período escolarform_idc           	          [        U5      R                  U [        U5      [        USS5      U5      nUR	                  S5      S:X  a<  [        [        R                  SUR	                  SS5      UR	                  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)zGEstudiantes del curso del formulario con estado respondido / en_espera.rE   Nr   r(   rC   r*   r+   r-   r,   r.   r1   r2   r)   )r   list_students_statusr   getattrr6   r   r   rF   r8   r9   r7   r:   )rG   r"   r#   r$   r<   r=   s         r   students_statusrK   `   s    
!"%::|$L-6	
 ::h7*"77!%zz)W="JJvr2  **"tVZZPR=ST
 	
  
=="s1vrB
 	

s$   BB0 +B0 0
C):$C$C)$C)z&/{form_id}/submissions/{submission_id}submission_idc           
          [        U5      R                  U U[        U5      [        USS 5      U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)NrE   rB   r   r(     r*   No encontrador,   r.   r1   r2   r-   r)   )r   get_submission_detailr   rJ   r6   r   r   HTTP_404_NOT_FOUNDr8   r9   r7   r:   rG   rL   r"   r#   r$   r<   r=   s          r   rP   rP      s    
!"%;;|$L-6# < 
 ::h7*"55!%zz)_E   **"tVZZ=OP
 	
  
=="s1vtD
 	

s$   A0B 3*B 
C($CCCz/{form_id}/submitbodyc                     [        US5      (       a  UR                  SS9OUR                  5       n[        U5      R	                  U [        U5      [        USS 5      [        UR                  S5      =(       d    UR                  S5      5      UR                  S5      =(       d    0 [        USS 5      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      SUR                  S5      0S.S9$ ! [         a/  n[        [        R                  S[        U5      S S.S9s S nA$ S nAff = f)N
model_dumpTby_aliasrE   	studentId
student_idanswersidr   r(   rC   r*   r+   r,   r.   r1   r2   submissionIdr)   )hasattrrU   r5   r   submit_answersr   rJ   intr6   r   r   rF   r8   r9   r7   r:   )rG   rS   r"   r#   r$   payloadr<   r=   s           r   r^   r^      sQ    
4;D,4O4O$//4/0UYU^U^U`!"%44|$L-6K(EGKK,EFKK	"(bL$-
 ::h7*"77!%zz)W=   **!::i6'N)CD
 	
  
=="s1vtD
 	

s$   C7D7 :<D7 7
E0$E+%E0+E0z/{form_id}/resend_whatsappc           
          [        US5      (       a  UR                  SS9OUR                  5       n[        UR	                  S5      =(       d    UR	                  S5      5      n[        U5      R                  U U[        U5      [        USS5      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      SUR	                  S5      0S.S9$ ! [         a/  n[        [        R                  S[        U5      SS.S9s SnA$ SnAff = f)uS   Reenvía la plantilla WhatsApp al apoderado (estudiante en espera, sin respuestas).rU   TrV   rX   rY   rE   Nr   r(   rC   r*   r+   r,   r.   r1   r2   whatsappr)   )r]   rU   r5   r_   r6   r   resend_whatsapp_to_guardianr   rJ   r   r   rF   r8   r9   r7   r:   )	rG   rS   r"   r#   r$   r`   r;   r<   r=   s	            r   resend_whatsapprd      s9   
4;D,4O4O$//4/0UYU^U^U`'++k*Ggkk,.GH!"%AA|$L-6
 ::h7*"77!%zz)W=   **!::i6#VZZ
%;<
 	
  
=="s1vtD
 	

s$   CD <D 
E$EEEz/{form_id}/student_submissionzID del estudianterY   c                     [        U5      R                  U U[        U5      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)zNIndica si ya hay respuestas guardadas para ese estudiante (bloquear planilla).r   r(   rC   r*   r+   Nr,   r.   r1   r2   r-   r)   )r   submission_for_studentr   r6   r   r   rF   r8   r9   r7   r:   )rG   rY   r"   r#   r$   r<   r=   s          r   student_submission_lookuprg      s    
!"%<<|$	
 ::h7*"77!%zz)W=   **"tVZZ=OP
 	
  
=="s1vtD
 	

s$   A&B )*B 
C$CCCc                     [        U5      R                  U U[        U5      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      SS.S9$ ! [         a/  n[	        [
        R                  S[        U5      SS.S9s SnA$ SnAff = f)zDElimina las respuestas de un estudiante (volver a estado En espera).r   r(   rN   r*   rO   Nr,   r.   r1   r2   r)   )r   delete_submissionr   r6   r   r   rQ   r8   r9   r7   r:   rR   s          r   ri   ri   !  s    
!"%77|$	
 ::h7*"55!%zz)_E   **"vzz)T/JTXY
 	
  
=="s1vtD
 	

s$   A&B )+B 
C$C	C	Cz/{id}r[   c                     [        U5      R                  U [        U5      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)Nr   r(   rN   r*   Registro no encontrador,   r.   r1   r2   r-   r)   )
r   r6   r   r   r   rQ   r8   r9   r7   r:   r[   r"   r#   r$   r<   r=   s         r   	get_by_idrm   E  s    
!"%))"j.FT::h7*"55#&6::iIa3blpq  **"tVZZ=OP
 	
  
=="s1vtD
 	

s$   A%B (*B 
C$CCCz/storer-   c           	      @    [        U S5      (       a  U R                  SS9OU R                  5       n[        U5      R	                  U[        U5      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	.S
9$ ! [         a/  n[        [        R                  S[        U5      S S	.S
9s S nA$ S nAff = f)NrU   TrV   r   r(   rC   r*   zError al guardarr,   r.      Creador[   rb   r[   rb   r)   )r]   rU   r5   r   storer   r6   r   r   rF   HTTP_201_CREATEDr9   r7   r:   )r-   r#   r$   r`   r<   r=   s         r   rr   rr   ^  s
   
4;D,4O4O$//4/0UYU^U^U`!"%++GZ5MN::h7*"77#&6::iI[3\fjk  //!::i: **T* &

: 6

 
	
  
=="s1vtD
 	

s%   BC$ AC$ $
D.$DDDc           	          [        US5      (       a  UR                  SSS9O0 n[        U5      R                  X[	        U5      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 UR                  S5      S.S	.S
9$ ! [         a/  n[        [        R                  S[        U5      S S	.S
9s S nA$ S nAff = f)NrU   T)exclude_unsetrW   r   r(   rN   r*   rk   r,   r.   r1   Actualizadorb   rq   r)   )r]   rU   r   updater   r6   r   r   rQ   r8   r9   r7   r:   )r[   r-   r#   r$   r`   r<   r=   s          r   rw   rw   ~  s    
HOPTVbHcHc$//t/Dik!"%,,R*\:RS::h7*"55#&6::iIa3blpq  **!::i? &

: 6

 
	
  
=="s1vtD
 	

s$   BC 
=C 
D$C<6D<Dc                     [        U5      R                  U [        U5      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      S S.S9$ ! [         a/  n[	        [
        R                  S
[        U5      S S.S9s S nA$ S nAff = f)Nr   r(   rN   r*   rk   r,   r.   r1   	Eliminador)   )r   deleter   r6   r   r   rQ   r8   r9   r7   r:   rl   s         r   rz   rz     s    
!"%,,RL1I;W::h7*"55#&6::iIa3blpq  **"vzz)[/Q[_`
 	
  
=="s1vtD
 	

s$   A%B (+B 
C$CCC)+__doc__typingr   fastapir   r   r   r   fastapi.responsesr   sqlalchemy.ormr	   app.backend.auth.auth_userr
   &app.backend.classes.dynamic_form_classr   app.backend.db.databaser   app.backend.schemasr   r   r   r   r   dynamic_formsr   r6   r_   r:   r>   rD   rK   rP   postr^   rd   rg   rz   ri   rm   rr   putrw    r   r   <module>r      sc   -  5 5 * " > C *  
	Y  2a%:;#+BCT/PQSTd@ij%&=>&/



 }
 	

 
 	
 
D '(31.A!&t9_!`%&=>&/	

#
 
 		
 )
< /0 STd@[\%&=>&/	


 
 		
 1
D ;< STd@[\%&=>&/ 
 
 
  
 	 

 	 
 = 
F '( STd@[\%&=>&/'
'

"'
 '
 	'

 	'
 )'
T 01 STd@[\%&=>&/'
'

'
 '
 	'

 	'
 2'
T 23 CA3FGSTd@[\%&=>&/ 
 
 
  
 	 

 	 
 4 
F >? STd@[\%&=>&/ 
 
 
  
 	 

 	 
 @ 
F 7 STd@[\%&=>&/	


 
 		
 
0 H &&=>&/



 	
 
> 7 &&=>&/	



 
 		
 
@ g STd@[\%&=>&/	


 
 		
 
r   