/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package es.bancodehierro.banco.menu;
import es.bancodehierro.banco.central.Banco;
import es.bancodehierro.banco.conexion.Conexion;
import es.bancodehierro.banco.excepciones.SucursalException;
import es.bancodehierro.banco.sucursal.Sucursal;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Classe que contiene lo referente a las acciones sobre sucursales se
* ejecutaran en este menu.
*
* @author Guillem Arrom, Guillem Rotger, Pedro Lladó, François
*/
public abstract class MenuSucursal {
private static final int MENU_SUCURSAL_PREFIX = 70000;
private static final int MENU_SUCURSAL_CREAR = 70000;
private static final int MENU_SUCURSAL_LISTAR = 70001;
private static final int MENU_SUCURSAL_MODIFICAR = 70002;
private static final int MENU_SUCURSAL_ELIMINAR = 70003;
private static final int MENU_SUCURSAL_LISTARTOT = 70004;
private static final int MENU_SUCURSAL_VOLVER = 70005;
/**
* Hace los pasos necesarios y pide la informacion necesaria para dar de
* alta una sucursal y pasar la informacion a un metodo de banco que la
* inserte en la bdd.
*
* @throws SQLException Cuando ha ocurrido un error inesperado de SQL
*/
private static void crearSucursal() throws SQLException, SucursalException {
Sucursal central;
String poblacio = GestionaMenu.llegirCadena("Mete poblacion ");
String direccio = GestionaMenu.llegirCadena("Mete direccion ");
String telefono = GestionaMenu.llegirCadena("Inserte telefono ");
int codiPostal;
while (true) {
codiPostal = GestionaMenu.llegirSencer("Mete el codigo postal (xxxxx)");
if (codiPostal < 99999) {
break;
}
System.out.println("Codigo postal incorrecto (xxxxx");
}
boolean flagCentral = true;
do {
if (GestionaMenu.menuSiNo("", "Tiene central?")) {
int codiSuc = GestionaMenu.llegirSencer("Cual es el codigo de sucursal?");
central = Banco.devuelveSucursal(codiSuc);
} else {
flagCentral = false;
central = null;
}
} while (flagCentral);
Sucursal sucursal = new Sucursal(poblacio, direccio, 0, codiPostal, central, telefono);
try {
System.out.println("El codigo de la sucursal inserida ha sido " + Banco.insertaSucursal(sucursal));
} catch (SucursalException ex) {
System.out.println(ex.getMessage());
}
}
/**
*
* Te pide el codigo de sucursal y te devuelve la sucursal del codigo que
* has pedido
*
* @return La sucursal solicitada
* @throws SQLException Cuando la sentencia SQL ha fallado inesperadamente
*/
private static Sucursal seleccionaSucrusal() throws SQLException {
Sucursal sucursal;
boolean flag = true;
do {
int codiSuc = GestionaMenu.llegirSencer("Cual es el codigo de sucursal?");
try {
sucursal = Banco.devuelveSucursal(codiSuc);
flag = false;
} catch (SucursalException ex) {
sucursal = null;
flag = true;
System.out.println("Sucursal no encontrada");
}
} while (flag);
return sucursal;
}
/**
* Enseña toda la informacion de la sucursal
*
* @param sucursal El objeto sucursal de donde cogera la informacion
* @throws SucursalException Si la sucursal es null
*/
private static void mostrarSucursal(Sucursal sucursal) throws SucursalException {
if (sucursal != null) {
System.out.println("El codigo es: " + sucursal.getCodi());
System.out.println("---");
System.out.println("La direccion es: " + sucursal.getDireccio() + " poblacion " + sucursal.getPoblacio() + " CP: " + sucursal.getCodiPostal());
System.out.println("---");
if (sucursal.getCentral() != null) {
System.out.println("La central de la sucursal tiene el codigo " + sucursal.getCentral().getCodi());
} else {
System.out.println("No tiene central");
}
System.out.println("---");
} else {
throw new SucursalException("La sucursal que se ha querido mostrar fue null");
}
}
/**
* Pide todo lo necesario para modificar sucursal y la modifica
*
* @throws SucursalException Cuando hay errores con sucursales
* @throws SQLException Cuando hay errores SQL
*/
private static void modificarSucursal() throws SucursalException, SQLException {
Sucursal sucursal;
int codiSuc = GestionaMenu.llegirSencer("Cual es el codigo de sucursal que quieres modificar?");
sucursal = Banco.devuelveSucursal(codiSuc);
System.out.println("Tu sucursal es");
mostrarSucursal(sucursal);
boolean seguir = true;
String[] menu = {"Modificar poblacion", " Modificar direccion", "Modificar codigo postal", "Modificar central", "Modificar telefono ", "Nada mas"};
while (seguir) {
switch (GestionaMenu.gestionarMenu("Que quieres modificar?", menu, "", 0)) {
case 0:
String poblacion = GestionaMenu.llegirCadena("Inserta poblacion: ");
sucursal.setPoblacio(poblacion);
break;
case 1:
String direccion = GestionaMenu.llegirCadena("Inserta direccion: ");
sucursal.setDireccio(direccion);
break;
case 2:
int cp = GestionaMenu.llegirSencer("Inserte el nuevo CP: ");
sucursal.setCodiPostal(cp);
break;
case 3:
Sucursal central = seleccionaSucrusal();
sucursal.setCentral(central);
break;
case 4:
String telefono = GestionaMenu.llegirCadena("Inserte telefono");
sucursal.setTelefono(telefono);
break;
case 5:
seguir = false;
break;
}
}
Banco.modificarSucursal(sucursal);
}
/**
*
* Pide que sucursal eliminar y la elimina
*
* @throws SucursalException Si no existe la sucursal
* @throws SQLException Si hay un error de bdd
*/
private static void eliminarSucursal() throws SucursalException, SQLException {
Sucursal sucursal;
int codiSuc = GestionaMenu.llegirSencer("Cual es el codigo de sucursal que quieres borrar?");
sucursal = Banco.devuelveSucursal(codiSuc);
if (GestionaMenu.menuSiNo("", "Seguro que quereis borrar la sucursal " + codiSuc)) {
if (Banco.eliminarSucursal(sucursal)) {
System.out.println("Sucursal borrada");
} else {
throw new SucursalException("Error al borrar la sucursal.");
}
} else {
System.out.println("cancelant borrada...");
}
}
/**
* Genera el menu principal
*/
public static void menu() {
try {
String[] menu = {"Crear sucursal", "listar sucursal", "Modificar sucursal", "Eliminar sucursal", "Mostrar todas", "Atrás..."};
switch (GestionaMenu.gestionarMenu("Menu sucursal", menu, "", MENU_SUCURSAL_PREFIX)) {
case MENU_SUCURSAL_CREAR:
crearSucursal();
break;
case MENU_SUCURSAL_LISTAR:
Sucursal sucursal;
sucursal = seleccionaSucrusal();
mostrarSucursal(sucursal);
break;
case MENU_SUCURSAL_MODIFICAR:
modificarSucursal();
break;
case MENU_SUCURSAL_ELIMINAR:
eliminarSucursal();
break;
case MENU_SUCURSAL_LISTARTOT:
mostrarTodas();
break;
case MENU_SUCURSAL_VOLVER:
break;
default:
break;
}
} catch (SucursalException ex) {
System.err.println(ex.getMessage());
} catch (SQLException ex) {
System.err.println(ex.getMessage());
}
}
/**
*
* Muestra todas las sucursales de la bdd
* @throws SQLException cuando hay un error inesperado de bdd
*/
private static void mostrarTodas() throws SQLException {
Connection conexion = Conexion.conectar();
Statement st = conexion.createStatement();
ResultSet rs = st.executeQuery("SELECT MAX(CODIGO_SUCURSAL) FROM SUCURSAL");
rs.next();
int maxSuc = rs.getInt(1);
st.close();
rs.close();
Sucursal sucursal;
if (maxSuc != 0) {
for (int index = 1; index <= maxSuc; index++) {
boolean existente = true;
try {
existente = Banco.comprobarSucursal(index);
} catch (SucursalException ex) {
existente = false;
}
if (existente) {
try {
sucursal = Banco.devuelveSucursal(index);
System.out.println("|||||||||||||||||||||||||||||||||||||||||||||");
mostrarSucursal(sucursal);
System.out.println("|||||||||||||||||||||||||||||||||||||||||||||");
} catch (SucursalException ex) {
System.out.println("Se ha borrado una sucursal mientras se estaba intentando listar.");
}
}
}
} else {
System.out.println("No hay ninguna sucursal!4");
}
}
}