package es.bancodehierro.banco.prestamo; import es.bancodehierro.banco.cc.CuentaCorriente; import es.bancodehierro.banco.cc.Movimiento; import es.bancodehierro.banco.conexion.Conexion; import static es.bancodehierro.banco.enumeraciones.EnumMovimiento.PRESTAMO; import es.bancodehierro.banco.excepciones.PrestamoException; import es.bancodehierro.banco.persona.Empleado; import es.bancodehierro.banco.sucursal.Sucursal; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; /** * Clase de Prestamo. Toma el control sobre los préstamos y las operaciones * sobre ellos. * * @author Miquel Vallespir, Rafel Sastre, Pau Riera, Jaume Mayol i Tomeu * Moranta. */ public class Prestamo { /** * Atributos de la clase préstamo, almacenan información sobre el préstamo * en cuestión. */ private int codigoPrestamo; private Double importePrestamo; private int duracionMesPrestamo; private Empleado dniTrabajador; private Date fechaFirmaPrestamo; private Sucursal codigoSucTarjeta; private CuentaCorriente numeroCcPrestamo; private ArrayList<Movimiento> listaMovimientos; /** * Constructor de la clase Préstamo * * @param codigoPrestamo Código único que identifica el préstamo. * @param importePrestamo Cantidad mensual a pagar. * @param duracionMesPrestamo Cuántos meses durará el préstamo. * @param dniTrabajador DNI del trabajador que dará de alta el préstamo * @param numeroCcPrestamo Cuenta Corriente en la cual se asociará el * préstamo. */ public Prestamo(int codigoPrestamo, Double importePrestamo, int duracionMesPrestamo, Empleado dniTrabajador, CuentaCorriente numeroCcPrestamo) { this.codigoPrestamo = codigoPrestamo; this.importePrestamo = importePrestamo; this.duracionMesPrestamo = duracionMesPrestamo; this.dniTrabajador = dniTrabajador; this.numeroCcPrestamo = numeroCcPrestamo; this.listaMovimientos = new ArrayList<>(); } public int getCodigoPrestamo() { return codigoPrestamo; } public Double getImportePrestamo() { return importePrestamo; } public int getDuracionMesPrestamo() { return duracionMesPrestamo; } public Empleado getDniTrabajador() { return dniTrabajador; } public Date getFechaFirmaPrestamo() { return fechaFirmaPrestamo; } public Sucursal getCodigoSucTarjeta() { return codigoSucTarjeta; } public CuentaCorriente getNumeroCcPrestamo() { return numeroCcPrestamo; } public ArrayList<Movimiento> getListaMovimientos() { return listaMovimientos; } /** * Ver Movimientos Préstamo Busca todos los movimientos de un préstamo. * * @author Jaume Mayol */ public ArrayList<String> verMovimientosPrestamo() { ArrayList<String> resultSet = null; try { ResultSet rs = Conexion.conectar().createStatement().executeQuery("SELECT CODIGO_MP," + "CODIGO_PRESTAMO_MP," + "OPERACION_MP" + "FECHA_MP," + "IMPORTE_MP," + "CONCEPTO_MP " + "FROM MOVIMIENTO_PRESTAMO " + "WHERE CODIGO_PRESTAMO_MP='" + codigoPrestamo + "'"); while (rs.next()) { resultSet.add( "Codigo Movimiento: " + rs.getString(1) + ", Codigo Préstamo: " + rs.getInt(2) + ", Operacion: " + rs.getString(3) + ", Fecha: " + rs.getString(4) + ", Importe: " + rs.getDouble(5) + ", Concepto: " + rs.getString(6)); } } catch (SQLException ex) { System.out.println("Error: " + ex.getMessage() + ". \n ErrorCode:" + ex.getErrorCode() + ", SQLState:" + ex.getSQLState()); } return resultSet; } public void setImportePrestamo(Double importePrestamo) { this.importePrestamo = importePrestamo; } public void setFechaFirmaPrestamo(Date fechaFirmaPrestamo) { this.fechaFirmaPrestamo = fechaFirmaPrestamo; } /** * Añade un movimiento a la lista de movimientos propia del préstamo. * * @param mov Parámetre movimiento * @return boolean * @throws PrestamoException Lanza excepción */ public boolean añadirMovimiento(Movimiento mov) throws PrestamoException { if (mov != null) { this.listaMovimientos.add(mov); return true; } return false; } /** * Buscador de préstamos El método parte del listado Movimiento y selecciona * sólo los de tipo Préstamo. * * @author Jaume Mayol * @param listaMovimientos listaMovimientos * @return el objeto ArrayList de Movimiento con el tipo sólo de préstamo. * @see es.bancodehierro.banco.cc.Movimiento */ public ArrayList<Movimiento> buscadorPrestamos(ArrayList<Movimiento> listaMovimientos) { ArrayList<Movimiento> prestamos = new ArrayList<>(); for (int i = 0; i < listaMovimientos.size(); ++i) { Movimiento aux = listaMovimientos.get(i); //Get para conseguir el tipo y lo igualamos a PRESTAMO //PRESTAMO, tipo de dato enumerario importado de la clase Enumeración. if (aux.getTipo() == PRESTAMO) { prestamos.add(aux); } } return prestamos; } /** * Mètodo de inserción de prestamo. * * @author Rafel Sastre. * @return String */ public String insertarPrestamo() { return "INSERT INTO PRESTAMO (CODIGO_PRESTAMO, IMPORTE_PRESTAMO, DURACION_MES_PRESTAMO, DNI_TRABAJADOR, FECHA_FIRMA_PRESTAMO, CODIGO_SUC_TARJETA, NUMERO_CC_PRESTAMO) VALUES (" + getCodigoPrestamo() + ", " + getImportePrestamo() + ", " + getDuracionMesPrestamo() + ", '" + getDniTrabajador() + "', " + getFechaFirmaPrestamo() + ", " + getCodigoSucTarjeta() + ", '" + getNumeroCcPrestamo() + "')"; } /** * Método de modificación de préstamo (por código) * * @author Pau Riera. * @return String */ public String updatePrestamo() { return "UPDATE Prestamo SET (" + getCodigoPrestamo() + ", " + getImportePrestamo() + ", " + getDuracionMesPrestamo() + ", " + getDniTrabajador() + ", " + getFechaFirmaPrestamo() + ", " + getCodigoSucTarjeta() + ", " + getNumeroCcPrestamo() + ") WHERE codiprestamo = " + getCodigoPrestamo(); } /** * Eliminar Préstamo Elimina el préstamo por código, si lo encuentra. Si no, * lanza una excepción de préstamo o de SQL. * * @author Jaume Mayol Hervás * @return String */ public String eliminarPrestamo() { return "DELETE FROM Prestamo WHERE Codigo_Prestamo=" + getCodigoPrestamo(); } }