
    }5i;(              
       ,   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JrJrJr  S SKJr  S S	KJr  S S
KrS S
KrS SKJr  S S
Kr\" SS/S9r\RA                  S5      \" S5      \" \RB                  5      4S\S\4S jj5       r"\RA                  S5      \" S5      \" \5      4S\#S\#S\S\4S jj5       r$\RA                  S5      \" \5      \" \5      4S\S\S\4S jj5       r%\RM                  S5      S\'4S j5       r(g
)     )	APIRouterstatus
UploadFileFileFormDepends)JSONResponseFileResponse)DocumentsClass)StudentClass)get_db)get_current_active_user)	UserLoginCreateDocumentRequestDocumentListRequestUploadDocumentRequest)Session)PathN)datetimez
/documents	Documents)prefixtagsz/create.filedocument_datac           	        #    Sn U R                   R                  S5      (       d  [        [        R                  SSSS.S9$ [
        R                  " SSS9 nU R                  5       I Sh  vN nUR                  U5        UR                  nSSS5        UR                  nUR                  n[        R                  " UUS	9nU(       a:  [        R                  R!                  U5      (       a  [        R"                  " U5        US
   S:X  a  [        [        R$                  SUS   SS.S9$ ['        US   US   SS9n[)        U5      UR*                  S'   U$  N! , (       d  f       N= f! [,         a|  n	U(       aC  [        R                  R!                  U5      (       a   [        R"                  " U5        O!    O= f[        [        R$                  SS[)        U	5       3SS.S9s Sn	A	$ Sn	A	ff = f7f)z~
Crea un documento procesado a partir de un PDF subido.
Reemplaza [STUDENT_NAMES] con el nombre del estudiante proporcionado.
Nz.pdfi  zEl archivo debe ser un PDFr   messagedatastatus_codecontentF)deletesuffix)original_file_pathstudent_namer   error  r   	file_pathfilenameapplication/pdfpathr)   
media_typezX-Document-Type-IdzError general: )r)   endswithr	   r   HTTP_400_BAD_REQUESTtempfileNamedTemporaryFilereadwritenamer%   document_type_idr   parent_authorizationosr,   existsunlinkHTTP_500_INTERNAL_SERVER_ERRORr
   strheaders	Exception)
r   r   temp_file_path	temp_filer!   r%   r5   resultresponsees
             OC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\routers\documents.pycreate_documentrD      s     NA
}}%%f--"77!;   ((fE IIK'GOOG$&^^N F %11(9944-%
 bggnn^<<IIn%(w&"AA!%i0    $J'(

 255E1F-.E ( FEJ  
bggnn^<<		.)==,SVH5
 	

s   G2;E) G2E) E+E,!EBE) *G2+*E) G2E
E&"E) )
G/3+G*F65G*6F:8,G*$G/%G2*G//G2z'/upload/{student_id}/{document_type_id}
student_idr5   dbc                   #     [        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$ UR                  S	0 5      nUR                  S
5      =(       d    [        U 5      n[        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R                  (       a-  [        UR                  5      R                  R                  5       OSnUR                  SS5      R                  SS5      nSU SU
 U 3n[        S5      nUR                  SSS9  X-  nUR                  5       I Sh  vN n[!        US5       nUR#                  U5        SSS5        UR%                  U UUS9n[        U[        5      (       am  UR                  S5      S:X  aX  UR'                  5       (       a   [(        R*                  " U5        [	        [
        R,                  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5      UR                  S.S.S9$  GN! , (       d  f       N= f!    N= f! [0         aB  nUR3                  5         [	        [
        R,                  SS[        U5       3SS.S9s SnA$ SnAff = f7f)z#
Sube un documento (PDF o imagen).
r&   r     r   zEstudiante no encontradoNr   r   student_dataidentification_numberzDocumento no encontradoid .-	document__zfiles/system/studentsT)parentsexist_okwb)rE   r5   r(   r'   z&Error guardando registro del documento   zDocumento subido exitosamentedocument_id
version_id)rK   rV   rE   r5   r)   r(   original_filenamezError subiendo archivo: )r   get
isinstancedictr	   r   HTTP_404_NOT_FOUNDr;   r   r)   r   r#   lowerreplacemkdirr2   openr3   storer8   r7   r9   r:   HTTP_201_CREATEDr=   rollback)rE   r5   r   rF   student_servicestudent_resultrI   student_identification_numberdocumentdocument_resultrU   file_extension	clean_rutunique_filename
upload_dirr(   r!   fstore_resultrB   s                       rC   upload_documentrn   f   sP    g
&r*(,,Z8nd++1C1CG1L1LP^PbPbckPlpwPw"55!-11':wn>P>PQZ\v>w   &))."=(4(8(89P(Q(dUXYcUd% ""%",,'78ot,,1D1DX1NRY1Y"55!.229>WX   &))$/ @D}}dmm,3399;RT 299#rBJJ3PRS	 &i[+~>NO 12
50	 		#)T"aGGG #  ~~!-% & 
 lD))l.>.>x.HG.S!!IIi(  "AA!+//	;cd   //:&**=9"."2"2<"@",(8 /!$Y)-
 	
7 $""6  	

==5c!fX>
 	
	
s   M7BL( #M7$B&L( 
M7B/L( :L;L( LAL( 6L! +L( 7M78AL( M7L( 
LL( !L%#L( (
M427M/)M4*M7/M44M7z/listfilterssession_userc           	        #     [        U5      nUR                  U R                  U R                  5      n[	        U[
        5      (       aA  UR                  S5      S:X  a,  [        [        R                  SUR                  SS5      SS.S9$ [        [        R                  S	U(       a  S
OSUS.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)zR
Lista los documentos configurados, devolviendo solo document_type_id y document.
r   r&   r'   r   zError listando documentosNr   r      zDocumentos encontradoszNo hay documentos registradoszError listando documentos: )r   get_allr5   career_type_idrY   rZ   rX   r	   r   r:   HTTP_200_OKr=   r;   )ro   rp   rF   	documentsr   rB   s         rC   list_documentsrw      s     
"2&	  !9!97;Q;QRdD!!dhhx&8G&C"AA!#xx	3NO   **7;3A`
 	
  
==8QA
 	

sA   C/BB0 
C/$B0 /C/0
C,:'C'!C,"C/'C,,C/z/download/{filename}r)   c           	      0  #     [        S5      U -  nUR                  5       (       d  [        [        R                  SSS S.S9$ [        [        U5      U S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)
Nzfiles/original_student_filesrH   zArchivo no encontrador   r   r*   r+   r'   zError descargando archivo: )	r   r8   r	   r   r[   r
   r;   r=   r:   )r)   r(   rB   s      rC   download_documentry     s     
788C	!!"55!6   Y(
 	
  
==8QA
 	

s@   B>A BA B
B!'BB	BBB))fastapir   r   r   r   r   r   fastapi.responsesr	   r
   #app.backend.classes.documents_classr   !app.backend.classes.student_classr   app.backend.db.databaser   app.backend.auth.auth_userr   app.backend.schemasr   r   r   r   sqlalchemy.ormr   pathlibr   r0   r7   r   uuidrv   postas_formrD   intrn   rw   rX   r;   ry        rC   <module>r      s[   F F 8 > : * >  #   	  
	
 	Cy+23H3P3P+QJ

J
(J
 J
X 9: Cy&/	p
p
p
 p
 		p
 ;p
d  &&=>&/'
 '
'
 	'
 '
R %&

 '
r   