VentaBoletos/AdminTicket/MVC/controlador/VentaBoletosController.java

107 lines
3.6 KiB
Java

package controlador;
import modelo.*;
import vista.VentaBoletosView;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class VentaBoletosController {
private VentaBoletosView vista;
private Database database;
private List<JButton> botonesAsientos;
public VentaBoletosController(VentaBoletosView vista, Database database) {
this.vista = vista;
this.database = database;
this.botonesAsientos = new ArrayList<>();
cargarAsientos();
agregarListeners();
}
private void cargarAsientos() {
try {
Connection conexion = database.getConexion();
Statement stmt = conexion.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM asientos");
while (rs.next()) {
int numeroAsiento = rs.getInt("numero_asiento");
boolean disponible = rs.getBoolean("disponible");
JButton btnAsiento = new JButton(String.valueOf(numeroAsiento));
btnAsiento.setEnabled(disponible);
btnAsiento.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
venderAsiento(numeroAsiento);
}
});
botonesAsientos.add(btnAsiento);
vista.agregarBotonAsiento(btnAsiento);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private void venderAsiento(int numeroAsiento) {
try {
Connection conexion = database.getConexion();
PreparedStatement pstmt = conexion.prepareStatement("UPDATE asientos SET disponible = FALSE WHERE numero_asiento = ?");
pstmt.setInt(1, numeroAsiento);
pstmt.executeUpdate();
pstmt = conexion.prepareStatement("INSERT INTO ventas (fecha_venta, numero_asiento, precio) VALUES (NOW(), ?, ?)");
pstmt.setInt(1, numeroAsiento);
pstmt.setDouble(2, 100.00); // Precio fijo por simplicidad
pstmt.executeUpdate();
vista.mostrarMensaje("Boleto vendido: Asiento " + numeroAsiento);
actualizarBotones();
} catch (SQLException e) {
e.printStackTrace();
}
}
private void actualizarBotones() {
for (JButton btn : botonesAsientos) {
btn.setEnabled(false);
}
vista.actualizarBotones();
}
private void generarReporte() {
try {
Connection conexion = database.getConexion();
Statement stmt = conexion.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM ventas");
StringBuilder reporte = new StringBuilder("Reporte de Ventas:\n");
while (rs.next()) {
reporte.append("Fecha: ").append(rs.getTimestamp("fecha_venta")).append(", ");
reporte.append("Asiento: ").append(rs.getInt("numero_asiento")).append(", ");
reporte.append("Precio: $").append(rs.getDouble("precio")).append("\n");
}
vista.mostrarMensaje(reporte.toString());
} catch (SQLException e) {
e.printStackTrace();
}
}
private void agregarListeners() {
vista.getBtnGenerarReporte().addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
generarReporte();
}
});
}
}