trabajando con las lineas del resumen para la tabla

This commit is contained in:
2025-09-23 20:28:33 +02:00
parent c1df92b840
commit 0d205f9488
9 changed files with 131 additions and 88 deletions

View File

@ -6,12 +6,14 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
import java.util.Locale;
import java.text.NumberFormat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.core.JsonProcessingException;
@ -774,13 +776,52 @@ public class PresupuestoService {
return out;
}
public Map<String, Object> getResumen(Presupuesto presupuesto, String[] servicios, Locale locale) {
Map<String, Object> resumen = new HashMap<>();
public Map<String, Object> getResumen(Presupuesto presupuesto, List<Map<String, Object>> servicios, Locale locale) {
Map<String, Object> resumen = new HashMap<>();
resumen.put("titulo", presupuesto.getTitulo());
resumen.put("texto", presupuestoFormatter.resumen(presupuesto, servicios, locale));
Presupuesto pressupuestoTemp = presupuesto.clone();
boolean hayDepositoLegal = servicios != null && servicios.stream()
.map(m -> java.util.Objects.toString(m.get("id"), "")) // null-safe -> String
.map(String::trim)
.anyMatch("deposito-legal"::equals);
if(hayDepositoLegal){
pressupuestoTemp.setSelectedTirada(presupuesto.getSelectedTirada()+4);
}
HashMap<String, Object> precios = this.calcularPresupuesto(pressupuestoTemp, locale);
if(precios.containsKey("error")){
resumen.put("error", precios.get("error"));
return resumen;
}
HashMap<String, Object> linea = new HashMap<>();
Double precio_unitario = 0.0;
Double precio_total = 0.0;
Integer counter = 0;
linea.put("descripcion", presupuestoFormatter.resumen(presupuesto, servicios, locale));
linea.put("cantidad", presupuesto.getSelectedTirada() != null ? presupuesto.getSelectedTirada() : 0);
precio_unitario = ((List<Double>) ((Map<String, Object>) precios.get("data")).get("precios"))
.get(0);
precio_total = precio_unitario * presupuesto.getSelectedTirada();
linea.put("precio_unitario", precio_unitario);
linea.put("precio_total", BigDecimal.valueOf(precio_total).setScale(2, RoundingMode.HALF_UP));
resumen.put("linea" + counter, linea);
counter++;
if(hayDepositoLegal) {
linea = new HashMap<>();
linea.put("descripcion", messageSource.getMessage("presupuesto.resumen-deposito-legal", null, locale));
linea.put("cantidad", 4);
linea.put("precio_unitario", precio_unitario);
linea.put("precio_total", BigDecimal.valueOf(precio_unitario * 4).setScale(2, RoundingMode.HALF_UP));
resumen.put("linea" + counter, linea);
counter++;
}
return resumen;
}