falta el selector de acabados

This commit is contained in:
Jaime Jiménez
2025-09-12 18:58:42 +02:00
parent cc8b30add6
commit 2798316745
11 changed files with 376 additions and 97 deletions

View File

@ -5,6 +5,7 @@ import static org.junit.jupiter.api.Assertions.*;
import java.util.Map;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
import java.util.List;
import org.slf4j.Logger;
@ -47,10 +48,10 @@ class presupuestoMarcapaginasTest {
// que 0");
}
public Map<String, Object> test() {
public HashMap<String, Object> test() {
PresupuestoMarcapaginas presupuestoMarcapaginas = new PresupuestoMarcapaginas();
presupuestoMarcapaginas.setUnidades(10000);
presupuestoMarcapaginas.setUnidades(1000);
presupuestoMarcapaginas.setTamanio(Marcapaginas.Tamanios._50x140_);
presupuestoMarcapaginas.setAcabado(Marcapaginas.Acabado.ninguno);
presupuestoMarcapaginas.setCarasImpresion(Marcapaginas.Caras_Impresion.una_cara);
@ -59,78 +60,7 @@ class presupuestoMarcapaginasTest {
Locale locale = Locale.getDefault();
List<Marcapaginas> m = marcapaginasRepository.findPrecios(presupuestoMarcapaginas);
if (m.isEmpty() || m.get(0) == null) {
System.out.println(
"⚠️ No se han encontrado precios para el presupuesto de marcapáginas: " + presupuestoMarcapaginas);
return Map.of("error", "No se han encontrado precios para el presupuesto de marcapáginas");
}
Marcapaginas marcapaginas = m.get(0);
if (marcapaginas.getUnidades_max() >= presupuestoMarcapaginas.getUnidades()) {
BigDecimal data = BigDecimal.ZERO;
Double precio = marcapaginas.getPrecio_unidades_min() +
(presupuestoMarcapaginas.getUnidades() - marcapaginas.getUnidades_min())
* (marcapaginas.getPrecio_unidades_max() - marcapaginas.getPrecio_unidades_min())
/ (marcapaginas.getUnidades_max() - marcapaginas.getUnidades_min());
data = new BigDecimal(precio);
precio = data.setScale(2, RoundingMode.HALF_UP).doubleValue();
Double margen = 1.0 * marcapaginas.getMargen_unidades_min() +
(1.0 * presupuestoMarcapaginas.getUnidades() - 1.0 * marcapaginas.getUnidades_min())
* (1.0 * marcapaginas.getMargen_unidades_max()
- 1.0 * marcapaginas.getMargen_unidades_min())
/ (1.0 * marcapaginas.getUnidades_max() - 1.0 * marcapaginas.getUnidades_min());
data = new BigDecimal(margen);
margen = data.setScale(2, RoundingMode.HALF_UP).doubleValue();
Double pvp = precio + (precio * margen / 100);
data = new BigDecimal(pvp);
pvp = data.setScale(2, RoundingMode.HALF_UP).doubleValue();
System.out.println("📦 Precio interpolado para " + presupuestoMarcapaginas.getUnidades() + " unidades: "
+ precio + " + " + margen + "% = " + pvp + " (" + marcapaginas.getPrecio_unidades_min() + " - "
+ marcapaginas.getPrecio_unidades_max() + ")");
Map<String, Object> resultado;
resultado = Map.of(
"precio", precio,
"margen", margen,
"pvp", pvp);
return resultado;
}
else {
BigDecimal data = BigDecimal.ZERO;
// precio unidad para el máximo de unidades
Double precio = marcapaginas.getPrecio_unidades_max() / marcapaginas.getUnidades_max();
precio = precio * presupuestoMarcapaginas.getUnidades();
data = new BigDecimal(precio);
precio = data.setScale(2, RoundingMode.HALF_UP).doubleValue();
Double margen = 1.0 * marcapaginas.getMargen_unidades_max();
data = new BigDecimal(margen);
margen = data.setScale(2, RoundingMode.HALF_UP).doubleValue();
Double pvp = precio + (precio * margen / 100);
data = new BigDecimal(pvp);
pvp = data.setScale(2, RoundingMode.HALF_UP).doubleValue();
System.out.println("📦 Precio interpolado para " + presupuestoMarcapaginas.getUnidades() + " unidades: "
+ precio + " + " + margen + "% = " + pvp + " (" + marcapaginas.getPrecio_unidades_min() + " - "
+ marcapaginas.getPrecio_unidades_max() + ")");
Map<String, Object> resultado;
resultado = Map.of(
"precio", precio,
"margen", margen,
"pvp", pvp);
return resultado;
}
return presupuestoService.getPrecioMarcapaginas(presupuestoMarcapaginas, locale);
}
}