From 501a37c035a642b214b1a542f231fb01da80557c Mon Sep 17 00:00:00 2001 From: Isidoro Nevares Date: Tue, 20 Jan 2026 20:30:49 +0100 Subject: [PATCH] Cambios en gasto --- .../es/palomafp/aadd/inm/dao/IGastoDAO.java | 18 ----- .../aadd/inm/dao/hbm/IngresoDaoHibernate.java | 69 +++++++++++++++++++ .../inm/procesador/ProcesadorFicheroCSV.java | 67 ++++++++++++++++-- 3 files changed, 129 insertions(+), 25 deletions(-) delete mode 100644 src/main/java/es/palomafp/aadd/inm/dao/IGastoDAO.java create mode 100644 src/main/java/es/palomafp/aadd/inm/dao/hbm/IngresoDaoHibernate.java diff --git a/src/main/java/es/palomafp/aadd/inm/dao/IGastoDAO.java b/src/main/java/es/palomafp/aadd/inm/dao/IGastoDAO.java deleted file mode 100644 index 7370718..0000000 --- a/src/main/java/es/palomafp/aadd/inm/dao/IGastoDAO.java +++ /dev/null @@ -1,18 +0,0 @@ -package es.palomafp.aadd.inm.dao; - -import es.palomafp.aadd.inm.excepcion.ProyectosIESException; -import es.palomafp.aadd.inm.vo.Gasto; - -/** - * - * IGastoDAO: Interfaz que representa las operaciones a realizar con la entidad Gasto - * @author Isidoro Nevares Martín - IES Virgen de la Paloma - * @date 20 ene 2026 - * - * - */ - -public interface IGastoDAO extends IOperacionesDAOEntidad { - Gasto obtenerGastoPorNombre(String nombreGasto) throws ProyectosIESException; -} - diff --git a/src/main/java/es/palomafp/aadd/inm/dao/hbm/IngresoDaoHibernate.java b/src/main/java/es/palomafp/aadd/inm/dao/hbm/IngresoDaoHibernate.java new file mode 100644 index 0000000..e250c38 --- /dev/null +++ b/src/main/java/es/palomafp/aadd/inm/dao/hbm/IngresoDaoHibernate.java @@ -0,0 +1,69 @@ +package es.palomafp.aadd.inm.dao.hbm; + +import org.hibernate.Session; +import org.hibernate.Transaction; +import org.hibernate.query.SelectionQuery; + +import es.palomafp.aadd.inm.dao.IGastoDAO; +import es.palomafp.aadd.inm.excepcion.ProyectosIESException; +import es.palomafp.aadd.inm.gestor.GestorSesionesHibernate; +import es.palomafp.aadd.inm.vo.Gasto; + +/** + * + * ConceptoDaoHibernate: Clase que implementa el interfaz IOperacionesDAOEntidad + * + * @author Isidoro Nevares Martín - IES Virgen de la Paloma + * @date 31 oct 2025 + */ +public class IngresoDaoHibernate implements IGastoDAO { + + @Override + public void crearEntidad(Gasto entidad) throws ProyectosIESException { + Transaction transaccion = null; + Session sesion = null; + + try { + sesion = GestorSesionesHibernate.getSession(); + transaccion = sesion.beginTransaction(); + + sesion.persist(entidad); + + transaccion.commit(); + } catch (Exception e) { + if (transaccion != null && transaccion.isActive()) { + transaccion.rollback(); + } + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_INSERCION); + } finally { + if (sesion != null) { + sesion.close(); + } + } + + } + + @Override + public Gasto obtenerGastoPorNombre(String nombreGasto) throws ProyectosIESException { + Gasto gasto = null; + String sentenciaHQL = "SELECT g FROM Gasto g WHERE g.nombre = :nombre"; + + // try con recursos "cerrables": Session + try (Session sesion = GestorSesionesHibernate.getSession();) { + SelectionQuery sentenciaConsulta = sesion.createSelectionQuery(sentenciaHQL, Gasto.class); + sentenciaConsulta.setParameter("nombre", nombreGasto); + + gasto = sentenciaConsulta.getSingleResultOrNull(); + } catch (Exception e) { + throw new ProyectosIESException(e, this.getClass(), ProyectosIESException.ERROR_CONSULTA); + } + return gasto; + } + + @Override + public Gasto obtenerEntidadPorID(Integer clave) throws ProyectosIESException { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroCSV.java b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroCSV.java index a80882b..6161495 100644 --- a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroCSV.java +++ b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroCSV.java @@ -9,10 +9,12 @@ import java.time.LocalDate; import es.palomafp.aadd.inm.dao.IConceptoDAO; import es.palomafp.aadd.inm.dao.ICursoProyectoDAO; import es.palomafp.aadd.inm.dao.IGastoDAO; +import es.palomafp.aadd.inm.dao.IPatrocinadorDAO; import es.palomafp.aadd.inm.dao.IProyectoDAO; import es.palomafp.aadd.inm.dao.hbm.ConceptoDaoHibernate; import es.palomafp.aadd.inm.dao.hbm.CursoProyectoDaoHibernate; import es.palomafp.aadd.inm.dao.hbm.GastoDaoHibernate; +import es.palomafp.aadd.inm.dao.hbm.PatrocinadorDaoHibernate; import es.palomafp.aadd.inm.dao.hbm.ProyectoDaoHibernate; import es.palomafp.aadd.inm.dao.jpa.CursoProyectoDaoJPA; import es.palomafp.aadd.inm.dao.jpa.GastoDaoJPA; @@ -21,6 +23,7 @@ import es.palomafp.aadd.inm.vo.Concepto; import es.palomafp.aadd.inm.vo.CursoAcademico; import es.palomafp.aadd.inm.vo.CursoProyecto; import es.palomafp.aadd.inm.vo.Gasto; +import es.palomafp.aadd.inm.vo.Ingreso; import es.palomafp.aadd.inm.vo.Proyecto; import tools.jackson.databind.JsonNode; import tools.jackson.databind.node.ArrayNode; @@ -42,12 +45,66 @@ public class ProcesadorFicheroCSV { // Procesar la línea leída String[] campos = linea.split(","); // Suponiendo que el CSV tiene dos columnas: id, ingreso - String codCursoAcademico = campos[0]; + String codigoCurso = campos[0]; String nombreProyecto= campos[1]; + + IProyectoDAO proyectoDAO = new ProyectoDaoHibernate(); + Proyecto proyecto = proyectoDAO.obtenerProyectoPorNombre(nombreProyecto); + if(proyecto==null) { + // Inserción en PostgreSQL con Hibernate + proyectoDAO.crearEntidad(proyecto); + } + + // Se obtiene el CursoProyecto ya persistido + ICursoProyectoDAO operacionesDAOCursoProyecto = new CursoProyectoDaoHibernate(); + CursoProyecto cursoProyecto = operacionesDAOCursoProyecto.obtenerCursoProyectoPorCursoYProyecto(codigoCurso, + proyecto.getIdentificador()); + + // Si no existe en Hibernate + if (cursoProyecto==null) { + cursoProyecto= new CursoProyecto(); + CursoAcademico cursoAcademico = new CursoAcademico(); + cursoAcademico.setCodigo(codigoCurso); + cursoProyecto.setProyecto(proyecto); + // Inserción en PostgreSQL con Hibernate + operacionesDAOCursoProyecto.crearEntidad(cursoProyecto); + + // Inserción en ObjectDB con JPA + operacionesDAOCursoProyecto = new CursoProyectoDaoJPA(); + operacionesDAOCursoProyecto.crearEntidad(cursoProyecto); + + } + + + + // Información ingreso String nombrePatrocinador= campos[2]; - String ingreso = campos[3]; - String fecha= campos[4]; + String cantidadIngreso = campos[3]; + String observacion = campos[4]; + String fecha= campos[5]; + // Aquí iría la lógica para procesar cada línea + Ingreso ingreso= new Ingreso(); + ingreso.setCantidad(); + ingreso.setCursoProyecto(cursoProyecto); + ingreso.setFecha(null); + ingreso.setObservacion(observacion); + ingreso.setPatrocinador(null); + + // Tratmiento para ingresos + IPatrocinadorDAO patrocinadorDAO = new PatrocinadorDaoHibernate(); + Concepto concepto = conceptoDAO.obtenerConceptoPorNombre(nombreConcepto); + gasto.setConcepto(concepto); + gasto.setCursoProyecto(cursoProyecto); + + // Inserción en PostgreSQL con Hibernate + IIngresoDAO operacionesDAOGasto = new GastoDaoHibernate(); + operacionesDAOGasto.crearEntidad(gasto); + // Inserción en ObjectDB con JPA + operacionesDAOGasto = new GastoDaoJPA(); + operacionesDAOGasto.crearEntidad(gasto); + + System.out.println(codCursoAcademico+ nombreProyecto + nombrePatrocinador + ingreso + fecha ); } } catch (IOException e) { @@ -59,10 +116,6 @@ public class ProcesadorFicheroCSV { } /* - CursoAcademico cursoAcademico = new CursoAcademico(); - cursoAcademico.setCodigo(codigoCurso); - IProyectoDAO proyectoDAO = new ProyectoDaoHibernate(); - Proyecto proyecto = proyectoDAO.obtenerProyectoPorNombre(nombreProyecto); CursoProyecto cursoProyecto = new CursoProyecto(); cursoProyecto.setCursoAcademico(cursoAcademico);