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

@ -27,9 +27,11 @@ import com.imprimelibros.erp.presupuesto.classes.ImagenPresupuesto;
import com.imprimelibros.erp.presupuesto.classes.PresupuestadorItems;
import com.imprimelibros.erp.presupuesto.maquetacion.MaquetacionPrecios;
import com.imprimelibros.erp.presupuesto.maquetacion.MaquetacionPreciosRepository;
import com.imprimelibros.erp.presupuesto.marcapaginas.Marcapaginas;
import com.imprimelibros.erp.presupuesto.classes.PresupuestoMaquetacion;
import com.imprimelibros.erp.presupuesto.maquetacion.MaquetacionMatrices;
import com.imprimelibros.erp.presupuesto.classes.PresupuestoMarcapaginas;
import com.imprimelibros.erp.presupuesto.maquetacion.MaquetacionMatricesRepository;
import com.imprimelibros.erp.presupuesto.marcapaginas.MarcapaginasRepository;
import com.imprimelibros.erp.externalApi.skApiClient;
@Service
@ -50,6 +52,9 @@ public class PresupuestoService {
@Autowired
protected MaquetacionMatricesRepository maquetacionMatricesRepository;
@Autowired
protected MarcapaginasRepository marcapaginasRepository;
private final PresupuestadorItems presupuestadorItems;
public PresupuestoService(PresupuestadorItems presupuestadorItems) {
@ -607,7 +612,8 @@ public class PresupuestoService {
BigDecimal precio = BigDecimal.ZERO;
// millar_maquetacion * (numCaracteres / 1000.0)
BigDecimal millares = BigDecimal.valueOf(presupuestoMaquetacion.getNumCaracteres()).divide(BigDecimal.valueOf(1000), 6,
BigDecimal millares = BigDecimal.valueOf(presupuestoMaquetacion.getNumCaracteres()).divide(
BigDecimal.valueOf(1000), 6,
RoundingMode.HALF_UP);
precio = precio.add(millares.multiply(BigDecimal.valueOf(price.apply("millar_maquetacion"))));
@ -630,11 +636,14 @@ public class PresupuestoService {
// tabla, columna, foto
precio = precio
.add(BigDecimal.valueOf(presupuestoMaquetacion.getNumTablas()).multiply(BigDecimal.valueOf(price.apply("tabla"))));
.add(BigDecimal.valueOf(presupuestoMaquetacion.getNumTablas())
.multiply(BigDecimal.valueOf(price.apply("tabla"))));
precio = precio.add(
BigDecimal.valueOf(presupuestoMaquetacion.getNumColumnas()).multiply(BigDecimal.valueOf(price.apply("columnas"))));
BigDecimal.valueOf(presupuestoMaquetacion.getNumColumnas())
.multiply(BigDecimal.valueOf(price.apply("columnas"))));
precio = precio
.add(BigDecimal.valueOf(presupuestoMaquetacion.getNumFotos()).multiply(BigDecimal.valueOf(price.apply("foto"))));
.add(BigDecimal.valueOf(presupuestoMaquetacion.getNumFotos())
.multiply(BigDecimal.valueOf(price.apply("foto"))));
if (presupuestoMaquetacion.isCorreccionOrtotipografica()) {
precio = precio
@ -658,7 +667,12 @@ public class PresupuestoService {
out.put("numPaginasEstimadas", numPaginas);
out.put("precioPaginaEstimado", precioPaginaEstimado);
HashMap<String, String> language = new HashMap<>();
language.put("add_to_presupuesto", messageSource.getMessage("presupuesto.add-to-presupuesto", null, locale));
language.put("num_paginas_estimadas",
messageSource.getMessage("presupuesto.maquetacion.num-paginas-estimadas", null, locale));
language.put("precio_por_pagina_estimado",
messageSource.getMessage("presupuesto.maquetacion.precio-por-pagina-estimado", null, locale));
language.put("add_to_presupuesto",
messageSource.getMessage("presupuesto.add-to-presupuesto", null, locale));
language.put("cancel", messageSource.getMessage("app.cancelar", null, locale));
language.put("presupuesto_maquetacion", messageSource.getMessage("presupuesto.maquetacion", null, locale));
out.put("language", language);
@ -675,4 +689,92 @@ public class PresupuestoService {
return out;
}
public HashMap<String, Object> getPrecioMarcapaginas(PresupuestoMarcapaginas presupuestoMarcapaginas,
Locale locale) {
try {
List<Marcapaginas> m = marcapaginasRepository.findPrecios(presupuestoMarcapaginas);
if (m.isEmpty() || m.get(0) == null) {
HashMap<String, Object> out = new HashMap<>();
out.put("precio_unidad", 0.0);
out.put("precio_total", 0.0);
return out;
}
Marcapaginas marcapaginas = m.get(0);
Double precio = 0.0;
Double margen = 0.0;
Double pvp = 0.0;
BigDecimal data = BigDecimal.ZERO;
if (marcapaginas.getUnidades_max() >= presupuestoMarcapaginas.getUnidades()) {
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();
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();
pvp = precio + (precio * margen / 100);
data = new BigDecimal(pvp);
pvp = data.setScale(2, RoundingMode.HALF_UP).doubleValue();
} else {
// precio unidad para el máximo de unidades
precio = marcapaginas.getPrecio_unidades_max() / marcapaginas.getUnidades_max();
precio = precio * presupuestoMarcapaginas.getUnidades();
data = new BigDecimal(precio);
precio = data.setScale(2, RoundingMode.HALF_UP).doubleValue();
margen = 1.0 * marcapaginas.getMargen_unidades_max();
data = new BigDecimal(margen);
margen = data.setScale(2, RoundingMode.HALF_UP).doubleValue();
pvp = precio + (precio * margen / 100);
data = new BigDecimal(pvp);
pvp = data.setScale(2, RoundingMode.HALF_UP).doubleValue();
}
Double precio_unidad = pvp / presupuestoMarcapaginas.getUnidades();
data = new BigDecimal(precio_unidad);
precio_unidad = data.setScale(6, RoundingMode.HALF_UP).doubleValue();
HashMap<String, Object> resultado;
resultado = new HashMap<>();
resultado.put("precio_unitario", precio_unidad);
resultado.put("precio_total", pvp);
HashMap<String, String> language = new HashMap<>();
language.put("precio_unidad", messageSource.getMessage("presupuesto.marcapaginas.precio-unidad", null, locale));
language.put("precio_total", messageSource.getMessage("presupuesto.marcapaginas.precio-total", null, locale));
language.put("add_to_presupuesto",
messageSource.getMessage("presupuesto.add-to-presupuesto", null, locale));
language.put("cancel", messageSource.getMessage("app.cancelar", null, locale));
language.put("presupuesto_marcapaginas", messageSource.getMessage("presupuesto.marcapaginas", null, locale));
resultado.put("language", language);
return resultado;
} catch (Exception e) {
System.out.println("Error procesando presupuesto marcapaginas: " + e.getMessage());
}
HashMap<String, Object> out = new HashMap<>();
out.put("precio_unidad", 0.0);
out.put("precio_total", 0.0);
return out;
}
}