/*
* 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.central;
import es.bancodehierro.banco.cc.ControlCC;
import es.bancodehierro.banco.cc.CuentaCorriente;
import es.bancodehierro.banco.conexion.Conexion;
import es.bancodehierro.banco.enumeraciones.EnumCargo;
import es.bancodehierro.banco.excepciones.ClienteException;
import es.bancodehierro.banco.excepciones.CuentaCorrienteException;
import es.bancodehierro.banco.excepciones.EmpleadoException;
import es.bancodehierro.banco.excepciones.SucursalException;
import es.bancodehierro.banco.menu.GestionaMenu;
import es.bancodehierro.banco.persona.Cliente;
import es.bancodehierro.banco.persona.Empleado;
import es.bancodehierro.banco.persona.Persona;
import es.bancodehierro.banco.prestamo.Prestamo;
import es.bancodehierro.banco.sucursal.Sucursal;
import es.bancodehierro.banco.tarjeta.Credito;
import es.bancodehierro.banco.tarjeta.Debito;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Andreu Oliver, Juanjo Macanás, Roberto Simón, Xavi Jimenez, Miquel
* Angel Cànaves
*/
public class Banco {
/**
* Agregación de una cuenta corriente en la base de datos.
* @param sucursal La sucursal a la que pertenece la cuenta corriente
* @return Un boolean con el resultado de la consulta.
* @throws SQLException En el caso que haya fallado alguna sentencia a la
* base de datos.
*/
public boolean agregarCuentaCorriente(Sucursal sucursal) throws SQLException, ClienteException{
CuentaCorriente cc= new CuentaCorriente(ControlCC.controlIBAN(), ControlCC.controlOficina(), ControlCC.controlDc(), ControlCC.controlCC(), 0);
Statement st = Conexion.conectar().createStatement();
boolean resultado = false;
String function="{? = call INSERCIO_CCB(?,?,?)}";
//ResultSet comp = st.executeQuery("SELECT * FROM CUENTA_CORRIENTE WHERE NUMERO_CC = '" + cc.muestraCC() + "' AND CODIGO_SCC =" + sucursal.getCodi());
//if (comp.next()) {
CallableStatement cS = Conexion.conectar().prepareCall(function);
cS.registerOutParameter(1, java.sql.Types.INTEGER);
cS.setString(2, cc.muestraCC());
cS.setInt(3, sucursal.getCodi());
cS.setInt(4, 0);
//ResultSet rs = cS.executeQuery();
cS.executeQuery();
cc.agregarTitular(sucursal);
cS.close();
st.close();
// + cc.muestraCC() + "','" + sucursal.getCodi() + "'," + 0 + ",SYSTIMESTAMP)}
//ResultSet rs = st.executeQuery(resutado+":=ESBORRAR_CCB('"+cc.muestraCC()+"')");
// + cc.muestraCC() + "','" + sucursal.getCodi() + "'," + 0 + ",SYSTIMESTAMP)}
//ResultSet rs = st.executeQuery(resutado+":=ESBORRAR_CCB('"+cc.muestraCC()+"')");
//ResultSet rs = st.executeQuery("INSERT INTO CUENTA_CORRIENTE VALUES('" + cc.muestraCC() + "','" + sucursal.getCodi() + "',0," + "SYSTIMESTAMP);");
return true;
/*} else {
throw new CuentaCorrienteException();
}*/
}
/**
* Elimina la cuenta corriente que se le pasa por parámetro.
* @param sucursal La surcursal a la que pertenece la cuenta corriente.
* @return Un boolean con el resultado de la sentencia.
* @throws SQLException En el caso que haya fallado alguna sentencia a la
* base de datos.
*/
public boolean eliminarCuentaCorriente(Sucursal sucursal) throws SQLException, ClienteException {
String dni = GestionaMenu.llegirCadena("Introduce el DNI: ");
Statement st = Conexion.conectar().createStatement();
String consulta = "SELECT * FROM CLIENTE WHERE DNI_CLIENTE = '" + dni + "'";
ResultSet rs = st.executeQuery(consulta);
Cliente titular = null;
if (Banco.comprobarCliente(dni)) {
titular = new Cliente(null, null, null, dni, null, null, null, null);
}
/*Statement sel = (Statement) Conexion.conectar();
ResultSet comp = sel.executeQuery("SELECT * FROM CUENTA_CORRIENTE WHERE NUMERO_CC = '" + cc.muestraCC() + "','" + sucursal.getCodi() + "';");
if (comp.next()) {
Statement st = (Statement) Conexion.conectar();
ResultSet rs = st.executeQuery("DELETE FROM CUENTA_CORRIENTE WHERE NUMERO_CC = '" + cc.muestraCC() + "'&&'" + sucursal.getCodi() + "';");
return true;
} else {
throw new CuentaCorrienteException();
}*/
CuentaCorriente cc= new CuentaCorriente(ControlCC.controlIBAN(), ControlCC.controlOficina(), ControlCC.controlDc(), ControlCC.controlCC(), 0);
String function="{? = call esborrar_client_CCB(?,?,?,?)}";
//ResultSet comp = st.executeQuery("SELECT * FROM CUENTA_CORRIENTE WHERE NUMERO_CC = '" + cc.muestraCC() + "' AND CODIGO_SCC =" + sucursal.getCodi());
//if (comp.next()) {
CallableStatement cS = Conexion.conectar().prepareCall(function);
cS.registerOutParameter(1, java.sql.Types.INTEGER);
cS.setString(2, cc.muestraCC());
cS.setString(3, dni);
cS.setInt(4, sucursal.getCodi());
cS.setInt(5, GestionaMenu.llegirSencer("Posicion titular: "));
//ResultSet rs = cS.executeQuery();
cS.executeQuery();
function="{? = call ESBORRAR_CCB(?)}";
//ResultSet comp = st.executeQuery("SELECT * FROM CUENTA_CORRIENTE WHERE NUMERO_CC = '" + cc.muestraCC() + "' AND CODIGO_SCC =" + sucursal.getCodi());
//if (comp.next()) {
cS = Conexion.conectar().prepareCall(function);
cS.registerOutParameter(1, java.sql.Types.INTEGER);
cS.setString(2, cc.muestraCC());
//ResultSet rs = cS.executeQuery();
cS.executeQuery();
cS.close();
return true;
}
/**
* Método que devuelve las cuentas corrientes de la base de datos.
* @return La lista de todas las cuentas corrientes de la base de datos.
* @throws SQLException En el caso que haya fallado alguna sentencia a la
* base de datos.
*/
public ArrayList<CuentaCorriente> mostrarCuentaCorriente() throws SQLException {
/*String resultado = null;
try (Statement st = Conexion.conectar().createStatement()) {
String consultaTitular = "SELECT * FROM CUENTA_CORRIENTE";
ResultSet rs = st.executeQuery(consultaTitular);
ArrayList<CuentaCorriente> cuentaCorriente = new ArrayList<>();
for (int i = 0; rs.next(); i++) {
cuentaCorriente.add(new CuentaCorriente(rs.getString("IBAN"), rs.getString("CODIGO_SCC"), rs.getString("dC"), rs.getString("NUMERO_CC"), rs.getDouble("IMPORTE_CC")));
resultado = resultado + "\n" + cuentaCorriente.get(i).toString();
//aB.add(biblio);
//System.out.println(biblio);
}
}
return null;*/
ArrayList<CuentaCorriente> aCC= new ArrayList<>();
CuentaCorriente cuentaCorriente = null;
//String resultado = null;
try (Statement st = Conexion.conectar().createStatement()) {
String consultaSaldo = "SELECT * FROM CUENTA_CORRIENTE";
ResultSet rs = st.executeQuery(consultaSaldo);
for(; rs.next();){
cuentaCorriente = new CuentaCorriente("","","",rs.getString("NUMERO_CC"), rs.getDouble("IMPORTE_CC"));
// resultado = resultado + "\n" + cuentaCorriente.toString();
aCC.add(cuentaCorriente);
}
//rs.next();
/* if (rs.getInt(1) == 0) {
throw new CuentaCorrienteException("ERROR: NO HAY CUENTA CORRIENTE");
} else{
return rs.getDouble(1);
} */
//filas = st.executeUpdate(insertTitular);
}
return aCC;
}
/**
* Método que devuelve las cuentas corrientes asociadas a la sucursal.
* @param sucursal La sucursal de la que queremos saber sus cuentas corrientes.
* @return La lista con las cuentas corrientes de la sucursal.
* @throws SQLException En el caso que haya fallado alguna sentencia a la
* base de datos.
*/
public ArrayList<CuentaCorriente> mostrarCuentaCorriente(Sucursal sucursal) throws SQLException {
ArrayList<CuentaCorriente> aCC= new ArrayList<>();
CuentaCorriente cuentaCorriente = null;
//String resultado = null;
try (Statement st = Conexion.conectar().createStatement()) {
String consultaSaldo = "SELECT * FROM CUENTA_CORRIENTE WHERE CODIGO_SCC='"+sucursal.getCodi()+"'";
ResultSet rs = st.executeQuery(consultaSaldo);
for(; rs.next();){
cuentaCorriente = new CuentaCorriente("","","",rs.getString("NUMERO_CC"), rs.getDouble("IMPORTE_CC"));
// resultado = resultado + "\n" + cuentaCorriente.toString();
aCC.add(cuentaCorriente);
}
//rs.next();
/* if (rs.getInt(1) == 0) {
throw new CuentaCorrienteException("ERROR: NO HAY CUENTA CORRIENTE");
} else{
return rs.getDouble(1);
} */
//filas = st.executeUpdate(insertTitular);
}
return aCC;
}
/**
* Método que devuelve las cuentas corrientes asociadas a un cliente.
* @param cliente El cliente del que queremos saber sus cuentas corrientes.
* @return La lista con las cuentas corrientes asociadas a un cliente.
* @throws SQLException En el caso que haya fallado alguna sentencia a la
* base de datos.
*/
public ArrayList<CuentaCorriente> mostrarCuentaCorriente(Cliente cliente) throws SQLException {
ArrayList<CuentaCorriente> aCC= new ArrayList<>();
CuentaCorriente cuentaCorriente = null;
try (Statement st = Conexion.conectar().createStatement()) {
String consultaSaldo = "SELECT * FROM CUENTA_CORRIENTE CC INNER JOIN CLIENTE_CUENTA_CORRIENTE CCC ON CC.NUMERO_CC=CCC.NUMERO_CC WHERE CCC.DNI_CLIENTE_CC='"+cliente.getDni()+"'";
ResultSet rs = st.executeQuery(consultaSaldo);
for(; rs.next();){
cuentaCorriente = new CuentaCorriente("","","",rs.getString("NUMERO_CC"), rs.getDouble("IMPORTE_CC"));
// resultado = resultado + "\n" + cuentaCorriente.toString();
aCC.add(cuentaCorriente);
}
//rs.next();
/* if (rs.getInt(1) == 0) {
throw new CuentaCorrienteException("ERROR: NO HAY CUENTA CORRIENTE");
} else{
return rs.getDouble(1);
} */
//filas = st.executeUpdate(insertTitular);
}
return aCC;
}
//Part del grup de Guillem Arrom, Rotger, Pedro i François
/**
* Metodo que devuelve un objeto cliente con los datos del cliente cuyo dni
* es el que le pasas por parametro
*
* @param dniCliente DNI del cliente al cual se devolvera toda la
* informacion
* @return Objeto cliente con toda la informacion
* @throws SQLException Cuando hay un error inesperado de bdd
* @throws ClienteException Cuando el cliente no ha sido encontrado
*/
public static Cliente devuelveCliente(String dniCliente) throws SQLException, ClienteException {
Connection conexion = Conexion.conectar();
comprobarCliente(dniCliente);
Statement st = conexion.createStatement();
ResultSet rs1 = st.executeQuery("SELECT * FROM CLIENTE WHERE DNI =" + dniCliente);//FALTA BDD
int idclient = rs1.getInt("idClient");
String nombre = rs1.getString("nombre");
String apellido1 = rs1.getString("apellido1");
String apellido2 = rs1.getString("apellido2");
String poblacion = rs1.getString("poblacion");
String direccion = rs1.getString("direccion");
Date fn = rs1.getDate("fechaNacimiento");
String telefono = rs1.getString("telefono");
Cliente cliente = new Cliente(nombre, apellido1, apellido2, dniCliente, poblacion, direccion, fn, telefono);
return cliente;
}
/**
* Metodo que devuelve un objeto empleado con los datos del empleatdo cuyo
* dni es el que le pasas por parametro
*
* @param dniEmpleado DNI del empleado al cual se devolvera toda la
* informacion
* @return Objeto cliente con toda la informacion
* @throws SQLException Cuando hay un error inesperado de bdd
* @throws EmpleadoException Cuando el empleado no ha sido encontrado
*/
public static Empleado devuelveEmpleado(String dniEmpleado) throws SQLException, EmpleadoException {
Connection conexion = Conexion.conectar();
comprobarEmpleado(dniEmpleado);
EnumCargo car = null;
Statement st = conexion.createStatement();
ResultSet rs1 = st.executeQuery("SELECT * FROM V_EMPLEAT WHERE DNI_PERSONA ='" + dniEmpleado + "'");
rs1.next();
int idEmpleado = rs1.getInt("CODIGO_TRABAJADOR");
String nombre = rs1.getString("NOMBRE_PERSONA");
String cargo = rs1.getString("CARGO_TRABAJADOR");
String apellido1 = rs1.getString("PRIMER_APELLIDO_PERSONA");
String apellido2 = rs1.getString("SEGUNDO_APELLIDO_PERSONA");
String poblacion = rs1.getString("NOMBRE_POBLACION");
String direccion = rs1.getString("DIRECCION_PERSONA");
Date fn = rs1.getDate("FECHA_NACIMIENTO_PERSONA");
String telefono = rs1.getString("TELEFONO_PERSONA");
int sucursal = rs1.getInt("CODIGO_SUCURSAL");
if ("EMPLEADO SUCURSAL".equalsIgnoreCase(cargo)) {
car = EnumCargo.EMPLEADOSUCURSAL;
} else if ("DIRECTOR BANCO".equalsIgnoreCase(cargo)) {
car = EnumCargo.DIRECTORBANCO;
} else if ("DIRECTOR SUCURSAL".equalsIgnoreCase(cargo)) {
car = EnumCargo.DIRECTORSUCURSAL;
}
Empleado empleado;
empleado = new Empleado(car, nombre, apellido1, apellido2, dniEmpleado, poblacion, direccion, fn, telefono, sucursal);
return empleado;
}
/**
*
* Metodo que devuelve sucursal segun su codigo.
*
* @param codigoSucursal Codigo de la sucursal
* @return la central demanada
* @throws SucursalException Quan la central solicitada no existeix
* @throws SQLException Quan hi ha un error en les sentencies SQL
*/
public static Sucursal devuelveSucursal(int codigoSucursal) throws SucursalException, SQLException {
Connection conexion = Conexion.conectar();
comprobarSucursal(codigoSucursal);
Statement st = conexion.createStatement();
ResultSet rs1 = st.executeQuery("SELECT * FROM SUCURSAL WHERE CODIGO_SUCURSAL =" + codigoSucursal);
rs1.next();
String direccion = rs1.getString("DIRECCION_SUCURSAL");
int codigoP = rs1.getInt("CP_SUCURSAL");
int codiPob = rs1.getInt("CODIGO_POBLACION_SUCURSAL");
int codigoSuc = rs1.getInt("CODIGO_SUCURSAL");
String telefono = rs1.getString("TELEFONO_SUCURSAL");
int codCentral = rs1.getInt("CODIGO_CENTRAL_SUCURSAL");
rs1.close();
ResultSet rs2 = st.executeQuery("SELECT NOMBRE_POBLACION FROM POBLACION WHERE CODIGO_POBLACION = " + codiPob);
rs2.next();
String poblacion = rs2.getString(1);
rs2.close();
Sucursal central;
if (codCentral != 0) {
central = devuelveSucursal(codCentral);
} else {
central = null;
}
Sucursal suc = new Sucursal(poblacion, direccion, codigoSuc, codigoP, central, telefono);
st.close();
return suc;
}
/**
* Este método se encarga de eliminar los clientes. Crea una conexión con la
* base de datos. Comprueba gracias al método "comprobarCliente" de que el
* DNI introducido está asignado a algún cliente para seguidamente
* eliminarlo. En el caso de que el DNI no atienda a ningún cliente, lanzará
* una excepción para indicar que no existe tal cliente.
*
* @param dniCliente recibe por parámetro un String que debe atender al DNI
* del cliente que se desee eliminar.
* @throws ClienteException
*/
public static void eliminarCliente(String dniCliente) throws ClienteException, SQLException {
Connection con = Conexion.conectar();
Statement st = con.createStatement();
String sql = "DELETE FROM V_CLIENT WHERE DNI_PERSONA ='" + dniCliente + "'";
if (comprobarCliente(dniCliente)) {
st.executeUpdate(sql);
st.close();
} else {
st.close();
throw new ClienteException("No existe el cliente");
}
}
/**
* Este método se encarga de eliminar los empleados. Crea una conexión con
* la base de datos. Comprueba gracias al método "comprobarEmpleado" de que
* el DNI introducido está asignado a algún empleado para seguidamente
* eliminarlo. En el caso de que el DNI no atienda a ningún empleado,
* lanzará una excepción para indicar que no existe tal empleado.
*
* @param dniEmpleado recibe por parámetro un String que debe atender al DNI
* del empleado que se desee eliminar.
* @throws EmpleadoException
*/
public static void eliminarEmpleado(String dniEmpleado) throws EmpleadoException, SQLException {
Connection con = Conexion.conectar();
Statement st = con.createStatement();
String sql = "DELETE FROM V_EMPLEAT WHERE DNI_PERSONA ='" + dniEmpleado + "'";
if (comprobarEmpleado(dniEmpleado)) {
st.executeUpdate(sql);
st.close();
} else {
st.close();
throw new EmpleadoException("No existe el empleado");
}
}
/**
* Este método se encarga de eliminar una sucursal indicando su código de
* referencia. Primero verifica la existencia de la sucursal gracias al
* método "comprobarSucursal" y en el caso de encontrarse la sucursal,
* realiza el DETELE en la base de datos"
*
* @param sucursal La sucursal a eliminar.
* @return True si la central se ha eliminat correctement
* @throws SQLException Avisa cuando la instrucción falla inesperadamente.
* @throws SucursalException Avisa de un error en relación a la sucursal.
*/
public static boolean eliminarSucursal(Sucursal sucursal) throws SQLException, SucursalException {
Connection conexion = Conexion.conectar();
Statement st = conexion.createStatement();
String sql = "DELETE FROM SUCURSAL WHERE CODIGO_SUCURSAL =" + sucursal.getCodi();
if (comprobarSucursal(sucursal.getCodi()) == true) {
st.executeQuery(sql);
st.close();
return true;
} else {
st.close();
throw new SucursalException("No existe la sucursal que deseea eliminar");
}
}
/**
* Utiliza un objeto de tipo cliente para coger todos los datos para
* insertarlo en la bdd.
*
* @param cliente Objeto del cual sacara todos los datos
* @throws ClienteException Cuando el cliente ya existe
* @throws SQLException Si hay un error inesperado con la bdd
*/
public static int insertarCliente(Cliente cliente) throws ClienteException, SQLException {
Connection con = Conexion.conectar();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from CLIENTE where DNI_CLIENTE ='" + cliente.getDni() + "'");
//si es dnitrabajador no existeix
if (rs.next() == false) {
st.executeUpdate("insert into V_CLIENT (DNI_PERSONA) values ( '" + cliente.getDni() + "', '" + cliente.getNombre() + "','" + cliente.getApellido1() + "','" + cliente.getApellido2() + "','" + cliente.getFechaNacimiento() + "','" + cliente.getDireccion() + "','" + cliente.getPoblacion() + "', '" + cliente.getTlf() + "', 0)");
st.close();
rs.close();
} else {
st.close();
rs.close();
throw new ClienteException("Error: El cliente ya existe");
}
return 0;
}
/**
* Utiliza un objeto de tipo empleado para coger todos los datos para
* insertarlo en la bdd
*
* @param empleado Objeto del cual sacara todos los datos
* @throws EmpleadoException Cuando el cliente ya existe
* @throws SQLException Si hay un error inesperado con la bdd
*/
public static int insertarEmpleado(Empleado empleado) throws EmpleadoException, SQLException {
Connection con = Conexion.conectar();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from TRABAJADOR where DNI_TRABAJADOR ='" + empleado.getDni() + "'");
//si es dnitrabajador no existeix
if (rs.next() == false) {
st.executeUpdate("insert into V_EMPLEAT values ( 0, '" + empleado.getDni() + "', '" + empleado.getNombre() + "', '" + empleado.getApellido1() + "', '" + empleado.getApellido2() + "', '" + "01-01-1990" + "', '" + empleado.getTlf() + "', '" + empleado.getDireccion() + "', '" + empleado.getPoblacion() + "', '" + empleado.getCargo() + "', " + empleado.getSucursal() + ",'01-01-1990')");
st.close();
rs.close();
} else {
st.close();
rs.close();
throw new EmpleadoException("Error: El empleado ya existe");
}
return 0;
}
/**
*
* Inserta la sucursal que le pasas por parametro.
*
* @param sucursal objeto sucursal a insertar
*
* @throws SQLException Cuando hay un fallo inesperado de bdd
* @throws SucursalException cuando la central de la sucursal no es
* encontrada, no encuentra poblacion o un error desconocido.
*/
public static int insertaSucursal(Sucursal sucursal) throws SQLException, SucursalException {
Connection conexion = Conexion.conectar();
String procedure = "{? = call INSERIR_SUCURSAL (?,?,?,?,?)}";
CallableStatement statement = conexion.prepareCall(procedure);
statement.registerOutParameter(1, java.sql.Types.INTEGER);
statement.setString(2, sucursal.getDireccio());
statement.setInt(3, sucursal.getCodiPostal());
Statement st = conexion.createStatement();
ResultSet rs2 = st.executeQuery("SELECT CODIGO_POBLACION FROM POBLACION WHERE NOMBRE_POBLACION = '" + sucursal.getPoblacio().toUpperCase() + "'");
rs2.next();
int codPoblacion = rs2.getInt("CODIGO_POBLACION");
rs2.close();
st.close();
statement.setInt(4, codPoblacion);
statement.setString(5, sucursal.getTelefono());
if (sucursal.getCentral() != null) {
statement.setInt(6, sucursal.getCentral().getCodi());
} else {
statement.setInt(6, 0);
}
statement.executeQuery();
int resultat = statement.getInt(1);
if (resultat > 0) {
return resultat;
} else if (resultat == -20001) {
throw new SucursalException("Central no encontrada");
} else if (resultat == -20002) {
throw new SucursalException("Poblacion no encontrada");
} else {
throw new SucursalException("Error desconegut");
}
}
/**
* Coge un objeto sucursal para utilizarlo para coger los datos y
* sobrescribirlos a la bdd
*
* @param sucursal El objeto sucursal con LOS DATOS YA MODIFICADOS
* @throws java.sql.SQLException Cuando hay un fallo inesperado en la bdd
*/
public static void modificarSucursal(Sucursal sucursal) throws SQLException {
Connection conexion = Conexion.conectar();
Statement st = conexion.createStatement();
Statement st2 = conexion.createStatement();
ResultSet rs2 = st2.executeQuery("SELECT CODIGO_POBLACION FROM POBLACION WHERE NOMBRE_POBLACION = '" + sucursal.getPoblacio().toUpperCase() + "'");
rs2.next();
int codiPob = rs2.getInt(1);
rs2.close();
st2.close();
conexion.setAutoCommit(false);
String central = "'";
if (sucursal.getCentral() == null) {
central = "'";
} else {
central = "',CODIGO_CENTRAL_SUCURSAL = " + sucursal.getCentral().getCodi();
}
int resultats = st.executeUpdate("UPDATE SUCURSAL SET "
+ "DIRECCION_SUCURSAL ='" + sucursal.getDireccio()
+ "', CP_SUCURSAL ='" + sucursal.getCodiPostal()
+ "', CODIGO_POBLACION_SUCURSAL =" + codiPob
+ ", TELEFONO_SUCURSAL = ' " + sucursal.getTelefono()
+ central
+ "WHERE CODIGO_SUCURSAL=" + sucursal.getCodi());
if (resultats != 1) {
conexion.rollback();
conexion.setAutoCommit(true);
st.close();
throw new SQLException("Se esperaba que solo se modificara un registro");
}
conexion.setAutoCommit(true);
st.close();
}
/**
* Modifica cliente.
*
* Coge el dni del objeto cliene y todos sus atributos y lo utiliza para
* generar una sentencia SQL de actualizacion
*
* @param cliente El objeto de donde sacara los datos
* @throws java.sql.SQLException Cuando hay un fallo en la sentencia SQL o
* cuando la actualizacion afecta a mas lineas de las esperadas (1)
*/
public static void modificarCliente(Cliente cliente) throws SQLException {
Connection conexion = Conexion.conectar();
Statement st = conexion.createStatement();
conexion.setAutoCommit(false);
int resultats = st.executeUpdate("UPDATE V_CLIENT SET "
+ "NOMBRE_PERSONA = " + cliente.getNombre()
+ ", PRIMER_APELLIDO_PERSONA = " + cliente.getApellido1()
+ ", SEGUNDO_APELLIDO_PERSONA = " + cliente.getApellido2()
+ ", FECHA_NACIMIENTO_PERSONA = " + cliente.getFechaNacimiento()
+ ", DIRECCION_PERSONA = " + cliente.getDireccion()
+ ", CODIGO_POBLACION_PERSONA = " + cliente.getPoblacion()
+ ", TELEFONO_PERSONA = " + cliente.getTlf()
+ ", DNI_CLIENTE = " + cliente.getDni()
// + ", CODIGO_CLIENTE =" + cliente.getIdCliente()
+ "WHERE DNI_PERSONA=" + cliente.getDni() + " )");
if (resultats != 1) {
conexion.rollback();
conexion.setAutoCommit(true);
throw new SQLException("Se esperaba que solo se modificara un registro");
}
conexion.setAutoCommit(true);
st.close();
}
/**
* Modifica empleado.
*
* Coge el dni del objeto empleado y todos sus atributos y lo utiliza para
* generar una sentencia SQL de actualizacion
*
* @param empleado El objeto de donde sacara los datos
* @throws java.sql.SQLException Cuando hay un fallo en la sentencia SQL o
* cuando la actualizacion afecta a mas lineas de las esperadas (1)
*/
public static void modificarEmpleado(Empleado empleado) throws SQLException {
Connection conexion = Conexion.conectar();
Statement st = conexion.createStatement();
conexion.setAutoCommit(false);
int resultats = st.executeUpdate("UPDATE V_CLIENT SET "
+ "NOMBRE_PERSONA = " + empleado.getNombre()
+ ", PRIMER_APELLIDO_PERSONA = " + empleado.getApellido1()
+ ", SEGUNDO_APELLIDO_PERSONA = " + empleado.getApellido2()
+ ", FECHA_NACIMIENTO_PERSONA = " + empleado.getFechaNacimiento()
+ ", DIRECCION_PERSONA = " + empleado.getDireccion()
+ ", CODIGO_POBLACION_PERSONA = " + empleado.getPoblacion()
+ ", TELEFONO_PERSONA = " + empleado.getTlf()
+ ", DNI_CLIENTE = " + empleado.getDni()
// + ", CODIGO_CLIENTE =" + empleado.getIdCliente()
+ "WHERE DNI_PERSONA=" + empleado.getDni() + " )");
if (resultats != 1) {
conexion.rollback();
conexion.setAutoCommit(true);
throw new SQLException("Se esperaba que solo se modificara un registro");
}
conexion.setAutoCommit(true);
st.close();
}
/**
* Metodo que te dice si existe el cliente
*
* @param dniCliente recibe un parámetro String (dni) el cual indica el DNI
* del cliente que se quiere comprobar si existe como tal
* @return True si el cliente existe
* @throws SQLException cuando hay un error inesperado de BDD
* @throws ClienteException cuando el cliente no ha sido encontrado
*/
public static boolean comprobarCliente(String dniCliente) throws SQLException, ClienteException {
Connection conexion = Conexion.conectar();
Statement st = conexion.createStatement();
ResultSet rs = st.executeQuery("select count(DNI_PERSONA) from V_CLIENT where DNI_PERSONA = '" + dniCliente + "'");
rs.next();
int a = rs.getInt(1);
if (a == 1) {
return true;
} else {
throw new ClienteException("Cliente no encontrado");
}
}
/**
*
* Metodo que te comprueba si existe unempleado
*
* @param dniEmpleado recibe un parámetro String (dni) el cual indica el DNI
* del empleado que se quiere comprobar si existe como tal
*
* @return true si existe el empleado
* @throws SQLException Si hubo un error inesperado con la bdd
* @throws EmpleadoException Si el empleado no ha sido encontrado
*/
public static boolean comprobarEmpleado(String dniEmpleado) throws SQLException, EmpleadoException {
Connection con = Conexion.conectar();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT COUNT(DNI_PERSONA) FROM V_EMPLEAT WHERE DNI_PERSONA ='" + dniEmpleado + "'");
rs.next();
int a = rs.getInt(1);
if (a == 1) {
return true;
} else {
throw new EmpleadoException("Empleado no encontrado");
}
}
/**
* Metode que comprueba si una Sucursal existe en la base de datos de la
* conexion
*
* @param codigoSucursal Codigo de la sucursal que queremos comprobar si
* existe en la BDD
* @return devuelve un true si la sucursal se ha encontrado
* @throws SucursalException Lanza esta excepcion cuando no se encuentra
* ninguna sucursal
* @throws SQLException Lanza esta excepcion cuando no está bien formada la
* consulta
*/
public static boolean comprobarSucursal(int codigoSucursal) throws SucursalException, SQLException {
Connection conexion = Conexion.conectar();
Statement st = conexion.createStatement();
//Aqui posam la query que faci falta
ResultSet rs = st.executeQuery("select count(CODIGO_SUCURSAL) from SUCURSAL where CODIGO_SUCURSAL =" + codigoSucursal);
rs.next();
int a = rs.getInt(1);
st.close();
rs.close();
if (a == 1) {
return true;
} else {
throw new SucursalException("Sucursal no encontrado");
}
}
/**
* MÉTODO INSERTAR PRESTAMO. Se pide el DNI del cliente para ver si existe y
* se consulta las cuentas que tiene ese cliente para despues seleccionar
* sobre qual hacer los cambios. Tambien se van pidiento otros parametros
* para crear el objeto Prestamo.
*
* @author Rafel Sastre, Miquel Vallespir i Pau Riera.
* @param empleado Se tiene que passar un objeto Empleado para registrar los
* cambios.
*/
public void insertarPrestamo(Empleado empleado) throws ClienteException, CuentaCorrienteException, SQLException {
Connection conexion = Conexion.conectar();
ArrayList<CuentaCorriente> listCC = null;
String dniCliente = GestionaMenu.llegirCadena("Introduce DNI cliente.");
Cliente cliente = devuelveCliente(dniCliente);
if (cliente == null) {
throw new ClienteException("El cliente con +" + dniCliente + " no ha sido encontrado.");
//return false;
} else {
listCC = mostrarCuentaCorriente(cliente);
}
if (listCC == null) {
throw new CuentaCorrienteException("Este cliente no tiene ninguna cuenta asociada.");
//return false;
}
String[] opcions = new String[listCC.size()];
int i = 0;
for (CuentaCorriente cc : listCC) {
opcions[i] = cc.muestraCC();
i++;
}
int opcioSeleccionada = GestionaMenu.gestionarMenu("Prestamo", opcions, "Insertar opcion:", 0);
double importePrestado = GestionaMenu.llegirDouble("Introdueix el total a prestar");
int duracionPrestamo = GestionaMenu.llegirSencer("Introdueix durade prestec mesos");
String fechaFinal = GestionaMenu.llegirCadena("Introdueix fecha final (dd-mm-yyyy)");
//Prestamo presta = new Prestamo(0, "", null, null, importePrestado, tasaInteresAnual, empleado, listCC.get(opcioSeleccionade));
Prestamo presta = new Prestamo(0, importePrestado, duracionPrestamo, empleado, listCC.get(opcioSeleccionada));
try {
Statement st = conexion.createStatement();
int filesAfectades = st.executeUpdate(presta.insertarPrestamo());
System.out.println(filesAfectades + ", files afectades.");
} catch (SQLException ex) {
System.out.println("ERROR: " + ex.getErrorCode() + ", " + ex.getLocalizedMessage());
}
presta.toString();
}
/**
* Menú. Método de eliminar Préstamo Elimina el
* préstamo. Coge el código del préstamo.
*
* @author Jaume Mayol
* @param presta
* @see es.bancodehierro.banco.prestamo.Prestamo
*/
public void eliminarPrestamo(Prestamo presta) {
Connection conexio = Conexion.conectar();
try {
Statement st = conexio.createStatement();
int filesAfectades = st.executeUpdate(presta.eliminarPrestamo());
System.out.println(filesAfectades + ", files afectades.");
} catch (SQLException ex) {
System.out.println("ERROR: " + ex.getErrorCode() + ", " + ex.getLocalizedMessage());
}
}
/**
* Metodo para insertar una tarjeta en la base de datos.
* @param codigoCliente DNI del cliente.
* @param cuentaCorriente Codigo de cuenta corriente.
* @param sucursal Codigo de sucursal conjunto a la cuenta corriente.
* @param limite Limite (€) de la tarjeta.
* @param tipo Si es débito o crédito.
* @return
*/
public Boolean altaTarjeta(String codigoCliente, String cuentaCorriente, int sucursal, Double limite, String tipo) {
if (tipo.toUpperCase() == "DEBITO") {
Debito d = new Debito(codigoCliente, cuentaCorriente, sucursal);
} else {
Credito c = new Credito(codigoCliente, cuentaCorriente, sucursal, limite);
}
return null;
}
/**
* Método para eliminar una tarjeta de la base de datos.
* @param codigoTarjeta Código de la tarjeta.
* @return
*/
public Boolean eliminarTarjeta(String codigoTarjeta) {
try {
Statement st = Conexion.conectar().createStatement();
String query = "DELETE FROM tarjeta WHERE codigoTarjeta = " + codigoTarjeta;
st.executeUpdate(query);
st.close();
return true;
} catch (SQLException ex) {
System.out.println("Error en la conexion");
return false;
}
}
}