
    
@zi/              
          S SK JrJrJrJrJrJr  S SK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  S S	KJr  S S
KJr  S SKrS SKr\" SS/S9r\R9                  S5      \" \5      4S\S\S\4S jj5       r\R?                  S5      \" S5      \" \5      4S\S\S\S\4S jj5       r \R9                  S5      \" \5      4S\S\S\4S jj5       r!\R9                  S5      \" \5      4S\S\4S jj5       r"g)    )	APIRouterstatusDependsQuery
UploadFileFile)JSONResponseFileResponse)FolderClass)StudentClass)	FileClass)get_db)Optional)Session)Path)datetimeNz/foldersFolders)prefixtagsz7/checkDocumentExistence/{student_id}/{document_type_id}
student_iddocument_type_iddbc                   #     [        U5      nUR                  X5      nUR                  S5      S:X  a.  [        [        R
                  SUR                  SS5      SS/ S.S	9$ UR                  S
5      nUc  / nO![        U[        5      (       d  U(       a  U/O/ nUR                  S5      nUc  / nO![        U[        5      (       d  U(       a  U/O/ n[        [        R                  SUR                  S5      UR                  S5      UR                  SS5      UR                  SS5      UUS.S	9$ ! [         a4  n[        [        R
                  SS[        U5       3SS/ S.S	9s SnA$ SnAff = f7f)u  
Verifica si un estudiante ya tiene documentos de un tipo específico.
Busca directamente en la tabla correspondiente según el document_type_id:
- document_type_id = 1: busca en birth_certificate_documents
- document_type_id = 4: busca en health_evaluations
- Otros: busca en folders filtrando por document_type_id
Retorna información sobre la existencia del documento filtrado por student_id y document_type_id.
r   error  messagez*Error verificando existencia del documentoFr   )r   r   existstotaldatastatus_codecontentr   Nmissing   r   r   total_missing)r   r   r   r   r%   r   r#   z,Error verificando existencia del documento: )r   check_document_existencegetr	   r   HTTP_500_INTERNAL_SERVER_ERROR
isinstancelistHTTP_200_OK	Exceptionstr)r   r   r   folder_serviceresultr   r#   es           MC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\routers\folders.pycheckDocumentExistencer2      sm    5
$R88V::h7*"AA!%zz)5ab#	 	 zz&!<DD$''!D6rD **Y'?GGT**#*wiG**!::i0 **X.GQ/!'OQ!?"
 	
  

==!!McRSfXV#	
 		


sB   E2AD1 "E2#CD1 0E21
E/;)E*$E/%E2*E//E2z"/upload/{student_id}/{document_id}.document_idfilec                 |  #     [        U5      nUR                  U 5      n[        U[        5      (       ao  UR                  S5      (       d  UR                  S5      S:X  aD  [	        [
        R                  SUR                  S5      =(       d    UR                  SS5      SS.S9$ S	S
KJn  UR                  U5      R                  UR                  U:H  UR                  R                  S5      5      R                  5       nU(       d   [	        [
        R                  SSU S3SS.S9$ UR                  nUR                   (       a-  [#        UR                   5      R$                  R'                  5       OSn	[(        R*                  " 5       R-                  S5      n
U  SU SU SU
 U	 3n[/        U5      nSU 3n UR1                  X-5        [9        U5      nUR;                  U UUS9n[        U[        5      (       aS  UR                  S5      S:X  a>   UR=                  U5        [	        [
        R4                  SUR                  SS5      SS.S9$ [	        [
        R>                  SSUR                  S5      UR                  S5      U UUUUR                  U5      UR                   S.S.S9$ ! [2         a2  n[	        [
        R4                  SS[7        U5       3SS.S9s SnA$ SnAff = f!    N= f! [2         aB  nURA                  5         [	        [
        R4                  SS[7        U5       3SS.S9s SnA$ SnAff = f7f)u   
Sube un archivo de documento para un estudiante y documento específico en la tabla folders.
Maneja el control de versiones automáticamente.
r   r     r   zEstudiante no encontradoNr   r   r   r    r   )DocumentModelzDocumento con id z no encontrado z%Y%m%d%H%M%S_zsystem/folders/r   zError subiendo archivo: )r   r3   	file_pathz1Error guardando registro del archivo de documento   z(Archivo de documento subido exitosamenteid
version_id)r=   r>   r   r3   filenamer;   file_urloriginal_filename)!r   r'   r)   dictr	   r   HTTP_404_NOT_FOUNDapp.backend.db.modelsr8   queryfilterr=   deleted_dateis_firstr   r?   r   suffixlowerr   nowstrftimer   uploadr,   r(   r-   r   storedeleteHTTP_201_CREATEDrollback)r   r3   r4   r   student_servicestudent_resultr8   document_infor   file_extension	date_hourunique_filenamefile_serviceremote_pathupload_errorr.   store_resultr0   s                     r1   upload_documentr]   X   sD    n
&r*(,,Z8nd++1C1CG1L1LP^PbPbckPlpwPw"55!-11':wn>P>PQZ\v>w   	8/66+&&**40
 %' 	
 "55!!2;-~N   )99 @D}}dmm,3399;RT LLN++N;	 (L+a8H7I9+VdUef !}''89	2 %R%++!#% , 
 lD))l.>.>x.HG.S##K0  "AA!+//	;no   //E&**40"."2"2<"@",#. /!, , 0 0 =)-	
 	
C  	"AA!!9#l:K9LM  	,8  	

==5c!fX>
 	
	
s   L<BK- #L<$BK- %L<&BK- 6J' AK- K& +K- 
L<AK- &L<'
K#1'KK#K- L<K##K- &K*(K- -
L977L4.L9/L<4L99L<z /list/{student_id}/{document_id}c           	        #     [        U5      nUR                  X5      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5       S
3[        U5      US.S9$ ! [         a2  n[        [        R                  SS[        U5       3/ S.S9s SnA$ SnAff = f7f)z
Lista los registros de folders filtrados por student_id y document_id.
Retorna todos los registros ordenados por version_id descendente.
r   r   r   r   zError listando documentosr7   r    r$   zSe encontraron z documento(s))r   r   r   r   zError listando documentos: N)r   get_by_student_and_documentr)   rB   r'   r	   r   r(   r+   lenr,   r-   )r   r3   r   r.   r/   r0   s         r1   list_foldersra      s      
$R;;JTfd##

8(<(G"AA!%zz)5PQ  **,S[MGV	
 	
  
==8QA
 	

sA   C(A1B) 5C(62B) (C()
C%3'C C%C( C%%C(z/download/{id}r=   c           	      t  #     [        U5      nUR                  U 5      n[        U[        5      (       aA  UR                  S5      S:X  a,  [	        [
        R                  SUR                  SS5      SS.S9$ UR                  S	5      nU(       d  [	        [
        R                  SS
SS.S9$ [        U5      R                  n[        S5      U-  nUR                  5       (       dW  [        S5      UR                  S	5      -  nUR                  5       (       a  UnO"[	        [
        R                  SSU SU 3SS.S9$ [        R                  " [        U5      5      u  pxU(       d  SnUn	[        [        U5      U	US9$ ! [         a2  n
[	        [
        R                  SS[        U
5       3SS.S9s Sn
A
$ Sn
A
ff = f7f)z]
Descarga un documento de folders por su ID.
El archivo debe estar en files/system/students/
r   r   r6   r   zDocumento no encontradoNr7   r    r4   z%El registro no tiene archivo asociadozfiles/system/studentszArchivo no encontrado: z. Buscando en: zapplication/octet-stream)pathr?   
media_typer   zError descargando archivo: )r   r'   r)   rB   r	   r   rC   r   namer   	mimetypes
guess_typer-   r
   r,   r(   )r=   r   r.   r/   r?   r;   file_path_altrd   r:   download_filenamer0   s              r1   download_documentrj      s    E
$R##B'fd##

8(<(G"55!%zz)5NO   ::f%"55!F   >&& 01H<	!! !89FJJv<NNM##%%)	# & 9 9"%%<XJoV_U`#a $  ",,S^<
3J %Y&!
 	
  
==8QA
 	

sZ   F8A1E9 5F863E9 )F8*BE9 8F89?E9 8F89
F5'F0*F5+F80F55F8)#fastapir   r   r   r   r   r   fastapi.responsesr	   r
   /app.backend.classes.student_document_file_classr   !app.backend.classes.student_classr   app.backend.classes.files_classr   app.backend.db.databaser   typingr   sqlalchemy.ormr   pathlibr   r   uuidrf   foldersr'   intr2   postr]   ra   rj        r1   <module>rz      s\   G G 8 G : 5 *  "    


 	FG &/B
B
B
 	B
 HB
H 	23 Cy&/	x
x
x
 x
 		x
 4x
t 	/0 &/)
)
)
 	)
 1)
V 	 &/M
M
M
 M
ry   