Se agrego el miodelo de detalle

This commit is contained in:
Daniel Cortés
2019-05-20 12:14:18 -04:00
parent e6b0bfaa27
commit 587d06b12a
14 changed files with 681 additions and 1 deletions

View File

@@ -36,7 +36,7 @@ import javax.swing.UnsupportedLookAndFeelException;
public class Main {
private static final int DATABASE_VERSION = 2;
private static final int DATABASE_VERSION = 3;
static {
setUpSystemProperties();

View File

@@ -28,6 +28,8 @@ import danielcortes.xyz.models.caja.CajaDAO;
import danielcortes.xyz.models.caja.SQLiteCajaDAO;
import danielcortes.xyz.models.calculo_fondo.CalculoFondoDAO;
import danielcortes.xyz.models.calculo_fondo.SQLiteCalculoFondoDAO;
import danielcortes.xyz.models.detalle.DetalleDAO;
import danielcortes.xyz.models.detalle.SQLiteDetalleDAO;
import danielcortes.xyz.models.documentos.DocumentosDAO;
import danielcortes.xyz.models.documentos.SQLiteDocumentosDAO;
import danielcortes.xyz.models.efectivo.EfectivoDAO;
@@ -38,6 +40,8 @@ import danielcortes.xyz.models.estado_resultado.EstadoResultadoDAO;
import danielcortes.xyz.models.estado_resultado.SQLiteEstadoResultadoDAO;
import danielcortes.xyz.models.ingreso.IngresoDAO;
import danielcortes.xyz.models.ingreso.SQLiteIngresoDAO;
import danielcortes.xyz.models.tipo_detalle.SQLiteTipoDetalleDAO;
import danielcortes.xyz.models.tipo_detalle.TipoDetalleDAO;
import danielcortes.xyz.models.tipo_egreso.SQLiteTipoEgresoDAO;
import danielcortes.xyz.models.tipo_egreso.TipoEgresoDAO;
import danielcortes.xyz.models.tipo_ingreso.SQLiteTipoIngresoDAO;
@@ -53,8 +57,10 @@ public class DAOManager {
private static EfectivoDAO efectivoDAO;
private static EgresoDAO egresoDAO;
private static IngresoDAO ingresoDAO;
private static DetalleDAO detalleDAO;
private static TipoEgresoDAO tipoEgresoDAO;
private static TipoIngresoDAO tipoIngresoDAO;
private static TipoDetalleDAO tipoDetalleDAO;
private static EstadoResultadoDAO estadoResultadoDAO;
private static VersionDAO versionDAO;
@@ -65,8 +71,10 @@ public class DAOManager {
efectivoDAO = new SQLiteEfectivoDAO();
egresoDAO = new SQLiteEgresoDAO();
ingresoDAO = new SQLiteIngresoDAO();
detalleDAO = new SQLiteDetalleDAO();
tipoEgresoDAO = new SQLiteTipoEgresoDAO();
tipoIngresoDAO = new SQLiteTipoIngresoDAO();
tipoDetalleDAO = new SQLiteTipoDetalleDAO();
estadoResultadoDAO = new SQLiteEstadoResultadoDAO();
versionDAO = new SQLiteVersionDAO();
}
@@ -78,8 +86,10 @@ public class DAOManager {
efectivoDAO = new SQLiteEfectivoDAO(connectionHolder);
egresoDAO = new SQLiteEgresoDAO(connectionHolder);
ingresoDAO = new SQLiteIngresoDAO(connectionHolder);
detalleDAO = new SQLiteDetalleDAO(connectionHolder);
tipoEgresoDAO = new SQLiteTipoEgresoDAO(connectionHolder);
tipoIngresoDAO = new SQLiteTipoIngresoDAO(connectionHolder);
tipoDetalleDAO = new SQLiteTipoDetalleDAO(connectionHolder);
estadoResultadoDAO = new SQLiteEstadoResultadoDAO(connectionHolder);
versionDAO = new SQLiteVersionDAO(connectionHolder);
}
@@ -108,6 +118,10 @@ public class DAOManager {
return ingresoDAO;
}
public static DetalleDAO getDetalleDAO() {
return detalleDAO;
}
public static TipoEgresoDAO getTipoEgresoDAO() {
return tipoEgresoDAO;
}
@@ -116,6 +130,10 @@ public class DAOManager {
return tipoIngresoDAO;
}
public static TipoDetalleDAO getTipoDetalleDAO() {
return tipoDetalleDAO;
}
public static EstadoResultadoDAO getEstadoResultadoDAO() {
return estadoResultadoDAO;
}

View File

@@ -0,0 +1,85 @@
package danielcortes.xyz.models.detalle;
import danielcortes.xyz.models.estado_resultado.EstadoResultado;
import danielcortes.xyz.models.tipo_detalle.TipoDetalle;
import java.util.Objects;
public class Detalle {
private int id;
private int valor;
private String descripcion;
private TipoDetalle tipoDetalle;
private EstadoResultado estadoResultado;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getValor() {
return valor;
}
public void setValor(int valor) {
this.valor = valor;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public TipoDetalle getTipoDetalle() {
return tipoDetalle;
}
public void setTipoDetalle(TipoDetalle tipoDetalle) {
this.tipoDetalle = tipoDetalle;
}
public EstadoResultado getEstadoResultado() {
return estadoResultado;
}
public void setEstadoResultado(EstadoResultado estadoResultado) {
this.estadoResultado = estadoResultado;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Detalle)) {
return false;
}
Detalle detalle = (Detalle) o;
return id == detalle.id &&
valor == detalle.valor &&
Objects.equals(descripcion, detalle.descripcion) &&
Objects.equals(tipoDetalle, detalle.tipoDetalle) &&
Objects.equals(estadoResultado, detalle.estadoResultado);
}
@Override
public int hashCode() {
return Objects.hash(id, valor, descripcion, tipoDetalle, estadoResultado);
}
@Override
public String toString() {
return "Detalle{" +
"id=" + id +
", valor=" + valor +
", descripcion='" + descripcion + '\'' +
", tipoDetalle=" + tipoDetalle +
", estadoResultado=" + estadoResultado +
'}';
}
}

View File

@@ -0,0 +1,17 @@
package danielcortes.xyz.models.detalle;
import danielcortes.xyz.models.estado_resultado.EstadoResultado;
import danielcortes.xyz.models.tipo_detalle.TipoDetalle;
import java.util.List;
import java.util.Optional;
public interface DetalleDAO {
List<Detalle> getAll();
List<Detalle> getByTipoDetalle(TipoDetalle tipoDetalle);
Optional<Detalle> getById(int id);
Optional<Detalle> getByEstadoResultado(EstadoResultado estadoResultado);
void insert(Detalle detalle);
void update(Detalle detalle);
void delete(Detalle detalle);
}

View File

@@ -0,0 +1,227 @@
package danielcortes.xyz.models.detalle;
import danielcortes.xyz.data.ConnectionHolder;
import danielcortes.xyz.data.DAOManager;
import danielcortes.xyz.data.SQLiteConnectionHolder;
import danielcortes.xyz.models.estado_resultado.EstadoResultado;
import danielcortes.xyz.models.tipo_detalle.TipoDetalle;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class SQLiteDetalleDAO implements DetalleDAO{
private static final Logger log = LogManager.getLogger(SQLiteDetalleDAO.class);
private ConnectionHolder connectionHolder;
public SQLiteDetalleDAO() {
this.connectionHolder = new SQLiteConnectionHolder();
}
public SQLiteDetalleDAO(ConnectionHolder connectionHolder) {
this.connectionHolder = connectionHolder;
}
@Override
public List<Detalle> getAll() {
log.debug("Se intentaran conseguir todos los Detalle");
List<Detalle> detalleList = new ArrayList<>();
String query = "select * from detalles";
try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
//Confio en que la base de datos mapeo correctamente el estado_resultado_id
@SuppressWarnings("OptionalGetWithoutIsPresent")
EstadoResultado estadoResultado= DAOManager.getEstadoResultadoDAO().getById(rs.getInt("estado_resultado_id")).get();
//Confio en que la base de datos mapeo correctamente el tipo_detalle_id
@SuppressWarnings("OptionalGetWithoutIsPresent")
TipoDetalle tipoDetalle = DAOManager.getTipoDetalleDAO().getById(rs.getInt("tipo_detalle_id")).get();
Detalle detalle = new Detalle();
detalle.setId(rs.getInt("id"));
detalle.setDescripcion(rs.getString("descripcion"));
detalle.setValor(rs.getInt("valor"));
detalle.setEstadoResultado(estadoResultado);
detalle.setTipoDetalle(tipoDetalle);
detalleList.add(detalle);
}
}
}
} catch (SQLException e) {
log.error("Error al intentar conseguir todos los Detalles de la base de datos", e);
}
log.debug("Se consiguieron " + detalleList.size() + " Detalles");
return detalleList;
}
@Override
public List<Detalle> getByTipoDetalle(TipoDetalle tipoDetalle) {
log.debug("Se intentaran conseguir los detalle pertenecientes al tipo detalle " + tipoDetalle);
List<Detalle> detalleList = new ArrayList<>();
if(tipoDetalle == TipoDetalle.EMPTY){
log.debug("El tipo detalle entregado era EMPTY");
return new ArrayList<>();
}
String query = "select * from detalles where tipo_detalle_id = ?";
try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)){
ps.setInt(1, tipoDetalle.getId());
try(ResultSet rs = ps.executeQuery()){
while(rs.next()){
//Confio en que la base de datos mapeo correctamente el estado_resultado_id
@SuppressWarnings("OptionalGetWithoutIsPresent")
EstadoResultado estadoResultado= DAOManager.getEstadoResultadoDAO().getById(rs.getInt("estado_resultado_id")).get();
Detalle detalle = new Detalle();
detalle.setId(rs.getInt("id"));
detalle.setDescripcion(rs.getString("descripcion"));
detalle.setValor(rs.getInt("valor"));
detalle.setEstadoResultado(estadoResultado);
detalle.setTipoDetalle(tipoDetalle);
}
}
}
}catch (SQLException e) {
log.error("Error al intentar conseguir los Detalles de la base de datos", e);
}
log.debug("Se consiguieron " + detalleList.size() + "Detalles");
return detalleList;
}
@Override
public Optional<Detalle> getById(int id) {
log.debug("Se intentaran conseguir el detalle con id " + id);
String query = "select * from detalles where id = ?";
Detalle detalle = null;
try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)){
ps.setInt(1, id);
try(ResultSet rs = ps.executeQuery()){
while(rs.next()){
//Confio en que la base de datos mapeo correctamente el estado_resultado_id
@SuppressWarnings("OptionalGetWithoutIsPresent")
EstadoResultado estadoResultado= DAOManager.getEstadoResultadoDAO().getById(rs.getInt("estado_resultado_id")).get();
//Confio en que la base de datos mapeo correctamente el tipo_detalle_id
@SuppressWarnings("OptionalGetWithoutIsPresent")
TipoDetalle tipoDetalle = DAOManager.getTipoDetalleDAO().getById(rs.getInt("tipo_detalle_id")).get();
detalle = new Detalle();
detalle.setId(id);
detalle.setDescripcion(rs.getString("descripcion"));
detalle.setValor(rs.getInt("valor"));
detalle.setEstadoResultado(estadoResultado);
detalle.setTipoDetalle(tipoDetalle);
}
}
}
}catch (SQLException e) {
log.error("Error al intentar conseguir el detalle con id " + id, e);
}
log.debug("Se consiguieron el detalle " + detalle);
return Optional.ofNullable(detalle);
}
@Override
public Optional<Detalle> getByEstadoResultado(EstadoResultado estadoResultado) {
log.debug("Se intentaran conseguir el detalle del estado resultado " + estadoResultado);
if(estadoResultado == estadoResultado.EMPTY){
log.debug("El estado resultado entregado era empty");
return Optional.empty();
}
String query = "select * from detalles where id = ?";
Detalle detalle = null;
try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)){
ps.setInt(1, estadoResultado.getId());
try(ResultSet rs = ps.executeQuery()){
while(rs.next()){
//Confio en que la base de datos mapeo correctamente el tipo_detalle_id
@SuppressWarnings("OptionalGetWithoutIsPresent")
TipoDetalle tipoDetalle = DAOManager.getTipoDetalleDAO().getById(rs.getInt("tipo_detalle_id")).get();
detalle = new Detalle();
detalle.setId(rs.getInt("id"));
detalle.setDescripcion(rs.getString("descripcion"));
detalle.setValor(rs.getInt("valor"));
detalle.setEstadoResultado(estadoResultado);
detalle.setTipoDetalle(tipoDetalle);
}
}
}
}catch (SQLException e) {
log.error("Error al intentar conseguir el detalle del estado resultado " + estadoResultado, e);
}
log.debug("Se consiguieron el detalle " + detalle);
return Optional.ofNullable(detalle);
}
@Override
public void insert(Detalle detalle) {
log.debug("Se intentara insertar un nuevo detalle" + detalle);
String query = "insert into detalles (valor, descripcion, tipo_detalle_id, estado_resultado_id) values (?, ?, ?, ?)";
try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
ps.setInt(1, detalle.getValor());
ps.setString(2, detalle.getDescripcion());
ps.setInt(3, detalle.getTipoDetalle().getId());
ps.setInt(4, detalle.getEstadoResultado().getId());
ps.executeUpdate();
}
try (PreparedStatement ps = conn.prepareStatement("select last_insert_rowid()")) {
try (ResultSet rs = ps.executeQuery()) {
rs.next();
detalle.setId(rs.getInt(1));
}
}
} catch (SQLException e) {
log.error("Error al intentar insertar el detalle " + detalle);
}
log.debug("Se inserto el detalle " + detalle);
}
@Override
public void update(Detalle detalle) {
log.debug("Se intentara actualizar el detalle" + detalle);
String query = "update detalles set valor = ?, descripcion = ?, tipo_detalle_id = ?, estado_resultado_id = ? where id = ?";
try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
ps.setInt(1, detalle.getValor());
ps.setString(2, detalle.getDescripcion());
ps.setInt(3, detalle.getTipoDetalle().getId());
ps.setInt(4, detalle.getEstadoResultado().getId());
ps.setInt(4, detalle.getId());
ps.executeUpdate();
}
} catch (SQLException e) {
log.error("Error al actualizar el detalle " + detalle, e);
}
log.debug("Se actualizo el detalle " + detalle);
}
@Override
public void delete(Detalle detalle) {
log.debug("Se intentara eliminar el detalle " + detalle);
String query = "delete from detalles where id = ?";
try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
ps.setInt(1, detalle.getId());
ps.execute();
}
} catch (SQLException e) {
log.error("Error al eliminar el detalle" + detalle, e);
}
log.debug("Se elimino el detalle " + detalle);
}
}

View File

@@ -82,6 +82,7 @@ public class SQLiteDocumentosDAO implements DocumentosDAO {
}
@Override
public Optional<Documentos> getById(int id) {
log.debug("Se intentara conseguir el Documentos con id " + id);
Documentos documentos = null;

View File

@@ -0,0 +1,95 @@
package danielcortes.xyz.models.tipo_detalle;
import danielcortes.xyz.data.ConnectionHolder;
import danielcortes.xyz.data.SQLiteConnectionHolder;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class SQLiteTipoDetalleDAO implements TipoDetalleDAO{
private static final Logger log = LogManager.getLogger(SQLiteTipoDetalleDAO.class);
private ConnectionHolder connectionHolder;
public SQLiteTipoDetalleDAO() {
this.connectionHolder = new SQLiteConnectionHolder();
}
public SQLiteTipoDetalleDAO(ConnectionHolder connectionHolder) {
this.connectionHolder = connectionHolder;
}
@Override
public List<TipoDetalle> getAll() {
log.debug("Se intentara conseguir todos los tipoDetalle");
List<TipoDetalle> tipoDetalleList = new ArrayList<>();
String query = "select * from tipos_detalle";
try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
TipoDetalle tipoDetalle = new TipoDetalle();
tipoDetalle.setId(rs.getInt("id"));
tipoDetalle.setNombre(rs.getString("nombre"));
tipoDetalleList.add(tipoDetalle);
}
}
}
} catch (SQLException e) {
log.error("Error al intentar conseguir todos los tipoDetalle", e);
}
log.debug("Se consiguieron " + tipoDetalleList.size() + " tipoDetalle");
return tipoDetalleList;
}
@Override
public Optional<TipoDetalle> getById(int id) {
log.debug("Se intentara conseguir un TipoDetalle con id " + id);
TipoDetalle tipoDetalle = null;
String query = "select * from tipos_detalle where id = ?";
try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
ps.setInt(1, id);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
tipoDetalle = new TipoDetalle();
tipoDetalle.setId(rs.getInt("id"));
tipoDetalle.setNombre(rs.getString("nombre"));
}
}
}
} catch (SQLException e) {
log.error("Error al intentar conseguir un TipoDetalle con id " + id, e);
}
log.debug("Se consiguio el tipoDetalle " + tipoDetalle);
return Optional.ofNullable(tipoDetalle);
}
@Override
public Optional<TipoDetalle> getByNombre(String nombre) {
log.debug("Se intentara conseguir un TipoDetalle con nombre" + nombre);
TipoDetalle tipoDetalle = null;
String query = "select * from tipos_detalle where nombre = ?";
try (Connection conn = connectionHolder.getConnection()) {
try (PreparedStatement ps = conn.prepareStatement(query)) {
ps.setString(1, nombre);
try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
tipoDetalle = new TipoDetalle();
tipoDetalle.setId(rs.getInt("id"));
tipoDetalle.setNombre(rs.getString("nombre"));
}
}
}
} catch (SQLException e) {
log.error("Error al intentar conseguir un TipoDetalle con nombre " + nombre, e);
}
log.debug("Se consigio el TipoDetalle " + tipoDetalle);
return Optional.ofNullable(tipoDetalle);
}
}

View File

@@ -0,0 +1,56 @@
package danielcortes.xyz.models.tipo_detalle;
import java.util.Objects;
public class TipoDetalle {
public static final TipoDetalle EMPTY;
static{
EMPTY = new TipoDetalle();
}
private int id;
private String nombre;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof TipoDetalle)) {
return false;
}
TipoDetalle that = (TipoDetalle) o;
return id == that.id &&
Objects.equals(nombre, that.nombre);
}
@Override
public int hashCode() {
return Objects.hash(id, nombre);
}
@Override
public String toString() {
return "TipoDetalle{" +
"id=" + id +
", nombre='" + nombre + '\'' +
'}';
}
}

View File

@@ -0,0 +1,28 @@
package danielcortes.xyz.models.tipo_detalle;
import java.util.List;
import java.util.Optional;
public interface TipoDetalleDAO {
/**
* Obtiene todos los tipo detalle
*
* @return Una lista con los tipo detalle obtenidos
*/
List<TipoDetalle> getAll();
/**
* Obtiene un tipo detalle por su id
* @return Dado que no puede que no exista se devuelve un Optional que puede contener el tipo
* detalle o puede estar vacio
*/
Optional<TipoDetalle> getById(int id);
/**
* Obtiene un tipo detalle por su nombre
* @return Dado que no puede que no exista se devuelve un Optional que puede contener el tipo
* detalle o puede estar vacio
*/
Optional<TipoDetalle> getByNombre(String nombre);
}