
    i{3                     Z    S SK JrJrJrJrJrJr  S SKJr  S SK	J
r
  S SKJr  S SKrSS jrg)    )jsonifyrender_templaterequest	send_filesessionafter_this_request)Mail)get_tasks_list)FormularioPDFServiceNc                 `    U R                  SS/S9S 5       nU R                  SS/S9S 5       ng)u   
Agrupa las rutas para el módulo de consulta de Tareas de Cotización.
(Se añade 'mail=None' para mantener consistencia con otros módulos
como AccessDistributors, aunque no se use aquí).
z)/Operaciones_Module/Ingenieria/Cotiz/listGET)methodsc                       [        5       n [        U 5      S4$ ! [         a1  n[        SU 35        [        [	        U5      / S.5      S4s SnA$ SnAff = f)z
SIRVE LOS DATOS A JAVASCRIPT (JSON).
Esta es la ruta que el JavaScript llama (fetch) para llenar la tabla.
Debe coincidir exactamente con la ruta en CotizFormQueryIng.js.
   z:[Error en ruta /Operaciones_Module/Ingenieria/Cotiz/list] )errordata  N)r
   r   	Exceptionprintstr)taskses     xC:\Users\victor.barrera\Documents\proyectos\elepV3\Elep\src\App\Operaciones_Module\Ingenieria\Cotiz\CotizFormQueryIng.pylist_cotiz_tasks3funcion_CotizFormQueryIng.<locals>.list_cotiz_tasks   sY    		?"$E 5>3&& 	?NqcRSSVR893>>	?s    
A&A	AAz0/Operaciones_Module/Ingenieria/Cotiz/generar-pdfc            
      P  ^ [         R                  R                  S5      n U (       d  g[         R                  R                  SS5      R                  5       S:H  n[         R                  R                  SS5      R                  5       S:H  n[	        S5        [	        S5        [	        S5        [	        SU  35        [	        S	U 35        [	        S
U 35        [	        S[
        R                  " SS5       35        [	        S5         [        R                  " U SUUS9nU(       d  [	        SU  35        SU  S3S4$ US   (       a{  [        R                  R                  US   5      (       aT  US   n[        R                  R                  U5      n[        R                  R                  U5      mSn[	        SU 35        O0US   nUS   mSU R                  SS5       S3nSn[	        SU 35        [        U4S j5       n[        US5       nUR!                  5       n	SSS5        S S!KJn
  U
" W	5      nUR'                  S 5        [)        UUS"US#9$ ! , (       d  f       N9= f! [*         a  nS SKnUR/                  5       n[	        5         [	        S5        [	        S$5        [	        S5        [	        S%U  35        [	        S&U 35        [	        5         [	        S'5        [	        U5        [	        S5        S(U  S)[1        U5      R2                   S*[5        U5       S+U S,3	S-4s SnA$ SnAff = f).us  
Genera y descarga PDF de formulario con archivos adjuntos.

¿Por qué este endpoint?
- Centraliza la lógica de generación de PDFs
- Permite parámetros configurables (con/sin adjuntos, con/sin ZIP)
- Retorna el archivo directamente para descarga inmediata

Parámetros URL (query params):
    - form_id: ID del formulario (REQUERIDO) - Ejemplo: '1002-1-FormGral'
    - adjuntos: 'true'|'false' - Incluir archivos adjuntos (default: true)
    - zip: 'true'|'false' - Crear archivo ZIP (default: true)

Ejemplos de uso:
    GET /Operaciones_Module/Ingenieria/Cotiz/generar-pdf?form_id=1002-1-FormGral
    GET /Operaciones_Module/Ingenieria/Cotiz/generar-pdf?form_id=1002-1-FormGral&adjuntos=false
    GET /Operaciones_Module/Ingenieria/Cotiz/generar-pdf?form_id=1002-1-FormGral&zip=false

Returns:
    File: PDF o ZIP para descarga directa
    HTML: Página de error si algo falla
form_id)u  
            <html>
                <body style="font-family: Arial; padding: 40px; text-align: center;">
                    <h1 style="color: #e74c3c;">⚠️ Parámetro Faltante</h1>
                    <p>Debe proporcionar el parámetro <code>form_id</code></p>
                    <p style="color: #666;">
                        Ejemplo: <code>/generar-pdf?form_id=1002-1-FormGral</code>
                    </p>
                    <hr style="margin: 30px 0;">
                    <button onclick="history.back()" style="padding: 10px 20px; font-size: 16px;">
                        ← Regresar
                    </button>
                </body>
            </html>
            i  adjuntostruezipzP================================================================================u%   🚀 ENDPOINT: generar_pdf_formulariou   📋 FormID solicitado: u   📎 Incluir adjuntos: u   📦 Crear ZIP: u   👤 UserID: user_idzNo autenticadoN)r   nombre_archivoincluir_adjuntos	crear_zipu   ❌ FormID no encontrado: u  
                <html>
                    <body style="font-family: Arial; padding: 40px; text-align: center;">
                        <h1 style="color: #e74c3c;">❌ FormID No Encontrado</h1>
                        <p>No se encontró el FormID: <strong>u  </strong></p>
                        <p style="color: #666;">
                            El FormID no existe en la base de datos o no tiene datos asociados.
                        </p>
                        <hr style="margin: 30px 0;">
                        <h3>💡 Sugerencias:</h3>
                        <ul style="text-align: left; max-width: 600px; margin: 0 auto;">
                            <li>Verifica que el FormID sea correcto</li>
                            <li>Revisa la consola del servidor para más detalles</li>
                            <li>Contacta al administrador del sistema</li>
                        </ul>
                        <br>
                        <button onclick="history.back()" style="padding: 10px 20px; font-size: 16px;">
                            ← Regresar
                        </button>
                    </body>
                </html>
                i  zapplication/zipu   📦 Enviando ZIP: pdf
directorioformulario_-_z.pdfzapplication/pdfu   📄 Enviando PDF: c                    >  SSK n[        R                  R                  T5      (       a  UR	                  T5        [        ST 35        U $ ! [         a  n[        SU 35         SnAU $ SnAff = f)uh   
Se ejecuta DESPUÉS de enviar el archivo al cliente
Elimina la carpeta temporal con todos los archivos
r   Nu   🗑️  Carpeta eliminada: u.   ⚠️  No se pudo eliminar carpeta temporal: )shutilospathexistsrmtreer   r   )responser+   r   directorio_eliminars      r   eliminar_archivos_temporales_funcion_CotizFormQueryIng.<locals>.generar_pdf_formulario.<locals>.eliminar_archivos_temporales   sr    P!ww~~&9::&9: <=P<QRS
   ! PJ1#NOOPs   AA 
A/A**A/rbr   )BytesIOT)mimetypeas_attachmentdownload_nameu   ❌ ERROR CRÍTICO EN ENDPOINTzFormID: zError: zStack trace completo:u  
            <html>
                <head>
                    <title>Error - Sistema IGSA</title>
                    <style>
                        body {
                            font-family: 'Courier New', monospace;
                            padding: 40px;
                            background: #1e1e1e;
                            color: #d4d4d4;
                        }
                        .error-box {
                            background: #252526;
                            padding: 20px;
                            border-radius: 5px;
                            border-left: 4px solid #f48771;
                            margin: 20px 0;
                        }
                        .error-title {
                            color: #f48771;
                            font-size: 24px;
                            margin-bottom: 20px;
                        }
                        .error-details {
                            background: #1e1e1e;
                            padding: 15px;
                            border-radius: 3px;
                            overflow-x: auto;
                            margin-top: 15px;
                        }
                        button {
                            background: #0e639c;
                            color: white;
                            border: none;
                            padding: 10px 20px;
                            font-size: 16px;
                            cursor: pointer;
                            border-radius: 3px;
                            margin-top: 20px;
                        }
                        button:hover {
                            background: #1177bb;
                        }
                    </style>
                </head>
                <body>
                    <div class="error-box">
                        <div class="error-title">❌ Error del Sistema</div>
                        <p><strong>FormID solicitado:</strong> z@</p>
                        <p><strong>Tipo de error:</strong> z:</p>
                        <p><strong>Mensaje:</strong> z</p>
                        
                        <div class="error-details">
                            <strong>Stack Trace:</strong>
                            <pre>u   </pre>
                        </div>
                        
                        <button onclick="history.back()">← Regresar</button>
                    </div>
                </body>
            </html>
            r   )r   argsgetlowerr   r   r   generar_pdf_con_adjuntosr,   r-   r.   basenamedirnamereplacer   openreadior5   seekr   r   	traceback
format_exctype__name__r   )r   r#   r$   	resultadoarchivo_enviarnombre_descargar6   r2   farchivo_bytesr5   archivo_bufferr   rD   error_detailr1   s                  @r   generar_pdf_formulario9funcion_CotizFormQueryIng.<locals>.generar_pdf_formulario+   s2   < ,,""9- " #<<++J?EEG6QLL$$UF399;vE	 	h56h(	23'(8'9:; ,-gkk)5EFGHIhy	,EE#!1#	I 27)<=? @Gi H	* + : BGGNN9U3C$D$D!*5!1"$''"2"2>"B&(ggoon&E#,+O+<=> "+5!1&/&=#$/S0I/J$"O,+O+<=>      , nd+q ! , #$]3N"!"-	  ,+&  M	$//1LG(O23(OHWI&'GA3- G)*,(O0@` AHy I<<@G<L<L;M N669!fX >" #/ 0m=z {= =!M	s>   3I 9CI 	I2I 
II 
L%(B2L L% L%N)route)appmailr   rO   s       r   funcion_CotizFormQueryIngrT      sN     	YY:UGYL? M?, 	YYAE7YSA TA    )N)flaskr   r   r   r   r   r   
flask_mailr	   ?Consultas_SQL.Operaciones.Ingenieria.Cotiz.CotizFormQueryIngSQLr
   <App.Operaciones_Module.Ingenieria.Cotiz.FormularioPDFServicer   r,   rT    rU   r   <module>r[      s     \ [  Z ] 	_rU   