diff --git a/src/danielcortes/xyz/controllers/EgresosController.java b/src/danielcortes/xyz/controllers/EgresosController.java index 9492219..a0f8090 100644 --- a/src/danielcortes/xyz/controllers/EgresosController.java +++ b/src/danielcortes/xyz/controllers/EgresosController.java @@ -89,7 +89,7 @@ public class EgresosController extends BaseController { private void fillEgresosTable() { EgresosTableModel egresosTableModel = view.getEgresosTableModel(); egresosTableModel.removeRows(); - for (Egreso egreso : DAOManager.getEgresoDAO().findByCaja(this.caja)) { + for (Egreso egreso : DAOManager.getEgresoDAO().getByCaja(this.caja)) { egresosTableModel.addRow(egreso); } } diff --git a/src/danielcortes/xyz/models/egreso/EgresoDAO.java b/src/danielcortes/xyz/models/egreso/EgresoDAO.java index 39df1bd..3ed29bc 100644 --- a/src/danielcortes/xyz/models/egreso/EgresoDAO.java +++ b/src/danielcortes/xyz/models/egreso/EgresoDAO.java @@ -24,73 +24,33 @@ package danielcortes.xyz.models.egreso; -import danielcortes.xyz.data.ConnectionHolder; import danielcortes.xyz.models.caja.Caja; -import danielcortes.xyz.models.caja.CajaDAO; -import danielcortes.xyz.models.caja.SQLiteCajaDAO; -import danielcortes.xyz.models.tipo_egreso.SQLiteTipoEgresoDAO; import danielcortes.xyz.models.tipo_egreso.TipoEgreso; -import danielcortes.xyz.models.tipo_egreso.TipoEgresoDAO; -import java.sql.ResultSet; -import java.sql.SQLException; import java.time.YearMonth; -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 EgresoDAO { +public interface EgresoDAO { + List getAll(); - private static final Logger LOGGER = Logger.getLogger(EgresoDAO.class.getName()); + Optional getById(int id); - protected ConnectionHolder connectionHolder; + List getByCaja(Caja caja); - public abstract List findAll(); + List getByNro(String nro); - public abstract List findById(int id); + List getByTipoEgreso(TipoEgreso tipoEgreso); - public abstract List findByCaja(Caja caja); + List getByTipoEgresoEnCaja(TipoEgreso tipoEgreso, Caja caja); - public abstract List findByNro(String nro); + void insertEgreso(Egreso egreso); - public abstract List findByTipoEgreso(TipoEgreso tipoEgreso); + void updateEgreso(Egreso egreso); - public abstract List getByTipoEgresoEnCaja(TipoEgreso tipoEgreso, Caja caja); + void deleteEgreso(Egreso egreso); - public abstract boolean insertEgreso(Egreso egreso); + int getTotalEgreso(Caja caja); - public abstract boolean updateEgreso(Egreso egreso); + int getTotalEgresoMesPorTipo(YearMonth mes, TipoEgreso tipo); - public abstract boolean deleteEgreso(Egreso egreso); - - public abstract int getTotalEgreso(Caja caja); - - public abstract int getTotalEgresoMesPorTipo(YearMonth mes, TipoEgreso tipo); - - List egresosFromResultSet(ResultSet rs) throws SQLException { - ArrayList egresoList = new ArrayList<>(); - while (rs.next()) { - int tipoEgresoId = rs.getInt("tipo_egreso_id"); - TipoEgresoDAO tipoEgresoDAO = new SQLiteTipoEgresoDAO(); - TipoEgreso tipoEgreso = tipoEgresoDAO.findById(tipoEgresoId).get(0); - - int cajaId = rs.getInt("caja_id"); - CajaDAO cajaDAO = new SQLiteCajaDAO(); - Caja caja = cajaDAO.getById(cajaId).get(); - - Egreso egreso = new Egreso(); - - egreso.setId(rs.getInt("id")); - egreso.setNro(rs.getString("nro")); - egreso.setDescripcion(rs.getString("descripcion")); - egreso.setValor(rs.getInt("valor")); - egreso.setTipoEgreso(tipoEgreso); - egreso.setCaja(caja); - - LOGGER.log(Level.FINER, "Se a creado: {0}", egreso); - - egresoList.add(egreso); - } - return egresoList; - } } diff --git a/src/danielcortes/xyz/models/egreso/SQLiteEgresoDAO.java b/src/danielcortes/xyz/models/egreso/SQLiteEgresoDAO.java index d35cc03..027105f 100644 --- a/src/danielcortes/xyz/models/egreso/SQLiteEgresoDAO.java +++ b/src/danielcortes/xyz/models/egreso/SQLiteEgresoDAO.java @@ -24,9 +24,13 @@ package danielcortes.xyz.models.egreso; +import danielcortes.xyz.data.ConnectionHolder; +import danielcortes.xyz.data.DAOManager; import danielcortes.xyz.data.SQLiteConnectionHolder; import danielcortes.xyz.models.caja.Caja; +import danielcortes.xyz.models.caja.CajaDAO; import danielcortes.xyz.models.tipo_egreso.TipoEgreso; +import danielcortes.xyz.models.tipo_egreso.TipoEgresoDAO; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -35,31 +39,48 @@ import java.time.LocalDate; import java.time.YearMonth; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; -public class SQLiteEgresoDAO extends EgresoDAO { +public class SQLiteEgresoDAO implements EgresoDAO { private static final Logger LOGGER = Logger.getLogger(SQLiteEgresoDAO.class.getName()); + private ConnectionHolder connectionHolder; public SQLiteEgresoDAO() { this.connectionHolder = new SQLiteConnectionHolder(); } @Override - public List findAll() { + public List getAll() { List egresoList = new ArrayList<>(); + String query = "select * from egresos"; try (Connection conn = connectionHolder.getConnection()) { - String query = "select * from egresos"; - PreparedStatement ps = conn.prepareStatement(query); - ResultSet rs = ps.executeQuery(); + try (PreparedStatement ps = conn.prepareStatement(query)) { + try (ResultSet rs = ps.executeQuery()) { + TipoEgresoDAO tipoEgresoDAO = DAOManager.getTipoEgresoDAO(); + CajaDAO cajaDAO = DAOManager.getCajaDAO(); - LOGGER.log(Level.FINE, "QUERY: {0}", query); + while (rs.next()) { + TipoEgreso tipoEgreso = tipoEgresoDAO.findById(rs.getInt("tipo_egreso_id")).get(0); - egresoList = this.egresosFromResultSet(rs); + //Confio en que la base de datos me dara un id existente + @SuppressWarnings("OptionalGetWithoutIsPresent") + Caja caja = cajaDAO.getById(rs.getInt("caja_id")).get(); - rs.close(); - ps.close(); + Egreso egreso = new Egreso(); + egreso.setId(rs.getInt("id")); + egreso.setNro(rs.getString("nro")); + egreso.setDescripcion(rs.getString("descripcion")); + egreso.setValor(rs.getInt("valor")); + egreso.setTipoEgreso(tipoEgreso); + egreso.setCaja(caja); + + egresoList.add(egreso); + } + } + } } catch (SQLException e) { LOGGER.log(Level.SEVERE, e.toString(), e); } @@ -67,20 +88,68 @@ public class SQLiteEgresoDAO extends EgresoDAO { } @Override - public List findById(int id) { - List egresoList = new ArrayList<>(); + public Optional getById(int id) { + Egreso egreso = null; + String query = "select * from egresos where id = ?"; try (Connection conn = connectionHolder.getConnection()) { - String query = "select * from egresos where id = ?"; - PreparedStatement ps = conn.prepareStatement(query); - ps.setInt(1, id); - ResultSet rs = ps.executeQuery(); + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setInt(1, id); + try (ResultSet rs = ps.executeQuery()) { + if (rs.next()) { + TipoEgresoDAO tipoEgresoDAO = DAOManager.getTipoEgresoDAO(); + TipoEgreso tipoEgreso = tipoEgresoDAO.findById(rs.getInt("tipo_egreso_id")).get(0); - LOGGER.log(Level.FINE, "QUERY: {0} | values: {1}", new Object[]{query, id}); + CajaDAO cajaDAO = DAOManager.getCajaDAO(); + //Confio en que la base de datos me dara un id existente + @SuppressWarnings("OptionalGetWithoutIsPresent") + Caja caja = cajaDAO.getById(rs.getInt("caja_id")).get(); - egresoList = this.egresosFromResultSet(rs); + egreso = new Egreso(); + egreso.setId(rs.getInt("id")); + egreso.setNro(rs.getString("nro")); + egreso.setDescripcion(rs.getString("descripcion")); + egreso.setValor(rs.getInt("valor")); + egreso.setTipoEgreso(tipoEgreso); + egreso.setCaja(caja); + } + } + } + } catch (SQLException e) { + LOGGER.log(Level.SEVERE, e.toString(), e); + } + return Optional.ofNullable(egreso); + } + + @Override + public List getByCaja(Caja caja) { + List egresoList = new ArrayList<>(); + + if (Caja.EMPTY == caja) { + return egresoList; + } + + String query = "select * from egresos where caja_id = ?"; + try (Connection conn = connectionHolder.getConnection()) { + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setInt(1, caja.getId()); + try (ResultSet rs = ps.executeQuery()) { + while (rs.next()) { + TipoEgresoDAO tipoEgresoDAO = DAOManager.getTipoEgresoDAO(); + TipoEgreso tipoEgreso = tipoEgresoDAO.findById(rs.getInt("tipo_egreso_id")).get(0); + + Egreso egreso = new Egreso(); + egreso.setId(rs.getInt("id")); + egreso.setNro(rs.getString("nro")); + egreso.setDescripcion(rs.getString("descripcion")); + egreso.setValor(rs.getInt("valor")); + egreso.setTipoEgreso(tipoEgreso); + egreso.setCaja(caja); + + egresoList.add(egreso); + } + } + } - rs.close(); - ps.close(); } catch (SQLException e) { LOGGER.log(Level.SEVERE, e.toString(), e); } @@ -88,20 +157,34 @@ public class SQLiteEgresoDAO extends EgresoDAO { } @Override - public List findByCaja(Caja caja) { + public List getByNro(String nro) { List egresoList = new ArrayList<>(); + String query = "select * from egresos where nro = ?"; try (Connection conn = connectionHolder.getConnection()) { - String query = "select * from egresos where caja_id = ?"; - PreparedStatement ps = conn.prepareStatement(query); - ps.setInt(1, caja.getId()); - ResultSet rs = ps.executeQuery(); + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, nro); + try (ResultSet rs = ps.executeQuery()) { + TipoEgresoDAO tipoEgresoDAO = DAOManager.getTipoEgresoDAO(); + CajaDAO cajaDAO = DAOManager.getCajaDAO(); - LOGGER.log(Level.FINE, "QUERY: {0} | values: {1}", new Object[]{query, caja.getId()}); + 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") + Caja caja = cajaDAO.getById(rs.getInt("caja_id")).get(); - egresoList = this.egresosFromResultSet(rs); + Egreso egreso = new Egreso(); + egreso.setId(rs.getInt("id")); + egreso.setNro(rs.getString("nro")); + egreso.setDescripcion(rs.getString("descripcion")); + egreso.setValor(rs.getInt("valor")); + egreso.setTipoEgreso(tipoEgreso); + egreso.setCaja(caja); - rs.close(); - ps.close(); + egresoList.add(egreso); + } + } + } } catch (SQLException e) { LOGGER.log(Level.SEVERE, e.toString(), e); } @@ -109,41 +192,31 @@ public class SQLiteEgresoDAO extends EgresoDAO { } @Override - public List findByNro(String nro) { + public List getByTipoEgreso(TipoEgreso tipoEgreso) { List egresoList = new ArrayList<>(); + String query = "select * from egresos where tipo_egreso_id = ?"; try (Connection conn = connectionHolder.getConnection()) { - String query = "select * from egresos where nro = ?"; - PreparedStatement ps = conn.prepareStatement(query); - ps.setString(1, nro); - ResultSet rs = ps.executeQuery(); + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setInt(1, tipoEgreso.getId()); + try (ResultSet rs = ps.executeQuery()) { + CajaDAO cajaDAO = DAOManager.getCajaDAO(); + while (rs.next()) { + //Confio en que la base de datos me dara un id existente + @SuppressWarnings("OptionalGetWithoutIsPresent") + Caja caja = cajaDAO.getById(rs.getInt("caja_id")).get(); - LOGGER.log(Level.FINE, "QUERY: {0} | values {1}", new Object[]{query, nro}); + Egreso egreso = new Egreso(); + egreso.setId(rs.getInt("id")); + egreso.setNro(rs.getString("nro")); + egreso.setDescripcion(rs.getString("descripcion")); + egreso.setValor(rs.getInt("valor")); + egreso.setTipoEgreso(tipoEgreso); + egreso.setCaja(caja); - egresoList = this.egresosFromResultSet(rs); - - rs.close(); - ps.close(); - } catch (SQLException e) { - LOGGER.log(Level.SEVERE, e.toString(), e); - } - return egresoList; - } - - @Override - public List findByTipoEgreso(TipoEgreso tipoEgreso) { - List egresoList = new ArrayList<>(); - try (Connection conn = connectionHolder.getConnection()) { - String query = "select * from egresos where tipo_egreso_id = ?"; - PreparedStatement ps = conn.prepareStatement(query); - ps.setInt(1, tipoEgreso.getId()); - ResultSet rs = ps.executeQuery(); - - LOGGER.log(Level.FINE, "QUERY: {0} | values: {1}", new Object[]{query, tipoEgreso.getId()}); - - egresoList = this.egresosFromResultSet(rs); - - rs.close(); - ps.close(); + egresoList.add(egreso); + } + } + } } catch (SQLException e) { LOGGER.log(Level.SEVERE, e.toString(), e); } @@ -164,7 +237,17 @@ public class SQLiteEgresoDAO extends EgresoDAO { ps.setInt(1, tipoEgreso.getId()); ps.setInt(2, caja.getId()); try (ResultSet rs = ps.executeQuery()) { - egresoList = this.egresosFromResultSet(rs); + while (rs.next()) { + Egreso egreso = new Egreso(); + egreso.setId(rs.getInt("id")); + egreso.setNro(rs.getString("nro")); + egreso.setDescripcion(rs.getString("descripcion")); + egreso.setValor(rs.getInt("valor")); + egreso.setTipoEgreso(tipoEgreso); + egreso.setCaja(caja); + + egresoList.add(egreso); + } } } } catch (SQLException e) { @@ -173,100 +256,24 @@ public class SQLiteEgresoDAO extends EgresoDAO { return egresoList; } - @Override - public boolean insertEgreso(Egreso egreso) { - int updates; - try (Connection conn = connectionHolder.getConnection()) { - String query = "insert into egresos (nro, descripcion, valor, tipo_egreso_id, caja_id) values (?,?,?,?,?)"; - PreparedStatement ps = conn.prepareStatement(query); - ps.setString(1, egreso.getNro()); - ps.setString(2, egreso.getDescripcion()); - ps.setInt(3, egreso.getValor()); - ps.setInt(4, egreso.getTipoEgreso().getId()); - ps.setInt(5, egreso.getCaja().getId()); - updates = ps.executeUpdate(); - - LOGGER.log(Level.FINE, "QUERY: {0} | values: [{1}, {2}, {3}, {4}, {5}] | updates: {6}", - new Object[]{query, egreso.getNro(), egreso.getDescripcion(), egreso.getValor(), - egreso.getTipoEgreso().getId(), egreso.getCaja().getId(), updates}); - - ps.close(); - - ps = conn.prepareStatement("select last_insert_rowid()"); - ResultSet rs = ps.executeQuery(); - rs.next(); - egreso.setId(rs.getInt(1)); - - rs.close(); - } catch (SQLException e) { - LOGGER.log(Level.SEVERE, e.toString(), e); - return false; - } - return updates > 0; - } - - @Override - public boolean updateEgreso(Egreso egreso) { - int updates; - try (Connection conn = connectionHolder.getConnection()) { - String query = "update egresos set nro = ?, descripcion = ?, valor = ?, tipo_egreso_id = ?, caja_id = ? where id = ? "; - PreparedStatement ps = conn.prepareStatement(query); - ps.setString(1, egreso.getNro()); - ps.setString(2, egreso.getDescripcion()); - ps.setInt(3, egreso.getValor()); - ps.setInt(4, egreso.getTipoEgreso().getId()); - ps.setInt(5, egreso.getCaja().getId()); - ps.setInt(6, egreso.getId()); - updates = ps.executeUpdate(); - - LOGGER.log(Level.FINE, "QUERY: {0} | values: [{1}, {2}, {3}, {4}, {5}, {6}] | updates: {7}", - new Object[]{query, egreso.getNro(), egreso.getDescripcion(), egreso.getValor(), - egreso.getTipoEgreso().getId(), egreso.getCaja().getId(), egreso.getId(), updates}); - - ps.close(); - } catch (SQLException e) { - LOGGER.log(Level.SEVERE, e.toString(), e); - return false; - } - return updates > 0; - } - - @Override - public boolean deleteEgreso(Egreso egreso) { - int updates; - try (Connection conn = connectionHolder.getConnection()) { - String query = "delete from egresos where id = ? "; - PreparedStatement ps = conn.prepareStatement(query); - ps.setInt(1, egreso.getId()); - updates = ps.executeUpdate(); - - LOGGER.log(Level.FINE, "QUERY: {0} | values: {1} | updates: {2}", - new Object[]{query, egreso.getId(), updates}); - - ps.close(); - } catch (SQLException e) { - LOGGER.log(Level.SEVERE, e.toString(), e); - return false; - } - return updates > 0; - } - @Override public int getTotalEgreso(Caja caja) { int total = 0; + + if (Caja.EMPTY == caja) { + return total; + } + + String query = "select sum(valor) from egresos where caja_id = ?"; try (Connection conn = connectionHolder.getConnection()) { - String query = "select sum(valor) from egresos where caja_id = ?"; - PreparedStatement ps = conn.prepareStatement(query); - ps.setInt(1, caja.getId()); - ResultSet rs = ps.executeQuery(); - - LOGGER.log(Level.FINE, "QUERY: {0} | values: {1}", new Object[]{query, caja.getId()}); - - rs.next(); - total = rs.getInt(1); - - rs.close(); - ps.close(); + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setInt(1, caja.getId()); + try (ResultSet rs = ps.executeQuery()) { + if (rs.next()) { + total = rs.getInt(1); + } + } + } } catch (SQLException e) { LOGGER.log(Level.SEVERE, e.toString(), e); } @@ -276,29 +283,78 @@ public class SQLiteEgresoDAO extends EgresoDAO { @Override public int getTotalEgresoMesPorTipo(YearMonth mes, TipoEgreso tipo) { int total = 0; + 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 = ?"; try (Connection conn = connectionHolder.getConnection()) { - 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 = ?"; - PreparedStatement ps = conn.prepareStatement(query); - ps.setString(1, start.toString()); - ps.setString(2, end.toString()); - ps.setInt(3, tipo.getId()); - ResultSet rs = ps.executeQuery(); - - LOGGER.log(Level.FINE, "QUERY: {0} | values: {1}, {2}, {3}", - new Object[]{query, start, end, tipo}); - - rs.next(); - total = rs.getInt(1); - - rs.close(); - ps.close(); + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, start.toString()); + ps.setString(2, end.toString()); + ps.setInt(3, tipo.getId()); + try (ResultSet rs = ps.executeQuery()) { + if (rs.next()) { + total = rs.getInt(1); + } + } + } } catch (SQLException e) { LOGGER.log(Level.SEVERE, e.toString(), e); } return total; } + @Override + public void insertEgreso(Egreso egreso) { + String query = "insert into egresos (nro, descripcion, valor, tipo_egreso_id, caja_id) values (?,?,?,?,?)"; + try (Connection conn = connectionHolder.getConnection()) { + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, egreso.getNro()); + ps.setString(2, egreso.getDescripcion()); + ps.setInt(3, egreso.getValor()); + ps.setInt(4, egreso.getTipoEgreso().getId()); + ps.setInt(5, egreso.getCaja().getId()); + ps.executeUpdate(); + } + try (PreparedStatement ps = conn.prepareStatement("select last_insert_rowid()")) { + try (ResultSet rs = ps.executeQuery()) { + rs.next(); + egreso.setId(rs.getInt(1)); + } + } + } catch (SQLException e) { + LOGGER.log(Level.SEVERE, e.toString(), e); + } + } + + @Override + public void updateEgreso(Egreso egreso) { + String query = "update egresos set nro = ?, descripcion = ?, valor = ?, tipo_egreso_id = ?, caja_id = ? where id = ? "; + try (Connection conn = connectionHolder.getConnection()) { + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setString(1, egreso.getNro()); + ps.setString(2, egreso.getDescripcion()); + ps.setInt(3, egreso.getValor()); + ps.setInt(4, egreso.getTipoEgreso().getId()); + ps.setInt(5, egreso.getCaja().getId()); + ps.setInt(6, egreso.getId()); + ps.executeUpdate(); + } + } catch (SQLException e) { + LOGGER.log(Level.SEVERE, e.toString(), e); + } + } + + @Override + public void deleteEgreso(Egreso egreso) { + String query = "delete from egresos where id = ? "; + try (Connection conn = connectionHolder.getConnection()) { + try (PreparedStatement ps = conn.prepareStatement(query)) { + ps.setInt(1, egreso.getId()); + ps.executeUpdate(); + } + } catch (SQLException e) { + LOGGER.log(Level.SEVERE, e.toString(), e); + } + } }