
    a$i8!                     t    d dl Z d dlmZ d dl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mZ  G d d      Zy)	    N)Path)OptionalListDictAny)Session)datetime)DocumentModelBirthCertificateDocumentModelc                   x    e Zd ZdefdZeddededefd       Zdede	fd	Z
ddee   de	fdZdededede	fdZy
)DocumentsClassdbc                     || _         y N)r   )selfr   s     aC:\Users\jesus\OneDrive\Escritorio\proyecto_pie360\backend\app\backend\classes\documents_class.py__init__zDocumentsClass.__init__   s	        original_file_pathstudent_nameoutput_directoryc           
         	 t        |       }|j                         sdddddS d|j                  dd       dt        j                         j
                  dd  d	}t        |      |z  }|j                  j                  d
d
       t        j                  |      }d}t        t        |            D ]  }||   }	|	j                  d      }
|
s|
D ]  }|	j                  |d       |	j                          t        j                  |j                   |j"                  |j$                  |j&                        }|	j)                  ||dddd
      }|dk  s|	j+                  |j                   |j&                  dz
  f|ddd
        d
} |j-                  |       |j/                          dd|t1        |      dS # t2        $ r}ddt1        |       dddcY d}~S d}~ww xY w)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$   )fill
   )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_authorizationz#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 %.#H- "&1B!C! . --d-C--/ %)IIdggtww$Q	 "00%(%'"+"#$( 1  6 ,,!%$''A+ 6 ,)+&/(, - +: *.&K%.P k*  $=+ -	   	!<SVHE !	 	s1   !F9 B)F9 BF9 A%F9 9	GGGGidreturnc                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|rv|j                  |j                  |j                  |j                  r|j                  j                  d      nd|j                  r|j                  j                  d      dS ddS dddS # t        $ r}t        |      }d|dcY d}~S d}~ww xY w)z1
        Obtiene un documento por su ID.
        z%Y-%m-%d %H:%M:%SN)rS   document_type_iddocument
added_dateupdated_dater   z7No se encontraron datos para el documento especificado.r   r   )r   queryr
   filterrS   firstrV   rW   rX   strftimerY   rE   rD   )r   rS   rW   rQ   error_messages        r   getz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 	C/C*$C/*C/NrV   c                    	 | j                   j                  t              }|"|j                  t        j                  |k(        }|j                  t        j                  j                               j                         }|D cg c]  }|j                  |j                  d c}S c c}w # t        $ r}dt        |      dcY d}~S d}~ww xY w)z=
        Obtiene la lista de documentos almacenados.
        N)rV   rW   r   rZ   )r   r[   r
   r\   rV   order_byrW   ascallrE   rD   )r   rV   r[   	documentsdocrQ   s         r   get_allzDocumentsClass.get_all   s    	GGMM-0E+]%C%CGW%WX}'='='A'A'CDHHJI %
  ),(<(< #    	!q6 	s0   BB,  B'$B, 'B, ,	C5CCC
student_idr   c                    	 |dk(  r!| j                   j                  t              j                  t        j                  |k(        j                  t        j                  j                               j                         }|r|j                  dz   }nd}t        |||t        j                         t        j                               }| j                   j                  |       | j                   j                          | j                   j                  |       dd|j                  |dS dd| dd	S # t        $ r2}| j                   j!                          dt#        |      d	cY d
}~S d
}~ww xY w)z
        Almacena un documento dependiendo del tipo.
        Si es tipo 1, se guarda en birth_certificate_documents con control de versiones.
        r$   )rh   
version_idbirth_certificaterX   rY   r,   zDocumento creado exitosamente)r   r   document_idrj   r   zTipo de documento u    no implementado aúnrZ   N)r   r[   r   r\   rh   rb   rj   descr]   r	   nowaddcommitrefreshrS   rE   rollbackrD   )r   rh   rV   r   last_versionnew_version_idnew_documentrQ   s           r   storez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&D2 )D2 2	E-;'E("E-(E-)zfiles/original_student_filesr   )__name__
__module____qualname__r   r   staticmethodrD   rR   intr   r`   r   rg   rv    r   r   r   r   
   s    7  \ \C \[^ \ \|Ac Ac A0  41 1s 1s 1s 1r   r   )r/   pathlibr   r4   typingr   r   r   r   sqlalchemy.ormr   r	   app.backend.db.modelsr
   r   r   r|   r   r   <module>r      s)       , , "  NF Fr   