
    }5i"                     t    S SK r S SKJr  S SK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Jr   " S S5      rg)	    N)Path)OptionalListDictAny)Session)datetime)DocumentModelBirthCertificateDocumentModelc                       \ rS rSrS\4S jr\SS\S\S\4S jj5       rS\	S	\
4S
 jrSS\\	   S\\	   S	\
4S jjrS\	S\	S\S	\
4S jrSrg)DocumentsClass
   dbc                     Xl         g )Nr   )selfr   s     UC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\documents_class.py__init__DocumentsClass.__init__   s        original_file_pathstudent_nameoutput_directoryc                     [        U 5      nUR                  5       (       d  SSSSS.$ SUR                  SS5       S[        R                  " 5       R
                  SS  S	3n[        U5      U-  nUR                  R                  S
S
S9  [        R                  " U5      nSn[        [        U5      5       H  nXh   n	U	R                  S5      n
U
(       d  M!  U
 H  nU	R                  USS9  U	R                  5         [        R                  " UR                   UR"                  UR$                  UR&                  5      nU	R)                  UUSSSS
S9nUS:  d  M  U	R+                  UR                   UR&                  S-
  4USSS
S9  M     S
nM     UR-                  U5        UR/                  5         SSU[1        U5      S.$ ! [2         a  nSS[1        U5       3SSS.s SnA$ SnAff = f)u  
Procesa un documento PDF de autorización de padres, reemplazando [STUDENT_NAMES] con el nombre del estudiante.

Args:
    original_file_path: Ruta del archivo PDF original
    student_name: Nombre del estudiante a insertar en el documento
    output_directory: Directorio donde se guardará el archivo procesado

Returns:
    dict: Diccionario con status, message, filename y file_path
errorz Documento original no encontradoN)statusmessagefilename	file_pathautorizacion_ _   z.pdfT)parentsexist_okFz[STUDENT_NAMES])   r&   r&   )fillr   )r   r   r   r   )fontsizecoloralignoverlay   )r(   r)   r+   successz Documento procesado exitosamentezError procesando el documento: )r   existsreplaceuuiduuid4hexparentmkdirfitzopenrangelen
search_foradd_redact_annotapply_redactionsRectx0y0x1y1insert_textboxinsert_textsaveclosestr	Exception)r   r   r   original_fileunique_filenameoutput_filepdf_documentfound_and_modifiedpage_numpagetext_instancesrect	text_rectrces                  r   parent_authorization#DocumentsClass.parent_authorization   s   P	 !34M ''))%A $!%	  !.l.B.B3.L-MQtzz|O_O_`babOcNddhiO/0?BK $$TD$A  99]3L!& "#l"34#- "&1B!C!> .--d-C--/ %)IIdggtww$Q	 "00%(%'"+"#$( 1  6 ,,!%$''A+ 6 ,)+&/(, - + !/: *.&K 5P k*  $=+ -	   	!<SVHE !	 	s1   &G  B*G  A>G  A&G   
G'
G"G'"G'idreturnc                     U R                   R                  [        5      R                  [        R                  U:H  5      R                  5       nU(       a  UR                  UR                  UR                  UR                  UR                  (       a  UR                  R                  S5      OSUR                  (       a  UR                  R                  S5      S.$ SS.$ SSS.$ ! [         a  n[        U5      nSUS.s SnA$ SnAff = f)z!
Obtiene un documento por su ID.
z%Y-%m-%d %H:%M:%SN)rU   document_type_idcareer_type_iddocument
added_dateupdated_dater   z7No se encontraron datos para el documento especificado.r   r   )r   queryr
   filterrU   firstrX   rY   rZ   r[   strftimer\   rF   rE   )r   rU   rZ   rR   error_messages        r   getDocumentsClass.getm   s    	Aww}}]3::  B&eg  "++(0(A(A&.&=&= ( 1 1W_WjWj("5"5">">?R"Spt[c[p[pH$9$9$B$BCV$W  w{  #*6opp 	AFM%-@@	As*   CC& C& !C& &
D
0D?D
D
NrX   rY   c                     U R                   R                  [        5      nUb"  UR                  [        R                  U:H  5      nUb(  US:w  a"  UR                  [        R
                  U:H  5      nUR                  [        R                  R                  5       5      R                  5       nU Vs/ s H'  nUR                  UR
                  UR                  S.PM)     sn$ s  snf ! [         a  nS[        U5      S.s SnA$ SnAff = f)z-
Obtiene la lista de documentos almacenados.
Nr   )rX   rY   rZ   r   r]   )r   r^   r
   r_   rX   rY   order_byrZ   ascallrF   rE   )r   rX   rY   r^   	documentsdocrR   s          r   get_allDocumentsClass.get_all   s    	GGMM-0E+]%C%CGW%WX )n.A]%A%A^%ST}'='='A'A'CDHHJI % %C	 ),(<(<&)&8&8 #
 %    	!q6 	s0   B.C& 0.C!C& !C& &
D0D=DD
student_idr   c                     US:X  Ga%  U R                   R                  [        5      R                  [        R                  U:H  5      R                  [        R                  R                  5       5      R                  5       nU(       a  UR                  S-   nOSn[        UUU[        R                  " 5       [        R                  " 5       S9nU R                   R                  U5        U R                   R                  5         U R                   R                  U5        SSUR                  US.$ SSU S3S	.$ ! [         a2  nU R                   R!                  5         S[#        U5      S	.s S
nA$ S
nAff = f)z~
Almacena un documento dependiendo del tipo.
Si es tipo 1, se guarda en birth_certificate_documents con control de versiones.
r&   )rm   
version_idbirth_certificater[   r\   r-   zDocumento creado exitosamente)r   r   document_idro   r   zTipo de documento u    no implementado aúnr]   N)r   r^   r   r_   rm   rf   ro   descr`   r	   nowaddcommitrefreshrU   rF   rollbackrE   )r   rm   rX   r   last_versionnew_version_idnew_documentrR   s           r   storeDocumentsClass.store   s?   
,	1$#ww}}-JKRR1<<
J (8CCHHJKEEG 
  %1%<%<q%@N%&N  =)-&/'||~!)  L) - (>#/??"0	  &!34D3EEZ[ 
  	GG!q6 	s$   D+D7 .D7 7
E3'E.(E3.E3r   )zfiles/original_student_files)NN)__name__
__module____qualname____firstlineno__r   r   staticmethodrE   rS   intr   rc   r   rk   r{   __static_attributes__ r   r   r   r   
   s    7  \ \C \[^ \ \|Ac Ac A2 hWZm gj >1 1s 1s 1s 1r   r   )r0   pathlibr   r5   typingr   r   r   r   sqlalchemy.ormr   r	   app.backend.db.modelsr
   r   r   r   r   r   <module>r      s)       , , "  NL Lr   