Tul xxx Tul
User / IP
:
216.73.216.217
Host / Server
:
45.84.207.204 / aircan.me
System
:
Linux lt-bnk-web1726.main-hosting.eu 5.14.0-611.36.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 3 11:23:52 EST 2026 x86_64
Command
|
Upload
|
Create
Mass Deface
|
Jumping
|
Symlink
|
Reverse Shell
Ping
|
Port Scan
|
DNS Lookup
|
Whois
|
Header
|
cURL
:
/
home
/
u931257429
/
domains
/
aircan.me
/
public_html
/
app
/
views
/
cotizaciones
/
Viewing: pdf.php
<?php $cotizacion = $cotizacion ?? []; $items = $items ?? []; $logo = $logo ?? ''; // Configurar headers para PDF header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Cotización <?= htmlspecialchars($cotizacion['numero']) ?></title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-size: 12px; line-height: 1.6; color: #333; padding: 40px; background: #fff; } .container { max-width: 800px; margin: 0 auto; background: #fff; } .header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 40px; padding-bottom: 20px; border-bottom: 3px solid #4361ee; } .logo { max-width: 200px; max-height: 80px; } .company-info { text-align: right; } .company-info h1 { font-size: 28px; color: #4361ee; margin-bottom: 5px; } .company-info p { font-size: 11px; color: #666; margin: 2px 0; } .cotizacion-info { background: #f8f9fa; padding: 20px; border-radius: 8px; margin-bottom: 30px; } .cotizacion-info h2 { font-size: 20px; color: #4361ee; margin-bottom: 15px; } .info-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; } .info-item { margin-bottom: 8px; } .info-label { font-weight: 600; color: #666; font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; } .info-value { font-size: 13px; color: #333; margin-top: 2px; } .estado-badge { display: inline-block; padding: 4px 12px; border-radius: 20px; font-size: 11px; font-weight: 600; text-transform: uppercase; } .estado-pendiente { background: #fff3cd; color: #856404; } .estado-aprobada { background: #d4edda; color: #155724; } .estado-rechazada { background: #f8d7da; color: #721c24; } .estado-vencida { background: #f8d7da; color: #721c24; } .estado-convertida { background: #d1ecf1; color: #0c5460; } .items-table { width: 100%; border-collapse: collapse; margin-bottom: 30px; } .items-table thead { background: #4361ee; color: #fff; } .items-table th { padding: 12px; text-align: left; font-weight: 600; font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; } .items-table td { padding: 12px; border-bottom: 1px solid #e9ecef; } .items-table tbody tr:hover { background: #f8f9fa; } .text-right { text-align: right; } .text-center { text-align: center; } .totals-section { margin-top: 30px; display: flex; justify-content: flex-end; } .totals-box { width: 300px; background: #f8f9fa; padding: 20px; border-radius: 8px; } .total-row { display: flex; justify-content: space-between; padding: 8px 0; font-size: 13px; } .total-row.subtotal { border-bottom: 1px solid #dee2e6; } .total-row.final { border-top: 2px solid #4361ee; margin-top: 10px; padding-top: 15px; font-size: 18px; font-weight: 700; color: #4361ee; } .notes-section { margin-top: 40px; padding: 20px; background: #f8f9fa; border-radius: 8px; } .notes-section h3 { font-size: 14px; color: #4361ee; margin-bottom: 10px; } .notes-section p { font-size: 11px; line-height: 1.8; color: #666; } .footer { margin-top: 50px; padding-top: 20px; border-top: 2px solid #e9ecef; text-align: center; font-size: 10px; color: #999; } @media print { body { padding: 20px; } .no-print { display: none; } } .print-button { position: fixed; top: 20px; right: 20px; padding: 12px 24px; background: #4361ee; color: #fff; border: none; border-radius: 6px; font-size: 14px; font-weight: 600; cursor: pointer; box-shadow: 0 4px 12px rgba(67, 97, 238, 0.3); z-index: 1000; } .print-button:hover { background: #3a56d4; } </style> </head> <body> <button class="print-button no-print" onclick="window.print()"> Imprimir / Guardar PDF </button> <div class="container"> <!-- Header con Logo --> <div class="header"> <div> <?php if (!empty($logo)): ?> <?php $logoPath = (strpos($logo, 'http') === 0) ? $logo : BASE_URL . '/' . $logo; ?> <img src="<?= $logoPath ?>" alt="Logo" class="logo"> <?php else: ?> <h1 style="color: #4361ee; font-size: 32px;"><?= APP_NAME ?></h1> <?php endif; ?> </div> <div class="company-info"> <h1>COTIZACIÓN</h1> <p><strong><?= htmlspecialchars($cotizacion['numero']) ?></strong></p> <p>Fecha: <?= date('d/m/Y', strtotime($cotizacion['fecha_emision'])) ?></p> </div> </div> <!-- Información de la Cotización --> <div class="cotizacion-info"> <h2>Información General</h2> <div class="info-grid"> <div> <div class="info-item"> <div class="info-label">Cliente</div> <div class="info-value"> <?php if (!empty($cotizacion['cliente_nombre'])): ?> <strong><?= htmlspecialchars(trim($cotizacion['cliente_nombre'] . ' ' . $cotizacion['cliente_apellido'])) ?></strong> <?php else: ?> <em>Sin cliente asignado</em> <?php endif; ?> </div> </div> <?php if (!empty($cotizacion['cliente_email'])): ?> <div class="info-item"> <div class="info-label">Email</div> <div class="info-value"><?= htmlspecialchars($cotizacion['cliente_email']) ?></div> </div> <?php endif; ?> <?php if (!empty($cotizacion['cliente_telefono'])): ?> <div class="info-item"> <div class="info-label">Teléfono</div> <div class="info-value"><?= htmlspecialchars($cotizacion['cliente_telefono']) ?></div> </div> <?php endif; ?> </div> <div> <div class="info-item"> <div class="info-label">Fecha de Emisión</div> <div class="info-value"><?= date('d/m/Y', strtotime($cotizacion['fecha_emision'])) ?></div> </div> <div class="info-item"> <div class="info-label">Válida Hasta</div> <div class="info-value"><?= date('d/m/Y', strtotime($cotizacion['fecha_vencimiento'])) ?></div> </div> <div class="info-item"> <div class="info-label">Estado</div> <div class="info-value"> <span class="estado-badge estado-<?= $cotizacion['estado'] ?>"> <?= ucfirst($cotizacion['estado']) ?> </span> </div> </div> </div> </div> </div> <!-- Tabla de Items --> <table class="items-table"> <thead> <tr> <th style="width: 50px;">#</th> <th>Descripción</th> <th class="text-center" style="width: 80px;">Cant.</th> <th class="text-right" style="width: 120px;">Precio Unit.</th> <th class="text-right" style="width: 120px;">Subtotal</th> </tr> </thead> <tbody> <?php foreach ($items as $index => $item): ?> <tr> <td class="text-center"><?= $index + 1 ?></td> <td> <strong><?= htmlspecialchars($item['descripcion']) ?></strong> <?php if ($item['tipo'] === 'servicio' && !empty($item['servicio_nombre'])): ?> <br><small style="color: #666;">Servicio: <?= htmlspecialchars($item['servicio_nombre']) ?></small> <?php elseif ($item['tipo'] === 'sistema' && !empty($item['sistema_nombre'])): ?> <br><small style="color: #666;">Sistema: <?= htmlspecialchars($item['sistema_nombre']) ?></small> <?php endif; ?> </td> <td class="text-center"><?= $item['cantidad'] ?></td> <td class="text-right">$<?= number_format(floatval($item['precio_unitario']), 2) ?></td> <td class="text-right"><strong>$<?= number_format(floatval($item['subtotal']), 2) ?></strong></td> </tr> <?php endforeach; ?> </tbody> </table> <!-- Totales --> <div class="totals-section"> <div class="totals-box"> <div class="total-row subtotal"> <span>Subtotal:</span> <strong>$<?= number_format(floatval($cotizacion['subtotal']), 2) ?></strong> </div> <?php if (floatval($cotizacion['descuento']) > 0): ?> <div class="total-row"> <span>Descuento:</span> <strong style="color: #dc3545;">-$<?= number_format(floatval($cotizacion['descuento']), 2) ?></strong> </div> <?php endif; ?> <?php if (floatval($cotizacion['impuesto']) > 0): ?> <div class="total-row"> <span>Impuesto:</span> <strong>$<?= number_format(floatval($cotizacion['impuesto']), 2) ?></strong> </div> <?php endif; ?> <div class="total-row final"> <span>TOTAL:</span> <span>$<?= number_format(floatval($cotizacion['total']), 2) ?></span> </div> </div> </div> <!-- Términos y Condiciones --> <?php if (!empty($cotizacion['terminos'])): ?> <div class="notes-section"> <h3>Términos y Condiciones</h3> <p><?= nl2br(htmlspecialchars($cotizacion['terminos'])) ?></p> </div> <?php endif; ?> <!-- Notas --> <?php if (!empty($cotizacion['notas'])): ?> <div class="notes-section" style="margin-top: 20px;"> <h3>Notas</h3> <p><?= nl2br(htmlspecialchars($cotizacion['notas'])) ?></p> </div> <?php endif; ?> <!-- Footer --> <div class="footer"> <p>Cotización generada el <?= date('d/m/Y H:i') ?></p> <p><?= APP_NAME ?> - Sistema de Gestión</p> </div> </div> <script> // Auto-print cuando se carga la página (opcional) // window.onload = function() { window.print(); } </script> </body> </html>
Coded With 💗 by
0x6ick