limpiado el egresoDAO

This commit is contained in:
Daniel Cortes
2019-03-07 16:11:19 -03:00
parent f5bbb7e0e8
commit b6021c82d7
3 changed files with 237 additions and 221 deletions

View File

@@ -89,7 +89,7 @@ public class EgresosController extends BaseController {
private void fillEgresosTable() { private void fillEgresosTable() {
EgresosTableModel egresosTableModel = view.getEgresosTableModel(); EgresosTableModel egresosTableModel = view.getEgresosTableModel();
egresosTableModel.removeRows(); egresosTableModel.removeRows();
for (Egreso egreso : DAOManager.getEgresoDAO().findByCaja(this.caja)) { for (Egreso egreso : DAOManager.getEgresoDAO().getByCaja(this.caja)) {
egresosTableModel.addRow(egreso); egresosTableModel.addRow(egreso);
} }
} }

View File

@@ -24,73 +24,33 @@
package danielcortes.xyz.models.egreso; package danielcortes.xyz.models.egreso;
import danielcortes.xyz.data.ConnectionHolder;
import danielcortes.xyz.models.caja.Caja; 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.TipoEgreso;
import danielcortes.xyz.models.tipo_egreso.TipoEgresoDAO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.YearMonth; import java.time.YearMonth;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.Optional;
import java.util.logging.Logger;
public abstract class EgresoDAO { public interface EgresoDAO {
List<Egreso> getAll();
private static final Logger LOGGER = Logger.getLogger(EgresoDAO.class.getName()); Optional<Egreso> getById(int id);
protected ConnectionHolder connectionHolder; List<Egreso> getByCaja(Caja caja);
public abstract List<Egreso> findAll(); List<Egreso> getByNro(String nro);
public abstract List<Egreso> findById(int id); List<Egreso> getByTipoEgreso(TipoEgreso tipoEgreso);
public abstract List<Egreso> findByCaja(Caja caja); List<Egreso> getByTipoEgresoEnCaja(TipoEgreso tipoEgreso, Caja caja);
public abstract List<Egreso> findByNro(String nro); void insertEgreso(Egreso egreso);
public abstract List<Egreso> findByTipoEgreso(TipoEgreso tipoEgreso); void updateEgreso(Egreso egreso);
public abstract List<Egreso> 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<Egreso> egresosFromResultSet(ResultSet rs) throws SQLException {
ArrayList<Egreso> 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;
}
} }

View File

@@ -24,9 +24,13 @@
package danielcortes.xyz.models.egreso; package danielcortes.xyz.models.egreso;
import danielcortes.xyz.data.ConnectionHolder;
import danielcortes.xyz.data.DAOManager;
import danielcortes.xyz.data.SQLiteConnectionHolder; import danielcortes.xyz.data.SQLiteConnectionHolder;
import danielcortes.xyz.models.caja.Caja; 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.TipoEgreso;
import danielcortes.xyz.models.tipo_egreso.TipoEgresoDAO;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
@@ -35,31 +39,48 @@ import java.time.LocalDate;
import java.time.YearMonth; import java.time.YearMonth;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; 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 static final Logger LOGGER = Logger.getLogger(SQLiteEgresoDAO.class.getName());
private ConnectionHolder connectionHolder;
public SQLiteEgresoDAO() { public SQLiteEgresoDAO() {
this.connectionHolder = new SQLiteConnectionHolder(); this.connectionHolder = new SQLiteConnectionHolder();
} }
@Override @Override
public List<Egreso> findAll() { public List<Egreso> getAll() {
List<Egreso> egresoList = new ArrayList<>(); List<Egreso> egresoList = new ArrayList<>();
try (Connection conn = connectionHolder.getConnection()) {
String query = "select * from egresos"; String query = "select * from egresos";
PreparedStatement ps = conn.prepareStatement(query); try (Connection conn = connectionHolder.getConnection()) {
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(); Egreso egreso = new Egreso();
ps.close(); 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) { } catch (SQLException e) {
LOGGER.log(Level.SEVERE, e.toString(), e); LOGGER.log(Level.SEVERE, e.toString(), e);
} }
@@ -67,41 +88,68 @@ public class SQLiteEgresoDAO extends EgresoDAO {
} }
@Override @Override
public List<Egreso> findById(int id) { public Optional<Egreso> getById(int id) {
List<Egreso> egresoList = new ArrayList<>(); Egreso egreso = null;
try (Connection conn = connectionHolder.getConnection()) {
String query = "select * from egresos where id = ?"; String query = "select * from egresos where id = ?";
PreparedStatement ps = conn.prepareStatement(query); try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
ps.setInt(1, id); ps.setInt(1, id);
ResultSet rs = ps.executeQuery(); 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"));
rs.close(); egreso.setNro(rs.getString("nro"));
ps.close(); egreso.setDescripcion(rs.getString("descripcion"));
egreso.setValor(rs.getInt("valor"));
egreso.setTipoEgreso(tipoEgreso);
egreso.setCaja(caja);
}
}
}
} catch (SQLException e) { } catch (SQLException e) {
LOGGER.log(Level.SEVERE, e.toString(), e); LOGGER.log(Level.SEVERE, e.toString(), e);
} }
return egresoList; return Optional.ofNullable(egreso);
} }
@Override @Override
public List<Egreso> findByCaja(Caja caja) { public List<Egreso> getByCaja(Caja caja) {
List<Egreso> egresoList = new ArrayList<>(); List<Egreso> egresoList = new ArrayList<>();
try (Connection conn = connectionHolder.getConnection()) {
if (Caja.EMPTY == caja) {
return egresoList;
}
String query = "select * from egresos where caja_id = ?"; String query = "select * from egresos where caja_id = ?";
PreparedStatement ps = conn.prepareStatement(query); try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
ps.setInt(1, caja.getId()); ps.setInt(1, caja.getId());
ResultSet rs = ps.executeQuery(); try (ResultSet rs = ps.executeQuery()) {
while (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, caja.getId()}); 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); egresoList.add(egreso);
}
}
}
rs.close();
ps.close();
} catch (SQLException e) { } catch (SQLException e) {
LOGGER.log(Level.SEVERE, e.toString(), e); LOGGER.log(Level.SEVERE, e.toString(), e);
} }
@@ -109,20 +157,34 @@ public class SQLiteEgresoDAO extends EgresoDAO {
} }
@Override @Override
public List<Egreso> findByNro(String nro) { public List<Egreso> getByNro(String nro) {
List<Egreso> egresoList = new ArrayList<>(); List<Egreso> egresoList = new ArrayList<>();
try (Connection conn = connectionHolder.getConnection()) {
String query = "select * from egresos where nro = ?"; String query = "select * from egresos where nro = ?";
PreparedStatement ps = conn.prepareStatement(query); try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
ps.setString(1, nro); ps.setString(1, nro);
ResultSet rs = ps.executeQuery(); try (ResultSet rs = ps.executeQuery()) {
TipoEgresoDAO tipoEgresoDAO = DAOManager.getTipoEgresoDAO();
CajaDAO cajaDAO = DAOManager.getCajaDAO();
LOGGER.log(Level.FINE, "QUERY: {0} | values {1}", new Object[]{query, nro}); 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(); egresoList.add(egreso);
ps.close(); }
}
}
} catch (SQLException e) { } catch (SQLException e) {
LOGGER.log(Level.SEVERE, e.toString(), e); LOGGER.log(Level.SEVERE, e.toString(), e);
} }
@@ -130,20 +192,31 @@ public class SQLiteEgresoDAO extends EgresoDAO {
} }
@Override @Override
public List<Egreso> findByTipoEgreso(TipoEgreso tipoEgreso) { public List<Egreso> getByTipoEgreso(TipoEgreso tipoEgreso) {
List<Egreso> egresoList = new ArrayList<>(); List<Egreso> egresoList = new ArrayList<>();
try (Connection conn = connectionHolder.getConnection()) {
String query = "select * from egresos where tipo_egreso_id = ?"; String query = "select * from egresos where tipo_egreso_id = ?";
PreparedStatement ps = conn.prepareStatement(query); try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
ps.setInt(1, tipoEgreso.getId()); ps.setInt(1, tipoEgreso.getId());
ResultSet rs = ps.executeQuery(); 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, tipoEgreso.getId()}); 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); egresoList.add(egreso);
}
rs.close(); }
ps.close(); }
} catch (SQLException e) { } catch (SQLException e) {
LOGGER.log(Level.SEVERE, e.toString(), e); LOGGER.log(Level.SEVERE, e.toString(), e);
} }
@@ -164,7 +237,17 @@ public class SQLiteEgresoDAO extends EgresoDAO {
ps.setInt(1, tipoEgreso.getId()); ps.setInt(1, tipoEgreso.getId());
ps.setInt(2, caja.getId()); ps.setInt(2, caja.getId());
try (ResultSet rs = ps.executeQuery()) { 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) { } catch (SQLException e) {
@@ -173,100 +256,24 @@ public class SQLiteEgresoDAO extends EgresoDAO {
return egresoList; 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 @Override
public int getTotalEgreso(Caja caja) { public int getTotalEgreso(Caja caja) {
int total = 0; int total = 0;
try (Connection conn = connectionHolder.getConnection()) {
if (Caja.EMPTY == caja) {
return total;
}
String query = "select sum(valor) from egresos where caja_id = ?"; String query = "select sum(valor) from egresos where caja_id = ?";
PreparedStatement ps = conn.prepareStatement(query); try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
ps.setInt(1, caja.getId()); ps.setInt(1, caja.getId());
ResultSet rs = ps.executeQuery(); try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
LOGGER.log(Level.FINE, "QUERY: {0} | values: {1}", new Object[]{query, caja.getId()});
rs.next();
total = rs.getInt(1); total = rs.getInt(1);
}
rs.close(); }
ps.close(); }
} catch (SQLException e) { } catch (SQLException e) {
LOGGER.log(Level.SEVERE, e.toString(), e); LOGGER.log(Level.SEVERE, e.toString(), e);
} }
@@ -276,29 +283,78 @@ public class SQLiteEgresoDAO extends EgresoDAO {
@Override @Override
public int getTotalEgresoMesPorTipo(YearMonth mes, TipoEgreso tipo) { public int getTotalEgresoMesPorTipo(YearMonth mes, TipoEgreso tipo) {
int total = 0; int total = 0;
try (Connection conn = connectionHolder.getConnection()) {
LocalDate start = mes.atDay(1); LocalDate start = mes.atDay(1);
LocalDate end = mes.atEndOfMonth(); 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 = ?"; 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); try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
ps.setString(1, start.toString()); ps.setString(1, start.toString());
ps.setString(2, end.toString()); ps.setString(2, end.toString());
ps.setInt(3, tipo.getId()); ps.setInt(3, tipo.getId());
ResultSet rs = ps.executeQuery(); try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
LOGGER.log(Level.FINE, "QUERY: {0} | values: {1}, {2}, {3}",
new Object[]{query, start, end, tipo});
rs.next();
total = rs.getInt(1); total = rs.getInt(1);
}
rs.close(); }
ps.close(); }
} catch (SQLException e) { } catch (SQLException e) {
LOGGER.log(Level.SEVERE, e.toString(), e); LOGGER.log(Level.SEVERE, e.toString(), e);
} }
return total; 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);
}
}
} }