/*
* 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.enumeraciones.EnumCargo;
import es.bancodehierro.banco.excepciones.EmpleadoException;
import es.bancodehierro.banco.excepciones.SucursalException;
import es.bancodehierro.banco.menu.GestionaMenu;
import es.bancodehierro.banco.persona.Empleado;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Guillem
*/
public class MenuEmpleado {
private static final int MENU_EMPLEADO_PREFIX = 70000;
private static final int MENU_EMPLEADO_CREAR = 70000;
private static final int MENU_EMPLEADO_LISTAR = 70001;
private static final int MENU_EMPLEADO_MODIFICAR = 70002;
private static final int MENU_EMPLEADO_ELIMINAR = 70003;
private static final int MENU_EMPLEADO_VOLVER = 70004;
/**
* Metodo que pide el cargo del trabajador.
* Le muestra al usuario los cargos para los trabajadores. Luego le pide que introducza
* el cargo del nuevo empleado.
* @return devuelve una enumeracion de Cargo
*/
public static EnumCargo pideCargo() {
String[] carregs = {"EMPLEADO", "DIRECTOR BANCO", "DIRECTOR SUCURSAL"};
switch (GestionaMenu.gestionarMenu("Que cargo tiene?", carregs, "", 0)) {
case 0:
return EnumCargo.EMPLEADOSUCURSAL;
case 1:
return EnumCargo.DIRECTORBANCO;
case 2:
return EnumCargo.DIRECTORSUCURSAL;
default:
return null;
}
}
/**
* Método que pide todos los datos de un empleado y crea un objecto empleado con ellos.
* Pide cada campo del empleado para así introducirlo en el nuevo objeto empleado.
* @throws EmpleadoException Devuelve esta excepcion si ya existe el empleado desde
* el metodo insertarEmpleado.
* @throws java.sql.SQLException Cuando hay un error inesperado de bdd
* @throws es.bancodehierro.banco.excepciones.SucursalException Cuando la sucursal no ha sido encontrada
*
*/
public static void insertarEmpleado() throws EmpleadoException, SQLException, SucursalException {
String nombre = GestionaMenu.llegirCadena("Introduce el nombre: ");
String apellido1 = GestionaMenu.llegirCadena("Introduce el primer apellido: ");
String apellido2 = GestionaMenu.llegirCadena("Introduce el segundo appelido: ");
EnumCargo cargo = pideCargo();
String dni = GestionaMenu.llegirCadena("Introduce el DNI: ");
String poblacio = GestionaMenu.llegirCadena("Introduce la poblacion: ");
String direccion = GestionaMenu.llegirCadena("Introduce la direccion: ");
String telefono = GestionaMenu.llegirCadena("Inserta telefono: ");
int sucursal = GestionaMenu.llegirSencer("En que sucursal trabaja?");
Banco.comprobarSucursal(sucursal);
Date data = new Date();
Empleado empleado = new Empleado(cargo, nombre, apellido1, apellido2, dni, poblacio, direccion, data, telefono, sucursal);
Banco.insertarEmpleado(empleado);
System.out.println("Empleado introducido");
}
/**
* Pide el dni del empleado y lo borra de la base de datos.
* Primero pide el dni del empleado que queremos borrar, luego comprueba si existe
* algun empleado con ese dni.
* @throws SQLException tira la excepción si la consulta a la base de datos no está
* bien hecha.
* @throws EmpleadoException Lanza la excepción si el empleado no existe
*/
public static void eliminarEmpleado() throws SQLException, EmpleadoException {
String dniEmpleado = GestionaMenu.llegirCadena("Introduce el DNI: ");
Banco.comprobarEmpleado(dniEmpleado);
Boolean flag = GestionaMenu.menuSiNo("", "Seguro que quieres borrar el empleado con el dni " + dniEmpleado + "?");
if (flag) {
System.out.println("Borrando...");
Banco.eliminarEmpleado(dniEmpleado);
} else {
System.out.println("Saliendo...");
}
}
/**
* Método que pide el DNI i podremos modificar al Empleado con ese DNI.
* Pide el DNI del empleado. Luego muestra el empleado y nos pide con una
* serie de funciones que queremos modificar con ese empleado.
* @throws SQLException La devuelve si la consulta no está bien introducida en la base de datos.
* @throws EmpleadoException Lanzada si el empleado no existe
*/
public static void modificarEmpleado() throws SQLException, EmpleadoException {
Empleado empleado = seleccionaEmpleado();
System.out.print("El empleado es: ");
mostrarEmpleado(empleado);
boolean seguir = true;
String[] menu = {"Modificar nombre", "Modificar primer apellido", "Modificar segundo apellido", "Modificar direccion", "Modificar poblacion", "Modificar telefono", "Nada más"};
while (seguir) {
switch (GestionaMenu.gestionarMenu("Que quieres modificar?", menu, "Introduce la opcion", 0)) {
case 0:
String nombre = GestionaMenu.llegirCadena("Introduce nombre: ");
empleado.setNombre(nombre);
break;
case 1:
String priApellido = GestionaMenu.llegirCadena("Introduce el primer apellido: ");
empleado.setApellido1(priApellido);
break;
case 2:
String segApellido = GestionaMenu.llegirCadena("Introduce el segundo apellido: ");
empleado.setApellido1(segApellido);
break;
case 3:
String direccion = GestionaMenu.llegirCadena("Introduce la direccion: ");
empleado.setDireccion(direccion);
break;
case 4:
String poblacion = GestionaMenu.llegirCadena("Introduce la poblacion: ");
empleado.setPoblacion(poblacion);
break;
case 5:
String telefono = GestionaMenu.llegirCadena("Introduce el telefono: ");
empleado.setTlf(telefono);
break;
case 6:
seguir = false;
break;
}
}
}
/**
* Método que pide el DNI y devuelve el empleado.
* Primer pide el DNI del empleado, luego comprueba si existe el empleado. Finalmente,
* devuelve el empleado
* @return devuelve un objeto empleado con el dni introducido
* @throws SQLException lanzada si la consulta a la base de datos es errónea
* @throws EmpleadoException lanza si el empleado no existe
*/
public static Empleado seleccionaEmpleado() throws SQLException, EmpleadoException {
String dniEmpleado = GestionaMenu.llegirCadena("Introduce el DNI: ");
Banco.comprobarEmpleado(dniEmpleado);
return Banco.devuelveEmpleado(dniEmpleado);
}
/**
* Método que muestra el empleado que le pasámos por parámetro
* @param empleado objeto que le pasamos como parámetro
* @throws SQLException lanza
* @throws EmpleadoException
*/
private static void mostrarEmpleado(Empleado empleado) throws SQLException, EmpleadoException {
if (empleado != null) {
Connection conexion = Conexion.conectar();
Statement st = conexion.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM V_EMPLEAT WHERE DNI_PERSONA ='"+empleado.getDni()+"'");
rs.next();
System.out.println("El codigo empleado es: " + rs.getInt("CODIGO_TRABAJADOR"));
System.out.println("Nombre: " + rs.getString("NOMBRE_PERSONA"));
System.out.println("Primer apellido: " + rs.getString("PRIMER_APELLIDO_PERSONA"));
System.out.println("Segundo apellido: " + rs.getString("SEGUNDO_APELLIDO_PERSONA"));
System.out.println("Cargo: " + rs.getString("CARGO_TRABAJADOR"));
System.out.println("Fecha nacimiento: " + rs.getString("FECHA_NACIMIENTO_PERSONA"));
System.out.println("Direccion: " + rs.getString("DIRECCION_PERSONA"));
System.out.println("Telefono: " + rs.getString("TELEFONO_PERSONA"));
System.out.println("---");
rs.close();
st.close();
} else {
throw new EmpleadoException("El empleado es null");
}
}
/**
* Menu de clientes.
* Nos permite crear empleados, listar empleados, modificar empleados, eliminar empleados y volver al menú principal
* Recoge las excepciones lanzadas por los metodes que llama desde cada case.
*/
public static void menuEmpleado() {
try {
String[] menu = {"Crear empleado", "listar empleado/s", "Modificar empleado", "Eliminar empleado"};
switch (GestionaMenu.gestionarMenu("Menu empleado", menu, "Inserta tu opción: ", MENU_EMPLEADO_PREFIX)) {
case MENU_EMPLEADO_CREAR:
insertarEmpleado();
break;
case MENU_EMPLEADO_LISTAR:
Empleado empleado = seleccionaEmpleado();
mostrarEmpleado(empleado);
break;
case MENU_EMPLEADO_MODIFICAR:
modificarEmpleado();
break;
case MENU_EMPLEADO_ELIMINAR:
eliminarEmpleado();
break;
case MENU_EMPLEADO_VOLVER:
break;
default:
break;
}
} catch (EmpleadoException ex) {
Logger.getLogger(MenuEmpleado.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(MenuEmpleado.class.getName()).log(Level.SEVERE, null, ex);
} catch (SucursalException ex) {
Logger.getLogger(MenuEmpleado.class.getName()).log(Level.SEVERE, null, ex);
}
}
}