From 7e31885c8a61d8dc3b1ceea9782300414ec08c4d Mon Sep 17 00:00:00 2001 From: Daniel Cortes Date: Thu, 7 Mar 2019 19:00:22 -0300 Subject: [PATCH] Reescrito modeo de TipoEgreso Ademas los metodos que lo utilizaban para buscar en la base de datos ahora comprueban contra TipoEgreso.EMPTY para evitar buscar cuando se para un TipoEgreso.EMPTY --- .../EstadoResultadoController.java | 8 +- .../xyz/informes/InformeEstadoResultado.java | 8 +- .../xyz/models/egreso/SQLiteEgresoDAO.java | 28 +++++-- .../tipo_egreso/SQLiteTipoEgresoDAO.java | 81 ++++++++++--------- .../xyz/models/tipo_egreso/TipoEgreso.java | 6 ++ .../xyz/models/tipo_egreso/TipoEgresoDAO.java | 34 ++------ .../TipoEgresoToStringWrapper.java | 6 +- 7 files changed, 87 insertions(+), 84 deletions(-) diff --git a/src/danielcortes/xyz/controllers/EstadoResultadoController.java b/src/danielcortes/xyz/controllers/EstadoResultadoController.java index f622cf1..6f5d166 100644 --- a/src/danielcortes/xyz/controllers/EstadoResultadoController.java +++ b/src/danielcortes/xyz/controllers/EstadoResultadoController.java @@ -172,11 +172,11 @@ public class EstadoResultadoController extends BaseController { private void fillGastosGenerales() { TipoEgreso facturaGastosGenerales = DAOManager.getTipoEgresoDAO() - .findByNombre("Factura Gastos Generales").get(0); + .findByNombre("Factura Gastos Generales").orElse(TipoEgreso.EMPTY); TipoEgreso gastoGeneralConBoleta = DAOManager.getTipoEgresoDAO() - .findByNombre("Gasto General Con Boleta").get(0); + .findByNombre("Gasto General Con Boleta").orElse(TipoEgreso.EMPTY); TipoEgreso gastoGeneralSinRespaldo = DAOManager.getTipoEgresoDAO() - .findByNombre("Gasto General Sin Respaldo").get(0); + .findByNombre("Gasto General Sin Respaldo").orElse(TipoEgreso.EMPTY); int cuentaCorrienteFactura = this.estadoResultado.getCuentaCorrienteFactura(); int cuentaCorrienteBoleta = this.estadoResultado.getCuentaCorrienteBoleta(); @@ -201,7 +201,7 @@ public class EstadoResultadoController extends BaseController { } private void fillGastosOperacionales() { - TipoEgreso tipoPagoPartime = DAOManager.getTipoEgresoDAO().findByNombre("Pago Partime").get(0); + TipoEgreso tipoPagoPartime = DAOManager.getTipoEgresoDAO().findByNombre("Pago Partime").orElse(TipoEgreso.EMPTY); int costoVenta = this.estadoResultado.getCostoVenta(); int remuneraciones = this.estadoResultado.getRemuneraciones(); diff --git a/src/danielcortes/xyz/informes/InformeEstadoResultado.java b/src/danielcortes/xyz/informes/InformeEstadoResultado.java index b09c7da..f63812d 100644 --- a/src/danielcortes/xyz/informes/InformeEstadoResultado.java +++ b/src/danielcortes/xyz/informes/InformeEstadoResultado.java @@ -171,7 +171,7 @@ public class InformeEstadoResultado { partime.createCell(0).setCellValue("Partime"); partime.createCell(1).setCellValue(DAOManager.getEgresoDAO().getTotalEgresoMesPorTipo(this.mes, - DAOManager.getTipoEgresoDAO().findByNombre("Pago Partime").get(0))); + DAOManager.getTipoEgresoDAO().findByNombre("Pago Partime").orElse(TipoEgreso.EMPTY))); bonosPersonal.createCell(0).setCellValue("Bonos Personal"); bonosPersonal.createCell(1).setCellValue(this.estadoResultado.getBonosPersonal()); @@ -222,11 +222,11 @@ public class InformeEstadoResultado { private void fillGastosGeneralesData() { TipoEgreso facturaGastosGenerales = DAOManager.getTipoEgresoDAO() - .findByNombre("Factura Gastos Generales").get(0); + .findByNombre("Factura Gastos Generales").orElse(TipoEgreso.EMPTY); TipoEgreso gastoGeneralConBoleta = DAOManager.getTipoEgresoDAO() - .findByNombre("Gasto General Con Boleta").get(0); + .findByNombre("Gasto General Con Boleta").orElse(TipoEgreso.EMPTY); TipoEgreso gastoGeneralSinRespaldo = DAOManager.getTipoEgresoDAO() - .findByNombre("Gasto General Sin Respaldo").get(0); + .findByNombre("Gasto General Sin Respaldo").orElse(TipoEgreso.EMPTY); int startId = 29; diff --git a/src/danielcortes/xyz/models/egreso/SQLiteEgresoDAO.java b/src/danielcortes/xyz/models/egreso/SQLiteEgresoDAO.java index 027105f..b8fc89f 100644 --- a/src/danielcortes/xyz/models/egreso/SQLiteEgresoDAO.java +++ b/src/danielcortes/xyz/models/egreso/SQLiteEgresoDAO.java @@ -63,7 +63,9 @@ public class SQLiteEgresoDAO implements EgresoDAO { CajaDAO cajaDAO = DAOManager.getCajaDAO(); while (rs.next()) { - TipoEgreso tipoEgreso = tipoEgresoDAO.findById(rs.getInt("tipo_egreso_id")).get(0); + //Confio en que la base de datos me dara un id existente + @SuppressWarnings("OptionalGetWithoutIsPresent") + TipoEgreso tipoEgreso = tipoEgresoDAO.findById(rs.getInt("tipo_egreso_id")).get(); //Confio en que la base de datos me dara un id existente @SuppressWarnings("OptionalGetWithoutIsPresent") @@ -97,7 +99,9 @@ public class SQLiteEgresoDAO implements EgresoDAO { try (ResultSet rs = ps.executeQuery()) { if (rs.next()) { TipoEgresoDAO tipoEgresoDAO = DAOManager.getTipoEgresoDAO(); - TipoEgreso tipoEgreso = tipoEgresoDAO.findById(rs.getInt("tipo_egreso_id")).get(0); + //Confio en que la base de datos me dara un id existente + @SuppressWarnings("OptionalGetWithoutIsPresent") + TipoEgreso tipoEgreso = tipoEgresoDAO.findById(rs.getInt("tipo_egreso_id")).get(); CajaDAO cajaDAO = DAOManager.getCajaDAO(); //Confio en que la base de datos me dara un id existente @@ -135,7 +139,9 @@ public class SQLiteEgresoDAO implements EgresoDAO { try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { TipoEgresoDAO tipoEgresoDAO = DAOManager.getTipoEgresoDAO(); - TipoEgreso tipoEgreso = tipoEgresoDAO.findById(rs.getInt("tipo_egreso_id")).get(0); + //Confio en que la base de datos me dara un id existente + @SuppressWarnings("OptionalGetWithoutIsPresent") + TipoEgreso tipoEgreso = tipoEgresoDAO.findById(rs.getInt("tipo_egreso_id")).get(); Egreso egreso = new Egreso(); egreso.setId(rs.getInt("id")); @@ -168,7 +174,9 @@ public class SQLiteEgresoDAO implements EgresoDAO { CajaDAO cajaDAO = DAOManager.getCajaDAO(); while (rs.next()) { - TipoEgreso tipoEgreso = tipoEgresoDAO.findById(rs.getInt("tipo_egreso_id")).get(0); + //Confio en que la base de datos me dara un id existente + @SuppressWarnings("OptionalGetWithoutIsPresent") + TipoEgreso tipoEgreso = tipoEgresoDAO.findById(rs.getInt("tipo_egreso_id")).get(); //Confio en que la base de datos me dara un id existente @SuppressWarnings("OptionalGetWithoutIsPresent") Caja caja = cajaDAO.getById(rs.getInt("caja_id")).get(); @@ -194,6 +202,11 @@ public class SQLiteEgresoDAO implements EgresoDAO { @Override public List getByTipoEgreso(TipoEgreso tipoEgreso) { List egresoList = new ArrayList<>(); + + if(TipoEgreso.EMPTY == tipoEgreso){ + return egresoList; + } + String query = "select * from egresos where tipo_egreso_id = ?"; try (Connection conn = connectionHolder.getConnection()) { try (PreparedStatement ps = conn.prepareStatement(query)) { @@ -227,7 +240,7 @@ public class SQLiteEgresoDAO implements EgresoDAO { public List getByTipoEgresoEnCaja(TipoEgreso tipoEgreso, Caja caja) { List egresoList = new ArrayList<>(); - if (caja == Caja.EMPTY) { + if (caja == Caja.EMPTY || tipoEgreso == TipoEgreso.EMPTY) { return egresoList; } @@ -283,6 +296,11 @@ public class SQLiteEgresoDAO implements EgresoDAO { @Override public int getTotalEgresoMesPorTipo(YearMonth mes, TipoEgreso tipo) { int total = 0; + + if (TipoEgreso.EMPTY == tipo){ + return total; + } + LocalDate start = mes.atDay(1); LocalDate end = mes.atEndOfMonth(); String query = "select sum(valor) from egresos inner join caja on (egresos.caja_id = caja.id) where fecha between ? and ? and tipo_egreso_id = ?"; diff --git a/src/danielcortes/xyz/models/tipo_egreso/SQLiteTipoEgresoDAO.java b/src/danielcortes/xyz/models/tipo_egreso/SQLiteTipoEgresoDAO.java index b115782..1359132 100644 --- a/src/danielcortes/xyz/models/tipo_egreso/SQLiteTipoEgresoDAO.java +++ b/src/danielcortes/xyz/models/tipo_egreso/SQLiteTipoEgresoDAO.java @@ -24,6 +24,7 @@ package danielcortes.xyz.models.tipo_egreso; +import danielcortes.xyz.data.ConnectionHolder; import danielcortes.xyz.data.SQLiteConnectionHolder; import java.sql.Connection; import java.sql.PreparedStatement; @@ -31,12 +32,14 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; -public class SQLiteTipoEgresoDAO extends TipoEgresoDAO { +public class SQLiteTipoEgresoDAO implements TipoEgresoDAO { private static final Logger LOGGER = Logger.getLogger(SQLiteTipoEgresoDAO.class.getName()); + private ConnectionHolder connectionHolder; public SQLiteTipoEgresoDAO() { this.connectionHolder = new SQLiteConnectionHolder(); @@ -45,17 +48,17 @@ public class SQLiteTipoEgresoDAO extends TipoEgresoDAO { @Override public List findAll() { List tipoEgresoList = new ArrayList<>(); + String query = "select * from tipos_egreso"; try (Connection conn = connectionHolder.getConnection()) { - String query = "select * from tipos_egreso"; - PreparedStatement ps = conn.prepareStatement(query); - ResultSet rs = ps.executeQuery(); - - LOGGER.log(Level.FINE, "QUERY: {0}", query); - - tipoEgresoList = this.tipoEgresoFromResultSet(rs); - - rs.close(); - ps.close(); + try (PreparedStatement ps = conn.prepareStatement(query)) { + try (ResultSet rs = ps.executeQuery()) { + while (rs.next()) { + TipoEgreso tipoEgreso = new TipoEgreso(); + tipoEgreso.setId(rs.getInt("id")); + tipoEgreso.setNombre(rs.getString("nombre")); + } + } + } } catch (SQLException e) { LOGGER.log(Level.SEVERE, e.toString(), e); } @@ -63,44 +66,44 @@ public class SQLiteTipoEgresoDAO extends TipoEgresoDAO { } @Override - public List findById(int id) { - List tipoEgresoList = new ArrayList<>(); + public Optional findById(int id) { + TipoEgreso tipoEgreso = null; + String query = "select * from tipos_egreso where id = ?"; try (Connection conn = connectionHolder.getConnection()) { - String query = "select * from tipos_egreso where id = ?"; - PreparedStatement ps = conn.prepareStatement(query); - ps.setInt(1, id); - ResultSet rs = ps.executeQuery(); - - LOGGER.log(Level.FINE, "QUERY: {0} | values: {1}", new Object[]{query, id}); - - tipoEgresoList = this.tipoEgresoFromResultSet(rs); - - rs.close(); - ps.close(); + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setInt(1, id); + try (ResultSet rs = ps.executeQuery()) { + if (rs.next()) { + tipoEgreso = new TipoEgreso(); + tipoEgreso.setId(rs.getInt("id")); + tipoEgreso.setNombre(rs.getString("nombre")); + } + } + } } catch (SQLException e) { LOGGER.log(Level.SEVERE, e.toString(), e); } - return tipoEgresoList; + return Optional.ofNullable(tipoEgreso); } @Override - public List findByNombre(String nombre) { - List tipoEgresoList = new ArrayList<>(); + public Optional findByNombre(String nombre) { + TipoEgreso tipoEgreso = null; + String query = "select * from tipos_egreso where nombre = ?"; try (Connection conn = connectionHolder.getConnection()) { - String query = "select * from tipos_egreso where nombre = ?"; - PreparedStatement ps = conn.prepareStatement(query); - ps.setString(1, nombre); - ResultSet rs = ps.executeQuery(); - - LOGGER.log(Level.FINE, "QUERY: {0} | values: {1}", new Object[]{query, nombre}); - - tipoEgresoList = this.tipoEgresoFromResultSet(rs); - - rs.close(); - ps.close(); + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, nombre); + try (ResultSet rs = ps.executeQuery()) { + if (rs.next()) { + tipoEgreso = new TipoEgreso(); + tipoEgreso.setId(rs.getInt("id")); + tipoEgreso.setNombre(rs.getString("nombre")); + } + } + } } catch (SQLException e) { LOGGER.log(Level.SEVERE, e.toString(), e); } - return tipoEgresoList; + return Optional.ofNullable(tipoEgreso); } } diff --git a/src/danielcortes/xyz/models/tipo_egreso/TipoEgreso.java b/src/danielcortes/xyz/models/tipo_egreso/TipoEgreso.java index 9f54bc7..f51e53f 100644 --- a/src/danielcortes/xyz/models/tipo_egreso/TipoEgreso.java +++ b/src/danielcortes/xyz/models/tipo_egreso/TipoEgreso.java @@ -49,6 +49,12 @@ package danielcortes.xyz.models.tipo_egreso; public class TipoEgreso { + public final static TipoEgreso EMPTY; + + static { + EMPTY = new TipoEgreso(); + EMPTY.setNombre("EMPTY"); + } private int id; private String nombre; diff --git a/src/danielcortes/xyz/models/tipo_egreso/TipoEgresoDAO.java b/src/danielcortes/xyz/models/tipo_egreso/TipoEgresoDAO.java index d108680..f412855 100644 --- a/src/danielcortes/xyz/models/tipo_egreso/TipoEgresoDAO.java +++ b/src/danielcortes/xyz/models/tipo_egreso/TipoEgresoDAO.java @@ -48,37 +48,13 @@ package danielcortes.xyz.models.tipo_egreso; -import danielcortes.xyz.data.ConnectionHolder; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; +import java.util.Optional; -public abstract class TipoEgresoDAO { +public interface TipoEgresoDAO { + List findAll(); - private static final Logger LOGGER = Logger.getLogger(TipoEgresoDAO.class.getName()); + Optional findById(int id); - protected ConnectionHolder connectionHolder; - - public abstract List findAll(); - - public abstract List findById(int id); - - public abstract List findByNombre(String nombre); - - List tipoEgresoFromResultSet(ResultSet rs) throws SQLException { - ArrayList tipoEgresoList = new ArrayList<>(); - while (rs.next()) { - TipoEgreso tipoEgreso = new TipoEgreso(); - tipoEgreso.setId(rs.getInt("id")); - tipoEgreso.setNombre(rs.getString("nombre")); - - LOGGER.log(Level.FINER, "Se a creado {0}", tipoEgreso); - - tipoEgresoList.add(tipoEgreso); - } - return tipoEgresoList; - } + Optional findByNombre(String nombre); } diff --git a/src/danielcortes/xyz/models/tipo_egreso/TipoEgresoToStringWrapper.java b/src/danielcortes/xyz/models/tipo_egreso/TipoEgresoToStringWrapper.java index ba50d04..bb9d926 100644 --- a/src/danielcortes/xyz/models/tipo_egreso/TipoEgresoToStringWrapper.java +++ b/src/danielcortes/xyz/models/tipo_egreso/TipoEgresoToStringWrapper.java @@ -1,14 +1,14 @@ package danielcortes.xyz.models.tipo_egreso; public class TipoEgresoToStringWrapper extends TipoEgreso { + private TipoEgreso tipoEgreso; public TipoEgresoToStringWrapper(TipoEgreso tipoEgreso) { - this.setId(tipoEgreso.getId()); - this.setNombre(tipoEgreso.getNombre()); + this.tipoEgreso = tipoEgreso; } @Override public String toString() { - return this.getNombre(); + return this.tipoEgreso.getNombre(); } }