diff --git a/backend/src/main/java/persistance/services/AlmacenamientoDAO.java b/backend/src/main/java/persistance/services/AlmacenamientoDAO.java index 7902943ed85fd6ffacfac508db22f99182812c25..93c1c075b263885e4d5a4ce95320a21249580b5a 100644 --- a/backend/src/main/java/persistance/services/AlmacenamientoDAO.java +++ b/backend/src/main/java/persistance/services/AlmacenamientoDAO.java @@ -148,51 +148,79 @@ public class AlmacenamientoDAO implements IAlmacenamiento { @Override @Transactional public List<BienFront> getProductos() { - String jpql = "SELECT b.id, b.nombre, b.tipo, i.precioUnitario, SUM(i.cantidad) " + + String jpql = "SELECT MIN(b.id), b.nombre, b.tipo, MAX(i.precioUnitario), SUM(i.cantidad) " + "FROM Ingrediente i " + - "JOIN Bien b ON i.idBien = b.id " + + "JOIN i.idBien b " + "WHERE b.tipo = 1 " + - "GROUP BY b.id, b.tipo, b.tipo, i.precioUnitario"; + "GROUP BY b.nombre, b.tipo"; - return entityManager.createQuery(jpql, BienFront.class).getResultList(); + List<Object[]> results = entityManager.createQuery(jpql, Object[].class).getResultList(); + + List<BienFront> bienFronts = new ArrayList<>(); + for (Object[] result : results) { + BienFront bienFront = new BienFront( + (Long) result[0], // id (aggregated) + (String) result[1], // nombre + (Bien.TipoBien) result[2], // tipo + (Double) result[3], // precioUnitario (max value per group) + ((Number) result[4]).doubleValue() // totalCantidad (sum per group) + ); + bienFronts.add(bienFront); + } + + return bienFronts; } @Override @Transactional public List<BienFront> getInsumos() { - String jpql = "SELECT b.id, b.nombre, b.tipo, i.precioUnitario, SUM(i.cantidad) " + + String jpql = "SELECT MIN(b.id), b.nombre, b.tipo, MAX(i.precioUnitario), SUM(i.cantidad) " + "FROM Ingrediente i " + - "JOIN Bien b ON i.idBien = b.id " + + "JOIN i.idBien b " + "WHERE b.tipo = 0 " + - "GROUP BY b.id, b.tipo, b.tipo, i.precioUnitario"; + "GROUP BY b.nombre, b.tipo"; - return entityManager.createQuery(jpql, BienFront.class).getResultList(); + List<Object[]> results = entityManager.createQuery(jpql, Object[].class).getResultList(); + + List<BienFront> bienFronts = new ArrayList<>(); + for (Object[] result : results) { + BienFront bienFront = new BienFront( + (Long) result[0], // id (aggregated) + (String) result[1], // nombre + (Bien.TipoBien) result[2], // tipo + (Double) result[3], // precioUnitario (max value per group) + ((Number) result[4]).doubleValue() // totalCantidad (sum per group) + ); + bienFronts.add(bienFront); + } + + return bienFronts; } @Override @Transactional public List<BienFront> getMatPrim() { - String jpql = "SELECT b.id, b.nombre, b.tipo, i.precioUnitario, SUM(i.cantidad) " + - "FROM Ingrediente i " + - "JOIN Bien b ON i.idBien = b.id " + - "WHERE b.tipo = 2 " + - "GROUP BY b.id, b.tipo, b.tipo, i.precioUnitario"; - List<Object[]> results = entityManager.createQuery(jpql, Object[].class) - .getResultList(); - - List<BienFront> bienFronts = new ArrayList<>(); - for (Object[] result : results) { - BienFront bienFront = new BienFront( - (Long) result[0], // id - (String) result[1], // nombre - (TipoBien) result[2], // tipo - (Double) result[3], // precioUnitario - ((Number) result[4]).doubleValue() // cantidad (SUM result) - ); - bienFronts.add(bienFront); - } - - return bienFronts; + String jpql = "SELECT MIN(b.id), b.nombre, b.tipo, MAX(i.precioUnitario), SUM(i.cantidad) " + + "FROM Ingrediente i " + + "JOIN i.idBien b " + + "WHERE b.tipo = 2 " + + "GROUP BY b.nombre, b.tipo"; + + List<Object[]> results = entityManager.createQuery(jpql, Object[].class).getResultList(); + + List<BienFront> bienFronts = new ArrayList<>(); + for (Object[] result : results) { + BienFront bienFront = new BienFront( + (Long) result[0], // id (aggregated) + (String) result[1], // nombre + (Bien.TipoBien) result[2], // tipo + (Double) result[3], // precioUnitario (max value per group) + ((Number) result[4]).doubleValue() // totalCantidad (sum per group) + ); + bienFronts.add(bienFront); + } + + return bienFronts; } }