
    U+i?                     h   d Z ddlm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mZmZ  ed
dg      ZdefdZej5                  d       edd       edd       edd       edddd       ee       ee      fdededee   deded efd!       Zej5                  d"       edd#d$%       edd&       ee       ee      fd'edee   ded efd(       Zej5                  d)       edddd*       ee       ee      fd+ededed efd,       Zej5                  d-       edddd*       ee       ee      fd+ed.ededed ef
d/       Z ejC                  d0       edddd*       ee       ee      fd+ed1ededed ef
d2       Z"ejC                  d3       edddd*       ee       ee      fd+ed1ededed ef
d4       Z#ej5                  d5       edd#d6%       edddd*       ee       ee      fd+ed7ededed ef
d8       Z$ejK                  d-       edddd*       ee       ee      fd+ed.ededed ef
d9       Z&ej5                  d:       edddd*       ee       ee      fd;ededed efd<       Z'ejC                  d=       ee       ee      fd>eded efd?       Z(ejS                  d:       ee       ee      fd;ed>eded efd@       Z*ejK                  d:       edddd*       ee       ee      fd;ededed efdA       Z%y)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                     | j                   S )N)	school_id)r   s    I/var/www/pie360backend.cl/public_html/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                    	 t        |      }t        |      j                  | xs d|xs d|||      }t        |t              rC|j                  d      dk(  r/t        t        j                  d|j                  dd      g d	
      S 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)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!/'CC!C!z/course_recipients   zID del curso)r   r   u$   Año del período escolar (opcional)	course_idc           	         	 t        |      j                  | |j                  |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)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$   A4B& 7.B& &	C!/'CC!C!z/{form_id}/students_statusu   Año del período escolarform_idc           	         	 t        |      j                  | t        |      t        |dd      |      }|j	                  d      dk(  r?t        t        j                  d|j	                  dd      |j	                  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)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B5 .B5 5	C0>'C+%C0+C0z&/{form_id}/submissions/{submission_id}submission_idc           
         	 t        |      j                  | |t        |      t        |dd       |      }|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)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$   A5B& 8-B& &	C!/'CC!C!z/{form_id}/submitbodyc                    	 t        |d      r|j                  d      n|j                         }t        |      j	                  | t        |      t        |dd       t        |j                  d      xs |j                  d            |j                  d      xs i t        |dd       |      }|j                  d	      d
k(  r/t        t        j                  d|j                  dd      d d      S t        t        j                  d|j                  dd      d|j                  d      id      S # t        $ r2}t        t        j                  dt        |      d d      cY d }~S d }~ww xY w)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^      sN    
4;D,4O$//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$   C-D0 0?D0 0	E+9'E& E+&E+z/{form_id}/resend_whatsappc           
         	 t        |d      r|j                  d      n|j                         }t        |j	                  d      xs |j	                  d            }t        |      j                  | |t        |      t        |dd      |      }|j	                  d      d	k(  r/t        t        j                  d
|j	                  dd      dd      S t        t        j                  d|j	                  dd      d|j	                  d      id      S # t        $ r2}t        t        j                  dt        |      dd      cY d}~S d}~ww xY w)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      s6   
4;D,4O$//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                    	 t        |      j                  | |t        |      |      }|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)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                    	 t        |      j                  | |t        |      |      }|j                  d      dk(  r/t	        t
        j                  d|j                  dd      dd      S t	        t
        j                  d	|j                  dd
      dd      S # t        $ r2}t	        t
        j                  dt        |      dd      cY d}~S d}~ww xY w)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                    	 t        |      j                  | t        |      |      }|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)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           	      J   	 t        | d      r| j                  d      n| j                         }t        |      j	                  |t        |            }|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d	
      S # t        $ r2}t        t        j                  dt        |      d d	
      cY d }~S d }~ww xY w)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,4O$//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"0'DD"D"c           	         	 t        |d      r|j                  dd      ni }t        |      j                  | |t	        |            }|j                  d      dk(  r/t        t        j                  d|j                  dd      d d	
      S t        t        j                  d|j                  dd      | |j                  d      dd	
      S # t        $ r2}t        t        j                  dt        |      d d	
      cY d }~S d }~ww xY w)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    
HOPTVbHc$//t/Dik!"%,,R*\:RS::h7*"55#&6::iIa3blpq  **!::i? &

: 6

 
	
  
=="s1vtD
 	

s%   BC A C 	D'D<DDc                    	 t        |      j                  | t        |      |      }|j                  d      dk(  r/t	        t
        j                  d|j                  dd      d d      S t	        t
        j                  d|j                  dd	      d d      S # t        $ r2}t	        t
        j                  d
t        |      d d      cY d }~S d }~ww xY w)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   