
    Ijz                       S r SSKJr  SSKrSSK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JrJrJr  SSKJr  SSKJrJr  SSKJrJ r   SSK!J"r"  \r#Sr$SSS jjr%SS jr&          SS jr'SS jr(g)uU   Generación de documentos Agent v2: plantilla Word/PDF → archivo → tabla folders.    )annotationsN)Path)Any)Session)DocumentsClass)FolderClass)settings)AgentV2DocumentTemplateModel)FAMILIA_DOCUMENT_IDbuild_familia_pie360_contextis_familia_document'merge_pie360_fallback_into_replacements)agent_v2_storage)fill_familia_templatevalidate_docx)link_folder_to_family_report persist_family_report_from_agent)fields_from_json)u+   Haz clic o pulse aquí para escribir texto.z Click or tap here to enter text.c                N    [        U5      (       a  [        X5      $ [        X5      $ N)r   r   _basic_student_context)db
student_iddocument_ids      _C:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\agent_v2_document_service.py_student_contextr   %   s#    ;''+B;;!"11    c                   SSK JnJnJn  U R	                  U5      R                  UR                  U:H  5      R                  5       nU R	                  U5      R                  UR                  U:H  5      R                  5       nU R	                  U5      R                  UR                  U:H  5      R                  UR                  R                  5       5      R                  5       nU(       a#  UR                  =(       d    SR                  5       OSnU(       a#  UR                  =(       d    SR                  5       OSn	U(       a#  UR                  =(       d    SR                  5       OSn
U SU	 SU
 3R                  5       nUUUU(       a#  UR                  =(       d    SR                  5       OSU(       a  [!        USS 5      OS U(       a  [!        USS 5      OS U(       a  [!        USS 5      S.$ S S.$ )	Nr   )StudentAcademicInfoModelStudentModelStudentPersonalInfoModel  	school_id	course_idperiod_year)r   student_namestudent_fullnameidentification_numberr$   r%   r&   )app.backend.db.models.pie_corer   r    r!   queryfilteridfirstr   order_bydescnamesstripfather_lastnamemother_lastnamer)   getattr)r   r   r   r    r!   studentpersonalacademicr1   fathermother	full_names               r   r   r   +   s     hh|$++LOOz,IJPPRG
)*	(33zA	B	  	)*	(33zA	B	*--224	5		  /7X^^!r((*BE9Ah&&,"335rF9Ah&&,"335rF'6(!F8,224I %S[("@"@"FB!M!M!Oac<CWWk48=EWX{D94@Gwwt<  NR r   c           
        [         R                  " 5       UR                  -  R                  5       nUR	                  5       (       d  SSS.$ [        X[        UR                  5      5      n[        [        UR                  5      5      (       a  [        X55      n[        [        R                  5      S-  S-  nUR                  SSS9  UR                  S5      =(       d    S	R                  S
S5      nUR                  R!                  5       nSUR                   SU S["        R$                  " 5       R&                  S S  SU 3n	Xi-  n
US:X  a  [        UR                  5      [(        :X  a  [+        UU
UUS9nOw[,        R.                  " XJ5        [0        R2                  " [5        U
5      U[5        U
5      [7        [8        5      SS9nUR                  S5      S:w  a  [;        U
5      (       d  SSS.nUR                  S5      S:X  a  U$ OUS:X  a  0 nUR=                  5        H5  u  pUb  [5        U5      OSnXSU S3'   XSU S3'   XSU S3'   XSU S3'   M7     [0        R>                  " [5        U5      U[        UR                  5      U[5        U5      5      nUR                  S5      S:X  a  U$ UR                  S5      =(       d    U	n	OSSU 3S.$ [A        U 5      RC                  U[        UR                  5      U	UR                  S 5      UR                  S!5      UR                  S"5      S#9n[E        U[F        5      (       a  UR                  S5      S:X  a  U$ S n[        UR                  5      [(        :X  ag  [I        U UUUS9nUR                  S5      S:X  a  SS$UR                  S%S&5       3U	S'.$ UR                  S(5      n[K        U UR                  S(5      U5        S)S*U	UR                  URL                  UR                  UUS+.$ ),Nerrorz!Plantilla no encontrada en disco.)statusmessagesystemstudentsT)parentsexist_okr(   
estudianter#   _agentv2_   .docx)student_context)remove_literal_stringspreserve_empty_content_controlsr>   u6   El Word generado quedó corrupto. Revise la plantilla.pdfr"   {}[]z<<z>>z{{z}}filenamezFormato no soportado: r$   r%   r&   )r   r   	file_pathr$   r%   r&   uU   El Word se generó pero no se pudo guardar el formulario en la ficha del estudiante: r?   zerror desconocido)r>   r?   rR   r-   successzDocumento generado y guardado.)r>   r?   rR   
documentIddocumentName
formatType	studentIdfamilyReportId)'storage	files_dirtemplate_pathresolveis_filer   intr   r   r   r   r	   mkdirgetreplaceformat_typeloweruuiduuid4hex_FAMILIA_DOCUMENT_IDr   shutilcopy2r   fill_docx_formstrlist_WORD_PLACEHOLDERSr   items_generate_pdf_from_templater   store
isinstancedictr   r   document_name)r   templater   replacementstemplate_absstudent_ctx
output_dirsafe_studentextrR   output_pathresulttag_mapkeyvaluevalfolder_resultfamily_report_id	fr_results                      r   generate_and_save_documentr   M   s    %%'(*@*@@IIKL!!!.QRR"23x7K7K3LMK3x33455>|Yh(()H4zAJTD1OO$67G<PPQTVYZL



$
$
&C(../qAdjjl>N>NrPQ>R=SSTUXTYZH'K
f}x##$(<<* +	F LL3#22K K '+,>'?04F zz(#w.}[7Q7Q%W ::h7*M +	"$&,,.JC % 1#e*rC$'bRL!"%auAJ$'bRL!(+d3%t$% /  ;;$$%
O
 ::h7*M::j)5X!0Fse.LMMO)),,-//+.//+.OOM2 * M -&&=+<+<X+F'+Q#'
8 $884'	
	 =="g-!''0}}Y@S'T&UW %  %==.$R):):4)@BRS 3** ..***	 	r   c                    [        U R                  5      nU(       d  gU Vs/ s H  nSU 3PM
     nnSR                  U5      $ s  snf )Nz)No hay campos detectados en la plantilla.z- 
)r   detected_fieldsjoin)ru   fieldsfieldliness       r   build_fields_promptr      sF    h667F:'-.ver%\vE.99U /s   Ar   )r   r   r   r_   r   z
int | Nonereturndict[str, Any])r   r   r   r_   r   r   )
r   r   ru   r
   r   r_   rv   zdict[str, str]r   r   )ru   r
   r   rl   ))__doc__
__future__r   ri   re   pathlibr   typingr   sqlalchemy.ormr   #app.backend.classes.documents_classr   /app.backend.classes.student_document_file_classr   app.backend.core.configr	   (app.backend.db.models.agent_v2_documentsr
   )app.backend.utils.agent_v2_familia_pie360r   r   r   r   app.backend.utilsr   rZ   'app.backend.utils.agent_v2_familia_fillr   r   .app.backend.utils.agent_v2_family_report_storer   r   -app.backend.utils.agent_v2_template_inspectorr   rh   rn   r   r   r   r    r   r   <module>r      s    [ "     " > G , Q  : X K*  2Djj*j j !	j
 jZr   