diff --git a/corregido/controlador/asientos.php b/corregido/controlador/asientos.php
index 3d770e6..eb415b3 100644
--- a/corregido/controlador/asientos.php
+++ b/corregido/controlador/asientos.php
@@ -10,29 +10,61 @@ require_once 'VendedorController.php';
 
 header('Content-Type: application/json');
 
-// Conexión a base de datos
-$db = new BaseDatos('localhost:3306', 'root', 'password', 'boletos_db');
+try {
+    // Conexión a base de datos
+    $db = new BaseDatos('localhost', 'root', 'password', 'boletos_db');
 
-// Inicializar el controlador
-$vendedorController = new VendedorController($db);
+    // Inicializar el controlador
+    $vendedorController = new VendedorController($db);
 
-// Cargar sala (solo hay una sala con id=1)
-$sala = $vendedorController->cargarSala(1);
+    // Cargar sala (solo hay una sala con id=1)
+    $sala = $vendedorController->cargarSala(1);
 
-// Si no hay sala, podríamos inicializarla para desarrollo
-if (!$sala) {
-    $sala = new Sala(1, 'Sala Principal');
-    $sala->inicializarBoletos(10, 15, 50.00); // 10 filas, 15 asientos por fila, $50 cada uno
-}
+    // Si no hay sala, podríamos inicializarla para desarrollo
+    if (!$sala) {
+        $sala = new Sala(1, 'Sala Principal');
+        $sala->inicializarBoletos(10, 15, 50.00); // 10 filas, 15 asientos por fila, $50 cada uno
+    }
 
-// Obtener mapa de asientos
-$mapaAsientos = $vendedorController->mostrarDisponibilidadAsientos();
+    // Obtener parámetros de fecha
+    $fechaInicio = isset($_GET['fechaInicio']) ? $_GET['fechaInicio'] : null;
+    $fechaFin = isset($_GET['fechaFin']) ? $_GET['fechaFin'] : null;
 
-// Preparar respuesta
-$response = [
-    'success' => true,
-    'mapa' => $mapaAsientos,
-    'precio' => 50.00 // Agregamos el precio de los boletos a la respuesta
-];
+    // Obtener mapa de asientos
+    $mapaAsientos = $vendedorController->mostrarDisponibilidadAsientos();
 
-echo json_encode($response);
\ No newline at end of file
+    // Filtrar por fecha si se proporcionan las fechas
+    if ($fechaInicio && $fechaFin) {
+        $query = "SELECT b.id, b.fila, b.numero, b.precio, b.estado
+                  FROM boletos b
+                  JOIN venta_boletos vb ON b.id = vb.id_boleto
+                  JOIN ventas v ON vb.id_venta = v.id
+                  WHERE DATE(v.fecha) BETWEEN ? AND ?";
+        $stmt = $db->getConexion()->prepare($query);
+        $stmt->bind_param("ss", $fechaInicio, $fechaFin);
+        $stmt->execute();
+        $result = $stmt->get_result();
+
+        $mapaAsientos = [];
+        while ($fila = $result->fetch_assoc()) {
+            $mapaAsientos[$fila['fila']][$fila['numero']] = $fila['estado'];
+        }
+    }
+
+    // Preparar respuesta
+    $response = [
+        'success' => true,
+        'mapa' => $mapaAsientos,
+        'precio' => 50.00 // Agregamos el precio de los boletos a la respuesta
+    ];
+
+    echo json_encode($response);
+
+} catch (Exception $e) {
+    // Manejar errores y devolver una respuesta JSON
+    $response = [
+        'success' => false,
+        'message' => 'Error al obtener el mapa de asientos: ' . $e->getMessage()
+    ];
+    echo json_encode($response);
+}
\ No newline at end of file
diff --git a/corregido/modelo/BaseDatos.php b/corregido/modelo/BaseDatos.php
index c27b5a1..c7b4590 100644
--- a/corregido/modelo/BaseDatos.php
+++ b/corregido/modelo/BaseDatos.php
@@ -87,7 +87,15 @@ class BaseDatos {
             return false;
         }
     }
-    
+
+    public function getConexion() {
+        return $this->conexion;
+    }
+
+    public function __destruct() {
+        $this->conexion->close();
+    }
+
     public function cerrarConexion() {
         $this->conexion->close();
     }
diff --git a/corregido/vista/index.html b/corregido/vista/index.html
index f88d23a..4fd0efa 100644
--- a/corregido/vista/index.html
+++ b/corregido/vista/index.html
@@ -99,6 +99,22 @@
             <canvas id="graficoLibres"></canvas>
         </div>
     </div>
+
+    <div class="row mt-4">
+        <div class="col-md-6">
+            <label for="fechaInicio">Fecha de Inicio:</label>
+            <input type="date" id="fechaInicio" class="form-control">
+        </div>
+        <div class="col-md-6">
+            <label for="fechaFin">Fecha de Fin:</label>
+            <input type="date" id="fechaFin" class="form-control">
+        </div>
+    </div>
+    <div class="row mt-2">
+        <div class="col-md-12">
+            <button id="btnFiltrar" class="btn btn-primary">Filtrar</button>
+        </div>
+    </div>
     
     <script src="js/index.js"></script>
 </body>
diff --git a/corregido/vista/js/index.js b/corregido/vista/js/index.js
index 69b1fcf..ad156dd 100644
--- a/corregido/vista/js/index.js
+++ b/corregido/vista/js/index.js
@@ -50,20 +50,28 @@ document.addEventListener('DOMContentLoaded', function() {
     // Agregar manejador para el formulario
     const formulario = document.getElementById('formularioVenta');
     formulario.addEventListener('submit', validarYEnviarFormulario);
+
+    // Agregar manejador para el botón de filtrar
+    const btnFiltrar = document.getElementById('btnFiltrar');
+    btnFiltrar.addEventListener('click', filtrarPorFecha);
     
     // Función para cargar el mapa de asientos desde la API
     async function cargarMapaAsientos() {
         try {
             const response = await fetch('../controlador/asientos.php');
-            const data = await response.json();
-            
+            const responseText = await response.text(); // Capturar respuesta como texto para depurar
+            console.log('Respuesta del servidor:', responseText);
+
+            // Intentar parsear como JSON
+            const data = JSON.parse(responseText);
+
             if (!data.success) {
-                mostrarMensaje('Error al cargar el mapa de asientos', 'error');
+                mostrarMensaje('Error al cargar el mapa de asientos: ' + data.message, 'error');
                 return;
             }
-            
+
             renderizarMapaAsientos(data.mapa);
-            actualizarGraficos(data.mapa); // Asegúrate de llamar a actualizarGraficos aquí
+            actualizarGraficos(data.mapa, data.precio); // Asegúrate de llamar a actualizarGraficos aquí
         } catch (error) {
             console.error('Error al cargar el mapa de asientos:', error);
             mostrarMensaje('Error de conexión con el servidor', 'error');
@@ -246,14 +254,16 @@ document.addEventListener('DOMContentLoaded', function() {
     }
 
     // Función para actualizar los gráficos
-    function actualizarGraficos(mapa) {
+    function actualizarGraficos(mapa, precioBoleto) {
         let totalVendidos = 0;
         let totalLibres = 0;
+        let totalVenta = 0;
         
         Object.values(mapa).forEach(asientosEnFila => {
             Object.values(asientosEnFila).forEach(estado => {
                 if (estado === 'vendido') {
                     totalVendidos++;
+                    totalVenta += precioBoleto; // Sumar el precio del boleto vendido
                 } else if (estado === 'disponible') {
                     totalLibres++;
                 }
@@ -265,5 +275,58 @@ document.addEventListener('DOMContentLoaded', function() {
         
         graficoVendidos.update();
         graficoLibres.update();
+
+        // Mostrar la suma total de boletos vendidos debajo del gráfico de asientos vendidos
+        const totalVendidosElement = document.getElementById('totalVendidos');
+        if (totalVendidosElement) {
+            totalVendidosElement.textContent = `Total boletos vendidos: ${totalVendidos}`;
+        } else {
+            const totalVendidosLabel = document.createElement('p');
+            totalVendidosLabel.id = 'totalVendidos';
+            totalVendidosLabel.textContent = `Total boletos vendidos: ${totalVendidos}`;
+            graficoVendidos.canvas.parentNode.appendChild(totalVendidosLabel);
+        }
+
+        // Mostrar la suma total vendida debajo del gráfico de asientos vendidos
+        const totalVentaElement = document.getElementById('totalVentaDia');
+        if (totalVentaElement) {
+            totalVentaElement.textContent = `Total vendido: $${totalVenta.toFixed(2)}`;
+        } else {
+            const totalVentaLabel = document.createElement('p');
+            totalVentaLabel.id = 'totalVentaDia';
+            totalVentaLabel.textContent = `Total vendido: $${totalVenta.toFixed(2)}`;
+            graficoVendidos.canvas.parentNode.appendChild(totalVentaLabel);
+        }
+    }
+
+    // Función para filtrar los datos por fecha
+    async function filtrarPorFecha() {
+        const fechaInicio = document.getElementById('fechaInicio').value;
+        const fechaFin = document.getElementById('fechaFin').value;
+
+        if (!fechaInicio || !fechaFin) {
+            mostrarMensaje('Por favor, seleccione un rango de fechas válido.', 'warning');
+            return;
+        }
+
+        try {
+            const response = await fetch(`../controlador/asientos.php?fechaInicio=${fechaInicio}&fechaFin=${fechaFin}`);
+            const responseText = await response.text(); // Capturar respuesta como texto para depurar
+            console.log('Respuesta del servidor:', responseText);
+
+            // Intentar parsear como JSON
+            const data = JSON.parse(responseText);
+
+            if (!data.success) {
+                mostrarMensaje('Error al filtrar los datos por fecha', 'error');
+                return;
+            }
+
+            renderizarMapaAsientos(data.mapa); // Asegúrate de renderizar el mapa de asientos filtrado
+            actualizarGraficos(data.mapa, data.precio);
+        } catch (error) {
+            console.error('Error al filtrar los datos por fecha:', error);
+            mostrarMensaje('Error de conexión con el servidor', 'error');
+        }
     }
 });
\ No newline at end of file