
    U+i}              
       `   d dl 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mZmZmZ d dlmZ d dlmZ  ed	d
g      Zej-                  d       ee       ee	      fdededefd       Zej1                  d       ee       ee	      fdededefd       Zej-                  d       e        ee       ee	      fdededefd       Zej9                  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y)    )	APIRouterstatusDepends)JSONResponse)ProgressStatusStudentClass)get_db)get_current_active_user)	UserLoginStoreProgressStatusStudentUpdateProgressStatusStudentProgressStatusStudentList)Optional)Sessionz/progress_status_studentszProgress Status Students)prefixtagsz/storeprogress_status_datasession_userdbc           	        K   	 t        |      }|j                  | j                               }t        |t              rC|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        $ r5}t        t        j                  ddt        |       dd      cY d}~S d}~ww xY ww)z8
    Crea un nuevo estado de avance (Documento 18).
    r   error  messagez Error guardando estado de avanceNr   r   datastatus_codecontent   z$Estado de avance creado exitosamenteidz Error creando estado de avance: )r   storedict
isinstancegetr   r   HTTP_500_INTERNAL_SERVER_ERRORHTTP_201_CREATED	Exceptionstr)r   r   r   progress_status_serviceresultes         T/var/www/pie360backend.cl/public_html/app/backend/routes/progress_status_students.pystore_progress_status_studentr,      s     !
"<R"@(../C/H/H/JKfd#

8(<(G"AA!%zz)5WX   //!::i1WX&**T*	
 		
  
===c!fXF
 	

sA   DA<C  D?C  D	C?
*C:4C?5D:C??Dz/{id}r   c           	        K   	 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 # t        $ r5}t	        t
        j                  ddt        |       dd      cY d}~S d}~ww xY ww)z0
    Obtiene un estado de avance por su ID.
    r   r     r   zEstado de avance no encontradoNr   r      zEstado de avance encontrador   z#Error obteniendo estado de avance: )r   r#   r"   r!   r   r   HTTP_404_NOT_FOUNDHTTP_200_OKr&   r$   r'   r   r   r   r(   r)   r*   s         r+   get_progress_status_studentr3   ;   s     
"<R"@(,,R0fd#

8(<(G"55!%zz)5UV   **8
 	
  
==@QI
 	

sA   CA.B 2C3B C	C*CCCCC/progress_status_listc           	        K   	 t        |      }|j                  | j                  | j                        }t	        |t
              rC|j                  d      dk(  r/t        t        j                  d|j                  dd      dd	      S t        t        j                  d
|rdnd|d	      S # t        $ r5}t        t        j                  ddt        |       dd	      cY d}~S d}~ww xY ww)zb
    Lista los estados de avance almacenados.
    Puede filtrarse por student_id y school_id.
    )
student_id	school_idr   r   r   r   z Error listando estados de avanceNr   r   r/   zEstados de avance encontradosz$No hay estados de avance registradosz"Error listando estados de avance: )r   get_allr7   r8   r"   r!   r#   r   r   r$   r1   r&   r'   )r5   r   r   r(   r   r*   s         r+   list_progress_status_studentsr:   e   s     "
"<R"@&..+66*44 / 

 dD!dhhx&8G&C"AA!#xx	3UV   **>B:Hn
 	
  
==?AxH
 	

sA   C-BB, C-	"B, +C-,	C*5*C%C* C-%C**C-c           	        K   	 t        |      }|j                  | |j                  d            }t        |t              rC|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        $ r5}t        t        j                  ddt        |       dd	
      cY d}~S d}~ww xY ww)z2
    Actualiza un estado de avance existente.
    T)exclude_unsetr   r   r.   r   z#Error actualizando estado de avanceNr   r   r/   z)Estado de avance actualizado exitosamenter   r   z%Error actualizando estado de avance: )r   updater!   r"   r#   r   r   r0   r1   r&   r$   r'   )r   r   r   r   r(   r)   r*   s          r+   update_progress_status_studentr>      s    !
"<R"@(//4H4M4M\`4M4abfd#

8(<(G"55!%zz)5Z[   **!::i1\]&**T*	
 		
  
==B3q6(K
 	

sA   DA?C D?C D	D*C=7D8D=DDc           	        K   	 t        |      }|j                  |       }t        |t              rC|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        $ r5}t        t        j                  ddt        |       dd      cY d}~S d}~ww xY ww)uA   
    Elimina lógicamente un estado de avance (soft delete).
    r   r   r.   r   z!Error eliminando estado de avanceNr   r   r/   z'Estado de avance eliminado exitosamenter   z#Error eliminando estado de avance: )r   deleter"   r!   r#   r   r   r0   r1   r&   r$   r'   r2   s         r+   delete_progress_status_studentrA      s     
"<R"@(//3fd#

8(<(G"55!%zz)5XY   **!::i1Z[
 	
  
==@QI
 	

sA   C#A.B" 2C#3.B" !C#"	C +*CC C#C  C#N) fastapir   r   r   fastapi.responsesr   1app.backend.classes.progress_status_student_classr   app.backend.db.databaser   app.backend.auth.auth_userr	   app.backend.schemasr
   r   r   r   typingr   sqlalchemy.ormr   progress_status_studentspostr,   r#   intr3   r:   putr>   r@   rA        r+   <module>rP      s   . . * X * > } }  "$&
$	% 
 x( &&=>&/)
4)
)
 	)
 ))
V g& &&=>&/'
'
'
 	'
 ''
R s#6O6Q%&=>&/+
3+
+
 	+
 $+
Z g& &&=>&/	*
*
5*
 *
 		*
 '*
X   ) &&=>&/'
'
'
 	'
 *'
rO   