/**
* Aplicativo que permite registrar, buscar y eliminar vehiculos de la base de
* datos de un parqueadero.
*
* @author Catalina Cano 20121020079
* @author Pablo Dorado 20121020036
* @author Esteban Arias 20121020087
* @author Camilo Nuñez 20121020074
*/
package Presentacion;
import Datos.ProcesoBD;
import java.sql.ResultSet;
import java.util.Calendar;
/**
* Clase que representa al modelo del sistema en ella se controlan todas las
* acciones de la aplicacion
*/
public class Modelo {
//Atributos
private VentanaPrincipal ventanaPrincipal;
private VentanaBuscar ventanaBuscar;
private VentanaEliminar ventanaEliminar;
private VentanaRegistro ventanaRegistro;
private VentanaOpcionesDeParqueo ventanaOpcionesDeParqueo;
private VentanaDescuentos ventanaDescuentos;
private VentanaMapa1 ventanaMapa1;
private VentanaMapa2 ventanaMapa2;
private VentanaPropietarios ventanaPropietarios;
private VentanaRegistroPropietarios ventanaRegistroPropietarios;
private VentanaLogin ventanaLogin;
private VentanaDatosPropietarios ventanaDatosPropietarios;
private String fechaCompleta;
private VentanaInforme ventanaInforme;
//Atributo que representa la base de Datos (Operaciones sobre ella)
private ProcesoBD bd;
// Respuesta de la base de Datos
private ResultSet respuestaBD;
private String numeroFactura;
/**
* Constructor de la clase
*/
public Modelo() {
bd = new ProcesoBD();
ventanaBuscar = new VentanaBuscar(this);
ventanaDatosPropietarios = new VentanaDatosPropietarios(this);
ventanaDescuentos = new VentanaDescuentos(this);
ventanaEliminar = new VentanaEliminar(this);
ventanaInforme = new VentanaInforme(this);
ventanaLogin = new VentanaLogin(this);
ventanaMapa1 = new VentanaMapa1(this);
ventanaMapa2 = new VentanaMapa2(this);
ventanaOpcionesDeParqueo = new VentanaOpcionesDeParqueo(this);
ventanaPrincipal = new VentanaPrincipal(this);
ventanaPropietarios = new VentanaPropietarios(this);
ventanaRegistro = new VentanaRegistro(this);
ventanaRegistroPropietarios = new VentanaRegistroPropietarios(this);
}
/**
* Metodo que permite iniciar la aplicacion.
*/
public void iniciarAplicacion() {
getVentanaPrincipal().setVisible(true);
}
/**
* Metodo que permite obtener la ventana de descuentos
* @return - ventanaDescuentos
*/
public VentanaDescuentos getVentanaDescuentos() {
if (ventanaDescuentos == null) {
ventanaDescuentos = new VentanaDescuentos(this);
}
return ventanaDescuentos;
}
/**
* Metodo que permite obtener la ventana de propietarios
* @return - ventanaPropietarios
*/
public VentanaPropietarios getVentanaPropietarios() {
if (ventanaPropietarios == null) {
ventanaPropietarios = new VentanaPropietarios(this);
}
return ventanaPropietarios;
}
/**
* Metodo que permite obtener la ventana de los datos de los propietarios
* @return - ventanaDatosPropietarios
*/
public VentanaDatosPropietarios getVentanaDatosPropietarios() {
if (ventanaDatosPropietarios == null) {
ventanaDatosPropietarios = new VentanaDatosPropietarios(this);
}
return ventanaDatosPropietarios;
}
/**
* Metodo que permite obtener la ventana de un informe
* @return - ventanaInforme
*/
public VentanaInforme getVentanaInforme() {
if (ventanaInforme == null) {
ventanaInforme = new VentanaInforme(this);
}
return ventanaInforme;
}
/**
* Metodo que permite obtener la ventana principal
* @return - ventanaPrincipal
*/
public VentanaPrincipal getVentanaPrincipal() {
return ventanaPrincipal;
}
/**
* Metodo que permite obtener la ventana del login
* @return ventanaLogin
*/
public VentanaLogin getVentanaLogin() {
if (ventanaLogin == null) {
ventanaLogin = new VentanaLogin(this);
}
return ventanaLogin;
}
/**
* Metodo que permite obtener la ventana del mapa del 2o piso del parqueadero
* @return - ventanaMapa2
*/
public VentanaMapa2 getVentanaMapa2() {
if (ventanaMapa2 == null) {
ventanaMapa2 = new VentanaMapa2(this);
}
return ventanaMapa2;
}
/**
* Metodo que permite obtener la ventana del mapa del 1er piso del parqueadero
* @return - ventanaMapa1
*/
public VentanaMapa1 getVentanaMapa1() {
if (ventanaMapa1 == null) {
ventanaMapa1 = new VentanaMapa1(this);
}
return ventanaMapa1;
}
/**
* Metodo que permite obtener la ventana de registro
* @return ventanaRegistro
*/
public VentanaRegistro getVentanaRegistro() {
if (ventanaRegistro == null) {
ventanaRegistro = new VentanaRegistro(this);
}
return ventanaRegistro;
}
/**
* Metodo que permite obtener la ventana para el registro de los propietarios
* @return - ventanaRegistroPropietarios
*/
public VentanaRegistroPropietarios getVentanaRegistroPropietarios() {
if (ventanaRegistroPropietarios == null) {
ventanaRegistroPropietarios = new VentanaRegistroPropietarios(this);
}
return ventanaRegistroPropietarios;
}
/**
* Metodo que permite obtener la ventana de las opciones de parqueo
* @return - ventanaOpcionesDeParqueo
*/
public VentanaOpcionesDeParqueo getVentanaOpcionesDeParqueo() {
if (ventanaOpcionesDeParqueo == null) {
ventanaOpcionesDeParqueo = new VentanaOpcionesDeParqueo(this);
}
return ventanaOpcionesDeParqueo;
}
/**
* Metodo que permite obtener la ventana de busqueda
* @return ventanaBuscar
*/
public VentanaBuscar getVentanaBuscar() {
if (ventanaBuscar == null) {
ventanaBuscar = new VentanaBuscar(this);
}
return ventanaBuscar;
}
/**
* Metodo que permite obtener la ventana eliminar
* @return ventanaEliminar
*/
public VentanaEliminar getVentanaEliminar() {
if (ventanaEliminar == null) {
ventanaEliminar = new VentanaEliminar(this);
}
return ventanaEliminar;
}
/**
* Metodo que permite terminar la aplicacion
*/
public void terminar() {
System.exit(0);
}
/**
* Metodo que permite volver a la interfaz principal
*/
public void volver() {
getVentanaRegistroPropietarios().dispose();
getVentanaPropietarios().dispose();
getVentanaBuscar().dispose();
getVentanaEliminar().dispose();
getVentanaRegistro().dispose();
getVentanaOpcionesDeParqueo().dispose();
getVentanaMapa1().dispose();
getVentanaMapa2().dispose();
getVentanaPrincipal().setVisible(true);
}
/**
* Metodo que permite abrir la ventana de los descuentos
*/
public void abrirVentanaDescuentos() {
getVentanaBuscar().dispose();
getVentanaDescuentos();
getVentanaDescuentos().setVisible(true);
//getVentanaRegistro().setTxtFechaEntrada(ObtenerFecha());
}
/**
* Metodo que permite abrir la ventana de los propietarios
*/
public void abrirVentanaPropietarios() {
getVentanaMapa1().dispose();
getVentanaMapa2().dispose();
getVentanaOpcionesDeParqueo().dispose();
getVentanaPropietarios();
getVentanaPropietarios().setVisible(true);
//getVentanaRegistro().setTxtFechaEntrada(ObtenerFecha());
}
/**
* Metodo que permite abrir la ventana de los datos de los propietarios
*/
public void abrirVentanaDatosPropietarios() {
getVentanaLogin().dispose();
getVentanaDatosPropietarios();
getVentanaDatosPropietarios().setVisible(true);
}
/**
* Metodo que permite abrir la ventana para el registro
*/
public void abrirVentanaRegistro() {
getVentanaPrincipal().dispose();
getVentanaRegistro();
getVentanaRegistro().setVisible(true);
getVentanaRegistro().setTxtFechaEntrada(ObtenerFecha());
getVentanaRegistro().setTxtNumeroDeParqueadero("");
getVentanaRegistro().setTxtMarca(" ");
getVentanaRegistro().setTxtPisoDeParqueo("");
getVentanaRegistro().setTxtPlaca("");
getVentanaRegistro().setTxtTipoCliente("");
getVentanaRegistro().setTxtNumeroFactura("");
}
/**
* Metodo que permite abrir la ventana de busqueda
*/
public void abrirVentanaBusqueda() {
getVentanaPrincipal().dispose();
getVentanaBuscar();
ventanaBuscar.getTxtPlacaABuscar().setText(null);
ventanaBuscar.getTxtPlacaAMostrar().setText(null);
ventanaBuscar.getTxtHoraEntradaAMostrar().setText(null);
ventanaBuscar.getTxtHoraSalidaAMostrar().setText(null);
ventanaBuscar.getTxtMarcaAMostar().setText(null);
ventanaBuscar.getTxtTipoAMostrar().setText(null);
ventanaBuscar.getTxtTotalGenerado().setText(null);
ventanaBuscar.getTxtHoraSalidaAMostrar().setVisible(false);
ventanaBuscar.getTxtTituloHoraSalida().setVisible(false);
ventanaBuscar.getTxtTotal().setVisible(false);
ventanaBuscar.getTxtTotalGenerado().setVisible(false);
getVentanaBuscar().setVisible(true);
}
/**
* Metodo que permite abrir la ventana de eliminar
*/
public void abrirVentanaEliminar() {
getVentanaPrincipal().dispose();
getVentanaEliminar();
ventanaEliminar.getTxtHoraAMostrar().setText(null);
ventanaEliminar.getTxtPlacaABuscar().setText(null);
ventanaEliminar.getTxtPlacaAMostrar().setText(null);
ventanaEliminar.getTxtMarcaAMostar().setText(null);
ventanaEliminar.getTxtTipoAMostrar().setText(null);
getVentanaEliminar().setVisible(true);
}
/**
* Metodo que permite obtener la fecha en la cual se realiza el registro de
* un vehiculo
* @return fechaCompleta - fecha para la facturacion
*/
public String ObtenerFecha() {
String fecha;
Calendar cal = Calendar.getInstance();
fecha = String.valueOf(cal.get(Calendar.YEAR)); // anexa el año
fecha += (cal.get(Calendar.MONTH) < 10 ? "0" : "") + String.valueOf(cal.get(Calendar.MONTH));// anexa el mes
fecha += (cal.get(Calendar.DAY_OF_MONTH) < 10 ? "0" : "") + String.valueOf(cal.get(Calendar.DAY_OF_MONTH));// anexa el dia
fecha += (cal.get(Calendar.HOUR_OF_DAY) < 10 ? "0" : "") + String.valueOf(cal.get(Calendar.HOUR_OF_DAY)); // anexa la hora
fecha += (cal.get(Calendar.MINUTE) < 10 ? "0" : "") + String.valueOf(cal.get(Calendar.MINUTE)); // anexan los minutos
fecha += (cal.get(Calendar.SECOND) < 10 ? "0" : "") + String.valueOf(cal.get(Calendar.SECOND));// los segundos
fechaCompleta = "" + fecha.substring(0, 4) + "/" + fecha.substring(4, 6) + "/" + fecha.substring(6, 8) + " - " + fecha.substring(8, 10) + ":" + fecha.substring(10, 12);
return fechaCompleta;
}
/**
* Metodo que permite generar el cobro a un vehiculo
* @return cobro - el cobro que se le hara al vehiculo
*/
public int generarCobro() {
int cobro = 0;
cobro = 100;
ventanaBuscar.getModelo().enviarDatosVehiculoParticular(3, ventanaBuscar.getTxtPlacaABuscar().getText(), "", "", "", "", "", "", "", "", "", "");
volver();
/* System.out.println("COBRAR");
int cobro =70,horaEntrada = 0, horaSalida = 0, minutosEntrada = 0, minutosSalida = 0;
horaEntrada = Integer.parseInt(ventanaRegistro.getControlRegistro().GetHoraEntrada());*/
/* if(ventanaRegistro.getMenuTipoVehiculo().getSelectedItem().toString().equalsIgnoreCase("Automovil")){
cobro=(Integer.parseInt(obtenerMinutos())*70);
}else if (obtenerTipo().equalsIgnoreCase("Camioneta")){
cobro=(Integer.parseInt(obtenerMinutos())*70);
}else if (obtenerTipo().equalsIgnoreCase("Vehiculo de carga")){
cobro=(Integer.parseInt(obtenerMinutos())*150);
}
else if (obtenerTipo().equalsIgnoreCase("Motocicleta")){
cobro=(Integer.parseInt(obtenerMinutos())*50);
}*/
return cobro;
}
/**
* Metodo que permite obtener el tipo de vehiculo que fue registrado.
* @return tipo - tipo de vehiculo
*/
public String obtenerTipoVehiculo() {
String tipo;
tipo = ventanaRegistro.getMenuTipoVehiculo().getSelectedItem().toString();
return tipo;
}
/**
* Metodo permite enviar datos desde la interfaz a la clase OperacionesBD
* para poder hacer las modificaciones sobre la BD
* @param Comando
* @param placa - numero de placa del vehiculo particular
* @param tipo - tipo de vehiculo particular
* @param marca - marca del tipo de vehiculo
* @param horaEntrada - hora de entrada al centro comercial del vehiculo
*/
public void enviarDatosVehiculoParticular(int Comando, String placa, String tipo, String marca, String horaEntrada, String horaSalida, String tipoCliente, String pisoParqueo, String numeroDeParqueadero, String valorDescuento, String almacenDescuento, String numeroFactura) {
switch (Comando) {
//Caso 1, Insertar un registro a la base de datos
case 1:
bd.registrarVehiculoParticular(placa, tipo, marca, horaEntrada, horaSalida, tipoCliente, pisoParqueo, numeroDeParqueadero, valorDescuento, almacenDescuento, numeroFactura);
break;
//Caso 2, Consultar algun vehiculo en la base de datos
case 2:
bd.buscarVehiculo(placa);
break;
//Caso 4, Eliminar un registro de la base de la base de datos
case 3:
bd.eliminarVehiculo(placa);
break;
case 4:
bd.obtenerFechaDeEntrada(placa);
// Control sobre los casos.
default:
System.out.println("Escriba una opcion correcta.");
}
}
/**
* Metodo que permite enviar los datos del vehiculo de un propietario
* @param Comando
* @param nombreUsuario - nickName del propietario
* @param contrasenia - contraseña del propietario
* @param placa - numero de placa del vehiculo del propietario
* @param tipo - tipo de vehiculo del propietario
* @param marca - marca del vehiculo del propietario
* @param horaEntrada - hora de entrada al entro comercial del vehiculo del propietario
* @param horaSalida - hora de salida del centro comercial del propietario
* @param tipoCliente - tipo de vehiculo ingresado
* @param pisoParqueo - numero de piso de parqueo del vehiculo del propietario
* @param numeroParqueadero - numero del parqueadero del vehiculo del propietario
* @param numeroFactura - numero de factura del cliente
*/
public void enviarDatosVehiculoPropietario(int Comando, String nombreUsuario, String contrasenia, String placa, String tipo, String marca, String horaEntrada, String horaSalida, String tipoCliente, String pisoParqueo, String numeroParqueadero, String numeroFactura) {
switch (Comando) {
//Caso 1, Insertar un registro a la base de datos
case 1:
bd.almacenarVehiculoPropietarios(nombreUsuario, contrasenia, placa, tipo, marca, horaEntrada, horaSalida, tipoCliente, pisoParqueo, numeroParqueadero, numeroFactura);
break;
//Caso 2, Consultar algun vehiculo en la base de datos
case 2:
bd.buscarVehiculoPropietarios(placa);
break;
//Caso 4, Eliminar un registro de la base de la base de datos
case 3:
bd.borrarVehiculoPropietarios(placa);
break;
case 4:
// bd.obtenerFechaDeEntrada(placa);
// Control sobre los casos.
default:
System.out.println("Escriba una opcion correcta.");
}
}
/**
* Metodos ResultSet que permiten buscar objetos de la tabla de base de datos
* puede ser de un propietario o de un particular
* @param nombreUsuario, placa
* @return respuesta
*/
public ResultSet recibirDatosPropietario(String nombreUsuario) {
ResultSet respuesta = bd.buscarPropietario(nombreUsuario);
return respuesta;
}
public ResultSet recibirDatosVehiculoParticular(String placa) {
ResultSet respuesta = bd.buscarVehiculo(placa);
return respuesta;
}
public ResultSet recibirDatosVehiculoPropietarios(String placa) {
ResultSet respuesta = bd.buscarVehiculoPropietarios(placa);
return respuesta;
}
public ResultSet obtenerDatosHoraEntrada(String placa) {
ResultSet respuesta = bd.obtenerFechaDeEntrada(placa);
return respuesta;
}
/**
* Metodo que permite limpiar la Ventana de buscar
*/
public void limpiarVentanaBuscar() {
ventanaBuscar.getTxtHoraEntradaAMostrar().setText(null);
ventanaBuscar.getTxtPlacaABuscar().setText(null);
}
/**
* Metodo que permite abrir la ventana donde se muestra el mapa del 1er piso del parqueadero
*/
public void abrirMapaPiso1() {
getVentanaPrincipal().dispose();
getVentanaMapa1();
getVentanaMapa1().setVisible(true);
}
/**
* Metodo que permite abrir la ventana de buscar de nuevo
*/
public void volverABuscar() {
ventanaPrincipal.dispose();
getVentanaDescuentos().dispose();
getVentanaBuscar().getTxtHoraSalidaAMostrar().setVisible(true);
getVentanaBuscar().getTxtTituloHoraSalida().setVisible(true);
getVentanaBuscar().getTxtTotal().setVisible(true);
getVentanaBuscar().getTxtTotalGenerado().setVisible(true);
getVentanaBuscar().getTxtTituloDescuentoGenerado().setVisible(true);
getVentanaBuscar().getTxtDescuentoGenerado().setVisible(true);
getVentanaBuscar().getTxtTituloSubTotal().setVisible(true);
getVentanaBuscar().getTxtSubTotalGenerado().setVisible(true);
getVentanaBuscar().setVisible(true);
}
/**
* metodo que permite abrir la ventana de opciones de parqueo de nuevo
*/
public void volverAOpciones() {
getVentanaMapa2().dispose();
getVentanaMapa1().dispose();
getVentanaOpcionesDeParqueo().setVisible(true);
}
/**
* Metodo que abre la ventana de registro
*/
public void IraRegistro() {
getVentanaOpcionesDeParqueo().dispose();
getVentanaRegistroPropietarios().getTxtNombreDeUsuario().setText(" ");
getVentanaRegistroPropietarios().getTxtContrasenia().setText(" ");
getVentanaMapa2().dispose();
getVentanaMapa1().dispose();
abrirVentanaRegistro();
}
/**
*Metodo que permite abrir la ventana donde se muestra el mapa del 1er piso del parqueadero
*/
public void abrirMapaPiso2() {
getVentanaPrincipal().dispose();
getVentanaMapa2();
getVentanaMapa2().setVisible(true);
}
/**
* Metodo que permite abrir la venta de opciones de parqueo
*/
public void abrirVentanaOpcionesDeParqueo() {
ventanaPrincipal.dispose();
getVentanaOpcionesDeParqueo();
getVentanaOpcionesDeParqueo().setVisible(true);
}
/**
* Genera la asignación de un parqueadero mediante el siguiente
* procedimiento <br/><br/>
* <ol>
* <li>Cuando haya un espacio libre en el Piso 1, este será asignado.</li>
* <li>Si no hay espacios libres en el Piso 1, se procederá a la búsqueda en
* el Piso 2.</li>
* <li>Cuando haya un espacio libre en el Piso 2, este será asignado.</li>
* <li>Si no hay espacios libres en el Piso 2, se lanzará una
* <code ref="Exception">Exception</code>, indicando que no hay cupo en el
* Parqueadero.</li>
* </ol>
*
*/
public void asignarParqueadero() throws Exception {
System.out.println("ASIGNAR PARQUEADERO");
int p = 1, c = 1;
outerloop:
for (int i = 1; i <= 2; i++) {
for (int j = 1; j <= 15; j++) {
if (isParqueaderoLibre(String.valueOf(i) + "-" + String.valueOf(j))) {
p = i;
c = j;
break outerloop;
}
}
}
if (p > 0 && c > 0) {
IraRegistro();
getVentanaRegistro().setTxtPisoDeParqueo(String.valueOf(p));
getVentanaRegistro().setTxtNumeroDeParqueadero(String.valueOf(p) + "-" + String.valueOf(c));
getVentanaRegistro().setTxtTipoCliente("Particular");
} else {
throw new Exception("NO QUEDAN ESPACIOS DISPONIBLES");
}
}
/**
* Actualiza en la ventana de descuentos el almacen
* @param Almacen - nombre del almacen
*/
public void actualizarAlmacen(String Almacen) {
getVentanaDescuentos().setTxtAlmacen(Almacen);
}
/**
* Actualiza el descuento
* @param Descuento - descuento a generar
*/
public void actualizarDescuento(String Descuento) {
getVentanaDescuentos().setTxtDescuentoGenerado(Descuento);
}
/**
* Permite abrir la ventana del registro de los propietarios
*/
public void abirVentanaRegistroPropietarios() {
getVentanaPropietarios().dispose();
getVentanaRegistroPropietarios();
getVentanaRegistroPropietarios().setVisible(true);
}
/**
* Metodo que permite limpiar la ventana del registro de los propietarios
*/
public void LimpiarVentanaRegistroPropietarios() {
getVentanaRegistroPropietarios().setTxtHoraEntrada("");
getVentanaRegistroPropietarios().setTxtPlacaDelVehiculo("");
getVentanaRegistroPropietarios().setTxtPisoDeParqueo("");
getVentanaRegistroPropietarios().setTxtContrasenia("");
getVentanaRegistroPropietarios().setTxtNumeroDelParqueaderoSeleccionado("");
getVentanaRegistroPropietarios().setTxtNombreUsuario("");
getVentanaRegistroPropietarios().setTxtTipoCliente("");
getVentanaRegistroPropietarios().setTxtNumeroFactura("");
getVentanaRegistroPropietarios().setTxtMarca("");
}
/**
* Metodo que permite abrir la ventana del login
*/
public void abirVentanaLogin() {
getVentanaPropietarios().dispose();
getVentanaLogin();
getVentanaLogin().setTxtContrasenia("");
getVentanaLogin().setTxtNickName("");
getVentanaLogin().setVisible(true);
}
/**
* Metodo que permite verificar el nombre de Usuario
* @param nombreUsuario - nombre de usuario del propietario
* @return true/false - si el nickName es correcto o no
*/
public boolean verificarNickname(String nombreUsuario) {
String nombre = nombreUsuario;
if (nombreUsuario != null) {
if (bd.buscarNickName(nombre) == true) {
return true;
} else if (bd.buscarNickName(nombre) == false) {
return false;
}
}
return false;
}
/**
* Metodo que permite verificar la contraseña del usuario
* @param contrasenia - contraseña del propietario para ingresar al sistema
* @return true/false - si la contraseña es correcta o no
*/
public boolean verificarContrasenia(String contrasenia) {
if (contrasenia != null) {
if (bd.buscarContrasenia(contrasenia) == true) {
return true;
} else if (bd.buscarContrasenia(contrasenia) == false) {
return false;
}
}
return false;
}
/**
* Metodo que verifica si el parqueadero esta libre
* @param string - numero del parqueadero
* @return - si el parqueadero esta o no libre
* @throws Exception
*/
public boolean isParqueaderoLibre(String string) throws Exception {
return bd.isParqueaderoLibre(string);
}
/**
* Metodo para consultar la tabla de la base de datos para obtener el informe
* @return informe generado
* @throws Exception
*/
public ResultSet obtenerInforme() throws Exception{
return bd.obtenerInforme();
}
/**
* Metodo que permite abrir la ventana del informe
*/
public void abrirVentanaInforme() {
getVentanaPrincipal().dispose();
getVentanaInforme().setVisible(true);
}
}