a
    0i{3                     @   sZ   d dl mZmZmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlZdddZdS )	    )jsonifyrender_templaterequest	send_filesessionafter_this_request)Mail)get_tasks_list)FormularioPDFServiceNc                 C   s4   | j ddgddd }| j ddgddd }d	S )
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               
   S   sb   zt  } t| dfW S  ty\ } z0td|  tt|g ddfW  Y d}~S d}~0 0 dS )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e r   N/var/www/html/src/App/Operaciones_Module/Ingenieria/Cotiz/CotizFormQueryIng.pylist_cotiz_tasks   s    z3funcion_CotizFormQueryIng.<locals>.list_cotiz_tasksz0/Operaciones_Module/Ingenieria/Cotiz/generar-pdfc                     s  t jd} | sdS t jdd dk}t jdd dk}td td td td|   td	|  td
|  tdtdd  td z0tj| d||d}|std|   d|  ddfW S |d r*tj	
|d r*|d }tj	|}tj	| d}td|  n6|d }|d  d| dd d}d}td|  t fdd}t|d }| }	W d   n1 s0    Y  d!d"lm}
 |
|	}|d! t||d#|d$W S  ty } zd!dl}| }t  td td% td td&|   td'|  t  td( t| td d)|  d*t|j d+t| d,| d-	d.fW  Y d}~S d}~0 0 dS )/u  
        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  Z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
directorioZformulario_-_z.pdfzapplication/pdfu   📄 Enviando PDF: c              
      sh   z0ddl }tj r.|  td   W n2 tyb } ztd|  W Y d}~n
d}~0 0 | S )u   
                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   Zdirectorio_eliminarr   r   eliminar_archivos_temporales   s    
$z_funcion_CotizFormQueryIng.<locals>.generar_pdf_formulario.<locals>.eliminar_archivos_temporales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
   Zgenerar_pdf_con_adjuntosr%   r&   r'   basenamedirnamereplacer   openreadior-   seekr   r   	traceback
format_exctype__name__r   )r   r   r   	resultadoZarchivo_enviarZnombre_descargar.   r+   fZarchivo_bytesr-   Zarchivo_bufferr   r;   Zerror_detailr   r*   r   generar_pdf_formulario+   s    (
0126=z9funcion_CotizFormQueryIng.<locals>.generar_pdf_formularioN)route)appmailr   rA   r   r   r   funcion_CotizFormQueryIng   s    
rE   )N)flaskr   r   r   r   r   r   
flask_mailr   Z?Consultas_SQL.Operaciones.Ingenieria.Cotiz.CotizFormQueryIngSQLr	   Z<App.Operaciones_Module.Ingenieria.Cotiz.FormularioPDFServicer
   r%   rE   r   r   r   r   <module>   s
    