From 77cc793ac147ae4b4286772ab103ff6a0405fa5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isidoro=20Nevares=20Mart=C3=ADn?= Date: Tue, 20 Jan 2026 19:35:34 +0100 Subject: [PATCH] Persistencia de Gastos --- .../es/palomafp/aadd/inm/AppProyectosIES.java | 8 +- .../inm/procesador/ProcesadorFicheroCSV.java | 79 ++++++++++++++++++- .../inm/procesador/ProcesadorFicheroJSON.java | 31 ++++---- src/main/resources/META-INF/persistence.xml | 2 +- src/main/resources/hibernate.cfg.xml | 2 +- 5 files changed, 97 insertions(+), 25 deletions(-) diff --git a/src/main/java/es/palomafp/aadd/inm/AppProyectosIES.java b/src/main/java/es/palomafp/aadd/inm/AppProyectosIES.java index af2f0f5..2dadc07 100644 --- a/src/main/java/es/palomafp/aadd/inm/AppProyectosIES.java +++ b/src/main/java/es/palomafp/aadd/inm/AppProyectosIES.java @@ -25,12 +25,12 @@ public class AppProyectosIES { delete from t_curso_proyecto; delete from t_concepto ; delete from t_patrocinador; + delete from t_curso_academico ; delete from t_proyecto ; - delete from t_proyecto */ // Generar la estructura de la base de datos en PostgreSQL - GestorSesionesHibernate.getSession(); + // GestorSesionesHibernate.getSession(); try { app.procesarFicheros(); @@ -65,11 +65,11 @@ public class AppProyectosIES { private void procesarFicheros() throws ProyectosIESException { // Procesar datos de catálogos ProcesadorFicheroXML procesadorFicheroXML = new ProcesadorFicheroXML(); - procesadorFicheroXML.procesarFicheroXMLCatalogos(); + // procesadorFicheroXML.procesarFicheroXMLCatalogos(); // Procesar datos de Gastos ProcesadorFicheroJSON procesadorFicheroJSON = new ProcesadorFicheroJSON(); - procesadorFicheroJSON.procesarFicheroJSONGastos(); + // procesadorFicheroJSON.procesarFicheroJSONGastos(); // Procesar datos de Ingresos ProcesadorFicheroCSV procesadorFicheroCSV = new ProcesadorFicheroCSV(); 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 f8023e9..a80882b 100644 --- a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroCSV.java +++ b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroCSV.java @@ -4,8 +4,26 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; +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.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.ProyectoDaoHibernate; +import es.palomafp.aadd.inm.dao.jpa.CursoProyectoDaoJPA; +import es.palomafp.aadd.inm.dao.jpa.GastoDaoJPA; import es.palomafp.aadd.inm.gestor.GestorFicheroConfiguracion; +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.Proyecto; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.node.ArrayNode; public class ProcesadorFicheroCSV { @@ -24,15 +42,72 @@ public class ProcesadorFicheroCSV { // Procesar la línea leída String[] campos = linea.split(","); // Suponiendo que el CSV tiene dos columnas: id, ingreso - String id = campos[0]; - String ingreso = campos[1]; + String codCursoAcademico = campos[0]; + String nombreProyecto= campos[1]; + String nombrePatrocinador= campos[2]; + String ingreso = campos[3]; + String fecha= campos[4]; // Aquí iría la lógica para procesar cada línea + System.out.println(codCursoAcademico+ nombreProyecto + nombrePatrocinador + ingreso + fecha ); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } + } + /* + CursoAcademico cursoAcademico = new CursoAcademico(); + cursoAcademico.setCodigo(codigoCurso); + IProyectoDAO proyectoDAO = new ProyectoDaoHibernate(); + Proyecto proyecto = proyectoDAO.obtenerProyectoPorNombre(nombreProyecto); + + CursoProyecto cursoProyecto = new CursoProyecto(); + cursoProyecto.setCursoAcademico(cursoAcademico); + cursoProyecto.setProyecto(proyecto); + + // Inserción en PostgreSQL con Hibernate + ICursoProyectoDAO operacionesDAOCursoProyecto = new CursoProyectoDaoHibernate(); + operacionesDAOCursoProyecto.crearEntidad(cursoProyecto); + // Inserción en ObjectDB con JPA + operacionesDAOCursoProyecto = new CursoProyectoDaoJPA(); + operacionesDAOCursoProyecto.crearEntidad(cursoProyecto); + + // Se obtiene el CursoProyecto ya persistido + cursoProyecto = operacionesDAOCursoProyecto.obtenerCursoProyectoPorCursoYProyecto(codigoCurso, + proyecto.getIdentificador()); + + JsonNode nodoGastos = root.get("gastos"); + // Se obtienen los nodos Gasto + ArrayNode nodosGasto = convertirJsonNodeEnArrayNode(nodoGastos); + + for (JsonNode gastoNode : nodosGasto) { + String nombreConcepto = gastoNode.get("concepto").asString(); + double precioUnitario = gastoNode.get("precio_unitario").asDouble(); + int unidades = gastoNode.get("unidades").asInt(); + String sFecha = gastoNode.get("fecha").asString(); + LocalDate fecha = LocalDate.parse(sFecha); + + Gasto gasto = new Gasto(); + gasto.setFecha(fecha); + gasto.setNumeroUnidades(unidades); + gasto.setPrecioUnidad(precioUnitario); + + // Obtener el concepto para asociárselo al gasto + IConceptoDAO conceptoDAO = new ConceptoDaoHibernate(); + Concepto concepto = conceptoDAO.obtenerConceptoPorNombre(nombreConcepto); + gasto.setConcepto(concepto); + gasto.setCursoProyecto(cursoProyecto); + + // Inserción en PostgreSQL con Hibernate + IGastoDAO operacionesDAOGasto = new GastoDaoHibernate(); + operacionesDAOGasto.crearEntidad(gasto); + // Inserción en ObjectDB con JPA + operacionesDAOGasto = new GastoDaoJPA(); + operacionesDAOGasto.crearEntidad(gasto); + } +*/ + } diff --git a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroJSON.java b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroJSON.java index b4f9397..a97fdc8 100644 --- a/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroJSON.java +++ b/src/main/java/es/palomafp/aadd/inm/procesador/ProcesadorFicheroJSON.java @@ -26,7 +26,6 @@ import tools.jackson.databind.node.ArrayNode; public class ProcesadorFicheroJSON { - public void procesarFicheroJSONGastos() throws ProyectosIESException { String rutaFichero = GestorFicheroConfiguracion.getValorfromClave("gastos.fichero.json.ruta"); File fichero = new File(rutaFichero); @@ -34,15 +33,15 @@ public class ProcesadorFicheroJSON { // Se asume que la información de Paises es correcta y ya existe en la BD ObjectMapper mapper = new ObjectMapper(); JsonNode root = mapper.readTree(fichero); - - String codigoCurso= root.get("curso").asString(); + + String codigoCurso = root.get("curso").asString(); String nombreProyecto = root.get("proyecto").asString(); - + CursoAcademico cursoAcademico = new CursoAcademico(); cursoAcademico.setCodigo(codigoCurso); IProyectoDAO proyectoDAO = new ProyectoDaoHibernate(); Proyecto proyecto = proyectoDAO.obtenerProyectoPorNombre(nombreProyecto); - + CursoProyecto cursoProyecto = new CursoProyecto(); cursoProyecto.setCursoAcademico(cursoAcademico); cursoProyecto.setProyecto(proyecto); @@ -55,14 +54,15 @@ public class ProcesadorFicheroJSON { operacionesDAOCursoProyecto.crearEntidad(cursoProyecto); // Se obtiene el CursoProyecto ya persistido - cursoProyecto = operacionesDAOCursoProyecto.obtenerCursoProyectoPorCursoYProyecto(codigoCurso, proyecto.getIdentificador()); - - JsonNode nodoGastos= root.get("gastos"); + cursoProyecto = operacionesDAOCursoProyecto.obtenerCursoProyectoPorCursoYProyecto(codigoCurso, + proyecto.getIdentificador()); + + JsonNode nodoGastos = root.get("gastos"); // Se obtienen los nodos Gasto - ArrayNode nodosGasto= convertirJsonNodeEnArrayNode(nodoGastos.get("gasto")); - + ArrayNode nodosGasto = convertirJsonNodeEnArrayNode(nodoGastos); + for (JsonNode gastoNode : nodosGasto) { - String nombreConcepto=gastoNode.get("concepto").asString(); + String nombreConcepto = gastoNode.get("concepto").asString(); double precioUnitario = gastoNode.get("precio_unitario").asDouble(); int unidades = gastoNode.get("unidades").asInt(); String sFecha = gastoNode.get("fecha").asString(); @@ -72,13 +72,13 @@ public class ProcesadorFicheroJSON { gasto.setFecha(fecha); gasto.setNumeroUnidades(unidades); gasto.setPrecioUnidad(precioUnitario); - + // Obtener el concepto para asociárselo al gasto IConceptoDAO conceptoDAO = new ConceptoDaoHibernate(); - Concepto concepto=conceptoDAO.obtenerConceptoPorNombre(nombreConcepto); + Concepto concepto = conceptoDAO.obtenerConceptoPorNombre(nombreConcepto); gasto.setConcepto(concepto); + gasto.setCursoProyecto(cursoProyecto); - // Inserción en PostgreSQL con Hibernate IGastoDAO operacionesDAOGasto = new GastoDaoHibernate(); operacionesDAOGasto.crearEntidad(gasto); @@ -87,9 +87,6 @@ public class ProcesadorFicheroJSON { operacionesDAOGasto.crearEntidad(gasto); } - - System.out.println("nodoGastos:" + nodoGastos); - } private ArrayNode convertirJsonNodeEnArrayNode(JsonNode node) { diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml index 45f19fc..80e6f17 100644 --- a/src/main/resources/META-INF/persistence.xml +++ b/src/main/resources/META-INF/persistence.xml @@ -21,7 +21,7 @@ - + diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml index f25735b..ad540b5 100644 --- a/src/main/resources/hibernate.cfg.xml +++ b/src/main/resources/hibernate.cfg.xml @@ -4,7 +4,7 @@ "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> - jdbc:postgresql://10.19.0.221:5432/proyectos_ies + jdbc:postgresql://10.13.0.130:5432/proyectos_ies org.postgresql.Driver org.hibernate.dialect.PostgreSQLDialect